def test_issue_40(): with raises(SystemExit): # i.e. shows help docopt('usage: prog --help-commands | --help', '--help') assert docopt('usage: prog --aabb | --aa', '--aa') == { '--aabb': False, '--aa': True }
def test_issue_85_any_option_multiple_subcommands(): docopt( 'usage:\n fs good [options]\n fs fail [options]\n\nOptions:\n --loglevel=<loglevel>\n', 'fail --loglevel 5') == { '--loglevel': '5', 'fail': True, 'good': False }
def test_default_value_for_positional_arguments(): # disabled right now assert docopt('usage: prog [<p>]\n\n<p> [default: x]', '') == \ {'<p>': None} # {'<p>': 'x'} assert docopt('usage: prog [<p>]...\n\n<p> [default: x y]', '') == \ {'<p>': []} # {'<p>': ['x', 'y']} assert docopt('usage: prog [<p>]...\n\n<p> [default: x y]', 'this') == \ {'<p>': ['this']}
def test_allow_double_dash(): assert docopt('usage: prog [-o] [--] <arg>\n\n-o', '-- -o') == { '-o': False, '<arg>': '-o', '--': True } assert docopt('usage: prog [-o] [--] <arg>\n\n-o', '-o 1') == { '-o': True, '<arg>': '1', '--': False } with raises(DocoptExit): docopt('usage: prog [-o] <arg>\n\n-o', '-- -o') # '--' not allowed
def test_count_multiple_flags(): assert docopt('usage: prog [-v]', '-v') == {'-v': True} assert docopt('usage: prog [-vv]', '') == {'-v': 0} assert docopt('usage: prog [-vv]', '-v') == {'-v': 1} assert docopt('usage: prog [-vv]', '-vv') == {'-v': 2} with raises(DocoptExit): docopt('usage: prog [-vv]', '-vvv') assert docopt('usage: prog [-v | -vv | -vvv]', '-vvv') == {'-v': 3} assert docopt('usage: prog -v...', '-vvvvvv') == {'-v': 6} assert docopt('usage: prog [--ver --ver]', '--ver --ver') == {'--ver': 2}
def test_options_first(): assert docopt('usage: prog [--opt] [<args>...]', '--opt this that') == { '--opt': True, '<args>': ['this', 'that'] } assert docopt('usage: prog [--opt] [<args>...]', 'this that --opt') == { '--opt': True, '<args>': ['this', 'that'] } assert docopt('usage: prog [--opt] [<args>...]', 'this that --opt', options_first=True) == { '--opt': False, '<args>': ['this', 'that', '--opt'] }
def test_docopt(): doc = '''Usage: prog [-v] A -v Be verbose.''' assert docopt(doc, 'arg') == {'-v': False, 'A': 'arg'} assert docopt(doc, '-v arg') == {'-v': True, 'A': 'arg'} doc = """Usage: prog [-vqr] [FILE] prog INPUT OUTPUT prog --help Options: -v print status messages -q report only file names -r show all occurrences of the same error --help """ a = docopt(doc, '-v file.py') assert a == { '-v': True, '-q': False, '-r': False, '--help': False, 'FILE': 'file.py', 'INPUT': None, 'OUTPUT': None } a = docopt(doc, '-v') assert a == { '-v': True, '-q': False, '-r': False, '--help': False, 'FILE': None, 'INPUT': None, 'OUTPUT': None } with raises(DocoptExit): # does not match docopt(doc, '-v input.py output.py') with raises(DocoptExit): docopt(doc, '--fake') with raises(SystemExit): docopt(doc, '--hel')
def test_commands(): assert docopt('Usage: prog add', 'add') == {'add': True} assert docopt('Usage: prog [add]', '') == {'add': False} assert docopt('Usage: prog [add]', 'add') == {'add': True} assert docopt('Usage: prog (add|rm)', 'add') == {'add': True, 'rm': False} assert docopt('Usage: prog (add|rm)', 'rm') == {'add': False, 'rm': True} assert docopt('Usage: prog a b', 'a b') == {'a': True, 'b': True} with raises(DocoptExit): docopt('Usage: prog a b', 'b a')
def test_issue_68_options_shortcut_does_not_include_options_in_usage_patter(): args = docopt('usage: prog [-ab] [options]\n\n-x\n-y', '-ax') # Need to use `is` (not `==`) since we want to make sure # that they are not 1/0, but strictly True/False: assert args['-a'] is True assert args['-b'] is False assert args['-x'] is True assert args['-y'] is False
def test_count_multiple_commands(): assert docopt('usage: prog [go]', 'go') == {'go': True} assert docopt('usage: prog [go go]', '') == {'go': 0} assert docopt('usage: prog [go go]', 'go') == {'go': 1} assert docopt('usage: prog [go go]', 'go go') == {'go': 2} with raises(DocoptExit): docopt('usage: prog [go go]', 'go go go') assert docopt('usage: prog go...', 'go go go go go') == {'go': 5}
def test_short_options_error_handling(): with raises(DocoptLanguageError): docopt('Usage: prog -x\n\n-x this\n-x that') # with raises(DocoptLanguageError): # docopt('Usage: prog -x') with raises(DocoptExit): docopt('Usage: prog', '-x') with raises(DocoptLanguageError): docopt('Usage: prog -o\n\n-o ARG') with raises(DocoptExit): docopt('Usage: prog -o ARG\n\n-o ARG', '-o')
def test_any_options_parameter(): with raises(DocoptExit): docopt('usage: prog [options]', '-foo --bar --spam=eggs') # assert docopt('usage: prog [options]', '-foo --bar --spam=eggs', # any_options=True) == {'-f': True, '-o': 2, # '--bar': True, '--spam': 'eggs'} with raises(DocoptExit): docopt('usage: prog [options]', '--foo --bar --bar') # assert docopt('usage: prog [options]', '--foo --bar --bar', # any_options=True) == {'--foo': True, '--bar': 2} with raises(DocoptExit): docopt('usage: prog [options]', '--bar --bar --bar -ffff') # assert docopt('usage: prog [options]', '--bar --bar --bar -ffff', # any_options=True) == {'--bar': 3, '-f': 4} with raises(DocoptExit): docopt('usage: prog [options]', '--long=arg --long=another')
def test_long_options_error_handling(): # with raises(DocoptLanguageError): # docopt('Usage: prog --non-existent', '--non-existent') # with raises(DocoptLanguageError): # docopt('Usage: prog --non-existent') with raises(DocoptExit): docopt('Usage: prog', '--non-existent') with raises(DocoptExit): docopt( '''Usage: prog [--version --verbose]\n\n --version\n--verbose''', '--ver') with raises(DocoptLanguageError): docopt('Usage: prog --long\n\n--long ARG') with raises(DocoptExit): docopt('Usage: prog --long ARG\n\n--long ARG', '--long') with raises(DocoptLanguageError): docopt('Usage: prog --long=ARG\n\n--long') with raises(DocoptExit): docopt('Usage: prog --long\n\n--long', '--long=ARG')
def test_matching_paren(): with raises(DocoptLanguageError): docopt('Usage: prog [a [b]') with raises(DocoptLanguageError): docopt('Usage: prog [a [b] ] c )')
def test_issue_65_evaluate_argv_when_called_not_when_imported(): import sys sys.argv = 'prog -a'.split() assert docopt('usage: prog [-ab]') == {'-a': True, '-b': False} sys.argv = 'prog -b'.split() assert docopt('usage: prog [-ab]') == {'-a': False, '-b': True}
def test_language_errors(): with raises(DocoptLanguageError): docopt('no usage with colon here') with raises(DocoptLanguageError): docopt('usage: here \n\n and again usage: here')
def test_issue34_unicode_strings(): try: assert docopt(eval("u'usage: prog [-o <a>]'"), '') == \ {'-o': False, '<a>': None} except SyntaxError: pass # Python 3
def test_issue_59(): assert docopt('usage: prog --long=<a>', '--long=') == {'--long': ''} assert docopt('usage: prog -l <a>\n\n-l <a>', ['-l', '']) == {'-l': ''}
def test_options_shortcut_does_not_add_options_to_patter_second_time(): assert docopt('usage: prog [options] [-a]\n\n-a -b', '-a') == \ {'-a': True, '-b': False} with raises(DocoptExit): docopt('usage: prog [options] [-a]\n\n-a -b', '-aa')