Add tests
This commit is contained in:
parent
343ba48445
commit
fda4c0681f
23
pargs.py
23
pargs.py
@ -4,9 +4,9 @@ import sys
|
|||||||
def parse_args(argv=None):
|
def parse_args(argv=None):
|
||||||
"""
|
"""
|
||||||
Returns a tuple of (args, kwargs) from a given list of command line arguments.
|
Returns a tuple of (args, kwargs) from a given list of command line arguments.
|
||||||
|
Defaults to using `sys.argv`.
|
||||||
"""
|
"""
|
||||||
argv = argv if argv else sys.argv
|
argv = argv if argv else sys.argv
|
||||||
print(argv)
|
|
||||||
|
|
||||||
args = []
|
args = []
|
||||||
for arg in argv:
|
for arg in argv:
|
||||||
@ -24,10 +24,10 @@ def parse_args(argv=None):
|
|||||||
if len(values):
|
if len(values):
|
||||||
kwargs[key] = values
|
kwargs[key] = values
|
||||||
values = []
|
values = []
|
||||||
key = arg.lstrip('-').replace('-', '_')
|
key = arg[:2].lstrip('-') + arg[2:].replace('-', '_')
|
||||||
if arg.startswith('--'):
|
if arg.startswith('--'):
|
||||||
if '=' in arg:
|
if '=' in arg:
|
||||||
key, value = arg.split('=')
|
key, value = key.split('=')
|
||||||
values.append(value)
|
values.append(value)
|
||||||
kwargs[key] = values
|
kwargs[key] = values
|
||||||
else:
|
else:
|
||||||
@ -35,22 +35,7 @@ def parse_args(argv=None):
|
|||||||
elif arg.startswith('-'):
|
elif arg.startswith('-'):
|
||||||
for k in key:
|
for k in key:
|
||||||
kwargs[k] = True
|
kwargs[k] = True
|
||||||
|
key = arg[-1]
|
||||||
if len(values):
|
if len(values):
|
||||||
kwargs[key] = values
|
kwargs[key] = values
|
||||||
return (args, kwargs)
|
return (args, kwargs)
|
||||||
|
|
||||||
|
|
||||||
if __name__ == '__main__':
|
|
||||||
args, kwargs = parse_args([
|
|
||||||
'/home/pat/Git/pargs/pargs.py',
|
|
||||||
'command',
|
|
||||||
'positional',
|
|
||||||
'--flag',
|
|
||||||
'--optional=value',
|
|
||||||
'test',
|
|
||||||
'--output',
|
|
||||||
'filename',
|
|
||||||
'-flg'
|
|
||||||
])
|
|
||||||
print(args)
|
|
||||||
print(kwargs)
|
|
||||||
@ -1,10 +0,0 @@
|
|||||||
import sys
|
|
||||||
import pytest
|
|
||||||
from pargs import parse_args
|
|
||||||
|
|
||||||
|
|
||||||
def test_get_appname():
|
|
||||||
_input = 'appname command positional --flag --optional=value'
|
|
||||||
args, kwargs = parse_args(_input.split())
|
|
||||||
assert args == ['appname', 'command', 'positional']
|
|
||||||
# assert kwargs == {'flag': True, 'optional': 'value'}
|
|
||||||
92
tests/test_functionality.py
Normal file
92
tests/test_functionality.py
Normal file
@ -0,0 +1,92 @@
|
|||||||
|
import sys
|
||||||
|
import pytest
|
||||||
|
from unittest import mock
|
||||||
|
from pargs 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_multiple_options():
|
||||||
|
args, kwargs = parse_args(['-a', '-i', 'a', 'b'])
|
||||||
|
assert args == []
|
||||||
|
assert kwargs == {
|
||||||
|
'a': True,
|
||||||
|
'i': ['a', 'b']
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
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', ((
|
||||||
|
['/pargs/pargs.py', 'command', 'positional', '--flag', '--optional=value', 'test', '--output-file', 'filename', '-flg', 'name', 'name2'],
|
||||||
|
['/pargs/pargs.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
|
||||||
Loading…
x
Reference in New Issue
Block a user