129 lines
4.1 KiB
Python
129 lines
4.1 KiB
Python
import pytest
|
|
|
|
from falyx.exceptions import CommandArgumentError
|
|
from falyx.parsers import ArgumentAction, CommandArgumentParser
|
|
|
|
|
|
@pytest.mark.asyncio
|
|
async def test_posix_bundling():
|
|
"""Test the bundling of short options in the POSIX style."""
|
|
parser = CommandArgumentParser()
|
|
parser.add_argument(
|
|
"-a", "--alpha", action=ArgumentAction.STORE_FALSE, help="Alpha option"
|
|
)
|
|
parser.add_argument(
|
|
"-b", "--beta", action=ArgumentAction.STORE_TRUE, help="Beta option"
|
|
)
|
|
parser.add_argument(
|
|
"-c", "--charlie", action=ArgumentAction.STORE_TRUE, help="Charlie option"
|
|
)
|
|
|
|
# Test valid bundling
|
|
args = await parser.parse_args(["-abc"])
|
|
assert args["alpha"] is False
|
|
assert args["beta"] is True
|
|
assert args["charlie"] is True
|
|
|
|
|
|
@pytest.mark.asyncio
|
|
async def test_posix_bundling_last_has_value():
|
|
"""Test the bundling of short options in the POSIX style with last option having a value."""
|
|
parser = CommandArgumentParser()
|
|
parser.add_argument(
|
|
"-a", "--alpha", action=ArgumentAction.STORE_TRUE, help="Alpha option"
|
|
)
|
|
parser.add_argument(
|
|
"-b", "--beta", action=ArgumentAction.STORE_TRUE, help="Beta option"
|
|
)
|
|
parser.add_argument(
|
|
"-c", "--charlie", action=ArgumentAction.STORE, help="Charlie option"
|
|
)
|
|
|
|
# Test valid bundling with last option having a value
|
|
args = await parser.parse_args(["-abc", "value"])
|
|
assert args["alpha"] is True
|
|
assert args["beta"] is True
|
|
assert args["charlie"] == "value"
|
|
|
|
|
|
@pytest.mark.asyncio
|
|
async def test_posix_bundling_invalid():
|
|
"""Test the bundling of short options in the POSIX style with invalid cases."""
|
|
parser = CommandArgumentParser()
|
|
parser.add_argument(
|
|
"-a", "--alpha", action=ArgumentAction.STORE_FALSE, help="Alpha option"
|
|
)
|
|
parser.add_argument(
|
|
"-b", "--beta", action=ArgumentAction.STORE_TRUE, help="Beta option"
|
|
)
|
|
parser.add_argument(
|
|
"-c", "--charlie", action=ArgumentAction.STORE, help="Charlie option"
|
|
)
|
|
|
|
# Test invalid bundling
|
|
args = await parser.parse_args(["-abc", "value"])
|
|
assert args["alpha"] is False
|
|
assert args["beta"] is True
|
|
assert args["charlie"] == "value"
|
|
|
|
with pytest.raises(CommandArgumentError):
|
|
await parser.parse_args(["-a", "value"])
|
|
with pytest.raises(CommandArgumentError):
|
|
await parser.parse_args(["-b", "value"])
|
|
|
|
args = await parser.parse_args(["-c", "value"])
|
|
assert args["alpha"] is True
|
|
assert args["beta"] is False
|
|
assert args["charlie"] == "value"
|
|
|
|
with pytest.raises(CommandArgumentError):
|
|
await parser.parse_args(["-cab", "value"])
|
|
|
|
with pytest.raises(CommandArgumentError):
|
|
await parser.parse_args(["-a", "-b", "value"])
|
|
|
|
with pytest.raises(CommandArgumentError):
|
|
await parser.parse_args(["-dbc", "value"])
|
|
|
|
with pytest.raises(CommandArgumentError):
|
|
args = await parser.parse_args(["-c"])
|
|
|
|
with pytest.raises(CommandArgumentError):
|
|
await parser.parse_args(["-abc"])
|
|
|
|
|
|
@pytest.mark.asyncio
|
|
async def test_posix_bundling_fuzz():
|
|
"""Test the bundling of short options in the POSIX style with fuzzing."""
|
|
parser = CommandArgumentParser()
|
|
parser.add_argument(
|
|
"-a", "--alpha", action=ArgumentAction.STORE_FALSE, help="Alpha option"
|
|
)
|
|
|
|
with pytest.raises(CommandArgumentError):
|
|
await parser.parse_args(["-"])
|
|
|
|
with pytest.raises(CommandArgumentError):
|
|
await parser.parse_args(["--"])
|
|
|
|
with pytest.raises(CommandArgumentError):
|
|
await parser.parse_args(["--=value"])
|
|
|
|
with pytest.raises(CommandArgumentError):
|
|
await parser.parse_args(["--flag="])
|
|
|
|
with pytest.raises(CommandArgumentError):
|
|
await parser.parse_args(["-a=b"])
|
|
|
|
with pytest.raises(CommandArgumentError):
|
|
await parser.parse_args(["---"])
|
|
|
|
with pytest.raises(CommandArgumentError):
|
|
await parser.parse_args(["-a", "-b", "-c"])
|
|
|
|
with pytest.raises(CommandArgumentError):
|
|
await parser.parse_args(["-a", "--", "-b", "-c"])
|
|
|
|
with pytest.raises(CommandArgumentError):
|
|
await parser.parse_args(["-a", "--flag", "-b", "-c"])
|