1ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh# Author: Steven J. Bethard <steven.bethard@gmail.com>. 2ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh 3ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsiehimport codecs 4ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsiehimport inspect 5ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsiehimport os 6ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsiehimport shutil 7ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsiehimport stat 8ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsiehimport sys 9ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsiehimport textwrap 10ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsiehimport tempfile 11ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsiehimport unittest 12ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsiehimport argparse 13ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh 14ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsiehfrom StringIO import StringIO 15ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh 16ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsiehclass StdIOBuffer(StringIO): 17ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh pass 18ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh 19ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsiehfrom test import test_support 20ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh 21ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsiehclass TestCase(unittest.TestCase): 22ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh 23ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh def assertEqual(self, obj1, obj2): 24ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh if obj1 != obj2: 25ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh print('') 26ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh print(repr(obj1)) 27ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh print(repr(obj2)) 28ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh print(obj1) 29ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh print(obj2) 30ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh super(TestCase, self).assertEqual(obj1, obj2) 31ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh 32ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh def setUp(self): 33ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh # The tests assume that line wrapping occurs at 80 columns, but this 34ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh # behaviour can be overridden by setting the COLUMNS environment 35ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh # variable. To ensure that this assumption is true, unset COLUMNS. 36ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh env = test_support.EnvironmentVarGuard() 37ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh env.unset("COLUMNS") 38ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh self.addCleanup(env.__exit__) 39ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh 40ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh 41ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsiehclass TempDirMixin(object): 42ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh 43ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh def setUp(self): 44ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh self.temp_dir = tempfile.mkdtemp() 45ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh self.old_dir = os.getcwd() 46ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh os.chdir(self.temp_dir) 47ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh 48ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh def tearDown(self): 49ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh os.chdir(self.old_dir) 50ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh shutil.rmtree(self.temp_dir, True) 51ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh 52ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh def create_readonly_file(self, filename): 53ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh file_path = os.path.join(self.temp_dir, filename) 54ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh with open(file_path, 'w') as file: 55ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh file.write(filename) 56ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh os.chmod(file_path, stat.S_IREAD) 57ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh 58ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsiehclass Sig(object): 59ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh 60ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh def __init__(self, *args, **kwargs): 61ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh self.args = args 62ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh self.kwargs = kwargs 63ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh 64ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh 65ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsiehclass NS(object): 66ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh 67ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh def __init__(self, **kwargs): 68ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh self.__dict__.update(kwargs) 69ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh 70ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh def __repr__(self): 71ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh sorted_items = sorted(self.__dict__.items()) 72ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh kwarg_str = ', '.join(['%s=%r' % tup for tup in sorted_items]) 73ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh return '%s(%s)' % (type(self).__name__, kwarg_str) 74ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh 75ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh __hash__ = None 76ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh 77ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh def __eq__(self, other): 78ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh return vars(self) == vars(other) 79ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh 80ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh def __ne__(self, other): 81ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh return not (self == other) 82ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh 83ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh 84ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsiehclass ArgumentParserError(Exception): 85ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh 86ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh def __init__(self, message, stdout=None, stderr=None, error_code=None): 87ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh Exception.__init__(self, message, stdout, stderr) 88ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh self.message = message 89ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh self.stdout = stdout 90ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh self.stderr = stderr 91ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh self.error_code = error_code 92ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh 93ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh 94ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsiehdef stderr_to_parser_error(parse_args, *args, **kwargs): 95ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh # if this is being called recursively and stderr or stdout is already being 96ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh # redirected, simply call the function and let the enclosing function 97ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh # catch the exception 98ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh if isinstance(sys.stderr, StdIOBuffer) or isinstance(sys.stdout, StdIOBuffer): 99ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh return parse_args(*args, **kwargs) 100ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh 101ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh # if this is not being called recursively, redirect stderr and 102ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh # use it as the ArgumentParserError message 103ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh old_stdout = sys.stdout 104ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh old_stderr = sys.stderr 105ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh sys.stdout = StdIOBuffer() 106ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh sys.stderr = StdIOBuffer() 107ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh try: 108ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh try: 109ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh result = parse_args(*args, **kwargs) 110ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh for key in list(vars(result)): 111ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh if getattr(result, key) is sys.stdout: 112ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh setattr(result, key, old_stdout) 113ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh if getattr(result, key) is sys.stderr: 114ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh setattr(result, key, old_stderr) 115ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh return result 116ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh except SystemExit: 117ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh code = sys.exc_info()[1].code 118ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh stdout = sys.stdout.getvalue() 119ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh stderr = sys.stderr.getvalue() 120ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh raise ArgumentParserError("SystemExit", stdout, stderr, code) 121ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh finally: 122ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh sys.stdout = old_stdout 123ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh sys.stderr = old_stderr 124ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh 125ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh 126ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsiehclass ErrorRaisingArgumentParser(argparse.ArgumentParser): 127ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh 128ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh def parse_args(self, *args, **kwargs): 129ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh parse_args = super(ErrorRaisingArgumentParser, self).parse_args 130ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh return stderr_to_parser_error(parse_args, *args, **kwargs) 131ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh 132ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh def exit(self, *args, **kwargs): 133ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh exit = super(ErrorRaisingArgumentParser, self).exit 134ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh return stderr_to_parser_error(exit, *args, **kwargs) 135ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh 136ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh def error(self, *args, **kwargs): 137ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh error = super(ErrorRaisingArgumentParser, self).error 138ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh return stderr_to_parser_error(error, *args, **kwargs) 139ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh 140ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh 141ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsiehclass ParserTesterMetaclass(type): 142ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh """Adds parser tests using the class attributes. 143ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh 144ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh Classes of this type should specify the following attributes: 145ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh 146ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh argument_signatures -- a list of Sig objects which specify 147ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh the signatures of Argument objects to be created 148ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh failures -- a list of args lists that should cause the parser 149ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh to fail 150ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh successes -- a list of (initial_args, options, remaining_args) tuples 151ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh where initial_args specifies the string args to be parsed, 152ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh options is a dict that should match the vars() of the options 153ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh parsed out of initial_args, and remaining_args should be any 154ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh remaining unparsed arguments 155ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh """ 156ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh 157ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh def __init__(cls, name, bases, bodydict): 158ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh if name == 'ParserTestCase': 159ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh return 160ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh 161ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh # default parser signature is empty 162ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh if not hasattr(cls, 'parser_signature'): 163ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh cls.parser_signature = Sig() 164ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh if not hasattr(cls, 'parser_class'): 165ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh cls.parser_class = ErrorRaisingArgumentParser 166ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh 167ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh # --------------------------------------- 168ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh # functions for adding optional arguments 169ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh # --------------------------------------- 170ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh def no_groups(parser, argument_signatures): 171ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh """Add all arguments directly to the parser""" 172ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh for sig in argument_signatures: 173ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh parser.add_argument(*sig.args, **sig.kwargs) 174ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh 175ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh def one_group(parser, argument_signatures): 176ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh """Add all arguments under a single group in the parser""" 177ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh group = parser.add_argument_group('foo') 178ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh for sig in argument_signatures: 179ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh group.add_argument(*sig.args, **sig.kwargs) 180ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh 181ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh def many_groups(parser, argument_signatures): 182ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh """Add each argument in its own group to the parser""" 183ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh for i, sig in enumerate(argument_signatures): 184ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh group = parser.add_argument_group('foo:%i' % i) 185ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh group.add_argument(*sig.args, **sig.kwargs) 186ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh 187ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh # -------------------------- 188ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh # functions for parsing args 189ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh # -------------------------- 190ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh def listargs(parser, args): 191ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh """Parse the args by passing in a list""" 192ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh return parser.parse_args(args) 193ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh 194ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh def sysargs(parser, args): 195ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh """Parse the args by defaulting to sys.argv""" 196ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh old_sys_argv = sys.argv 197ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh sys.argv = [old_sys_argv[0]] + args 198ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh try: 199ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh return parser.parse_args() 200ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh finally: 201ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh sys.argv = old_sys_argv 202ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh 203ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh # class that holds the combination of one optional argument 204ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh # addition method and one arg parsing method 205ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh class AddTests(object): 206ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh 207ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh def __init__(self, tester_cls, add_arguments, parse_args): 208ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh self._add_arguments = add_arguments 209ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh self._parse_args = parse_args 210ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh 211ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh add_arguments_name = self._add_arguments.__name__ 212ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh parse_args_name = self._parse_args.__name__ 213ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh for test_func in [self.test_failures, self.test_successes]: 214ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh func_name = test_func.__name__ 215ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh names = func_name, add_arguments_name, parse_args_name 216ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh test_name = '_'.join(names) 217ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh 218ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh def wrapper(self, test_func=test_func): 219ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh test_func(self) 220ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh try: 221ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh wrapper.__name__ = test_name 222ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh except TypeError: 223ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh pass 224ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh setattr(tester_cls, test_name, wrapper) 225ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh 226ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh def _get_parser(self, tester): 227ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh args = tester.parser_signature.args 228ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh kwargs = tester.parser_signature.kwargs 229ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh parser = tester.parser_class(*args, **kwargs) 230ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh self._add_arguments(parser, tester.argument_signatures) 231ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh return parser 232ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh 233ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh def test_failures(self, tester): 234ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh parser = self._get_parser(tester) 235ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh for args_str in tester.failures: 236ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh args = args_str.split() 237ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh raises = tester.assertRaises 238ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh raises(ArgumentParserError, parser.parse_args, args) 239ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh 240ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh def test_successes(self, tester): 241ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh parser = self._get_parser(tester) 242ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh for args, expected_ns in tester.successes: 243ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh if isinstance(args, str): 244ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh args = args.split() 245ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh result_ns = self._parse_args(parser, args) 246ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh tester.assertEqual(expected_ns, result_ns) 247ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh 248ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh # add tests for each combination of an optionals adding method 249ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh # and an arg parsing method 250ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh for add_arguments in [no_groups, one_group, many_groups]: 251ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh for parse_args in [listargs, sysargs]: 252ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh AddTests(cls, add_arguments, parse_args) 253ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh 254ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsiehbases = TestCase, 255ffab958fd8d42ed7227d83007350e61555a1fa36Andrew HsiehParserTestCase = ParserTesterMetaclass('ParserTestCase', bases, {}) 256ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh 257ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh# =============== 258ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh# Optionals tests 259ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh# =============== 260ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh 261ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsiehclass TestOptionalsSingleDash(ParserTestCase): 262ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh """Test an Optional with a single-dash option string""" 263ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh 264ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh argument_signatures = [Sig('-x')] 265ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh failures = ['-x', 'a', '--foo', '-x --foo', '-x -y'] 266ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh successes = [ 267ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh ('', NS(x=None)), 268ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh ('-x a', NS(x='a')), 269ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh ('-xa', NS(x='a')), 270ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh ('-x -1', NS(x='-1')), 271ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh ('-x-1', NS(x='-1')), 272ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh ] 273ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh 274ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh 275ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsiehclass TestOptionalsSingleDashCombined(ParserTestCase): 276ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh """Test an Optional with a single-dash option string""" 277ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh 278ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh argument_signatures = [ 279ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh Sig('-x', action='store_true'), 280ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh Sig('-yyy', action='store_const', const=42), 281ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh Sig('-z'), 282ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh ] 283ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh failures = ['a', '--foo', '-xa', '-x --foo', '-x -z', '-z -x', 284ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh '-yx', '-yz a', '-yyyx', '-yyyza', '-xyza'] 285ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh successes = [ 286ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh ('', NS(x=False, yyy=None, z=None)), 287ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh ('-x', NS(x=True, yyy=None, z=None)), 288ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh ('-za', NS(x=False, yyy=None, z='a')), 289ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh ('-z a', NS(x=False, yyy=None, z='a')), 290ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh ('-xza', NS(x=True, yyy=None, z='a')), 291ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh ('-xz a', NS(x=True, yyy=None, z='a')), 292ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh ('-x -za', NS(x=True, yyy=None, z='a')), 293ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh ('-x -z a', NS(x=True, yyy=None, z='a')), 294ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh ('-y', NS(x=False, yyy=42, z=None)), 295ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh ('-yyy', NS(x=False, yyy=42, z=None)), 296ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh ('-x -yyy -za', NS(x=True, yyy=42, z='a')), 297ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh ('-x -yyy -z a', NS(x=True, yyy=42, z='a')), 298ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh ] 299ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh 300ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh 301ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsiehclass TestOptionalsSingleDashLong(ParserTestCase): 302ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh """Test an Optional with a multi-character single-dash option string""" 303ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh 304ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh argument_signatures = [Sig('-foo')] 305ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh failures = ['-foo', 'a', '--foo', '-foo --foo', '-foo -y', '-fooa'] 306ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh successes = [ 307ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh ('', NS(foo=None)), 308ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh ('-foo a', NS(foo='a')), 309ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh ('-foo -1', NS(foo='-1')), 310ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh ('-fo a', NS(foo='a')), 311ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh ('-f a', NS(foo='a')), 312ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh ] 313ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh 314ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh 315ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsiehclass TestOptionalsSingleDashSubsetAmbiguous(ParserTestCase): 316ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh """Test Optionals where option strings are subsets of each other""" 317ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh 318ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh argument_signatures = [Sig('-f'), Sig('-foobar'), Sig('-foorab')] 319ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh failures = ['-f', '-foo', '-fo', '-foo b', '-foob', '-fooba', '-foora'] 320ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh successes = [ 321ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh ('', NS(f=None, foobar=None, foorab=None)), 322ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh ('-f a', NS(f='a', foobar=None, foorab=None)), 323ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh ('-fa', NS(f='a', foobar=None, foorab=None)), 324ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh ('-foa', NS(f='oa', foobar=None, foorab=None)), 325ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh ('-fooa', NS(f='ooa', foobar=None, foorab=None)), 326ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh ('-foobar a', NS(f=None, foobar='a', foorab=None)), 327ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh ('-foorab a', NS(f=None, foobar=None, foorab='a')), 328ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh ] 329ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh 330ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh 331ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsiehclass TestOptionalsSingleDashAmbiguous(ParserTestCase): 332ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh """Test Optionals that partially match but are not subsets""" 333ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh 334ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh argument_signatures = [Sig('-foobar'), Sig('-foorab')] 335ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh failures = ['-f', '-f a', '-fa', '-foa', '-foo', '-fo', '-foo b'] 336ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh successes = [ 337ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh ('', NS(foobar=None, foorab=None)), 338ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh ('-foob a', NS(foobar='a', foorab=None)), 339ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh ('-foor a', NS(foobar=None, foorab='a')), 340ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh ('-fooba a', NS(foobar='a', foorab=None)), 341ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh ('-foora a', NS(foobar=None, foorab='a')), 342ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh ('-foobar a', NS(foobar='a', foorab=None)), 343ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh ('-foorab a', NS(foobar=None, foorab='a')), 344ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh ] 345ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh 346ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh 347ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsiehclass TestOptionalsNumeric(ParserTestCase): 348ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh """Test an Optional with a short opt string""" 349ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh 350ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh argument_signatures = [Sig('-1', dest='one')] 351ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh failures = ['-1', 'a', '-1 --foo', '-1 -y', '-1 -1', '-1 -2'] 352ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh successes = [ 353ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh ('', NS(one=None)), 354ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh ('-1 a', NS(one='a')), 355ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh ('-1a', NS(one='a')), 356ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh ('-1-2', NS(one='-2')), 357ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh ] 358ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh 359ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh 360ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsiehclass TestOptionalsDoubleDash(ParserTestCase): 361ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh """Test an Optional with a double-dash option string""" 362ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh 363ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh argument_signatures = [Sig('--foo')] 364ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh failures = ['--foo', '-f', '-f a', 'a', '--foo -x', '--foo --bar'] 365ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh successes = [ 366ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh ('', NS(foo=None)), 367ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh ('--foo a', NS(foo='a')), 368ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh ('--foo=a', NS(foo='a')), 369ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh ('--foo -2.5', NS(foo='-2.5')), 370ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh ('--foo=-2.5', NS(foo='-2.5')), 371ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh ] 372ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh 373ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh 374ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsiehclass TestOptionalsDoubleDashPartialMatch(ParserTestCase): 375ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh """Tests partial matching with a double-dash option string""" 376ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh 377ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh argument_signatures = [ 378ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh Sig('--badger', action='store_true'), 379ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh Sig('--bat'), 380ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh ] 381ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh failures = ['--bar', '--b', '--ba', '--b=2', '--ba=4', '--badge 5'] 382ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh successes = [ 383ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh ('', NS(badger=False, bat=None)), 384ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh ('--bat X', NS(badger=False, bat='X')), 385ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh ('--bad', NS(badger=True, bat=None)), 386ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh ('--badg', NS(badger=True, bat=None)), 387ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh ('--badge', NS(badger=True, bat=None)), 388ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh ('--badger', NS(badger=True, bat=None)), 389ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh ] 390ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh 391ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh 392ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsiehclass TestOptionalsDoubleDashPrefixMatch(ParserTestCase): 393ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh """Tests when one double-dash option string is a prefix of another""" 394ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh 395ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh argument_signatures = [ 396ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh Sig('--badger', action='store_true'), 397ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh Sig('--ba'), 398ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh ] 399ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh failures = ['--bar', '--b', '--ba', '--b=2', '--badge 5'] 400ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh successes = [ 401ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh ('', NS(badger=False, ba=None)), 402ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh ('--ba X', NS(badger=False, ba='X')), 403ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh ('--ba=X', NS(badger=False, ba='X')), 404ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh ('--bad', NS(badger=True, ba=None)), 405ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh ('--badg', NS(badger=True, ba=None)), 406ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh ('--badge', NS(badger=True, ba=None)), 407ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh ('--badger', NS(badger=True, ba=None)), 408ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh ] 409ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh 410ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh 411ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsiehclass TestOptionalsSingleDoubleDash(ParserTestCase): 412ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh """Test an Optional with single- and double-dash option strings""" 413ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh 414ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh argument_signatures = [ 415ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh Sig('-f', action='store_true'), 416ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh Sig('--bar'), 417ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh Sig('-baz', action='store_const', const=42), 418ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh ] 419ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh failures = ['--bar', '-fbar', '-fbaz', '-bazf', '-b B', 'B'] 420ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh successes = [ 421ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh ('', NS(f=False, bar=None, baz=None)), 422ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh ('-f', NS(f=True, bar=None, baz=None)), 423ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh ('--ba B', NS(f=False, bar='B', baz=None)), 424ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh ('-f --bar B', NS(f=True, bar='B', baz=None)), 425ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh ('-f -b', NS(f=True, bar=None, baz=42)), 426ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh ('-ba -f', NS(f=True, bar=None, baz=42)), 427ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh ] 428ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh 429ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh 430ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsiehclass TestOptionalsAlternatePrefixChars(ParserTestCase): 431ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh """Test an Optional with option strings with custom prefixes""" 432ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh 433ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh parser_signature = Sig(prefix_chars='+:/', add_help=False) 434ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh argument_signatures = [ 435ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh Sig('+f', action='store_true'), 436ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh Sig('::bar'), 437ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh Sig('/baz', action='store_const', const=42), 438ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh ] 439ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh failures = ['--bar', '-fbar', '-b B', 'B', '-f', '--bar B', '-baz', '-h', '--help', '+h', '::help', '/help'] 440ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh successes = [ 441ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh ('', NS(f=False, bar=None, baz=None)), 442ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh ('+f', NS(f=True, bar=None, baz=None)), 443ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh ('::ba B', NS(f=False, bar='B', baz=None)), 444ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh ('+f ::bar B', NS(f=True, bar='B', baz=None)), 445ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh ('+f /b', NS(f=True, bar=None, baz=42)), 446ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh ('/ba +f', NS(f=True, bar=None, baz=42)), 447ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh ] 448ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh 449ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh 450ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsiehclass TestOptionalsAlternatePrefixCharsAddedHelp(ParserTestCase): 451ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh """When ``-`` not in prefix_chars, default operators created for help 452ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh should use the prefix_chars in use rather than - or -- 453ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh http://bugs.python.org/issue9444""" 454ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh 455ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh parser_signature = Sig(prefix_chars='+:/', add_help=True) 456ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh argument_signatures = [ 457ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh Sig('+f', action='store_true'), 458ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh Sig('::bar'), 459ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh Sig('/baz', action='store_const', const=42), 460ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh ] 461ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh failures = ['--bar', '-fbar', '-b B', 'B', '-f', '--bar B', '-baz'] 462ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh successes = [ 463ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh ('', NS(f=False, bar=None, baz=None)), 464ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh ('+f', NS(f=True, bar=None, baz=None)), 465ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh ('::ba B', NS(f=False, bar='B', baz=None)), 466ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh ('+f ::bar B', NS(f=True, bar='B', baz=None)), 467ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh ('+f /b', NS(f=True, bar=None, baz=42)), 468ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh ('/ba +f', NS(f=True, bar=None, baz=42)) 469ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh ] 470ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh 471ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh 472ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsiehclass TestOptionalsAlternatePrefixCharsMultipleShortArgs(ParserTestCase): 473ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh """Verify that Optionals must be called with their defined prefixes""" 474ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh 475ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh parser_signature = Sig(prefix_chars='+-', add_help=False) 476ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh argument_signatures = [ 477ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh Sig('-x', action='store_true'), 478ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh Sig('+y', action='store_true'), 479ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh Sig('+z', action='store_true'), 480ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh ] 481ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh failures = ['-w', 482ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh '-xyz', 483ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh '+x', 484ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh '-y', 485ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh '+xyz', 486ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh ] 487ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh successes = [ 488ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh ('', NS(x=False, y=False, z=False)), 489ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh ('-x', NS(x=True, y=False, z=False)), 490ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh ('+y -x', NS(x=True, y=True, z=False)), 491ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh ('+yz -x', NS(x=True, y=True, z=True)), 492ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh ] 493ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh 494ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh 495ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsiehclass TestOptionalsShortLong(ParserTestCase): 496ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh """Test a combination of single- and double-dash option strings""" 497ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh 498ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh argument_signatures = [ 499ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh Sig('-v', '--verbose', '-n', '--noisy', action='store_true'), 500ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh ] 501ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh failures = ['--x --verbose', '-N', 'a', '-v x'] 502ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh successes = [ 503ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh ('', NS(verbose=False)), 504ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh ('-v', NS(verbose=True)), 505ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh ('--verbose', NS(verbose=True)), 506ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh ('-n', NS(verbose=True)), 507ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh ('--noisy', NS(verbose=True)), 508ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh ] 509ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh 510ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh 511ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsiehclass TestOptionalsDest(ParserTestCase): 512ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh """Tests various means of setting destination""" 513ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh 514ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh argument_signatures = [Sig('--foo-bar'), Sig('--baz', dest='zabbaz')] 515ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh failures = ['a'] 516ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh successes = [ 517ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh ('--foo-bar f', NS(foo_bar='f', zabbaz=None)), 518ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh ('--baz g', NS(foo_bar=None, zabbaz='g')), 519ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh ('--foo-bar h --baz i', NS(foo_bar='h', zabbaz='i')), 520ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh ('--baz j --foo-bar k', NS(foo_bar='k', zabbaz='j')), 521ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh ] 522ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh 523ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh 524ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsiehclass TestOptionalsDefault(ParserTestCase): 525ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh """Tests specifying a default for an Optional""" 526ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh 527ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh argument_signatures = [Sig('-x'), Sig('-y', default=42)] 528ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh failures = ['a'] 529ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh successes = [ 530ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh ('', NS(x=None, y=42)), 531ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh ('-xx', NS(x='x', y=42)), 532ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh ('-yy', NS(x=None, y='y')), 533ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh ] 534ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh 535ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh 536ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsiehclass TestOptionalsNargsDefault(ParserTestCase): 537ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh """Tests not specifying the number of args for an Optional""" 538ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh 539ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh argument_signatures = [Sig('-x')] 540ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh failures = ['a', '-x'] 541ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh successes = [ 542ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh ('', NS(x=None)), 543ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh ('-x a', NS(x='a')), 544ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh ] 545ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh 546ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh 547ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsiehclass TestOptionalsNargs1(ParserTestCase): 548ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh """Tests specifying the 1 arg for an Optional""" 549ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh 550ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh argument_signatures = [Sig('-x', nargs=1)] 551ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh failures = ['a', '-x'] 552ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh successes = [ 553ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh ('', NS(x=None)), 554ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh ('-x a', NS(x=['a'])), 555ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh ] 556ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh 557ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh 558ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsiehclass TestOptionalsNargs3(ParserTestCase): 559ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh """Tests specifying the 3 args for an Optional""" 560ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh 561ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh argument_signatures = [Sig('-x', nargs=3)] 562ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh failures = ['a', '-x', '-x a', '-x a b', 'a -x', 'a -x b'] 563ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh successes = [ 564ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh ('', NS(x=None)), 565ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh ('-x a b c', NS(x=['a', 'b', 'c'])), 566ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh ] 567ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh 568ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh 569ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsiehclass TestOptionalsNargsOptional(ParserTestCase): 570ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh """Tests specifying an Optional arg for an Optional""" 571ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh 572ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh argument_signatures = [ 573ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh Sig('-w', nargs='?'), 574ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh Sig('-x', nargs='?', const=42), 575ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh Sig('-y', nargs='?', default='spam'), 576ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh Sig('-z', nargs='?', type=int, const='42', default='84'), 577ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh ] 578ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh failures = ['2'] 579ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh successes = [ 580ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh ('', NS(w=None, x=None, y='spam', z=84)), 581ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh ('-w', NS(w=None, x=None, y='spam', z=84)), 582ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh ('-w 2', NS(w='2', x=None, y='spam', z=84)), 583ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh ('-x', NS(w=None, x=42, y='spam', z=84)), 584ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh ('-x 2', NS(w=None, x='2', y='spam', z=84)), 585ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh ('-y', NS(w=None, x=None, y=None, z=84)), 586ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh ('-y 2', NS(w=None, x=None, y='2', z=84)), 587ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh ('-z', NS(w=None, x=None, y='spam', z=42)), 588ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh ('-z 2', NS(w=None, x=None, y='spam', z=2)), 589ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh ] 590ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh 591ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh 592ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsiehclass TestOptionalsNargsZeroOrMore(ParserTestCase): 593ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh """Tests specifying an args for an Optional that accepts zero or more""" 594ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh 595ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh argument_signatures = [ 596ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh Sig('-x', nargs='*'), 597ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh Sig('-y', nargs='*', default='spam'), 598ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh ] 599ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh failures = ['a'] 600ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh successes = [ 601ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh ('', NS(x=None, y='spam')), 602ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh ('-x', NS(x=[], y='spam')), 603ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh ('-x a', NS(x=['a'], y='spam')), 604ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh ('-x a b', NS(x=['a', 'b'], y='spam')), 605ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh ('-y', NS(x=None, y=[])), 606ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh ('-y a', NS(x=None, y=['a'])), 607ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh ('-y a b', NS(x=None, y=['a', 'b'])), 608ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh ] 609ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh 610ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh 611ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsiehclass TestOptionalsNargsOneOrMore(ParserTestCase): 612ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh """Tests specifying an args for an Optional that accepts one or more""" 613ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh 614ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh argument_signatures = [ 615ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh Sig('-x', nargs='+'), 616ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh Sig('-y', nargs='+', default='spam'), 617ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh ] 618ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh failures = ['a', '-x', '-y', 'a -x', 'a -y b'] 619ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh successes = [ 620ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh ('', NS(x=None, y='spam')), 621ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh ('-x a', NS(x=['a'], y='spam')), 622ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh ('-x a b', NS(x=['a', 'b'], y='spam')), 623ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh ('-y a', NS(x=None, y=['a'])), 624ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh ('-y a b', NS(x=None, y=['a', 'b'])), 625ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh ] 626ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh 627ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh 628ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsiehclass TestOptionalsChoices(ParserTestCase): 629ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh """Tests specifying the choices for an Optional""" 630ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh 631ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh argument_signatures = [ 632ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh Sig('-f', choices='abc'), 633ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh Sig('-g', type=int, choices=range(5))] 634ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh failures = ['a', '-f d', '-fad', '-ga', '-g 6'] 635ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh successes = [ 636ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh ('', NS(f=None, g=None)), 637ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh ('-f a', NS(f='a', g=None)), 638ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh ('-f c', NS(f='c', g=None)), 639ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh ('-g 0', NS(f=None, g=0)), 640ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh ('-g 03', NS(f=None, g=3)), 641ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh ('-fb -g4', NS(f='b', g=4)), 642ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh ] 643ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh 644ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh 645ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsiehclass TestOptionalsRequired(ParserTestCase): 646ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh """Tests the an optional action that is required""" 647ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh 648ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh argument_signatures = [ 649ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh Sig('-x', type=int, required=True), 650ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh ] 651ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh failures = ['a', ''] 652ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh successes = [ 653ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh ('-x 1', NS(x=1)), 654ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh ('-x42', NS(x=42)), 655ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh ] 656ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh 657ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh 658ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsiehclass TestOptionalsActionStore(ParserTestCase): 659ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh """Tests the store action for an Optional""" 660ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh 661ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh argument_signatures = [Sig('-x', action='store')] 662ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh failures = ['a', 'a -x'] 663ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh successes = [ 664ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh ('', NS(x=None)), 665ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh ('-xfoo', NS(x='foo')), 666ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh ] 667ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh 668ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh 669ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsiehclass TestOptionalsActionStoreConst(ParserTestCase): 670ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh """Tests the store_const action for an Optional""" 671ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh 672ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh argument_signatures = [Sig('-y', action='store_const', const=object)] 673ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh failures = ['a'] 674ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh successes = [ 675ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh ('', NS(y=None)), 676ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh ('-y', NS(y=object)), 677ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh ] 678ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh 679ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh 680ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsiehclass TestOptionalsActionStoreFalse(ParserTestCase): 681ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh """Tests the store_false action for an Optional""" 682ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh 683ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh argument_signatures = [Sig('-z', action='store_false')] 684ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh failures = ['a', '-za', '-z a'] 685ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh successes = [ 686ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh ('', NS(z=True)), 687ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh ('-z', NS(z=False)), 688ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh ] 689ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh 690ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh 691ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsiehclass TestOptionalsActionStoreTrue(ParserTestCase): 692ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh """Tests the store_true action for an Optional""" 693ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh 694ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh argument_signatures = [Sig('--apple', action='store_true')] 695ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh failures = ['a', '--apple=b', '--apple b'] 696ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh successes = [ 697ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh ('', NS(apple=False)), 698ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh ('--apple', NS(apple=True)), 699ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh ] 700ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh 701ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh 702ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsiehclass TestOptionalsActionAppend(ParserTestCase): 703ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh """Tests the append action for an Optional""" 704ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh 705ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh argument_signatures = [Sig('--baz', action='append')] 706ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh failures = ['a', '--baz', 'a --baz', '--baz a b'] 707ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh successes = [ 708ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh ('', NS(baz=None)), 709ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh ('--baz a', NS(baz=['a'])), 710ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh ('--baz a --baz b', NS(baz=['a', 'b'])), 711ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh ] 712ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh 713ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh 714ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsiehclass TestOptionalsActionAppendWithDefault(ParserTestCase): 715ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh """Tests the append action for an Optional""" 716ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh 717ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh argument_signatures = [Sig('--baz', action='append', default=['X'])] 718ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh failures = ['a', '--baz', 'a --baz', '--baz a b'] 719ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh successes = [ 720ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh ('', NS(baz=['X'])), 721ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh ('--baz a', NS(baz=['X', 'a'])), 722ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh ('--baz a --baz b', NS(baz=['X', 'a', 'b'])), 723ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh ] 724ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh 725ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh 726ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsiehclass TestOptionalsActionAppendConst(ParserTestCase): 727ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh """Tests the append_const action for an Optional""" 728ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh 729ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh argument_signatures = [ 730ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh Sig('-b', action='append_const', const=Exception), 731ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh Sig('-c', action='append', dest='b'), 732ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh ] 733ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh failures = ['a', '-c', 'a -c', '-bx', '-b x'] 734ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh successes = [ 735ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh ('', NS(b=None)), 736ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh ('-b', NS(b=[Exception])), 737ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh ('-b -cx -b -cyz', NS(b=[Exception, 'x', Exception, 'yz'])), 738ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh ] 739ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh 740ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh 741ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsiehclass TestOptionalsActionAppendConstWithDefault(ParserTestCase): 742ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh """Tests the append_const action for an Optional""" 743ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh 744ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh argument_signatures = [ 745ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh Sig('-b', action='append_const', const=Exception, default=['X']), 746ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh Sig('-c', action='append', dest='b'), 747ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh ] 748ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh failures = ['a', '-c', 'a -c', '-bx', '-b x'] 749ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh successes = [ 750ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh ('', NS(b=['X'])), 751ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh ('-b', NS(b=['X', Exception])), 752ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh ('-b -cx -b -cyz', NS(b=['X', Exception, 'x', Exception, 'yz'])), 753ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh ] 754ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh 755ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh 756ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsiehclass TestOptionalsActionCount(ParserTestCase): 757ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh """Tests the count action for an Optional""" 758ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh 759ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh argument_signatures = [Sig('-x', action='count')] 760ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh failures = ['a', '-x a', '-x b', '-x a -x b'] 761ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh successes = [ 762ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh ('', NS(x=None)), 763ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh ('-x', NS(x=1)), 764ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh ] 765ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh 766ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh 767ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh# ================ 768ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh# Positional tests 769ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh# ================ 770ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh 771ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsiehclass TestPositionalsNargsNone(ParserTestCase): 772ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh """Test a Positional that doesn't specify nargs""" 773ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh 774ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh argument_signatures = [Sig('foo')] 775ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh failures = ['', '-x', 'a b'] 776ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh successes = [ 777ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh ('a', NS(foo='a')), 778ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh ] 779ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh 780ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh 781ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsiehclass TestPositionalsNargs1(ParserTestCase): 782ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh """Test a Positional that specifies an nargs of 1""" 783ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh 784ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh argument_signatures = [Sig('foo', nargs=1)] 785ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh failures = ['', '-x', 'a b'] 786ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh successes = [ 787ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh ('a', NS(foo=['a'])), 788ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh ] 789ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh 790ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh 791ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsiehclass TestPositionalsNargs2(ParserTestCase): 792ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh """Test a Positional that specifies an nargs of 2""" 793ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh 794ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh argument_signatures = [Sig('foo', nargs=2)] 795ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh failures = ['', 'a', '-x', 'a b c'] 796ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh successes = [ 797ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh ('a b', NS(foo=['a', 'b'])), 798ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh ] 799ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh 800ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh 801ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsiehclass TestPositionalsNargsZeroOrMore(ParserTestCase): 802ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh """Test a Positional that specifies unlimited nargs""" 803ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh 804ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh argument_signatures = [Sig('foo', nargs='*')] 805ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh failures = ['-x'] 806ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh successes = [ 807ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh ('', NS(foo=[])), 808ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh ('a', NS(foo=['a'])), 809ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh ('a b', NS(foo=['a', 'b'])), 810ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh ] 811ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh 812ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh 813ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsiehclass TestPositionalsNargsZeroOrMoreDefault(ParserTestCase): 814ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh """Test a Positional that specifies unlimited nargs and a default""" 815ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh 816ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh argument_signatures = [Sig('foo', nargs='*', default='bar')] 817ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh failures = ['-x'] 818ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh successes = [ 819ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh ('', NS(foo='bar')), 820ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh ('a', NS(foo=['a'])), 821ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh ('a b', NS(foo=['a', 'b'])), 822ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh ] 823ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh 824ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh 825ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsiehclass TestPositionalsNargsOneOrMore(ParserTestCase): 826ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh """Test a Positional that specifies one or more nargs""" 827ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh 828ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh argument_signatures = [Sig('foo', nargs='+')] 829ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh failures = ['', '-x'] 830ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh successes = [ 831ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh ('a', NS(foo=['a'])), 832ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh ('a b', NS(foo=['a', 'b'])), 833ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh ] 834ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh 835ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh 836ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsiehclass TestPositionalsNargsOptional(ParserTestCase): 837ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh """Tests an Optional Positional""" 838ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh 839ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh argument_signatures = [Sig('foo', nargs='?')] 840ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh failures = ['-x', 'a b'] 841ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh successes = [ 842ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh ('', NS(foo=None)), 843ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh ('a', NS(foo='a')), 844ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh ] 845ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh 846ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh 847ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsiehclass TestPositionalsNargsOptionalDefault(ParserTestCase): 848ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh """Tests an Optional Positional with a default value""" 849ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh 850ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh argument_signatures = [Sig('foo', nargs='?', default=42)] 851ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh failures = ['-x', 'a b'] 852ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh successes = [ 853ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh ('', NS(foo=42)), 854ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh ('a', NS(foo='a')), 855ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh ] 856ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh 857ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh 858ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsiehclass TestPositionalsNargsOptionalConvertedDefault(ParserTestCase): 859ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh """Tests an Optional Positional with a default value 860ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh that needs to be converted to the appropriate type. 861ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh """ 862ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh 863ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh argument_signatures = [ 864ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh Sig('foo', nargs='?', type=int, default='42'), 865ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh ] 866ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh failures = ['-x', 'a b', '1 2'] 867ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh successes = [ 868ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh ('', NS(foo=42)), 869ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh ('1', NS(foo=1)), 870ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh ] 871ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh 872ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh 873ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsiehclass TestPositionalsNargsNoneNone(ParserTestCase): 874ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh """Test two Positionals that don't specify nargs""" 875ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh 876ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh argument_signatures = [Sig('foo'), Sig('bar')] 877ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh failures = ['', '-x', 'a', 'a b c'] 878ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh successes = [ 879ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh ('a b', NS(foo='a', bar='b')), 880ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh ] 881ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh 882ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh 883ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsiehclass TestPositionalsNargsNone1(ParserTestCase): 884ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh """Test a Positional with no nargs followed by one with 1""" 885ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh 886ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh argument_signatures = [Sig('foo'), Sig('bar', nargs=1)] 887ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh failures = ['', '--foo', 'a', 'a b c'] 888ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh successes = [ 889ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh ('a b', NS(foo='a', bar=['b'])), 890ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh ] 891ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh 892ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh 893ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsiehclass TestPositionalsNargs2None(ParserTestCase): 894ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh """Test a Positional with 2 nargs followed by one with none""" 895ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh 896ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh argument_signatures = [Sig('foo', nargs=2), Sig('bar')] 897ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh failures = ['', '--foo', 'a', 'a b', 'a b c d'] 898ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh successes = [ 899ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh ('a b c', NS(foo=['a', 'b'], bar='c')), 900ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh ] 901ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh 902ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh 903ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsiehclass TestPositionalsNargsNoneZeroOrMore(ParserTestCase): 904ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh """Test a Positional with no nargs followed by one with unlimited""" 905ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh 906ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh argument_signatures = [Sig('foo'), Sig('bar', nargs='*')] 907ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh failures = ['', '--foo'] 908ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh successes = [ 909ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh ('a', NS(foo='a', bar=[])), 910ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh ('a b', NS(foo='a', bar=['b'])), 911ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh ('a b c', NS(foo='a', bar=['b', 'c'])), 912ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh ] 913ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh 914ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh 915ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsiehclass TestPositionalsNargsNoneOneOrMore(ParserTestCase): 916ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh """Test a Positional with no nargs followed by one with one or more""" 917ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh 918ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh argument_signatures = [Sig('foo'), Sig('bar', nargs='+')] 919ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh failures = ['', '--foo', 'a'] 920ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh successes = [ 921ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh ('a b', NS(foo='a', bar=['b'])), 922ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh ('a b c', NS(foo='a', bar=['b', 'c'])), 923ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh ] 924ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh 925ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh 926ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsiehclass TestPositionalsNargsNoneOptional(ParserTestCase): 927ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh """Test a Positional with no nargs followed by one with an Optional""" 928ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh 929ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh argument_signatures = [Sig('foo'), Sig('bar', nargs='?')] 930ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh failures = ['', '--foo', 'a b c'] 931ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh successes = [ 932ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh ('a', NS(foo='a', bar=None)), 933ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh ('a b', NS(foo='a', bar='b')), 934ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh ] 935ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh 936ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh 937ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsiehclass TestPositionalsNargsZeroOrMoreNone(ParserTestCase): 938ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh """Test a Positional with unlimited nargs followed by one with none""" 939ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh 940ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh argument_signatures = [Sig('foo', nargs='*'), Sig('bar')] 941ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh failures = ['', '--foo'] 942ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh successes = [ 943ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh ('a', NS(foo=[], bar='a')), 944ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh ('a b', NS(foo=['a'], bar='b')), 945ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh ('a b c', NS(foo=['a', 'b'], bar='c')), 946ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh ] 947ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh 948ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh 949ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsiehclass TestPositionalsNargsOneOrMoreNone(ParserTestCase): 950ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh """Test a Positional with one or more nargs followed by one with none""" 951ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh 952ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh argument_signatures = [Sig('foo', nargs='+'), Sig('bar')] 953ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh failures = ['', '--foo', 'a'] 954ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh successes = [ 955ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh ('a b', NS(foo=['a'], bar='b')), 956ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh ('a b c', NS(foo=['a', 'b'], bar='c')), 957ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh ] 958ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh 959ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh 960ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsiehclass TestPositionalsNargsOptionalNone(ParserTestCase): 961ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh """Test a Positional with an Optional nargs followed by one with none""" 962ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh 963ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh argument_signatures = [Sig('foo', nargs='?', default=42), Sig('bar')] 964ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh failures = ['', '--foo', 'a b c'] 965ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh successes = [ 966ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh ('a', NS(foo=42, bar='a')), 967ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh ('a b', NS(foo='a', bar='b')), 968ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh ] 969ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh 970ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh 971ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsiehclass TestPositionalsNargs2ZeroOrMore(ParserTestCase): 972ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh """Test a Positional with 2 nargs followed by one with unlimited""" 973ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh 974ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh argument_signatures = [Sig('foo', nargs=2), Sig('bar', nargs='*')] 975ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh failures = ['', '--foo', 'a'] 976ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh successes = [ 977ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh ('a b', NS(foo=['a', 'b'], bar=[])), 978ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh ('a b c', NS(foo=['a', 'b'], bar=['c'])), 979ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh ] 980ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh 981ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh 982ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsiehclass TestPositionalsNargs2OneOrMore(ParserTestCase): 983ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh """Test a Positional with 2 nargs followed by one with one or more""" 984ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh 985ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh argument_signatures = [Sig('foo', nargs=2), Sig('bar', nargs='+')] 986ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh failures = ['', '--foo', 'a', 'a b'] 987ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh successes = [ 988ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh ('a b c', NS(foo=['a', 'b'], bar=['c'])), 989ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh ] 990ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh 991ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh 992ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsiehclass TestPositionalsNargs2Optional(ParserTestCase): 993ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh """Test a Positional with 2 nargs followed by one optional""" 994ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh 995ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh argument_signatures = [Sig('foo', nargs=2), Sig('bar', nargs='?')] 996ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh failures = ['', '--foo', 'a', 'a b c d'] 997ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh successes = [ 998ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh ('a b', NS(foo=['a', 'b'], bar=None)), 999ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh ('a b c', NS(foo=['a', 'b'], bar='c')), 1000ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh ] 1001ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh 1002ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh 1003ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsiehclass TestPositionalsNargsZeroOrMore1(ParserTestCase): 1004ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh """Test a Positional with unlimited nargs followed by one with 1""" 1005ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh 1006ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh argument_signatures = [Sig('foo', nargs='*'), Sig('bar', nargs=1)] 1007ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh failures = ['', '--foo', ] 1008ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh successes = [ 1009ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh ('a', NS(foo=[], bar=['a'])), 1010ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh ('a b', NS(foo=['a'], bar=['b'])), 1011ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh ('a b c', NS(foo=['a', 'b'], bar=['c'])), 1012ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh ] 1013ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh 1014ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh 1015ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsiehclass TestPositionalsNargsOneOrMore1(ParserTestCase): 1016ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh """Test a Positional with one or more nargs followed by one with 1""" 1017ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh 1018ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh argument_signatures = [Sig('foo', nargs='+'), Sig('bar', nargs=1)] 1019ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh failures = ['', '--foo', 'a'] 1020ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh successes = [ 1021ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh ('a b', NS(foo=['a'], bar=['b'])), 1022ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh ('a b c', NS(foo=['a', 'b'], bar=['c'])), 1023ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh ] 1024ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh 1025ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh 1026ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsiehclass TestPositionalsNargsOptional1(ParserTestCase): 1027ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh """Test a Positional with an Optional nargs followed by one with 1""" 1028ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh 1029ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh argument_signatures = [Sig('foo', nargs='?'), Sig('bar', nargs=1)] 1030ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh failures = ['', '--foo', 'a b c'] 1031ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh successes = [ 1032ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh ('a', NS(foo=None, bar=['a'])), 1033ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh ('a b', NS(foo='a', bar=['b'])), 1034ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh ] 1035ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh 1036ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh 1037ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsiehclass TestPositionalsNargsNoneZeroOrMore1(ParserTestCase): 1038ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh """Test three Positionals: no nargs, unlimited nargs and 1 nargs""" 1039ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh 1040ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh argument_signatures = [ 1041ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh Sig('foo'), 1042ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh Sig('bar', nargs='*'), 1043ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh Sig('baz', nargs=1), 1044ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh ] 1045ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh failures = ['', '--foo', 'a'] 1046ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh successes = [ 1047ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh ('a b', NS(foo='a', bar=[], baz=['b'])), 1048ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh ('a b c', NS(foo='a', bar=['b'], baz=['c'])), 1049ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh ] 1050ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh 1051ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh 1052ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsiehclass TestPositionalsNargsNoneOneOrMore1(ParserTestCase): 1053ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh """Test three Positionals: no nargs, one or more nargs and 1 nargs""" 1054ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh 1055ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh argument_signatures = [ 1056ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh Sig('foo'), 1057ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh Sig('bar', nargs='+'), 1058ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh Sig('baz', nargs=1), 1059ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh ] 1060ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh failures = ['', '--foo', 'a', 'b'] 1061ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh successes = [ 1062ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh ('a b c', NS(foo='a', bar=['b'], baz=['c'])), 1063ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh ('a b c d', NS(foo='a', bar=['b', 'c'], baz=['d'])), 1064ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh ] 1065ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh 1066ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh 1067ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsiehclass TestPositionalsNargsNoneOptional1(ParserTestCase): 1068ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh """Test three Positionals: no nargs, optional narg and 1 nargs""" 1069ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh 1070ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh argument_signatures = [ 1071ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh Sig('foo'), 1072ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh Sig('bar', nargs='?', default=0.625), 1073ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh Sig('baz', nargs=1), 1074ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh ] 1075ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh failures = ['', '--foo', 'a'] 1076ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh successes = [ 1077ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh ('a b', NS(foo='a', bar=0.625, baz=['b'])), 1078ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh ('a b c', NS(foo='a', bar='b', baz=['c'])), 1079ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh ] 1080ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh 1081ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh 1082ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsiehclass TestPositionalsNargsOptionalOptional(ParserTestCase): 1083ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh """Test two optional nargs""" 1084ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh 1085ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh argument_signatures = [ 1086ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh Sig('foo', nargs='?'), 1087ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh Sig('bar', nargs='?', default=42), 1088ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh ] 1089ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh failures = ['--foo', 'a b c'] 1090ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh successes = [ 1091ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh ('', NS(foo=None, bar=42)), 1092ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh ('a', NS(foo='a', bar=42)), 1093ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh ('a b', NS(foo='a', bar='b')), 1094ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh ] 1095ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh 1096ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh 1097ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsiehclass TestPositionalsNargsOptionalZeroOrMore(ParserTestCase): 1098ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh """Test an Optional narg followed by unlimited nargs""" 1099ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh 1100ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh argument_signatures = [Sig('foo', nargs='?'), Sig('bar', nargs='*')] 1101ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh failures = ['--foo'] 1102ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh successes = [ 1103ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh ('', NS(foo=None, bar=[])), 1104ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh ('a', NS(foo='a', bar=[])), 1105ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh ('a b', NS(foo='a', bar=['b'])), 1106ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh ('a b c', NS(foo='a', bar=['b', 'c'])), 1107ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh ] 1108ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh 1109ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh 1110ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsiehclass TestPositionalsNargsOptionalOneOrMore(ParserTestCase): 1111ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh """Test an Optional narg followed by one or more nargs""" 1112ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh 1113ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh argument_signatures = [Sig('foo', nargs='?'), Sig('bar', nargs='+')] 1114ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh failures = ['', '--foo'] 1115ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh successes = [ 1116ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh ('a', NS(foo=None, bar=['a'])), 1117ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh ('a b', NS(foo='a', bar=['b'])), 1118ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh ('a b c', NS(foo='a', bar=['b', 'c'])), 1119ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh ] 1120ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh 1121ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh 1122ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsiehclass TestPositionalsChoicesString(ParserTestCase): 1123ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh """Test a set of single-character choices""" 1124ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh 1125ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh argument_signatures = [Sig('spam', choices=set('abcdefg'))] 1126ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh failures = ['', '--foo', 'h', '42', 'ef'] 1127ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh successes = [ 1128ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh ('a', NS(spam='a')), 1129ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh ('g', NS(spam='g')), 1130ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh ] 1131ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh 1132ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh 1133ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsiehclass TestPositionalsChoicesInt(ParserTestCase): 1134ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh """Test a set of integer choices""" 1135ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh 1136ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh argument_signatures = [Sig('spam', type=int, choices=range(20))] 1137ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh failures = ['', '--foo', 'h', '42', 'ef'] 1138ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh successes = [ 1139ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh ('4', NS(spam=4)), 1140ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh ('15', NS(spam=15)), 1141ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh ] 1142ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh 1143ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh 1144ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsiehclass TestPositionalsActionAppend(ParserTestCase): 1145ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh """Test the 'append' action""" 1146ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh 1147ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh argument_signatures = [ 1148ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh Sig('spam', action='append'), 1149ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh Sig('spam', action='append', nargs=2), 1150ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh ] 1151ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh failures = ['', '--foo', 'a', 'a b', 'a b c d'] 1152ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh successes = [ 1153ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh ('a b c', NS(spam=['a', ['b', 'c']])), 1154ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh ] 1155ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh 1156ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh# ======================================== 1157ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh# Combined optionals and positionals tests 1158ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh# ======================================== 1159ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh 1160ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsiehclass TestOptionalsNumericAndPositionals(ParserTestCase): 1161ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh """Tests negative number args when numeric options are present""" 1162ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh 1163ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh argument_signatures = [ 1164ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh Sig('x', nargs='?'), 1165ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh Sig('-4', dest='y', action='store_true'), 1166ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh ] 1167ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh failures = ['-2', '-315'] 1168ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh successes = [ 1169ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh ('', NS(x=None, y=False)), 1170ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh ('a', NS(x='a', y=False)), 1171ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh ('-4', NS(x=None, y=True)), 1172ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh ('-4 a', NS(x='a', y=True)), 1173ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh ] 1174ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh 1175ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh 1176ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsiehclass TestOptionalsAlmostNumericAndPositionals(ParserTestCase): 1177ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh """Tests negative number args when almost numeric options are present""" 1178ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh 1179ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh argument_signatures = [ 1180ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh Sig('x', nargs='?'), 1181ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh Sig('-k4', dest='y', action='store_true'), 1182ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh ] 1183ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh failures = ['-k3'] 1184ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh successes = [ 1185ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh ('', NS(x=None, y=False)), 1186ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh ('-2', NS(x='-2', y=False)), 1187ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh ('a', NS(x='a', y=False)), 1188ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh ('-k4', NS(x=None, y=True)), 1189ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh ('-k4 a', NS(x='a', y=True)), 1190ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh ] 1191ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh 1192ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh 1193ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsiehclass TestEmptyAndSpaceContainingArguments(ParserTestCase): 1194ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh 1195ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh argument_signatures = [ 1196ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh Sig('x', nargs='?'), 1197ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh Sig('-y', '--yyy', dest='y'), 1198ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh ] 1199ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh failures = ['-y'] 1200ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh successes = [ 1201ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh ([''], NS(x='', y=None)), 1202ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh (['a badger'], NS(x='a badger', y=None)), 1203ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh (['-a badger'], NS(x='-a badger', y=None)), 1204ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh (['-y', ''], NS(x=None, y='')), 1205ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh (['-y', 'a badger'], NS(x=None, y='a badger')), 1206ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh (['-y', '-a badger'], NS(x=None, y='-a badger')), 1207ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh (['--yyy=a badger'], NS(x=None, y='a badger')), 1208ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh (['--yyy=-a badger'], NS(x=None, y='-a badger')), 1209ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh ] 1210ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh 1211ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh 1212ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsiehclass TestPrefixCharacterOnlyArguments(ParserTestCase): 1213ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh 1214ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh parser_signature = Sig(prefix_chars='-+') 1215ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh argument_signatures = [ 1216ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh Sig('-', dest='x', nargs='?', const='badger'), 1217ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh Sig('+', dest='y', type=int, default=42), 1218ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh Sig('-+-', dest='z', action='store_true'), 1219ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh ] 1220ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh failures = ['-y', '+ -'] 1221ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh successes = [ 1222ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh ('', NS(x=None, y=42, z=False)), 1223ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh ('-', NS(x='badger', y=42, z=False)), 1224ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh ('- X', NS(x='X', y=42, z=False)), 1225ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh ('+ -3', NS(x=None, y=-3, z=False)), 1226ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh ('-+-', NS(x=None, y=42, z=True)), 1227ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh ('- ===', NS(x='===', y=42, z=False)), 1228ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh ] 1229ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh 1230ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh 1231ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsiehclass TestNargsZeroOrMore(ParserTestCase): 1232ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh """Tests specifying an args for an Optional that accepts zero or more""" 1233ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh 1234ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh argument_signatures = [Sig('-x', nargs='*'), Sig('y', nargs='*')] 1235ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh failures = [] 1236ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh successes = [ 1237ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh ('', NS(x=None, y=[])), 1238ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh ('-x', NS(x=[], y=[])), 1239ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh ('-x a', NS(x=['a'], y=[])), 1240ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh ('-x a -- b', NS(x=['a'], y=['b'])), 1241ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh ('a', NS(x=None, y=['a'])), 1242ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh ('a -x', NS(x=[], y=['a'])), 1243ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh ('a -x b', NS(x=['b'], y=['a'])), 1244ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh ] 1245ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh 1246ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh 1247ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsiehclass TestNargsRemainder(ParserTestCase): 1248ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh """Tests specifying a positional with nargs=REMAINDER""" 1249ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh 1250ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh argument_signatures = [Sig('x'), Sig('y', nargs='...'), Sig('-z')] 1251ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh failures = ['', '-z', '-z Z'] 1252ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh successes = [ 1253ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh ('X', NS(x='X', y=[], z=None)), 1254ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh ('-z Z X', NS(x='X', y=[], z='Z')), 1255ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh ('X A B -z Z', NS(x='X', y=['A', 'B', '-z', 'Z'], z=None)), 1256ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh ('X Y --foo', NS(x='X', y=['Y', '--foo'], z=None)), 1257ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh ] 1258ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh 1259ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh 1260ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsiehclass TestOptionLike(ParserTestCase): 1261ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh """Tests options that may or may not be arguments""" 1262ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh 1263ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh argument_signatures = [ 1264ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh Sig('-x', type=float), 1265ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh Sig('-3', type=float, dest='y'), 1266ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh Sig('z', nargs='*'), 1267ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh ] 1268ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh failures = ['-x', '-y2.5', '-xa', '-x -a', 1269ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh '-x -3', '-x -3.5', '-3 -3.5', 1270ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh '-x -2.5', '-x -2.5 a', '-3 -.5', 1271ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh 'a x -1', '-x -1 a', '-3 -1 a'] 1272ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh successes = [ 1273ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh ('', NS(x=None, y=None, z=[])), 1274ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh ('-x 2.5', NS(x=2.5, y=None, z=[])), 1275ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh ('-x 2.5 a', NS(x=2.5, y=None, z=['a'])), 1276ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh ('-3.5', NS(x=None, y=0.5, z=[])), 1277ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh ('-3-.5', NS(x=None, y=-0.5, z=[])), 1278ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh ('-3 .5', NS(x=None, y=0.5, z=[])), 1279ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh ('a -3.5', NS(x=None, y=0.5, z=['a'])), 1280ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh ('a', NS(x=None, y=None, z=['a'])), 1281ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh ('a -x 1', NS(x=1.0, y=None, z=['a'])), 1282ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh ('-x 1 a', NS(x=1.0, y=None, z=['a'])), 1283ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh ('-3 1 a', NS(x=None, y=1.0, z=['a'])), 1284ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh ] 1285ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh 1286ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh 1287ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsiehclass TestDefaultSuppress(ParserTestCase): 1288ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh """Test actions with suppressed defaults""" 1289ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh 1290ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh argument_signatures = [ 1291ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh Sig('foo', nargs='?', default=argparse.SUPPRESS), 1292ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh Sig('bar', nargs='*', default=argparse.SUPPRESS), 1293ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh Sig('--baz', action='store_true', default=argparse.SUPPRESS), 1294ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh ] 1295ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh failures = ['-x'] 1296ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh successes = [ 1297ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh ('', NS()), 1298ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh ('a', NS(foo='a')), 1299ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh ('a b', NS(foo='a', bar=['b'])), 1300ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh ('--baz', NS(baz=True)), 1301ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh ('a --baz', NS(foo='a', baz=True)), 1302ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh ('--baz a b', NS(foo='a', bar=['b'], baz=True)), 1303ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh ] 1304ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh 1305ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh 1306ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsiehclass TestParserDefaultSuppress(ParserTestCase): 1307ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh """Test actions with a parser-level default of SUPPRESS""" 1308ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh 1309ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh parser_signature = Sig(argument_default=argparse.SUPPRESS) 1310ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh argument_signatures = [ 1311ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh Sig('foo', nargs='?'), 1312ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh Sig('bar', nargs='*'), 1313ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh Sig('--baz', action='store_true'), 1314ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh ] 1315ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh failures = ['-x'] 1316ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh successes = [ 1317ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh ('', NS()), 1318ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh ('a', NS(foo='a')), 1319ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh ('a b', NS(foo='a', bar=['b'])), 1320ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh ('--baz', NS(baz=True)), 1321ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh ('a --baz', NS(foo='a', baz=True)), 1322ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh ('--baz a b', NS(foo='a', bar=['b'], baz=True)), 1323ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh ] 1324ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh 1325ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh 1326ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsiehclass TestParserDefault42(ParserTestCase): 1327ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh """Test actions with a parser-level default of 42""" 1328ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh 1329ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh parser_signature = Sig(argument_default=42, version='1.0') 1330ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh argument_signatures = [ 1331ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh Sig('foo', nargs='?'), 1332ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh Sig('bar', nargs='*'), 1333ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh Sig('--baz', action='store_true'), 1334ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh ] 1335ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh failures = ['-x'] 1336ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh successes = [ 1337ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh ('', NS(foo=42, bar=42, baz=42)), 1338ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh ('a', NS(foo='a', bar=42, baz=42)), 1339ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh ('a b', NS(foo='a', bar=['b'], baz=42)), 1340ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh ('--baz', NS(foo=42, bar=42, baz=True)), 1341ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh ('a --baz', NS(foo='a', bar=42, baz=True)), 1342ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh ('--baz a b', NS(foo='a', bar=['b'], baz=True)), 1343ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh ] 1344ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh 1345ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh 1346ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsiehclass TestArgumentsFromFile(TempDirMixin, ParserTestCase): 1347ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh """Test reading arguments from a file""" 1348ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh 1349ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh def setUp(self): 1350ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh super(TestArgumentsFromFile, self).setUp() 1351ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh file_texts = [ 1352ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh ('hello', 'hello world!\n'), 1353ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh ('recursive', '-a\n' 1354ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh 'A\n' 1355ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh '@hello'), 1356ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh ('invalid', '@no-such-path\n'), 1357ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh ] 1358ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh for path, text in file_texts: 1359ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh file = open(path, 'w') 1360ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh file.write(text) 1361ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh file.close() 1362ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh 1363ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh parser_signature = Sig(fromfile_prefix_chars='@') 1364ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh argument_signatures = [ 1365ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh Sig('-a'), 1366ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh Sig('x'), 1367ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh Sig('y', nargs='+'), 1368ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh ] 1369ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh failures = ['', '-b', 'X', '@invalid', '@missing'] 1370ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh successes = [ 1371ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh ('X Y', NS(a=None, x='X', y=['Y'])), 1372ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh ('X -a A Y Z', NS(a='A', x='X', y=['Y', 'Z'])), 1373ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh ('@hello X', NS(a=None, x='hello world!', y=['X'])), 1374ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh ('X @hello', NS(a=None, x='X', y=['hello world!'])), 1375ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh ('-a B @recursive Y Z', NS(a='A', x='hello world!', y=['Y', 'Z'])), 1376ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh ('X @recursive Z -a B', NS(a='B', x='X', y=['hello world!', 'Z'])), 1377ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh (["-a", "", "X", "Y"], NS(a='', x='X', y=['Y'])), 1378ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh ] 1379ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh 1380ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh 1381ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsiehclass TestArgumentsFromFileConverter(TempDirMixin, ParserTestCase): 1382ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh """Test reading arguments from a file""" 1383ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh 1384ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh def setUp(self): 1385ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh super(TestArgumentsFromFileConverter, self).setUp() 1386ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh file_texts = [ 1387ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh ('hello', 'hello world!\n'), 1388ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh ] 1389ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh for path, text in file_texts: 1390ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh file = open(path, 'w') 1391ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh file.write(text) 1392ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh file.close() 1393ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh 1394ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh class FromFileConverterArgumentParser(ErrorRaisingArgumentParser): 1395ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh 1396ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh def convert_arg_line_to_args(self, arg_line): 1397ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh for arg in arg_line.split(): 1398ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh if not arg.strip(): 1399ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh continue 1400ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh yield arg 1401ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh parser_class = FromFileConverterArgumentParser 1402ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh parser_signature = Sig(fromfile_prefix_chars='@') 1403ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh argument_signatures = [ 1404ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh Sig('y', nargs='+'), 1405ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh ] 1406ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh failures = [] 1407ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh successes = [ 1408ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh ('@hello X', NS(y=['hello', 'world!', 'X'])), 1409ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh ] 1410ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh 1411ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh 1412ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh# ===================== 1413ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh# Type conversion tests 1414ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh# ===================== 1415ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh 1416ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsiehclass TestFileTypeRepr(TestCase): 1417ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh 1418ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh def test_r(self): 1419ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh type = argparse.FileType('r') 1420ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh self.assertEqual("FileType('r')", repr(type)) 1421ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh 1422ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh def test_wb_1(self): 1423ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh type = argparse.FileType('wb', 1) 1424ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh self.assertEqual("FileType('wb', 1)", repr(type)) 1425ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh 1426ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh 1427ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsiehclass RFile(object): 1428ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh seen = {} 1429ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh 1430ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh def __init__(self, name): 1431ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh self.name = name 1432ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh 1433ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh __hash__ = None 1434ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh 1435ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh def __eq__(self, other): 1436ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh if other in self.seen: 1437ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh text = self.seen[other] 1438ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh else: 1439ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh text = self.seen[other] = other.read() 1440ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh other.close() 1441ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh if not isinstance(text, str): 1442ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh text = text.decode('ascii') 1443ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh return self.name == other.name == text 1444ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh 1445ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh 1446ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsiehclass TestFileTypeR(TempDirMixin, ParserTestCase): 1447ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh """Test the FileType option/argument type for reading files""" 1448ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh 1449ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh def setUp(self): 1450ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh super(TestFileTypeR, self).setUp() 1451ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh for file_name in ['foo', 'bar']: 1452ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh file = open(os.path.join(self.temp_dir, file_name), 'w') 1453ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh file.write(file_name) 1454ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh file.close() 1455ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh self.create_readonly_file('readonly') 1456ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh 1457ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh argument_signatures = [ 1458ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh Sig('-x', type=argparse.FileType()), 1459ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh Sig('spam', type=argparse.FileType('r')), 1460ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh ] 1461ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh failures = ['-x', '-x bar', 'non-existent-file.txt'] 1462ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh successes = [ 1463ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh ('foo', NS(x=None, spam=RFile('foo'))), 1464ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh ('-x foo bar', NS(x=RFile('foo'), spam=RFile('bar'))), 1465ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh ('bar -x foo', NS(x=RFile('foo'), spam=RFile('bar'))), 1466ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh ('-x - -', NS(x=sys.stdin, spam=sys.stdin)), 1467ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh ('readonly', NS(x=None, spam=RFile('readonly'))), 1468ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh ] 1469ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh 1470ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsiehclass TestFileTypeDefaults(TempDirMixin, ParserTestCase): 1471ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh """Test that a file is not created unless the default is needed""" 1472ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh def setUp(self): 1473ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh super(TestFileTypeDefaults, self).setUp() 1474ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh file = open(os.path.join(self.temp_dir, 'good'), 'w') 1475ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh file.write('good') 1476ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh file.close() 1477ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh 1478ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh argument_signatures = [ 1479ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh Sig('-c', type=argparse.FileType('r'), default='no-file.txt'), 1480ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh ] 1481ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh # should provoke no such file error 1482ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh failures = [''] 1483ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh # should not provoke error because default file is created 1484ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh successes = [('-c good', NS(c=RFile('good')))] 1485ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh 1486ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh 1487ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsiehclass TestFileTypeRB(TempDirMixin, ParserTestCase): 1488ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh """Test the FileType option/argument type for reading files""" 1489ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh 1490ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh def setUp(self): 1491ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh super(TestFileTypeRB, self).setUp() 1492ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh for file_name in ['foo', 'bar']: 1493ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh file = open(os.path.join(self.temp_dir, file_name), 'w') 1494ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh file.write(file_name) 1495ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh file.close() 1496ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh 1497ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh argument_signatures = [ 1498ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh Sig('-x', type=argparse.FileType('rb')), 1499ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh Sig('spam', type=argparse.FileType('rb')), 1500ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh ] 1501ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh failures = ['-x', '-x bar'] 1502ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh successes = [ 1503ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh ('foo', NS(x=None, spam=RFile('foo'))), 1504ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh ('-x foo bar', NS(x=RFile('foo'), spam=RFile('bar'))), 1505ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh ('bar -x foo', NS(x=RFile('foo'), spam=RFile('bar'))), 1506ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh ('-x - -', NS(x=sys.stdin, spam=sys.stdin)), 1507ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh ] 1508ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh 1509ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh 1510ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsiehclass WFile(object): 1511ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh seen = set() 1512ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh 1513ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh def __init__(self, name): 1514ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh self.name = name 1515ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh 1516ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh __hash__ = None 1517ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh 1518ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh def __eq__(self, other): 1519ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh if other not in self.seen: 1520ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh text = 'Check that file is writable.' 1521ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh if 'b' in other.mode: 1522ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh text = text.encode('ascii') 1523ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh other.write(text) 1524ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh other.close() 1525ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh self.seen.add(other) 1526ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh return self.name == other.name 1527ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh 1528ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh 1529ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh@unittest.skipIf(hasattr(os, 'geteuid') and os.geteuid() == 0, 1530ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh "non-root user required") 1531ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsiehclass TestFileTypeW(TempDirMixin, ParserTestCase): 1532ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh """Test the FileType option/argument type for writing files""" 1533ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh 1534ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh def setUp(self): 1535ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh super(TestFileTypeW, self).setUp() 1536ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh self.create_readonly_file('readonly') 1537ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh 1538ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh argument_signatures = [ 1539ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh Sig('-x', type=argparse.FileType('w')), 1540ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh Sig('spam', type=argparse.FileType('w')), 1541ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh ] 1542ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh failures = ['-x', '-x bar'] 1543ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh failures = ['-x', '-x bar', 'readonly'] 1544ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh successes = [ 1545ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh ('foo', NS(x=None, spam=WFile('foo'))), 1546ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh ('-x foo bar', NS(x=WFile('foo'), spam=WFile('bar'))), 1547ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh ('bar -x foo', NS(x=WFile('foo'), spam=WFile('bar'))), 1548ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh ('-x - -', NS(x=sys.stdout, spam=sys.stdout)), 1549ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh ] 1550ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh 1551ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh 1552ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsiehclass TestFileTypeWB(TempDirMixin, ParserTestCase): 1553ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh 1554ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh argument_signatures = [ 1555ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh Sig('-x', type=argparse.FileType('wb')), 1556ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh Sig('spam', type=argparse.FileType('wb')), 1557ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh ] 1558ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh failures = ['-x', '-x bar'] 1559ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh successes = [ 1560ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh ('foo', NS(x=None, spam=WFile('foo'))), 1561ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh ('-x foo bar', NS(x=WFile('foo'), spam=WFile('bar'))), 1562ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh ('bar -x foo', NS(x=WFile('foo'), spam=WFile('bar'))), 1563ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh ('-x - -', NS(x=sys.stdout, spam=sys.stdout)), 1564ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh ] 1565ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh 1566ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh 1567ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsiehclass TestTypeCallable(ParserTestCase): 1568ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh """Test some callables as option/argument types""" 1569ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh 1570ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh argument_signatures = [ 1571ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh Sig('--eggs', type=complex), 1572ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh Sig('spam', type=float), 1573ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh ] 1574ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh failures = ['a', '42j', '--eggs a', '--eggs 2i'] 1575ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh successes = [ 1576ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh ('--eggs=42 42', NS(eggs=42, spam=42.0)), 1577ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh ('--eggs 2j -- -1.5', NS(eggs=2j, spam=-1.5)), 1578ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh ('1024.675', NS(eggs=None, spam=1024.675)), 1579ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh ] 1580ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh 1581ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh 1582ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsiehclass TestTypeUserDefined(ParserTestCase): 1583ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh """Test a user-defined option/argument type""" 1584ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh 1585ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh class MyType(TestCase): 1586ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh 1587ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh def __init__(self, value): 1588ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh self.value = value 1589ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh 1590ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh __hash__ = None 1591ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh 1592ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh def __eq__(self, other): 1593ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh return (type(self), self.value) == (type(other), other.value) 1594ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh 1595ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh argument_signatures = [ 1596ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh Sig('-x', type=MyType), 1597ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh Sig('spam', type=MyType), 1598ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh ] 1599ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh failures = [] 1600ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh successes = [ 1601ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh ('a -x b', NS(x=MyType('b'), spam=MyType('a'))), 1602ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh ('-xf g', NS(x=MyType('f'), spam=MyType('g'))), 1603ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh ] 1604ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh 1605ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh 1606ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsiehclass TestTypeClassicClass(ParserTestCase): 1607ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh """Test a classic class type""" 1608ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh 1609ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh class C: 1610ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh 1611ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh def __init__(self, value): 1612ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh self.value = value 1613ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh 1614ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh __hash__ = None 1615ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh 1616ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh def __eq__(self, other): 1617ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh return (type(self), self.value) == (type(other), other.value) 1618ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh 1619ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh argument_signatures = [ 1620ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh Sig('-x', type=C), 1621ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh Sig('spam', type=C), 1622ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh ] 1623ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh failures = [] 1624ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh successes = [ 1625ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh ('a -x b', NS(x=C('b'), spam=C('a'))), 1626ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh ('-xf g', NS(x=C('f'), spam=C('g'))), 1627ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh ] 1628ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh 1629ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh 1630ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsiehclass TestTypeRegistration(TestCase): 1631ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh """Test a user-defined type by registering it""" 1632ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh 1633ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh def test(self): 1634ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh 1635ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh def get_my_type(string): 1636ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh return 'my_type{%s}' % string 1637ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh 1638ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh parser = argparse.ArgumentParser() 1639ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh parser.register('type', 'my_type', get_my_type) 1640ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh parser.add_argument('-x', type='my_type') 1641ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh parser.add_argument('y', type='my_type') 1642ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh 1643ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh self.assertEqual(parser.parse_args('1'.split()), 1644ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh NS(x=None, y='my_type{1}')) 1645ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh self.assertEqual(parser.parse_args('-x 1 42'.split()), 1646ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh NS(x='my_type{1}', y='my_type{42}')) 1647ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh 1648ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh 1649ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh# ============ 1650ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh# Action tests 1651ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh# ============ 1652ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh 1653ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsiehclass TestActionUserDefined(ParserTestCase): 1654ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh """Test a user-defined option/argument action""" 1655ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh 1656ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh class OptionalAction(argparse.Action): 1657ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh 1658ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh def __call__(self, parser, namespace, value, option_string=None): 1659ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh try: 1660ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh # check destination and option string 1661ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh assert self.dest == 'spam', 'dest: %s' % self.dest 1662ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh assert option_string == '-s', 'flag: %s' % option_string 1663ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh # when option is before argument, badger=2, and when 1664ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh # option is after argument, badger=<whatever was set> 1665ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh expected_ns = NS(spam=0.25) 1666ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh if value in [0.125, 0.625]: 1667ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh expected_ns.badger = 2 1668ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh elif value in [2.0]: 1669ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh expected_ns.badger = 84 1670ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh else: 1671ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh raise AssertionError('value: %s' % value) 1672ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh assert expected_ns == namespace, ('expected %s, got %s' % 1673ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh (expected_ns, namespace)) 1674ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh except AssertionError: 1675ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh e = sys.exc_info()[1] 1676ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh raise ArgumentParserError('opt_action failed: %s' % e) 1677ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh setattr(namespace, 'spam', value) 1678ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh 1679ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh class PositionalAction(argparse.Action): 1680ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh 1681ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh def __call__(self, parser, namespace, value, option_string=None): 1682ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh try: 1683ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh assert option_string is None, ('option_string: %s' % 1684ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh option_string) 1685ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh # check destination 1686ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh assert self.dest == 'badger', 'dest: %s' % self.dest 1687ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh # when argument is before option, spam=0.25, and when 1688ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh # option is after argument, spam=<whatever was set> 1689ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh expected_ns = NS(badger=2) 1690ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh if value in [42, 84]: 1691ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh expected_ns.spam = 0.25 1692ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh elif value in [1]: 1693ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh expected_ns.spam = 0.625 1694ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh elif value in [2]: 1695ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh expected_ns.spam = 0.125 1696ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh else: 1697ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh raise AssertionError('value: %s' % value) 1698ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh assert expected_ns == namespace, ('expected %s, got %s' % 1699ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh (expected_ns, namespace)) 1700ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh except AssertionError: 1701ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh e = sys.exc_info()[1] 1702ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh raise ArgumentParserError('arg_action failed: %s' % e) 1703ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh setattr(namespace, 'badger', value) 1704ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh 1705ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh argument_signatures = [ 1706ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh Sig('-s', dest='spam', action=OptionalAction, 1707ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh type=float, default=0.25), 1708ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh Sig('badger', action=PositionalAction, 1709ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh type=int, nargs='?', default=2), 1710ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh ] 1711ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh failures = [] 1712ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh successes = [ 1713ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh ('-s0.125', NS(spam=0.125, badger=2)), 1714ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh ('42', NS(spam=0.25, badger=42)), 1715ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh ('-s 0.625 1', NS(spam=0.625, badger=1)), 1716ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh ('84 -s2', NS(spam=2.0, badger=84)), 1717ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh ] 1718ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh 1719ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh 1720ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsiehclass TestActionRegistration(TestCase): 1721ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh """Test a user-defined action supplied by registering it""" 1722ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh 1723ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh class MyAction(argparse.Action): 1724ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh 1725ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh def __call__(self, parser, namespace, values, option_string=None): 1726ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh setattr(namespace, self.dest, 'foo[%s]' % values) 1727ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh 1728ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh def test(self): 1729ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh 1730ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh parser = argparse.ArgumentParser() 1731ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh parser.register('action', 'my_action', self.MyAction) 1732ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh parser.add_argument('badger', action='my_action') 1733ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh 1734ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh self.assertEqual(parser.parse_args(['1']), NS(badger='foo[1]')) 1735ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh self.assertEqual(parser.parse_args(['42']), NS(badger='foo[42]')) 1736ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh 1737ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh 1738ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh# ================ 1739ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh# Subparsers tests 1740ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh# ================ 1741ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh 1742ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsiehclass TestAddSubparsers(TestCase): 1743ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh """Test the add_subparsers method""" 1744ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh 1745ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh def assertArgumentParserError(self, *args, **kwargs): 1746ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh self.assertRaises(ArgumentParserError, *args, **kwargs) 1747ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh 1748ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh def _get_parser(self, subparser_help=False, prefix_chars=None): 1749ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh # create a parser with a subparsers argument 1750ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh if prefix_chars: 1751ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh parser = ErrorRaisingArgumentParser( 1752ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh prog='PROG', description='main description', prefix_chars=prefix_chars) 1753ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh parser.add_argument( 1754ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh prefix_chars[0] * 2 + 'foo', action='store_true', help='foo help') 1755ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh else: 1756ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh parser = ErrorRaisingArgumentParser( 1757ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh prog='PROG', description='main description') 1758ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh parser.add_argument( 1759ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh '--foo', action='store_true', help='foo help') 1760ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh parser.add_argument( 1761ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh 'bar', type=float, help='bar help') 1762ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh 1763ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh # check that only one subparsers argument can be added 1764ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh subparsers = parser.add_subparsers(help='command help') 1765ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh self.assertArgumentParserError(parser.add_subparsers) 1766ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh 1767ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh # add first sub-parser 1768ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh parser1_kwargs = dict(description='1 description') 1769ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh if subparser_help: 1770ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh parser1_kwargs['help'] = '1 help' 1771ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh parser1 = subparsers.add_parser('1', **parser1_kwargs) 1772ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh parser1.add_argument('-w', type=int, help='w help') 1773ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh parser1.add_argument('x', choices='abc', help='x help') 1774ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh 1775ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh # add second sub-parser 1776ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh parser2_kwargs = dict(description='2 description') 1777ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh if subparser_help: 1778ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh parser2_kwargs['help'] = '2 help' 1779ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh parser2 = subparsers.add_parser('2', **parser2_kwargs) 1780ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh parser2.add_argument('-y', choices='123', help='y help') 1781ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh parser2.add_argument('z', type=complex, nargs='*', help='z help') 1782ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh 1783ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh # add third sub-parser 1784ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh parser3_kwargs = dict(description='3 description') 1785ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh if subparser_help: 1786ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh parser3_kwargs['help'] = '3 help' 1787ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh parser3 = subparsers.add_parser('3', **parser3_kwargs) 1788ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh parser3.add_argument('t', type=int, help='t help') 1789ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh parser3.add_argument('u', nargs='...', help='u help') 1790ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh 1791ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh # return the main parser 1792ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh return parser 1793ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh 1794ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh def setUp(self): 1795ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh super(TestAddSubparsers, self).setUp() 1796ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh self.parser = self._get_parser() 1797ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh self.command_help_parser = self._get_parser(subparser_help=True) 1798ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh 1799ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh def test_parse_args_failures(self): 1800ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh # check some failure cases: 1801ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh for args_str in ['', 'a', 'a a', '0.5 a', '0.5 1', 1802ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh '0.5 1 -y', '0.5 2 -w']: 1803ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh args = args_str.split() 1804ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh self.assertArgumentParserError(self.parser.parse_args, args) 1805ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh 1806ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh def test_parse_args(self): 1807ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh # check some non-failure cases: 1808ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh self.assertEqual( 1809ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh self.parser.parse_args('0.5 1 b -w 7'.split()), 1810ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh NS(foo=False, bar=0.5, w=7, x='b'), 1811ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh ) 1812ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh self.assertEqual( 1813ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh self.parser.parse_args('0.25 --foo 2 -y 2 3j -- -1j'.split()), 1814ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh NS(foo=True, bar=0.25, y='2', z=[3j, -1j]), 1815ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh ) 1816ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh self.assertEqual( 1817ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh self.parser.parse_args('--foo 0.125 1 c'.split()), 1818ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh NS(foo=True, bar=0.125, w=None, x='c'), 1819ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh ) 1820ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh self.assertEqual( 1821ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh self.parser.parse_args('-1.5 3 11 -- a --foo 7 -- b'.split()), 1822ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh NS(foo=False, bar=-1.5, t=11, u=['a', '--foo', '7', '--', 'b']), 1823ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh ) 1824ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh 1825ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh def test_parse_known_args(self): 1826ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh self.assertEqual( 1827ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh self.parser.parse_known_args('0.5 1 b -w 7'.split()), 1828ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh (NS(foo=False, bar=0.5, w=7, x='b'), []), 1829ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh ) 1830ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh self.assertEqual( 1831ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh self.parser.parse_known_args('0.5 -p 1 b -w 7'.split()), 1832ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh (NS(foo=False, bar=0.5, w=7, x='b'), ['-p']), 1833ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh ) 1834ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh self.assertEqual( 1835ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh self.parser.parse_known_args('0.5 1 b -w 7 -p'.split()), 1836ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh (NS(foo=False, bar=0.5, w=7, x='b'), ['-p']), 1837ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh ) 1838ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh self.assertEqual( 1839ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh self.parser.parse_known_args('0.5 1 b -q -rs -w 7'.split()), 1840ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh (NS(foo=False, bar=0.5, w=7, x='b'), ['-q', '-rs']), 1841ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh ) 1842ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh self.assertEqual( 1843ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh self.parser.parse_known_args('0.5 -W 1 b -X Y -w 7 Z'.split()), 1844ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh (NS(foo=False, bar=0.5, w=7, x='b'), ['-W', '-X', 'Y', 'Z']), 1845ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh ) 1846ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh 1847ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh def test_dest(self): 1848ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh parser = ErrorRaisingArgumentParser() 1849ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh parser.add_argument('--foo', action='store_true') 1850ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh subparsers = parser.add_subparsers(dest='bar') 1851ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh parser1 = subparsers.add_parser('1') 1852ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh parser1.add_argument('baz') 1853ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh self.assertEqual(NS(foo=False, bar='1', baz='2'), 1854ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh parser.parse_args('1 2'.split())) 1855ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh 1856ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh def test_help(self): 1857ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh self.assertEqual(self.parser.format_usage(), 1858ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh 'usage: PROG [-h] [--foo] bar {1,2,3} ...\n') 1859ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh self.assertEqual(self.parser.format_help(), textwrap.dedent('''\ 1860ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh usage: PROG [-h] [--foo] bar {1,2,3} ... 1861ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh 1862ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh main description 1863ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh 1864ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh positional arguments: 1865ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh bar bar help 1866ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh {1,2,3} command help 1867ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh 1868ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh optional arguments: 1869ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh -h, --help show this help message and exit 1870ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh --foo foo help 1871ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh ''')) 1872ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh 1873ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh def test_help_extra_prefix_chars(self): 1874ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh # Make sure - is still used for help if it is a non-first prefix char 1875ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh parser = self._get_parser(prefix_chars='+:-') 1876ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh self.assertEqual(parser.format_usage(), 1877ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh 'usage: PROG [-h] [++foo] bar {1,2,3} ...\n') 1878ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh self.assertEqual(parser.format_help(), textwrap.dedent('''\ 1879ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh usage: PROG [-h] [++foo] bar {1,2,3} ... 1880ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh 1881ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh main description 1882ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh 1883ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh positional arguments: 1884ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh bar bar help 1885ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh {1,2,3} command help 1886ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh 1887ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh optional arguments: 1888ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh -h, --help show this help message and exit 1889ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh ++foo foo help 1890ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh ''')) 1891ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh 1892ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh 1893ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh def test_help_alternate_prefix_chars(self): 1894ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh parser = self._get_parser(prefix_chars='+:/') 1895ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh self.assertEqual(parser.format_usage(), 1896ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh 'usage: PROG [+h] [++foo] bar {1,2,3} ...\n') 1897ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh self.assertEqual(parser.format_help(), textwrap.dedent('''\ 1898ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh usage: PROG [+h] [++foo] bar {1,2,3} ... 1899ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh 1900ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh main description 1901ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh 1902ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh positional arguments: 1903ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh bar bar help 1904ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh {1,2,3} command help 1905ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh 1906ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh optional arguments: 1907ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh +h, ++help show this help message and exit 1908ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh ++foo foo help 1909ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh ''')) 1910ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh 1911ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh def test_parser_command_help(self): 1912ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh self.assertEqual(self.command_help_parser.format_usage(), 1913ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh 'usage: PROG [-h] [--foo] bar {1,2,3} ...\n') 1914ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh self.assertEqual(self.command_help_parser.format_help(), 1915ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh textwrap.dedent('''\ 1916ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh usage: PROG [-h] [--foo] bar {1,2,3} ... 1917ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh 1918ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh main description 1919ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh 1920ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh positional arguments: 1921ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh bar bar help 1922ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh {1,2,3} command help 1923ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh 1 1 help 1924ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh 2 2 help 1925ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh 3 3 help 1926ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh 1927ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh optional arguments: 1928ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh -h, --help show this help message and exit 1929ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh --foo foo help 1930ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh ''')) 1931ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh 1932ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh def test_subparser_title_help(self): 1933ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh parser = ErrorRaisingArgumentParser(prog='PROG', 1934ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh description='main description') 1935ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh parser.add_argument('--foo', action='store_true', help='foo help') 1936ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh parser.add_argument('bar', help='bar help') 1937ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh subparsers = parser.add_subparsers(title='subcommands', 1938ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh description='command help', 1939ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh help='additional text') 1940ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh parser1 = subparsers.add_parser('1') 1941ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh parser2 = subparsers.add_parser('2') 1942ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh self.assertEqual(parser.format_usage(), 1943ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh 'usage: PROG [-h] [--foo] bar {1,2} ...\n') 1944ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh self.assertEqual(parser.format_help(), textwrap.dedent('''\ 1945ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh usage: PROG [-h] [--foo] bar {1,2} ... 1946ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh 1947ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh main description 1948ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh 1949ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh positional arguments: 1950ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh bar bar help 1951ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh 1952ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh optional arguments: 1953ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh -h, --help show this help message and exit 1954ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh --foo foo help 1955ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh 1956ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh subcommands: 1957ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh command help 1958ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh 1959ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh {1,2} additional text 1960ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh ''')) 1961ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh 1962ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh def _test_subparser_help(self, args_str, expected_help): 1963ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh try: 1964ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh self.parser.parse_args(args_str.split()) 1965ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh except ArgumentParserError: 1966ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh err = sys.exc_info()[1] 1967ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh if err.stdout != expected_help: 1968ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh print(repr(expected_help)) 1969ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh print(repr(err.stdout)) 1970ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh self.assertEqual(err.stdout, expected_help) 1971ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh 1972ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh def test_subparser1_help(self): 1973ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh self._test_subparser_help('5.0 1 -h', textwrap.dedent('''\ 1974ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh usage: PROG bar 1 [-h] [-w W] {a,b,c} 1975ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh 1976ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh 1 description 1977ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh 1978ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh positional arguments: 1979ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh {a,b,c} x help 1980ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh 1981ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh optional arguments: 1982ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh -h, --help show this help message and exit 1983ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh -w W w help 1984ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh ''')) 1985ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh 1986ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh def test_subparser2_help(self): 1987ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh self._test_subparser_help('5.0 2 -h', textwrap.dedent('''\ 1988ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh usage: PROG bar 2 [-h] [-y {1,2,3}] [z [z ...]] 1989ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh 1990ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh 2 description 1991ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh 1992ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh positional arguments: 1993ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh z z help 1994ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh 1995ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh optional arguments: 1996ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh -h, --help show this help message and exit 1997ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh -y {1,2,3} y help 1998ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh ''')) 1999ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh 2000ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh# ============ 2001ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh# Groups tests 2002ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh# ============ 2003ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh 2004ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsiehclass TestPositionalsGroups(TestCase): 2005ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh """Tests that order of group positionals matches construction order""" 2006ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh 2007ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh def test_nongroup_first(self): 2008ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh parser = ErrorRaisingArgumentParser() 2009ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh parser.add_argument('foo') 2010ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh group = parser.add_argument_group('g') 2011ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh group.add_argument('bar') 2012ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh parser.add_argument('baz') 2013ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh expected = NS(foo='1', bar='2', baz='3') 2014ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh result = parser.parse_args('1 2 3'.split()) 2015ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh self.assertEqual(expected, result) 2016ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh 2017ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh def test_group_first(self): 2018ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh parser = ErrorRaisingArgumentParser() 2019ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh group = parser.add_argument_group('xxx') 2020ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh group.add_argument('foo') 2021ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh parser.add_argument('bar') 2022ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh parser.add_argument('baz') 2023ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh expected = NS(foo='1', bar='2', baz='3') 2024ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh result = parser.parse_args('1 2 3'.split()) 2025ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh self.assertEqual(expected, result) 2026ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh 2027ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh def test_interleaved_groups(self): 2028ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh parser = ErrorRaisingArgumentParser() 2029ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh group = parser.add_argument_group('xxx') 2030ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh parser.add_argument('foo') 2031ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh group.add_argument('bar') 2032ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh parser.add_argument('baz') 2033ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh group = parser.add_argument_group('yyy') 2034ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh group.add_argument('frell') 2035ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh expected = NS(foo='1', bar='2', baz='3', frell='4') 2036ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh result = parser.parse_args('1 2 3 4'.split()) 2037ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh self.assertEqual(expected, result) 2038ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh 2039ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh# =================== 2040ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh# Parent parser tests 2041ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh# =================== 2042ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh 2043ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsiehclass TestParentParsers(TestCase): 2044ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh """Tests that parsers can be created with parent parsers""" 2045ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh 2046ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh def assertArgumentParserError(self, *args, **kwargs): 2047ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh self.assertRaises(ArgumentParserError, *args, **kwargs) 2048ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh 2049ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh def setUp(self): 2050ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh super(TestParentParsers, self).setUp() 2051ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh self.wxyz_parent = ErrorRaisingArgumentParser(add_help=False) 2052ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh self.wxyz_parent.add_argument('--w') 2053ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh x_group = self.wxyz_parent.add_argument_group('x') 2054ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh x_group.add_argument('-y') 2055ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh self.wxyz_parent.add_argument('z') 2056ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh 2057ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh self.abcd_parent = ErrorRaisingArgumentParser(add_help=False) 2058ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh self.abcd_parent.add_argument('a') 2059ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh self.abcd_parent.add_argument('-b') 2060ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh c_group = self.abcd_parent.add_argument_group('c') 2061ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh c_group.add_argument('--d') 2062ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh 2063ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh self.w_parent = ErrorRaisingArgumentParser(add_help=False) 2064ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh self.w_parent.add_argument('--w') 2065ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh 2066ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh self.z_parent = ErrorRaisingArgumentParser(add_help=False) 2067ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh self.z_parent.add_argument('z') 2068ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh 2069ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh # parents with mutually exclusive groups 2070ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh self.ab_mutex_parent = ErrorRaisingArgumentParser(add_help=False) 2071ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh group = self.ab_mutex_parent.add_mutually_exclusive_group() 2072ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh group.add_argument('-a', action='store_true') 2073ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh group.add_argument('-b', action='store_true') 2074ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh 2075ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh self.main_program = os.path.basename(sys.argv[0]) 2076ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh 2077ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh def test_single_parent(self): 2078ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh parser = ErrorRaisingArgumentParser(parents=[self.wxyz_parent]) 2079ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh self.assertEqual(parser.parse_args('-y 1 2 --w 3'.split()), 2080ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh NS(w='3', y='1', z='2')) 2081ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh 2082ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh def test_single_parent_mutex(self): 2083ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh self._test_mutex_ab(self.ab_mutex_parent.parse_args) 2084ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh parser = ErrorRaisingArgumentParser(parents=[self.ab_mutex_parent]) 2085ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh self._test_mutex_ab(parser.parse_args) 2086ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh 2087ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh def test_single_granparent_mutex(self): 2088ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh parents = [self.ab_mutex_parent] 2089ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh parser = ErrorRaisingArgumentParser(add_help=False, parents=parents) 2090ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh parser = ErrorRaisingArgumentParser(parents=[parser]) 2091ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh self._test_mutex_ab(parser.parse_args) 2092ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh 2093ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh def _test_mutex_ab(self, parse_args): 2094ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh self.assertEqual(parse_args([]), NS(a=False, b=False)) 2095ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh self.assertEqual(parse_args(['-a']), NS(a=True, b=False)) 2096ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh self.assertEqual(parse_args(['-b']), NS(a=False, b=True)) 2097ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh self.assertArgumentParserError(parse_args, ['-a', '-b']) 2098ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh self.assertArgumentParserError(parse_args, ['-b', '-a']) 2099ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh self.assertArgumentParserError(parse_args, ['-c']) 2100ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh self.assertArgumentParserError(parse_args, ['-a', '-c']) 2101ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh self.assertArgumentParserError(parse_args, ['-b', '-c']) 2102ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh 2103ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh def test_multiple_parents(self): 2104ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh parents = [self.abcd_parent, self.wxyz_parent] 2105ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh parser = ErrorRaisingArgumentParser(parents=parents) 2106ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh self.assertEqual(parser.parse_args('--d 1 --w 2 3 4'.split()), 2107ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh NS(a='3', b=None, d='1', w='2', y=None, z='4')) 2108ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh 2109ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh def test_multiple_parents_mutex(self): 2110ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh parents = [self.ab_mutex_parent, self.wxyz_parent] 2111ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh parser = ErrorRaisingArgumentParser(parents=parents) 2112ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh self.assertEqual(parser.parse_args('-a --w 2 3'.split()), 2113ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh NS(a=True, b=False, w='2', y=None, z='3')) 2114ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh self.assertArgumentParserError( 2115ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh parser.parse_args, '-a --w 2 3 -b'.split()) 2116ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh self.assertArgumentParserError( 2117ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh parser.parse_args, '-a -b --w 2 3'.split()) 2118ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh 2119ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh def test_conflicting_parents(self): 2120ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh self.assertRaises( 2121ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh argparse.ArgumentError, 2122ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh argparse.ArgumentParser, 2123ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh parents=[self.w_parent, self.wxyz_parent]) 2124ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh 2125ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh def test_conflicting_parents_mutex(self): 2126ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh self.assertRaises( 2127ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh argparse.ArgumentError, 2128ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh argparse.ArgumentParser, 2129ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh parents=[self.abcd_parent, self.ab_mutex_parent]) 2130ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh 2131ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh def test_same_argument_name_parents(self): 2132ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh parents = [self.wxyz_parent, self.z_parent] 2133ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh parser = ErrorRaisingArgumentParser(parents=parents) 2134ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh self.assertEqual(parser.parse_args('1 2'.split()), 2135ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh NS(w=None, y=None, z='2')) 2136ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh 2137ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh def test_subparser_parents(self): 2138ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh parser = ErrorRaisingArgumentParser() 2139ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh subparsers = parser.add_subparsers() 2140ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh abcde_parser = subparsers.add_parser('bar', parents=[self.abcd_parent]) 2141ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh abcde_parser.add_argument('e') 2142ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh self.assertEqual(parser.parse_args('bar -b 1 --d 2 3 4'.split()), 2143ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh NS(a='3', b='1', d='2', e='4')) 2144ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh 2145ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh def test_subparser_parents_mutex(self): 2146ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh parser = ErrorRaisingArgumentParser() 2147ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh subparsers = parser.add_subparsers() 2148ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh parents = [self.ab_mutex_parent] 2149ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh abc_parser = subparsers.add_parser('foo', parents=parents) 2150ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh c_group = abc_parser.add_argument_group('c_group') 2151ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh c_group.add_argument('c') 2152ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh parents = [self.wxyz_parent, self.ab_mutex_parent] 2153ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh wxyzabe_parser = subparsers.add_parser('bar', parents=parents) 2154ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh wxyzabe_parser.add_argument('e') 2155ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh self.assertEqual(parser.parse_args('foo -a 4'.split()), 2156ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh NS(a=True, b=False, c='4')) 2157ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh self.assertEqual(parser.parse_args('bar -b --w 2 3 4'.split()), 2158ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh NS(a=False, b=True, w='2', y=None, z='3', e='4')) 2159ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh self.assertArgumentParserError( 2160ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh parser.parse_args, 'foo -a -b 4'.split()) 2161ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh self.assertArgumentParserError( 2162ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh parser.parse_args, 'bar -b -a 4'.split()) 2163ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh 2164ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh def test_parent_help(self): 2165ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh parents = [self.abcd_parent, self.wxyz_parent] 2166ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh parser = ErrorRaisingArgumentParser(parents=parents) 2167ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh parser_help = parser.format_help() 2168ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh progname = self.main_program 2169ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh self.assertEqual(parser_help, textwrap.dedent('''\ 2170ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh usage: {}{}[-h] [-b B] [--d D] [--w W] [-y Y] a z 2171ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh 2172ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh positional arguments: 2173ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh a 2174ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh z 2175ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh 2176ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh optional arguments: 2177ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh -h, --help show this help message and exit 2178ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh -b B 2179ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh --w W 2180ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh 2181ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh c: 2182ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh --d D 2183ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh 2184ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh x: 2185ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh -y Y 2186ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh '''.format(progname, ' ' if progname else '' ))) 2187ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh 2188ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh def test_groups_parents(self): 2189ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh parent = ErrorRaisingArgumentParser(add_help=False) 2190ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh g = parent.add_argument_group(title='g', description='gd') 2191ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh g.add_argument('-w') 2192ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh g.add_argument('-x') 2193ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh m = parent.add_mutually_exclusive_group() 2194ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh m.add_argument('-y') 2195ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh m.add_argument('-z') 2196ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh parser = ErrorRaisingArgumentParser(parents=[parent]) 2197ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh 2198ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh self.assertRaises(ArgumentParserError, parser.parse_args, 2199ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh ['-y', 'Y', '-z', 'Z']) 2200ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh 2201ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh parser_help = parser.format_help() 2202ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh progname = self.main_program 2203ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh self.assertEqual(parser_help, textwrap.dedent('''\ 2204ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh usage: {}{}[-h] [-w W] [-x X] [-y Y | -z Z] 2205ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh 2206ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh optional arguments: 2207ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh -h, --help show this help message and exit 2208ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh -y Y 2209ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh -z Z 2210ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh 2211ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh g: 2212ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh gd 2213ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh 2214ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh -w W 2215ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh -x X 2216ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh '''.format(progname, ' ' if progname else '' ))) 2217ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh 2218ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh# ============================== 2219ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh# Mutually exclusive group tests 2220ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh# ============================== 2221ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh 2222ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsiehclass TestMutuallyExclusiveGroupErrors(TestCase): 2223ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh 2224ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh def test_invalid_add_argument_group(self): 2225ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh parser = ErrorRaisingArgumentParser() 2226ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh raises = self.assertRaises 2227ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh raises(TypeError, parser.add_mutually_exclusive_group, title='foo') 2228ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh 2229ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh def test_invalid_add_argument(self): 2230ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh parser = ErrorRaisingArgumentParser() 2231ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh group = parser.add_mutually_exclusive_group() 2232ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh add_argument = group.add_argument 2233ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh raises = self.assertRaises 2234ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh raises(ValueError, add_argument, '--foo', required=True) 2235ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh raises(ValueError, add_argument, 'bar') 2236ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh raises(ValueError, add_argument, 'bar', nargs='+') 2237ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh raises(ValueError, add_argument, 'bar', nargs=1) 2238ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh raises(ValueError, add_argument, 'bar', nargs=argparse.PARSER) 2239ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh 2240ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh def test_help(self): 2241ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh parser = ErrorRaisingArgumentParser(prog='PROG') 2242ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh group1 = parser.add_mutually_exclusive_group() 2243ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh group1.add_argument('--foo', action='store_true') 2244ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh group1.add_argument('--bar', action='store_false') 2245ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh group2 = parser.add_mutually_exclusive_group() 2246ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh group2.add_argument('--soup', action='store_true') 2247ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh group2.add_argument('--nuts', action='store_false') 2248ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh expected = '''\ 2249ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh usage: PROG [-h] [--foo | --bar] [--soup | --nuts] 2250ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh 2251ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh optional arguments: 2252ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh -h, --help show this help message and exit 2253ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh --foo 2254ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh --bar 2255ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh --soup 2256ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh --nuts 2257ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh ''' 2258ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh self.assertEqual(parser.format_help(), textwrap.dedent(expected)) 2259ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh 2260ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsiehclass MEMixin(object): 2261ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh 2262ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh def test_failures_when_not_required(self): 2263ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh parse_args = self.get_parser(required=False).parse_args 2264ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh error = ArgumentParserError 2265ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh for args_string in self.failures: 2266ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh self.assertRaises(error, parse_args, args_string.split()) 2267ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh 2268ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh def test_failures_when_required(self): 2269ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh parse_args = self.get_parser(required=True).parse_args 2270ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh error = ArgumentParserError 2271ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh for args_string in self.failures + ['']: 2272ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh self.assertRaises(error, parse_args, args_string.split()) 2273ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh 2274ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh def test_successes_when_not_required(self): 2275ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh parse_args = self.get_parser(required=False).parse_args 2276ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh successes = self.successes + self.successes_when_not_required 2277ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh for args_string, expected_ns in successes: 2278ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh actual_ns = parse_args(args_string.split()) 2279ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh self.assertEqual(actual_ns, expected_ns) 2280ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh 2281ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh def test_successes_when_required(self): 2282ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh parse_args = self.get_parser(required=True).parse_args 2283ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh for args_string, expected_ns in self.successes: 2284ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh actual_ns = parse_args(args_string.split()) 2285ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh self.assertEqual(actual_ns, expected_ns) 2286ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh 2287ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh def test_usage_when_not_required(self): 2288ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh format_usage = self.get_parser(required=False).format_usage 2289ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh expected_usage = self.usage_when_not_required 2290ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh self.assertEqual(format_usage(), textwrap.dedent(expected_usage)) 2291ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh 2292ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh def test_usage_when_required(self): 2293ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh format_usage = self.get_parser(required=True).format_usage 2294ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh expected_usage = self.usage_when_required 2295ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh self.assertEqual(format_usage(), textwrap.dedent(expected_usage)) 2296ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh 2297ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh def test_help_when_not_required(self): 2298ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh format_help = self.get_parser(required=False).format_help 2299ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh help = self.usage_when_not_required + self.help 2300ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh self.assertEqual(format_help(), textwrap.dedent(help)) 2301ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh 2302ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh def test_help_when_required(self): 2303ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh format_help = self.get_parser(required=True).format_help 2304ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh help = self.usage_when_required + self.help 2305ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh self.assertEqual(format_help(), textwrap.dedent(help)) 2306ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh 2307ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh 2308ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsiehclass TestMutuallyExclusiveSimple(MEMixin, TestCase): 2309ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh 2310ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh def get_parser(self, required=None): 2311ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh parser = ErrorRaisingArgumentParser(prog='PROG') 2312ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh group = parser.add_mutually_exclusive_group(required=required) 2313ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh group.add_argument('--bar', help='bar help') 2314ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh group.add_argument('--baz', nargs='?', const='Z', help='baz help') 2315ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh return parser 2316ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh 2317ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh failures = ['--bar X --baz Y', '--bar X --baz'] 2318ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh successes = [ 2319ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh ('--bar X', NS(bar='X', baz=None)), 2320ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh ('--bar X --bar Z', NS(bar='Z', baz=None)), 2321ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh ('--baz Y', NS(bar=None, baz='Y')), 2322ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh ('--baz', NS(bar=None, baz='Z')), 2323ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh ] 2324ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh successes_when_not_required = [ 2325ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh ('', NS(bar=None, baz=None)), 2326ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh ] 2327ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh 2328ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh usage_when_not_required = '''\ 2329ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh usage: PROG [-h] [--bar BAR | --baz [BAZ]] 2330ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh ''' 2331ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh usage_when_required = '''\ 2332ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh usage: PROG [-h] (--bar BAR | --baz [BAZ]) 2333ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh ''' 2334ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh help = '''\ 2335ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh 2336ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh optional arguments: 2337ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh -h, --help show this help message and exit 2338ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh --bar BAR bar help 2339ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh --baz [BAZ] baz help 2340ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh ''' 2341ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh 2342ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh 2343ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsiehclass TestMutuallyExclusiveLong(MEMixin, TestCase): 2344ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh 2345ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh def get_parser(self, required=None): 2346ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh parser = ErrorRaisingArgumentParser(prog='PROG') 2347ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh parser.add_argument('--abcde', help='abcde help') 2348ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh parser.add_argument('--fghij', help='fghij help') 2349ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh group = parser.add_mutually_exclusive_group(required=required) 2350ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh group.add_argument('--klmno', help='klmno help') 2351ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh group.add_argument('--pqrst', help='pqrst help') 2352ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh return parser 2353ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh 2354ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh failures = ['--klmno X --pqrst Y'] 2355ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh successes = [ 2356ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh ('--klmno X', NS(abcde=None, fghij=None, klmno='X', pqrst=None)), 2357ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh ('--abcde Y --klmno X', 2358ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh NS(abcde='Y', fghij=None, klmno='X', pqrst=None)), 2359ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh ('--pqrst X', NS(abcde=None, fghij=None, klmno=None, pqrst='X')), 2360ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh ('--pqrst X --fghij Y', 2361ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh NS(abcde=None, fghij='Y', klmno=None, pqrst='X')), 2362ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh ] 2363ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh successes_when_not_required = [ 2364ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh ('', NS(abcde=None, fghij=None, klmno=None, pqrst=None)), 2365ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh ] 2366ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh 2367ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh usage_when_not_required = '''\ 2368ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh usage: PROG [-h] [--abcde ABCDE] [--fghij FGHIJ] 2369ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh [--klmno KLMNO | --pqrst PQRST] 2370ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh ''' 2371ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh usage_when_required = '''\ 2372ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh usage: PROG [-h] [--abcde ABCDE] [--fghij FGHIJ] 2373ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh (--klmno KLMNO | --pqrst PQRST) 2374ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh ''' 2375ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh help = '''\ 2376ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh 2377ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh optional arguments: 2378ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh -h, --help show this help message and exit 2379ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh --abcde ABCDE abcde help 2380ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh --fghij FGHIJ fghij help 2381ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh --klmno KLMNO klmno help 2382ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh --pqrst PQRST pqrst help 2383ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh ''' 2384ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh 2385ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh 2386ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsiehclass TestMutuallyExclusiveFirstSuppressed(MEMixin, TestCase): 2387ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh 2388ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh def get_parser(self, required): 2389ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh parser = ErrorRaisingArgumentParser(prog='PROG') 2390ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh group = parser.add_mutually_exclusive_group(required=required) 2391ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh group.add_argument('-x', help=argparse.SUPPRESS) 2392ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh group.add_argument('-y', action='store_false', help='y help') 2393ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh return parser 2394ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh 2395ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh failures = ['-x X -y'] 2396ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh successes = [ 2397ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh ('-x X', NS(x='X', y=True)), 2398ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh ('-x X -x Y', NS(x='Y', y=True)), 2399ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh ('-y', NS(x=None, y=False)), 2400ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh ] 2401ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh successes_when_not_required = [ 2402ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh ('', NS(x=None, y=True)), 2403ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh ] 2404ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh 2405ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh usage_when_not_required = '''\ 2406ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh usage: PROG [-h] [-y] 2407ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh ''' 2408ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh usage_when_required = '''\ 2409ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh usage: PROG [-h] -y 2410ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh ''' 2411ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh help = '''\ 2412ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh 2413ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh optional arguments: 2414ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh -h, --help show this help message and exit 2415ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh -y y help 2416ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh ''' 2417ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh 2418ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh 2419ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsiehclass TestMutuallyExclusiveManySuppressed(MEMixin, TestCase): 2420ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh 2421ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh def get_parser(self, required): 2422ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh parser = ErrorRaisingArgumentParser(prog='PROG') 2423ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh group = parser.add_mutually_exclusive_group(required=required) 2424ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh add = group.add_argument 2425ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh add('--spam', action='store_true', help=argparse.SUPPRESS) 2426ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh add('--badger', action='store_false', help=argparse.SUPPRESS) 2427ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh add('--bladder', help=argparse.SUPPRESS) 2428ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh return parser 2429ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh 2430ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh failures = [ 2431ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh '--spam --badger', 2432ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh '--badger --bladder B', 2433ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh '--bladder B --spam', 2434ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh ] 2435ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh successes = [ 2436ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh ('--spam', NS(spam=True, badger=True, bladder=None)), 2437ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh ('--badger', NS(spam=False, badger=False, bladder=None)), 2438ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh ('--bladder B', NS(spam=False, badger=True, bladder='B')), 2439ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh ('--spam --spam', NS(spam=True, badger=True, bladder=None)), 2440ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh ] 2441ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh successes_when_not_required = [ 2442ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh ('', NS(spam=False, badger=True, bladder=None)), 2443ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh ] 2444ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh 2445ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh usage_when_required = usage_when_not_required = '''\ 2446ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh usage: PROG [-h] 2447ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh ''' 2448ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh help = '''\ 2449ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh 2450ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh optional arguments: 2451ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh -h, --help show this help message and exit 2452ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh ''' 2453ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh 2454ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh 2455ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsiehclass TestMutuallyExclusiveOptionalAndPositional(MEMixin, TestCase): 2456ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh 2457ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh def get_parser(self, required): 2458ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh parser = ErrorRaisingArgumentParser(prog='PROG') 2459ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh group = parser.add_mutually_exclusive_group(required=required) 2460ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh group.add_argument('--foo', action='store_true', help='FOO') 2461ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh group.add_argument('--spam', help='SPAM') 2462ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh group.add_argument('badger', nargs='*', default='X', help='BADGER') 2463ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh return parser 2464ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh 2465ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh failures = [ 2466ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh '--foo --spam S', 2467ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh '--spam S X', 2468ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh 'X --foo', 2469ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh 'X Y Z --spam S', 2470ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh '--foo X Y', 2471ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh ] 2472ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh successes = [ 2473ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh ('--foo', NS(foo=True, spam=None, badger='X')), 2474ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh ('--spam S', NS(foo=False, spam='S', badger='X')), 2475ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh ('X', NS(foo=False, spam=None, badger=['X'])), 2476ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh ('X Y Z', NS(foo=False, spam=None, badger=['X', 'Y', 'Z'])), 2477ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh ] 2478ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh successes_when_not_required = [ 2479ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh ('', NS(foo=False, spam=None, badger='X')), 2480ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh ] 2481ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh 2482ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh usage_when_not_required = '''\ 2483ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh usage: PROG [-h] [--foo | --spam SPAM | badger [badger ...]] 2484ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh ''' 2485ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh usage_when_required = '''\ 2486ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh usage: PROG [-h] (--foo | --spam SPAM | badger [badger ...]) 2487ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh ''' 2488ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh help = '''\ 2489ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh 2490ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh positional arguments: 2491ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh badger BADGER 2492ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh 2493ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh optional arguments: 2494ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh -h, --help show this help message and exit 2495ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh --foo FOO 2496ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh --spam SPAM SPAM 2497ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh ''' 2498ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh 2499ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh 2500ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsiehclass TestMutuallyExclusiveOptionalsMixed(MEMixin, TestCase): 2501ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh 2502ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh def get_parser(self, required): 2503ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh parser = ErrorRaisingArgumentParser(prog='PROG') 2504ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh parser.add_argument('-x', action='store_true', help='x help') 2505ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh group = parser.add_mutually_exclusive_group(required=required) 2506ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh group.add_argument('-a', action='store_true', help='a help') 2507ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh group.add_argument('-b', action='store_true', help='b help') 2508ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh parser.add_argument('-y', action='store_true', help='y help') 2509ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh group.add_argument('-c', action='store_true', help='c help') 2510ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh return parser 2511ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh 2512ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh failures = ['-a -b', '-b -c', '-a -c', '-a -b -c'] 2513ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh successes = [ 2514ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh ('-a', NS(a=True, b=False, c=False, x=False, y=False)), 2515ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh ('-b', NS(a=False, b=True, c=False, x=False, y=False)), 2516ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh ('-c', NS(a=False, b=False, c=True, x=False, y=False)), 2517ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh ('-a -x', NS(a=True, b=False, c=False, x=True, y=False)), 2518ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh ('-y -b', NS(a=False, b=True, c=False, x=False, y=True)), 2519ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh ('-x -y -c', NS(a=False, b=False, c=True, x=True, y=True)), 2520ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh ] 2521ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh successes_when_not_required = [ 2522ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh ('', NS(a=False, b=False, c=False, x=False, y=False)), 2523ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh ('-x', NS(a=False, b=False, c=False, x=True, y=False)), 2524ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh ('-y', NS(a=False, b=False, c=False, x=False, y=True)), 2525ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh ] 2526ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh 2527ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh usage_when_required = usage_when_not_required = '''\ 2528ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh usage: PROG [-h] [-x] [-a] [-b] [-y] [-c] 2529ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh ''' 2530ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh help = '''\ 2531ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh 2532ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh optional arguments: 2533ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh -h, --help show this help message and exit 2534ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh -x x help 2535ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh -a a help 2536ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh -b b help 2537ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh -y y help 2538ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh -c c help 2539ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh ''' 2540ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh 2541ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh 2542ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsiehclass TestMutuallyExclusiveInGroup(MEMixin, TestCase): 2543ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh 2544ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh def get_parser(self, required=None): 2545ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh parser = ErrorRaisingArgumentParser(prog='PROG') 2546ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh titled_group = parser.add_argument_group( 2547ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh title='Titled group', description='Group description') 2548ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh mutex_group = \ 2549ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh titled_group.add_mutually_exclusive_group(required=required) 2550ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh mutex_group.add_argument('--bar', help='bar help') 2551ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh mutex_group.add_argument('--baz', help='baz help') 2552ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh return parser 2553ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh 2554ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh failures = ['--bar X --baz Y', '--baz X --bar Y'] 2555ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh successes = [ 2556ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh ('--bar X', NS(bar='X', baz=None)), 2557ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh ('--baz Y', NS(bar=None, baz='Y')), 2558ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh ] 2559ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh successes_when_not_required = [ 2560ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh ('', NS(bar=None, baz=None)), 2561ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh ] 2562ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh 2563ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh usage_when_not_required = '''\ 2564ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh usage: PROG [-h] [--bar BAR | --baz BAZ] 2565ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh ''' 2566ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh usage_when_required = '''\ 2567ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh usage: PROG [-h] (--bar BAR | --baz BAZ) 2568ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh ''' 2569ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh help = '''\ 2570ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh 2571ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh optional arguments: 2572ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh -h, --help show this help message and exit 2573ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh 2574ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh Titled group: 2575ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh Group description 2576ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh 2577ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh --bar BAR bar help 2578ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh --baz BAZ baz help 2579ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh ''' 2580ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh 2581ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh 2582ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsiehclass TestMutuallyExclusiveOptionalsAndPositionalsMixed(MEMixin, TestCase): 2583ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh 2584ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh def get_parser(self, required): 2585ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh parser = ErrorRaisingArgumentParser(prog='PROG') 2586ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh parser.add_argument('x', help='x help') 2587ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh parser.add_argument('-y', action='store_true', help='y help') 2588ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh group = parser.add_mutually_exclusive_group(required=required) 2589ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh group.add_argument('a', nargs='?', help='a help') 2590ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh group.add_argument('-b', action='store_true', help='b help') 2591ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh group.add_argument('-c', action='store_true', help='c help') 2592ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh return parser 2593ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh 2594ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh failures = ['X A -b', '-b -c', '-c X A'] 2595ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh successes = [ 2596ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh ('X A', NS(a='A', b=False, c=False, x='X', y=False)), 2597ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh ('X -b', NS(a=None, b=True, c=False, x='X', y=False)), 2598ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh ('X -c', NS(a=None, b=False, c=True, x='X', y=False)), 2599ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh ('X A -y', NS(a='A', b=False, c=False, x='X', y=True)), 2600ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh ('X -y -b', NS(a=None, b=True, c=False, x='X', y=True)), 2601ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh ] 2602ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh successes_when_not_required = [ 2603ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh ('X', NS(a=None, b=False, c=False, x='X', y=False)), 2604ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh ('X -y', NS(a=None, b=False, c=False, x='X', y=True)), 2605ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh ] 2606ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh 2607ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh usage_when_required = usage_when_not_required = '''\ 2608ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh usage: PROG [-h] [-y] [-b] [-c] x [a] 2609ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh ''' 2610ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh help = '''\ 2611ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh 2612ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh positional arguments: 2613ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh x x help 2614ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh a a help 2615ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh 2616ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh optional arguments: 2617ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh -h, --help show this help message and exit 2618ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh -y y help 2619ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh -b b help 2620ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh -c c help 2621ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh ''' 2622ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh 2623ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh# ================================================= 2624ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh# Mutually exclusive group in parent parser tests 2625ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh# ================================================= 2626ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh 2627ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsiehclass MEPBase(object): 2628ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh 2629ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh def get_parser(self, required=None): 2630ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh parent = super(MEPBase, self).get_parser(required=required) 2631ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh parser = ErrorRaisingArgumentParser( 2632ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh prog=parent.prog, add_help=False, parents=[parent]) 2633ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh return parser 2634ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh 2635ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh 2636ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsiehclass TestMutuallyExclusiveGroupErrorsParent( 2637ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh MEPBase, TestMutuallyExclusiveGroupErrors): 2638ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh pass 2639ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh 2640ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh 2641ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsiehclass TestMutuallyExclusiveSimpleParent( 2642ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh MEPBase, TestMutuallyExclusiveSimple): 2643ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh pass 2644ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh 2645ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh 2646ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsiehclass TestMutuallyExclusiveLongParent( 2647ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh MEPBase, TestMutuallyExclusiveLong): 2648ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh pass 2649ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh 2650ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh 2651ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsiehclass TestMutuallyExclusiveFirstSuppressedParent( 2652ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh MEPBase, TestMutuallyExclusiveFirstSuppressed): 2653ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh pass 2654ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh 2655ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh 2656ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsiehclass TestMutuallyExclusiveManySuppressedParent( 2657ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh MEPBase, TestMutuallyExclusiveManySuppressed): 2658ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh pass 2659ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh 2660ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh 2661ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsiehclass TestMutuallyExclusiveOptionalAndPositionalParent( 2662ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh MEPBase, TestMutuallyExclusiveOptionalAndPositional): 2663ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh pass 2664ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh 2665ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh 2666ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsiehclass TestMutuallyExclusiveOptionalsMixedParent( 2667ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh MEPBase, TestMutuallyExclusiveOptionalsMixed): 2668ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh pass 2669ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh 2670ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh 2671ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsiehclass TestMutuallyExclusiveOptionalsAndPositionalsMixedParent( 2672ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh MEPBase, TestMutuallyExclusiveOptionalsAndPositionalsMixed): 2673ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh pass 2674ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh 2675ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh# ================= 2676ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh# Set default tests 2677ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh# ================= 2678ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh 2679ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsiehclass TestSetDefaults(TestCase): 2680ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh 2681ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh def test_set_defaults_no_args(self): 2682ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh parser = ErrorRaisingArgumentParser() 2683ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh parser.set_defaults(x='foo') 2684ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh parser.set_defaults(y='bar', z=1) 2685ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh self.assertEqual(NS(x='foo', y='bar', z=1), 2686ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh parser.parse_args([])) 2687ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh self.assertEqual(NS(x='foo', y='bar', z=1), 2688ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh parser.parse_args([], NS())) 2689ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh self.assertEqual(NS(x='baz', y='bar', z=1), 2690ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh parser.parse_args([], NS(x='baz'))) 2691ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh self.assertEqual(NS(x='baz', y='bar', z=2), 2692ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh parser.parse_args([], NS(x='baz', z=2))) 2693ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh 2694ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh def test_set_defaults_with_args(self): 2695ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh parser = ErrorRaisingArgumentParser() 2696ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh parser.set_defaults(x='foo', y='bar') 2697ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh parser.add_argument('-x', default='xfoox') 2698ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh self.assertEqual(NS(x='xfoox', y='bar'), 2699ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh parser.parse_args([])) 2700ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh self.assertEqual(NS(x='xfoox', y='bar'), 2701ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh parser.parse_args([], NS())) 2702ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh self.assertEqual(NS(x='baz', y='bar'), 2703ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh parser.parse_args([], NS(x='baz'))) 2704ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh self.assertEqual(NS(x='1', y='bar'), 2705ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh parser.parse_args('-x 1'.split())) 2706ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh self.assertEqual(NS(x='1', y='bar'), 2707ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh parser.parse_args('-x 1'.split(), NS())) 2708ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh self.assertEqual(NS(x='1', y='bar'), 2709ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh parser.parse_args('-x 1'.split(), NS(x='baz'))) 2710ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh 2711ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh def test_set_defaults_subparsers(self): 2712ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh parser = ErrorRaisingArgumentParser() 2713ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh parser.set_defaults(x='foo') 2714ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh subparsers = parser.add_subparsers() 2715ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh parser_a = subparsers.add_parser('a') 2716ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh parser_a.set_defaults(y='bar') 2717ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh self.assertEqual(NS(x='foo', y='bar'), 2718ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh parser.parse_args('a'.split())) 2719ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh 2720ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh def test_set_defaults_parents(self): 2721ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh parent = ErrorRaisingArgumentParser(add_help=False) 2722ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh parent.set_defaults(x='foo') 2723ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh parser = ErrorRaisingArgumentParser(parents=[parent]) 2724ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh self.assertEqual(NS(x='foo'), parser.parse_args([])) 2725ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh 2726ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh def test_set_defaults_same_as_add_argument(self): 2727ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh parser = ErrorRaisingArgumentParser() 2728ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh parser.set_defaults(w='W', x='X', y='Y', z='Z') 2729ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh parser.add_argument('-w') 2730ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh parser.add_argument('-x', default='XX') 2731ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh parser.add_argument('y', nargs='?') 2732ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh parser.add_argument('z', nargs='?', default='ZZ') 2733ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh 2734ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh # defaults set previously 2735ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh self.assertEqual(NS(w='W', x='XX', y='Y', z='ZZ'), 2736ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh parser.parse_args([])) 2737ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh 2738ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh # reset defaults 2739ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh parser.set_defaults(w='WW', x='X', y='YY', z='Z') 2740ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh self.assertEqual(NS(w='WW', x='X', y='YY', z='Z'), 2741ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh parser.parse_args([])) 2742ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh 2743ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh def test_set_defaults_same_as_add_argument_group(self): 2744ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh parser = ErrorRaisingArgumentParser() 2745ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh parser.set_defaults(w='W', x='X', y='Y', z='Z') 2746ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh group = parser.add_argument_group('foo') 2747ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh group.add_argument('-w') 2748ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh group.add_argument('-x', default='XX') 2749ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh group.add_argument('y', nargs='?') 2750ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh group.add_argument('z', nargs='?', default='ZZ') 2751ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh 2752ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh 2753ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh # defaults set previously 2754ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh self.assertEqual(NS(w='W', x='XX', y='Y', z='ZZ'), 2755ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh parser.parse_args([])) 2756ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh 2757ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh # reset defaults 2758ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh parser.set_defaults(w='WW', x='X', y='YY', z='Z') 2759ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh self.assertEqual(NS(w='WW', x='X', y='YY', z='Z'), 2760ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh parser.parse_args([])) 2761ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh 2762ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh# ================= 2763ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh# Get default tests 2764ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh# ================= 2765ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh 2766ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsiehclass TestGetDefault(TestCase): 2767ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh 2768ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh def test_get_default(self): 2769ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh parser = ErrorRaisingArgumentParser() 2770ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh self.assertEqual(None, parser.get_default("foo")) 2771ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh self.assertEqual(None, parser.get_default("bar")) 2772ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh 2773ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh parser.add_argument("--foo") 2774ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh self.assertEqual(None, parser.get_default("foo")) 2775ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh self.assertEqual(None, parser.get_default("bar")) 2776ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh 2777ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh parser.add_argument("--bar", type=int, default=42) 2778ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh self.assertEqual(None, parser.get_default("foo")) 2779ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh self.assertEqual(42, parser.get_default("bar")) 2780ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh 2781ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh parser.set_defaults(foo="badger") 2782ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh self.assertEqual("badger", parser.get_default("foo")) 2783ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh self.assertEqual(42, parser.get_default("bar")) 2784ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh 2785ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh# ========================== 2786ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh# Namespace 'contains' tests 2787ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh# ========================== 2788ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh 2789ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsiehclass TestNamespaceContainsSimple(TestCase): 2790ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh 2791ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh def test_empty(self): 2792ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh ns = argparse.Namespace() 2793ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh self.assertEqual('' in ns, False) 2794ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh self.assertEqual('' not in ns, True) 2795ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh self.assertEqual('x' in ns, False) 2796ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh 2797ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh def test_non_empty(self): 2798ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh ns = argparse.Namespace(x=1, y=2) 2799ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh self.assertEqual('x' in ns, True) 2800ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh self.assertEqual('x' not in ns, False) 2801ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh self.assertEqual('y' in ns, True) 2802ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh self.assertEqual('' in ns, False) 2803ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh self.assertEqual('xx' in ns, False) 2804ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh self.assertEqual('z' in ns, False) 2805ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh 2806ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh# ===================== 2807ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh# Help formatting tests 2808ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh# ===================== 2809ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh 2810ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsiehclass TestHelpFormattingMetaclass(type): 2811ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh 2812ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh def __init__(cls, name, bases, bodydict): 2813ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh if name == 'HelpTestCase': 2814ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh return 2815ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh 2816ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh class AddTests(object): 2817ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh 2818ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh def __init__(self, test_class, func_suffix, std_name): 2819ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh self.func_suffix = func_suffix 2820ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh self.std_name = std_name 2821ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh 2822ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh for test_func in [self.test_format, 2823ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh self.test_print, 2824ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh self.test_print_file]: 2825ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh test_name = '%s_%s' % (test_func.__name__, func_suffix) 2826ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh 2827ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh def test_wrapper(self, test_func=test_func): 2828ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh test_func(self) 2829ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh try: 2830ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh test_wrapper.__name__ = test_name 2831ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh except TypeError: 2832ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh pass 2833ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh setattr(test_class, test_name, test_wrapper) 2834ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh 2835ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh def _get_parser(self, tester): 2836ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh parser = argparse.ArgumentParser( 2837ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh *tester.parser_signature.args, 2838ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh **tester.parser_signature.kwargs) 2839ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh for argument_sig in getattr(tester, 'argument_signatures', []): 2840ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh parser.add_argument(*argument_sig.args, 2841ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh **argument_sig.kwargs) 2842ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh group_sigs = getattr(tester, 'argument_group_signatures', []) 2843ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh for group_sig, argument_sigs in group_sigs: 2844ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh group = parser.add_argument_group(*group_sig.args, 2845ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh **group_sig.kwargs) 2846ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh for argument_sig in argument_sigs: 2847ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh group.add_argument(*argument_sig.args, 2848ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh **argument_sig.kwargs) 2849ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh subparsers_sigs = getattr(tester, 'subparsers_signatures', []) 2850ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh if subparsers_sigs: 2851ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh subparsers = parser.add_subparsers() 2852ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh for subparser_sig in subparsers_sigs: 2853ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh subparsers.add_parser(*subparser_sig.args, 2854ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh **subparser_sig.kwargs) 2855ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh return parser 2856ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh 2857ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh def _test(self, tester, parser_text): 2858ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh expected_text = getattr(tester, self.func_suffix) 2859ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh expected_text = textwrap.dedent(expected_text) 2860ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh if expected_text != parser_text: 2861ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh print(repr(expected_text)) 2862ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh print(repr(parser_text)) 2863ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh for char1, char2 in zip(expected_text, parser_text): 2864ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh if char1 != char2: 2865ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh print('first diff: %r %r' % (char1, char2)) 2866ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh break 2867ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh tester.assertEqual(expected_text, parser_text) 2868ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh 2869ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh def test_format(self, tester): 2870ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh parser = self._get_parser(tester) 2871ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh format = getattr(parser, 'format_%s' % self.func_suffix) 2872ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh self._test(tester, format()) 2873ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh 2874ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh def test_print(self, tester): 2875ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh parser = self._get_parser(tester) 2876ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh print_ = getattr(parser, 'print_%s' % self.func_suffix) 2877ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh old_stream = getattr(sys, self.std_name) 2878ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh setattr(sys, self.std_name, StdIOBuffer()) 2879ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh try: 2880ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh print_() 2881ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh parser_text = getattr(sys, self.std_name).getvalue() 2882ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh finally: 2883ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh setattr(sys, self.std_name, old_stream) 2884ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh self._test(tester, parser_text) 2885ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh 2886ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh def test_print_file(self, tester): 2887ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh parser = self._get_parser(tester) 2888ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh print_ = getattr(parser, 'print_%s' % self.func_suffix) 2889ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh sfile = StdIOBuffer() 2890ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh print_(sfile) 2891ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh parser_text = sfile.getvalue() 2892ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh self._test(tester, parser_text) 2893ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh 2894ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh # add tests for {format,print}_{usage,help,version} 2895ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh for func_suffix, std_name in [('usage', 'stdout'), 2896ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh ('help', 'stdout'), 2897ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh ('version', 'stderr')]: 2898ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh AddTests(cls, func_suffix, std_name) 2899ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh 2900ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsiehbases = TestCase, 2901ffab958fd8d42ed7227d83007350e61555a1fa36Andrew HsiehHelpTestCase = TestHelpFormattingMetaclass('HelpTestCase', bases, {}) 2902ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh 2903ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh 2904ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsiehclass TestHelpBiggerOptionals(HelpTestCase): 2905ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh """Make sure that argument help aligns when options are longer""" 2906ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh 2907ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh parser_signature = Sig(prog='PROG', description='DESCRIPTION', 2908ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh epilog='EPILOG', version='0.1') 2909ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh argument_signatures = [ 2910ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh Sig('-x', action='store_true', help='X HELP'), 2911ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh Sig('--y', help='Y HELP'), 2912ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh Sig('foo', help='FOO HELP'), 2913ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh Sig('bar', help='BAR HELP'), 2914ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh ] 2915ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh argument_group_signatures = [] 2916ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh usage = '''\ 2917ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh usage: PROG [-h] [-v] [-x] [--y Y] foo bar 2918ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh ''' 2919ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh help = usage + '''\ 2920ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh 2921ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh DESCRIPTION 2922ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh 2923ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh positional arguments: 2924ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh foo FOO HELP 2925ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh bar BAR HELP 2926ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh 2927ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh optional arguments: 2928ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh -h, --help show this help message and exit 2929ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh -v, --version show program's version number and exit 2930ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh -x X HELP 2931ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh --y Y Y HELP 2932ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh 2933ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh EPILOG 2934ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh ''' 2935ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh version = '''\ 2936ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh 0.1 2937ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh ''' 2938ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh 2939ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh 2940ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsiehclass TestHelpBiggerOptionalGroups(HelpTestCase): 2941ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh """Make sure that argument help aligns when options are longer""" 2942ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh 2943ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh parser_signature = Sig(prog='PROG', description='DESCRIPTION', 2944ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh epilog='EPILOG', version='0.1') 2945ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh argument_signatures = [ 2946ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh Sig('-x', action='store_true', help='X HELP'), 2947ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh Sig('--y', help='Y HELP'), 2948ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh Sig('foo', help='FOO HELP'), 2949ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh Sig('bar', help='BAR HELP'), 2950ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh ] 2951ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh argument_group_signatures = [ 2952ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh (Sig('GROUP TITLE', description='GROUP DESCRIPTION'), [ 2953ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh Sig('baz', help='BAZ HELP'), 2954ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh Sig('-z', nargs='+', help='Z HELP')]), 2955ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh ] 2956ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh usage = '''\ 2957ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh usage: PROG [-h] [-v] [-x] [--y Y] [-z Z [Z ...]] foo bar baz 2958ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh ''' 2959ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh help = usage + '''\ 2960ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh 2961ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh DESCRIPTION 2962ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh 2963ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh positional arguments: 2964ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh foo FOO HELP 2965ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh bar BAR HELP 2966ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh 2967ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh optional arguments: 2968ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh -h, --help show this help message and exit 2969ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh -v, --version show program's version number and exit 2970ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh -x X HELP 2971ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh --y Y Y HELP 2972ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh 2973ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh GROUP TITLE: 2974ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh GROUP DESCRIPTION 2975ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh 2976ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh baz BAZ HELP 2977ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh -z Z [Z ...] Z HELP 2978ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh 2979ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh EPILOG 2980ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh ''' 2981ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh version = '''\ 2982ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh 0.1 2983ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh ''' 2984ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh 2985ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh 2986ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsiehclass TestHelpBiggerPositionals(HelpTestCase): 2987ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh """Make sure that help aligns when arguments are longer""" 2988ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh 2989ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh parser_signature = Sig(usage='USAGE', description='DESCRIPTION') 2990ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh argument_signatures = [ 2991ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh Sig('-x', action='store_true', help='X HELP'), 2992ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh Sig('--y', help='Y HELP'), 2993ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh Sig('ekiekiekifekang', help='EKI HELP'), 2994ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh Sig('bar', help='BAR HELP'), 2995ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh ] 2996ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh argument_group_signatures = [] 2997ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh usage = '''\ 2998ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh usage: USAGE 2999ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh ''' 3000ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh help = usage + '''\ 3001ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh 3002ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh DESCRIPTION 3003ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh 3004ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh positional arguments: 3005ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh ekiekiekifekang EKI HELP 3006ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh bar BAR HELP 3007ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh 3008ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh optional arguments: 3009ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh -h, --help show this help message and exit 3010ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh -x X HELP 3011ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh --y Y Y HELP 3012ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh ''' 3013ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh 3014ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh version = '' 3015ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh 3016ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh 3017ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsiehclass TestHelpReformatting(HelpTestCase): 3018ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh """Make sure that text after short names starts on the first line""" 3019ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh 3020ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh parser_signature = Sig( 3021ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh prog='PROG', 3022ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh description=' oddly formatted\n' 3023ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh 'description\n' 3024ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh '\n' 3025ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh 'that is so long that it should go onto multiple ' 3026ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh 'lines when wrapped') 3027ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh argument_signatures = [ 3028ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh Sig('-x', metavar='XX', help='oddly\n' 3029ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh ' formatted -x help'), 3030ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh Sig('y', metavar='yyy', help='normal y help'), 3031ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh ] 3032ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh argument_group_signatures = [ 3033ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh (Sig('title', description='\n' 3034ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh ' oddly formatted group\n' 3035ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh '\n' 3036ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh 'description'), 3037ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh [Sig('-a', action='store_true', 3038ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh help=' oddly \n' 3039ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh 'formatted -a help \n' 3040ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh ' again, so long that it should be wrapped over ' 3041ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh 'multiple lines')]), 3042ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh ] 3043ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh usage = '''\ 3044ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh usage: PROG [-h] [-x XX] [-a] yyy 3045ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh ''' 3046ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh help = usage + '''\ 3047ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh 3048ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh oddly formatted description that is so long that it should go onto \ 3049ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsiehmultiple 3050ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh lines when wrapped 3051ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh 3052ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh positional arguments: 3053ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh yyy normal y help 3054ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh 3055ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh optional arguments: 3056ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh -h, --help show this help message and exit 3057ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh -x XX oddly formatted -x help 3058ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh 3059ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh title: 3060ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh oddly formatted group description 3061ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh 3062ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh -a oddly formatted -a help again, so long that it should \ 3063ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsiehbe wrapped 3064ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh over multiple lines 3065ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh ''' 3066ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh version = '' 3067ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh 3068ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh 3069ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsiehclass TestHelpWrappingShortNames(HelpTestCase): 3070ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh """Make sure that text after short names starts on the first line""" 3071ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh 3072ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh parser_signature = Sig(prog='PROG', description= 'D\nD' * 30) 3073ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh argument_signatures = [ 3074ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh Sig('-x', metavar='XX', help='XHH HX' * 20), 3075ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh Sig('y', metavar='yyy', help='YH YH' * 20), 3076ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh ] 3077ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh argument_group_signatures = [ 3078ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh (Sig('ALPHAS'), [ 3079ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh Sig('-a', action='store_true', help='AHHH HHA' * 10)]), 3080ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh ] 3081ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh usage = '''\ 3082ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh usage: PROG [-h] [-x XX] [-a] yyy 3083ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh ''' 3084ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh help = usage + '''\ 3085ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh 3086ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh D DD DD DD DD DD DD DD DD DD DD DD DD DD DD DD DD DD DD DD DD DD DD \ 3087ffab958fd8d42ed7227d83007350e61555a1fa36Andrew HsiehDD DD DD 3088ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh DD DD DD DD D 3089ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh 3090ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh positional arguments: 3091ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh yyy YH YHYH YHYH YHYH YHYH YHYH YHYH YHYH YHYH YHYH YHYH \ 3092ffab958fd8d42ed7227d83007350e61555a1fa36Andrew HsiehYHYH YHYH 3093ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh YHYH YHYH YHYH YHYH YHYH YHYH YHYH YH 3094ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh 3095ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh optional arguments: 3096ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh -h, --help show this help message and exit 3097ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh -x XX XHH HXXHH HXXHH HXXHH HXXHH HXXHH HXXHH HXXHH HXXHH \ 3098ffab958fd8d42ed7227d83007350e61555a1fa36Andrew HsiehHXXHH HXXHH 3099ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh HXXHH HXXHH HXXHH HXXHH HXXHH HXXHH HXXHH HXXHH HXXHH HX 3100ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh 3101ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh ALPHAS: 3102ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh -a AHHH HHAAHHH HHAAHHH HHAAHHH HHAAHHH HHAAHHH HHAAHHH \ 3103ffab958fd8d42ed7227d83007350e61555a1fa36Andrew HsiehHHAAHHH 3104ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh HHAAHHH HHAAHHH HHA 3105ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh ''' 3106ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh version = '' 3107ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh 3108ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh 3109ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsiehclass TestHelpWrappingLongNames(HelpTestCase): 3110ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh """Make sure that text after long names starts on the next line""" 3111ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh 3112ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh parser_signature = Sig(usage='USAGE', description= 'D D' * 30, 3113ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh version='V V'*30) 3114ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh argument_signatures = [ 3115ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh Sig('-x', metavar='X' * 25, help='XH XH' * 20), 3116ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh Sig('y', metavar='y' * 25, help='YH YH' * 20), 3117ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh ] 3118ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh argument_group_signatures = [ 3119ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh (Sig('ALPHAS'), [ 3120ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh Sig('-a', metavar='A' * 25, help='AH AH' * 20), 3121ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh Sig('z', metavar='z' * 25, help='ZH ZH' * 20)]), 3122ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh ] 3123ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh usage = '''\ 3124ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh usage: USAGE 3125ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh ''' 3126ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh help = usage + '''\ 3127ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh 3128ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh D DD DD DD DD DD DD DD DD DD DD DD DD DD DD DD DD DD DD DD DD DD DD \ 3129ffab958fd8d42ed7227d83007350e61555a1fa36Andrew HsiehDD DD DD 3130ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh DD DD DD DD D 3131ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh 3132ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh positional arguments: 3133ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh yyyyyyyyyyyyyyyyyyyyyyyyy 3134ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh YH YHYH YHYH YHYH YHYH YHYH YHYH YHYH YHYH \ 3135ffab958fd8d42ed7227d83007350e61555a1fa36Andrew HsiehYHYH YHYH 3136ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh YHYH YHYH YHYH YHYH YHYH YHYH YHYH YHYH YHYH YH 3137ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh 3138ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh optional arguments: 3139ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh -h, --help show this help message and exit 3140ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh -v, --version show program's version number and exit 3141ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh -x XXXXXXXXXXXXXXXXXXXXXXXXX 3142ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh XH XHXH XHXH XHXH XHXH XHXH XHXH XHXH XHXH \ 3143ffab958fd8d42ed7227d83007350e61555a1fa36Andrew HsiehXHXH XHXH 3144ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh XHXH XHXH XHXH XHXH XHXH XHXH XHXH XHXH XHXH XH 3145ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh 3146ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh ALPHAS: 3147ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh -a AAAAAAAAAAAAAAAAAAAAAAAAA 3148ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh AH AHAH AHAH AHAH AHAH AHAH AHAH AHAH AHAH \ 3149ffab958fd8d42ed7227d83007350e61555a1fa36Andrew HsiehAHAH AHAH 3150ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh AHAH AHAH AHAH AHAH AHAH AHAH AHAH AHAH AHAH AH 3151ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh zzzzzzzzzzzzzzzzzzzzzzzzz 3152ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh ZH ZHZH ZHZH ZHZH ZHZH ZHZH ZHZH ZHZH ZHZH \ 3153ffab958fd8d42ed7227d83007350e61555a1fa36Andrew HsiehZHZH ZHZH 3154ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh ZHZH ZHZH ZHZH ZHZH ZHZH ZHZH ZHZH ZHZH ZHZH ZH 3155ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh ''' 3156ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh version = '''\ 3157ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh V VV VV VV VV VV VV VV VV VV VV VV VV VV VV VV VV VV VV VV VV VV VV \ 3158ffab958fd8d42ed7227d83007350e61555a1fa36Andrew HsiehVV VV VV 3159ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh VV VV VV VV V 3160ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh ''' 3161ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh 3162ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh 3163ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsiehclass TestHelpUsage(HelpTestCase): 3164ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh """Test basic usage messages""" 3165ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh 3166ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh parser_signature = Sig(prog='PROG') 3167ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh argument_signatures = [ 3168ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh Sig('-w', nargs='+', help='w'), 3169ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh Sig('-x', nargs='*', help='x'), 3170ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh Sig('a', help='a'), 3171ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh Sig('b', help='b', nargs=2), 3172ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh Sig('c', help='c', nargs='?'), 3173ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh ] 3174ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh argument_group_signatures = [ 3175ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh (Sig('group'), [ 3176ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh Sig('-y', nargs='?', help='y'), 3177ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh Sig('-z', nargs=3, help='z'), 3178ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh Sig('d', help='d', nargs='*'), 3179ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh Sig('e', help='e', nargs='+'), 3180ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh ]) 3181ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh ] 3182ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh usage = '''\ 3183ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh usage: PROG [-h] [-w W [W ...]] [-x [X [X ...]]] [-y [Y]] [-z Z Z Z] 3184ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh a b b [c] [d [d ...]] e [e ...] 3185ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh ''' 3186ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh help = usage + '''\ 3187ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh 3188ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh positional arguments: 3189ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh a a 3190ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh b b 3191ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh c c 3192ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh 3193ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh optional arguments: 3194ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh -h, --help show this help message and exit 3195ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh -w W [W ...] w 3196ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh -x [X [X ...]] x 3197ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh 3198ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh group: 3199ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh -y [Y] y 3200ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh -z Z Z Z z 3201ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh d d 3202ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh e e 3203ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh ''' 3204ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh version = '' 3205ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh 3206ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh 3207ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsiehclass TestHelpOnlyUserGroups(HelpTestCase): 3208ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh """Test basic usage messages""" 3209ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh 3210ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh parser_signature = Sig(prog='PROG', add_help=False) 3211ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh argument_signatures = [] 3212ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh argument_group_signatures = [ 3213ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh (Sig('xxxx'), [ 3214ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh Sig('-x', help='x'), 3215ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh Sig('a', help='a'), 3216ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh ]), 3217ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh (Sig('yyyy'), [ 3218ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh Sig('b', help='b'), 3219ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh Sig('-y', help='y'), 3220ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh ]), 3221ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh ] 3222ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh usage = '''\ 3223ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh usage: PROG [-x X] [-y Y] a b 3224ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh ''' 3225ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh help = usage + '''\ 3226ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh 3227ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh xxxx: 3228ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh -x X x 3229ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh a a 3230ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh 3231ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh yyyy: 3232ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh b b 3233ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh -y Y y 3234ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh ''' 3235ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh version = '' 3236ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh 3237ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh 3238ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsiehclass TestHelpUsageLongProg(HelpTestCase): 3239ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh """Test usage messages where the prog is long""" 3240ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh 3241ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh parser_signature = Sig(prog='P' * 60) 3242ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh argument_signatures = [ 3243ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh Sig('-w', metavar='W'), 3244ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh Sig('-x', metavar='X'), 3245ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh Sig('a'), 3246ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh Sig('b'), 3247ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh ] 3248ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh argument_group_signatures = [] 3249ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh usage = '''\ 3250ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh usage: PPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPP 3251ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh [-h] [-w W] [-x X] a b 3252ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh ''' 3253ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh help = usage + '''\ 3254ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh 3255ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh positional arguments: 3256ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh a 3257ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh b 3258ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh 3259ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh optional arguments: 3260ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh -h, --help show this help message and exit 3261ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh -w W 3262ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh -x X 3263ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh ''' 3264ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh version = '' 3265ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh 3266ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh 3267ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsiehclass TestHelpUsageLongProgOptionsWrap(HelpTestCase): 3268ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh """Test usage messages where the prog is long and the optionals wrap""" 3269ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh 3270ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh parser_signature = Sig(prog='P' * 60) 3271ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh argument_signatures = [ 3272ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh Sig('-w', metavar='W' * 25), 3273ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh Sig('-x', metavar='X' * 25), 3274ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh Sig('-y', metavar='Y' * 25), 3275ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh Sig('-z', metavar='Z' * 25), 3276ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh Sig('a'), 3277ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh Sig('b'), 3278ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh ] 3279ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh argument_group_signatures = [] 3280ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh usage = '''\ 3281ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh usage: PPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPP 3282ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh [-h] [-w WWWWWWWWWWWWWWWWWWWWWWWWW] \ 3283ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh[-x XXXXXXXXXXXXXXXXXXXXXXXXX] 3284ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh [-y YYYYYYYYYYYYYYYYYYYYYYYYY] [-z ZZZZZZZZZZZZZZZZZZZZZZZZZ] 3285ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh a b 3286ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh ''' 3287ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh help = usage + '''\ 3288ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh 3289ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh positional arguments: 3290ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh a 3291ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh b 3292ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh 3293ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh optional arguments: 3294ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh -h, --help show this help message and exit 3295ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh -w WWWWWWWWWWWWWWWWWWWWWWWWW 3296ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh -x XXXXXXXXXXXXXXXXXXXXXXXXX 3297ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh -y YYYYYYYYYYYYYYYYYYYYYYYYY 3298ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh -z ZZZZZZZZZZZZZZZZZZZZZZZZZ 3299ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh ''' 3300ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh version = '' 3301ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh 3302ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh 3303ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsiehclass TestHelpUsageLongProgPositionalsWrap(HelpTestCase): 3304ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh """Test usage messages where the prog is long and the positionals wrap""" 3305ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh 3306ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh parser_signature = Sig(prog='P' * 60, add_help=False) 3307ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh argument_signatures = [ 3308ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh Sig('a' * 25), 3309ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh Sig('b' * 25), 3310ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh Sig('c' * 25), 3311ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh ] 3312ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh argument_group_signatures = [] 3313ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh usage = '''\ 3314ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh usage: PPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPP 3315ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh aaaaaaaaaaaaaaaaaaaaaaaaa bbbbbbbbbbbbbbbbbbbbbbbbb 3316ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh ccccccccccccccccccccccccc 3317ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh ''' 3318ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh help = usage + '''\ 3319ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh 3320ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh positional arguments: 3321ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh aaaaaaaaaaaaaaaaaaaaaaaaa 3322ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh bbbbbbbbbbbbbbbbbbbbbbbbb 3323ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh ccccccccccccccccccccccccc 3324ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh ''' 3325ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh version = '' 3326ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh 3327ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh 3328ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsiehclass TestHelpUsageOptionalsWrap(HelpTestCase): 3329ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh """Test usage messages where the optionals wrap""" 3330ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh 3331ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh parser_signature = Sig(prog='PROG') 3332ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh argument_signatures = [ 3333ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh Sig('-w', metavar='W' * 25), 3334ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh Sig('-x', metavar='X' * 25), 3335ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh Sig('-y', metavar='Y' * 25), 3336ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh Sig('-z', metavar='Z' * 25), 3337ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh Sig('a'), 3338ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh Sig('b'), 3339ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh Sig('c'), 3340ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh ] 3341ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh argument_group_signatures = [] 3342ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh usage = '''\ 3343ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh usage: PROG [-h] [-w WWWWWWWWWWWWWWWWWWWWWWWWW] \ 3344ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh[-x XXXXXXXXXXXXXXXXXXXXXXXXX] 3345ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh [-y YYYYYYYYYYYYYYYYYYYYYYYYY] \ 3346ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh[-z ZZZZZZZZZZZZZZZZZZZZZZZZZ] 3347ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh a b c 3348ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh ''' 3349ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh help = usage + '''\ 3350ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh 3351ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh positional arguments: 3352ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh a 3353ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh b 3354ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh c 3355ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh 3356ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh optional arguments: 3357ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh -h, --help show this help message and exit 3358ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh -w WWWWWWWWWWWWWWWWWWWWWWWWW 3359ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh -x XXXXXXXXXXXXXXXXXXXXXXXXX 3360ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh -y YYYYYYYYYYYYYYYYYYYYYYYYY 3361ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh -z ZZZZZZZZZZZZZZZZZZZZZZZZZ 3362ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh ''' 3363ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh version = '' 3364ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh 3365ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh 3366ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsiehclass TestHelpUsagePositionalsWrap(HelpTestCase): 3367ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh """Test usage messages where the positionals wrap""" 3368ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh 3369ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh parser_signature = Sig(prog='PROG') 3370ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh argument_signatures = [ 3371ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh Sig('-x'), 3372ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh Sig('-y'), 3373ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh Sig('-z'), 3374ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh Sig('a' * 25), 3375ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh Sig('b' * 25), 3376ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh Sig('c' * 25), 3377ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh ] 3378ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh argument_group_signatures = [] 3379ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh usage = '''\ 3380ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh usage: PROG [-h] [-x X] [-y Y] [-z Z] 3381ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh aaaaaaaaaaaaaaaaaaaaaaaaa bbbbbbbbbbbbbbbbbbbbbbbbb 3382ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh ccccccccccccccccccccccccc 3383ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh ''' 3384ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh help = usage + '''\ 3385ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh 3386ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh positional arguments: 3387ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh aaaaaaaaaaaaaaaaaaaaaaaaa 3388ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh bbbbbbbbbbbbbbbbbbbbbbbbb 3389ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh ccccccccccccccccccccccccc 3390ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh 3391ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh optional arguments: 3392ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh -h, --help show this help message and exit 3393ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh -x X 3394ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh -y Y 3395ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh -z Z 3396ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh ''' 3397ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh version = '' 3398ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh 3399ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh 3400ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsiehclass TestHelpUsageOptionalsPositionalsWrap(HelpTestCase): 3401ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh """Test usage messages where the optionals and positionals wrap""" 3402ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh 3403ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh parser_signature = Sig(prog='PROG') 3404ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh argument_signatures = [ 3405ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh Sig('-x', metavar='X' * 25), 3406ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh Sig('-y', metavar='Y' * 25), 3407ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh Sig('-z', metavar='Z' * 25), 3408ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh Sig('a' * 25), 3409ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh Sig('b' * 25), 3410ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh Sig('c' * 25), 3411ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh ] 3412ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh argument_group_signatures = [] 3413ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh usage = '''\ 3414ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh usage: PROG [-h] [-x XXXXXXXXXXXXXXXXXXXXXXXXX] \ 3415ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh[-y YYYYYYYYYYYYYYYYYYYYYYYYY] 3416ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh [-z ZZZZZZZZZZZZZZZZZZZZZZZZZ] 3417ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh aaaaaaaaaaaaaaaaaaaaaaaaa bbbbbbbbbbbbbbbbbbbbbbbbb 3418ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh ccccccccccccccccccccccccc 3419ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh ''' 3420ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh help = usage + '''\ 3421ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh 3422ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh positional arguments: 3423ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh aaaaaaaaaaaaaaaaaaaaaaaaa 3424ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh bbbbbbbbbbbbbbbbbbbbbbbbb 3425ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh ccccccccccccccccccccccccc 3426ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh 3427ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh optional arguments: 3428ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh -h, --help show this help message and exit 3429ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh -x XXXXXXXXXXXXXXXXXXXXXXXXX 3430ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh -y YYYYYYYYYYYYYYYYYYYYYYYYY 3431ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh -z ZZZZZZZZZZZZZZZZZZZZZZZZZ 3432ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh ''' 3433ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh version = '' 3434ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh 3435ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh 3436ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsiehclass TestHelpUsageOptionalsOnlyWrap(HelpTestCase): 3437ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh """Test usage messages where there are only optionals and they wrap""" 3438ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh 3439ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh parser_signature = Sig(prog='PROG') 3440ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh argument_signatures = [ 3441ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh Sig('-x', metavar='X' * 25), 3442ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh Sig('-y', metavar='Y' * 25), 3443ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh Sig('-z', metavar='Z' * 25), 3444ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh ] 3445ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh argument_group_signatures = [] 3446ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh usage = '''\ 3447ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh usage: PROG [-h] [-x XXXXXXXXXXXXXXXXXXXXXXXXX] \ 3448ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh[-y YYYYYYYYYYYYYYYYYYYYYYYYY] 3449ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh [-z ZZZZZZZZZZZZZZZZZZZZZZZZZ] 3450ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh ''' 3451ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh help = usage + '''\ 3452ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh 3453ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh optional arguments: 3454ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh -h, --help show this help message and exit 3455ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh -x XXXXXXXXXXXXXXXXXXXXXXXXX 3456ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh -y YYYYYYYYYYYYYYYYYYYYYYYYY 3457ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh -z ZZZZZZZZZZZZZZZZZZZZZZZZZ 3458ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh ''' 3459ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh version = '' 3460ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh 3461ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh 3462ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsiehclass TestHelpUsagePositionalsOnlyWrap(HelpTestCase): 3463ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh """Test usage messages where there are only positionals and they wrap""" 3464ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh 3465ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh parser_signature = Sig(prog='PROG', add_help=False) 3466ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh argument_signatures = [ 3467ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh Sig('a' * 25), 3468ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh Sig('b' * 25), 3469ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh Sig('c' * 25), 3470ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh ] 3471ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh argument_group_signatures = [] 3472ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh usage = '''\ 3473ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh usage: PROG aaaaaaaaaaaaaaaaaaaaaaaaa bbbbbbbbbbbbbbbbbbbbbbbbb 3474ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh ccccccccccccccccccccccccc 3475ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh ''' 3476ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh help = usage + '''\ 3477ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh 3478ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh positional arguments: 3479ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh aaaaaaaaaaaaaaaaaaaaaaaaa 3480ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh bbbbbbbbbbbbbbbbbbbbbbbbb 3481ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh ccccccccccccccccccccccccc 3482ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh ''' 3483ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh version = '' 3484ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh 3485ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh 3486ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsiehclass TestHelpVariableExpansion(HelpTestCase): 3487ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh """Test that variables are expanded properly in help messages""" 3488ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh 3489ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh parser_signature = Sig(prog='PROG') 3490ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh argument_signatures = [ 3491ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh Sig('-x', type=int, 3492ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh help='x %(prog)s %(default)s %(type)s %%'), 3493ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh Sig('-y', action='store_const', default=42, const='XXX', 3494ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh help='y %(prog)s %(default)s %(const)s'), 3495ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh Sig('--foo', choices='abc', 3496ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh help='foo %(prog)s %(default)s %(choices)s'), 3497ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh Sig('--bar', default='baz', choices=[1, 2], metavar='BBB', 3498ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh help='bar %(prog)s %(default)s %(dest)s'), 3499ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh Sig('spam', help='spam %(prog)s %(default)s'), 3500ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh Sig('badger', default=0.5, help='badger %(prog)s %(default)s'), 3501ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh ] 3502ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh argument_group_signatures = [ 3503ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh (Sig('group'), [ 3504ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh Sig('-a', help='a %(prog)s %(default)s'), 3505ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh Sig('-b', default=-1, help='b %(prog)s %(default)s'), 3506ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh ]) 3507ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh ] 3508ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh usage = ('''\ 3509ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh usage: PROG [-h] [-x X] [-y] [--foo {a,b,c}] [--bar BBB] [-a A] [-b B] 3510ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh spam badger 3511ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh ''') 3512ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh help = usage + '''\ 3513ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh 3514ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh positional arguments: 3515ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh spam spam PROG None 3516ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh badger badger PROG 0.5 3517ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh 3518ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh optional arguments: 3519ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh -h, --help show this help message and exit 3520ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh -x X x PROG None int % 3521ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh -y y PROG 42 XXX 3522ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh --foo {a,b,c} foo PROG None a, b, c 3523ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh --bar BBB bar PROG baz bar 3524ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh 3525ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh group: 3526ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh -a A a PROG None 3527ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh -b B b PROG -1 3528ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh ''' 3529ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh version = '' 3530ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh 3531ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh 3532ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsiehclass TestHelpVariableExpansionUsageSupplied(HelpTestCase): 3533ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh """Test that variables are expanded properly when usage= is present""" 3534ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh 3535ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh parser_signature = Sig(prog='PROG', usage='%(prog)s FOO') 3536ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh argument_signatures = [] 3537ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh argument_group_signatures = [] 3538ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh usage = ('''\ 3539ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh usage: PROG FOO 3540ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh ''') 3541ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh help = usage + '''\ 3542ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh 3543ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh optional arguments: 3544ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh -h, --help show this help message and exit 3545ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh ''' 3546ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh version = '' 3547ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh 3548ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh 3549ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsiehclass TestHelpVariableExpansionNoArguments(HelpTestCase): 3550ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh """Test that variables are expanded properly with no arguments""" 3551ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh 3552ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh parser_signature = Sig(prog='PROG', add_help=False) 3553ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh argument_signatures = [] 3554ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh argument_group_signatures = [] 3555ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh usage = ('''\ 3556ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh usage: PROG 3557ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh ''') 3558ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh help = usage 3559ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh version = '' 3560ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh 3561ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh 3562ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsiehclass TestHelpSuppressUsage(HelpTestCase): 3563ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh """Test that items can be suppressed in usage messages""" 3564ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh 3565ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh parser_signature = Sig(prog='PROG', usage=argparse.SUPPRESS) 3566ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh argument_signatures = [ 3567ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh Sig('--foo', help='foo help'), 3568ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh Sig('spam', help='spam help'), 3569ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh ] 3570ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh argument_group_signatures = [] 3571ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh help = '''\ 3572ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh positional arguments: 3573ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh spam spam help 3574ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh 3575ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh optional arguments: 3576ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh -h, --help show this help message and exit 3577ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh --foo FOO foo help 3578ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh ''' 3579ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh usage = '' 3580ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh version = '' 3581ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh 3582ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh 3583ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsiehclass TestHelpSuppressOptional(HelpTestCase): 3584ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh """Test that optional arguments can be suppressed in help messages""" 3585ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh 3586ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh parser_signature = Sig(prog='PROG', add_help=False) 3587ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh argument_signatures = [ 3588ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh Sig('--foo', help=argparse.SUPPRESS), 3589ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh Sig('spam', help='spam help'), 3590ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh ] 3591ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh argument_group_signatures = [] 3592ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh usage = '''\ 3593ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh usage: PROG spam 3594ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh ''' 3595ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh help = usage + '''\ 3596ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh 3597ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh positional arguments: 3598ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh spam spam help 3599ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh ''' 3600ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh version = '' 3601ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh 3602ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh 3603ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsiehclass TestHelpSuppressOptionalGroup(HelpTestCase): 3604ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh """Test that optional groups can be suppressed in help messages""" 3605ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh 3606ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh parser_signature = Sig(prog='PROG') 3607ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh argument_signatures = [ 3608ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh Sig('--foo', help='foo help'), 3609ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh Sig('spam', help='spam help'), 3610ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh ] 3611ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh argument_group_signatures = [ 3612ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh (Sig('group'), [Sig('--bar', help=argparse.SUPPRESS)]), 3613ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh ] 3614ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh usage = '''\ 3615ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh usage: PROG [-h] [--foo FOO] spam 3616ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh ''' 3617ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh help = usage + '''\ 3618ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh 3619ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh positional arguments: 3620ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh spam spam help 3621ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh 3622ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh optional arguments: 3623ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh -h, --help show this help message and exit 3624ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh --foo FOO foo help 3625ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh ''' 3626ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh version = '' 3627ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh 3628ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh 3629ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsiehclass TestHelpSuppressPositional(HelpTestCase): 3630ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh """Test that positional arguments can be suppressed in help messages""" 3631ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh 3632ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh parser_signature = Sig(prog='PROG') 3633ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh argument_signatures = [ 3634ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh Sig('--foo', help='foo help'), 3635ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh Sig('spam', help=argparse.SUPPRESS), 3636ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh ] 3637ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh argument_group_signatures = [] 3638ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh usage = '''\ 3639ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh usage: PROG [-h] [--foo FOO] 3640ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh ''' 3641ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh help = usage + '''\ 3642ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh 3643ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh optional arguments: 3644ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh -h, --help show this help message and exit 3645ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh --foo FOO foo help 3646ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh ''' 3647ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh version = '' 3648ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh 3649ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh 3650ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsiehclass TestHelpRequiredOptional(HelpTestCase): 3651ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh """Test that required options don't look optional""" 3652ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh 3653ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh parser_signature = Sig(prog='PROG') 3654ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh argument_signatures = [ 3655ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh Sig('--foo', required=True, help='foo help'), 3656ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh ] 3657ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh argument_group_signatures = [] 3658ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh usage = '''\ 3659ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh usage: PROG [-h] --foo FOO 3660ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh ''' 3661ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh help = usage + '''\ 3662ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh 3663ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh optional arguments: 3664ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh -h, --help show this help message and exit 3665ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh --foo FOO foo help 3666ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh ''' 3667ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh version = '' 3668ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh 3669ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh 3670ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsiehclass TestHelpAlternatePrefixChars(HelpTestCase): 3671ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh """Test that options display with different prefix characters""" 3672ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh 3673ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh parser_signature = Sig(prog='PROG', prefix_chars='^;', add_help=False) 3674ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh argument_signatures = [ 3675ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh Sig('^^foo', action='store_true', help='foo help'), 3676ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh Sig(';b', ';;bar', help='bar help'), 3677ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh ] 3678ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh argument_group_signatures = [] 3679ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh usage = '''\ 3680ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh usage: PROG [^^foo] [;b BAR] 3681ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh ''' 3682ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh help = usage + '''\ 3683ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh 3684ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh optional arguments: 3685ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh ^^foo foo help 3686ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh ;b BAR, ;;bar BAR bar help 3687ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh ''' 3688ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh version = '' 3689ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh 3690ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh 3691ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsiehclass TestHelpNoHelpOptional(HelpTestCase): 3692ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh """Test that the --help argument can be suppressed help messages""" 3693ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh 3694ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh parser_signature = Sig(prog='PROG', add_help=False) 3695ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh argument_signatures = [ 3696ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh Sig('--foo', help='foo help'), 3697ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh Sig('spam', help='spam help'), 3698ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh ] 3699ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh argument_group_signatures = [] 3700ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh usage = '''\ 3701ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh usage: PROG [--foo FOO] spam 3702ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh ''' 3703ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh help = usage + '''\ 3704ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh 3705ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh positional arguments: 3706ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh spam spam help 3707ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh 3708ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh optional arguments: 3709ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh --foo FOO foo help 3710ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh ''' 3711ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh version = '' 3712ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh 3713ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh 3714ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsiehclass TestHelpVersionOptional(HelpTestCase): 3715ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh """Test that the --version argument can be suppressed help messages""" 3716ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh 3717ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh parser_signature = Sig(prog='PROG', version='1.0') 3718ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh argument_signatures = [ 3719ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh Sig('--foo', help='foo help'), 3720ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh Sig('spam', help='spam help'), 3721ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh ] 3722ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh argument_group_signatures = [] 3723ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh usage = '''\ 3724ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh usage: PROG [-h] [-v] [--foo FOO] spam 3725ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh ''' 3726ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh help = usage + '''\ 3727ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh 3728ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh positional arguments: 3729ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh spam spam help 3730ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh 3731ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh optional arguments: 3732ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh -h, --help show this help message and exit 3733ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh -v, --version show program's version number and exit 3734ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh --foo FOO foo help 3735ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh ''' 3736ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh version = '''\ 3737ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh 1.0 3738ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh ''' 3739ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh 3740ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh 3741ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsiehclass TestHelpNone(HelpTestCase): 3742ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh """Test that no errors occur if no help is specified""" 3743ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh 3744ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh parser_signature = Sig(prog='PROG') 3745ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh argument_signatures = [ 3746ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh Sig('--foo'), 3747ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh Sig('spam'), 3748ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh ] 3749ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh argument_group_signatures = [] 3750ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh usage = '''\ 3751ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh usage: PROG [-h] [--foo FOO] spam 3752ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh ''' 3753ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh help = usage + '''\ 3754ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh 3755ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh positional arguments: 3756ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh spam 3757ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh 3758ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh optional arguments: 3759ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh -h, --help show this help message and exit 3760ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh --foo FOO 3761ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh ''' 3762ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh version = '' 3763ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh 3764ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh 3765ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsiehclass TestHelpTupleMetavar(HelpTestCase): 3766ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh """Test specifying metavar as a tuple""" 3767ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh 3768ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh parser_signature = Sig(prog='PROG') 3769ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh argument_signatures = [ 3770ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh Sig('-w', help='w', nargs='+', metavar=('W1', 'W2')), 3771ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh Sig('-x', help='x', nargs='*', metavar=('X1', 'X2')), 3772ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh Sig('-y', help='y', nargs=3, metavar=('Y1', 'Y2', 'Y3')), 3773ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh Sig('-z', help='z', nargs='?', metavar=('Z1', )), 3774ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh ] 3775ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh argument_group_signatures = [] 3776ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh usage = '''\ 3777ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh usage: PROG [-h] [-w W1 [W2 ...]] [-x [X1 [X2 ...]]] [-y Y1 Y2 Y3] \ 3778ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh[-z [Z1]] 3779ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh ''' 3780ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh help = usage + '''\ 3781ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh 3782ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh optional arguments: 3783ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh -h, --help show this help message and exit 3784ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh -w W1 [W2 ...] w 3785ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh -x [X1 [X2 ...]] x 3786ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh -y Y1 Y2 Y3 y 3787ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh -z [Z1] z 3788ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh ''' 3789ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh version = '' 3790ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh 3791ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh 3792ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsiehclass TestHelpRawText(HelpTestCase): 3793ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh """Test the RawTextHelpFormatter""" 3794ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh 3795ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh parser_signature = Sig( 3796ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh prog='PROG', formatter_class=argparse.RawTextHelpFormatter, 3797ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh description='Keep the formatting\n' 3798ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh ' exactly as it is written\n' 3799ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh '\n' 3800ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh 'here\n') 3801ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh 3802ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh argument_signatures = [ 3803ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh Sig('--foo', help=' foo help should also\n' 3804ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh 'appear as given here'), 3805ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh Sig('spam', help='spam help'), 3806ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh ] 3807ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh argument_group_signatures = [ 3808ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh (Sig('title', description=' This text\n' 3809ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh ' should be indented\n' 3810ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh ' exactly like it is here\n'), 3811ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh [Sig('--bar', help='bar help')]), 3812ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh ] 3813ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh usage = '''\ 3814ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh usage: PROG [-h] [--foo FOO] [--bar BAR] spam 3815ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh ''' 3816ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh help = usage + '''\ 3817ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh 3818ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh Keep the formatting 3819ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh exactly as it is written 3820ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh 3821ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh here 3822ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh 3823ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh positional arguments: 3824ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh spam spam help 3825ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh 3826ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh optional arguments: 3827ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh -h, --help show this help message and exit 3828ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh --foo FOO foo help should also 3829ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh appear as given here 3830ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh 3831ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh title: 3832ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh This text 3833ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh should be indented 3834ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh exactly like it is here 3835ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh 3836ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh --bar BAR bar help 3837ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh ''' 3838ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh version = '' 3839ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh 3840ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh 3841ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsiehclass TestHelpRawDescription(HelpTestCase): 3842ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh """Test the RawTextHelpFormatter""" 3843ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh 3844ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh parser_signature = Sig( 3845ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh prog='PROG', formatter_class=argparse.RawDescriptionHelpFormatter, 3846ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh description='Keep the formatting\n' 3847ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh ' exactly as it is written\n' 3848ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh '\n' 3849ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh 'here\n') 3850ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh 3851ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh argument_signatures = [ 3852ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh Sig('--foo', help=' foo help should not\n' 3853ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh ' retain this odd formatting'), 3854ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh Sig('spam', help='spam help'), 3855ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh ] 3856ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh argument_group_signatures = [ 3857ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh (Sig('title', description=' This text\n' 3858ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh ' should be indented\n' 3859ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh ' exactly like it is here\n'), 3860ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh [Sig('--bar', help='bar help')]), 3861ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh ] 3862ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh usage = '''\ 3863ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh usage: PROG [-h] [--foo FOO] [--bar BAR] spam 3864ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh ''' 3865ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh help = usage + '''\ 3866ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh 3867ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh Keep the formatting 3868ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh exactly as it is written 3869ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh 3870ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh here 3871ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh 3872ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh positional arguments: 3873ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh spam spam help 3874ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh 3875ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh optional arguments: 3876ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh -h, --help show this help message and exit 3877ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh --foo FOO foo help should not retain this odd formatting 3878ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh 3879ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh title: 3880ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh This text 3881ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh should be indented 3882ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh exactly like it is here 3883ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh 3884ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh --bar BAR bar help 3885ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh ''' 3886ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh version = '' 3887ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh 3888ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh 3889ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsiehclass TestHelpArgumentDefaults(HelpTestCase): 3890ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh """Test the ArgumentDefaultsHelpFormatter""" 3891ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh 3892ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh parser_signature = Sig( 3893ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh prog='PROG', formatter_class=argparse.ArgumentDefaultsHelpFormatter, 3894ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh description='description') 3895ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh 3896ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh argument_signatures = [ 3897ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh Sig('--foo', help='foo help - oh and by the way, %(default)s'), 3898ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh Sig('--bar', action='store_true', help='bar help'), 3899ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh Sig('spam', help='spam help'), 3900ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh Sig('badger', nargs='?', default='wooden', help='badger help'), 3901ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh ] 3902ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh argument_group_signatures = [ 3903ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh (Sig('title', description='description'), 3904ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh [Sig('--baz', type=int, default=42, help='baz help')]), 3905ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh ] 3906ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh usage = '''\ 3907ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh usage: PROG [-h] [--foo FOO] [--bar] [--baz BAZ] spam [badger] 3908ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh ''' 3909ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh help = usage + '''\ 3910ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh 3911ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh description 3912ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh 3913ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh positional arguments: 3914ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh spam spam help 3915ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh badger badger help (default: wooden) 3916ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh 3917ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh optional arguments: 3918ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh -h, --help show this help message and exit 3919ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh --foo FOO foo help - oh and by the way, None 3920ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh --bar bar help (default: False) 3921ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh 3922ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh title: 3923ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh description 3924ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh 3925ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh --baz BAZ baz help (default: 42) 3926ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh ''' 3927ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh version = '' 3928ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh 3929ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsiehclass TestHelpVersionAction(HelpTestCase): 3930ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh """Test the default help for the version action""" 3931ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh 3932ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh parser_signature = Sig(prog='PROG', description='description') 3933ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh argument_signatures = [Sig('-V', '--version', action='version', version='3.6')] 3934ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh argument_group_signatures = [] 3935ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh usage = '''\ 3936ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh usage: PROG [-h] [-V] 3937ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh ''' 3938ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh help = usage + '''\ 3939ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh 3940ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh description 3941ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh 3942ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh optional arguments: 3943ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh -h, --help show this help message and exit 3944ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh -V, --version show program's version number and exit 3945ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh ''' 3946ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh version = '' 3947ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh 3948ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsiehclass TestHelpSubparsersOrdering(HelpTestCase): 3949ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh """Test ordering of subcommands in help matches the code""" 3950ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh parser_signature = Sig(prog='PROG', 3951ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh description='display some subcommands', 3952ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh version='0.1') 3953ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh 3954ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh subparsers_signatures = [Sig(name=name) 3955ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh for name in ('a', 'b', 'c', 'd', 'e')] 3956ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh 3957ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh usage = '''\ 3958ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh usage: PROG [-h] [-v] {a,b,c,d,e} ... 3959ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh ''' 3960ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh 3961ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh help = usage + '''\ 3962ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh 3963ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh display some subcommands 3964ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh 3965ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh positional arguments: 3966ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh {a,b,c,d,e} 3967ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh 3968ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh optional arguments: 3969ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh -h, --help show this help message and exit 3970ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh -v, --version show program's version number and exit 3971ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh ''' 3972ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh 3973ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh version = '''\ 3974ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh 0.1 3975ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh ''' 3976ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh 3977ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsiehclass TestHelpSubparsersWithHelpOrdering(HelpTestCase): 3978ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh """Test ordering of subcommands in help matches the code""" 3979ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh parser_signature = Sig(prog='PROG', 3980ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh description='display some subcommands', 3981ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh version='0.1') 3982ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh 3983ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh subcommand_data = (('a', 'a subcommand help'), 3984ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh ('b', 'b subcommand help'), 3985ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh ('c', 'c subcommand help'), 3986ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh ('d', 'd subcommand help'), 3987ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh ('e', 'e subcommand help'), 3988ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh ) 3989ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh 3990ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh subparsers_signatures = [Sig(name=name, help=help) 3991ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh for name, help in subcommand_data] 3992ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh 3993ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh usage = '''\ 3994ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh usage: PROG [-h] [-v] {a,b,c,d,e} ... 3995ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh ''' 3996ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh 3997ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh help = usage + '''\ 3998ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh 3999ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh display some subcommands 4000ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh 4001ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh positional arguments: 4002ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh {a,b,c,d,e} 4003ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh a a subcommand help 4004ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh b b subcommand help 4005ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh c c subcommand help 4006ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh d d subcommand help 4007ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh e e subcommand help 4008ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh 4009ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh optional arguments: 4010ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh -h, --help show this help message and exit 4011ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh -v, --version show program's version number and exit 4012ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh ''' 4013ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh 4014ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh version = '''\ 4015ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh 0.1 4016ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh ''' 4017ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh 4018ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh 4019ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh# ===================================== 4020ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh# Optional/Positional constructor tests 4021ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh# ===================================== 4022ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh 4023ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsiehclass TestInvalidArgumentConstructors(TestCase): 4024ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh """Test a bunch of invalid Argument constructors""" 4025ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh 4026ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh def assertTypeError(self, *args, **kwargs): 4027ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh parser = argparse.ArgumentParser() 4028ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh self.assertRaises(TypeError, parser.add_argument, 4029ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh *args, **kwargs) 4030ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh 4031ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh def assertValueError(self, *args, **kwargs): 4032ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh parser = argparse.ArgumentParser() 4033ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh self.assertRaises(ValueError, parser.add_argument, 4034ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh *args, **kwargs) 4035ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh 4036ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh def test_invalid_keyword_arguments(self): 4037ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh self.assertTypeError('-x', bar=None) 4038ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh self.assertTypeError('-y', callback='foo') 4039ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh self.assertTypeError('-y', callback_args=()) 4040ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh self.assertTypeError('-y', callback_kwargs={}) 4041ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh 4042ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh def test_missing_destination(self): 4043ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh self.assertTypeError() 4044ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh for action in ['append', 'store']: 4045ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh self.assertTypeError(action=action) 4046ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh 4047ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh def test_invalid_option_strings(self): 4048ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh self.assertValueError('--') 4049ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh self.assertValueError('---') 4050ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh 4051ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh def test_invalid_type(self): 4052ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh self.assertValueError('--foo', type='int') 4053ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh self.assertValueError('--foo', type=(int, float)) 4054ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh 4055ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh def test_invalid_action(self): 4056ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh self.assertValueError('-x', action='foo') 4057ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh self.assertValueError('foo', action='baz') 4058ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh self.assertValueError('--foo', action=('store', 'append')) 4059ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh parser = argparse.ArgumentParser() 4060ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh try: 4061ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh parser.add_argument("--foo", action="store-true") 4062ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh except ValueError: 4063ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh e = sys.exc_info()[1] 4064ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh expected = 'unknown action' 4065ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh msg = 'expected %r, found %r' % (expected, e) 4066ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh self.assertTrue(expected in str(e), msg) 4067ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh 4068ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh def test_multiple_dest(self): 4069ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh parser = argparse.ArgumentParser() 4070ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh parser.add_argument(dest='foo') 4071ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh try: 4072ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh parser.add_argument('bar', dest='baz') 4073ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh except ValueError: 4074ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh e = sys.exc_info()[1] 4075ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh expected = 'dest supplied twice for positional argument' 4076ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh msg = 'expected %r, found %r' % (expected, e) 4077ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh self.assertTrue(expected in str(e), msg) 4078ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh 4079ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh def test_no_argument_actions(self): 4080ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh for action in ['store_const', 'store_true', 'store_false', 4081ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh 'append_const', 'count']: 4082ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh for attrs in [dict(type=int), dict(nargs='+'), 4083ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh dict(choices='ab')]: 4084ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh self.assertTypeError('-x', action=action, **attrs) 4085ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh 4086ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh def test_no_argument_no_const_actions(self): 4087ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh # options with zero arguments 4088ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh for action in ['store_true', 'store_false', 'count']: 4089ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh 4090ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh # const is always disallowed 4091ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh self.assertTypeError('-x', const='foo', action=action) 4092ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh 4093ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh # nargs is always disallowed 4094ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh self.assertTypeError('-x', nargs='*', action=action) 4095ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh 4096ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh def test_more_than_one_argument_actions(self): 4097ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh for action in ['store', 'append']: 4098ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh 4099ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh # nargs=0 is disallowed 4100ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh self.assertValueError('-x', nargs=0, action=action) 4101ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh self.assertValueError('spam', nargs=0, action=action) 4102ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh 4103ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh # const is disallowed with non-optional arguments 4104ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh for nargs in [1, '*', '+']: 4105ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh self.assertValueError('-x', const='foo', 4106ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh nargs=nargs, action=action) 4107ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh self.assertValueError('spam', const='foo', 4108ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh nargs=nargs, action=action) 4109ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh 4110ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh def test_required_const_actions(self): 4111ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh for action in ['store_const', 'append_const']: 4112ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh 4113ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh # nargs is always disallowed 4114ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh self.assertTypeError('-x', nargs='+', action=action) 4115ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh 4116ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh def test_parsers_action_missing_params(self): 4117ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh self.assertTypeError('command', action='parsers') 4118ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh self.assertTypeError('command', action='parsers', prog='PROG') 4119ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh self.assertTypeError('command', action='parsers', 4120ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh parser_class=argparse.ArgumentParser) 4121ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh 4122ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh def test_required_positional(self): 4123ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh self.assertTypeError('foo', required=True) 4124ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh 4125ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh def test_user_defined_action(self): 4126ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh 4127ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh class Success(Exception): 4128ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh pass 4129ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh 4130ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh class Action(object): 4131ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh 4132ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh def __init__(self, 4133ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh option_strings, 4134ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh dest, 4135ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh const, 4136ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh default, 4137ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh required=False): 4138ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh if dest == 'spam': 4139ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh if const is Success: 4140ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh if default is Success: 4141ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh raise Success() 4142ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh 4143ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh def __call__(self, *args, **kwargs): 4144ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh pass 4145ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh 4146ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh parser = argparse.ArgumentParser() 4147ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh self.assertRaises(Success, parser.add_argument, '--spam', 4148ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh action=Action, default=Success, const=Success) 4149ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh self.assertRaises(Success, parser.add_argument, 'spam', 4150ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh action=Action, default=Success, const=Success) 4151ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh 4152ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh# ================================ 4153ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh# Actions returned by add_argument 4154ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh# ================================ 4155ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh 4156ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsiehclass TestActionsReturned(TestCase): 4157ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh 4158ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh def test_dest(self): 4159ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh parser = argparse.ArgumentParser() 4160ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh action = parser.add_argument('--foo') 4161ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh self.assertEqual(action.dest, 'foo') 4162ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh action = parser.add_argument('-b', '--bar') 4163ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh self.assertEqual(action.dest, 'bar') 4164ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh action = parser.add_argument('-x', '-y') 4165ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh self.assertEqual(action.dest, 'x') 4166ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh 4167ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh def test_misc(self): 4168ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh parser = argparse.ArgumentParser() 4169ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh action = parser.add_argument('--foo', nargs='?', const=42, 4170ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh default=84, type=int, choices=[1, 2], 4171ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh help='FOO', metavar='BAR', dest='baz') 4172ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh self.assertEqual(action.nargs, '?') 4173ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh self.assertEqual(action.const, 42) 4174ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh self.assertEqual(action.default, 84) 4175ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh self.assertEqual(action.type, int) 4176ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh self.assertEqual(action.choices, [1, 2]) 4177ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh self.assertEqual(action.help, 'FOO') 4178ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh self.assertEqual(action.metavar, 'BAR') 4179ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh self.assertEqual(action.dest, 'baz') 4180ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh 4181ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh 4182ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh# ================================ 4183ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh# Argument conflict handling tests 4184ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh# ================================ 4185ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh 4186ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsiehclass TestConflictHandling(TestCase): 4187ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh 4188ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh def test_bad_type(self): 4189ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh self.assertRaises(ValueError, argparse.ArgumentParser, 4190ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh conflict_handler='foo') 4191ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh 4192ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh def test_conflict_error(self): 4193ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh parser = argparse.ArgumentParser() 4194ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh parser.add_argument('-x') 4195ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh self.assertRaises(argparse.ArgumentError, 4196ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh parser.add_argument, '-x') 4197ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh parser.add_argument('--spam') 4198ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh self.assertRaises(argparse.ArgumentError, 4199ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh parser.add_argument, '--spam') 4200ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh 4201ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh def test_resolve_error(self): 4202ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh get_parser = argparse.ArgumentParser 4203ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh parser = get_parser(prog='PROG', conflict_handler='resolve') 4204ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh 4205ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh parser.add_argument('-x', help='OLD X') 4206ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh parser.add_argument('-x', help='NEW X') 4207ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh self.assertEqual(parser.format_help(), textwrap.dedent('''\ 4208ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh usage: PROG [-h] [-x X] 4209ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh 4210ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh optional arguments: 4211ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh -h, --help show this help message and exit 4212ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh -x X NEW X 4213ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh ''')) 4214ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh 4215ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh parser.add_argument('--spam', metavar='OLD_SPAM') 4216ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh parser.add_argument('--spam', metavar='NEW_SPAM') 4217ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh self.assertEqual(parser.format_help(), textwrap.dedent('''\ 4218ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh usage: PROG [-h] [-x X] [--spam NEW_SPAM] 4219ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh 4220ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh optional arguments: 4221ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh -h, --help show this help message and exit 4222ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh -x X NEW X 4223ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh --spam NEW_SPAM 4224ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh ''')) 4225ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh 4226ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh 4227ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh# ============================= 4228ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh# Help and Version option tests 4229ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh# ============================= 4230ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh 4231ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsiehclass TestOptionalsHelpVersionActions(TestCase): 4232ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh """Test the help and version actions""" 4233ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh 4234ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh def _get_error(self, func, *args, **kwargs): 4235ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh try: 4236ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh func(*args, **kwargs) 4237ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh except ArgumentParserError: 4238ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh return sys.exc_info()[1] 4239ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh else: 4240ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh self.assertRaises(ArgumentParserError, func, *args, **kwargs) 4241ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh 4242ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh def assertPrintHelpExit(self, parser, args_str): 4243ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh self.assertEqual( 4244ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh parser.format_help(), 4245ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh self._get_error(parser.parse_args, args_str.split()).stdout) 4246ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh 4247ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh def assertPrintVersionExit(self, parser, args_str): 4248ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh self.assertEqual( 4249ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh parser.format_version(), 4250ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh self._get_error(parser.parse_args, args_str.split()).stderr) 4251ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh 4252ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh def assertArgumentParserError(self, parser, *args): 4253ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh self.assertRaises(ArgumentParserError, parser.parse_args, args) 4254ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh 4255ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh def test_version(self): 4256ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh parser = ErrorRaisingArgumentParser(version='1.0') 4257ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh self.assertPrintHelpExit(parser, '-h') 4258ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh self.assertPrintHelpExit(parser, '--help') 4259ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh self.assertPrintVersionExit(parser, '-v') 4260ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh self.assertPrintVersionExit(parser, '--version') 4261ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh 4262ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh def test_version_format(self): 4263ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh parser = ErrorRaisingArgumentParser(prog='PPP', version='%(prog)s 3.5') 4264ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh msg = self._get_error(parser.parse_args, ['-v']).stderr 4265ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh self.assertEqual('PPP 3.5\n', msg) 4266ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh 4267ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh def test_version_no_help(self): 4268ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh parser = ErrorRaisingArgumentParser(add_help=False, version='1.0') 4269ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh self.assertArgumentParserError(parser, '-h') 4270ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh self.assertArgumentParserError(parser, '--help') 4271ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh self.assertPrintVersionExit(parser, '-v') 4272ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh self.assertPrintVersionExit(parser, '--version') 4273ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh 4274ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh def test_version_action(self): 4275ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh parser = ErrorRaisingArgumentParser(prog='XXX') 4276ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh parser.add_argument('-V', action='version', version='%(prog)s 3.7') 4277ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh msg = self._get_error(parser.parse_args, ['-V']).stderr 4278ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh self.assertEqual('XXX 3.7\n', msg) 4279ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh 4280ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh def test_no_help(self): 4281ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh parser = ErrorRaisingArgumentParser(add_help=False) 4282ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh self.assertArgumentParserError(parser, '-h') 4283ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh self.assertArgumentParserError(parser, '--help') 4284ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh self.assertArgumentParserError(parser, '-v') 4285ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh self.assertArgumentParserError(parser, '--version') 4286ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh 4287ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh def test_alternate_help_version(self): 4288ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh parser = ErrorRaisingArgumentParser() 4289ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh parser.add_argument('-x', action='help') 4290ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh parser.add_argument('-y', action='version') 4291ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh self.assertPrintHelpExit(parser, '-x') 4292ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh self.assertPrintVersionExit(parser, '-y') 4293ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh self.assertArgumentParserError(parser, '-v') 4294ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh self.assertArgumentParserError(parser, '--version') 4295ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh 4296ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh def test_help_version_extra_arguments(self): 4297ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh parser = ErrorRaisingArgumentParser(version='1.0') 4298ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh parser.add_argument('-x', action='store_true') 4299ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh parser.add_argument('y') 4300ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh 4301ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh # try all combinations of valid prefixes and suffixes 4302ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh valid_prefixes = ['', '-x', 'foo', '-x bar', 'baz -x'] 4303ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh valid_suffixes = valid_prefixes + ['--bad-option', 'foo bar baz'] 4304ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh for prefix in valid_prefixes: 4305ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh for suffix in valid_suffixes: 4306ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh format = '%s %%s %s' % (prefix, suffix) 4307ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh self.assertPrintHelpExit(parser, format % '-h') 4308ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh self.assertPrintHelpExit(parser, format % '--help') 4309ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh self.assertPrintVersionExit(parser, format % '-v') 4310ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh self.assertPrintVersionExit(parser, format % '--version') 4311ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh 4312ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh 4313ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh# ====================== 4314ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh# str() and repr() tests 4315ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh# ====================== 4316ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh 4317ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsiehclass TestStrings(TestCase): 4318ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh """Test str() and repr() on Optionals and Positionals""" 4319ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh 4320ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh def assertStringEqual(self, obj, result_string): 4321ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh for func in [str, repr]: 4322ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh self.assertEqual(func(obj), result_string) 4323ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh 4324ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh def test_optional(self): 4325ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh option = argparse.Action( 4326ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh option_strings=['--foo', '-a', '-b'], 4327ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh dest='b', 4328ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh type='int', 4329ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh nargs='+', 4330ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh default=42, 4331ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh choices=[1, 2, 3], 4332ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh help='HELP', 4333ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh metavar='METAVAR') 4334ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh string = ( 4335ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh "Action(option_strings=['--foo', '-a', '-b'], dest='b', " 4336ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh "nargs='+', const=None, default=42, type='int', " 4337ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh "choices=[1, 2, 3], help='HELP', metavar='METAVAR')") 4338ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh self.assertStringEqual(option, string) 4339ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh 4340ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh def test_argument(self): 4341ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh argument = argparse.Action( 4342ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh option_strings=[], 4343ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh dest='x', 4344ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh type=float, 4345ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh nargs='?', 4346ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh default=2.5, 4347ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh choices=[0.5, 1.5, 2.5], 4348ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh help='H HH H', 4349ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh metavar='MV MV MV') 4350ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh string = ( 4351ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh "Action(option_strings=[], dest='x', nargs='?', " 4352ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh "const=None, default=2.5, type=%r, choices=[0.5, 1.5, 2.5], " 4353ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh "help='H HH H', metavar='MV MV MV')" % float) 4354ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh self.assertStringEqual(argument, string) 4355ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh 4356ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh def test_namespace(self): 4357ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh ns = argparse.Namespace(foo=42, bar='spam') 4358ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh string = "Namespace(bar='spam', foo=42)" 4359ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh self.assertStringEqual(ns, string) 4360ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh 4361ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh def test_parser(self): 4362ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh parser = argparse.ArgumentParser(prog='PROG') 4363ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh string = ( 4364ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh "ArgumentParser(prog='PROG', usage=None, description=None, " 4365ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh "version=None, formatter_class=%r, conflict_handler='error', " 4366ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh "add_help=True)" % argparse.HelpFormatter) 4367ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh self.assertStringEqual(parser, string) 4368ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh 4369ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh# =============== 4370ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh# Namespace tests 4371ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh# =============== 4372ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh 4373ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsiehclass TestNamespace(TestCase): 4374ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh 4375ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh def test_constructor(self): 4376ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh ns = argparse.Namespace() 4377ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh self.assertRaises(AttributeError, getattr, ns, 'x') 4378ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh 4379ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh ns = argparse.Namespace(a=42, b='spam') 4380ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh self.assertEqual(ns.a, 42) 4381ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh self.assertEqual(ns.b, 'spam') 4382ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh 4383ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh def test_equality(self): 4384ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh ns1 = argparse.Namespace(a=1, b=2) 4385ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh ns2 = argparse.Namespace(b=2, a=1) 4386ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh ns3 = argparse.Namespace(a=1) 4387ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh ns4 = argparse.Namespace(b=2) 4388ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh 4389ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh self.assertEqual(ns1, ns2) 4390ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh self.assertNotEqual(ns1, ns3) 4391ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh self.assertNotEqual(ns1, ns4) 4392ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh self.assertNotEqual(ns2, ns3) 4393ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh self.assertNotEqual(ns2, ns4) 4394ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh self.assertTrue(ns1 != ns3) 4395ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh self.assertTrue(ns1 != ns4) 4396ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh self.assertTrue(ns2 != ns3) 4397ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh self.assertTrue(ns2 != ns4) 4398ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh 4399ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh 4400ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh# =================== 4401ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh# File encoding tests 4402ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh# =================== 4403ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh 4404ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsiehclass TestEncoding(TestCase): 4405ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh 4406ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh def _test_module_encoding(self, path): 4407ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh path, _ = os.path.splitext(path) 4408ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh path += ".py" 4409ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh with codecs.open(path, 'r', 'utf8') as f: 4410ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh f.read() 4411ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh 4412ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh def test_argparse_module_encoding(self): 4413ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh self._test_module_encoding(argparse.__file__) 4414ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh 4415ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh def test_test_argparse_module_encoding(self): 4416ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh self._test_module_encoding(__file__) 4417ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh 4418ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh# =================== 4419ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh# ArgumentError tests 4420ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh# =================== 4421ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh 4422ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsiehclass TestArgumentError(TestCase): 4423ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh 4424ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh def test_argument_error(self): 4425ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh msg = "my error here" 4426ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh error = argparse.ArgumentError(None, msg) 4427ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh self.assertEqual(str(error), msg) 4428ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh 4429ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh# ======================= 4430ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh# ArgumentTypeError tests 4431ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh# ======================= 4432ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh 4433ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsiehclass TestArgumentTypeError(TestCase): 4434ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh 4435ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh def test_argument_type_error(self): 4436ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh 4437ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh def spam(string): 4438ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh raise argparse.ArgumentTypeError('spam!') 4439ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh 4440ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh parser = ErrorRaisingArgumentParser(prog='PROG', add_help=False) 4441ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh parser.add_argument('x', type=spam) 4442ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh try: 4443ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh parser.parse_args(['XXX']) 4444ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh except ArgumentParserError: 4445ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh expected = 'usage: PROG x\nPROG: error: argument x: spam!\n' 4446ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh msg = sys.exc_info()[1].stderr 4447ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh self.assertEqual(expected, msg) 4448ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh else: 4449ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh self.fail() 4450ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh 4451ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh# ================================================ 4452ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh# Check that the type function is called only once 4453ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh# ================================================ 4454ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh 4455ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsiehclass TestTypeFunctionCallOnlyOnce(TestCase): 4456ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh 4457ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh def test_type_function_call_only_once(self): 4458ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh def spam(string_to_convert): 4459ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh self.assertEqual(string_to_convert, 'spam!') 4460ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh return 'foo_converted' 4461ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh 4462ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh parser = argparse.ArgumentParser() 4463ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh parser.add_argument('--foo', type=spam, default='bar') 4464ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh args = parser.parse_args('--foo spam!'.split()) 4465ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh self.assertEqual(NS(foo='foo_converted'), args) 4466ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh 4467ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh# ================================================================== 4468ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh# Check semantics regarding the default argument and type conversion 4469ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh# ================================================================== 4470ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh 4471ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsiehclass TestTypeFunctionCalledOnDefault(TestCase): 4472ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh 4473ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh def test_type_function_call_with_non_string_default(self): 4474ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh def spam(int_to_convert): 4475ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh self.assertEqual(int_to_convert, 0) 4476ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh return 'foo_converted' 4477ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh 4478ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh parser = argparse.ArgumentParser() 4479ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh parser.add_argument('--foo', type=spam, default=0) 4480ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh args = parser.parse_args([]) 4481ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh # foo should *not* be converted because its default is not a string. 4482ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh self.assertEqual(NS(foo=0), args) 4483ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh 4484ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh def test_type_function_call_with_string_default(self): 4485ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh def spam(int_to_convert): 4486ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh return 'foo_converted' 4487ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh 4488ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh parser = argparse.ArgumentParser() 4489ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh parser.add_argument('--foo', type=spam, default='0') 4490ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh args = parser.parse_args([]) 4491ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh # foo is converted because its default is a string. 4492ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh self.assertEqual(NS(foo='foo_converted'), args) 4493ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh 4494ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh def test_no_double_type_conversion_of_default(self): 4495ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh def extend(str_to_convert): 4496ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh return str_to_convert + '*' 4497ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh 4498ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh parser = argparse.ArgumentParser() 4499ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh parser.add_argument('--test', type=extend, default='*') 4500ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh args = parser.parse_args([]) 4501ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh # The test argument will be two stars, one coming from the default 4502ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh # value and one coming from the type conversion being called exactly 4503ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh # once. 4504ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh self.assertEqual(NS(test='**'), args) 4505ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh 4506ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh def test_issue_15906(self): 4507ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh # Issue #15906: When action='append', type=str, default=[] are 4508ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh # providing, the dest value was the string representation "[]" when it 4509ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh # should have been an empty list. 4510ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh parser = argparse.ArgumentParser() 4511ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh parser.add_argument('--test', dest='test', type=str, 4512ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh default=[], action='append') 4513ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh args = parser.parse_args([]) 4514ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh self.assertEqual(args.test, []) 4515ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh 4516ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh# ====================== 4517ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh# parse_known_args tests 4518ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh# ====================== 4519ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh 4520ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsiehclass TestParseKnownArgs(TestCase): 4521ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh 4522ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh def test_arguments_tuple(self): 4523ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh parser = argparse.ArgumentParser() 4524ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh parser.parse_args(()) 4525ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh 4526ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh def test_arguments_list(self): 4527ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh parser = argparse.ArgumentParser() 4528ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh parser.parse_args([]) 4529ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh 4530ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh def test_arguments_tuple_positional(self): 4531ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh parser = argparse.ArgumentParser() 4532ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh parser.add_argument('x') 4533ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh parser.parse_args(('x',)) 4534ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh 4535ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh def test_arguments_list_positional(self): 4536ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh parser = argparse.ArgumentParser() 4537ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh parser.add_argument('x') 4538ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh parser.parse_args(['x']) 4539ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh 4540ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh def test_optionals(self): 4541ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh parser = argparse.ArgumentParser() 4542ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh parser.add_argument('--foo') 4543ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh args, extras = parser.parse_known_args('--foo F --bar --baz'.split()) 4544ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh self.assertEqual(NS(foo='F'), args) 4545ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh self.assertEqual(['--bar', '--baz'], extras) 4546ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh 4547ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh def test_mixed(self): 4548ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh parser = argparse.ArgumentParser() 4549ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh parser.add_argument('-v', nargs='?', const=1, type=int) 4550ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh parser.add_argument('--spam', action='store_false') 4551ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh parser.add_argument('badger') 4552ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh 4553ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh argv = ["B", "C", "--foo", "-v", "3", "4"] 4554ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh args, extras = parser.parse_known_args(argv) 4555ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh self.assertEqual(NS(v=3, spam=True, badger="B"), args) 4556ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh self.assertEqual(["C", "--foo", "4"], extras) 4557ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh 4558ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh# ========================== 4559ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh# add_argument metavar tests 4560ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh# ========================== 4561ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh 4562ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsiehclass TestAddArgumentMetavar(TestCase): 4563ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh 4564ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh EXPECTED_MESSAGE = "length of metavar tuple does not match nargs" 4565ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh 4566ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh def do_test_no_exception(self, nargs, metavar): 4567ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh parser = argparse.ArgumentParser() 4568ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh parser.add_argument("--foo", nargs=nargs, metavar=metavar) 4569ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh 4570ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh def do_test_exception(self, nargs, metavar): 4571ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh parser = argparse.ArgumentParser() 4572ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh with self.assertRaises(ValueError) as cm: 4573ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh parser.add_argument("--foo", nargs=nargs, metavar=metavar) 4574ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh self.assertEqual(cm.exception.args[0], self.EXPECTED_MESSAGE) 4575ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh 4576ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh # Unit tests for different values of metavar when nargs=None 4577ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh 4578ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh def test_nargs_None_metavar_string(self): 4579ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh self.do_test_no_exception(nargs=None, metavar="1") 4580ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh 4581ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh def test_nargs_None_metavar_length0(self): 4582ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh self.do_test_exception(nargs=None, metavar=tuple()) 4583ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh 4584ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh def test_nargs_None_metavar_length1(self): 4585ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh self.do_test_no_exception(nargs=None, metavar=("1")) 4586ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh 4587ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh def test_nargs_None_metavar_length2(self): 4588ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh self.do_test_exception(nargs=None, metavar=("1", "2")) 4589ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh 4590ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh def test_nargs_None_metavar_length3(self): 4591ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh self.do_test_exception(nargs=None, metavar=("1", "2", "3")) 4592ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh 4593ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh # Unit tests for different values of metavar when nargs=? 4594ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh 4595ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh def test_nargs_optional_metavar_string(self): 4596ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh self.do_test_no_exception(nargs="?", metavar="1") 4597ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh 4598ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh def test_nargs_optional_metavar_length0(self): 4599ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh self.do_test_exception(nargs="?", metavar=tuple()) 4600ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh 4601ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh def test_nargs_optional_metavar_length1(self): 4602ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh self.do_test_no_exception(nargs="?", metavar=("1")) 4603ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh 4604ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh def test_nargs_optional_metavar_length2(self): 4605ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh self.do_test_exception(nargs="?", metavar=("1", "2")) 4606ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh 4607ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh def test_nargs_optional_metavar_length3(self): 4608ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh self.do_test_exception(nargs="?", metavar=("1", "2", "3")) 4609ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh 4610ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh # Unit tests for different values of metavar when nargs=* 4611ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh 4612ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh def test_nargs_zeroormore_metavar_string(self): 4613ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh self.do_test_no_exception(nargs="*", metavar="1") 4614ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh 4615ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh def test_nargs_zeroormore_metavar_length0(self): 4616ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh self.do_test_exception(nargs="*", metavar=tuple()) 4617ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh 4618ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh def test_nargs_zeroormore_metavar_length1(self): 4619ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh self.do_test_no_exception(nargs="*", metavar=("1")) 4620ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh 4621ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh def test_nargs_zeroormore_metavar_length2(self): 4622ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh self.do_test_no_exception(nargs="*", metavar=("1", "2")) 4623ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh 4624ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh def test_nargs_zeroormore_metavar_length3(self): 4625ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh self.do_test_exception(nargs="*", metavar=("1", "2", "3")) 4626ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh 4627ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh # Unit tests for different values of metavar when nargs=+ 4628ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh 4629ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh def test_nargs_oneormore_metavar_string(self): 4630ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh self.do_test_no_exception(nargs="+", metavar="1") 4631ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh 4632ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh def test_nargs_oneormore_metavar_length0(self): 4633ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh self.do_test_exception(nargs="+", metavar=tuple()) 4634ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh 4635ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh def test_nargs_oneormore_metavar_length1(self): 4636ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh self.do_test_no_exception(nargs="+", metavar=("1")) 4637ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh 4638ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh def test_nargs_oneormore_metavar_length2(self): 4639ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh self.do_test_no_exception(nargs="+", metavar=("1", "2")) 4640ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh 4641ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh def test_nargs_oneormore_metavar_length3(self): 4642ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh self.do_test_exception(nargs="+", metavar=("1", "2", "3")) 4643ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh 4644ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh # Unit tests for different values of metavar when nargs=... 4645ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh 4646ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh def test_nargs_remainder_metavar_string(self): 4647ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh self.do_test_no_exception(nargs="...", metavar="1") 4648ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh 4649ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh def test_nargs_remainder_metavar_length0(self): 4650ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh self.do_test_no_exception(nargs="...", metavar=tuple()) 4651ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh 4652ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh def test_nargs_remainder_metavar_length1(self): 4653ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh self.do_test_no_exception(nargs="...", metavar=("1")) 4654ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh 4655ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh def test_nargs_remainder_metavar_length2(self): 4656ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh self.do_test_no_exception(nargs="...", metavar=("1", "2")) 4657ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh 4658ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh def test_nargs_remainder_metavar_length3(self): 4659ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh self.do_test_no_exception(nargs="...", metavar=("1", "2", "3")) 4660ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh 4661ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh # Unit tests for different values of metavar when nargs=A... 4662ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh 4663ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh def test_nargs_parser_metavar_string(self): 4664ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh self.do_test_no_exception(nargs="A...", metavar="1") 4665ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh 4666ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh def test_nargs_parser_metavar_length0(self): 4667ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh self.do_test_exception(nargs="A...", metavar=tuple()) 4668ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh 4669ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh def test_nargs_parser_metavar_length1(self): 4670ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh self.do_test_no_exception(nargs="A...", metavar=("1")) 4671ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh 4672ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh def test_nargs_parser_metavar_length2(self): 4673ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh self.do_test_exception(nargs="A...", metavar=("1", "2")) 4674ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh 4675ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh def test_nargs_parser_metavar_length3(self): 4676ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh self.do_test_exception(nargs="A...", metavar=("1", "2", "3")) 4677ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh 4678ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh # Unit tests for different values of metavar when nargs=1 4679ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh 4680ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh def test_nargs_1_metavar_string(self): 4681ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh self.do_test_no_exception(nargs=1, metavar="1") 4682ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh 4683ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh def test_nargs_1_metavar_length0(self): 4684ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh self.do_test_exception(nargs=1, metavar=tuple()) 4685ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh 4686ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh def test_nargs_1_metavar_length1(self): 4687ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh self.do_test_no_exception(nargs=1, metavar=("1")) 4688ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh 4689ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh def test_nargs_1_metavar_length2(self): 4690ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh self.do_test_exception(nargs=1, metavar=("1", "2")) 4691ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh 4692ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh def test_nargs_1_metavar_length3(self): 4693ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh self.do_test_exception(nargs=1, metavar=("1", "2", "3")) 4694ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh 4695ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh # Unit tests for different values of metavar when nargs=2 4696ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh 4697ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh def test_nargs_2_metavar_string(self): 4698ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh self.do_test_no_exception(nargs=2, metavar="1") 4699ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh 4700ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh def test_nargs_2_metavar_length0(self): 4701ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh self.do_test_exception(nargs=2, metavar=tuple()) 4702ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh 4703ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh def test_nargs_2_metavar_length1(self): 4704ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh self.do_test_no_exception(nargs=2, metavar=("1")) 4705ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh 4706ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh def test_nargs_2_metavar_length2(self): 4707ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh self.do_test_no_exception(nargs=2, metavar=("1", "2")) 4708ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh 4709ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh def test_nargs_2_metavar_length3(self): 4710ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh self.do_test_exception(nargs=2, metavar=("1", "2", "3")) 4711ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh 4712ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh # Unit tests for different values of metavar when nargs=3 4713ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh 4714ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh def test_nargs_3_metavar_string(self): 4715ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh self.do_test_no_exception(nargs=3, metavar="1") 4716ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh 4717ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh def test_nargs_3_metavar_length0(self): 4718ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh self.do_test_exception(nargs=3, metavar=tuple()) 4719ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh 4720ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh def test_nargs_3_metavar_length1(self): 4721ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh self.do_test_no_exception(nargs=3, metavar=("1")) 4722ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh 4723ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh def test_nargs_3_metavar_length2(self): 4724ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh self.do_test_exception(nargs=3, metavar=("1", "2")) 4725ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh 4726ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh def test_nargs_3_metavar_length3(self): 4727ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh self.do_test_no_exception(nargs=3, metavar=("1", "2", "3")) 4728ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh 4729ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh# ============================ 4730ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh# from argparse import * tests 4731ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh# ============================ 4732ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh 4733ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsiehclass TestImportStar(TestCase): 4734ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh 4735ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh def test(self): 4736ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh for name in argparse.__all__: 4737ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh self.assertTrue(hasattr(argparse, name)) 4738ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh 4739ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh def test_all_exports_everything_but_modules(self): 4740ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh items = [ 4741ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh name 4742ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh for name, value in vars(argparse).items() 4743ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh if not name.startswith("_") 4744ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh if not inspect.ismodule(value) 4745ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh ] 4746ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh self.assertEqual(sorted(items), sorted(argparse.__all__)) 4747ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh 4748ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsiehdef test_main(): 4749ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh # silence warnings about version argument - these are expected 4750ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh with test_support.check_warnings( 4751ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh ('The "version" argument to ArgumentParser is deprecated.', 4752ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh DeprecationWarning), 4753ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh ('The (format|print)_version method is deprecated', 4754ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh DeprecationWarning)): 4755ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh test_support.run_unittest(__name__) 4756ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh # Remove global references to avoid looking like we have refleaks. 4757ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh RFile.seen = {} 4758ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh WFile.seen = set() 4759ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh 4760ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh 4761ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh 4762ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsiehif __name__ == '__main__': 4763ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh test_main() 4764