102 lines
2.5 KiB
Python
102 lines
2.5 KiB
Python
import sys
|
|
import pytest
|
|
from unittest import mock
|
|
from pargv import parse_args
|
|
|
|
|
|
def test_no_argv():
|
|
with mock.patch('sys.argv', []):
|
|
args, kwargs = parse_args()
|
|
assert args == []
|
|
assert kwargs == {}
|
|
|
|
|
|
def test_use_sys_argv_by_default():
|
|
with mock.patch('sys.argv', ['app', 'command', '--option=one', 'two', '--flag', '-io']):
|
|
args, kwargs = parse_args()
|
|
assert args == ['app', 'command']
|
|
assert kwargs == {
|
|
'option': ['one', 'two'],
|
|
'flag': True,
|
|
'i': True,
|
|
'o': True
|
|
}
|
|
|
|
|
|
def test_single_positional_argument():
|
|
args, kwargs = parse_args(['app'])
|
|
assert args == ['app']
|
|
assert kwargs == {}
|
|
|
|
|
|
def test_positional_arguments():
|
|
args, kwargs = parse_args(['app', 'command'])
|
|
assert args == ['app', 'command']
|
|
assert kwargs == {}
|
|
|
|
|
|
def test_one_positional_and_optional_argument():
|
|
args, kwargs = parse_args(['app', '--help'])
|
|
assert args == ['app']
|
|
assert kwargs == {'help': True}
|
|
|
|
|
|
def test_positional_and_optional_arguments():
|
|
args, kwargs = parse_args(['app', 'command', '--inputfile', '--outputfile'])
|
|
assert args == ['app', 'command']
|
|
assert kwargs == {
|
|
'inputfile': True,
|
|
'outputfile': True
|
|
}
|
|
|
|
|
|
def test_short_arg_with_single_option():
|
|
args, kwargs = parse_args(['-a', 'b', '--abc', 'd'])
|
|
assert args == []
|
|
assert kwargs == {
|
|
'a': 'b',
|
|
'abc': 'd',
|
|
}
|
|
|
|
|
|
def test_short_arg_with_multiple_options():
|
|
args, kwargs = parse_args(['-i', 'a', 'b', '--input', 'c', 'd'])
|
|
assert args == []
|
|
assert kwargs == {
|
|
'i': ['a', 'b'],
|
|
'input': ['c', 'd']
|
|
}
|
|
|
|
|
|
def test_long_args_with_equals():
|
|
args, kwargs = parse_args(['--input-file=a.py', '--output-file=b.py'])
|
|
assert args == []
|
|
assert kwargs == {
|
|
'input_file': 'a.py',
|
|
'output_file': 'b.py'
|
|
}
|
|
|
|
|
|
def test_unintended_hyphen():
|
|
args, kwargs = parse_args(['---triple-hyphen-'])
|
|
assert args == []
|
|
assert kwargs == {'_triple_hyphen_': True}
|
|
|
|
|
|
@pytest.mark.parametrize('argv, args, kwargs', ((
|
|
['/pargv/pargv.py', 'command', 'positional', '--flag', '--optional=value', 'test', '--output-file', 'filename', '-flg', 'name', 'name2'],
|
|
['/pargv/pargv.py', 'command', 'positional'],
|
|
{
|
|
'flag': True,
|
|
'optional': ['value', 'test'],
|
|
'output_file': 'filename',
|
|
'f': True,
|
|
'l': True,
|
|
'g': ['name', 'name2'],
|
|
}
|
|
),))
|
|
def test_all_parameters_at_once(argv, args, kwargs):
|
|
_args, _kwargs = parse_args(argv)
|
|
assert _args == args
|
|
assert _kwargs == kwargs
|