14710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm# Author: Steven J. Bethard <steven.bethard@gmail.com>. 24710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm 34710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylmimport codecs 44710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylmimport inspect 54710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylmimport os 64710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylmimport shutil 74710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylmimport stat 84710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylmimport sys 94710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylmimport textwrap 104710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylmimport tempfile 114710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylmimport unittest 124710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylmimport argparse 134710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm 144710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylmfrom StringIO import StringIO 154710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm 164710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylmclass StdIOBuffer(StringIO): 174710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm pass 184710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm 194710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylmfrom test import test_support 204710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm 214710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylmclass TestCase(unittest.TestCase): 224710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm 234710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm def assertEqual(self, obj1, obj2): 244710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm if obj1 != obj2: 254710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm print('') 264710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm print(repr(obj1)) 274710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm print(repr(obj2)) 284710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm print(obj1) 294710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm print(obj2) 304710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm super(TestCase, self).assertEqual(obj1, obj2) 314710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm 324710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm def setUp(self): 334710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm # The tests assume that line wrapping occurs at 80 columns, but this 344710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm # behaviour can be overridden by setting the COLUMNS environment 354710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm # variable. To ensure that this assumption is true, unset COLUMNS. 364710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm env = test_support.EnvironmentVarGuard() 374710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm env.unset("COLUMNS") 384710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm self.addCleanup(env.__exit__) 394710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm 404710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm 414710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylmclass TempDirMixin(object): 424710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm 434710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm def setUp(self): 444710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm self.temp_dir = tempfile.mkdtemp() 454710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm self.old_dir = os.getcwd() 464710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm os.chdir(self.temp_dir) 474710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm 484710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm def tearDown(self): 494710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm os.chdir(self.old_dir) 504710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm shutil.rmtree(self.temp_dir, True) 514710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm 524710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm def create_readonly_file(self, filename): 534710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm file_path = os.path.join(self.temp_dir, filename) 544710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm with open(file_path, 'w') as file: 554710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm file.write(filename) 564710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm os.chmod(file_path, stat.S_IREAD) 574710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm 584710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylmclass Sig(object): 594710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm 604710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm def __init__(self, *args, **kwargs): 614710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm self.args = args 624710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm self.kwargs = kwargs 634710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm 644710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm 654710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylmclass NS(object): 664710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm 674710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm def __init__(self, **kwargs): 684710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm self.__dict__.update(kwargs) 694710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm 704710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm def __repr__(self): 714710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm sorted_items = sorted(self.__dict__.items()) 724710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm kwarg_str = ', '.join(['%s=%r' % tup for tup in sorted_items]) 734710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm return '%s(%s)' % (type(self).__name__, kwarg_str) 744710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm 754710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm __hash__ = None 764710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm 774710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm def __eq__(self, other): 784710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm return vars(self) == vars(other) 794710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm 804710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm def __ne__(self, other): 814710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm return not (self == other) 824710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm 834710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm 844710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylmclass ArgumentParserError(Exception): 854710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm 864710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm def __init__(self, message, stdout=None, stderr=None, error_code=None): 874710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm Exception.__init__(self, message, stdout, stderr) 884710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm self.message = message 894710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm self.stdout = stdout 904710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm self.stderr = stderr 914710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm self.error_code = error_code 924710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm 934710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm 944710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylmdef stderr_to_parser_error(parse_args, *args, **kwargs): 954710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm # if this is being called recursively and stderr or stdout is already being 964710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm # redirected, simply call the function and let the enclosing function 974710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm # catch the exception 984710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm if isinstance(sys.stderr, StdIOBuffer) or isinstance(sys.stdout, StdIOBuffer): 994710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm return parse_args(*args, **kwargs) 1004710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm 1014710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm # if this is not being called recursively, redirect stderr and 1024710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm # use it as the ArgumentParserError message 1034710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm old_stdout = sys.stdout 1044710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm old_stderr = sys.stderr 1054710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm sys.stdout = StdIOBuffer() 1064710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm sys.stderr = StdIOBuffer() 1074710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm try: 1084710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm try: 1094710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm result = parse_args(*args, **kwargs) 1104710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm for key in list(vars(result)): 1114710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm if getattr(result, key) is sys.stdout: 1124710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm setattr(result, key, old_stdout) 1134710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm if getattr(result, key) is sys.stderr: 1144710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm setattr(result, key, old_stderr) 1154710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm return result 1164710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm except SystemExit: 1174710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm code = sys.exc_info()[1].code 1184710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm stdout = sys.stdout.getvalue() 1194710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm stderr = sys.stderr.getvalue() 1204710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm raise ArgumentParserError("SystemExit", stdout, stderr, code) 1214710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm finally: 1224710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm sys.stdout = old_stdout 1234710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm sys.stderr = old_stderr 1244710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm 1254710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm 1264710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylmclass ErrorRaisingArgumentParser(argparse.ArgumentParser): 1274710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm 1284710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm def parse_args(self, *args, **kwargs): 1294710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm parse_args = super(ErrorRaisingArgumentParser, self).parse_args 1304710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm return stderr_to_parser_error(parse_args, *args, **kwargs) 1314710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm 1324710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm def exit(self, *args, **kwargs): 1334710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm exit = super(ErrorRaisingArgumentParser, self).exit 1344710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm return stderr_to_parser_error(exit, *args, **kwargs) 1354710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm 1364710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm def error(self, *args, **kwargs): 1374710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm error = super(ErrorRaisingArgumentParser, self).error 1384710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm return stderr_to_parser_error(error, *args, **kwargs) 1394710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm 1404710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm 1414710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylmclass ParserTesterMetaclass(type): 1424710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm """Adds parser tests using the class attributes. 1434710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm 1444710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm Classes of this type should specify the following attributes: 1454710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm 1464710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm argument_signatures -- a list of Sig objects which specify 1474710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm the signatures of Argument objects to be created 1484710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm failures -- a list of args lists that should cause the parser 1494710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm to fail 1504710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm successes -- a list of (initial_args, options, remaining_args) tuples 1514710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm where initial_args specifies the string args to be parsed, 1524710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm options is a dict that should match the vars() of the options 1534710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm parsed out of initial_args, and remaining_args should be any 1544710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm remaining unparsed arguments 1554710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm """ 1564710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm 1574710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm def __init__(cls, name, bases, bodydict): 1584710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm if name == 'ParserTestCase': 1594710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm return 1604710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm 1614710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm # default parser signature is empty 1624710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm if not hasattr(cls, 'parser_signature'): 1634710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm cls.parser_signature = Sig() 1644710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm if not hasattr(cls, 'parser_class'): 1654710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm cls.parser_class = ErrorRaisingArgumentParser 1664710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm 1674710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm # --------------------------------------- 1684710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm # functions for adding optional arguments 1694710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm # --------------------------------------- 1704710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm def no_groups(parser, argument_signatures): 1714710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm """Add all arguments directly to the parser""" 1724710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm for sig in argument_signatures: 1734710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm parser.add_argument(*sig.args, **sig.kwargs) 1744710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm 1754710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm def one_group(parser, argument_signatures): 1764710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm """Add all arguments under a single group in the parser""" 1774710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm group = parser.add_argument_group('foo') 1784710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm for sig in argument_signatures: 1794710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm group.add_argument(*sig.args, **sig.kwargs) 1804710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm 1814710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm def many_groups(parser, argument_signatures): 1824710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm """Add each argument in its own group to the parser""" 1834710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm for i, sig in enumerate(argument_signatures): 1844710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm group = parser.add_argument_group('foo:%i' % i) 1854710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm group.add_argument(*sig.args, **sig.kwargs) 1864710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm 1874710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm # -------------------------- 1884710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm # functions for parsing args 1894710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm # -------------------------- 1904710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm def listargs(parser, args): 1914710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm """Parse the args by passing in a list""" 1924710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm return parser.parse_args(args) 1934710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm 1944710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm def sysargs(parser, args): 1954710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm """Parse the args by defaulting to sys.argv""" 1964710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm old_sys_argv = sys.argv 1974710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm sys.argv = [old_sys_argv[0]] + args 1984710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm try: 1994710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm return parser.parse_args() 2004710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm finally: 2014710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm sys.argv = old_sys_argv 2024710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm 2034710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm # class that holds the combination of one optional argument 2044710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm # addition method and one arg parsing method 2054710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm class AddTests(object): 2064710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm 2074710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm def __init__(self, tester_cls, add_arguments, parse_args): 2084710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm self._add_arguments = add_arguments 2094710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm self._parse_args = parse_args 2104710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm 2114710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm add_arguments_name = self._add_arguments.__name__ 2124710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm parse_args_name = self._parse_args.__name__ 2134710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm for test_func in [self.test_failures, self.test_successes]: 2144710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm func_name = test_func.__name__ 2154710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm names = func_name, add_arguments_name, parse_args_name 2164710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm test_name = '_'.join(names) 2174710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm 2184710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm def wrapper(self, test_func=test_func): 2194710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm test_func(self) 2204710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm try: 2214710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm wrapper.__name__ = test_name 2224710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm except TypeError: 2234710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm pass 2244710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm setattr(tester_cls, test_name, wrapper) 2254710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm 2264710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm def _get_parser(self, tester): 2274710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm args = tester.parser_signature.args 2284710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm kwargs = tester.parser_signature.kwargs 2294710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm parser = tester.parser_class(*args, **kwargs) 2304710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm self._add_arguments(parser, tester.argument_signatures) 2314710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm return parser 2324710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm 2334710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm def test_failures(self, tester): 2344710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm parser = self._get_parser(tester) 2354710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm for args_str in tester.failures: 2364710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm args = args_str.split() 2374710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm raises = tester.assertRaises 2384710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm raises(ArgumentParserError, parser.parse_args, args) 2394710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm 2404710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm def test_successes(self, tester): 2414710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm parser = self._get_parser(tester) 2424710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm for args, expected_ns in tester.successes: 2434710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm if isinstance(args, str): 2444710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm args = args.split() 2454710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm result_ns = self._parse_args(parser, args) 2464710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm tester.assertEqual(expected_ns, result_ns) 2474710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm 2484710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm # add tests for each combination of an optionals adding method 2494710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm # and an arg parsing method 2504710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm for add_arguments in [no_groups, one_group, many_groups]: 2514710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm for parse_args in [listargs, sysargs]: 2524710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm AddTests(cls, add_arguments, parse_args) 2534710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm 2544710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylmbases = TestCase, 2554710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylmParserTestCase = ParserTesterMetaclass('ParserTestCase', bases, {}) 2564710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm 2574710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm# =============== 2584710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm# Optionals tests 2594710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm# =============== 2604710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm 2614710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylmclass TestOptionalsSingleDash(ParserTestCase): 2624710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm """Test an Optional with a single-dash option string""" 2634710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm 2644710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm argument_signatures = [Sig('-x')] 2654710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm failures = ['-x', 'a', '--foo', '-x --foo', '-x -y'] 2664710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm successes = [ 2674710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm ('', NS(x=None)), 2684710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm ('-x a', NS(x='a')), 2694710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm ('-xa', NS(x='a')), 2704710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm ('-x -1', NS(x='-1')), 2714710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm ('-x-1', NS(x='-1')), 2724710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm ] 2734710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm 2744710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm 2754710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylmclass TestOptionalsSingleDashCombined(ParserTestCase): 2764710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm """Test an Optional with a single-dash option string""" 2774710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm 2784710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm argument_signatures = [ 2794710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm Sig('-x', action='store_true'), 2804710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm Sig('-yyy', action='store_const', const=42), 2814710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm Sig('-z'), 2824710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm ] 2834710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm failures = ['a', '--foo', '-xa', '-x --foo', '-x -z', '-z -x', 2844710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm '-yx', '-yz a', '-yyyx', '-yyyza', '-xyza'] 2854710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm successes = [ 2864710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm ('', NS(x=False, yyy=None, z=None)), 2874710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm ('-x', NS(x=True, yyy=None, z=None)), 2884710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm ('-za', NS(x=False, yyy=None, z='a')), 2894710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm ('-z a', NS(x=False, yyy=None, z='a')), 2904710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm ('-xza', NS(x=True, yyy=None, z='a')), 2914710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm ('-xz a', NS(x=True, yyy=None, z='a')), 2924710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm ('-x -za', NS(x=True, yyy=None, z='a')), 2934710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm ('-x -z a', NS(x=True, yyy=None, z='a')), 2944710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm ('-y', NS(x=False, yyy=42, z=None)), 2954710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm ('-yyy', NS(x=False, yyy=42, z=None)), 2964710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm ('-x -yyy -za', NS(x=True, yyy=42, z='a')), 2974710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm ('-x -yyy -z a', NS(x=True, yyy=42, z='a')), 2984710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm ] 2994710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm 3004710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm 3014710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylmclass TestOptionalsSingleDashLong(ParserTestCase): 3024710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm """Test an Optional with a multi-character single-dash option string""" 3034710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm 3044710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm argument_signatures = [Sig('-foo')] 3054710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm failures = ['-foo', 'a', '--foo', '-foo --foo', '-foo -y', '-fooa'] 3064710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm successes = [ 3074710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm ('', NS(foo=None)), 3084710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm ('-foo a', NS(foo='a')), 3094710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm ('-foo -1', NS(foo='-1')), 3104710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm ('-fo a', NS(foo='a')), 3114710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm ('-f a', NS(foo='a')), 3124710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm ] 3134710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm 3144710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm 3154710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylmclass TestOptionalsSingleDashSubsetAmbiguous(ParserTestCase): 3164710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm """Test Optionals where option strings are subsets of each other""" 3174710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm 3184710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm argument_signatures = [Sig('-f'), Sig('-foobar'), Sig('-foorab')] 3194710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm failures = ['-f', '-foo', '-fo', '-foo b', '-foob', '-fooba', '-foora'] 3204710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm successes = [ 3214710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm ('', NS(f=None, foobar=None, foorab=None)), 3224710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm ('-f a', NS(f='a', foobar=None, foorab=None)), 3234710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm ('-fa', NS(f='a', foobar=None, foorab=None)), 3244710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm ('-foa', NS(f='oa', foobar=None, foorab=None)), 3254710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm ('-fooa', NS(f='ooa', foobar=None, foorab=None)), 3264710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm ('-foobar a', NS(f=None, foobar='a', foorab=None)), 3274710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm ('-foorab a', NS(f=None, foobar=None, foorab='a')), 3284710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm ] 3294710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm 3304710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm 3314710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylmclass TestOptionalsSingleDashAmbiguous(ParserTestCase): 3324710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm """Test Optionals that partially match but are not subsets""" 3334710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm 3344710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm argument_signatures = [Sig('-foobar'), Sig('-foorab')] 3354710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm failures = ['-f', '-f a', '-fa', '-foa', '-foo', '-fo', '-foo b'] 3364710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm successes = [ 3374710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm ('', NS(foobar=None, foorab=None)), 3384710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm ('-foob a', NS(foobar='a', foorab=None)), 3394710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm ('-foor a', NS(foobar=None, foorab='a')), 3404710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm ('-fooba a', NS(foobar='a', foorab=None)), 3414710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm ('-foora a', NS(foobar=None, foorab='a')), 3424710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm ('-foobar a', NS(foobar='a', foorab=None)), 3434710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm ('-foorab a', NS(foobar=None, foorab='a')), 3444710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm ] 3454710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm 3464710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm 3474710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylmclass TestOptionalsNumeric(ParserTestCase): 3484710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm """Test an Optional with a short opt string""" 3494710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm 3504710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm argument_signatures = [Sig('-1', dest='one')] 3514710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm failures = ['-1', 'a', '-1 --foo', '-1 -y', '-1 -1', '-1 -2'] 3524710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm successes = [ 3534710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm ('', NS(one=None)), 3544710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm ('-1 a', NS(one='a')), 3554710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm ('-1a', NS(one='a')), 3564710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm ('-1-2', NS(one='-2')), 3574710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm ] 3584710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm 3594710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm 3604710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylmclass TestOptionalsDoubleDash(ParserTestCase): 3614710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm """Test an Optional with a double-dash option string""" 3624710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm 3634710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm argument_signatures = [Sig('--foo')] 3644710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm failures = ['--foo', '-f', '-f a', 'a', '--foo -x', '--foo --bar'] 3654710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm successes = [ 3664710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm ('', NS(foo=None)), 3674710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm ('--foo a', NS(foo='a')), 3684710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm ('--foo=a', NS(foo='a')), 3694710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm ('--foo -2.5', NS(foo='-2.5')), 3704710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm ('--foo=-2.5', NS(foo='-2.5')), 3714710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm ] 3724710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm 3734710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm 3744710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylmclass TestOptionalsDoubleDashPartialMatch(ParserTestCase): 3754710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm """Tests partial matching with a double-dash option string""" 3764710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm 3774710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm argument_signatures = [ 3784710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm Sig('--badger', action='store_true'), 3794710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm Sig('--bat'), 3804710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm ] 3814710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm failures = ['--bar', '--b', '--ba', '--b=2', '--ba=4', '--badge 5'] 3824710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm successes = [ 3834710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm ('', NS(badger=False, bat=None)), 3844710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm ('--bat X', NS(badger=False, bat='X')), 3854710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm ('--bad', NS(badger=True, bat=None)), 3864710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm ('--badg', NS(badger=True, bat=None)), 3874710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm ('--badge', NS(badger=True, bat=None)), 3884710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm ('--badger', NS(badger=True, bat=None)), 3894710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm ] 3904710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm 3914710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm 3924710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylmclass TestOptionalsDoubleDashPrefixMatch(ParserTestCase): 3934710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm """Tests when one double-dash option string is a prefix of another""" 3944710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm 3954710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm argument_signatures = [ 3964710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm Sig('--badger', action='store_true'), 3974710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm Sig('--ba'), 3984710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm ] 3994710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm failures = ['--bar', '--b', '--ba', '--b=2', '--badge 5'] 4004710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm successes = [ 4014710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm ('', NS(badger=False, ba=None)), 4024710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm ('--ba X', NS(badger=False, ba='X')), 4034710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm ('--ba=X', NS(badger=False, ba='X')), 4044710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm ('--bad', NS(badger=True, ba=None)), 4054710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm ('--badg', NS(badger=True, ba=None)), 4064710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm ('--badge', NS(badger=True, ba=None)), 4074710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm ('--badger', NS(badger=True, ba=None)), 4084710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm ] 4094710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm 4104710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm 4114710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylmclass TestOptionalsSingleDoubleDash(ParserTestCase): 4124710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm """Test an Optional with single- and double-dash option strings""" 4134710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm 4144710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm argument_signatures = [ 4154710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm Sig('-f', action='store_true'), 4164710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm Sig('--bar'), 4174710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm Sig('-baz', action='store_const', const=42), 4184710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm ] 4194710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm failures = ['--bar', '-fbar', '-fbaz', '-bazf', '-b B', 'B'] 4204710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm successes = [ 4214710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm ('', NS(f=False, bar=None, baz=None)), 4224710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm ('-f', NS(f=True, bar=None, baz=None)), 4234710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm ('--ba B', NS(f=False, bar='B', baz=None)), 4244710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm ('-f --bar B', NS(f=True, bar='B', baz=None)), 4254710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm ('-f -b', NS(f=True, bar=None, baz=42)), 4264710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm ('-ba -f', NS(f=True, bar=None, baz=42)), 4274710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm ] 4284710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm 4294710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm 4304710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylmclass TestOptionalsAlternatePrefixChars(ParserTestCase): 4314710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm """Test an Optional with option strings with custom prefixes""" 4324710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm 4334710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm parser_signature = Sig(prefix_chars='+:/', add_help=False) 4344710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm argument_signatures = [ 4354710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm Sig('+f', action='store_true'), 4364710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm Sig('::bar'), 4374710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm Sig('/baz', action='store_const', const=42), 4384710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm ] 4394710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm failures = ['--bar', '-fbar', '-b B', 'B', '-f', '--bar B', '-baz', '-h', '--help', '+h', '::help', '/help'] 4404710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm successes = [ 4414710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm ('', NS(f=False, bar=None, baz=None)), 4424710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm ('+f', NS(f=True, bar=None, baz=None)), 4434710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm ('::ba B', NS(f=False, bar='B', baz=None)), 4444710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm ('+f ::bar B', NS(f=True, bar='B', baz=None)), 4454710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm ('+f /b', NS(f=True, bar=None, baz=42)), 4464710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm ('/ba +f', NS(f=True, bar=None, baz=42)), 4474710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm ] 4484710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm 4494710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm 4504710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylmclass TestOptionalsAlternatePrefixCharsAddedHelp(ParserTestCase): 4514710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm """When ``-`` not in prefix_chars, default operators created for help 4524710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm should use the prefix_chars in use rather than - or -- 4534710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm http://bugs.python.org/issue9444""" 4544710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm 4554710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm parser_signature = Sig(prefix_chars='+:/', add_help=True) 4564710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm argument_signatures = [ 4574710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm Sig('+f', action='store_true'), 4584710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm Sig('::bar'), 4594710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm Sig('/baz', action='store_const', const=42), 4604710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm ] 4614710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm failures = ['--bar', '-fbar', '-b B', 'B', '-f', '--bar B', '-baz'] 4624710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm successes = [ 4634710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm ('', NS(f=False, bar=None, baz=None)), 4644710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm ('+f', NS(f=True, bar=None, baz=None)), 4654710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm ('::ba B', NS(f=False, bar='B', baz=None)), 4664710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm ('+f ::bar B', NS(f=True, bar='B', baz=None)), 4674710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm ('+f /b', NS(f=True, bar=None, baz=42)), 4684710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm ('/ba +f', NS(f=True, bar=None, baz=42)) 4694710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm ] 4704710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm 4714710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm 4724710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylmclass TestOptionalsAlternatePrefixCharsMultipleShortArgs(ParserTestCase): 4734710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm """Verify that Optionals must be called with their defined prefixes""" 4744710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm 4754710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm parser_signature = Sig(prefix_chars='+-', add_help=False) 4764710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm argument_signatures = [ 4774710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm Sig('-x', action='store_true'), 4784710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm Sig('+y', action='store_true'), 4794710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm Sig('+z', action='store_true'), 4804710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm ] 4814710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm failures = ['-w', 4824710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm '-xyz', 4834710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm '+x', 4844710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm '-y', 4854710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm '+xyz', 4864710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm ] 4874710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm successes = [ 4884710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm ('', NS(x=False, y=False, z=False)), 4894710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm ('-x', NS(x=True, y=False, z=False)), 4904710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm ('+y -x', NS(x=True, y=True, z=False)), 4914710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm ('+yz -x', NS(x=True, y=True, z=True)), 4924710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm ] 4934710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm 4944710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm 4954710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylmclass TestOptionalsShortLong(ParserTestCase): 4964710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm """Test a combination of single- and double-dash option strings""" 4974710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm 4984710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm argument_signatures = [ 4994710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm Sig('-v', '--verbose', '-n', '--noisy', action='store_true'), 5004710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm ] 5014710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm failures = ['--x --verbose', '-N', 'a', '-v x'] 5024710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm successes = [ 5034710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm ('', NS(verbose=False)), 5044710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm ('-v', NS(verbose=True)), 5054710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm ('--verbose', NS(verbose=True)), 5064710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm ('-n', NS(verbose=True)), 5074710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm ('--noisy', NS(verbose=True)), 5084710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm ] 5094710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm 5104710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm 5114710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylmclass TestOptionalsDest(ParserTestCase): 5124710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm """Tests various means of setting destination""" 5134710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm 5144710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm argument_signatures = [Sig('--foo-bar'), Sig('--baz', dest='zabbaz')] 5154710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm failures = ['a'] 5164710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm successes = [ 5174710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm ('--foo-bar f', NS(foo_bar='f', zabbaz=None)), 5184710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm ('--baz g', NS(foo_bar=None, zabbaz='g')), 5194710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm ('--foo-bar h --baz i', NS(foo_bar='h', zabbaz='i')), 5204710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm ('--baz j --foo-bar k', NS(foo_bar='k', zabbaz='j')), 5214710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm ] 5224710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm 5234710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm 5244710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylmclass TestOptionalsDefault(ParserTestCase): 5254710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm """Tests specifying a default for an Optional""" 5264710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm 5274710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm argument_signatures = [Sig('-x'), Sig('-y', default=42)] 5284710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm failures = ['a'] 5294710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm successes = [ 5304710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm ('', NS(x=None, y=42)), 5314710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm ('-xx', NS(x='x', y=42)), 5324710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm ('-yy', NS(x=None, y='y')), 5334710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm ] 5344710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm 5354710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm 5364710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylmclass TestOptionalsNargsDefault(ParserTestCase): 5374710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm """Tests not specifying the number of args for an Optional""" 5384710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm 5394710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm argument_signatures = [Sig('-x')] 5404710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm failures = ['a', '-x'] 5414710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm successes = [ 5424710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm ('', NS(x=None)), 5434710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm ('-x a', NS(x='a')), 5444710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm ] 5454710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm 5464710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm 5474710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylmclass TestOptionalsNargs1(ParserTestCase): 5484710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm """Tests specifying the 1 arg for an Optional""" 5494710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm 5504710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm argument_signatures = [Sig('-x', nargs=1)] 5514710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm failures = ['a', '-x'] 5524710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm successes = [ 5534710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm ('', NS(x=None)), 5544710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm ('-x a', NS(x=['a'])), 5554710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm ] 5564710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm 5574710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm 5584710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylmclass TestOptionalsNargs3(ParserTestCase): 5594710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm """Tests specifying the 3 args for an Optional""" 5604710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm 5614710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm argument_signatures = [Sig('-x', nargs=3)] 5624710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm failures = ['a', '-x', '-x a', '-x a b', 'a -x', 'a -x b'] 5634710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm successes = [ 5644710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm ('', NS(x=None)), 5654710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm ('-x a b c', NS(x=['a', 'b', 'c'])), 5664710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm ] 5674710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm 5684710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm 5694710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylmclass TestOptionalsNargsOptional(ParserTestCase): 5704710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm """Tests specifying an Optional arg for an Optional""" 5714710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm 5724710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm argument_signatures = [ 5734710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm Sig('-w', nargs='?'), 5744710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm Sig('-x', nargs='?', const=42), 5754710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm Sig('-y', nargs='?', default='spam'), 5764710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm Sig('-z', nargs='?', type=int, const='42', default='84'), 5774710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm ] 5784710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm failures = ['2'] 5794710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm successes = [ 5804710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm ('', NS(w=None, x=None, y='spam', z=84)), 5814710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm ('-w', NS(w=None, x=None, y='spam', z=84)), 5824710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm ('-w 2', NS(w='2', x=None, y='spam', z=84)), 5834710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm ('-x', NS(w=None, x=42, y='spam', z=84)), 5844710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm ('-x 2', NS(w=None, x='2', y='spam', z=84)), 5854710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm ('-y', NS(w=None, x=None, y=None, z=84)), 5864710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm ('-y 2', NS(w=None, x=None, y='2', z=84)), 5874710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm ('-z', NS(w=None, x=None, y='spam', z=42)), 5884710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm ('-z 2', NS(w=None, x=None, y='spam', z=2)), 5894710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm ] 5904710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm 5914710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm 5924710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylmclass TestOptionalsNargsZeroOrMore(ParserTestCase): 5934710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm """Tests specifying an args for an Optional that accepts zero or more""" 5944710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm 5954710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm argument_signatures = [ 5964710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm Sig('-x', nargs='*'), 5974710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm Sig('-y', nargs='*', default='spam'), 5984710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm ] 5994710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm failures = ['a'] 6004710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm successes = [ 6014710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm ('', NS(x=None, y='spam')), 6024710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm ('-x', NS(x=[], y='spam')), 6034710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm ('-x a', NS(x=['a'], y='spam')), 6044710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm ('-x a b', NS(x=['a', 'b'], y='spam')), 6054710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm ('-y', NS(x=None, y=[])), 6064710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm ('-y a', NS(x=None, y=['a'])), 6074710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm ('-y a b', NS(x=None, y=['a', 'b'])), 6084710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm ] 6094710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm 6104710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm 6114710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylmclass TestOptionalsNargsOneOrMore(ParserTestCase): 6124710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm """Tests specifying an args for an Optional that accepts one or more""" 6134710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm 6144710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm argument_signatures = [ 6154710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm Sig('-x', nargs='+'), 6164710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm Sig('-y', nargs='+', default='spam'), 6174710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm ] 6184710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm failures = ['a', '-x', '-y', 'a -x', 'a -y b'] 6194710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm successes = [ 6204710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm ('', NS(x=None, y='spam')), 6214710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm ('-x a', NS(x=['a'], y='spam')), 6224710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm ('-x a b', NS(x=['a', 'b'], y='spam')), 6234710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm ('-y a', NS(x=None, y=['a'])), 6244710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm ('-y a b', NS(x=None, y=['a', 'b'])), 6254710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm ] 6264710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm 6274710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm 6284710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylmclass TestOptionalsChoices(ParserTestCase): 6294710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm """Tests specifying the choices for an Optional""" 6304710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm 6314710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm argument_signatures = [ 6324710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm Sig('-f', choices='abc'), 6334710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm Sig('-g', type=int, choices=range(5))] 6344710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm failures = ['a', '-f d', '-fad', '-ga', '-g 6'] 6354710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm successes = [ 6364710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm ('', NS(f=None, g=None)), 6374710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm ('-f a', NS(f='a', g=None)), 6384710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm ('-f c', NS(f='c', g=None)), 6394710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm ('-g 0', NS(f=None, g=0)), 6404710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm ('-g 03', NS(f=None, g=3)), 6414710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm ('-fb -g4', NS(f='b', g=4)), 6424710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm ] 6434710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm 6444710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm 6454710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylmclass TestOptionalsRequired(ParserTestCase): 6464710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm """Tests the an optional action that is required""" 6474710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm 6484710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm argument_signatures = [ 6494710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm Sig('-x', type=int, required=True), 6504710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm ] 6514710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm failures = ['a', ''] 6524710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm successes = [ 6534710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm ('-x 1', NS(x=1)), 6544710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm ('-x42', NS(x=42)), 6554710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm ] 6564710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm 6574710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm 6584710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylmclass TestOptionalsActionStore(ParserTestCase): 6594710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm """Tests the store action for an Optional""" 6604710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm 6614710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm argument_signatures = [Sig('-x', action='store')] 6624710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm failures = ['a', 'a -x'] 6634710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm successes = [ 6644710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm ('', NS(x=None)), 6654710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm ('-xfoo', NS(x='foo')), 6664710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm ] 6674710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm 6684710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm 6694710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylmclass TestOptionalsActionStoreConst(ParserTestCase): 6704710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm """Tests the store_const action for an Optional""" 6714710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm 6724710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm argument_signatures = [Sig('-y', action='store_const', const=object)] 6734710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm failures = ['a'] 6744710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm successes = [ 6754710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm ('', NS(y=None)), 6764710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm ('-y', NS(y=object)), 6774710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm ] 6784710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm 6794710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm 6804710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylmclass TestOptionalsActionStoreFalse(ParserTestCase): 6814710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm """Tests the store_false action for an Optional""" 6824710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm 6834710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm argument_signatures = [Sig('-z', action='store_false')] 6844710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm failures = ['a', '-za', '-z a'] 6854710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm successes = [ 6864710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm ('', NS(z=True)), 6874710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm ('-z', NS(z=False)), 6884710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm ] 6894710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm 6904710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm 6914710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylmclass TestOptionalsActionStoreTrue(ParserTestCase): 6924710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm """Tests the store_true action for an Optional""" 6934710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm 6944710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm argument_signatures = [Sig('--apple', action='store_true')] 6954710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm failures = ['a', '--apple=b', '--apple b'] 6964710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm successes = [ 6974710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm ('', NS(apple=False)), 6984710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm ('--apple', NS(apple=True)), 6994710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm ] 7004710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm 7014710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm 7024710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylmclass TestOptionalsActionAppend(ParserTestCase): 7034710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm """Tests the append action for an Optional""" 7044710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm 7054710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm argument_signatures = [Sig('--baz', action='append')] 7064710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm failures = ['a', '--baz', 'a --baz', '--baz a b'] 7074710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm successes = [ 7084710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm ('', NS(baz=None)), 7094710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm ('--baz a', NS(baz=['a'])), 7104710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm ('--baz a --baz b', NS(baz=['a', 'b'])), 7114710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm ] 7124710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm 7134710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm 7144710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylmclass TestOptionalsActionAppendWithDefault(ParserTestCase): 7154710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm """Tests the append action for an Optional""" 7164710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm 7174710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm argument_signatures = [Sig('--baz', action='append', default=['X'])] 7184710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm failures = ['a', '--baz', 'a --baz', '--baz a b'] 7194710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm successes = [ 7204710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm ('', NS(baz=['X'])), 7214710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm ('--baz a', NS(baz=['X', 'a'])), 7224710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm ('--baz a --baz b', NS(baz=['X', 'a', 'b'])), 7234710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm ] 7244710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm 7254710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm 7264710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylmclass TestOptionalsActionAppendConst(ParserTestCase): 7274710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm """Tests the append_const action for an Optional""" 7284710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm 7294710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm argument_signatures = [ 7304710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm Sig('-b', action='append_const', const=Exception), 7314710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm Sig('-c', action='append', dest='b'), 7324710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm ] 7334710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm failures = ['a', '-c', 'a -c', '-bx', '-b x'] 7344710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm successes = [ 7354710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm ('', NS(b=None)), 7364710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm ('-b', NS(b=[Exception])), 7374710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm ('-b -cx -b -cyz', NS(b=[Exception, 'x', Exception, 'yz'])), 7384710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm ] 7394710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm 7404710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm 7414710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylmclass TestOptionalsActionAppendConstWithDefault(ParserTestCase): 7424710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm """Tests the append_const action for an Optional""" 7434710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm 7444710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm argument_signatures = [ 7454710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm Sig('-b', action='append_const', const=Exception, default=['X']), 7464710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm Sig('-c', action='append', dest='b'), 7474710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm ] 7484710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm failures = ['a', '-c', 'a -c', '-bx', '-b x'] 7494710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm successes = [ 7504710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm ('', NS(b=['X'])), 7514710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm ('-b', NS(b=['X', Exception])), 7524710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm ('-b -cx -b -cyz', NS(b=['X', Exception, 'x', Exception, 'yz'])), 7534710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm ] 7544710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm 7554710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm 7564710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylmclass TestOptionalsActionCount(ParserTestCase): 7574710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm """Tests the count action for an Optional""" 7584710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm 7594710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm argument_signatures = [Sig('-x', action='count')] 7604710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm failures = ['a', '-x a', '-x b', '-x a -x b'] 7614710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm successes = [ 7624710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm ('', NS(x=None)), 7634710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm ('-x', NS(x=1)), 7644710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm ] 7654710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm 7664710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm 7674710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm# ================ 7684710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm# Positional tests 7694710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm# ================ 7704710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm 7714710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylmclass TestPositionalsNargsNone(ParserTestCase): 7724710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm """Test a Positional that doesn't specify nargs""" 7734710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm 7744710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm argument_signatures = [Sig('foo')] 7754710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm failures = ['', '-x', 'a b'] 7764710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm successes = [ 7774710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm ('a', NS(foo='a')), 7784710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm ] 7794710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm 7804710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm 7814710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylmclass TestPositionalsNargs1(ParserTestCase): 7824710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm """Test a Positional that specifies an nargs of 1""" 7834710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm 7844710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm argument_signatures = [Sig('foo', nargs=1)] 7854710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm failures = ['', '-x', 'a b'] 7864710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm successes = [ 7874710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm ('a', NS(foo=['a'])), 7884710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm ] 7894710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm 7904710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm 7914710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylmclass TestPositionalsNargs2(ParserTestCase): 7924710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm """Test a Positional that specifies an nargs of 2""" 7934710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm 7944710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm argument_signatures = [Sig('foo', nargs=2)] 7954710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm failures = ['', 'a', '-x', 'a b c'] 7964710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm successes = [ 7974710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm ('a b', NS(foo=['a', 'b'])), 7984710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm ] 7994710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm 8004710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm 8014710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylmclass TestPositionalsNargsZeroOrMore(ParserTestCase): 8024710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm """Test a Positional that specifies unlimited nargs""" 8034710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm 8044710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm argument_signatures = [Sig('foo', nargs='*')] 8054710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm failures = ['-x'] 8064710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm successes = [ 8074710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm ('', NS(foo=[])), 8084710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm ('a', NS(foo=['a'])), 8094710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm ('a b', NS(foo=['a', 'b'])), 8104710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm ] 8114710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm 8124710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm 8134710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylmclass TestPositionalsNargsZeroOrMoreDefault(ParserTestCase): 8144710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm """Test a Positional that specifies unlimited nargs and a default""" 8154710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm 8164710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm argument_signatures = [Sig('foo', nargs='*', default='bar')] 8174710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm failures = ['-x'] 8184710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm successes = [ 8194710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm ('', NS(foo='bar')), 8204710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm ('a', NS(foo=['a'])), 8214710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm ('a b', NS(foo=['a', 'b'])), 8224710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm ] 8234710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm 8244710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm 8254710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylmclass TestPositionalsNargsOneOrMore(ParserTestCase): 8264710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm """Test a Positional that specifies one or more nargs""" 8274710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm 8284710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm argument_signatures = [Sig('foo', nargs='+')] 8294710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm failures = ['', '-x'] 8304710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm successes = [ 8314710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm ('a', NS(foo=['a'])), 8324710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm ('a b', NS(foo=['a', 'b'])), 8334710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm ] 8344710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm 8354710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm 8364710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylmclass TestPositionalsNargsOptional(ParserTestCase): 8374710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm """Tests an Optional Positional""" 8384710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm 8394710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm argument_signatures = [Sig('foo', nargs='?')] 8404710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm failures = ['-x', 'a b'] 8414710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm successes = [ 8424710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm ('', NS(foo=None)), 8434710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm ('a', NS(foo='a')), 8444710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm ] 8454710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm 8464710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm 8474710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylmclass TestPositionalsNargsOptionalDefault(ParserTestCase): 8484710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm """Tests an Optional Positional with a default value""" 8494710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm 8504710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm argument_signatures = [Sig('foo', nargs='?', default=42)] 8514710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm failures = ['-x', 'a b'] 8524710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm successes = [ 8534710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm ('', NS(foo=42)), 8544710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm ('a', NS(foo='a')), 8554710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm ] 8564710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm 8574710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm 8584710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylmclass TestPositionalsNargsOptionalConvertedDefault(ParserTestCase): 8594710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm """Tests an Optional Positional with a default value 8604710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm that needs to be converted to the appropriate type. 8614710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm """ 8624710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm 8634710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm argument_signatures = [ 8644710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm Sig('foo', nargs='?', type=int, default='42'), 8654710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm ] 8664710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm failures = ['-x', 'a b', '1 2'] 8674710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm successes = [ 8684710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm ('', NS(foo=42)), 8694710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm ('1', NS(foo=1)), 8704710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm ] 8714710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm 8724710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm 8734710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylmclass TestPositionalsNargsNoneNone(ParserTestCase): 8744710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm """Test two Positionals that don't specify nargs""" 8754710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm 8764710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm argument_signatures = [Sig('foo'), Sig('bar')] 8774710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm failures = ['', '-x', 'a', 'a b c'] 8784710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm successes = [ 8794710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm ('a b', NS(foo='a', bar='b')), 8804710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm ] 8814710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm 8824710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm 8834710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylmclass TestPositionalsNargsNone1(ParserTestCase): 8844710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm """Test a Positional with no nargs followed by one with 1""" 8854710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm 8864710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm argument_signatures = [Sig('foo'), Sig('bar', nargs=1)] 8874710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm failures = ['', '--foo', 'a', 'a b c'] 8884710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm successes = [ 8894710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm ('a b', NS(foo='a', bar=['b'])), 8904710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm ] 8914710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm 8924710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm 8934710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylmclass TestPositionalsNargs2None(ParserTestCase): 8944710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm """Test a Positional with 2 nargs followed by one with none""" 8954710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm 8964710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm argument_signatures = [Sig('foo', nargs=2), Sig('bar')] 8974710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm failures = ['', '--foo', 'a', 'a b', 'a b c d'] 8984710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm successes = [ 8994710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm ('a b c', NS(foo=['a', 'b'], bar='c')), 9004710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm ] 9014710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm 9024710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm 9034710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylmclass TestPositionalsNargsNoneZeroOrMore(ParserTestCase): 9044710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm """Test a Positional with no nargs followed by one with unlimited""" 9054710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm 9064710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm argument_signatures = [Sig('foo'), Sig('bar', nargs='*')] 9074710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm failures = ['', '--foo'] 9084710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm successes = [ 9094710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm ('a', NS(foo='a', bar=[])), 9104710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm ('a b', NS(foo='a', bar=['b'])), 9114710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm ('a b c', NS(foo='a', bar=['b', 'c'])), 9124710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm ] 9134710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm 9144710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm 9154710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylmclass TestPositionalsNargsNoneOneOrMore(ParserTestCase): 9164710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm """Test a Positional with no nargs followed by one with one or more""" 9174710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm 9184710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm argument_signatures = [Sig('foo'), Sig('bar', nargs='+')] 9194710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm failures = ['', '--foo', 'a'] 9204710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm successes = [ 9214710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm ('a b', NS(foo='a', bar=['b'])), 9224710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm ('a b c', NS(foo='a', bar=['b', 'c'])), 9234710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm ] 9244710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm 9254710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm 9264710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylmclass TestPositionalsNargsNoneOptional(ParserTestCase): 9274710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm """Test a Positional with no nargs followed by one with an Optional""" 9284710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm 9294710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm argument_signatures = [Sig('foo'), Sig('bar', nargs='?')] 9304710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm failures = ['', '--foo', 'a b c'] 9314710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm successes = [ 9324710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm ('a', NS(foo='a', bar=None)), 9334710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm ('a b', NS(foo='a', bar='b')), 9344710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm ] 9354710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm 9364710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm 9374710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylmclass TestPositionalsNargsZeroOrMoreNone(ParserTestCase): 9384710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm """Test a Positional with unlimited nargs followed by one with none""" 9394710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm 9404710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm argument_signatures = [Sig('foo', nargs='*'), Sig('bar')] 9414710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm failures = ['', '--foo'] 9424710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm successes = [ 9434710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm ('a', NS(foo=[], bar='a')), 9444710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm ('a b', NS(foo=['a'], bar='b')), 9454710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm ('a b c', NS(foo=['a', 'b'], bar='c')), 9464710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm ] 9474710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm 9484710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm 9494710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylmclass TestPositionalsNargsOneOrMoreNone(ParserTestCase): 9504710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm """Test a Positional with one or more nargs followed by one with none""" 9514710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm 9524710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm argument_signatures = [Sig('foo', nargs='+'), Sig('bar')] 9534710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm failures = ['', '--foo', 'a'] 9544710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm successes = [ 9554710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm ('a b', NS(foo=['a'], bar='b')), 9564710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm ('a b c', NS(foo=['a', 'b'], bar='c')), 9574710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm ] 9584710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm 9594710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm 9604710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylmclass TestPositionalsNargsOptionalNone(ParserTestCase): 9614710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm """Test a Positional with an Optional nargs followed by one with none""" 9624710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm 9634710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm argument_signatures = [Sig('foo', nargs='?', default=42), Sig('bar')] 9644710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm failures = ['', '--foo', 'a b c'] 9654710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm successes = [ 9664710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm ('a', NS(foo=42, bar='a')), 9674710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm ('a b', NS(foo='a', bar='b')), 9684710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm ] 9694710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm 9704710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm 9714710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylmclass TestPositionalsNargs2ZeroOrMore(ParserTestCase): 9724710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm """Test a Positional with 2 nargs followed by one with unlimited""" 9734710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm 9744710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm argument_signatures = [Sig('foo', nargs=2), Sig('bar', nargs='*')] 9754710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm failures = ['', '--foo', 'a'] 9764710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm successes = [ 9774710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm ('a b', NS(foo=['a', 'b'], bar=[])), 9784710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm ('a b c', NS(foo=['a', 'b'], bar=['c'])), 9794710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm ] 9804710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm 9814710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm 9824710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylmclass TestPositionalsNargs2OneOrMore(ParserTestCase): 9834710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm """Test a Positional with 2 nargs followed by one with one or more""" 9844710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm 9854710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm argument_signatures = [Sig('foo', nargs=2), Sig('bar', nargs='+')] 9864710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm failures = ['', '--foo', 'a', 'a b'] 9874710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm successes = [ 9884710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm ('a b c', NS(foo=['a', 'b'], bar=['c'])), 9894710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm ] 9904710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm 9914710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm 9924710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylmclass TestPositionalsNargs2Optional(ParserTestCase): 9934710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm """Test a Positional with 2 nargs followed by one optional""" 9944710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm 9954710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm argument_signatures = [Sig('foo', nargs=2), Sig('bar', nargs='?')] 9964710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm failures = ['', '--foo', 'a', 'a b c d'] 9974710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm successes = [ 9984710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm ('a b', NS(foo=['a', 'b'], bar=None)), 9994710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm ('a b c', NS(foo=['a', 'b'], bar='c')), 10004710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm ] 10014710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm 10024710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm 10034710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylmclass TestPositionalsNargsZeroOrMore1(ParserTestCase): 10044710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm """Test a Positional with unlimited nargs followed by one with 1""" 10054710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm 10064710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm argument_signatures = [Sig('foo', nargs='*'), Sig('bar', nargs=1)] 10074710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm failures = ['', '--foo', ] 10084710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm successes = [ 10094710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm ('a', NS(foo=[], bar=['a'])), 10104710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm ('a b', NS(foo=['a'], bar=['b'])), 10114710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm ('a b c', NS(foo=['a', 'b'], bar=['c'])), 10124710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm ] 10134710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm 10144710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm 10154710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylmclass TestPositionalsNargsOneOrMore1(ParserTestCase): 10164710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm """Test a Positional with one or more nargs followed by one with 1""" 10174710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm 10184710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm argument_signatures = [Sig('foo', nargs='+'), Sig('bar', nargs=1)] 10194710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm failures = ['', '--foo', 'a'] 10204710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm successes = [ 10214710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm ('a b', NS(foo=['a'], bar=['b'])), 10224710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm ('a b c', NS(foo=['a', 'b'], bar=['c'])), 10234710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm ] 10244710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm 10254710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm 10264710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylmclass TestPositionalsNargsOptional1(ParserTestCase): 10274710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm """Test a Positional with an Optional nargs followed by one with 1""" 10284710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm 10294710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm argument_signatures = [Sig('foo', nargs='?'), Sig('bar', nargs=1)] 10304710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm failures = ['', '--foo', 'a b c'] 10314710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm successes = [ 10324710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm ('a', NS(foo=None, bar=['a'])), 10334710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm ('a b', NS(foo='a', bar=['b'])), 10344710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm ] 10354710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm 10364710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm 10374710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylmclass TestPositionalsNargsNoneZeroOrMore1(ParserTestCase): 10384710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm """Test three Positionals: no nargs, unlimited nargs and 1 nargs""" 10394710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm 10404710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm argument_signatures = [ 10414710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm Sig('foo'), 10424710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm Sig('bar', nargs='*'), 10434710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm Sig('baz', nargs=1), 10444710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm ] 10454710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm failures = ['', '--foo', 'a'] 10464710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm successes = [ 10474710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm ('a b', NS(foo='a', bar=[], baz=['b'])), 10484710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm ('a b c', NS(foo='a', bar=['b'], baz=['c'])), 10494710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm ] 10504710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm 10514710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm 10524710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylmclass TestPositionalsNargsNoneOneOrMore1(ParserTestCase): 10534710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm """Test three Positionals: no nargs, one or more nargs and 1 nargs""" 10544710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm 10554710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm argument_signatures = [ 10564710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm Sig('foo'), 10574710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm Sig('bar', nargs='+'), 10584710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm Sig('baz', nargs=1), 10594710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm ] 10604710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm failures = ['', '--foo', 'a', 'b'] 10614710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm successes = [ 10624710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm ('a b c', NS(foo='a', bar=['b'], baz=['c'])), 10634710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm ('a b c d', NS(foo='a', bar=['b', 'c'], baz=['d'])), 10644710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm ] 10654710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm 10664710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm 10674710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylmclass TestPositionalsNargsNoneOptional1(ParserTestCase): 10684710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm """Test three Positionals: no nargs, optional narg and 1 nargs""" 10694710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm 10704710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm argument_signatures = [ 10714710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm Sig('foo'), 10724710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm Sig('bar', nargs='?', default=0.625), 10734710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm Sig('baz', nargs=1), 10744710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm ] 10754710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm failures = ['', '--foo', 'a'] 10764710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm successes = [ 10774710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm ('a b', NS(foo='a', bar=0.625, baz=['b'])), 10784710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm ('a b c', NS(foo='a', bar='b', baz=['c'])), 10794710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm ] 10804710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm 10814710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm 10824710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylmclass TestPositionalsNargsOptionalOptional(ParserTestCase): 10834710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm """Test two optional nargs""" 10844710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm 10854710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm argument_signatures = [ 10864710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm Sig('foo', nargs='?'), 10874710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm Sig('bar', nargs='?', default=42), 10884710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm ] 10894710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm failures = ['--foo', 'a b c'] 10904710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm successes = [ 10914710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm ('', NS(foo=None, bar=42)), 10924710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm ('a', NS(foo='a', bar=42)), 10934710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm ('a b', NS(foo='a', bar='b')), 10944710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm ] 10954710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm 10964710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm 10974710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylmclass TestPositionalsNargsOptionalZeroOrMore(ParserTestCase): 10984710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm """Test an Optional narg followed by unlimited nargs""" 10994710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm 11004710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm argument_signatures = [Sig('foo', nargs='?'), Sig('bar', nargs='*')] 11014710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm failures = ['--foo'] 11024710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm successes = [ 11034710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm ('', NS(foo=None, bar=[])), 11044710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm ('a', NS(foo='a', bar=[])), 11054710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm ('a b', NS(foo='a', bar=['b'])), 11064710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm ('a b c', NS(foo='a', bar=['b', 'c'])), 11074710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm ] 11084710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm 11094710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm 11104710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylmclass TestPositionalsNargsOptionalOneOrMore(ParserTestCase): 11114710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm """Test an Optional narg followed by one or more nargs""" 11124710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm 11134710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm argument_signatures = [Sig('foo', nargs='?'), Sig('bar', nargs='+')] 11144710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm failures = ['', '--foo'] 11154710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm successes = [ 11164710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm ('a', NS(foo=None, bar=['a'])), 11174710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm ('a b', NS(foo='a', bar=['b'])), 11184710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm ('a b c', NS(foo='a', bar=['b', 'c'])), 11194710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm ] 11204710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm 11214710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm 11224710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylmclass TestPositionalsChoicesString(ParserTestCase): 11234710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm """Test a set of single-character choices""" 11244710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm 11254710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm argument_signatures = [Sig('spam', choices=set('abcdefg'))] 11264710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm failures = ['', '--foo', 'h', '42', 'ef'] 11274710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm successes = [ 11284710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm ('a', NS(spam='a')), 11294710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm ('g', NS(spam='g')), 11304710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm ] 11314710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm 11324710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm 11334710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylmclass TestPositionalsChoicesInt(ParserTestCase): 11344710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm """Test a set of integer choices""" 11354710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm 11364710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm argument_signatures = [Sig('spam', type=int, choices=range(20))] 11374710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm failures = ['', '--foo', 'h', '42', 'ef'] 11384710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm successes = [ 11394710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm ('4', NS(spam=4)), 11404710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm ('15', NS(spam=15)), 11414710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm ] 11424710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm 11434710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm 11444710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylmclass TestPositionalsActionAppend(ParserTestCase): 11454710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm """Test the 'append' action""" 11464710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm 11474710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm argument_signatures = [ 11484710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm Sig('spam', action='append'), 11494710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm Sig('spam', action='append', nargs=2), 11504710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm ] 11514710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm failures = ['', '--foo', 'a', 'a b', 'a b c d'] 11524710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm successes = [ 11534710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm ('a b c', NS(spam=['a', ['b', 'c']])), 11544710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm ] 11554710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm 11564710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm# ======================================== 11574710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm# Combined optionals and positionals tests 11584710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm# ======================================== 11594710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm 11604710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylmclass TestOptionalsNumericAndPositionals(ParserTestCase): 11614710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm """Tests negative number args when numeric options are present""" 11624710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm 11634710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm argument_signatures = [ 11644710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm Sig('x', nargs='?'), 11654710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm Sig('-4', dest='y', action='store_true'), 11664710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm ] 11674710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm failures = ['-2', '-315'] 11684710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm successes = [ 11694710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm ('', NS(x=None, y=False)), 11704710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm ('a', NS(x='a', y=False)), 11714710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm ('-4', NS(x=None, y=True)), 11724710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm ('-4 a', NS(x='a', y=True)), 11734710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm ] 11744710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm 11754710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm 11764710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylmclass TestOptionalsAlmostNumericAndPositionals(ParserTestCase): 11774710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm """Tests negative number args when almost numeric options are present""" 11784710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm 11794710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm argument_signatures = [ 11804710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm Sig('x', nargs='?'), 11814710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm Sig('-k4', dest='y', action='store_true'), 11824710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm ] 11834710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm failures = ['-k3'] 11844710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm successes = [ 11854710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm ('', NS(x=None, y=False)), 11864710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm ('-2', NS(x='-2', y=False)), 11874710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm ('a', NS(x='a', y=False)), 11884710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm ('-k4', NS(x=None, y=True)), 11894710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm ('-k4 a', NS(x='a', y=True)), 11904710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm ] 11914710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm 11924710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm 11934710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylmclass TestEmptyAndSpaceContainingArguments(ParserTestCase): 11944710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm 11954710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm argument_signatures = [ 11964710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm Sig('x', nargs='?'), 11974710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm Sig('-y', '--yyy', dest='y'), 11984710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm ] 11994710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm failures = ['-y'] 12004710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm successes = [ 12014710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm ([''], NS(x='', y=None)), 12024710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm (['a badger'], NS(x='a badger', y=None)), 12034710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm (['-a badger'], NS(x='-a badger', y=None)), 12044710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm (['-y', ''], NS(x=None, y='')), 12054710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm (['-y', 'a badger'], NS(x=None, y='a badger')), 12064710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm (['-y', '-a badger'], NS(x=None, y='-a badger')), 12074710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm (['--yyy=a badger'], NS(x=None, y='a badger')), 12084710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm (['--yyy=-a badger'], NS(x=None, y='-a badger')), 12094710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm ] 12104710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm 12114710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm 12124710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylmclass TestPrefixCharacterOnlyArguments(ParserTestCase): 12134710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm 12144710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm parser_signature = Sig(prefix_chars='-+') 12154710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm argument_signatures = [ 12164710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm Sig('-', dest='x', nargs='?', const='badger'), 12174710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm Sig('+', dest='y', type=int, default=42), 12184710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm Sig('-+-', dest='z', action='store_true'), 12194710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm ] 12204710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm failures = ['-y', '+ -'] 12214710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm successes = [ 12224710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm ('', NS(x=None, y=42, z=False)), 12234710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm ('-', NS(x='badger', y=42, z=False)), 12244710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm ('- X', NS(x='X', y=42, z=False)), 12254710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm ('+ -3', NS(x=None, y=-3, z=False)), 12264710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm ('-+-', NS(x=None, y=42, z=True)), 12274710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm ('- ===', NS(x='===', y=42, z=False)), 12284710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm ] 12294710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm 12304710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm 12314710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylmclass TestNargsZeroOrMore(ParserTestCase): 12324710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm """Tests specifying an args for an Optional that accepts zero or more""" 12334710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm 12344710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm argument_signatures = [Sig('-x', nargs='*'), Sig('y', nargs='*')] 12354710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm failures = [] 12364710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm successes = [ 12374710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm ('', NS(x=None, y=[])), 12384710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm ('-x', NS(x=[], y=[])), 12394710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm ('-x a', NS(x=['a'], y=[])), 12404710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm ('-x a -- b', NS(x=['a'], y=['b'])), 12414710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm ('a', NS(x=None, y=['a'])), 12424710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm ('a -x', NS(x=[], y=['a'])), 12434710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm ('a -x b', NS(x=['b'], y=['a'])), 12444710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm ] 12454710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm 12464710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm 12474710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylmclass TestNargsRemainder(ParserTestCase): 12484710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm """Tests specifying a positional with nargs=REMAINDER""" 12494710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm 12504710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm argument_signatures = [Sig('x'), Sig('y', nargs='...'), Sig('-z')] 12514710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm failures = ['', '-z', '-z Z'] 12524710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm successes = [ 12534710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm ('X', NS(x='X', y=[], z=None)), 12544710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm ('-z Z X', NS(x='X', y=[], z='Z')), 12554710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm ('X A B -z Z', NS(x='X', y=['A', 'B', '-z', 'Z'], z=None)), 12564710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm ('X Y --foo', NS(x='X', y=['Y', '--foo'], z=None)), 12574710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm ] 12584710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm 12594710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm 12604710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylmclass TestOptionLike(ParserTestCase): 12614710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm """Tests options that may or may not be arguments""" 12624710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm 12634710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm argument_signatures = [ 12644710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm Sig('-x', type=float), 12654710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm Sig('-3', type=float, dest='y'), 12664710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm Sig('z', nargs='*'), 12674710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm ] 12684710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm failures = ['-x', '-y2.5', '-xa', '-x -a', 12694710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm '-x -3', '-x -3.5', '-3 -3.5', 12704710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm '-x -2.5', '-x -2.5 a', '-3 -.5', 12714710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm 'a x -1', '-x -1 a', '-3 -1 a'] 12724710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm successes = [ 12734710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm ('', NS(x=None, y=None, z=[])), 12744710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm ('-x 2.5', NS(x=2.5, y=None, z=[])), 12754710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm ('-x 2.5 a', NS(x=2.5, y=None, z=['a'])), 12764710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm ('-3.5', NS(x=None, y=0.5, z=[])), 12774710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm ('-3-.5', NS(x=None, y=-0.5, z=[])), 12784710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm ('-3 .5', NS(x=None, y=0.5, z=[])), 12794710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm ('a -3.5', NS(x=None, y=0.5, z=['a'])), 12804710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm ('a', NS(x=None, y=None, z=['a'])), 12814710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm ('a -x 1', NS(x=1.0, y=None, z=['a'])), 12824710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm ('-x 1 a', NS(x=1.0, y=None, z=['a'])), 12834710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm ('-3 1 a', NS(x=None, y=1.0, z=['a'])), 12844710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm ] 12854710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm 12864710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm 12874710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylmclass TestDefaultSuppress(ParserTestCase): 12884710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm """Test actions with suppressed defaults""" 12894710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm 12904710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm argument_signatures = [ 12914710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm Sig('foo', nargs='?', default=argparse.SUPPRESS), 12924710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm Sig('bar', nargs='*', default=argparse.SUPPRESS), 12934710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm Sig('--baz', action='store_true', default=argparse.SUPPRESS), 12944710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm ] 12954710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm failures = ['-x'] 12964710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm successes = [ 12974710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm ('', NS()), 12984710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm ('a', NS(foo='a')), 12994710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm ('a b', NS(foo='a', bar=['b'])), 13004710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm ('--baz', NS(baz=True)), 13014710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm ('a --baz', NS(foo='a', baz=True)), 13024710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm ('--baz a b', NS(foo='a', bar=['b'], baz=True)), 13034710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm ] 13044710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm 13054710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm 13064710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylmclass TestParserDefaultSuppress(ParserTestCase): 13074710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm """Test actions with a parser-level default of SUPPRESS""" 13084710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm 13094710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm parser_signature = Sig(argument_default=argparse.SUPPRESS) 13104710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm argument_signatures = [ 13114710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm Sig('foo', nargs='?'), 13124710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm Sig('bar', nargs='*'), 13134710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm Sig('--baz', action='store_true'), 13144710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm ] 13154710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm failures = ['-x'] 13164710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm successes = [ 13174710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm ('', NS()), 13184710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm ('a', NS(foo='a')), 13194710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm ('a b', NS(foo='a', bar=['b'])), 13204710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm ('--baz', NS(baz=True)), 13214710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm ('a --baz', NS(foo='a', baz=True)), 13224710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm ('--baz a b', NS(foo='a', bar=['b'], baz=True)), 13234710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm ] 13244710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm 13254710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm 13264710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylmclass TestParserDefault42(ParserTestCase): 13274710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm """Test actions with a parser-level default of 42""" 13284710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm 13294710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm parser_signature = Sig(argument_default=42, version='1.0') 13304710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm argument_signatures = [ 13314710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm Sig('foo', nargs='?'), 13324710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm Sig('bar', nargs='*'), 13334710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm Sig('--baz', action='store_true'), 13344710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm ] 13354710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm failures = ['-x'] 13364710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm successes = [ 13374710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm ('', NS(foo=42, bar=42, baz=42)), 13384710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm ('a', NS(foo='a', bar=42, baz=42)), 13394710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm ('a b', NS(foo='a', bar=['b'], baz=42)), 13404710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm ('--baz', NS(foo=42, bar=42, baz=True)), 13414710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm ('a --baz', NS(foo='a', bar=42, baz=True)), 13424710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm ('--baz a b', NS(foo='a', bar=['b'], baz=True)), 13434710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm ] 13444710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm 13454710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm 13464710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylmclass TestArgumentsFromFile(TempDirMixin, ParserTestCase): 13474710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm """Test reading arguments from a file""" 13484710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm 13494710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm def setUp(self): 13504710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm super(TestArgumentsFromFile, self).setUp() 13514710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm file_texts = [ 13524710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm ('hello', 'hello world!\n'), 13534710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm ('recursive', '-a\n' 13544710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm 'A\n' 13554710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm '@hello'), 13564710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm ('invalid', '@no-such-path\n'), 13574710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm ] 13584710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm for path, text in file_texts: 13594710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm file = open(path, 'w') 13604710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm file.write(text) 13614710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm file.close() 13624710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm 13634710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm parser_signature = Sig(fromfile_prefix_chars='@') 13644710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm argument_signatures = [ 13654710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm Sig('-a'), 13664710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm Sig('x'), 13674710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm Sig('y', nargs='+'), 13684710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm ] 13694710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm failures = ['', '-b', 'X', '@invalid', '@missing'] 13704710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm successes = [ 13714710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm ('X Y', NS(a=None, x='X', y=['Y'])), 13724710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm ('X -a A Y Z', NS(a='A', x='X', y=['Y', 'Z'])), 13734710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm ('@hello X', NS(a=None, x='hello world!', y=['X'])), 13744710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm ('X @hello', NS(a=None, x='X', y=['hello world!'])), 13754710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm ('-a B @recursive Y Z', NS(a='A', x='hello world!', y=['Y', 'Z'])), 13764710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm ('X @recursive Z -a B', NS(a='B', x='X', y=['hello world!', 'Z'])), 13774710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm ] 13784710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm 13794710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm 13804710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylmclass TestArgumentsFromFileConverter(TempDirMixin, ParserTestCase): 13814710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm """Test reading arguments from a file""" 13824710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm 13834710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm def setUp(self): 13844710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm super(TestArgumentsFromFileConverter, self).setUp() 13854710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm file_texts = [ 13864710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm ('hello', 'hello world!\n'), 13874710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm ] 13884710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm for path, text in file_texts: 13894710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm file = open(path, 'w') 13904710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm file.write(text) 13914710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm file.close() 13924710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm 13934710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm class FromFileConverterArgumentParser(ErrorRaisingArgumentParser): 13944710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm 13954710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm def convert_arg_line_to_args(self, arg_line): 13964710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm for arg in arg_line.split(): 13974710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm if not arg.strip(): 13984710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm continue 13994710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm yield arg 14004710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm parser_class = FromFileConverterArgumentParser 14014710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm parser_signature = Sig(fromfile_prefix_chars='@') 14024710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm argument_signatures = [ 14034710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm Sig('y', nargs='+'), 14044710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm ] 14054710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm failures = [] 14064710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm successes = [ 14074710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm ('@hello X', NS(y=['hello', 'world!', 'X'])), 14084710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm ] 14094710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm 14104710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm 14114710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm# ===================== 14124710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm# Type conversion tests 14134710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm# ===================== 14144710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm 14154710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylmclass TestFileTypeRepr(TestCase): 14164710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm 14174710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm def test_r(self): 14184710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm type = argparse.FileType('r') 14194710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm self.assertEqual("FileType('r')", repr(type)) 14204710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm 14214710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm def test_wb_1(self): 14224710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm type = argparse.FileType('wb', 1) 14234710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm self.assertEqual("FileType('wb', 1)", repr(type)) 14244710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm 14254710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm 14264710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylmclass RFile(object): 14274710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm seen = {} 14284710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm 14294710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm def __init__(self, name): 14304710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm self.name = name 14314710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm 14324710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm __hash__ = None 14334710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm 14344710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm def __eq__(self, other): 14354710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm if other in self.seen: 14364710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm text = self.seen[other] 14374710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm else: 14384710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm text = self.seen[other] = other.read() 14394710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm other.close() 14404710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm if not isinstance(text, str): 14414710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm text = text.decode('ascii') 14424710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm return self.name == other.name == text 14434710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm 14444710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm 14454710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylmclass TestFileTypeR(TempDirMixin, ParserTestCase): 14464710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm """Test the FileType option/argument type for reading files""" 14474710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm 14484710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm def setUp(self): 14494710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm super(TestFileTypeR, self).setUp() 14504710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm for file_name in ['foo', 'bar']: 14514710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm file = open(os.path.join(self.temp_dir, file_name), 'w') 14524710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm file.write(file_name) 14534710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm file.close() 14544710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm self.create_readonly_file('readonly') 14554710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm 14564710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm argument_signatures = [ 14574710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm Sig('-x', type=argparse.FileType()), 14584710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm Sig('spam', type=argparse.FileType('r')), 14594710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm ] 14604710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm failures = ['-x', '-x bar', 'non-existent-file.txt'] 14614710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm successes = [ 14624710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm ('foo', NS(x=None, spam=RFile('foo'))), 14634710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm ('-x foo bar', NS(x=RFile('foo'), spam=RFile('bar'))), 14644710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm ('bar -x foo', NS(x=RFile('foo'), spam=RFile('bar'))), 14654710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm ('-x - -', NS(x=sys.stdin, spam=sys.stdin)), 14664710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm ('readonly', NS(x=None, spam=RFile('readonly'))), 14674710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm ] 14684710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm 14694710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm 14704710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylmclass TestFileTypeRB(TempDirMixin, ParserTestCase): 14714710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm """Test the FileType option/argument type for reading files""" 14724710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm 14734710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm def setUp(self): 14744710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm super(TestFileTypeRB, self).setUp() 14754710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm for file_name in ['foo', 'bar']: 14764710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm file = open(os.path.join(self.temp_dir, file_name), 'w') 14774710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm file.write(file_name) 14784710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm file.close() 14794710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm 14804710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm argument_signatures = [ 14814710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm Sig('-x', type=argparse.FileType('rb')), 14824710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm Sig('spam', type=argparse.FileType('rb')), 14834710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm ] 14844710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm failures = ['-x', '-x bar'] 14854710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm successes = [ 14864710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm ('foo', NS(x=None, spam=RFile('foo'))), 14874710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm ('-x foo bar', NS(x=RFile('foo'), spam=RFile('bar'))), 14884710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm ('bar -x foo', NS(x=RFile('foo'), spam=RFile('bar'))), 14894710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm ('-x - -', NS(x=sys.stdin, spam=sys.stdin)), 14904710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm ] 14914710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm 14924710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm 14934710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylmclass WFile(object): 14944710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm seen = set() 14954710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm 14964710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm def __init__(self, name): 14974710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm self.name = name 14984710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm 14994710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm __hash__ = None 15004710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm 15014710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm def __eq__(self, other): 15024710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm if other not in self.seen: 15034710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm text = 'Check that file is writable.' 15044710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm if 'b' in other.mode: 15054710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm text = text.encode('ascii') 15064710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm other.write(text) 15074710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm other.close() 15084710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm self.seen.add(other) 15094710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm return self.name == other.name 15104710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm 15114710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm 15124710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylmclass TestFileTypeW(TempDirMixin, ParserTestCase): 15134710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm """Test the FileType option/argument type for writing files""" 15144710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm 15154710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm def setUp(self): 15164710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm super(TestFileTypeW, self).setUp() 15174710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm self.create_readonly_file('readonly') 15184710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm 15194710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm argument_signatures = [ 15204710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm Sig('-x', type=argparse.FileType('w')), 15214710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm Sig('spam', type=argparse.FileType('w')), 15224710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm ] 15234710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm failures = ['-x', '-x bar'] 15244710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm failures = ['-x', '-x bar', 'readonly'] 15254710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm successes = [ 15264710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm ('foo', NS(x=None, spam=WFile('foo'))), 15274710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm ('-x foo bar', NS(x=WFile('foo'), spam=WFile('bar'))), 15284710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm ('bar -x foo', NS(x=WFile('foo'), spam=WFile('bar'))), 15294710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm ('-x - -', NS(x=sys.stdout, spam=sys.stdout)), 15304710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm ] 15314710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm 15324710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm 15334710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylmclass TestFileTypeWB(TempDirMixin, ParserTestCase): 15344710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm 15354710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm argument_signatures = [ 15364710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm Sig('-x', type=argparse.FileType('wb')), 15374710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm Sig('spam', type=argparse.FileType('wb')), 15384710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm ] 15394710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm failures = ['-x', '-x bar'] 15404710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm successes = [ 15414710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm ('foo', NS(x=None, spam=WFile('foo'))), 15424710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm ('-x foo bar', NS(x=WFile('foo'), spam=WFile('bar'))), 15434710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm ('bar -x foo', NS(x=WFile('foo'), spam=WFile('bar'))), 15444710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm ('-x - -', NS(x=sys.stdout, spam=sys.stdout)), 15454710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm ] 15464710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm 15474710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm 15484710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylmclass TestTypeCallable(ParserTestCase): 15494710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm """Test some callables as option/argument types""" 15504710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm 15514710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm argument_signatures = [ 15524710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm Sig('--eggs', type=complex), 15534710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm Sig('spam', type=float), 15544710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm ] 15554710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm failures = ['a', '42j', '--eggs a', '--eggs 2i'] 15564710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm successes = [ 15574710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm ('--eggs=42 42', NS(eggs=42, spam=42.0)), 15584710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm ('--eggs 2j -- -1.5', NS(eggs=2j, spam=-1.5)), 15594710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm ('1024.675', NS(eggs=None, spam=1024.675)), 15604710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm ] 15614710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm 15624710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm 15634710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylmclass TestTypeUserDefined(ParserTestCase): 15644710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm """Test a user-defined option/argument type""" 15654710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm 15664710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm class MyType(TestCase): 15674710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm 15684710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm def __init__(self, value): 15694710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm self.value = value 15704710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm 15714710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm __hash__ = None 15724710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm 15734710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm def __eq__(self, other): 15744710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm return (type(self), self.value) == (type(other), other.value) 15754710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm 15764710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm argument_signatures = [ 15774710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm Sig('-x', type=MyType), 15784710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm Sig('spam', type=MyType), 15794710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm ] 15804710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm failures = [] 15814710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm successes = [ 15824710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm ('a -x b', NS(x=MyType('b'), spam=MyType('a'))), 15834710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm ('-xf g', NS(x=MyType('f'), spam=MyType('g'))), 15844710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm ] 15854710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm 15864710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm 15874710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylmclass TestTypeClassicClass(ParserTestCase): 15884710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm """Test a classic class type""" 15894710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm 15904710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm class C: 15914710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm 15924710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm def __init__(self, value): 15934710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm self.value = value 15944710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm 15954710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm __hash__ = None 15964710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm 15974710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm def __eq__(self, other): 15984710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm return (type(self), self.value) == (type(other), other.value) 15994710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm 16004710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm argument_signatures = [ 16014710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm Sig('-x', type=C), 16024710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm Sig('spam', type=C), 16034710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm ] 16044710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm failures = [] 16054710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm successes = [ 16064710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm ('a -x b', NS(x=C('b'), spam=C('a'))), 16074710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm ('-xf g', NS(x=C('f'), spam=C('g'))), 16084710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm ] 16094710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm 16104710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm 16114710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylmclass TestTypeRegistration(TestCase): 16124710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm """Test a user-defined type by registering it""" 16134710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm 16144710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm def test(self): 16154710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm 16164710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm def get_my_type(string): 16174710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm return 'my_type{%s}' % string 16184710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm 16194710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm parser = argparse.ArgumentParser() 16204710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm parser.register('type', 'my_type', get_my_type) 16214710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm parser.add_argument('-x', type='my_type') 16224710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm parser.add_argument('y', type='my_type') 16234710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm 16244710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm self.assertEqual(parser.parse_args('1'.split()), 16254710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm NS(x=None, y='my_type{1}')) 16264710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm self.assertEqual(parser.parse_args('-x 1 42'.split()), 16274710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm NS(x='my_type{1}', y='my_type{42}')) 16284710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm 16294710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm 16304710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm# ============ 16314710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm# Action tests 16324710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm# ============ 16334710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm 16344710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylmclass TestActionUserDefined(ParserTestCase): 16354710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm """Test a user-defined option/argument action""" 16364710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm 16374710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm class OptionalAction(argparse.Action): 16384710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm 16394710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm def __call__(self, parser, namespace, value, option_string=None): 16404710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm try: 16414710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm # check destination and option string 16424710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm assert self.dest == 'spam', 'dest: %s' % self.dest 16434710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm assert option_string == '-s', 'flag: %s' % option_string 16444710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm # when option is before argument, badger=2, and when 16454710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm # option is after argument, badger=<whatever was set> 16464710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm expected_ns = NS(spam=0.25) 16474710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm if value in [0.125, 0.625]: 16484710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm expected_ns.badger = 2 16494710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm elif value in [2.0]: 16504710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm expected_ns.badger = 84 16514710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm else: 16524710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm raise AssertionError('value: %s' % value) 16534710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm assert expected_ns == namespace, ('expected %s, got %s' % 16544710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm (expected_ns, namespace)) 16554710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm except AssertionError: 16564710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm e = sys.exc_info()[1] 16574710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm raise ArgumentParserError('opt_action failed: %s' % e) 16584710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm setattr(namespace, 'spam', value) 16594710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm 16604710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm class PositionalAction(argparse.Action): 16614710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm 16624710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm def __call__(self, parser, namespace, value, option_string=None): 16634710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm try: 16644710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm assert option_string is None, ('option_string: %s' % 16654710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm option_string) 16664710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm # check destination 16674710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm assert self.dest == 'badger', 'dest: %s' % self.dest 16684710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm # when argument is before option, spam=0.25, and when 16694710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm # option is after argument, spam=<whatever was set> 16704710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm expected_ns = NS(badger=2) 16714710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm if value in [42, 84]: 16724710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm expected_ns.spam = 0.25 16734710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm elif value in [1]: 16744710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm expected_ns.spam = 0.625 16754710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm elif value in [2]: 16764710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm expected_ns.spam = 0.125 16774710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm else: 16784710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm raise AssertionError('value: %s' % value) 16794710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm assert expected_ns == namespace, ('expected %s, got %s' % 16804710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm (expected_ns, namespace)) 16814710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm except AssertionError: 16824710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm e = sys.exc_info()[1] 16834710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm raise ArgumentParserError('arg_action failed: %s' % e) 16844710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm setattr(namespace, 'badger', value) 16854710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm 16864710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm argument_signatures = [ 16874710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm Sig('-s', dest='spam', action=OptionalAction, 16884710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm type=float, default=0.25), 16894710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm Sig('badger', action=PositionalAction, 16904710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm type=int, nargs='?', default=2), 16914710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm ] 16924710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm failures = [] 16934710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm successes = [ 16944710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm ('-s0.125', NS(spam=0.125, badger=2)), 16954710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm ('42', NS(spam=0.25, badger=42)), 16964710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm ('-s 0.625 1', NS(spam=0.625, badger=1)), 16974710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm ('84 -s2', NS(spam=2.0, badger=84)), 16984710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm ] 16994710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm 17004710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm 17014710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylmclass TestActionRegistration(TestCase): 17024710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm """Test a user-defined action supplied by registering it""" 17034710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm 17044710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm class MyAction(argparse.Action): 17054710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm 17064710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm def __call__(self, parser, namespace, values, option_string=None): 17074710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm setattr(namespace, self.dest, 'foo[%s]' % values) 17084710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm 17094710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm def test(self): 17104710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm 17114710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm parser = argparse.ArgumentParser() 17124710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm parser.register('action', 'my_action', self.MyAction) 17134710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm parser.add_argument('badger', action='my_action') 17144710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm 17154710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm self.assertEqual(parser.parse_args(['1']), NS(badger='foo[1]')) 17164710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm self.assertEqual(parser.parse_args(['42']), NS(badger='foo[42]')) 17174710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm 17184710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm 17194710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm# ================ 17204710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm# Subparsers tests 17214710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm# ================ 17224710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm 17234710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylmclass TestAddSubparsers(TestCase): 17244710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm """Test the add_subparsers method""" 17254710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm 17264710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm def assertArgumentParserError(self, *args, **kwargs): 17274710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm self.assertRaises(ArgumentParserError, *args, **kwargs) 17284710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm 17294710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm def _get_parser(self, subparser_help=False, prefix_chars=None): 17304710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm # create a parser with a subparsers argument 17314710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm if prefix_chars: 17324710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm parser = ErrorRaisingArgumentParser( 17334710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm prog='PROG', description='main description', prefix_chars=prefix_chars) 17344710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm parser.add_argument( 17354710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm prefix_chars[0] * 2 + 'foo', action='store_true', help='foo help') 17364710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm else: 17374710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm parser = ErrorRaisingArgumentParser( 17384710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm prog='PROG', description='main description') 17394710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm parser.add_argument( 17404710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm '--foo', action='store_true', help='foo help') 17414710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm parser.add_argument( 17424710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm 'bar', type=float, help='bar help') 17434710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm 17444710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm # check that only one subparsers argument can be added 17454710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm subparsers = parser.add_subparsers(help='command help') 17464710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm self.assertArgumentParserError(parser.add_subparsers) 17474710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm 17484710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm # add first sub-parser 17494710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm parser1_kwargs = dict(description='1 description') 17504710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm if subparser_help: 17514710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm parser1_kwargs['help'] = '1 help' 17524710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm parser1 = subparsers.add_parser('1', **parser1_kwargs) 17534710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm parser1.add_argument('-w', type=int, help='w help') 17544710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm parser1.add_argument('x', choices='abc', help='x help') 17554710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm 17564710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm # add second sub-parser 17574710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm parser2_kwargs = dict(description='2 description') 17584710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm if subparser_help: 17594710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm parser2_kwargs['help'] = '2 help' 17604710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm parser2 = subparsers.add_parser('2', **parser2_kwargs) 17614710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm parser2.add_argument('-y', choices='123', help='y help') 17624710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm parser2.add_argument('z', type=complex, nargs='*', help='z help') 17634710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm 17644710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm # return the main parser 17654710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm return parser 17664710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm 17674710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm def setUp(self): 17684710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm super(TestAddSubparsers, self).setUp() 17694710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm self.parser = self._get_parser() 17704710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm self.command_help_parser = self._get_parser(subparser_help=True) 17714710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm 17724710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm def test_parse_args_failures(self): 17734710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm # check some failure cases: 17744710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm for args_str in ['', 'a', 'a a', '0.5 a', '0.5 1', 17754710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm '0.5 1 -y', '0.5 2 -w']: 17764710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm args = args_str.split() 17774710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm self.assertArgumentParserError(self.parser.parse_args, args) 17784710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm 17794710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm def test_parse_args(self): 17804710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm # check some non-failure cases: 17814710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm self.assertEqual( 17824710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm self.parser.parse_args('0.5 1 b -w 7'.split()), 17834710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm NS(foo=False, bar=0.5, w=7, x='b'), 17844710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm ) 17854710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm self.assertEqual( 17864710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm self.parser.parse_args('0.25 --foo 2 -y 2 3j -- -1j'.split()), 17874710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm NS(foo=True, bar=0.25, y='2', z=[3j, -1j]), 17884710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm ) 17894710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm self.assertEqual( 17904710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm self.parser.parse_args('--foo 0.125 1 c'.split()), 17914710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm NS(foo=True, bar=0.125, w=None, x='c'), 17924710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm ) 17934710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm 17944710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm def test_parse_known_args(self): 17954710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm self.assertEqual( 17964710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm self.parser.parse_known_args('0.5 1 b -w 7'.split()), 17974710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm (NS(foo=False, bar=0.5, w=7, x='b'), []), 17984710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm ) 17994710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm self.assertEqual( 18004710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm self.parser.parse_known_args('0.5 -p 1 b -w 7'.split()), 18014710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm (NS(foo=False, bar=0.5, w=7, x='b'), ['-p']), 18024710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm ) 18034710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm self.assertEqual( 18044710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm self.parser.parse_known_args('0.5 1 b -w 7 -p'.split()), 18054710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm (NS(foo=False, bar=0.5, w=7, x='b'), ['-p']), 18064710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm ) 18074710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm self.assertEqual( 18084710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm self.parser.parse_known_args('0.5 1 b -q -rs -w 7'.split()), 18094710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm (NS(foo=False, bar=0.5, w=7, x='b'), ['-q', '-rs']), 18104710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm ) 18114710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm self.assertEqual( 18124710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm self.parser.parse_known_args('0.5 -W 1 b -X Y -w 7 Z'.split()), 18134710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm (NS(foo=False, bar=0.5, w=7, x='b'), ['-W', '-X', 'Y', 'Z']), 18144710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm ) 18154710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm 18164710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm def test_dest(self): 18174710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm parser = ErrorRaisingArgumentParser() 18184710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm parser.add_argument('--foo', action='store_true') 18194710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm subparsers = parser.add_subparsers(dest='bar') 18204710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm parser1 = subparsers.add_parser('1') 18214710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm parser1.add_argument('baz') 18224710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm self.assertEqual(NS(foo=False, bar='1', baz='2'), 18234710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm parser.parse_args('1 2'.split())) 18244710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm 18254710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm def test_help(self): 18264710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm self.assertEqual(self.parser.format_usage(), 18274710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm 'usage: PROG [-h] [--foo] bar {1,2} ...\n') 18284710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm self.assertEqual(self.parser.format_help(), textwrap.dedent('''\ 18294710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm usage: PROG [-h] [--foo] bar {1,2} ... 18304710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm 18314710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm main description 18324710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm 18334710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm positional arguments: 18344710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm bar bar help 18354710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm {1,2} command help 18364710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm 18374710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm optional arguments: 18384710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm -h, --help show this help message and exit 18394710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm --foo foo help 18404710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm ''')) 18414710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm 18424710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm def test_help_extra_prefix_chars(self): 18434710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm # Make sure - is still used for help if it is a non-first prefix char 18444710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm parser = self._get_parser(prefix_chars='+:-') 18454710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm self.assertEqual(parser.format_usage(), 18464710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm 'usage: PROG [-h] [++foo] bar {1,2} ...\n') 18474710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm self.assertEqual(parser.format_help(), textwrap.dedent('''\ 18484710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm usage: PROG [-h] [++foo] bar {1,2} ... 18494710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm 18504710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm main description 18514710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm 18524710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm positional arguments: 18534710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm bar bar help 18544710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm {1,2} command help 18554710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm 18564710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm optional arguments: 18574710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm -h, --help show this help message and exit 18584710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm ++foo foo help 18594710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm ''')) 18604710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm 18614710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm 18624710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm def test_help_alternate_prefix_chars(self): 18634710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm parser = self._get_parser(prefix_chars='+:/') 18644710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm self.assertEqual(parser.format_usage(), 18654710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm 'usage: PROG [+h] [++foo] bar {1,2} ...\n') 18664710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm self.assertEqual(parser.format_help(), textwrap.dedent('''\ 18674710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm usage: PROG [+h] [++foo] bar {1,2} ... 18684710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm 18694710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm main description 18704710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm 18714710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm positional arguments: 18724710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm bar bar help 18734710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm {1,2} command help 18744710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm 18754710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm optional arguments: 18764710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm +h, ++help show this help message and exit 18774710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm ++foo foo help 18784710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm ''')) 18794710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm 18804710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm def test_parser_command_help(self): 18814710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm self.assertEqual(self.command_help_parser.format_usage(), 18824710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm 'usage: PROG [-h] [--foo] bar {1,2} ...\n') 18834710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm self.assertEqual(self.command_help_parser.format_help(), 18844710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm textwrap.dedent('''\ 18854710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm usage: PROG [-h] [--foo] bar {1,2} ... 18864710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm 18874710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm main description 18884710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm 18894710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm positional arguments: 18904710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm bar bar help 18914710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm {1,2} command help 18924710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm 1 1 help 18934710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm 2 2 help 18944710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm 18954710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm optional arguments: 18964710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm -h, --help show this help message and exit 18974710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm --foo foo help 18984710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm ''')) 18994710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm 19004710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm def test_subparser_title_help(self): 19014710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm parser = ErrorRaisingArgumentParser(prog='PROG', 19024710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm description='main description') 19034710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm parser.add_argument('--foo', action='store_true', help='foo help') 19044710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm parser.add_argument('bar', help='bar help') 19054710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm subparsers = parser.add_subparsers(title='subcommands', 19064710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm description='command help', 19074710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm help='additional text') 19084710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm parser1 = subparsers.add_parser('1') 19094710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm parser2 = subparsers.add_parser('2') 19104710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm self.assertEqual(parser.format_usage(), 19114710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm 'usage: PROG [-h] [--foo] bar {1,2} ...\n') 19124710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm self.assertEqual(parser.format_help(), textwrap.dedent('''\ 19134710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm usage: PROG [-h] [--foo] bar {1,2} ... 19144710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm 19154710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm main description 19164710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm 19174710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm positional arguments: 19184710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm bar bar help 19194710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm 19204710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm optional arguments: 19214710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm -h, --help show this help message and exit 19224710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm --foo foo help 19234710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm 19244710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm subcommands: 19254710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm command help 19264710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm 19274710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm {1,2} additional text 19284710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm ''')) 19294710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm 19304710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm def _test_subparser_help(self, args_str, expected_help): 19314710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm try: 19324710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm self.parser.parse_args(args_str.split()) 19334710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm except ArgumentParserError: 19344710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm err = sys.exc_info()[1] 19354710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm if err.stdout != expected_help: 19364710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm print(repr(expected_help)) 19374710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm print(repr(err.stdout)) 19384710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm self.assertEqual(err.stdout, expected_help) 19394710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm 19404710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm def test_subparser1_help(self): 19414710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm self._test_subparser_help('5.0 1 -h', textwrap.dedent('''\ 19424710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm usage: PROG bar 1 [-h] [-w W] {a,b,c} 19434710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm 19444710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm 1 description 19454710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm 19464710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm positional arguments: 19474710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm {a,b,c} x help 19484710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm 19494710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm optional arguments: 19504710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm -h, --help show this help message and exit 19514710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm -w W w help 19524710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm ''')) 19534710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm 19544710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm def test_subparser2_help(self): 19554710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm self._test_subparser_help('5.0 2 -h', textwrap.dedent('''\ 19564710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm usage: PROG bar 2 [-h] [-y {1,2,3}] [z [z ...]] 19574710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm 19584710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm 2 description 19594710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm 19604710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm positional arguments: 19614710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm z z help 19624710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm 19634710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm optional arguments: 19644710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm -h, --help show this help message and exit 19654710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm -y {1,2,3} y help 19664710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm ''')) 19674710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm 19684710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm# ============ 19694710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm# Groups tests 19704710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm# ============ 19714710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm 19724710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylmclass TestPositionalsGroups(TestCase): 19734710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm """Tests that order of group positionals matches construction order""" 19744710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm 19754710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm def test_nongroup_first(self): 19764710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm parser = ErrorRaisingArgumentParser() 19774710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm parser.add_argument('foo') 19784710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm group = parser.add_argument_group('g') 19794710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm group.add_argument('bar') 19804710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm parser.add_argument('baz') 19814710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm expected = NS(foo='1', bar='2', baz='3') 19824710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm result = parser.parse_args('1 2 3'.split()) 19834710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm self.assertEqual(expected, result) 19844710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm 19854710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm def test_group_first(self): 19864710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm parser = ErrorRaisingArgumentParser() 19874710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm group = parser.add_argument_group('xxx') 19884710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm group.add_argument('foo') 19894710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm parser.add_argument('bar') 19904710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm parser.add_argument('baz') 19914710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm expected = NS(foo='1', bar='2', baz='3') 19924710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm result = parser.parse_args('1 2 3'.split()) 19934710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm self.assertEqual(expected, result) 19944710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm 19954710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm def test_interleaved_groups(self): 19964710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm parser = ErrorRaisingArgumentParser() 19974710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm group = parser.add_argument_group('xxx') 19984710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm parser.add_argument('foo') 19994710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm group.add_argument('bar') 20004710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm parser.add_argument('baz') 20014710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm group = parser.add_argument_group('yyy') 20024710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm group.add_argument('frell') 20034710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm expected = NS(foo='1', bar='2', baz='3', frell='4') 20044710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm result = parser.parse_args('1 2 3 4'.split()) 20054710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm self.assertEqual(expected, result) 20064710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm 20074710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm# =================== 20084710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm# Parent parser tests 20094710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm# =================== 20104710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm 20114710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylmclass TestParentParsers(TestCase): 20124710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm """Tests that parsers can be created with parent parsers""" 20134710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm 20144710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm def assertArgumentParserError(self, *args, **kwargs): 20154710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm self.assertRaises(ArgumentParserError, *args, **kwargs) 20164710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm 20174710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm def setUp(self): 20184710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm super(TestParentParsers, self).setUp() 20194710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm self.wxyz_parent = ErrorRaisingArgumentParser(add_help=False) 20204710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm self.wxyz_parent.add_argument('--w') 20214710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm x_group = self.wxyz_parent.add_argument_group('x') 20224710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm x_group.add_argument('-y') 20234710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm self.wxyz_parent.add_argument('z') 20244710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm 20254710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm self.abcd_parent = ErrorRaisingArgumentParser(add_help=False) 20264710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm self.abcd_parent.add_argument('a') 20274710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm self.abcd_parent.add_argument('-b') 20284710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm c_group = self.abcd_parent.add_argument_group('c') 20294710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm c_group.add_argument('--d') 20304710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm 20314710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm self.w_parent = ErrorRaisingArgumentParser(add_help=False) 20324710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm self.w_parent.add_argument('--w') 20334710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm 20344710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm self.z_parent = ErrorRaisingArgumentParser(add_help=False) 20354710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm self.z_parent.add_argument('z') 20364710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm 20374710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm # parents with mutually exclusive groups 20384710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm self.ab_mutex_parent = ErrorRaisingArgumentParser(add_help=False) 20394710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm group = self.ab_mutex_parent.add_mutually_exclusive_group() 20404710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm group.add_argument('-a', action='store_true') 20414710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm group.add_argument('-b', action='store_true') 20424710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm 20434710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm self.main_program = os.path.basename(sys.argv[0]) 20444710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm 20454710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm def test_single_parent(self): 20464710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm parser = ErrorRaisingArgumentParser(parents=[self.wxyz_parent]) 20474710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm self.assertEqual(parser.parse_args('-y 1 2 --w 3'.split()), 20484710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm NS(w='3', y='1', z='2')) 20494710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm 20504710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm def test_single_parent_mutex(self): 20514710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm self._test_mutex_ab(self.ab_mutex_parent.parse_args) 20524710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm parser = ErrorRaisingArgumentParser(parents=[self.ab_mutex_parent]) 20534710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm self._test_mutex_ab(parser.parse_args) 20544710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm 20554710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm def test_single_granparent_mutex(self): 20564710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm parents = [self.ab_mutex_parent] 20574710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm parser = ErrorRaisingArgumentParser(add_help=False, parents=parents) 20584710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm parser = ErrorRaisingArgumentParser(parents=[parser]) 20594710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm self._test_mutex_ab(parser.parse_args) 20604710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm 20614710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm def _test_mutex_ab(self, parse_args): 20624710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm self.assertEqual(parse_args([]), NS(a=False, b=False)) 20634710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm self.assertEqual(parse_args(['-a']), NS(a=True, b=False)) 20644710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm self.assertEqual(parse_args(['-b']), NS(a=False, b=True)) 20654710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm self.assertArgumentParserError(parse_args, ['-a', '-b']) 20664710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm self.assertArgumentParserError(parse_args, ['-b', '-a']) 20674710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm self.assertArgumentParserError(parse_args, ['-c']) 20684710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm self.assertArgumentParserError(parse_args, ['-a', '-c']) 20694710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm self.assertArgumentParserError(parse_args, ['-b', '-c']) 20704710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm 20714710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm def test_multiple_parents(self): 20724710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm parents = [self.abcd_parent, self.wxyz_parent] 20734710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm parser = ErrorRaisingArgumentParser(parents=parents) 20744710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm self.assertEqual(parser.parse_args('--d 1 --w 2 3 4'.split()), 20754710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm NS(a='3', b=None, d='1', w='2', y=None, z='4')) 20764710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm 20774710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm def test_multiple_parents_mutex(self): 20784710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm parents = [self.ab_mutex_parent, self.wxyz_parent] 20794710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm parser = ErrorRaisingArgumentParser(parents=parents) 20804710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm self.assertEqual(parser.parse_args('-a --w 2 3'.split()), 20814710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm NS(a=True, b=False, w='2', y=None, z='3')) 20824710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm self.assertArgumentParserError( 20834710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm parser.parse_args, '-a --w 2 3 -b'.split()) 20844710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm self.assertArgumentParserError( 20854710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm parser.parse_args, '-a -b --w 2 3'.split()) 20864710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm 20874710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm def test_conflicting_parents(self): 20884710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm self.assertRaises( 20894710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm argparse.ArgumentError, 20904710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm argparse.ArgumentParser, 20914710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm parents=[self.w_parent, self.wxyz_parent]) 20924710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm 20934710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm def test_conflicting_parents_mutex(self): 20944710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm self.assertRaises( 20954710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm argparse.ArgumentError, 20964710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm argparse.ArgumentParser, 20974710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm parents=[self.abcd_parent, self.ab_mutex_parent]) 20984710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm 20994710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm def test_same_argument_name_parents(self): 21004710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm parents = [self.wxyz_parent, self.z_parent] 21014710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm parser = ErrorRaisingArgumentParser(parents=parents) 21024710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm self.assertEqual(parser.parse_args('1 2'.split()), 21034710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm NS(w=None, y=None, z='2')) 21044710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm 21054710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm def test_subparser_parents(self): 21064710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm parser = ErrorRaisingArgumentParser() 21074710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm subparsers = parser.add_subparsers() 21084710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm abcde_parser = subparsers.add_parser('bar', parents=[self.abcd_parent]) 21094710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm abcde_parser.add_argument('e') 21104710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm self.assertEqual(parser.parse_args('bar -b 1 --d 2 3 4'.split()), 21114710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm NS(a='3', b='1', d='2', e='4')) 21124710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm 21134710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm def test_subparser_parents_mutex(self): 21144710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm parser = ErrorRaisingArgumentParser() 21154710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm subparsers = parser.add_subparsers() 21164710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm parents = [self.ab_mutex_parent] 21174710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm abc_parser = subparsers.add_parser('foo', parents=parents) 21184710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm c_group = abc_parser.add_argument_group('c_group') 21194710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm c_group.add_argument('c') 21204710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm parents = [self.wxyz_parent, self.ab_mutex_parent] 21214710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm wxyzabe_parser = subparsers.add_parser('bar', parents=parents) 21224710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm wxyzabe_parser.add_argument('e') 21234710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm self.assertEqual(parser.parse_args('foo -a 4'.split()), 21244710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm NS(a=True, b=False, c='4')) 21254710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm self.assertEqual(parser.parse_args('bar -b --w 2 3 4'.split()), 21264710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm NS(a=False, b=True, w='2', y=None, z='3', e='4')) 21274710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm self.assertArgumentParserError( 21284710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm parser.parse_args, 'foo -a -b 4'.split()) 21294710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm self.assertArgumentParserError( 21304710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm parser.parse_args, 'bar -b -a 4'.split()) 21314710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm 21324710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm def test_parent_help(self): 21334710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm parents = [self.abcd_parent, self.wxyz_parent] 21344710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm parser = ErrorRaisingArgumentParser(parents=parents) 21354710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm parser_help = parser.format_help() 21364710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm self.assertEqual(parser_help, textwrap.dedent('''\ 21374710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm usage: {} [-h] [-b B] [--d D] [--w W] [-y Y] a z 21384710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm 21394710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm positional arguments: 21404710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm a 21414710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm z 21424710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm 21434710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm optional arguments: 21444710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm -h, --help show this help message and exit 21454710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm -b B 21464710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm --w W 21474710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm 21484710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm c: 21494710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm --d D 21504710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm 21514710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm x: 21524710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm -y Y 21534710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm '''.format(self.main_program))) 21544710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm 21554710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm def test_groups_parents(self): 21564710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm parent = ErrorRaisingArgumentParser(add_help=False) 21574710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm g = parent.add_argument_group(title='g', description='gd') 21584710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm g.add_argument('-w') 21594710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm g.add_argument('-x') 21604710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm m = parent.add_mutually_exclusive_group() 21614710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm m.add_argument('-y') 21624710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm m.add_argument('-z') 21634710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm parser = ErrorRaisingArgumentParser(parents=[parent]) 21644710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm 21654710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm self.assertRaises(ArgumentParserError, parser.parse_args, 21664710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm ['-y', 'Y', '-z', 'Z']) 21674710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm 21684710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm parser_help = parser.format_help() 21694710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm self.assertEqual(parser_help, textwrap.dedent('''\ 21704710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm usage: {} [-h] [-w W] [-x X] [-y Y | -z Z] 21714710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm 21724710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm optional arguments: 21734710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm -h, --help show this help message and exit 21744710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm -y Y 21754710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm -z Z 21764710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm 21774710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm g: 21784710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm gd 21794710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm 21804710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm -w W 21814710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm -x X 21824710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm '''.format(self.main_program))) 21834710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm 21844710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm# ============================== 21854710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm# Mutually exclusive group tests 21864710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm# ============================== 21874710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm 21884710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylmclass TestMutuallyExclusiveGroupErrors(TestCase): 21894710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm 21904710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm def test_invalid_add_argument_group(self): 21914710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm parser = ErrorRaisingArgumentParser() 21924710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm raises = self.assertRaises 21934710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm raises(TypeError, parser.add_mutually_exclusive_group, title='foo') 21944710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm 21954710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm def test_invalid_add_argument(self): 21964710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm parser = ErrorRaisingArgumentParser() 21974710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm group = parser.add_mutually_exclusive_group() 21984710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm add_argument = group.add_argument 21994710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm raises = self.assertRaises 22004710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm raises(ValueError, add_argument, '--foo', required=True) 22014710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm raises(ValueError, add_argument, 'bar') 22024710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm raises(ValueError, add_argument, 'bar', nargs='+') 22034710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm raises(ValueError, add_argument, 'bar', nargs=1) 22044710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm raises(ValueError, add_argument, 'bar', nargs=argparse.PARSER) 22054710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm 22064710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm def test_help(self): 22074710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm parser = ErrorRaisingArgumentParser(prog='PROG') 22084710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm group1 = parser.add_mutually_exclusive_group() 22094710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm group1.add_argument('--foo', action='store_true') 22104710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm group1.add_argument('--bar', action='store_false') 22114710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm group2 = parser.add_mutually_exclusive_group() 22124710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm group2.add_argument('--soup', action='store_true') 22134710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm group2.add_argument('--nuts', action='store_false') 22144710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm expected = '''\ 22154710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm usage: PROG [-h] [--foo | --bar] [--soup | --nuts] 22164710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm 22174710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm optional arguments: 22184710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm -h, --help show this help message and exit 22194710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm --foo 22204710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm --bar 22214710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm --soup 22224710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm --nuts 22234710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm ''' 22244710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm self.assertEqual(parser.format_help(), textwrap.dedent(expected)) 22254710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm 22264710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylmclass MEMixin(object): 22274710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm 22284710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm def test_failures_when_not_required(self): 22294710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm parse_args = self.get_parser(required=False).parse_args 22304710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm error = ArgumentParserError 22314710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm for args_string in self.failures: 22324710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm self.assertRaises(error, parse_args, args_string.split()) 22334710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm 22344710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm def test_failures_when_required(self): 22354710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm parse_args = self.get_parser(required=True).parse_args 22364710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm error = ArgumentParserError 22374710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm for args_string in self.failures + ['']: 22384710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm self.assertRaises(error, parse_args, args_string.split()) 22394710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm 22404710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm def test_successes_when_not_required(self): 22414710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm parse_args = self.get_parser(required=False).parse_args 22424710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm successes = self.successes + self.successes_when_not_required 22434710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm for args_string, expected_ns in successes: 22444710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm actual_ns = parse_args(args_string.split()) 22454710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm self.assertEqual(actual_ns, expected_ns) 22464710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm 22474710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm def test_successes_when_required(self): 22484710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm parse_args = self.get_parser(required=True).parse_args 22494710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm for args_string, expected_ns in self.successes: 22504710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm actual_ns = parse_args(args_string.split()) 22514710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm self.assertEqual(actual_ns, expected_ns) 22524710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm 22534710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm def test_usage_when_not_required(self): 22544710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm format_usage = self.get_parser(required=False).format_usage 22554710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm expected_usage = self.usage_when_not_required 22564710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm self.assertEqual(format_usage(), textwrap.dedent(expected_usage)) 22574710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm 22584710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm def test_usage_when_required(self): 22594710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm format_usage = self.get_parser(required=True).format_usage 22604710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm expected_usage = self.usage_when_required 22614710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm self.assertEqual(format_usage(), textwrap.dedent(expected_usage)) 22624710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm 22634710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm def test_help_when_not_required(self): 22644710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm format_help = self.get_parser(required=False).format_help 22654710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm help = self.usage_when_not_required + self.help 22664710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm self.assertEqual(format_help(), textwrap.dedent(help)) 22674710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm 22684710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm def test_help_when_required(self): 22694710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm format_help = self.get_parser(required=True).format_help 22704710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm help = self.usage_when_required + self.help 22714710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm self.assertEqual(format_help(), textwrap.dedent(help)) 22724710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm 22734710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm 22744710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylmclass TestMutuallyExclusiveSimple(MEMixin, TestCase): 22754710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm 22764710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm def get_parser(self, required=None): 22774710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm parser = ErrorRaisingArgumentParser(prog='PROG') 22784710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm group = parser.add_mutually_exclusive_group(required=required) 22794710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm group.add_argument('--bar', help='bar help') 22804710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm group.add_argument('--baz', nargs='?', const='Z', help='baz help') 22814710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm return parser 22824710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm 22834710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm failures = ['--bar X --baz Y', '--bar X --baz'] 22844710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm successes = [ 22854710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm ('--bar X', NS(bar='X', baz=None)), 22864710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm ('--bar X --bar Z', NS(bar='Z', baz=None)), 22874710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm ('--baz Y', NS(bar=None, baz='Y')), 22884710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm ('--baz', NS(bar=None, baz='Z')), 22894710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm ] 22904710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm successes_when_not_required = [ 22914710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm ('', NS(bar=None, baz=None)), 22924710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm ] 22934710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm 22944710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm usage_when_not_required = '''\ 22954710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm usage: PROG [-h] [--bar BAR | --baz [BAZ]] 22964710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm ''' 22974710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm usage_when_required = '''\ 22984710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm usage: PROG [-h] (--bar BAR | --baz [BAZ]) 22994710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm ''' 23004710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm help = '''\ 23014710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm 23024710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm optional arguments: 23034710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm -h, --help show this help message and exit 23044710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm --bar BAR bar help 23054710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm --baz [BAZ] baz help 23064710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm ''' 23074710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm 23084710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm 23094710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylmclass TestMutuallyExclusiveLong(MEMixin, TestCase): 23104710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm 23114710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm def get_parser(self, required=None): 23124710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm parser = ErrorRaisingArgumentParser(prog='PROG') 23134710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm parser.add_argument('--abcde', help='abcde help') 23144710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm parser.add_argument('--fghij', help='fghij help') 23154710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm group = parser.add_mutually_exclusive_group(required=required) 23164710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm group.add_argument('--klmno', help='klmno help') 23174710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm group.add_argument('--pqrst', help='pqrst help') 23184710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm return parser 23194710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm 23204710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm failures = ['--klmno X --pqrst Y'] 23214710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm successes = [ 23224710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm ('--klmno X', NS(abcde=None, fghij=None, klmno='X', pqrst=None)), 23234710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm ('--abcde Y --klmno X', 23244710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm NS(abcde='Y', fghij=None, klmno='X', pqrst=None)), 23254710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm ('--pqrst X', NS(abcde=None, fghij=None, klmno=None, pqrst='X')), 23264710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm ('--pqrst X --fghij Y', 23274710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm NS(abcde=None, fghij='Y', klmno=None, pqrst='X')), 23284710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm ] 23294710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm successes_when_not_required = [ 23304710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm ('', NS(abcde=None, fghij=None, klmno=None, pqrst=None)), 23314710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm ] 23324710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm 23334710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm usage_when_not_required = '''\ 23344710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm usage: PROG [-h] [--abcde ABCDE] [--fghij FGHIJ] 23354710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm [--klmno KLMNO | --pqrst PQRST] 23364710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm ''' 23374710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm usage_when_required = '''\ 23384710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm usage: PROG [-h] [--abcde ABCDE] [--fghij FGHIJ] 23394710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm (--klmno KLMNO | --pqrst PQRST) 23404710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm ''' 23414710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm help = '''\ 23424710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm 23434710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm optional arguments: 23444710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm -h, --help show this help message and exit 23454710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm --abcde ABCDE abcde help 23464710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm --fghij FGHIJ fghij help 23474710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm --klmno KLMNO klmno help 23484710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm --pqrst PQRST pqrst help 23494710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm ''' 23504710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm 23514710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm 23524710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylmclass TestMutuallyExclusiveFirstSuppressed(MEMixin, TestCase): 23534710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm 23544710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm def get_parser(self, required): 23554710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm parser = ErrorRaisingArgumentParser(prog='PROG') 23564710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm group = parser.add_mutually_exclusive_group(required=required) 23574710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm group.add_argument('-x', help=argparse.SUPPRESS) 23584710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm group.add_argument('-y', action='store_false', help='y help') 23594710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm return parser 23604710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm 23614710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm failures = ['-x X -y'] 23624710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm successes = [ 23634710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm ('-x X', NS(x='X', y=True)), 23644710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm ('-x X -x Y', NS(x='Y', y=True)), 23654710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm ('-y', NS(x=None, y=False)), 23664710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm ] 23674710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm successes_when_not_required = [ 23684710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm ('', NS(x=None, y=True)), 23694710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm ] 23704710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm 23714710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm usage_when_not_required = '''\ 23724710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm usage: PROG [-h] [-y] 23734710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm ''' 23744710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm usage_when_required = '''\ 23754710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm usage: PROG [-h] -y 23764710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm ''' 23774710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm help = '''\ 23784710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm 23794710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm optional arguments: 23804710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm -h, --help show this help message and exit 23814710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm -y y help 23824710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm ''' 23834710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm 23844710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm 23854710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylmclass TestMutuallyExclusiveManySuppressed(MEMixin, TestCase): 23864710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm 23874710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm def get_parser(self, required): 23884710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm parser = ErrorRaisingArgumentParser(prog='PROG') 23894710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm group = parser.add_mutually_exclusive_group(required=required) 23904710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm add = group.add_argument 23914710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm add('--spam', action='store_true', help=argparse.SUPPRESS) 23924710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm add('--badger', action='store_false', help=argparse.SUPPRESS) 23934710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm add('--bladder', help=argparse.SUPPRESS) 23944710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm return parser 23954710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm 23964710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm failures = [ 23974710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm '--spam --badger', 23984710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm '--badger --bladder B', 23994710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm '--bladder B --spam', 24004710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm ] 24014710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm successes = [ 24024710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm ('--spam', NS(spam=True, badger=True, bladder=None)), 24034710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm ('--badger', NS(spam=False, badger=False, bladder=None)), 24044710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm ('--bladder B', NS(spam=False, badger=True, bladder='B')), 24054710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm ('--spam --spam', NS(spam=True, badger=True, bladder=None)), 24064710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm ] 24074710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm successes_when_not_required = [ 24084710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm ('', NS(spam=False, badger=True, bladder=None)), 24094710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm ] 24104710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm 24114710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm usage_when_required = usage_when_not_required = '''\ 24124710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm usage: PROG [-h] 24134710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm ''' 24144710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm help = '''\ 24154710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm 24164710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm optional arguments: 24174710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm -h, --help show this help message and exit 24184710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm ''' 24194710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm 24204710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm 24214710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylmclass TestMutuallyExclusiveOptionalAndPositional(MEMixin, TestCase): 24224710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm 24234710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm def get_parser(self, required): 24244710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm parser = ErrorRaisingArgumentParser(prog='PROG') 24254710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm group = parser.add_mutually_exclusive_group(required=required) 24264710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm group.add_argument('--foo', action='store_true', help='FOO') 24274710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm group.add_argument('--spam', help='SPAM') 24284710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm group.add_argument('badger', nargs='*', default='X', help='BADGER') 24294710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm return parser 24304710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm 24314710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm failures = [ 24324710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm '--foo --spam S', 24334710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm '--spam S X', 24344710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm 'X --foo', 24354710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm 'X Y Z --spam S', 24364710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm '--foo X Y', 24374710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm ] 24384710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm successes = [ 24394710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm ('--foo', NS(foo=True, spam=None, badger='X')), 24404710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm ('--spam S', NS(foo=False, spam='S', badger='X')), 24414710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm ('X', NS(foo=False, spam=None, badger=['X'])), 24424710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm ('X Y Z', NS(foo=False, spam=None, badger=['X', 'Y', 'Z'])), 24434710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm ] 24444710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm successes_when_not_required = [ 24454710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm ('', NS(foo=False, spam=None, badger='X')), 24464710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm ] 24474710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm 24484710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm usage_when_not_required = '''\ 24494710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm usage: PROG [-h] [--foo | --spam SPAM | badger [badger ...]] 24504710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm ''' 24514710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm usage_when_required = '''\ 24524710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm usage: PROG [-h] (--foo | --spam SPAM | badger [badger ...]) 24534710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm ''' 24544710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm help = '''\ 24554710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm 24564710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm positional arguments: 24574710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm badger BADGER 24584710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm 24594710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm optional arguments: 24604710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm -h, --help show this help message and exit 24614710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm --foo FOO 24624710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm --spam SPAM SPAM 24634710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm ''' 24644710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm 24654710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm 24664710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylmclass TestMutuallyExclusiveOptionalsMixed(MEMixin, TestCase): 24674710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm 24684710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm def get_parser(self, required): 24694710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm parser = ErrorRaisingArgumentParser(prog='PROG') 24704710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm parser.add_argument('-x', action='store_true', help='x help') 24714710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm group = parser.add_mutually_exclusive_group(required=required) 24724710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm group.add_argument('-a', action='store_true', help='a help') 24734710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm group.add_argument('-b', action='store_true', help='b help') 24744710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm parser.add_argument('-y', action='store_true', help='y help') 24754710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm group.add_argument('-c', action='store_true', help='c help') 24764710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm return parser 24774710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm 24784710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm failures = ['-a -b', '-b -c', '-a -c', '-a -b -c'] 24794710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm successes = [ 24804710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm ('-a', NS(a=True, b=False, c=False, x=False, y=False)), 24814710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm ('-b', NS(a=False, b=True, c=False, x=False, y=False)), 24824710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm ('-c', NS(a=False, b=False, c=True, x=False, y=False)), 24834710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm ('-a -x', NS(a=True, b=False, c=False, x=True, y=False)), 24844710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm ('-y -b', NS(a=False, b=True, c=False, x=False, y=True)), 24854710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm ('-x -y -c', NS(a=False, b=False, c=True, x=True, y=True)), 24864710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm ] 24874710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm successes_when_not_required = [ 24884710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm ('', NS(a=False, b=False, c=False, x=False, y=False)), 24894710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm ('-x', NS(a=False, b=False, c=False, x=True, y=False)), 24904710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm ('-y', NS(a=False, b=False, c=False, x=False, y=True)), 24914710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm ] 24924710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm 24934710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm usage_when_required = usage_when_not_required = '''\ 24944710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm usage: PROG [-h] [-x] [-a] [-b] [-y] [-c] 24954710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm ''' 24964710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm help = '''\ 24974710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm 24984710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm optional arguments: 24994710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm -h, --help show this help message and exit 25004710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm -x x help 25014710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm -a a help 25024710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm -b b help 25034710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm -y y help 25044710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm -c c help 25054710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm ''' 25064710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm 25074710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm 25084710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylmclass TestMutuallyExclusiveInGroup(MEMixin, TestCase): 25094710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm 25104710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm def get_parser(self, required=None): 25114710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm parser = ErrorRaisingArgumentParser(prog='PROG') 25124710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm titled_group = parser.add_argument_group( 25134710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm title='Titled group', description='Group description') 25144710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm mutex_group = \ 25154710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm titled_group.add_mutually_exclusive_group(required=required) 25164710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm mutex_group.add_argument('--bar', help='bar help') 25174710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm mutex_group.add_argument('--baz', help='baz help') 25184710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm return parser 25194710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm 25204710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm failures = ['--bar X --baz Y', '--baz X --bar Y'] 25214710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm successes = [ 25224710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm ('--bar X', NS(bar='X', baz=None)), 25234710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm ('--baz Y', NS(bar=None, baz='Y')), 25244710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm ] 25254710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm successes_when_not_required = [ 25264710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm ('', NS(bar=None, baz=None)), 25274710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm ] 25284710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm 25294710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm usage_when_not_required = '''\ 25304710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm usage: PROG [-h] [--bar BAR | --baz BAZ] 25314710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm ''' 25324710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm usage_when_required = '''\ 25334710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm usage: PROG [-h] (--bar BAR | --baz BAZ) 25344710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm ''' 25354710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm help = '''\ 25364710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm 25374710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm optional arguments: 25384710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm -h, --help show this help message and exit 25394710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm 25404710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm Titled group: 25414710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm Group description 25424710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm 25434710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm --bar BAR bar help 25444710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm --baz BAZ baz help 25454710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm ''' 25464710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm 25474710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm 25484710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylmclass TestMutuallyExclusiveOptionalsAndPositionalsMixed(MEMixin, TestCase): 25494710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm 25504710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm def get_parser(self, required): 25514710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm parser = ErrorRaisingArgumentParser(prog='PROG') 25524710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm parser.add_argument('x', help='x help') 25534710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm parser.add_argument('-y', action='store_true', help='y help') 25544710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm group = parser.add_mutually_exclusive_group(required=required) 25554710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm group.add_argument('a', nargs='?', help='a help') 25564710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm group.add_argument('-b', action='store_true', help='b help') 25574710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm group.add_argument('-c', action='store_true', help='c help') 25584710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm return parser 25594710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm 25604710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm failures = ['X A -b', '-b -c', '-c X A'] 25614710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm successes = [ 25624710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm ('X A', NS(a='A', b=False, c=False, x='X', y=False)), 25634710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm ('X -b', NS(a=None, b=True, c=False, x='X', y=False)), 25644710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm ('X -c', NS(a=None, b=False, c=True, x='X', y=False)), 25654710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm ('X A -y', NS(a='A', b=False, c=False, x='X', y=True)), 25664710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm ('X -y -b', NS(a=None, b=True, c=False, x='X', y=True)), 25674710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm ] 25684710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm successes_when_not_required = [ 25694710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm ('X', NS(a=None, b=False, c=False, x='X', y=False)), 25704710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm ('X -y', NS(a=None, b=False, c=False, x='X', y=True)), 25714710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm ] 25724710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm 25734710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm usage_when_required = usage_when_not_required = '''\ 25744710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm usage: PROG [-h] [-y] [-b] [-c] x [a] 25754710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm ''' 25764710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm help = '''\ 25774710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm 25784710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm positional arguments: 25794710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm x x help 25804710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm a a help 25814710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm 25824710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm optional arguments: 25834710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm -h, --help show this help message and exit 25844710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm -y y help 25854710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm -b b help 25864710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm -c c help 25874710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm ''' 25884710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm 25894710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm# ================================================= 25904710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm# Mutually exclusive group in parent parser tests 25914710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm# ================================================= 25924710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm 25934710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylmclass MEPBase(object): 25944710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm 25954710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm def get_parser(self, required=None): 25964710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm parent = super(MEPBase, self).get_parser(required=required) 25974710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm parser = ErrorRaisingArgumentParser( 25984710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm prog=parent.prog, add_help=False, parents=[parent]) 25994710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm return parser 26004710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm 26014710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm 26024710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylmclass TestMutuallyExclusiveGroupErrorsParent( 26034710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm MEPBase, TestMutuallyExclusiveGroupErrors): 26044710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm pass 26054710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm 26064710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm 26074710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylmclass TestMutuallyExclusiveSimpleParent( 26084710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm MEPBase, TestMutuallyExclusiveSimple): 26094710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm pass 26104710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm 26114710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm 26124710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylmclass TestMutuallyExclusiveLongParent( 26134710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm MEPBase, TestMutuallyExclusiveLong): 26144710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm pass 26154710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm 26164710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm 26174710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylmclass TestMutuallyExclusiveFirstSuppressedParent( 26184710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm MEPBase, TestMutuallyExclusiveFirstSuppressed): 26194710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm pass 26204710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm 26214710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm 26224710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylmclass TestMutuallyExclusiveManySuppressedParent( 26234710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm MEPBase, TestMutuallyExclusiveManySuppressed): 26244710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm pass 26254710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm 26264710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm 26274710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylmclass TestMutuallyExclusiveOptionalAndPositionalParent( 26284710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm MEPBase, TestMutuallyExclusiveOptionalAndPositional): 26294710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm pass 26304710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm 26314710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm 26324710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylmclass TestMutuallyExclusiveOptionalsMixedParent( 26334710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm MEPBase, TestMutuallyExclusiveOptionalsMixed): 26344710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm pass 26354710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm 26364710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm 26374710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylmclass TestMutuallyExclusiveOptionalsAndPositionalsMixedParent( 26384710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm MEPBase, TestMutuallyExclusiveOptionalsAndPositionalsMixed): 26394710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm pass 26404710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm 26414710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm# ================= 26424710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm# Set default tests 26434710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm# ================= 26444710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm 26454710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylmclass TestSetDefaults(TestCase): 26464710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm 26474710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm def test_set_defaults_no_args(self): 26484710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm parser = ErrorRaisingArgumentParser() 26494710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm parser.set_defaults(x='foo') 26504710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm parser.set_defaults(y='bar', z=1) 26514710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm self.assertEqual(NS(x='foo', y='bar', z=1), 26524710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm parser.parse_args([])) 26534710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm self.assertEqual(NS(x='foo', y='bar', z=1), 26544710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm parser.parse_args([], NS())) 26554710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm self.assertEqual(NS(x='baz', y='bar', z=1), 26564710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm parser.parse_args([], NS(x='baz'))) 26574710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm self.assertEqual(NS(x='baz', y='bar', z=2), 26584710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm parser.parse_args([], NS(x='baz', z=2))) 26594710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm 26604710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm def test_set_defaults_with_args(self): 26614710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm parser = ErrorRaisingArgumentParser() 26624710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm parser.set_defaults(x='foo', y='bar') 26634710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm parser.add_argument('-x', default='xfoox') 26644710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm self.assertEqual(NS(x='xfoox', y='bar'), 26654710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm parser.parse_args([])) 26664710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm self.assertEqual(NS(x='xfoox', y='bar'), 26674710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm parser.parse_args([], NS())) 26684710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm self.assertEqual(NS(x='baz', y='bar'), 26694710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm parser.parse_args([], NS(x='baz'))) 26704710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm self.assertEqual(NS(x='1', y='bar'), 26714710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm parser.parse_args('-x 1'.split())) 26724710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm self.assertEqual(NS(x='1', y='bar'), 26734710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm parser.parse_args('-x 1'.split(), NS())) 26744710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm self.assertEqual(NS(x='1', y='bar'), 26754710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm parser.parse_args('-x 1'.split(), NS(x='baz'))) 26764710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm 26774710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm def test_set_defaults_subparsers(self): 26784710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm parser = ErrorRaisingArgumentParser() 26794710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm parser.set_defaults(x='foo') 26804710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm subparsers = parser.add_subparsers() 26814710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm parser_a = subparsers.add_parser('a') 26824710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm parser_a.set_defaults(y='bar') 26834710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm self.assertEqual(NS(x='foo', y='bar'), 26844710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm parser.parse_args('a'.split())) 26854710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm 26864710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm def test_set_defaults_parents(self): 26874710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm parent = ErrorRaisingArgumentParser(add_help=False) 26884710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm parent.set_defaults(x='foo') 26894710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm parser = ErrorRaisingArgumentParser(parents=[parent]) 26904710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm self.assertEqual(NS(x='foo'), parser.parse_args([])) 26914710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm 26924710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm def test_set_defaults_same_as_add_argument(self): 26934710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm parser = ErrorRaisingArgumentParser() 26944710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm parser.set_defaults(w='W', x='X', y='Y', z='Z') 26954710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm parser.add_argument('-w') 26964710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm parser.add_argument('-x', default='XX') 26974710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm parser.add_argument('y', nargs='?') 26984710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm parser.add_argument('z', nargs='?', default='ZZ') 26994710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm 27004710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm # defaults set previously 27014710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm self.assertEqual(NS(w='W', x='XX', y='Y', z='ZZ'), 27024710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm parser.parse_args([])) 27034710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm 27044710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm # reset defaults 27054710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm parser.set_defaults(w='WW', x='X', y='YY', z='Z') 27064710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm self.assertEqual(NS(w='WW', x='X', y='YY', z='Z'), 27074710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm parser.parse_args([])) 27084710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm 27094710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm def test_set_defaults_same_as_add_argument_group(self): 27104710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm parser = ErrorRaisingArgumentParser() 27114710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm parser.set_defaults(w='W', x='X', y='Y', z='Z') 27124710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm group = parser.add_argument_group('foo') 27134710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm group.add_argument('-w') 27144710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm group.add_argument('-x', default='XX') 27154710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm group.add_argument('y', nargs='?') 27164710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm group.add_argument('z', nargs='?', default='ZZ') 27174710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm 27184710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm 27194710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm # defaults set previously 27204710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm self.assertEqual(NS(w='W', x='XX', y='Y', z='ZZ'), 27214710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm parser.parse_args([])) 27224710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm 27234710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm # reset defaults 27244710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm parser.set_defaults(w='WW', x='X', y='YY', z='Z') 27254710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm self.assertEqual(NS(w='WW', x='X', y='YY', z='Z'), 27264710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm parser.parse_args([])) 27274710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm 27284710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm# ================= 27294710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm# Get default tests 27304710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm# ================= 27314710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm 27324710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylmclass TestGetDefault(TestCase): 27334710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm 27344710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm def test_get_default(self): 27354710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm parser = ErrorRaisingArgumentParser() 27364710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm self.assertEqual(None, parser.get_default("foo")) 27374710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm self.assertEqual(None, parser.get_default("bar")) 27384710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm 27394710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm parser.add_argument("--foo") 27404710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm self.assertEqual(None, parser.get_default("foo")) 27414710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm self.assertEqual(None, parser.get_default("bar")) 27424710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm 27434710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm parser.add_argument("--bar", type=int, default=42) 27444710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm self.assertEqual(None, parser.get_default("foo")) 27454710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm self.assertEqual(42, parser.get_default("bar")) 27464710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm 27474710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm parser.set_defaults(foo="badger") 27484710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm self.assertEqual("badger", parser.get_default("foo")) 27494710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm self.assertEqual(42, parser.get_default("bar")) 27504710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm 27514710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm# ========================== 27524710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm# Namespace 'contains' tests 27534710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm# ========================== 27544710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm 27554710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylmclass TestNamespaceContainsSimple(TestCase): 27564710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm 27574710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm def test_empty(self): 27584710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm ns = argparse.Namespace() 27594710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm self.assertEqual('' in ns, False) 27604710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm self.assertEqual('' not in ns, True) 27614710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm self.assertEqual('x' in ns, False) 27624710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm 27634710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm def test_non_empty(self): 27644710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm ns = argparse.Namespace(x=1, y=2) 27654710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm self.assertEqual('x' in ns, True) 27664710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm self.assertEqual('x' not in ns, False) 27674710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm self.assertEqual('y' in ns, True) 27684710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm self.assertEqual('' in ns, False) 27694710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm self.assertEqual('xx' in ns, False) 27704710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm self.assertEqual('z' in ns, False) 27714710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm 27724710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm# ===================== 27734710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm# Help formatting tests 27744710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm# ===================== 27754710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm 27764710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylmclass TestHelpFormattingMetaclass(type): 27774710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm 27784710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm def __init__(cls, name, bases, bodydict): 27794710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm if name == 'HelpTestCase': 27804710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm return 27814710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm 27824710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm class AddTests(object): 27834710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm 27844710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm def __init__(self, test_class, func_suffix, std_name): 27854710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm self.func_suffix = func_suffix 27864710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm self.std_name = std_name 27874710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm 27884710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm for test_func in [self.test_format, 27894710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm self.test_print, 27904710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm self.test_print_file]: 27914710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm test_name = '%s_%s' % (test_func.__name__, func_suffix) 27924710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm 27934710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm def test_wrapper(self, test_func=test_func): 27944710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm test_func(self) 27954710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm try: 27964710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm test_wrapper.__name__ = test_name 27974710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm except TypeError: 27984710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm pass 27994710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm setattr(test_class, test_name, test_wrapper) 28004710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm 28014710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm def _get_parser(self, tester): 28024710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm parser = argparse.ArgumentParser( 28034710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm *tester.parser_signature.args, 28044710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm **tester.parser_signature.kwargs) 28054710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm for argument_sig in getattr(tester, 'argument_signatures', []): 28064710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm parser.add_argument(*argument_sig.args, 28074710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm **argument_sig.kwargs) 28084710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm group_sigs = getattr(tester, 'argument_group_signatures', []) 28094710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm for group_sig, argument_sigs in group_sigs: 28104710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm group = parser.add_argument_group(*group_sig.args, 28114710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm **group_sig.kwargs) 28124710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm for argument_sig in argument_sigs: 28134710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm group.add_argument(*argument_sig.args, 28144710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm **argument_sig.kwargs) 28154710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm subparsers_sigs = getattr(tester, 'subparsers_signatures', []) 28164710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm if subparsers_sigs: 28174710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm subparsers = parser.add_subparsers() 28184710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm for subparser_sig in subparsers_sigs: 28194710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm subparsers.add_parser(*subparser_sig.args, 28204710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm **subparser_sig.kwargs) 28214710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm return parser 28224710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm 28234710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm def _test(self, tester, parser_text): 28244710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm expected_text = getattr(tester, self.func_suffix) 28254710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm expected_text = textwrap.dedent(expected_text) 28264710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm if expected_text != parser_text: 28274710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm print(repr(expected_text)) 28284710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm print(repr(parser_text)) 28294710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm for char1, char2 in zip(expected_text, parser_text): 28304710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm if char1 != char2: 28314710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm print('first diff: %r %r' % (char1, char2)) 28324710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm break 28334710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm tester.assertEqual(expected_text, parser_text) 28344710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm 28354710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm def test_format(self, tester): 28364710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm parser = self._get_parser(tester) 28374710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm format = getattr(parser, 'format_%s' % self.func_suffix) 28384710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm self._test(tester, format()) 28394710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm 28404710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm def test_print(self, tester): 28414710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm parser = self._get_parser(tester) 28424710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm print_ = getattr(parser, 'print_%s' % self.func_suffix) 28434710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm old_stream = getattr(sys, self.std_name) 28444710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm setattr(sys, self.std_name, StdIOBuffer()) 28454710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm try: 28464710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm print_() 28474710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm parser_text = getattr(sys, self.std_name).getvalue() 28484710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm finally: 28494710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm setattr(sys, self.std_name, old_stream) 28504710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm self._test(tester, parser_text) 28514710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm 28524710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm def test_print_file(self, tester): 28534710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm parser = self._get_parser(tester) 28544710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm print_ = getattr(parser, 'print_%s' % self.func_suffix) 28554710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm sfile = StdIOBuffer() 28564710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm print_(sfile) 28574710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm parser_text = sfile.getvalue() 28584710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm self._test(tester, parser_text) 28594710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm 28604710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm # add tests for {format,print}_{usage,help,version} 28614710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm for func_suffix, std_name in [('usage', 'stdout'), 28624710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm ('help', 'stdout'), 28634710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm ('version', 'stderr')]: 28644710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm AddTests(cls, func_suffix, std_name) 28654710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm 28664710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylmbases = TestCase, 28674710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylmHelpTestCase = TestHelpFormattingMetaclass('HelpTestCase', bases, {}) 28684710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm 28694710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm 28704710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylmclass TestHelpBiggerOptionals(HelpTestCase): 28714710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm """Make sure that argument help aligns when options are longer""" 28724710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm 28734710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm parser_signature = Sig(prog='PROG', description='DESCRIPTION', 28744710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm epilog='EPILOG', version='0.1') 28754710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm argument_signatures = [ 28764710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm Sig('-x', action='store_true', help='X HELP'), 28774710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm Sig('--y', help='Y HELP'), 28784710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm Sig('foo', help='FOO HELP'), 28794710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm Sig('bar', help='BAR HELP'), 28804710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm ] 28814710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm argument_group_signatures = [] 28824710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm usage = '''\ 28834710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm usage: PROG [-h] [-v] [-x] [--y Y] foo bar 28844710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm ''' 28854710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm help = usage + '''\ 28864710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm 28874710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm DESCRIPTION 28884710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm 28894710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm positional arguments: 28904710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm foo FOO HELP 28914710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm bar BAR HELP 28924710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm 28934710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm optional arguments: 28944710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm -h, --help show this help message and exit 28954710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm -v, --version show program's version number and exit 28964710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm -x X HELP 28974710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm --y Y Y HELP 28984710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm 28994710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm EPILOG 29004710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm ''' 29014710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm version = '''\ 29024710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm 0.1 29034710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm ''' 29044710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm 29054710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm 29064710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylmclass TestHelpBiggerOptionalGroups(HelpTestCase): 29074710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm """Make sure that argument help aligns when options are longer""" 29084710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm 29094710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm parser_signature = Sig(prog='PROG', description='DESCRIPTION', 29104710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm epilog='EPILOG', version='0.1') 29114710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm argument_signatures = [ 29124710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm Sig('-x', action='store_true', help='X HELP'), 29134710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm Sig('--y', help='Y HELP'), 29144710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm Sig('foo', help='FOO HELP'), 29154710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm Sig('bar', help='BAR HELP'), 29164710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm ] 29174710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm argument_group_signatures = [ 29184710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm (Sig('GROUP TITLE', description='GROUP DESCRIPTION'), [ 29194710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm Sig('baz', help='BAZ HELP'), 29204710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm Sig('-z', nargs='+', help='Z HELP')]), 29214710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm ] 29224710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm usage = '''\ 29234710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm usage: PROG [-h] [-v] [-x] [--y Y] [-z Z [Z ...]] foo bar baz 29244710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm ''' 29254710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm help = usage + '''\ 29264710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm 29274710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm DESCRIPTION 29284710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm 29294710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm positional arguments: 29304710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm foo FOO HELP 29314710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm bar BAR HELP 29324710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm 29334710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm optional arguments: 29344710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm -h, --help show this help message and exit 29354710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm -v, --version show program's version number and exit 29364710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm -x X HELP 29374710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm --y Y Y HELP 29384710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm 29394710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm GROUP TITLE: 29404710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm GROUP DESCRIPTION 29414710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm 29424710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm baz BAZ HELP 29434710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm -z Z [Z ...] Z HELP 29444710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm 29454710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm EPILOG 29464710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm ''' 29474710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm version = '''\ 29484710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm 0.1 29494710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm ''' 29504710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm 29514710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm 29524710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylmclass TestHelpBiggerPositionals(HelpTestCase): 29534710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm """Make sure that help aligns when arguments are longer""" 29544710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm 29554710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm parser_signature = Sig(usage='USAGE', description='DESCRIPTION') 29564710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm argument_signatures = [ 29574710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm Sig('-x', action='store_true', help='X HELP'), 29584710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm Sig('--y', help='Y HELP'), 29594710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm Sig('ekiekiekifekang', help='EKI HELP'), 29604710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm Sig('bar', help='BAR HELP'), 29614710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm ] 29624710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm argument_group_signatures = [] 29634710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm usage = '''\ 29644710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm usage: USAGE 29654710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm ''' 29664710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm help = usage + '''\ 29674710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm 29684710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm DESCRIPTION 29694710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm 29704710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm positional arguments: 29714710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm ekiekiekifekang EKI HELP 29724710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm bar BAR HELP 29734710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm 29744710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm optional arguments: 29754710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm -h, --help show this help message and exit 29764710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm -x X HELP 29774710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm --y Y Y HELP 29784710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm ''' 29794710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm 29804710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm version = '' 29814710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm 29824710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm 29834710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylmclass TestHelpReformatting(HelpTestCase): 29844710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm """Make sure that text after short names starts on the first line""" 29854710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm 29864710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm parser_signature = Sig( 29874710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm prog='PROG', 29884710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm description=' oddly formatted\n' 29894710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm 'description\n' 29904710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm '\n' 29914710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm 'that is so long that it should go onto multiple ' 29924710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm 'lines when wrapped') 29934710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm argument_signatures = [ 29944710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm Sig('-x', metavar='XX', help='oddly\n' 29954710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm ' formatted -x help'), 29964710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm Sig('y', metavar='yyy', help='normal y help'), 29974710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm ] 29984710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm argument_group_signatures = [ 29994710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm (Sig('title', description='\n' 30004710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm ' oddly formatted group\n' 30014710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm '\n' 30024710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm 'description'), 30034710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm [Sig('-a', action='store_true', 30044710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm help=' oddly \n' 30054710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm 'formatted -a help \n' 30064710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm ' again, so long that it should be wrapped over ' 30074710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm 'multiple lines')]), 30084710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm ] 30094710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm usage = '''\ 30104710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm usage: PROG [-h] [-x XX] [-a] yyy 30114710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm ''' 30124710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm help = usage + '''\ 30134710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm 30144710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm oddly formatted description that is so long that it should go onto \ 30154710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylmmultiple 30164710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm lines when wrapped 30174710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm 30184710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm positional arguments: 30194710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm yyy normal y help 30204710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm 30214710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm optional arguments: 30224710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm -h, --help show this help message and exit 30234710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm -x XX oddly formatted -x help 30244710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm 30254710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm title: 30264710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm oddly formatted group description 30274710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm 30284710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm -a oddly formatted -a help again, so long that it should \ 30294710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylmbe wrapped 30304710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm over multiple lines 30314710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm ''' 30324710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm version = '' 30334710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm 30344710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm 30354710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylmclass TestHelpWrappingShortNames(HelpTestCase): 30364710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm """Make sure that text after short names starts on the first line""" 30374710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm 30384710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm parser_signature = Sig(prog='PROG', description= 'D\nD' * 30) 30394710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm argument_signatures = [ 30404710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm Sig('-x', metavar='XX', help='XHH HX' * 20), 30414710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm Sig('y', metavar='yyy', help='YH YH' * 20), 30424710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm ] 30434710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm argument_group_signatures = [ 30444710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm (Sig('ALPHAS'), [ 30454710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm Sig('-a', action='store_true', help='AHHH HHA' * 10)]), 30464710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm ] 30474710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm usage = '''\ 30484710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm usage: PROG [-h] [-x XX] [-a] yyy 30494710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm ''' 30504710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm help = usage + '''\ 30514710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm 30524710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm D DD DD DD DD DD DD DD DD DD DD DD DD DD DD DD DD DD DD DD DD DD DD \ 30534710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylmDD DD DD 30544710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm DD DD DD DD D 30554710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm 30564710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm positional arguments: 30574710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm yyy YH YHYH YHYH YHYH YHYH YHYH YHYH YHYH YHYH YHYH YHYH \ 30584710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylmYHYH YHYH 30594710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm YHYH YHYH YHYH YHYH YHYH YHYH YHYH YH 30604710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm 30614710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm optional arguments: 30624710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm -h, --help show this help message and exit 30634710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm -x XX XHH HXXHH HXXHH HXXHH HXXHH HXXHH HXXHH HXXHH HXXHH \ 30644710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylmHXXHH HXXHH 30654710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm HXXHH HXXHH HXXHH HXXHH HXXHH HXXHH HXXHH HXXHH HXXHH HX 30664710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm 30674710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm ALPHAS: 30684710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm -a AHHH HHAAHHH HHAAHHH HHAAHHH HHAAHHH HHAAHHH HHAAHHH \ 30694710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylmHHAAHHH 30704710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm HHAAHHH HHAAHHH HHA 30714710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm ''' 30724710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm version = '' 30734710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm 30744710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm 30754710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylmclass TestHelpWrappingLongNames(HelpTestCase): 30764710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm """Make sure that text after long names starts on the next line""" 30774710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm 30784710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm parser_signature = Sig(usage='USAGE', description= 'D D' * 30, 30794710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm version='V V'*30) 30804710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm argument_signatures = [ 30814710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm Sig('-x', metavar='X' * 25, help='XH XH' * 20), 30824710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm Sig('y', metavar='y' * 25, help='YH YH' * 20), 30834710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm ] 30844710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm argument_group_signatures = [ 30854710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm (Sig('ALPHAS'), [ 30864710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm Sig('-a', metavar='A' * 25, help='AH AH' * 20), 30874710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm Sig('z', metavar='z' * 25, help='ZH ZH' * 20)]), 30884710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm ] 30894710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm usage = '''\ 30904710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm usage: USAGE 30914710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm ''' 30924710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm help = usage + '''\ 30934710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm 30944710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm D DD DD DD DD DD DD DD DD DD DD DD DD DD DD DD DD DD DD DD DD DD DD \ 30954710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylmDD DD DD 30964710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm DD DD DD DD D 30974710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm 30984710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm positional arguments: 30994710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm yyyyyyyyyyyyyyyyyyyyyyyyy 31004710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm YH YHYH YHYH YHYH YHYH YHYH YHYH YHYH YHYH \ 31014710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylmYHYH YHYH 31024710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm YHYH YHYH YHYH YHYH YHYH YHYH YHYH YHYH YHYH YH 31034710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm 31044710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm optional arguments: 31054710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm -h, --help show this help message and exit 31064710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm -v, --version show program's version number and exit 31074710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm -x XXXXXXXXXXXXXXXXXXXXXXXXX 31084710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm XH XHXH XHXH XHXH XHXH XHXH XHXH XHXH XHXH \ 31094710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylmXHXH XHXH 31104710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm XHXH XHXH XHXH XHXH XHXH XHXH XHXH XHXH XHXH XH 31114710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm 31124710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm ALPHAS: 31134710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm -a AAAAAAAAAAAAAAAAAAAAAAAAA 31144710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm AH AHAH AHAH AHAH AHAH AHAH AHAH AHAH AHAH \ 31154710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylmAHAH AHAH 31164710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm AHAH AHAH AHAH AHAH AHAH AHAH AHAH AHAH AHAH AH 31174710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm zzzzzzzzzzzzzzzzzzzzzzzzz 31184710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm ZH ZHZH ZHZH ZHZH ZHZH ZHZH ZHZH ZHZH ZHZH \ 31194710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylmZHZH ZHZH 31204710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm ZHZH ZHZH ZHZH ZHZH ZHZH ZHZH ZHZH ZHZH ZHZH ZH 31214710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm ''' 31224710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm version = '''\ 31234710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm V VV VV VV VV VV VV VV VV VV VV VV VV VV VV VV VV VV VV VV VV VV VV \ 31244710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylmVV VV VV 31254710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm VV VV VV VV V 31264710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm ''' 31274710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm 31284710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm 31294710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylmclass TestHelpUsage(HelpTestCase): 31304710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm """Test basic usage messages""" 31314710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm 31324710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm parser_signature = Sig(prog='PROG') 31334710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm argument_signatures = [ 31344710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm Sig('-w', nargs='+', help='w'), 31354710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm Sig('-x', nargs='*', help='x'), 31364710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm Sig('a', help='a'), 31374710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm Sig('b', help='b', nargs=2), 31384710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm Sig('c', help='c', nargs='?'), 31394710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm ] 31404710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm argument_group_signatures = [ 31414710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm (Sig('group'), [ 31424710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm Sig('-y', nargs='?', help='y'), 31434710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm Sig('-z', nargs=3, help='z'), 31444710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm Sig('d', help='d', nargs='*'), 31454710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm Sig('e', help='e', nargs='+'), 31464710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm ]) 31474710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm ] 31484710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm usage = '''\ 31494710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm usage: PROG [-h] [-w W [W ...]] [-x [X [X ...]]] [-y [Y]] [-z Z Z Z] 31504710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm a b b [c] [d [d ...]] e [e ...] 31514710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm ''' 31524710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm help = usage + '''\ 31534710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm 31544710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm positional arguments: 31554710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm a a 31564710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm b b 31574710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm c c 31584710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm 31594710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm optional arguments: 31604710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm -h, --help show this help message and exit 31614710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm -w W [W ...] w 31624710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm -x [X [X ...]] x 31634710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm 31644710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm group: 31654710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm -y [Y] y 31664710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm -z Z Z Z z 31674710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm d d 31684710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm e e 31694710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm ''' 31704710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm version = '' 31714710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm 31724710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm 31734710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylmclass TestHelpOnlyUserGroups(HelpTestCase): 31744710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm """Test basic usage messages""" 31754710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm 31764710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm parser_signature = Sig(prog='PROG', add_help=False) 31774710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm argument_signatures = [] 31784710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm argument_group_signatures = [ 31794710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm (Sig('xxxx'), [ 31804710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm Sig('-x', help='x'), 31814710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm Sig('a', help='a'), 31824710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm ]), 31834710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm (Sig('yyyy'), [ 31844710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm Sig('b', help='b'), 31854710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm Sig('-y', help='y'), 31864710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm ]), 31874710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm ] 31884710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm usage = '''\ 31894710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm usage: PROG [-x X] [-y Y] a b 31904710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm ''' 31914710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm help = usage + '''\ 31924710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm 31934710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm xxxx: 31944710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm -x X x 31954710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm a a 31964710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm 31974710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm yyyy: 31984710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm b b 31994710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm -y Y y 32004710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm ''' 32014710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm version = '' 32024710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm 32034710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm 32044710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylmclass TestHelpUsageLongProg(HelpTestCase): 32054710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm """Test usage messages where the prog is long""" 32064710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm 32074710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm parser_signature = Sig(prog='P' * 60) 32084710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm argument_signatures = [ 32094710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm Sig('-w', metavar='W'), 32104710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm Sig('-x', metavar='X'), 32114710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm Sig('a'), 32124710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm Sig('b'), 32134710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm ] 32144710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm argument_group_signatures = [] 32154710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm usage = '''\ 32164710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm usage: PPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPP 32174710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm [-h] [-w W] [-x X] a b 32184710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm ''' 32194710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm help = usage + '''\ 32204710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm 32214710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm positional arguments: 32224710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm a 32234710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm b 32244710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm 32254710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm optional arguments: 32264710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm -h, --help show this help message and exit 32274710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm -w W 32284710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm -x X 32294710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm ''' 32304710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm version = '' 32314710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm 32324710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm 32334710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylmclass TestHelpUsageLongProgOptionsWrap(HelpTestCase): 32344710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm """Test usage messages where the prog is long and the optionals wrap""" 32354710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm 32364710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm parser_signature = Sig(prog='P' * 60) 32374710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm argument_signatures = [ 32384710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm Sig('-w', metavar='W' * 25), 32394710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm Sig('-x', metavar='X' * 25), 32404710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm Sig('-y', metavar='Y' * 25), 32414710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm Sig('-z', metavar='Z' * 25), 32424710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm Sig('a'), 32434710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm Sig('b'), 32444710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm ] 32454710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm argument_group_signatures = [] 32464710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm usage = '''\ 32474710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm usage: PPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPP 32484710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm [-h] [-w WWWWWWWWWWWWWWWWWWWWWWWWW] \ 32494710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm[-x XXXXXXXXXXXXXXXXXXXXXXXXX] 32504710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm [-y YYYYYYYYYYYYYYYYYYYYYYYYY] [-z ZZZZZZZZZZZZZZZZZZZZZZZZZ] 32514710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm a b 32524710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm ''' 32534710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm help = usage + '''\ 32544710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm 32554710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm positional arguments: 32564710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm a 32574710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm b 32584710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm 32594710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm optional arguments: 32604710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm -h, --help show this help message and exit 32614710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm -w WWWWWWWWWWWWWWWWWWWWWWWWW 32624710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm -x XXXXXXXXXXXXXXXXXXXXXXXXX 32634710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm -y YYYYYYYYYYYYYYYYYYYYYYYYY 32644710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm -z ZZZZZZZZZZZZZZZZZZZZZZZZZ 32654710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm ''' 32664710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm version = '' 32674710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm 32684710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm 32694710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylmclass TestHelpUsageLongProgPositionalsWrap(HelpTestCase): 32704710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm """Test usage messages where the prog is long and the positionals wrap""" 32714710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm 32724710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm parser_signature = Sig(prog='P' * 60, add_help=False) 32734710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm argument_signatures = [ 32744710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm Sig('a' * 25), 32754710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm Sig('b' * 25), 32764710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm Sig('c' * 25), 32774710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm ] 32784710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm argument_group_signatures = [] 32794710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm usage = '''\ 32804710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm usage: PPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPP 32814710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm aaaaaaaaaaaaaaaaaaaaaaaaa bbbbbbbbbbbbbbbbbbbbbbbbb 32824710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm ccccccccccccccccccccccccc 32834710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm ''' 32844710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm help = usage + '''\ 32854710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm 32864710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm positional arguments: 32874710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm aaaaaaaaaaaaaaaaaaaaaaaaa 32884710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm bbbbbbbbbbbbbbbbbbbbbbbbb 32894710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm ccccccccccccccccccccccccc 32904710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm ''' 32914710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm version = '' 32924710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm 32934710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm 32944710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylmclass TestHelpUsageOptionalsWrap(HelpTestCase): 32954710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm """Test usage messages where the optionals wrap""" 32964710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm 32974710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm parser_signature = Sig(prog='PROG') 32984710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm argument_signatures = [ 32994710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm Sig('-w', metavar='W' * 25), 33004710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm Sig('-x', metavar='X' * 25), 33014710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm Sig('-y', metavar='Y' * 25), 33024710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm Sig('-z', metavar='Z' * 25), 33034710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm Sig('a'), 33044710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm Sig('b'), 33054710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm Sig('c'), 33064710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm ] 33074710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm argument_group_signatures = [] 33084710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm usage = '''\ 33094710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm usage: PROG [-h] [-w WWWWWWWWWWWWWWWWWWWWWWWWW] \ 33104710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm[-x XXXXXXXXXXXXXXXXXXXXXXXXX] 33114710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm [-y YYYYYYYYYYYYYYYYYYYYYYYYY] \ 33124710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm[-z ZZZZZZZZZZZZZZZZZZZZZZZZZ] 33134710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm a b c 33144710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm ''' 33154710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm help = usage + '''\ 33164710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm 33174710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm positional arguments: 33184710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm a 33194710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm b 33204710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm c 33214710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm 33224710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm optional arguments: 33234710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm -h, --help show this help message and exit 33244710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm -w WWWWWWWWWWWWWWWWWWWWWWWWW 33254710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm -x XXXXXXXXXXXXXXXXXXXXXXXXX 33264710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm -y YYYYYYYYYYYYYYYYYYYYYYYYY 33274710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm -z ZZZZZZZZZZZZZZZZZZZZZZZZZ 33284710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm ''' 33294710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm version = '' 33304710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm 33314710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm 33324710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylmclass TestHelpUsagePositionalsWrap(HelpTestCase): 33334710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm """Test usage messages where the positionals wrap""" 33344710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm 33354710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm parser_signature = Sig(prog='PROG') 33364710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm argument_signatures = [ 33374710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm Sig('-x'), 33384710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm Sig('-y'), 33394710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm Sig('-z'), 33404710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm Sig('a' * 25), 33414710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm Sig('b' * 25), 33424710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm Sig('c' * 25), 33434710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm ] 33444710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm argument_group_signatures = [] 33454710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm usage = '''\ 33464710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm usage: PROG [-h] [-x X] [-y Y] [-z Z] 33474710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm aaaaaaaaaaaaaaaaaaaaaaaaa bbbbbbbbbbbbbbbbbbbbbbbbb 33484710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm ccccccccccccccccccccccccc 33494710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm ''' 33504710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm help = usage + '''\ 33514710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm 33524710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm positional arguments: 33534710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm aaaaaaaaaaaaaaaaaaaaaaaaa 33544710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm bbbbbbbbbbbbbbbbbbbbbbbbb 33554710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm ccccccccccccccccccccccccc 33564710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm 33574710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm optional arguments: 33584710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm -h, --help show this help message and exit 33594710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm -x X 33604710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm -y Y 33614710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm -z Z 33624710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm ''' 33634710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm version = '' 33644710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm 33654710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm 33664710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylmclass TestHelpUsageOptionalsPositionalsWrap(HelpTestCase): 33674710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm """Test usage messages where the optionals and positionals wrap""" 33684710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm 33694710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm parser_signature = Sig(prog='PROG') 33704710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm argument_signatures = [ 33714710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm Sig('-x', metavar='X' * 25), 33724710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm Sig('-y', metavar='Y' * 25), 33734710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm Sig('-z', metavar='Z' * 25), 33744710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm Sig('a' * 25), 33754710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm Sig('b' * 25), 33764710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm Sig('c' * 25), 33774710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm ] 33784710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm argument_group_signatures = [] 33794710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm usage = '''\ 33804710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm usage: PROG [-h] [-x XXXXXXXXXXXXXXXXXXXXXXXXX] \ 33814710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm[-y YYYYYYYYYYYYYYYYYYYYYYYYY] 33824710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm [-z ZZZZZZZZZZZZZZZZZZZZZZZZZ] 33834710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm aaaaaaaaaaaaaaaaaaaaaaaaa bbbbbbbbbbbbbbbbbbbbbbbbb 33844710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm ccccccccccccccccccccccccc 33854710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm ''' 33864710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm help = usage + '''\ 33874710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm 33884710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm positional arguments: 33894710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm aaaaaaaaaaaaaaaaaaaaaaaaa 33904710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm bbbbbbbbbbbbbbbbbbbbbbbbb 33914710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm ccccccccccccccccccccccccc 33924710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm 33934710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm optional arguments: 33944710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm -h, --help show this help message and exit 33954710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm -x XXXXXXXXXXXXXXXXXXXXXXXXX 33964710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm -y YYYYYYYYYYYYYYYYYYYYYYYYY 33974710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm -z ZZZZZZZZZZZZZZZZZZZZZZZZZ 33984710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm ''' 33994710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm version = '' 34004710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm 34014710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm 34024710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylmclass TestHelpUsageOptionalsOnlyWrap(HelpTestCase): 34034710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm """Test usage messages where there are only optionals and they wrap""" 34044710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm 34054710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm parser_signature = Sig(prog='PROG') 34064710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm argument_signatures = [ 34074710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm Sig('-x', metavar='X' * 25), 34084710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm Sig('-y', metavar='Y' * 25), 34094710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm Sig('-z', metavar='Z' * 25), 34104710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm ] 34114710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm argument_group_signatures = [] 34124710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm usage = '''\ 34134710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm usage: PROG [-h] [-x XXXXXXXXXXXXXXXXXXXXXXXXX] \ 34144710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm[-y YYYYYYYYYYYYYYYYYYYYYYYYY] 34154710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm [-z ZZZZZZZZZZZZZZZZZZZZZZZZZ] 34164710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm ''' 34174710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm help = usage + '''\ 34184710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm 34194710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm optional arguments: 34204710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm -h, --help show this help message and exit 34214710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm -x XXXXXXXXXXXXXXXXXXXXXXXXX 34224710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm -y YYYYYYYYYYYYYYYYYYYYYYYYY 34234710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm -z ZZZZZZZZZZZZZZZZZZZZZZZZZ 34244710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm ''' 34254710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm version = '' 34264710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm 34274710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm 34284710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylmclass TestHelpUsagePositionalsOnlyWrap(HelpTestCase): 34294710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm """Test usage messages where there are only positionals and they wrap""" 34304710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm 34314710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm parser_signature = Sig(prog='PROG', add_help=False) 34324710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm argument_signatures = [ 34334710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm Sig('a' * 25), 34344710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm Sig('b' * 25), 34354710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm Sig('c' * 25), 34364710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm ] 34374710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm argument_group_signatures = [] 34384710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm usage = '''\ 34394710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm usage: PROG aaaaaaaaaaaaaaaaaaaaaaaaa bbbbbbbbbbbbbbbbbbbbbbbbb 34404710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm ccccccccccccccccccccccccc 34414710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm ''' 34424710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm help = usage + '''\ 34434710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm 34444710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm positional arguments: 34454710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm aaaaaaaaaaaaaaaaaaaaaaaaa 34464710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm bbbbbbbbbbbbbbbbbbbbbbbbb 34474710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm ccccccccccccccccccccccccc 34484710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm ''' 34494710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm version = '' 34504710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm 34514710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm 34524710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylmclass TestHelpVariableExpansion(HelpTestCase): 34534710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm """Test that variables are expanded properly in help messages""" 34544710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm 34554710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm parser_signature = Sig(prog='PROG') 34564710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm argument_signatures = [ 34574710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm Sig('-x', type=int, 34584710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm help='x %(prog)s %(default)s %(type)s %%'), 34594710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm Sig('-y', action='store_const', default=42, const='XXX', 34604710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm help='y %(prog)s %(default)s %(const)s'), 34614710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm Sig('--foo', choices='abc', 34624710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm help='foo %(prog)s %(default)s %(choices)s'), 34634710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm Sig('--bar', default='baz', choices=[1, 2], metavar='BBB', 34644710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm help='bar %(prog)s %(default)s %(dest)s'), 34654710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm Sig('spam', help='spam %(prog)s %(default)s'), 34664710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm Sig('badger', default=0.5, help='badger %(prog)s %(default)s'), 34674710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm ] 34684710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm argument_group_signatures = [ 34694710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm (Sig('group'), [ 34704710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm Sig('-a', help='a %(prog)s %(default)s'), 34714710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm Sig('-b', default=-1, help='b %(prog)s %(default)s'), 34724710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm ]) 34734710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm ] 34744710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm usage = ('''\ 34754710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm usage: PROG [-h] [-x X] [-y] [--foo {a,b,c}] [--bar BBB] [-a A] [-b B] 34764710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm spam badger 34774710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm ''') 34784710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm help = usage + '''\ 34794710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm 34804710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm positional arguments: 34814710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm spam spam PROG None 34824710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm badger badger PROG 0.5 34834710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm 34844710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm optional arguments: 34854710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm -h, --help show this help message and exit 34864710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm -x X x PROG None int % 34874710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm -y y PROG 42 XXX 34884710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm --foo {a,b,c} foo PROG None a, b, c 34894710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm --bar BBB bar PROG baz bar 34904710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm 34914710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm group: 34924710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm -a A a PROG None 34934710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm -b B b PROG -1 34944710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm ''' 34954710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm version = '' 34964710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm 34974710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm 34984710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylmclass TestHelpVariableExpansionUsageSupplied(HelpTestCase): 34994710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm """Test that variables are expanded properly when usage= is present""" 35004710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm 35014710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm parser_signature = Sig(prog='PROG', usage='%(prog)s FOO') 35024710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm argument_signatures = [] 35034710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm argument_group_signatures = [] 35044710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm usage = ('''\ 35054710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm usage: PROG FOO 35064710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm ''') 35074710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm help = usage + '''\ 35084710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm 35094710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm optional arguments: 35104710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm -h, --help show this help message and exit 35114710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm ''' 35124710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm version = '' 35134710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm 35144710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm 35154710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylmclass TestHelpVariableExpansionNoArguments(HelpTestCase): 35164710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm """Test that variables are expanded properly with no arguments""" 35174710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm 35184710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm parser_signature = Sig(prog='PROG', add_help=False) 35194710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm argument_signatures = [] 35204710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm argument_group_signatures = [] 35214710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm usage = ('''\ 35224710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm usage: PROG 35234710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm ''') 35244710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm help = usage 35254710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm version = '' 35264710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm 35274710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm 35284710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylmclass TestHelpSuppressUsage(HelpTestCase): 35294710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm """Test that items can be suppressed in usage messages""" 35304710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm 35314710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm parser_signature = Sig(prog='PROG', usage=argparse.SUPPRESS) 35324710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm argument_signatures = [ 35334710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm Sig('--foo', help='foo help'), 35344710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm Sig('spam', help='spam help'), 35354710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm ] 35364710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm argument_group_signatures = [] 35374710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm help = '''\ 35384710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm positional arguments: 35394710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm spam spam help 35404710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm 35414710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm optional arguments: 35424710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm -h, --help show this help message and exit 35434710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm --foo FOO foo help 35444710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm ''' 35454710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm usage = '' 35464710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm version = '' 35474710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm 35484710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm 35494710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylmclass TestHelpSuppressOptional(HelpTestCase): 35504710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm """Test that optional arguments can be suppressed in help messages""" 35514710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm 35524710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm parser_signature = Sig(prog='PROG', add_help=False) 35534710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm argument_signatures = [ 35544710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm Sig('--foo', help=argparse.SUPPRESS), 35554710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm Sig('spam', help='spam help'), 35564710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm ] 35574710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm argument_group_signatures = [] 35584710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm usage = '''\ 35594710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm usage: PROG spam 35604710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm ''' 35614710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm help = usage + '''\ 35624710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm 35634710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm positional arguments: 35644710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm spam spam help 35654710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm ''' 35664710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm version = '' 35674710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm 35684710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm 35694710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylmclass TestHelpSuppressOptionalGroup(HelpTestCase): 35704710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm """Test that optional groups can be suppressed in help messages""" 35714710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm 35724710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm parser_signature = Sig(prog='PROG') 35734710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm argument_signatures = [ 35744710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm Sig('--foo', help='foo help'), 35754710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm Sig('spam', help='spam help'), 35764710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm ] 35774710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm argument_group_signatures = [ 35784710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm (Sig('group'), [Sig('--bar', help=argparse.SUPPRESS)]), 35794710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm ] 35804710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm usage = '''\ 35814710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm usage: PROG [-h] [--foo FOO] spam 35824710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm ''' 35834710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm help = usage + '''\ 35844710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm 35854710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm positional arguments: 35864710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm spam spam help 35874710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm 35884710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm optional arguments: 35894710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm -h, --help show this help message and exit 35904710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm --foo FOO foo help 35914710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm ''' 35924710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm version = '' 35934710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm 35944710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm 35954710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylmclass TestHelpSuppressPositional(HelpTestCase): 35964710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm """Test that positional arguments can be suppressed in help messages""" 35974710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm 35984710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm parser_signature = Sig(prog='PROG') 35994710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm argument_signatures = [ 36004710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm Sig('--foo', help='foo help'), 36014710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm Sig('spam', help=argparse.SUPPRESS), 36024710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm ] 36034710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm argument_group_signatures = [] 36044710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm usage = '''\ 36054710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm usage: PROG [-h] [--foo FOO] 36064710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm ''' 36074710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm help = usage + '''\ 36084710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm 36094710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm optional arguments: 36104710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm -h, --help show this help message and exit 36114710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm --foo FOO foo help 36124710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm ''' 36134710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm version = '' 36144710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm 36154710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm 36164710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylmclass TestHelpRequiredOptional(HelpTestCase): 36174710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm """Test that required options don't look optional""" 36184710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm 36194710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm parser_signature = Sig(prog='PROG') 36204710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm argument_signatures = [ 36214710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm Sig('--foo', required=True, help='foo help'), 36224710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm ] 36234710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm argument_group_signatures = [] 36244710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm usage = '''\ 36254710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm usage: PROG [-h] --foo FOO 36264710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm ''' 36274710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm help = usage + '''\ 36284710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm 36294710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm optional arguments: 36304710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm -h, --help show this help message and exit 36314710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm --foo FOO foo help 36324710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm ''' 36334710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm version = '' 36344710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm 36354710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm 36364710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylmclass TestHelpAlternatePrefixChars(HelpTestCase): 36374710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm """Test that options display with different prefix characters""" 36384710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm 36394710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm parser_signature = Sig(prog='PROG', prefix_chars='^;', add_help=False) 36404710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm argument_signatures = [ 36414710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm Sig('^^foo', action='store_true', help='foo help'), 36424710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm Sig(';b', ';;bar', help='bar help'), 36434710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm ] 36444710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm argument_group_signatures = [] 36454710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm usage = '''\ 36464710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm usage: PROG [^^foo] [;b BAR] 36474710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm ''' 36484710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm help = usage + '''\ 36494710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm 36504710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm optional arguments: 36514710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm ^^foo foo help 36524710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm ;b BAR, ;;bar BAR bar help 36534710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm ''' 36544710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm version = '' 36554710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm 36564710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm 36574710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylmclass TestHelpNoHelpOptional(HelpTestCase): 36584710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm """Test that the --help argument can be suppressed help messages""" 36594710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm 36604710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm parser_signature = Sig(prog='PROG', add_help=False) 36614710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm argument_signatures = [ 36624710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm Sig('--foo', help='foo help'), 36634710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm Sig('spam', help='spam help'), 36644710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm ] 36654710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm argument_group_signatures = [] 36664710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm usage = '''\ 36674710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm usage: PROG [--foo FOO] spam 36684710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm ''' 36694710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm help = usage + '''\ 36704710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm 36714710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm positional arguments: 36724710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm spam spam help 36734710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm 36744710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm optional arguments: 36754710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm --foo FOO foo help 36764710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm ''' 36774710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm version = '' 36784710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm 36794710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm 36804710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylmclass TestHelpVersionOptional(HelpTestCase): 36814710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm """Test that the --version argument can be suppressed help messages""" 36824710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm 36834710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm parser_signature = Sig(prog='PROG', version='1.0') 36844710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm argument_signatures = [ 36854710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm Sig('--foo', help='foo help'), 36864710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm Sig('spam', help='spam help'), 36874710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm ] 36884710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm argument_group_signatures = [] 36894710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm usage = '''\ 36904710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm usage: PROG [-h] [-v] [--foo FOO] spam 36914710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm ''' 36924710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm help = usage + '''\ 36934710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm 36944710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm positional arguments: 36954710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm spam spam help 36964710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm 36974710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm optional arguments: 36984710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm -h, --help show this help message and exit 36994710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm -v, --version show program's version number and exit 37004710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm --foo FOO foo help 37014710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm ''' 37024710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm version = '''\ 37034710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm 1.0 37044710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm ''' 37054710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm 37064710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm 37074710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylmclass TestHelpNone(HelpTestCase): 37084710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm """Test that no errors occur if no help is specified""" 37094710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm 37104710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm parser_signature = Sig(prog='PROG') 37114710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm argument_signatures = [ 37124710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm Sig('--foo'), 37134710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm Sig('spam'), 37144710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm ] 37154710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm argument_group_signatures = [] 37164710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm usage = '''\ 37174710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm usage: PROG [-h] [--foo FOO] spam 37184710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm ''' 37194710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm help = usage + '''\ 37204710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm 37214710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm positional arguments: 37224710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm spam 37234710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm 37244710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm optional arguments: 37254710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm -h, --help show this help message and exit 37264710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm --foo FOO 37274710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm ''' 37284710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm version = '' 37294710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm 37304710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm 37314710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylmclass TestHelpTupleMetavar(HelpTestCase): 37324710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm """Test specifying metavar as a tuple""" 37334710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm 37344710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm parser_signature = Sig(prog='PROG') 37354710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm argument_signatures = [ 37364710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm Sig('-w', help='w', nargs='+', metavar=('W1', 'W2')), 37374710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm Sig('-x', help='x', nargs='*', metavar=('X1', 'X2')), 37384710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm Sig('-y', help='y', nargs=3, metavar=('Y1', 'Y2', 'Y3')), 37394710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm Sig('-z', help='z', nargs='?', metavar=('Z1', )), 37404710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm ] 37414710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm argument_group_signatures = [] 37424710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm usage = '''\ 37434710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm usage: PROG [-h] [-w W1 [W2 ...]] [-x [X1 [X2 ...]]] [-y Y1 Y2 Y3] \ 37444710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm[-z [Z1]] 37454710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm ''' 37464710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm help = usage + '''\ 37474710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm 37484710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm optional arguments: 37494710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm -h, --help show this help message and exit 37504710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm -w W1 [W2 ...] w 37514710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm -x [X1 [X2 ...]] x 37524710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm -y Y1 Y2 Y3 y 37534710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm -z [Z1] z 37544710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm ''' 37554710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm version = '' 37564710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm 37574710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm 37584710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylmclass TestHelpRawText(HelpTestCase): 37594710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm """Test the RawTextHelpFormatter""" 37604710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm 37614710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm parser_signature = Sig( 37624710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm prog='PROG', formatter_class=argparse.RawTextHelpFormatter, 37634710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm description='Keep the formatting\n' 37644710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm ' exactly as it is written\n' 37654710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm '\n' 37664710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm 'here\n') 37674710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm 37684710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm argument_signatures = [ 37694710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm Sig('--foo', help=' foo help should also\n' 37704710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm 'appear as given here'), 37714710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm Sig('spam', help='spam help'), 37724710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm ] 37734710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm argument_group_signatures = [ 37744710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm (Sig('title', description=' This text\n' 37754710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm ' should be indented\n' 37764710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm ' exactly like it is here\n'), 37774710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm [Sig('--bar', help='bar help')]), 37784710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm ] 37794710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm usage = '''\ 37804710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm usage: PROG [-h] [--foo FOO] [--bar BAR] spam 37814710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm ''' 37824710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm help = usage + '''\ 37834710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm 37844710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm Keep the formatting 37854710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm exactly as it is written 37864710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm 37874710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm here 37884710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm 37894710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm positional arguments: 37904710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm spam spam help 37914710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm 37924710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm optional arguments: 37934710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm -h, --help show this help message and exit 37944710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm --foo FOO foo help should also 37954710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm appear as given here 37964710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm 37974710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm title: 37984710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm This text 37994710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm should be indented 38004710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm exactly like it is here 38014710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm 38024710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm --bar BAR bar help 38034710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm ''' 38044710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm version = '' 38054710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm 38064710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm 38074710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylmclass TestHelpRawDescription(HelpTestCase): 38084710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm """Test the RawTextHelpFormatter""" 38094710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm 38104710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm parser_signature = Sig( 38114710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm prog='PROG', formatter_class=argparse.RawDescriptionHelpFormatter, 38124710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm description='Keep the formatting\n' 38134710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm ' exactly as it is written\n' 38144710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm '\n' 38154710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm 'here\n') 38164710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm 38174710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm argument_signatures = [ 38184710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm Sig('--foo', help=' foo help should not\n' 38194710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm ' retain this odd formatting'), 38204710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm Sig('spam', help='spam help'), 38214710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm ] 38224710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm argument_group_signatures = [ 38234710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm (Sig('title', description=' This text\n' 38244710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm ' should be indented\n' 38254710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm ' exactly like it is here\n'), 38264710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm [Sig('--bar', help='bar help')]), 38274710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm ] 38284710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm usage = '''\ 38294710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm usage: PROG [-h] [--foo FOO] [--bar BAR] spam 38304710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm ''' 38314710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm help = usage + '''\ 38324710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm 38334710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm Keep the formatting 38344710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm exactly as it is written 38354710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm 38364710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm here 38374710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm 38384710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm positional arguments: 38394710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm spam spam help 38404710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm 38414710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm optional arguments: 38424710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm -h, --help show this help message and exit 38434710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm --foo FOO foo help should not retain this odd formatting 38444710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm 38454710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm title: 38464710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm This text 38474710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm should be indented 38484710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm exactly like it is here 38494710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm 38504710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm --bar BAR bar help 38514710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm ''' 38524710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm version = '' 38534710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm 38544710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm 38554710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylmclass TestHelpArgumentDefaults(HelpTestCase): 38564710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm """Test the ArgumentDefaultsHelpFormatter""" 38574710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm 38584710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm parser_signature = Sig( 38594710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm prog='PROG', formatter_class=argparse.ArgumentDefaultsHelpFormatter, 38604710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm description='description') 38614710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm 38624710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm argument_signatures = [ 38634710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm Sig('--foo', help='foo help - oh and by the way, %(default)s'), 38644710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm Sig('--bar', action='store_true', help='bar help'), 38654710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm Sig('spam', help='spam help'), 38664710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm Sig('badger', nargs='?', default='wooden', help='badger help'), 38674710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm ] 38684710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm argument_group_signatures = [ 38694710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm (Sig('title', description='description'), 38704710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm [Sig('--baz', type=int, default=42, help='baz help')]), 38714710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm ] 38724710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm usage = '''\ 38734710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm usage: PROG [-h] [--foo FOO] [--bar] [--baz BAZ] spam [badger] 38744710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm ''' 38754710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm help = usage + '''\ 38764710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm 38774710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm description 38784710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm 38794710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm positional arguments: 38804710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm spam spam help 38814710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm badger badger help (default: wooden) 38824710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm 38834710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm optional arguments: 38844710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm -h, --help show this help message and exit 38854710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm --foo FOO foo help - oh and by the way, None 38864710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm --bar bar help (default: False) 38874710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm 38884710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm title: 38894710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm description 38904710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm 38914710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm --baz BAZ baz help (default: 42) 38924710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm ''' 38934710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm version = '' 38944710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm 38954710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylmclass TestHelpVersionAction(HelpTestCase): 38964710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm """Test the default help for the version action""" 38974710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm 38984710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm parser_signature = Sig(prog='PROG', description='description') 38994710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm argument_signatures = [Sig('-V', '--version', action='version', version='3.6')] 39004710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm argument_group_signatures = [] 39014710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm usage = '''\ 39024710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm usage: PROG [-h] [-V] 39034710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm ''' 39044710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm help = usage + '''\ 39054710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm 39064710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm description 39074710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm 39084710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm optional arguments: 39094710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm -h, --help show this help message and exit 39104710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm -V, --version show program's version number and exit 39114710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm ''' 39124710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm version = '' 39134710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm 39144710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylmclass TestHelpSubparsersOrdering(HelpTestCase): 39154710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm """Test ordering of subcommands in help matches the code""" 39164710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm parser_signature = Sig(prog='PROG', 39174710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm description='display some subcommands', 39184710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm version='0.1') 39194710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm 39204710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm subparsers_signatures = [Sig(name=name) 39214710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm for name in ('a', 'b', 'c', 'd', 'e')] 39224710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm 39234710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm usage = '''\ 39244710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm usage: PROG [-h] [-v] {a,b,c,d,e} ... 39254710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm ''' 39264710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm 39274710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm help = usage + '''\ 39284710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm 39294710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm display some subcommands 39304710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm 39314710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm positional arguments: 39324710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm {a,b,c,d,e} 39334710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm 39344710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm optional arguments: 39354710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm -h, --help show this help message and exit 39364710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm -v, --version show program's version number and exit 39374710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm ''' 39384710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm 39394710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm version = '''\ 39404710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm 0.1 39414710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm ''' 39424710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm 39434710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylmclass TestHelpSubparsersWithHelpOrdering(HelpTestCase): 39444710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm """Test ordering of subcommands in help matches the code""" 39454710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm parser_signature = Sig(prog='PROG', 39464710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm description='display some subcommands', 39474710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm version='0.1') 39484710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm 39494710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm subcommand_data = (('a', 'a subcommand help'), 39504710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm ('b', 'b subcommand help'), 39514710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm ('c', 'c subcommand help'), 39524710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm ('d', 'd subcommand help'), 39534710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm ('e', 'e subcommand help'), 39544710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm ) 39554710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm 39564710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm subparsers_signatures = [Sig(name=name, help=help) 39574710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm for name, help in subcommand_data] 39584710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm 39594710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm usage = '''\ 39604710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm usage: PROG [-h] [-v] {a,b,c,d,e} ... 39614710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm ''' 39624710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm 39634710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm help = usage + '''\ 39644710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm 39654710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm display some subcommands 39664710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm 39674710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm positional arguments: 39684710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm {a,b,c,d,e} 39694710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm a a subcommand help 39704710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm b b subcommand help 39714710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm c c subcommand help 39724710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm d d subcommand help 39734710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm e e subcommand help 39744710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm 39754710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm optional arguments: 39764710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm -h, --help show this help message and exit 39774710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm -v, --version show program's version number and exit 39784710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm ''' 39794710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm 39804710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm version = '''\ 39814710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm 0.1 39824710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm ''' 39834710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm 39844710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm 39854710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm# ===================================== 39864710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm# Optional/Positional constructor tests 39874710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm# ===================================== 39884710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm 39894710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylmclass TestInvalidArgumentConstructors(TestCase): 39904710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm """Test a bunch of invalid Argument constructors""" 39914710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm 39924710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm def assertTypeError(self, *args, **kwargs): 39934710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm parser = argparse.ArgumentParser() 39944710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm self.assertRaises(TypeError, parser.add_argument, 39954710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm *args, **kwargs) 39964710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm 39974710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm def assertValueError(self, *args, **kwargs): 39984710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm parser = argparse.ArgumentParser() 39994710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm self.assertRaises(ValueError, parser.add_argument, 40004710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm *args, **kwargs) 40014710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm 40024710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm def test_invalid_keyword_arguments(self): 40034710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm self.assertTypeError('-x', bar=None) 40044710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm self.assertTypeError('-y', callback='foo') 40054710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm self.assertTypeError('-y', callback_args=()) 40064710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm self.assertTypeError('-y', callback_kwargs={}) 40074710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm 40084710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm def test_missing_destination(self): 40094710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm self.assertTypeError() 40104710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm for action in ['append', 'store']: 40114710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm self.assertTypeError(action=action) 40124710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm 40134710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm def test_invalid_option_strings(self): 40144710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm self.assertValueError('--') 40154710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm self.assertValueError('---') 40164710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm 40174710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm def test_invalid_type(self): 40184710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm self.assertValueError('--foo', type='int') 40194710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm self.assertValueError('--foo', type=(int, float)) 40204710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm 40214710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm def test_invalid_action(self): 40224710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm self.assertValueError('-x', action='foo') 40234710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm self.assertValueError('foo', action='baz') 40244710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm self.assertValueError('--foo', action=('store', 'append')) 40254710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm parser = argparse.ArgumentParser() 40264710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm try: 40274710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm parser.add_argument("--foo", action="store-true") 40284710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm except ValueError: 40294710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm e = sys.exc_info()[1] 40304710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm expected = 'unknown action' 40314710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm msg = 'expected %r, found %r' % (expected, e) 40324710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm self.assertTrue(expected in str(e), msg) 40334710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm 40344710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm def test_multiple_dest(self): 40354710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm parser = argparse.ArgumentParser() 40364710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm parser.add_argument(dest='foo') 40374710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm try: 40384710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm parser.add_argument('bar', dest='baz') 40394710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm except ValueError: 40404710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm e = sys.exc_info()[1] 40414710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm expected = 'dest supplied twice for positional argument' 40424710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm msg = 'expected %r, found %r' % (expected, e) 40434710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm self.assertTrue(expected in str(e), msg) 40444710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm 40454710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm def test_no_argument_actions(self): 40464710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm for action in ['store_const', 'store_true', 'store_false', 40474710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm 'append_const', 'count']: 40484710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm for attrs in [dict(type=int), dict(nargs='+'), 40494710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm dict(choices='ab')]: 40504710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm self.assertTypeError('-x', action=action, **attrs) 40514710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm 40524710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm def test_no_argument_no_const_actions(self): 40534710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm # options with zero arguments 40544710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm for action in ['store_true', 'store_false', 'count']: 40554710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm 40564710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm # const is always disallowed 40574710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm self.assertTypeError('-x', const='foo', action=action) 40584710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm 40594710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm # nargs is always disallowed 40604710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm self.assertTypeError('-x', nargs='*', action=action) 40614710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm 40624710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm def test_more_than_one_argument_actions(self): 40634710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm for action in ['store', 'append']: 40644710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm 40654710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm # nargs=0 is disallowed 40664710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm self.assertValueError('-x', nargs=0, action=action) 40674710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm self.assertValueError('spam', nargs=0, action=action) 40684710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm 40694710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm # const is disallowed with non-optional arguments 40704710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm for nargs in [1, '*', '+']: 40714710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm self.assertValueError('-x', const='foo', 40724710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm nargs=nargs, action=action) 40734710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm self.assertValueError('spam', const='foo', 40744710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm nargs=nargs, action=action) 40754710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm 40764710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm def test_required_const_actions(self): 40774710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm for action in ['store_const', 'append_const']: 40784710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm 40794710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm # nargs is always disallowed 40804710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm self.assertTypeError('-x', nargs='+', action=action) 40814710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm 40824710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm def test_parsers_action_missing_params(self): 40834710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm self.assertTypeError('command', action='parsers') 40844710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm self.assertTypeError('command', action='parsers', prog='PROG') 40854710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm self.assertTypeError('command', action='parsers', 40864710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm parser_class=argparse.ArgumentParser) 40874710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm 40884710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm def test_required_positional(self): 40894710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm self.assertTypeError('foo', required=True) 40904710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm 40914710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm def test_user_defined_action(self): 40924710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm 40934710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm class Success(Exception): 40944710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm pass 40954710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm 40964710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm class Action(object): 40974710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm 40984710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm def __init__(self, 40994710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm option_strings, 41004710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm dest, 41014710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm const, 41024710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm default, 41034710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm required=False): 41044710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm if dest == 'spam': 41054710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm if const is Success: 41064710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm if default is Success: 41074710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm raise Success() 41084710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm 41094710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm def __call__(self, *args, **kwargs): 41104710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm pass 41114710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm 41124710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm parser = argparse.ArgumentParser() 41134710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm self.assertRaises(Success, parser.add_argument, '--spam', 41144710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm action=Action, default=Success, const=Success) 41154710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm self.assertRaises(Success, parser.add_argument, 'spam', 41164710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm action=Action, default=Success, const=Success) 41174710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm 41184710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm# ================================ 41194710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm# Actions returned by add_argument 41204710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm# ================================ 41214710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm 41224710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylmclass TestActionsReturned(TestCase): 41234710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm 41244710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm def test_dest(self): 41254710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm parser = argparse.ArgumentParser() 41264710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm action = parser.add_argument('--foo') 41274710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm self.assertEqual(action.dest, 'foo') 41284710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm action = parser.add_argument('-b', '--bar') 41294710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm self.assertEqual(action.dest, 'bar') 41304710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm action = parser.add_argument('-x', '-y') 41314710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm self.assertEqual(action.dest, 'x') 41324710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm 41334710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm def test_misc(self): 41344710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm parser = argparse.ArgumentParser() 41354710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm action = parser.add_argument('--foo', nargs='?', const=42, 41364710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm default=84, type=int, choices=[1, 2], 41374710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm help='FOO', metavar='BAR', dest='baz') 41384710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm self.assertEqual(action.nargs, '?') 41394710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm self.assertEqual(action.const, 42) 41404710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm self.assertEqual(action.default, 84) 41414710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm self.assertEqual(action.type, int) 41424710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm self.assertEqual(action.choices, [1, 2]) 41434710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm self.assertEqual(action.help, 'FOO') 41444710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm self.assertEqual(action.metavar, 'BAR') 41454710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm self.assertEqual(action.dest, 'baz') 41464710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm 41474710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm 41484710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm# ================================ 41494710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm# Argument conflict handling tests 41504710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm# ================================ 41514710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm 41524710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylmclass TestConflictHandling(TestCase): 41534710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm 41544710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm def test_bad_type(self): 41554710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm self.assertRaises(ValueError, argparse.ArgumentParser, 41564710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm conflict_handler='foo') 41574710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm 41584710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm def test_conflict_error(self): 41594710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm parser = argparse.ArgumentParser() 41604710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm parser.add_argument('-x') 41614710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm self.assertRaises(argparse.ArgumentError, 41624710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm parser.add_argument, '-x') 41634710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm parser.add_argument('--spam') 41644710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm self.assertRaises(argparse.ArgumentError, 41654710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm parser.add_argument, '--spam') 41664710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm 41674710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm def test_resolve_error(self): 41684710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm get_parser = argparse.ArgumentParser 41694710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm parser = get_parser(prog='PROG', conflict_handler='resolve') 41704710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm 41714710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm parser.add_argument('-x', help='OLD X') 41724710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm parser.add_argument('-x', help='NEW X') 41734710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm self.assertEqual(parser.format_help(), textwrap.dedent('''\ 41744710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm usage: PROG [-h] [-x X] 41754710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm 41764710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm optional arguments: 41774710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm -h, --help show this help message and exit 41784710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm -x X NEW X 41794710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm ''')) 41804710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm 41814710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm parser.add_argument('--spam', metavar='OLD_SPAM') 41824710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm parser.add_argument('--spam', metavar='NEW_SPAM') 41834710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm self.assertEqual(parser.format_help(), textwrap.dedent('''\ 41844710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm usage: PROG [-h] [-x X] [--spam NEW_SPAM] 41854710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm 41864710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm optional arguments: 41874710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm -h, --help show this help message and exit 41884710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm -x X NEW X 41894710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm --spam NEW_SPAM 41904710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm ''')) 41914710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm 41924710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm 41934710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm# ============================= 41944710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm# Help and Version option tests 41954710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm# ============================= 41964710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm 41974710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylmclass TestOptionalsHelpVersionActions(TestCase): 41984710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm """Test the help and version actions""" 41994710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm 42004710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm def _get_error(self, func, *args, **kwargs): 42014710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm try: 42024710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm func(*args, **kwargs) 42034710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm except ArgumentParserError: 42044710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm return sys.exc_info()[1] 42054710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm else: 42064710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm self.assertRaises(ArgumentParserError, func, *args, **kwargs) 42074710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm 42084710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm def assertPrintHelpExit(self, parser, args_str): 42094710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm self.assertEqual( 42104710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm parser.format_help(), 42114710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm self._get_error(parser.parse_args, args_str.split()).stdout) 42124710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm 42134710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm def assertPrintVersionExit(self, parser, args_str): 42144710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm self.assertEqual( 42154710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm parser.format_version(), 42164710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm self._get_error(parser.parse_args, args_str.split()).stderr) 42174710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm 42184710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm def assertArgumentParserError(self, parser, *args): 42194710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm self.assertRaises(ArgumentParserError, parser.parse_args, args) 42204710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm 42214710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm def test_version(self): 42224710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm parser = ErrorRaisingArgumentParser(version='1.0') 42234710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm self.assertPrintHelpExit(parser, '-h') 42244710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm self.assertPrintHelpExit(parser, '--help') 42254710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm self.assertPrintVersionExit(parser, '-v') 42264710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm self.assertPrintVersionExit(parser, '--version') 42274710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm 42284710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm def test_version_format(self): 42294710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm parser = ErrorRaisingArgumentParser(prog='PPP', version='%(prog)s 3.5') 42304710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm msg = self._get_error(parser.parse_args, ['-v']).stderr 42314710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm self.assertEqual('PPP 3.5\n', msg) 42324710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm 42334710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm def test_version_no_help(self): 42344710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm parser = ErrorRaisingArgumentParser(add_help=False, version='1.0') 42354710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm self.assertArgumentParserError(parser, '-h') 42364710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm self.assertArgumentParserError(parser, '--help') 42374710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm self.assertPrintVersionExit(parser, '-v') 42384710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm self.assertPrintVersionExit(parser, '--version') 42394710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm 42404710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm def test_version_action(self): 42414710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm parser = ErrorRaisingArgumentParser(prog='XXX') 42424710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm parser.add_argument('-V', action='version', version='%(prog)s 3.7') 42434710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm msg = self._get_error(parser.parse_args, ['-V']).stderr 42444710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm self.assertEqual('XXX 3.7\n', msg) 42454710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm 42464710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm def test_no_help(self): 42474710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm parser = ErrorRaisingArgumentParser(add_help=False) 42484710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm self.assertArgumentParserError(parser, '-h') 42494710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm self.assertArgumentParserError(parser, '--help') 42504710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm self.assertArgumentParserError(parser, '-v') 42514710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm self.assertArgumentParserError(parser, '--version') 42524710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm 42534710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm def test_alternate_help_version(self): 42544710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm parser = ErrorRaisingArgumentParser() 42554710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm parser.add_argument('-x', action='help') 42564710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm parser.add_argument('-y', action='version') 42574710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm self.assertPrintHelpExit(parser, '-x') 42584710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm self.assertPrintVersionExit(parser, '-y') 42594710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm self.assertArgumentParserError(parser, '-v') 42604710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm self.assertArgumentParserError(parser, '--version') 42614710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm 42624710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm def test_help_version_extra_arguments(self): 42634710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm parser = ErrorRaisingArgumentParser(version='1.0') 42644710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm parser.add_argument('-x', action='store_true') 42654710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm parser.add_argument('y') 42664710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm 42674710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm # try all combinations of valid prefixes and suffixes 42684710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm valid_prefixes = ['', '-x', 'foo', '-x bar', 'baz -x'] 42694710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm valid_suffixes = valid_prefixes + ['--bad-option', 'foo bar baz'] 42704710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm for prefix in valid_prefixes: 42714710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm for suffix in valid_suffixes: 42724710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm format = '%s %%s %s' % (prefix, suffix) 42734710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm self.assertPrintHelpExit(parser, format % '-h') 42744710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm self.assertPrintHelpExit(parser, format % '--help') 42754710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm self.assertPrintVersionExit(parser, format % '-v') 42764710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm self.assertPrintVersionExit(parser, format % '--version') 42774710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm 42784710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm 42794710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm# ====================== 42804710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm# str() and repr() tests 42814710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm# ====================== 42824710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm 42834710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylmclass TestStrings(TestCase): 42844710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm """Test str() and repr() on Optionals and Positionals""" 42854710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm 42864710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm def assertStringEqual(self, obj, result_string): 42874710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm for func in [str, repr]: 42884710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm self.assertEqual(func(obj), result_string) 42894710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm 42904710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm def test_optional(self): 42914710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm option = argparse.Action( 42924710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm option_strings=['--foo', '-a', '-b'], 42934710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm dest='b', 42944710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm type='int', 42954710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm nargs='+', 42964710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm default=42, 42974710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm choices=[1, 2, 3], 42984710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm help='HELP', 42994710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm metavar='METAVAR') 43004710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm string = ( 43014710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm "Action(option_strings=['--foo', '-a', '-b'], dest='b', " 43024710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm "nargs='+', const=None, default=42, type='int', " 43034710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm "choices=[1, 2, 3], help='HELP', metavar='METAVAR')") 43044710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm self.assertStringEqual(option, string) 43054710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm 43064710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm def test_argument(self): 43074710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm argument = argparse.Action( 43084710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm option_strings=[], 43094710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm dest='x', 43104710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm type=float, 43114710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm nargs='?', 43124710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm default=2.5, 43134710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm choices=[0.5, 1.5, 2.5], 43144710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm help='H HH H', 43154710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm metavar='MV MV MV') 43164710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm string = ( 43174710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm "Action(option_strings=[], dest='x', nargs='?', " 43184710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm "const=None, default=2.5, type=%r, choices=[0.5, 1.5, 2.5], " 43194710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm "help='H HH H', metavar='MV MV MV')" % float) 43204710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm self.assertStringEqual(argument, string) 43214710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm 43224710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm def test_namespace(self): 43234710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm ns = argparse.Namespace(foo=42, bar='spam') 43244710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm string = "Namespace(bar='spam', foo=42)" 43254710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm self.assertStringEqual(ns, string) 43264710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm 43274710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm def test_parser(self): 43284710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm parser = argparse.ArgumentParser(prog='PROG') 43294710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm string = ( 43304710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm "ArgumentParser(prog='PROG', usage=None, description=None, " 43314710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm "version=None, formatter_class=%r, conflict_handler='error', " 43324710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm "add_help=True)" % argparse.HelpFormatter) 43334710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm self.assertStringEqual(parser, string) 43344710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm 43354710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm# =============== 43364710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm# Namespace tests 43374710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm# =============== 43384710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm 43394710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylmclass TestNamespace(TestCase): 43404710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm 43414710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm def test_constructor(self): 43424710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm ns = argparse.Namespace() 43434710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm self.assertRaises(AttributeError, getattr, ns, 'x') 43444710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm 43454710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm ns = argparse.Namespace(a=42, b='spam') 43464710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm self.assertEqual(ns.a, 42) 43474710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm self.assertEqual(ns.b, 'spam') 43484710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm 43494710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm def test_equality(self): 43504710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm ns1 = argparse.Namespace(a=1, b=2) 43514710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm ns2 = argparse.Namespace(b=2, a=1) 43524710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm ns3 = argparse.Namespace(a=1) 43534710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm ns4 = argparse.Namespace(b=2) 43544710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm 43554710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm self.assertEqual(ns1, ns2) 43564710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm self.assertNotEqual(ns1, ns3) 43574710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm self.assertNotEqual(ns1, ns4) 43584710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm self.assertNotEqual(ns2, ns3) 43594710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm self.assertNotEqual(ns2, ns4) 43604710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm self.assertTrue(ns1 != ns3) 43614710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm self.assertTrue(ns1 != ns4) 43624710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm self.assertTrue(ns2 != ns3) 43634710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm self.assertTrue(ns2 != ns4) 43644710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm 43654710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm 43664710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm# =================== 43674710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm# File encoding tests 43684710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm# =================== 43694710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm 43704710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylmclass TestEncoding(TestCase): 43714710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm 43724710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm def _test_module_encoding(self, path): 43734710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm path, _ = os.path.splitext(path) 43744710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm path += ".py" 43754710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm with codecs.open(path, 'r', 'utf8') as f: 43764710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm f.read() 43774710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm 43784710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm def test_argparse_module_encoding(self): 43794710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm self._test_module_encoding(argparse.__file__) 43804710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm 43814710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm def test_test_argparse_module_encoding(self): 43824710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm self._test_module_encoding(__file__) 43834710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm 43844710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm# =================== 43854710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm# ArgumentError tests 43864710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm# =================== 43874710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm 43884710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylmclass TestArgumentError(TestCase): 43894710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm 43904710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm def test_argument_error(self): 43914710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm msg = "my error here" 43924710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm error = argparse.ArgumentError(None, msg) 43934710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm self.assertEqual(str(error), msg) 43944710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm 43954710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm# ======================= 43964710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm# ArgumentTypeError tests 43974710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm# ======================= 43984710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm 43994710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylmclass TestArgumentTypeError(TestCase): 44004710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm 44014710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm def test_argument_type_error(self): 44024710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm 44034710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm def spam(string): 44044710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm raise argparse.ArgumentTypeError('spam!') 44054710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm 44064710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm parser = ErrorRaisingArgumentParser(prog='PROG', add_help=False) 44074710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm parser.add_argument('x', type=spam) 44084710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm try: 44094710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm parser.parse_args(['XXX']) 44104710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm except ArgumentParserError: 44114710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm expected = 'usage: PROG x\nPROG: error: argument x: spam!\n' 44124710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm msg = sys.exc_info()[1].stderr 44134710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm self.assertEqual(expected, msg) 44144710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm else: 44154710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm self.fail() 44164710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm 44174710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm# ====================== 44184710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm# parse_known_args tests 44194710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm# ====================== 44204710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm 44214710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylmclass TestParseKnownArgs(TestCase): 44224710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm 44234710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm def test_optionals(self): 44244710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm parser = argparse.ArgumentParser() 44254710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm parser.add_argument('--foo') 44264710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm args, extras = parser.parse_known_args('--foo F --bar --baz'.split()) 44274710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm self.assertEqual(NS(foo='F'), args) 44284710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm self.assertEqual(['--bar', '--baz'], extras) 44294710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm 44304710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm def test_mixed(self): 44314710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm parser = argparse.ArgumentParser() 44324710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm parser.add_argument('-v', nargs='?', const=1, type=int) 44334710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm parser.add_argument('--spam', action='store_false') 44344710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm parser.add_argument('badger') 44354710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm 44364710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm argv = ["B", "C", "--foo", "-v", "3", "4"] 44374710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm args, extras = parser.parse_known_args(argv) 44384710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm self.assertEqual(NS(v=3, spam=True, badger="B"), args) 44394710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm self.assertEqual(["C", "--foo", "4"], extras) 44404710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm 44414710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm# ========================== 44424710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm# add_argument metavar tests 44434710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm# ========================== 44444710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm 44454710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylmclass TestAddArgumentMetavar(TestCase): 44464710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm 44474710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm EXPECTED_MESSAGE = "length of metavar tuple does not match nargs" 44484710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm 44494710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm def do_test_no_exception(self, nargs, metavar): 44504710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm parser = argparse.ArgumentParser() 44514710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm parser.add_argument("--foo", nargs=nargs, metavar=metavar) 44524710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm 44534710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm def do_test_exception(self, nargs, metavar): 44544710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm parser = argparse.ArgumentParser() 44554710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm with self.assertRaises(ValueError) as cm: 44564710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm parser.add_argument("--foo", nargs=nargs, metavar=metavar) 44574710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm self.assertEqual(cm.exception.args[0], self.EXPECTED_MESSAGE) 44584710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm 44594710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm # Unit tests for different values of metavar when nargs=None 44604710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm 44614710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm def test_nargs_None_metavar_string(self): 44624710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm self.do_test_no_exception(nargs=None, metavar="1") 44634710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm 44644710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm def test_nargs_None_metavar_length0(self): 44654710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm self.do_test_exception(nargs=None, metavar=tuple()) 44664710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm 44674710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm def test_nargs_None_metavar_length1(self): 44684710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm self.do_test_no_exception(nargs=None, metavar=("1")) 44694710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm 44704710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm def test_nargs_None_metavar_length2(self): 44714710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm self.do_test_exception(nargs=None, metavar=("1", "2")) 44724710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm 44734710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm def test_nargs_None_metavar_length3(self): 44744710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm self.do_test_exception(nargs=None, metavar=("1", "2", "3")) 44754710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm 44764710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm # Unit tests for different values of metavar when nargs=? 44774710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm 44784710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm def test_nargs_optional_metavar_string(self): 44794710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm self.do_test_no_exception(nargs="?", metavar="1") 44804710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm 44814710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm def test_nargs_optional_metavar_length0(self): 44824710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm self.do_test_exception(nargs="?", metavar=tuple()) 44834710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm 44844710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm def test_nargs_optional_metavar_length1(self): 44854710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm self.do_test_no_exception(nargs="?", metavar=("1")) 44864710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm 44874710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm def test_nargs_optional_metavar_length2(self): 44884710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm self.do_test_exception(nargs="?", metavar=("1", "2")) 44894710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm 44904710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm def test_nargs_optional_metavar_length3(self): 44914710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm self.do_test_exception(nargs="?", metavar=("1", "2", "3")) 44924710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm 44934710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm # Unit tests for different values of metavar when nargs=* 44944710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm 44954710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm def test_nargs_zeroormore_metavar_string(self): 44964710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm self.do_test_no_exception(nargs="*", metavar="1") 44974710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm 44984710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm def test_nargs_zeroormore_metavar_length0(self): 44994710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm self.do_test_exception(nargs="*", metavar=tuple()) 45004710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm 45014710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm def test_nargs_zeroormore_metavar_length1(self): 45024710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm self.do_test_no_exception(nargs="*", metavar=("1")) 45034710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm 45044710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm def test_nargs_zeroormore_metavar_length2(self): 45054710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm self.do_test_no_exception(nargs="*", metavar=("1", "2")) 45064710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm 45074710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm def test_nargs_zeroormore_metavar_length3(self): 45084710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm self.do_test_exception(nargs="*", metavar=("1", "2", "3")) 45094710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm 45104710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm # Unit tests for different values of metavar when nargs=+ 45114710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm 45124710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm def test_nargs_oneormore_metavar_string(self): 45134710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm self.do_test_no_exception(nargs="+", metavar="1") 45144710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm 45154710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm def test_nargs_oneormore_metavar_length0(self): 45164710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm self.do_test_exception(nargs="+", metavar=tuple()) 45174710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm 45184710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm def test_nargs_oneormore_metavar_length1(self): 45194710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm self.do_test_no_exception(nargs="+", metavar=("1")) 45204710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm 45214710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm def test_nargs_oneormore_metavar_length2(self): 45224710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm self.do_test_no_exception(nargs="+", metavar=("1", "2")) 45234710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm 45244710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm def test_nargs_oneormore_metavar_length3(self): 45254710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm self.do_test_exception(nargs="+", metavar=("1", "2", "3")) 45264710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm 45274710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm # Unit tests for different values of metavar when nargs=... 45284710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm 45294710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm def test_nargs_remainder_metavar_string(self): 45304710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm self.do_test_no_exception(nargs="...", metavar="1") 45314710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm 45324710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm def test_nargs_remainder_metavar_length0(self): 45334710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm self.do_test_no_exception(nargs="...", metavar=tuple()) 45344710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm 45354710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm def test_nargs_remainder_metavar_length1(self): 45364710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm self.do_test_no_exception(nargs="...", metavar=("1")) 45374710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm 45384710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm def test_nargs_remainder_metavar_length2(self): 45394710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm self.do_test_no_exception(nargs="...", metavar=("1", "2")) 45404710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm 45414710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm def test_nargs_remainder_metavar_length3(self): 45424710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm self.do_test_no_exception(nargs="...", metavar=("1", "2", "3")) 45434710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm 45444710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm # Unit tests for different values of metavar when nargs=A... 45454710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm 45464710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm def test_nargs_parser_metavar_string(self): 45474710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm self.do_test_no_exception(nargs="A...", metavar="1") 45484710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm 45494710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm def test_nargs_parser_metavar_length0(self): 45504710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm self.do_test_exception(nargs="A...", metavar=tuple()) 45514710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm 45524710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm def test_nargs_parser_metavar_length1(self): 45534710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm self.do_test_no_exception(nargs="A...", metavar=("1")) 45544710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm 45554710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm def test_nargs_parser_metavar_length2(self): 45564710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm self.do_test_exception(nargs="A...", metavar=("1", "2")) 45574710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm 45584710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm def test_nargs_parser_metavar_length3(self): 45594710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm self.do_test_exception(nargs="A...", metavar=("1", "2", "3")) 45604710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm 45614710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm # Unit tests for different values of metavar when nargs=1 45624710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm 45634710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm def test_nargs_1_metavar_string(self): 45644710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm self.do_test_no_exception(nargs=1, metavar="1") 45654710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm 45664710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm def test_nargs_1_metavar_length0(self): 45674710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm self.do_test_exception(nargs=1, metavar=tuple()) 45684710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm 45694710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm def test_nargs_1_metavar_length1(self): 45704710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm self.do_test_no_exception(nargs=1, metavar=("1")) 45714710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm 45724710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm def test_nargs_1_metavar_length2(self): 45734710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm self.do_test_exception(nargs=1, metavar=("1", "2")) 45744710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm 45754710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm def test_nargs_1_metavar_length3(self): 45764710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm self.do_test_exception(nargs=1, metavar=("1", "2", "3")) 45774710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm 45784710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm # Unit tests for different values of metavar when nargs=2 45794710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm 45804710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm def test_nargs_2_metavar_string(self): 45814710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm self.do_test_no_exception(nargs=2, metavar="1") 45824710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm 45834710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm def test_nargs_2_metavar_length0(self): 45844710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm self.do_test_exception(nargs=2, metavar=tuple()) 45854710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm 45864710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm def test_nargs_2_metavar_length1(self): 45874710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm self.do_test_no_exception(nargs=2, metavar=("1")) 45884710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm 45894710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm def test_nargs_2_metavar_length2(self): 45904710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm self.do_test_no_exception(nargs=2, metavar=("1", "2")) 45914710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm 45924710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm def test_nargs_2_metavar_length3(self): 45934710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm self.do_test_exception(nargs=2, metavar=("1", "2", "3")) 45944710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm 45954710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm # Unit tests for different values of metavar when nargs=3 45964710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm 45974710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm def test_nargs_3_metavar_string(self): 45984710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm self.do_test_no_exception(nargs=3, metavar="1") 45994710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm 46004710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm def test_nargs_3_metavar_length0(self): 46014710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm self.do_test_exception(nargs=3, metavar=tuple()) 46024710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm 46034710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm def test_nargs_3_metavar_length1(self): 46044710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm self.do_test_no_exception(nargs=3, metavar=("1")) 46054710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm 46064710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm def test_nargs_3_metavar_length2(self): 46074710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm self.do_test_exception(nargs=3, metavar=("1", "2")) 46084710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm 46094710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm def test_nargs_3_metavar_length3(self): 46104710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm self.do_test_no_exception(nargs=3, metavar=("1", "2", "3")) 46114710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm 46124710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm# ============================ 46134710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm# from argparse import * tests 46144710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm# ============================ 46154710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm 46164710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylmclass TestImportStar(TestCase): 46174710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm 46184710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm def test(self): 46194710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm for name in argparse.__all__: 46204710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm self.assertTrue(hasattr(argparse, name)) 46214710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm 46224710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm def test_all_exports_everything_but_modules(self): 46234710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm items = [ 46244710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm name 46254710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm for name, value in vars(argparse).items() 46264710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm if not name.startswith("_") 46274710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm if not inspect.ismodule(value) 46284710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm ] 46294710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm self.assertEqual(sorted(items), sorted(argparse.__all__)) 46304710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm 46314710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylmdef test_main(): 46324710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm # silence warnings about version argument - these are expected 46334710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm with test_support.check_warnings( 46344710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm ('The "version" argument to ArgumentParser is deprecated.', 46354710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm DeprecationWarning), 46364710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm ('The (format|print)_version method is deprecated', 46374710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm DeprecationWarning)): 46384710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm test_support.run_unittest(__name__) 46394710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm # Remove global references to avoid looking like we have refleaks. 46404710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm RFile.seen = {} 46414710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm WFile.seen = set() 46424710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm 46434710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm 46444710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm 46454710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylmif __name__ == '__main__': 46464710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm test_main() 4647