14adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao# Author: Steven J. Bethard <steven.bethard@gmail.com>. 24adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao 34adfde8bc82dd39f59e0445588c3e599ada477dJosh Gaoimport codecs 44adfde8bc82dd39f59e0445588c3e599ada477dJosh Gaoimport inspect 54adfde8bc82dd39f59e0445588c3e599ada477dJosh Gaoimport os 64adfde8bc82dd39f59e0445588c3e599ada477dJosh Gaoimport shutil 74adfde8bc82dd39f59e0445588c3e599ada477dJosh Gaoimport stat 84adfde8bc82dd39f59e0445588c3e599ada477dJosh Gaoimport sys 94adfde8bc82dd39f59e0445588c3e599ada477dJosh Gaoimport textwrap 104adfde8bc82dd39f59e0445588c3e599ada477dJosh Gaoimport tempfile 114adfde8bc82dd39f59e0445588c3e599ada477dJosh Gaoimport unittest 124adfde8bc82dd39f59e0445588c3e599ada477dJosh Gaoimport argparse 134adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao 144adfde8bc82dd39f59e0445588c3e599ada477dJosh Gaofrom StringIO import StringIO 154adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao 164adfde8bc82dd39f59e0445588c3e599ada477dJosh Gaoclass StdIOBuffer(StringIO): 174adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao pass 184adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao 194adfde8bc82dd39f59e0445588c3e599ada477dJosh Gaofrom test import test_support 204adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao 214adfde8bc82dd39f59e0445588c3e599ada477dJosh Gaoclass TestCase(unittest.TestCase): 224adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao 234adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao def assertEqual(self, obj1, obj2): 244adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao if obj1 != obj2: 254adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao print('') 264adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao print(repr(obj1)) 274adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao print(repr(obj2)) 284adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao print(obj1) 294adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao print(obj2) 304adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao super(TestCase, self).assertEqual(obj1, obj2) 314adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao 324adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao def setUp(self): 334adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao # The tests assume that line wrapping occurs at 80 columns, but this 344adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao # behaviour can be overridden by setting the COLUMNS environment 354adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao # variable. To ensure that this assumption is true, unset COLUMNS. 364adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao env = test_support.EnvironmentVarGuard() 374adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao env.unset("COLUMNS") 384adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao self.addCleanup(env.__exit__) 394adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao 404adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao 414adfde8bc82dd39f59e0445588c3e599ada477dJosh Gaoclass TempDirMixin(object): 424adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao 434adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao def setUp(self): 444adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao self.temp_dir = tempfile.mkdtemp() 454adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao self.old_dir = os.getcwd() 464adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao os.chdir(self.temp_dir) 474adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao 484adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao def tearDown(self): 494adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao os.chdir(self.old_dir) 504adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao shutil.rmtree(self.temp_dir, True) 514adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao 524adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao def create_readonly_file(self, filename): 534adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao file_path = os.path.join(self.temp_dir, filename) 544adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao with open(file_path, 'w') as file: 554adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao file.write(filename) 564adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao os.chmod(file_path, stat.S_IREAD) 574adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao 584adfde8bc82dd39f59e0445588c3e599ada477dJosh Gaoclass Sig(object): 594adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao 604adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao def __init__(self, *args, **kwargs): 614adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao self.args = args 624adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao self.kwargs = kwargs 634adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao 644adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao 654adfde8bc82dd39f59e0445588c3e599ada477dJosh Gaoclass NS(object): 664adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao 674adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao def __init__(self, **kwargs): 684adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao self.__dict__.update(kwargs) 694adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao 704adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao def __repr__(self): 714adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao sorted_items = sorted(self.__dict__.items()) 724adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao kwarg_str = ', '.join(['%s=%r' % tup for tup in sorted_items]) 734adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao return '%s(%s)' % (type(self).__name__, kwarg_str) 744adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao 754adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao __hash__ = None 764adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao 774adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao def __eq__(self, other): 784adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao return vars(self) == vars(other) 794adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao 804adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao def __ne__(self, other): 814adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao return not (self == other) 824adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao 834adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao 844adfde8bc82dd39f59e0445588c3e599ada477dJosh Gaoclass ArgumentParserError(Exception): 854adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao 864adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao def __init__(self, message, stdout=None, stderr=None, error_code=None): 874adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao Exception.__init__(self, message, stdout, stderr) 884adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao self.message = message 894adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao self.stdout = stdout 904adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao self.stderr = stderr 914adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao self.error_code = error_code 924adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao 934adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao 944adfde8bc82dd39f59e0445588c3e599ada477dJosh Gaodef stderr_to_parser_error(parse_args, *args, **kwargs): 954adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao # if this is being called recursively and stderr or stdout is already being 964adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao # redirected, simply call the function and let the enclosing function 974adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao # catch the exception 984adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao if isinstance(sys.stderr, StdIOBuffer) or isinstance(sys.stdout, StdIOBuffer): 994adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao return parse_args(*args, **kwargs) 1004adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao 1014adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao # if this is not being called recursively, redirect stderr and 1024adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao # use it as the ArgumentParserError message 1034adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao old_stdout = sys.stdout 1044adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao old_stderr = sys.stderr 1054adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao sys.stdout = StdIOBuffer() 1064adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao sys.stderr = StdIOBuffer() 1074adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao try: 1084adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao try: 1094adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao result = parse_args(*args, **kwargs) 1104adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao for key in list(vars(result)): 1114adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao if getattr(result, key) is sys.stdout: 1124adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao setattr(result, key, old_stdout) 1134adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao if getattr(result, key) is sys.stderr: 1144adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao setattr(result, key, old_stderr) 1154adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao return result 1164adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao except SystemExit: 1174adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao code = sys.exc_info()[1].code 1184adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao stdout = sys.stdout.getvalue() 1194adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao stderr = sys.stderr.getvalue() 1204adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao raise ArgumentParserError("SystemExit", stdout, stderr, code) 1214adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao finally: 1224adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao sys.stdout = old_stdout 1234adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao sys.stderr = old_stderr 1244adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao 1254adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao 1264adfde8bc82dd39f59e0445588c3e599ada477dJosh Gaoclass ErrorRaisingArgumentParser(argparse.ArgumentParser): 1274adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao 1284adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao def parse_args(self, *args, **kwargs): 1294adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao parse_args = super(ErrorRaisingArgumentParser, self).parse_args 1304adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao return stderr_to_parser_error(parse_args, *args, **kwargs) 1314adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao 1324adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao def exit(self, *args, **kwargs): 1334adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao exit = super(ErrorRaisingArgumentParser, self).exit 1344adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao return stderr_to_parser_error(exit, *args, **kwargs) 1354adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao 1364adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao def error(self, *args, **kwargs): 1374adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao error = super(ErrorRaisingArgumentParser, self).error 1384adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao return stderr_to_parser_error(error, *args, **kwargs) 1394adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao 1404adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao 1414adfde8bc82dd39f59e0445588c3e599ada477dJosh Gaoclass ParserTesterMetaclass(type): 1424adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao """Adds parser tests using the class attributes. 1434adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao 1444adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao Classes of this type should specify the following attributes: 1454adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao 1464adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao argument_signatures -- a list of Sig objects which specify 1474adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao the signatures of Argument objects to be created 1484adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao failures -- a list of args lists that should cause the parser 1494adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao to fail 1504adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao successes -- a list of (initial_args, options, remaining_args) tuples 1514adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao where initial_args specifies the string args to be parsed, 1524adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao options is a dict that should match the vars() of the options 1534adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao parsed out of initial_args, and remaining_args should be any 1544adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao remaining unparsed arguments 1554adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao """ 1564adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao 1574adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao def __init__(cls, name, bases, bodydict): 1584adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao if name == 'ParserTestCase': 1594adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao return 1604adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao 1614adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao # default parser signature is empty 1624adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao if not hasattr(cls, 'parser_signature'): 1634adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao cls.parser_signature = Sig() 1644adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao if not hasattr(cls, 'parser_class'): 1654adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao cls.parser_class = ErrorRaisingArgumentParser 1664adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao 1674adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao # --------------------------------------- 1684adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao # functions for adding optional arguments 1694adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao # --------------------------------------- 1704adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao def no_groups(parser, argument_signatures): 1714adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao """Add all arguments directly to the parser""" 1724adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao for sig in argument_signatures: 1734adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao parser.add_argument(*sig.args, **sig.kwargs) 1744adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao 1754adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao def one_group(parser, argument_signatures): 1764adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao """Add all arguments under a single group in the parser""" 1774adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao group = parser.add_argument_group('foo') 1784adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao for sig in argument_signatures: 1794adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao group.add_argument(*sig.args, **sig.kwargs) 1804adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao 1814adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao def many_groups(parser, argument_signatures): 1824adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao """Add each argument in its own group to the parser""" 1834adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao for i, sig in enumerate(argument_signatures): 1844adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao group = parser.add_argument_group('foo:%i' % i) 1854adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao group.add_argument(*sig.args, **sig.kwargs) 1864adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao 1874adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao # -------------------------- 1884adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao # functions for parsing args 1894adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao # -------------------------- 1904adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao def listargs(parser, args): 1914adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao """Parse the args by passing in a list""" 1924adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao return parser.parse_args(args) 1934adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao 1944adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao def sysargs(parser, args): 1954adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao """Parse the args by defaulting to sys.argv""" 1964adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao old_sys_argv = sys.argv 1974adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao sys.argv = [old_sys_argv[0]] + args 1984adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao try: 1994adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao return parser.parse_args() 2004adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao finally: 2014adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao sys.argv = old_sys_argv 2024adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao 2034adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao # class that holds the combination of one optional argument 2044adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao # addition method and one arg parsing method 2054adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao class AddTests(object): 2064adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao 2074adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao def __init__(self, tester_cls, add_arguments, parse_args): 2084adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao self._add_arguments = add_arguments 2094adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao self._parse_args = parse_args 2104adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao 2114adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao add_arguments_name = self._add_arguments.__name__ 2124adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao parse_args_name = self._parse_args.__name__ 2134adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao for test_func in [self.test_failures, self.test_successes]: 2144adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao func_name = test_func.__name__ 2154adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao names = func_name, add_arguments_name, parse_args_name 2164adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao test_name = '_'.join(names) 2174adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao 2184adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao def wrapper(self, test_func=test_func): 2194adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao test_func(self) 2204adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao try: 2214adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao wrapper.__name__ = test_name 2224adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao except TypeError: 2234adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao pass 2244adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao setattr(tester_cls, test_name, wrapper) 2254adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao 2264adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao def _get_parser(self, tester): 2274adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao args = tester.parser_signature.args 2284adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao kwargs = tester.parser_signature.kwargs 2294adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao parser = tester.parser_class(*args, **kwargs) 2304adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao self._add_arguments(parser, tester.argument_signatures) 2314adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao return parser 2324adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao 2334adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao def test_failures(self, tester): 2344adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao parser = self._get_parser(tester) 2354adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao for args_str in tester.failures: 2364adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao args = args_str.split() 2374adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao raises = tester.assertRaises 2384adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao raises(ArgumentParserError, parser.parse_args, args) 2394adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao 2404adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao def test_successes(self, tester): 2414adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao parser = self._get_parser(tester) 2424adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao for args, expected_ns in tester.successes: 2434adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao if isinstance(args, str): 2444adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao args = args.split() 2454adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao result_ns = self._parse_args(parser, args) 2464adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao tester.assertEqual(expected_ns, result_ns) 2474adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao 2484adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao # add tests for each combination of an optionals adding method 2494adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao # and an arg parsing method 2504adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao for add_arguments in [no_groups, one_group, many_groups]: 2514adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao for parse_args in [listargs, sysargs]: 2524adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao AddTests(cls, add_arguments, parse_args) 2534adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao 2544adfde8bc82dd39f59e0445588c3e599ada477dJosh Gaobases = TestCase, 2554adfde8bc82dd39f59e0445588c3e599ada477dJosh GaoParserTestCase = ParserTesterMetaclass('ParserTestCase', bases, {}) 2564adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao 2574adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao# =============== 2584adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao# Optionals tests 2594adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao# =============== 2604adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao 2614adfde8bc82dd39f59e0445588c3e599ada477dJosh Gaoclass TestOptionalsSingleDash(ParserTestCase): 2624adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao """Test an Optional with a single-dash option string""" 2634adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao 2644adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao argument_signatures = [Sig('-x')] 2654adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao failures = ['-x', 'a', '--foo', '-x --foo', '-x -y'] 2664adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao successes = [ 2674adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao ('', NS(x=None)), 2684adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao ('-x a', NS(x='a')), 2694adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao ('-xa', NS(x='a')), 2704adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao ('-x -1', NS(x='-1')), 2714adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao ('-x-1', NS(x='-1')), 2724adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao ] 2734adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao 2744adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao 2754adfde8bc82dd39f59e0445588c3e599ada477dJosh Gaoclass TestOptionalsSingleDashCombined(ParserTestCase): 2764adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao """Test an Optional with a single-dash option string""" 2774adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao 2784adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao argument_signatures = [ 2794adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao Sig('-x', action='store_true'), 2804adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao Sig('-yyy', action='store_const', const=42), 2814adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao Sig('-z'), 2824adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao ] 2834adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao failures = ['a', '--foo', '-xa', '-x --foo', '-x -z', '-z -x', 2844adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao '-yx', '-yz a', '-yyyx', '-yyyza', '-xyza'] 2854adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao successes = [ 2864adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao ('', NS(x=False, yyy=None, z=None)), 2874adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao ('-x', NS(x=True, yyy=None, z=None)), 2884adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao ('-za', NS(x=False, yyy=None, z='a')), 2894adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao ('-z a', NS(x=False, yyy=None, z='a')), 2904adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao ('-xza', NS(x=True, yyy=None, z='a')), 2914adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao ('-xz a', NS(x=True, yyy=None, z='a')), 2924adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao ('-x -za', NS(x=True, yyy=None, z='a')), 2934adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao ('-x -z a', NS(x=True, yyy=None, z='a')), 2944adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao ('-y', NS(x=False, yyy=42, z=None)), 2954adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao ('-yyy', NS(x=False, yyy=42, z=None)), 2964adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao ('-x -yyy -za', NS(x=True, yyy=42, z='a')), 2974adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao ('-x -yyy -z a', NS(x=True, yyy=42, z='a')), 2984adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao ] 2994adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao 3004adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao 3014adfde8bc82dd39f59e0445588c3e599ada477dJosh Gaoclass TestOptionalsSingleDashLong(ParserTestCase): 3024adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao """Test an Optional with a multi-character single-dash option string""" 3034adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao 3044adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao argument_signatures = [Sig('-foo')] 3054adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao failures = ['-foo', 'a', '--foo', '-foo --foo', '-foo -y', '-fooa'] 3064adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao successes = [ 3074adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao ('', NS(foo=None)), 3084adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao ('-foo a', NS(foo='a')), 3094adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao ('-foo -1', NS(foo='-1')), 3104adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao ('-fo a', NS(foo='a')), 3114adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao ('-f a', NS(foo='a')), 3124adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao ] 3134adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao 3144adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao 3154adfde8bc82dd39f59e0445588c3e599ada477dJosh Gaoclass TestOptionalsSingleDashSubsetAmbiguous(ParserTestCase): 3164adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao """Test Optionals where option strings are subsets of each other""" 3174adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao 3184adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao argument_signatures = [Sig('-f'), Sig('-foobar'), Sig('-foorab')] 3194adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao failures = ['-f', '-foo', '-fo', '-foo b', '-foob', '-fooba', '-foora'] 3204adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao successes = [ 3214adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao ('', NS(f=None, foobar=None, foorab=None)), 3224adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao ('-f a', NS(f='a', foobar=None, foorab=None)), 3234adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao ('-fa', NS(f='a', foobar=None, foorab=None)), 3244adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao ('-foa', NS(f='oa', foobar=None, foorab=None)), 3254adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao ('-fooa', NS(f='ooa', foobar=None, foorab=None)), 3264adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao ('-foobar a', NS(f=None, foobar='a', foorab=None)), 3274adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao ('-foorab a', NS(f=None, foobar=None, foorab='a')), 3284adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao ] 3294adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao 3304adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao 3314adfde8bc82dd39f59e0445588c3e599ada477dJosh Gaoclass TestOptionalsSingleDashAmbiguous(ParserTestCase): 3324adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao """Test Optionals that partially match but are not subsets""" 3334adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao 3344adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao argument_signatures = [Sig('-foobar'), Sig('-foorab')] 3354adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao failures = ['-f', '-f a', '-fa', '-foa', '-foo', '-fo', '-foo b'] 3364adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao successes = [ 3374adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao ('', NS(foobar=None, foorab=None)), 3384adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao ('-foob a', NS(foobar='a', foorab=None)), 3394adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao ('-foor a', NS(foobar=None, foorab='a')), 3404adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao ('-fooba a', NS(foobar='a', foorab=None)), 3414adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao ('-foora a', NS(foobar=None, foorab='a')), 3424adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao ('-foobar a', NS(foobar='a', foorab=None)), 3434adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao ('-foorab a', NS(foobar=None, foorab='a')), 3444adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao ] 3454adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao 3464adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao 3474adfde8bc82dd39f59e0445588c3e599ada477dJosh Gaoclass TestOptionalsNumeric(ParserTestCase): 3484adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao """Test an Optional with a short opt string""" 3494adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao 3504adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao argument_signatures = [Sig('-1', dest='one')] 3514adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao failures = ['-1', 'a', '-1 --foo', '-1 -y', '-1 -1', '-1 -2'] 3524adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao successes = [ 3534adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao ('', NS(one=None)), 3544adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao ('-1 a', NS(one='a')), 3554adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao ('-1a', NS(one='a')), 3564adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao ('-1-2', NS(one='-2')), 3574adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao ] 3584adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao 3594adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao 3604adfde8bc82dd39f59e0445588c3e599ada477dJosh Gaoclass TestOptionalsDoubleDash(ParserTestCase): 3614adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao """Test an Optional with a double-dash option string""" 3624adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao 3634adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao argument_signatures = [Sig('--foo')] 3644adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao failures = ['--foo', '-f', '-f a', 'a', '--foo -x', '--foo --bar'] 3654adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao successes = [ 3664adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao ('', NS(foo=None)), 3674adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao ('--foo a', NS(foo='a')), 3684adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao ('--foo=a', NS(foo='a')), 3694adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao ('--foo -2.5', NS(foo='-2.5')), 3704adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao ('--foo=-2.5', NS(foo='-2.5')), 3714adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao ] 3724adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao 3734adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao 3744adfde8bc82dd39f59e0445588c3e599ada477dJosh Gaoclass TestOptionalsDoubleDashPartialMatch(ParserTestCase): 3754adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao """Tests partial matching with a double-dash option string""" 3764adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao 3774adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao argument_signatures = [ 3784adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao Sig('--badger', action='store_true'), 3794adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao Sig('--bat'), 3804adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao ] 3814adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao failures = ['--bar', '--b', '--ba', '--b=2', '--ba=4', '--badge 5'] 3824adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao successes = [ 3834adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao ('', NS(badger=False, bat=None)), 3844adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao ('--bat X', NS(badger=False, bat='X')), 3854adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao ('--bad', NS(badger=True, bat=None)), 3864adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao ('--badg', NS(badger=True, bat=None)), 3874adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao ('--badge', NS(badger=True, bat=None)), 3884adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao ('--badger', NS(badger=True, bat=None)), 3894adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao ] 3904adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao 3914adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao 3924adfde8bc82dd39f59e0445588c3e599ada477dJosh Gaoclass TestOptionalsDoubleDashPrefixMatch(ParserTestCase): 3934adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao """Tests when one double-dash option string is a prefix of another""" 3944adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao 3954adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao argument_signatures = [ 3964adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao Sig('--badger', action='store_true'), 3974adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao Sig('--ba'), 3984adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao ] 3994adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao failures = ['--bar', '--b', '--ba', '--b=2', '--badge 5'] 4004adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao successes = [ 4014adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao ('', NS(badger=False, ba=None)), 4024adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao ('--ba X', NS(badger=False, ba='X')), 4034adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao ('--ba=X', NS(badger=False, ba='X')), 4044adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao ('--bad', NS(badger=True, ba=None)), 4054adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao ('--badg', NS(badger=True, ba=None)), 4064adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao ('--badge', NS(badger=True, ba=None)), 4074adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao ('--badger', NS(badger=True, ba=None)), 4084adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao ] 4094adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao 4104adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao 4114adfde8bc82dd39f59e0445588c3e599ada477dJosh Gaoclass TestOptionalsSingleDoubleDash(ParserTestCase): 4124adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao """Test an Optional with single- and double-dash option strings""" 4134adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao 4144adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao argument_signatures = [ 4154adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao Sig('-f', action='store_true'), 4164adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao Sig('--bar'), 4174adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao Sig('-baz', action='store_const', const=42), 4184adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao ] 4194adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao failures = ['--bar', '-fbar', '-fbaz', '-bazf', '-b B', 'B'] 4204adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao successes = [ 4214adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao ('', NS(f=False, bar=None, baz=None)), 4224adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao ('-f', NS(f=True, bar=None, baz=None)), 4234adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao ('--ba B', NS(f=False, bar='B', baz=None)), 4244adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao ('-f --bar B', NS(f=True, bar='B', baz=None)), 4254adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao ('-f -b', NS(f=True, bar=None, baz=42)), 4264adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao ('-ba -f', NS(f=True, bar=None, baz=42)), 4274adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao ] 4284adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao 4294adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao 4304adfde8bc82dd39f59e0445588c3e599ada477dJosh Gaoclass TestOptionalsAlternatePrefixChars(ParserTestCase): 4314adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao """Test an Optional with option strings with custom prefixes""" 4324adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao 4334adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao parser_signature = Sig(prefix_chars='+:/', add_help=False) 4344adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao argument_signatures = [ 4354adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao Sig('+f', action='store_true'), 4364adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao Sig('::bar'), 4374adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao Sig('/baz', action='store_const', const=42), 4384adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao ] 4394adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao failures = ['--bar', '-fbar', '-b B', 'B', '-f', '--bar B', '-baz', '-h', '--help', '+h', '::help', '/help'] 4404adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao successes = [ 4414adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao ('', NS(f=False, bar=None, baz=None)), 4424adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao ('+f', NS(f=True, bar=None, baz=None)), 4434adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao ('::ba B', NS(f=False, bar='B', baz=None)), 4444adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao ('+f ::bar B', NS(f=True, bar='B', baz=None)), 4454adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao ('+f /b', NS(f=True, bar=None, baz=42)), 4464adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao ('/ba +f', NS(f=True, bar=None, baz=42)), 4474adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao ] 4484adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao 4494adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao 4504adfde8bc82dd39f59e0445588c3e599ada477dJosh Gaoclass TestOptionalsAlternatePrefixCharsAddedHelp(ParserTestCase): 4514adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao """When ``-`` not in prefix_chars, default operators created for help 4524adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao should use the prefix_chars in use rather than - or -- 4534adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao http://bugs.python.org/issue9444""" 4544adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao 4554adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao parser_signature = Sig(prefix_chars='+:/', add_help=True) 4564adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao argument_signatures = [ 4574adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao Sig('+f', action='store_true'), 4584adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao Sig('::bar'), 4594adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao Sig('/baz', action='store_const', const=42), 4604adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao ] 4614adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao failures = ['--bar', '-fbar', '-b B', 'B', '-f', '--bar B', '-baz'] 4624adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao successes = [ 4634adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao ('', NS(f=False, bar=None, baz=None)), 4644adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao ('+f', NS(f=True, bar=None, baz=None)), 4654adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao ('::ba B', NS(f=False, bar='B', baz=None)), 4664adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao ('+f ::bar B', NS(f=True, bar='B', baz=None)), 4674adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao ('+f /b', NS(f=True, bar=None, baz=42)), 4684adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao ('/ba +f', NS(f=True, bar=None, baz=42)) 4694adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao ] 4704adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao 4714adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao 4724adfde8bc82dd39f59e0445588c3e599ada477dJosh Gaoclass TestOptionalsAlternatePrefixCharsMultipleShortArgs(ParserTestCase): 4734adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao """Verify that Optionals must be called with their defined prefixes""" 4744adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao 4754adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao parser_signature = Sig(prefix_chars='+-', add_help=False) 4764adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao argument_signatures = [ 4774adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao Sig('-x', action='store_true'), 4784adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao Sig('+y', action='store_true'), 4794adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao Sig('+z', action='store_true'), 4804adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao ] 4814adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao failures = ['-w', 4824adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao '-xyz', 4834adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao '+x', 4844adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao '-y', 4854adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao '+xyz', 4864adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao ] 4874adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao successes = [ 4884adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao ('', NS(x=False, y=False, z=False)), 4894adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao ('-x', NS(x=True, y=False, z=False)), 4904adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao ('+y -x', NS(x=True, y=True, z=False)), 4914adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao ('+yz -x', NS(x=True, y=True, z=True)), 4924adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao ] 4934adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao 4944adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao 4954adfde8bc82dd39f59e0445588c3e599ada477dJosh Gaoclass TestOptionalsShortLong(ParserTestCase): 4964adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao """Test a combination of single- and double-dash option strings""" 4974adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao 4984adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao argument_signatures = [ 4994adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao Sig('-v', '--verbose', '-n', '--noisy', action='store_true'), 5004adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao ] 5014adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao failures = ['--x --verbose', '-N', 'a', '-v x'] 5024adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao successes = [ 5034adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao ('', NS(verbose=False)), 5044adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao ('-v', NS(verbose=True)), 5054adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao ('--verbose', NS(verbose=True)), 5064adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao ('-n', NS(verbose=True)), 5074adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao ('--noisy', NS(verbose=True)), 5084adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao ] 5094adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao 5104adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao 5114adfde8bc82dd39f59e0445588c3e599ada477dJosh Gaoclass TestOptionalsDest(ParserTestCase): 5124adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao """Tests various means of setting destination""" 5134adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao 5144adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao argument_signatures = [Sig('--foo-bar'), Sig('--baz', dest='zabbaz')] 5154adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao failures = ['a'] 5164adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao successes = [ 5174adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao ('--foo-bar f', NS(foo_bar='f', zabbaz=None)), 5184adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao ('--baz g', NS(foo_bar=None, zabbaz='g')), 5194adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao ('--foo-bar h --baz i', NS(foo_bar='h', zabbaz='i')), 5204adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao ('--baz j --foo-bar k', NS(foo_bar='k', zabbaz='j')), 5214adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao ] 5224adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao 5234adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao 5244adfde8bc82dd39f59e0445588c3e599ada477dJosh Gaoclass TestOptionalsDefault(ParserTestCase): 5254adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao """Tests specifying a default for an Optional""" 5264adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao 5274adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao argument_signatures = [Sig('-x'), Sig('-y', default=42)] 5284adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao failures = ['a'] 5294adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao successes = [ 5304adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao ('', NS(x=None, y=42)), 5314adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao ('-xx', NS(x='x', y=42)), 5324adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao ('-yy', NS(x=None, y='y')), 5334adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao ] 5344adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao 5354adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao 5364adfde8bc82dd39f59e0445588c3e599ada477dJosh Gaoclass TestOptionalsNargsDefault(ParserTestCase): 5374adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao """Tests not specifying the number of args for an Optional""" 5384adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao 5394adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao argument_signatures = [Sig('-x')] 5404adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao failures = ['a', '-x'] 5414adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao successes = [ 5424adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao ('', NS(x=None)), 5434adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao ('-x a', NS(x='a')), 5444adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao ] 5454adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao 5464adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao 5474adfde8bc82dd39f59e0445588c3e599ada477dJosh Gaoclass TestOptionalsNargs1(ParserTestCase): 5484adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao """Tests specifying the 1 arg for an Optional""" 5494adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao 5504adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao argument_signatures = [Sig('-x', nargs=1)] 5514adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao failures = ['a', '-x'] 5524adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao successes = [ 5534adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao ('', NS(x=None)), 5544adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao ('-x a', NS(x=['a'])), 5554adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao ] 5564adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao 5574adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao 5584adfde8bc82dd39f59e0445588c3e599ada477dJosh Gaoclass TestOptionalsNargs3(ParserTestCase): 5594adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao """Tests specifying the 3 args for an Optional""" 5604adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao 5614adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao argument_signatures = [Sig('-x', nargs=3)] 5624adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao failures = ['a', '-x', '-x a', '-x a b', 'a -x', 'a -x b'] 5634adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao successes = [ 5644adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao ('', NS(x=None)), 5654adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao ('-x a b c', NS(x=['a', 'b', 'c'])), 5664adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao ] 5674adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao 5684adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao 5694adfde8bc82dd39f59e0445588c3e599ada477dJosh Gaoclass TestOptionalsNargsOptional(ParserTestCase): 5704adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao """Tests specifying an Optional arg for an Optional""" 5714adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao 5724adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao argument_signatures = [ 5734adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao Sig('-w', nargs='?'), 5744adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao Sig('-x', nargs='?', const=42), 5754adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao Sig('-y', nargs='?', default='spam'), 5764adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao Sig('-z', nargs='?', type=int, const='42', default='84'), 5774adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao ] 5784adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao failures = ['2'] 5794adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao successes = [ 5804adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao ('', NS(w=None, x=None, y='spam', z=84)), 5814adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao ('-w', NS(w=None, x=None, y='spam', z=84)), 5824adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao ('-w 2', NS(w='2', x=None, y='spam', z=84)), 5834adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao ('-x', NS(w=None, x=42, y='spam', z=84)), 5844adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao ('-x 2', NS(w=None, x='2', y='spam', z=84)), 5854adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao ('-y', NS(w=None, x=None, y=None, z=84)), 5864adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao ('-y 2', NS(w=None, x=None, y='2', z=84)), 5874adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao ('-z', NS(w=None, x=None, y='spam', z=42)), 5884adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao ('-z 2', NS(w=None, x=None, y='spam', z=2)), 5894adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao ] 5904adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao 5914adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao 5924adfde8bc82dd39f59e0445588c3e599ada477dJosh Gaoclass TestOptionalsNargsZeroOrMore(ParserTestCase): 5934adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao """Tests specifying an args for an Optional that accepts zero or more""" 5944adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao 5954adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao argument_signatures = [ 5964adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao Sig('-x', nargs='*'), 5974adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao Sig('-y', nargs='*', default='spam'), 5984adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao ] 5994adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao failures = ['a'] 6004adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao successes = [ 6014adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao ('', NS(x=None, y='spam')), 6024adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao ('-x', NS(x=[], y='spam')), 6034adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao ('-x a', NS(x=['a'], y='spam')), 6044adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao ('-x a b', NS(x=['a', 'b'], y='spam')), 6054adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao ('-y', NS(x=None, y=[])), 6064adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao ('-y a', NS(x=None, y=['a'])), 6074adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao ('-y a b', NS(x=None, y=['a', 'b'])), 6084adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao ] 6094adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao 6104adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao 6114adfde8bc82dd39f59e0445588c3e599ada477dJosh Gaoclass TestOptionalsNargsOneOrMore(ParserTestCase): 6124adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao """Tests specifying an args for an Optional that accepts one or more""" 6134adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao 6144adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao argument_signatures = [ 6154adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao Sig('-x', nargs='+'), 6164adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao Sig('-y', nargs='+', default='spam'), 6174adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao ] 6184adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao failures = ['a', '-x', '-y', 'a -x', 'a -y b'] 6194adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao successes = [ 6204adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao ('', NS(x=None, y='spam')), 6214adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao ('-x a', NS(x=['a'], y='spam')), 6224adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao ('-x a b', NS(x=['a', 'b'], y='spam')), 6234adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao ('-y a', NS(x=None, y=['a'])), 6244adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao ('-y a b', NS(x=None, y=['a', 'b'])), 6254adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao ] 6264adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao 6274adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao 6284adfde8bc82dd39f59e0445588c3e599ada477dJosh Gaoclass TestOptionalsChoices(ParserTestCase): 6294adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao """Tests specifying the choices for an Optional""" 6304adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao 6314adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao argument_signatures = [ 6324adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao Sig('-f', choices='abc'), 6334adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao Sig('-g', type=int, choices=range(5))] 6344adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao failures = ['a', '-f d', '-fad', '-ga', '-g 6'] 6354adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao successes = [ 6364adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao ('', NS(f=None, g=None)), 6374adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao ('-f a', NS(f='a', g=None)), 6384adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao ('-f c', NS(f='c', g=None)), 6394adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao ('-g 0', NS(f=None, g=0)), 6404adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao ('-g 03', NS(f=None, g=3)), 6414adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao ('-fb -g4', NS(f='b', g=4)), 6424adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao ] 6434adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao 6444adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao 6454adfde8bc82dd39f59e0445588c3e599ada477dJosh Gaoclass TestOptionalsRequired(ParserTestCase): 6464adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao """Tests the an optional action that is required""" 6474adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao 6484adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao argument_signatures = [ 6494adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao Sig('-x', type=int, required=True), 6504adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao ] 6514adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao failures = ['a', ''] 6524adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao successes = [ 6534adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao ('-x 1', NS(x=1)), 6544adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao ('-x42', NS(x=42)), 6554adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao ] 6564adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao 6574adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao 6584adfde8bc82dd39f59e0445588c3e599ada477dJosh Gaoclass TestOptionalsActionStore(ParserTestCase): 6594adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao """Tests the store action for an Optional""" 6604adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao 6614adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao argument_signatures = [Sig('-x', action='store')] 6624adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao failures = ['a', 'a -x'] 6634adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao successes = [ 6644adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao ('', NS(x=None)), 6654adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao ('-xfoo', NS(x='foo')), 6664adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao ] 6674adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao 6684adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao 6694adfde8bc82dd39f59e0445588c3e599ada477dJosh Gaoclass TestOptionalsActionStoreConst(ParserTestCase): 6704adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao """Tests the store_const action for an Optional""" 6714adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao 6724adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao argument_signatures = [Sig('-y', action='store_const', const=object)] 6734adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao failures = ['a'] 6744adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao successes = [ 6754adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao ('', NS(y=None)), 6764adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao ('-y', NS(y=object)), 6774adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao ] 6784adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao 6794adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao 6804adfde8bc82dd39f59e0445588c3e599ada477dJosh Gaoclass TestOptionalsActionStoreFalse(ParserTestCase): 6814adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao """Tests the store_false action for an Optional""" 6824adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao 6834adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao argument_signatures = [Sig('-z', action='store_false')] 6844adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao failures = ['a', '-za', '-z a'] 6854adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao successes = [ 6864adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao ('', NS(z=True)), 6874adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao ('-z', NS(z=False)), 6884adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao ] 6894adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao 6904adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao 6914adfde8bc82dd39f59e0445588c3e599ada477dJosh Gaoclass TestOptionalsActionStoreTrue(ParserTestCase): 6924adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao """Tests the store_true action for an Optional""" 6934adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao 6944adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao argument_signatures = [Sig('--apple', action='store_true')] 6954adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao failures = ['a', '--apple=b', '--apple b'] 6964adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao successes = [ 6974adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao ('', NS(apple=False)), 6984adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao ('--apple', NS(apple=True)), 6994adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao ] 7004adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao 7014adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao 7024adfde8bc82dd39f59e0445588c3e599ada477dJosh Gaoclass TestOptionalsActionAppend(ParserTestCase): 7034adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao """Tests the append action for an Optional""" 7044adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao 7054adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao argument_signatures = [Sig('--baz', action='append')] 7064adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao failures = ['a', '--baz', 'a --baz', '--baz a b'] 7074adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao successes = [ 7084adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao ('', NS(baz=None)), 7094adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao ('--baz a', NS(baz=['a'])), 7104adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao ('--baz a --baz b', NS(baz=['a', 'b'])), 7114adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao ] 7124adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao 7134adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao 7144adfde8bc82dd39f59e0445588c3e599ada477dJosh Gaoclass TestOptionalsActionAppendWithDefault(ParserTestCase): 7154adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao """Tests the append action for an Optional""" 7164adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao 7174adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao argument_signatures = [Sig('--baz', action='append', default=['X'])] 7184adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao failures = ['a', '--baz', 'a --baz', '--baz a b'] 7194adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao successes = [ 7204adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao ('', NS(baz=['X'])), 7214adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao ('--baz a', NS(baz=['X', 'a'])), 7224adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao ('--baz a --baz b', NS(baz=['X', 'a', 'b'])), 7234adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao ] 7244adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao 7254adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao 7264adfde8bc82dd39f59e0445588c3e599ada477dJosh Gaoclass TestOptionalsActionAppendConst(ParserTestCase): 7274adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao """Tests the append_const action for an Optional""" 7284adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao 7294adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao argument_signatures = [ 7304adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao Sig('-b', action='append_const', const=Exception), 7314adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao Sig('-c', action='append', dest='b'), 7324adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao ] 7334adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao failures = ['a', '-c', 'a -c', '-bx', '-b x'] 7344adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao successes = [ 7354adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao ('', NS(b=None)), 7364adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao ('-b', NS(b=[Exception])), 7374adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao ('-b -cx -b -cyz', NS(b=[Exception, 'x', Exception, 'yz'])), 7384adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao ] 7394adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao 7404adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao 7414adfde8bc82dd39f59e0445588c3e599ada477dJosh Gaoclass TestOptionalsActionAppendConstWithDefault(ParserTestCase): 7424adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao """Tests the append_const action for an Optional""" 7434adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao 7444adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao argument_signatures = [ 7454adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao Sig('-b', action='append_const', const=Exception, default=['X']), 7464adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao Sig('-c', action='append', dest='b'), 7474adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao ] 7484adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao failures = ['a', '-c', 'a -c', '-bx', '-b x'] 7494adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao successes = [ 7504adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao ('', NS(b=['X'])), 7514adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao ('-b', NS(b=['X', Exception])), 7524adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao ('-b -cx -b -cyz', NS(b=['X', Exception, 'x', Exception, 'yz'])), 7534adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao ] 7544adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao 7554adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao 7564adfde8bc82dd39f59e0445588c3e599ada477dJosh Gaoclass TestOptionalsActionCount(ParserTestCase): 7574adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao """Tests the count action for an Optional""" 7584adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao 7594adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao argument_signatures = [Sig('-x', action='count')] 7604adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao failures = ['a', '-x a', '-x b', '-x a -x b'] 7614adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao successes = [ 7624adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao ('', NS(x=None)), 7634adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao ('-x', NS(x=1)), 7644adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao ] 7654adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao 7664adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao 7674adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao# ================ 7684adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao# Positional tests 7694adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao# ================ 7704adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao 7714adfde8bc82dd39f59e0445588c3e599ada477dJosh Gaoclass TestPositionalsNargsNone(ParserTestCase): 7724adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao """Test a Positional that doesn't specify nargs""" 7734adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao 7744adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao argument_signatures = [Sig('foo')] 7754adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao failures = ['', '-x', 'a b'] 7764adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao successes = [ 7774adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao ('a', NS(foo='a')), 7784adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao ] 7794adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao 7804adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao 7814adfde8bc82dd39f59e0445588c3e599ada477dJosh Gaoclass TestPositionalsNargs1(ParserTestCase): 7824adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao """Test a Positional that specifies an nargs of 1""" 7834adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao 7844adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao argument_signatures = [Sig('foo', nargs=1)] 7854adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao failures = ['', '-x', 'a b'] 7864adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao successes = [ 7874adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao ('a', NS(foo=['a'])), 7884adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao ] 7894adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao 7904adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao 7914adfde8bc82dd39f59e0445588c3e599ada477dJosh Gaoclass TestPositionalsNargs2(ParserTestCase): 7924adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao """Test a Positional that specifies an nargs of 2""" 7934adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao 7944adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao argument_signatures = [Sig('foo', nargs=2)] 7954adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao failures = ['', 'a', '-x', 'a b c'] 7964adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao successes = [ 7974adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao ('a b', NS(foo=['a', 'b'])), 7984adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao ] 7994adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao 8004adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao 8014adfde8bc82dd39f59e0445588c3e599ada477dJosh Gaoclass TestPositionalsNargsZeroOrMore(ParserTestCase): 8024adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao """Test a Positional that specifies unlimited nargs""" 8034adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao 8044adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao argument_signatures = [Sig('foo', nargs='*')] 8054adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao failures = ['-x'] 8064adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao successes = [ 8074adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao ('', NS(foo=[])), 8084adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao ('a', NS(foo=['a'])), 8094adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao ('a b', NS(foo=['a', 'b'])), 8104adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao ] 8114adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao 8124adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao 8134adfde8bc82dd39f59e0445588c3e599ada477dJosh Gaoclass TestPositionalsNargsZeroOrMoreDefault(ParserTestCase): 8144adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao """Test a Positional that specifies unlimited nargs and a default""" 8154adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao 8164adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao argument_signatures = [Sig('foo', nargs='*', default='bar')] 8174adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao failures = ['-x'] 8184adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao successes = [ 8194adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao ('', NS(foo='bar')), 8204adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao ('a', NS(foo=['a'])), 8214adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao ('a b', NS(foo=['a', 'b'])), 8224adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao ] 8234adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao 8244adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao 8254adfde8bc82dd39f59e0445588c3e599ada477dJosh Gaoclass TestPositionalsNargsOneOrMore(ParserTestCase): 8264adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao """Test a Positional that specifies one or more nargs""" 8274adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao 8284adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao argument_signatures = [Sig('foo', nargs='+')] 8294adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao failures = ['', '-x'] 8304adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao successes = [ 8314adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao ('a', NS(foo=['a'])), 8324adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao ('a b', NS(foo=['a', 'b'])), 8334adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao ] 8344adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao 8354adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao 8364adfde8bc82dd39f59e0445588c3e599ada477dJosh Gaoclass TestPositionalsNargsOptional(ParserTestCase): 8374adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao """Tests an Optional Positional""" 8384adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao 8394adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao argument_signatures = [Sig('foo', nargs='?')] 8404adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao failures = ['-x', 'a b'] 8414adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao successes = [ 8424adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao ('', NS(foo=None)), 8434adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao ('a', NS(foo='a')), 8444adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao ] 8454adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao 8464adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao 8474adfde8bc82dd39f59e0445588c3e599ada477dJosh Gaoclass TestPositionalsNargsOptionalDefault(ParserTestCase): 8484adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao """Tests an Optional Positional with a default value""" 8494adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao 8504adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao argument_signatures = [Sig('foo', nargs='?', default=42)] 8514adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao failures = ['-x', 'a b'] 8524adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao successes = [ 8534adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao ('', NS(foo=42)), 8544adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao ('a', NS(foo='a')), 8554adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao ] 8564adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao 8574adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao 8584adfde8bc82dd39f59e0445588c3e599ada477dJosh Gaoclass TestPositionalsNargsOptionalConvertedDefault(ParserTestCase): 8594adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao """Tests an Optional Positional with a default value 8604adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao that needs to be converted to the appropriate type. 8614adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao """ 8624adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao 8634adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao argument_signatures = [ 8644adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao Sig('foo', nargs='?', type=int, default='42'), 8654adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao ] 8664adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao failures = ['-x', 'a b', '1 2'] 8674adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao successes = [ 8684adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao ('', NS(foo=42)), 8694adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao ('1', NS(foo=1)), 8704adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao ] 8714adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao 8724adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao 8734adfde8bc82dd39f59e0445588c3e599ada477dJosh Gaoclass TestPositionalsNargsNoneNone(ParserTestCase): 8744adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao """Test two Positionals that don't specify nargs""" 8754adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao 8764adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao argument_signatures = [Sig('foo'), Sig('bar')] 8774adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao failures = ['', '-x', 'a', 'a b c'] 8784adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao successes = [ 8794adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao ('a b', NS(foo='a', bar='b')), 8804adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao ] 8814adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao 8824adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao 8834adfde8bc82dd39f59e0445588c3e599ada477dJosh Gaoclass TestPositionalsNargsNone1(ParserTestCase): 8844adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao """Test a Positional with no nargs followed by one with 1""" 8854adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao 8864adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao argument_signatures = [Sig('foo'), Sig('bar', nargs=1)] 8874adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao failures = ['', '--foo', 'a', 'a b c'] 8884adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao successes = [ 8894adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao ('a b', NS(foo='a', bar=['b'])), 8904adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao ] 8914adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao 8924adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao 8934adfde8bc82dd39f59e0445588c3e599ada477dJosh Gaoclass TestPositionalsNargs2None(ParserTestCase): 8944adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao """Test a Positional with 2 nargs followed by one with none""" 8954adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao 8964adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao argument_signatures = [Sig('foo', nargs=2), Sig('bar')] 8974adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao failures = ['', '--foo', 'a', 'a b', 'a b c d'] 8984adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao successes = [ 8994adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao ('a b c', NS(foo=['a', 'b'], bar='c')), 9004adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao ] 9014adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao 9024adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao 9034adfde8bc82dd39f59e0445588c3e599ada477dJosh Gaoclass TestPositionalsNargsNoneZeroOrMore(ParserTestCase): 9044adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao """Test a Positional with no nargs followed by one with unlimited""" 9054adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao 9064adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao argument_signatures = [Sig('foo'), Sig('bar', nargs='*')] 9074adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao failures = ['', '--foo'] 9084adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao successes = [ 9094adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao ('a', NS(foo='a', bar=[])), 9104adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao ('a b', NS(foo='a', bar=['b'])), 9114adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao ('a b c', NS(foo='a', bar=['b', 'c'])), 9124adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao ] 9134adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao 9144adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao 9154adfde8bc82dd39f59e0445588c3e599ada477dJosh Gaoclass TestPositionalsNargsNoneOneOrMore(ParserTestCase): 9164adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao """Test a Positional with no nargs followed by one with one or more""" 9174adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao 9184adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao argument_signatures = [Sig('foo'), Sig('bar', nargs='+')] 9194adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao failures = ['', '--foo', 'a'] 9204adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao successes = [ 9214adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao ('a b', NS(foo='a', bar=['b'])), 9224adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao ('a b c', NS(foo='a', bar=['b', 'c'])), 9234adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao ] 9244adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao 9254adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao 9264adfde8bc82dd39f59e0445588c3e599ada477dJosh Gaoclass TestPositionalsNargsNoneOptional(ParserTestCase): 9274adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao """Test a Positional with no nargs followed by one with an Optional""" 9284adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao 9294adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao argument_signatures = [Sig('foo'), Sig('bar', nargs='?')] 9304adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao failures = ['', '--foo', 'a b c'] 9314adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao successes = [ 9324adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao ('a', NS(foo='a', bar=None)), 9334adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao ('a b', NS(foo='a', bar='b')), 9344adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao ] 9354adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao 9364adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao 9374adfde8bc82dd39f59e0445588c3e599ada477dJosh Gaoclass TestPositionalsNargsZeroOrMoreNone(ParserTestCase): 9384adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao """Test a Positional with unlimited nargs followed by one with none""" 9394adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao 9404adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao argument_signatures = [Sig('foo', nargs='*'), Sig('bar')] 9414adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao failures = ['', '--foo'] 9424adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao successes = [ 9434adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao ('a', NS(foo=[], bar='a')), 9444adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao ('a b', NS(foo=['a'], bar='b')), 9454adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao ('a b c', NS(foo=['a', 'b'], bar='c')), 9464adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao ] 9474adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao 9484adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao 9494adfde8bc82dd39f59e0445588c3e599ada477dJosh Gaoclass TestPositionalsNargsOneOrMoreNone(ParserTestCase): 9504adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao """Test a Positional with one or more nargs followed by one with none""" 9514adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao 9524adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao argument_signatures = [Sig('foo', nargs='+'), Sig('bar')] 9534adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao failures = ['', '--foo', 'a'] 9544adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao successes = [ 9554adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao ('a b', NS(foo=['a'], bar='b')), 9564adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao ('a b c', NS(foo=['a', 'b'], bar='c')), 9574adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao ] 9584adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao 9594adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao 9604adfde8bc82dd39f59e0445588c3e599ada477dJosh Gaoclass TestPositionalsNargsOptionalNone(ParserTestCase): 9614adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao """Test a Positional with an Optional nargs followed by one with none""" 9624adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao 9634adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao argument_signatures = [Sig('foo', nargs='?', default=42), Sig('bar')] 9644adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao failures = ['', '--foo', 'a b c'] 9654adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao successes = [ 9664adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao ('a', NS(foo=42, bar='a')), 9674adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao ('a b', NS(foo='a', bar='b')), 9684adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao ] 9694adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao 9704adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao 9714adfde8bc82dd39f59e0445588c3e599ada477dJosh Gaoclass TestPositionalsNargs2ZeroOrMore(ParserTestCase): 9724adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao """Test a Positional with 2 nargs followed by one with unlimited""" 9734adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao 9744adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao argument_signatures = [Sig('foo', nargs=2), Sig('bar', nargs='*')] 9754adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao failures = ['', '--foo', 'a'] 9764adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao successes = [ 9774adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao ('a b', NS(foo=['a', 'b'], bar=[])), 9784adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao ('a b c', NS(foo=['a', 'b'], bar=['c'])), 9794adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao ] 9804adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao 9814adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao 9824adfde8bc82dd39f59e0445588c3e599ada477dJosh Gaoclass TestPositionalsNargs2OneOrMore(ParserTestCase): 9834adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao """Test a Positional with 2 nargs followed by one with one or more""" 9844adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao 9854adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao argument_signatures = [Sig('foo', nargs=2), Sig('bar', nargs='+')] 9864adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao failures = ['', '--foo', 'a', 'a b'] 9874adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao successes = [ 9884adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao ('a b c', NS(foo=['a', 'b'], bar=['c'])), 9894adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao ] 9904adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao 9914adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao 9924adfde8bc82dd39f59e0445588c3e599ada477dJosh Gaoclass TestPositionalsNargs2Optional(ParserTestCase): 9934adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao """Test a Positional with 2 nargs followed by one optional""" 9944adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao 9954adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao argument_signatures = [Sig('foo', nargs=2), Sig('bar', nargs='?')] 9964adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao failures = ['', '--foo', 'a', 'a b c d'] 9974adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao successes = [ 9984adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao ('a b', NS(foo=['a', 'b'], bar=None)), 9994adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao ('a b c', NS(foo=['a', 'b'], bar='c')), 10004adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao ] 10014adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao 10024adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao 10034adfde8bc82dd39f59e0445588c3e599ada477dJosh Gaoclass TestPositionalsNargsZeroOrMore1(ParserTestCase): 10044adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao """Test a Positional with unlimited nargs followed by one with 1""" 10054adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao 10064adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao argument_signatures = [Sig('foo', nargs='*'), Sig('bar', nargs=1)] 10074adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao failures = ['', '--foo', ] 10084adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao successes = [ 10094adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao ('a', NS(foo=[], bar=['a'])), 10104adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao ('a b', NS(foo=['a'], bar=['b'])), 10114adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao ('a b c', NS(foo=['a', 'b'], bar=['c'])), 10124adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao ] 10134adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao 10144adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao 10154adfde8bc82dd39f59e0445588c3e599ada477dJosh Gaoclass TestPositionalsNargsOneOrMore1(ParserTestCase): 10164adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao """Test a Positional with one or more nargs followed by one with 1""" 10174adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao 10184adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao argument_signatures = [Sig('foo', nargs='+'), Sig('bar', nargs=1)] 10194adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao failures = ['', '--foo', 'a'] 10204adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao successes = [ 10214adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao ('a b', NS(foo=['a'], bar=['b'])), 10224adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao ('a b c', NS(foo=['a', 'b'], bar=['c'])), 10234adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao ] 10244adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao 10254adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao 10264adfde8bc82dd39f59e0445588c3e599ada477dJosh Gaoclass TestPositionalsNargsOptional1(ParserTestCase): 10274adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao """Test a Positional with an Optional nargs followed by one with 1""" 10284adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao 10294adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao argument_signatures = [Sig('foo', nargs='?'), Sig('bar', nargs=1)] 10304adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao failures = ['', '--foo', 'a b c'] 10314adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao successes = [ 10324adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao ('a', NS(foo=None, bar=['a'])), 10334adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao ('a b', NS(foo='a', bar=['b'])), 10344adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao ] 10354adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao 10364adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao 10374adfde8bc82dd39f59e0445588c3e599ada477dJosh Gaoclass TestPositionalsNargsNoneZeroOrMore1(ParserTestCase): 10384adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao """Test three Positionals: no nargs, unlimited nargs and 1 nargs""" 10394adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao 10404adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao argument_signatures = [ 10414adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao Sig('foo'), 10424adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao Sig('bar', nargs='*'), 10434adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao Sig('baz', nargs=1), 10444adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao ] 10454adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao failures = ['', '--foo', 'a'] 10464adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao successes = [ 10474adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao ('a b', NS(foo='a', bar=[], baz=['b'])), 10484adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao ('a b c', NS(foo='a', bar=['b'], baz=['c'])), 10494adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao ] 10504adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao 10514adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao 10524adfde8bc82dd39f59e0445588c3e599ada477dJosh Gaoclass TestPositionalsNargsNoneOneOrMore1(ParserTestCase): 10534adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao """Test three Positionals: no nargs, one or more nargs and 1 nargs""" 10544adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao 10554adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao argument_signatures = [ 10564adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao Sig('foo'), 10574adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao Sig('bar', nargs='+'), 10584adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao Sig('baz', nargs=1), 10594adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao ] 10604adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao failures = ['', '--foo', 'a', 'b'] 10614adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao successes = [ 10624adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao ('a b c', NS(foo='a', bar=['b'], baz=['c'])), 10634adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao ('a b c d', NS(foo='a', bar=['b', 'c'], baz=['d'])), 10644adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao ] 10654adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao 10664adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao 10674adfde8bc82dd39f59e0445588c3e599ada477dJosh Gaoclass TestPositionalsNargsNoneOptional1(ParserTestCase): 10684adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao """Test three Positionals: no nargs, optional narg and 1 nargs""" 10694adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao 10704adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao argument_signatures = [ 10714adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao Sig('foo'), 10724adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao Sig('bar', nargs='?', default=0.625), 10734adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao Sig('baz', nargs=1), 10744adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao ] 10754adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao failures = ['', '--foo', 'a'] 10764adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao successes = [ 10774adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao ('a b', NS(foo='a', bar=0.625, baz=['b'])), 10784adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao ('a b c', NS(foo='a', bar='b', baz=['c'])), 10794adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao ] 10804adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao 10814adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao 10824adfde8bc82dd39f59e0445588c3e599ada477dJosh Gaoclass TestPositionalsNargsOptionalOptional(ParserTestCase): 10834adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao """Test two optional nargs""" 10844adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao 10854adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao argument_signatures = [ 10864adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao Sig('foo', nargs='?'), 10874adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao Sig('bar', nargs='?', default=42), 10884adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao ] 10894adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao failures = ['--foo', 'a b c'] 10904adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao successes = [ 10914adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao ('', NS(foo=None, bar=42)), 10924adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao ('a', NS(foo='a', bar=42)), 10934adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao ('a b', NS(foo='a', bar='b')), 10944adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao ] 10954adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao 10964adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao 10974adfde8bc82dd39f59e0445588c3e599ada477dJosh Gaoclass TestPositionalsNargsOptionalZeroOrMore(ParserTestCase): 10984adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao """Test an Optional narg followed by unlimited nargs""" 10994adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao 11004adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao argument_signatures = [Sig('foo', nargs='?'), Sig('bar', nargs='*')] 11014adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao failures = ['--foo'] 11024adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao successes = [ 11034adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao ('', NS(foo=None, bar=[])), 11044adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao ('a', NS(foo='a', bar=[])), 11054adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao ('a b', NS(foo='a', bar=['b'])), 11064adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao ('a b c', NS(foo='a', bar=['b', 'c'])), 11074adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao ] 11084adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao 11094adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao 11104adfde8bc82dd39f59e0445588c3e599ada477dJosh Gaoclass TestPositionalsNargsOptionalOneOrMore(ParserTestCase): 11114adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao """Test an Optional narg followed by one or more nargs""" 11124adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao 11134adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao argument_signatures = [Sig('foo', nargs='?'), Sig('bar', nargs='+')] 11144adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao failures = ['', '--foo'] 11154adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao successes = [ 11164adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao ('a', NS(foo=None, bar=['a'])), 11174adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao ('a b', NS(foo='a', bar=['b'])), 11184adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao ('a b c', NS(foo='a', bar=['b', 'c'])), 11194adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao ] 11204adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao 11214adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao 11224adfde8bc82dd39f59e0445588c3e599ada477dJosh Gaoclass TestPositionalsChoicesString(ParserTestCase): 11234adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao """Test a set of single-character choices""" 11244adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao 11254adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao argument_signatures = [Sig('spam', choices=set('abcdefg'))] 11264adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao failures = ['', '--foo', 'h', '42', 'ef'] 11274adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao successes = [ 11284adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao ('a', NS(spam='a')), 11294adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao ('g', NS(spam='g')), 11304adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao ] 11314adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao 11324adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao 11334adfde8bc82dd39f59e0445588c3e599ada477dJosh Gaoclass TestPositionalsChoicesInt(ParserTestCase): 11344adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao """Test a set of integer choices""" 11354adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao 11364adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao argument_signatures = [Sig('spam', type=int, choices=range(20))] 11374adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao failures = ['', '--foo', 'h', '42', 'ef'] 11384adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao successes = [ 11394adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao ('4', NS(spam=4)), 11404adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao ('15', NS(spam=15)), 11414adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao ] 11424adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao 11434adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao 11444adfde8bc82dd39f59e0445588c3e599ada477dJosh Gaoclass TestPositionalsActionAppend(ParserTestCase): 11454adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao """Test the 'append' action""" 11464adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao 11474adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao argument_signatures = [ 11484adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao Sig('spam', action='append'), 11494adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao Sig('spam', action='append', nargs=2), 11504adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao ] 11514adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao failures = ['', '--foo', 'a', 'a b', 'a b c d'] 11524adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao successes = [ 11534adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao ('a b c', NS(spam=['a', ['b', 'c']])), 11544adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao ] 11554adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao 11564adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao# ======================================== 11574adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao# Combined optionals and positionals tests 11584adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao# ======================================== 11594adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao 11604adfde8bc82dd39f59e0445588c3e599ada477dJosh Gaoclass TestOptionalsNumericAndPositionals(ParserTestCase): 11614adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao """Tests negative number args when numeric options are present""" 11624adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao 11634adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao argument_signatures = [ 11644adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao Sig('x', nargs='?'), 11654adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao Sig('-4', dest='y', action='store_true'), 11664adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao ] 11674adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao failures = ['-2', '-315'] 11684adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao successes = [ 11694adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao ('', NS(x=None, y=False)), 11704adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao ('a', NS(x='a', y=False)), 11714adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao ('-4', NS(x=None, y=True)), 11724adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao ('-4 a', NS(x='a', y=True)), 11734adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao ] 11744adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao 11754adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao 11764adfde8bc82dd39f59e0445588c3e599ada477dJosh Gaoclass TestOptionalsAlmostNumericAndPositionals(ParserTestCase): 11774adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao """Tests negative number args when almost numeric options are present""" 11784adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao 11794adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao argument_signatures = [ 11804adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao Sig('x', nargs='?'), 11814adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao Sig('-k4', dest='y', action='store_true'), 11824adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao ] 11834adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao failures = ['-k3'] 11844adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao successes = [ 11854adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao ('', NS(x=None, y=False)), 11864adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao ('-2', NS(x='-2', y=False)), 11874adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao ('a', NS(x='a', y=False)), 11884adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao ('-k4', NS(x=None, y=True)), 11894adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao ('-k4 a', NS(x='a', y=True)), 11904adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao ] 11914adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao 11924adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao 11934adfde8bc82dd39f59e0445588c3e599ada477dJosh Gaoclass TestEmptyAndSpaceContainingArguments(ParserTestCase): 11944adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao 11954adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao argument_signatures = [ 11964adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao Sig('x', nargs='?'), 11974adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao Sig('-y', '--yyy', dest='y'), 11984adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao ] 11994adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao failures = ['-y'] 12004adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao successes = [ 12014adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao ([''], NS(x='', y=None)), 12024adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao (['a badger'], NS(x='a badger', y=None)), 12034adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao (['-a badger'], NS(x='-a badger', y=None)), 12044adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao (['-y', ''], NS(x=None, y='')), 12054adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao (['-y', 'a badger'], NS(x=None, y='a badger')), 12064adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao (['-y', '-a badger'], NS(x=None, y='-a badger')), 12074adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao (['--yyy=a badger'], NS(x=None, y='a badger')), 12084adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao (['--yyy=-a badger'], NS(x=None, y='-a badger')), 12094adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao ] 12104adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao 12114adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao 12124adfde8bc82dd39f59e0445588c3e599ada477dJosh Gaoclass TestPrefixCharacterOnlyArguments(ParserTestCase): 12134adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao 12144adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao parser_signature = Sig(prefix_chars='-+') 12154adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao argument_signatures = [ 12164adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao Sig('-', dest='x', nargs='?', const='badger'), 12174adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao Sig('+', dest='y', type=int, default=42), 12184adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao Sig('-+-', dest='z', action='store_true'), 12194adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao ] 12204adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao failures = ['-y', '+ -'] 12214adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao successes = [ 12224adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao ('', NS(x=None, y=42, z=False)), 12234adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao ('-', NS(x='badger', y=42, z=False)), 12244adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao ('- X', NS(x='X', y=42, z=False)), 12254adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao ('+ -3', NS(x=None, y=-3, z=False)), 12264adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao ('-+-', NS(x=None, y=42, z=True)), 12274adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao ('- ===', NS(x='===', y=42, z=False)), 12284adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao ] 12294adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao 12304adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao 12314adfde8bc82dd39f59e0445588c3e599ada477dJosh Gaoclass TestNargsZeroOrMore(ParserTestCase): 12324adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao """Tests specifying an args for an Optional that accepts zero or more""" 12334adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao 12344adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao argument_signatures = [Sig('-x', nargs='*'), Sig('y', nargs='*')] 12354adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao failures = [] 12364adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao successes = [ 12374adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao ('', NS(x=None, y=[])), 12384adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao ('-x', NS(x=[], y=[])), 12394adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao ('-x a', NS(x=['a'], y=[])), 12404adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao ('-x a -- b', NS(x=['a'], y=['b'])), 12414adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao ('a', NS(x=None, y=['a'])), 12424adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao ('a -x', NS(x=[], y=['a'])), 12434adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao ('a -x b', NS(x=['b'], y=['a'])), 12444adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao ] 12454adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao 12464adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao 12474adfde8bc82dd39f59e0445588c3e599ada477dJosh Gaoclass TestNargsRemainder(ParserTestCase): 12484adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao """Tests specifying a positional with nargs=REMAINDER""" 12494adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao 12504adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao argument_signatures = [Sig('x'), Sig('y', nargs='...'), Sig('-z')] 12514adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao failures = ['', '-z', '-z Z'] 12524adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao successes = [ 12534adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao ('X', NS(x='X', y=[], z=None)), 12544adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao ('-z Z X', NS(x='X', y=[], z='Z')), 12554adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao ('X A B -z Z', NS(x='X', y=['A', 'B', '-z', 'Z'], z=None)), 12564adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao ('X Y --foo', NS(x='X', y=['Y', '--foo'], z=None)), 12574adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao ] 12584adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao 12594adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao 12604adfde8bc82dd39f59e0445588c3e599ada477dJosh Gaoclass TestOptionLike(ParserTestCase): 12614adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao """Tests options that may or may not be arguments""" 12624adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao 12634adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao argument_signatures = [ 12644adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao Sig('-x', type=float), 12654adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao Sig('-3', type=float, dest='y'), 12664adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao Sig('z', nargs='*'), 12674adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao ] 12684adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao failures = ['-x', '-y2.5', '-xa', '-x -a', 12694adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao '-x -3', '-x -3.5', '-3 -3.5', 12704adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao '-x -2.5', '-x -2.5 a', '-3 -.5', 12714adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao 'a x -1', '-x -1 a', '-3 -1 a'] 12724adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao successes = [ 12734adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao ('', NS(x=None, y=None, z=[])), 12744adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao ('-x 2.5', NS(x=2.5, y=None, z=[])), 12754adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao ('-x 2.5 a', NS(x=2.5, y=None, z=['a'])), 12764adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao ('-3.5', NS(x=None, y=0.5, z=[])), 12774adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao ('-3-.5', NS(x=None, y=-0.5, z=[])), 12784adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao ('-3 .5', NS(x=None, y=0.5, z=[])), 12794adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao ('a -3.5', NS(x=None, y=0.5, z=['a'])), 12804adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao ('a', NS(x=None, y=None, z=['a'])), 12814adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao ('a -x 1', NS(x=1.0, y=None, z=['a'])), 12824adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao ('-x 1 a', NS(x=1.0, y=None, z=['a'])), 12834adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao ('-3 1 a', NS(x=None, y=1.0, z=['a'])), 12844adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao ] 12854adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao 12864adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao 12874adfde8bc82dd39f59e0445588c3e599ada477dJosh Gaoclass TestDefaultSuppress(ParserTestCase): 12884adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao """Test actions with suppressed defaults""" 12894adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao 12904adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao argument_signatures = [ 12914adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao Sig('foo', nargs='?', default=argparse.SUPPRESS), 12924adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao Sig('bar', nargs='*', default=argparse.SUPPRESS), 12934adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao Sig('--baz', action='store_true', default=argparse.SUPPRESS), 12944adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao ] 12954adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao failures = ['-x'] 12964adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao successes = [ 12974adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao ('', NS()), 12984adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao ('a', NS(foo='a')), 12994adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao ('a b', NS(foo='a', bar=['b'])), 13004adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao ('--baz', NS(baz=True)), 13014adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao ('a --baz', NS(foo='a', baz=True)), 13024adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao ('--baz a b', NS(foo='a', bar=['b'], baz=True)), 13034adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao ] 13044adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao 13054adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao 13064adfde8bc82dd39f59e0445588c3e599ada477dJosh Gaoclass TestParserDefaultSuppress(ParserTestCase): 13074adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao """Test actions with a parser-level default of SUPPRESS""" 13084adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao 13094adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao parser_signature = Sig(argument_default=argparse.SUPPRESS) 13104adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao argument_signatures = [ 13114adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao Sig('foo', nargs='?'), 13124adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao Sig('bar', nargs='*'), 13134adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao Sig('--baz', action='store_true'), 13144adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao ] 13154adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao failures = ['-x'] 13164adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao successes = [ 13174adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao ('', NS()), 13184adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao ('a', NS(foo='a')), 13194adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao ('a b', NS(foo='a', bar=['b'])), 13204adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao ('--baz', NS(baz=True)), 13214adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao ('a --baz', NS(foo='a', baz=True)), 13224adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao ('--baz a b', NS(foo='a', bar=['b'], baz=True)), 13234adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao ] 13244adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao 13254adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao 13264adfde8bc82dd39f59e0445588c3e599ada477dJosh Gaoclass TestParserDefault42(ParserTestCase): 13274adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao """Test actions with a parser-level default of 42""" 13284adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao 13294adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao parser_signature = Sig(argument_default=42, version='1.0') 13304adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao argument_signatures = [ 13314adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao Sig('foo', nargs='?'), 13324adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao Sig('bar', nargs='*'), 13334adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao Sig('--baz', action='store_true'), 13344adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao ] 13354adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao failures = ['-x'] 13364adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao successes = [ 13374adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao ('', NS(foo=42, bar=42, baz=42)), 13384adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao ('a', NS(foo='a', bar=42, baz=42)), 13394adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao ('a b', NS(foo='a', bar=['b'], baz=42)), 13404adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao ('--baz', NS(foo=42, bar=42, baz=True)), 13414adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao ('a --baz', NS(foo='a', bar=42, baz=True)), 13424adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao ('--baz a b', NS(foo='a', bar=['b'], baz=True)), 13434adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao ] 13444adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao 13454adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao 13464adfde8bc82dd39f59e0445588c3e599ada477dJosh Gaoclass TestArgumentsFromFile(TempDirMixin, ParserTestCase): 13474adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao """Test reading arguments from a file""" 13484adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao 13494adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao def setUp(self): 13504adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao super(TestArgumentsFromFile, self).setUp() 13514adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao file_texts = [ 13524adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao ('hello', 'hello world!\n'), 13534adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao ('recursive', '-a\n' 13544adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao 'A\n' 13554adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao '@hello'), 13564adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao ('invalid', '@no-such-path\n'), 13574adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao ] 13584adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao for path, text in file_texts: 13594adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao file = open(path, 'w') 13604adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao file.write(text) 13614adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao file.close() 13624adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao 13634adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao parser_signature = Sig(fromfile_prefix_chars='@') 13644adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao argument_signatures = [ 13654adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao Sig('-a'), 13664adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao Sig('x'), 13674adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao Sig('y', nargs='+'), 13684adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao ] 13694adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao failures = ['', '-b', 'X', '@invalid', '@missing'] 13704adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao successes = [ 13714adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao ('X Y', NS(a=None, x='X', y=['Y'])), 13724adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao ('X -a A Y Z', NS(a='A', x='X', y=['Y', 'Z'])), 13734adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao ('@hello X', NS(a=None, x='hello world!', y=['X'])), 13744adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao ('X @hello', NS(a=None, x='X', y=['hello world!'])), 13754adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao ('-a B @recursive Y Z', NS(a='A', x='hello world!', y=['Y', 'Z'])), 13764adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao ('X @recursive Z -a B', NS(a='B', x='X', y=['hello world!', 'Z'])), 13774adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao (["-a", "", "X", "Y"], NS(a='', x='X', y=['Y'])), 13784adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao ] 13794adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao 13804adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao 13814adfde8bc82dd39f59e0445588c3e599ada477dJosh Gaoclass TestArgumentsFromFileConverter(TempDirMixin, ParserTestCase): 13824adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao """Test reading arguments from a file""" 13834adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao 13844adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao def setUp(self): 13854adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao super(TestArgumentsFromFileConverter, self).setUp() 13864adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao file_texts = [ 13874adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao ('hello', 'hello world!\n'), 13884adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao ] 13894adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao for path, text in file_texts: 13904adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao file = open(path, 'w') 13914adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao file.write(text) 13924adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao file.close() 13934adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao 13944adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao class FromFileConverterArgumentParser(ErrorRaisingArgumentParser): 13954adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao 13964adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao def convert_arg_line_to_args(self, arg_line): 13974adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao for arg in arg_line.split(): 13984adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao if not arg.strip(): 13994adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao continue 14004adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao yield arg 14014adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao parser_class = FromFileConverterArgumentParser 14024adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao parser_signature = Sig(fromfile_prefix_chars='@') 14034adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao argument_signatures = [ 14044adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao Sig('y', nargs='+'), 14054adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao ] 14064adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao failures = [] 14074adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao successes = [ 14084adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao ('@hello X', NS(y=['hello', 'world!', 'X'])), 14094adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao ] 14104adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao 14114adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao 14124adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao# ===================== 14134adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao# Type conversion tests 14144adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao# ===================== 14154adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao 14164adfde8bc82dd39f59e0445588c3e599ada477dJosh Gaoclass TestFileTypeRepr(TestCase): 14174adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao 14184adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao def test_r(self): 14194adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao type = argparse.FileType('r') 14204adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao self.assertEqual("FileType('r')", repr(type)) 14214adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao 14224adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao def test_wb_1(self): 14234adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao type = argparse.FileType('wb', 1) 14244adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao self.assertEqual("FileType('wb', 1)", repr(type)) 14254adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao 14264adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao 14274adfde8bc82dd39f59e0445588c3e599ada477dJosh Gaoclass RFile(object): 14284adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao seen = {} 14294adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao 14304adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao def __init__(self, name): 14314adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao self.name = name 14324adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao 14334adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao __hash__ = None 14344adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao 14354adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao def __eq__(self, other): 14364adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao if other in self.seen: 14374adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao text = self.seen[other] 14384adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao else: 14394adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao text = self.seen[other] = other.read() 14404adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao other.close() 14414adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao if not isinstance(text, str): 14424adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao text = text.decode('ascii') 14434adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao return self.name == other.name == text 14444adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao 14454adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao 14464adfde8bc82dd39f59e0445588c3e599ada477dJosh Gaoclass TestFileTypeR(TempDirMixin, ParserTestCase): 14474adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao """Test the FileType option/argument type for reading files""" 14484adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao 14494adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao def setUp(self): 14504adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao super(TestFileTypeR, self).setUp() 14514adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao for file_name in ['foo', 'bar']: 14524adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao file = open(os.path.join(self.temp_dir, file_name), 'w') 14534adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao file.write(file_name) 14544adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao file.close() 14554adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao self.create_readonly_file('readonly') 14564adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao 14574adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao argument_signatures = [ 14584adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao Sig('-x', type=argparse.FileType()), 14594adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao Sig('spam', type=argparse.FileType('r')), 14604adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao ] 14614adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao failures = ['-x', '-x bar', 'non-existent-file.txt'] 14624adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao successes = [ 14634adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao ('foo', NS(x=None, spam=RFile('foo'))), 14644adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao ('-x foo bar', NS(x=RFile('foo'), spam=RFile('bar'))), 14654adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao ('bar -x foo', NS(x=RFile('foo'), spam=RFile('bar'))), 14664adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao ('-x - -', NS(x=sys.stdin, spam=sys.stdin)), 14674adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao ('readonly', NS(x=None, spam=RFile('readonly'))), 14684adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao ] 14694adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao 14704adfde8bc82dd39f59e0445588c3e599ada477dJosh Gaoclass TestFileTypeDefaults(TempDirMixin, ParserTestCase): 14714adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao """Test that a file is not created unless the default is needed""" 14724adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao def setUp(self): 14734adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao super(TestFileTypeDefaults, self).setUp() 14744adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao file = open(os.path.join(self.temp_dir, 'good'), 'w') 14754adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao file.write('good') 14764adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao file.close() 14774adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao 14784adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao argument_signatures = [ 14794adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao Sig('-c', type=argparse.FileType('r'), default='no-file.txt'), 14804adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao ] 14814adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao # should provoke no such file error 14824adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao failures = [''] 14834adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao # should not provoke error because default file is created 14844adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao successes = [('-c good', NS(c=RFile('good')))] 14854adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao 14864adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao 14874adfde8bc82dd39f59e0445588c3e599ada477dJosh Gaoclass TestFileTypeRB(TempDirMixin, ParserTestCase): 14884adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao """Test the FileType option/argument type for reading files""" 14894adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao 14904adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao def setUp(self): 14914adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao super(TestFileTypeRB, self).setUp() 14924adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao for file_name in ['foo', 'bar']: 14934adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao file = open(os.path.join(self.temp_dir, file_name), 'w') 14944adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao file.write(file_name) 14954adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao file.close() 14964adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao 14974adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao argument_signatures = [ 14984adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao Sig('-x', type=argparse.FileType('rb')), 14994adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao Sig('spam', type=argparse.FileType('rb')), 15004adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao ] 15014adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao failures = ['-x', '-x bar'] 15024adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao successes = [ 15034adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao ('foo', NS(x=None, spam=RFile('foo'))), 15044adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao ('-x foo bar', NS(x=RFile('foo'), spam=RFile('bar'))), 15054adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao ('bar -x foo', NS(x=RFile('foo'), spam=RFile('bar'))), 15064adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao ('-x - -', NS(x=sys.stdin, spam=sys.stdin)), 15074adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao ] 15084adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao 15094adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao 15104adfde8bc82dd39f59e0445588c3e599ada477dJosh Gaoclass WFile(object): 15114adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao seen = set() 15124adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao 15134adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao def __init__(self, name): 15144adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao self.name = name 15154adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao 15164adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao __hash__ = None 15174adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao 15184adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao def __eq__(self, other): 15194adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao if other not in self.seen: 15204adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao text = 'Check that file is writable.' 15214adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao if 'b' in other.mode: 15224adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao text = text.encode('ascii') 15234adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao other.write(text) 15244adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao other.close() 15254adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao self.seen.add(other) 15264adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao return self.name == other.name 15274adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao 15284adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao 15294adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao@unittest.skipIf(hasattr(os, 'geteuid') and os.geteuid() == 0, 15304adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao "non-root user required") 15314adfde8bc82dd39f59e0445588c3e599ada477dJosh Gaoclass TestFileTypeW(TempDirMixin, ParserTestCase): 15324adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao """Test the FileType option/argument type for writing files""" 15334adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao 15344adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao def setUp(self): 15354adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao super(TestFileTypeW, self).setUp() 15364adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao self.create_readonly_file('readonly') 15374adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao 15384adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao argument_signatures = [ 15394adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao Sig('-x', type=argparse.FileType('w')), 15404adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao Sig('spam', type=argparse.FileType('w')), 15414adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao ] 15424adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao failures = ['-x', '-x bar'] 15434adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao failures = ['-x', '-x bar', 'readonly'] 15444adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao successes = [ 15454adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao ('foo', NS(x=None, spam=WFile('foo'))), 15464adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao ('-x foo bar', NS(x=WFile('foo'), spam=WFile('bar'))), 15474adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao ('bar -x foo', NS(x=WFile('foo'), spam=WFile('bar'))), 15484adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao ('-x - -', NS(x=sys.stdout, spam=sys.stdout)), 15494adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao ] 15504adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao 15514adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao 15524adfde8bc82dd39f59e0445588c3e599ada477dJosh Gaoclass TestFileTypeWB(TempDirMixin, ParserTestCase): 15534adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao 15544adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao argument_signatures = [ 15554adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao Sig('-x', type=argparse.FileType('wb')), 15564adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao Sig('spam', type=argparse.FileType('wb')), 15574adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao ] 15584adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao failures = ['-x', '-x bar'] 15594adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao successes = [ 15604adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao ('foo', NS(x=None, spam=WFile('foo'))), 15614adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao ('-x foo bar', NS(x=WFile('foo'), spam=WFile('bar'))), 15624adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao ('bar -x foo', NS(x=WFile('foo'), spam=WFile('bar'))), 15634adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao ('-x - -', NS(x=sys.stdout, spam=sys.stdout)), 15644adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao ] 15654adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao 15664adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao 15674adfde8bc82dd39f59e0445588c3e599ada477dJosh Gaoclass TestTypeCallable(ParserTestCase): 15684adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao """Test some callables as option/argument types""" 15694adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao 15704adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao argument_signatures = [ 15714adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao Sig('--eggs', type=complex), 15724adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao Sig('spam', type=float), 15734adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao ] 15744adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao failures = ['a', '42j', '--eggs a', '--eggs 2i'] 15754adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao successes = [ 15764adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao ('--eggs=42 42', NS(eggs=42, spam=42.0)), 15774adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao ('--eggs 2j -- -1.5', NS(eggs=2j, spam=-1.5)), 15784adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao ('1024.675', NS(eggs=None, spam=1024.675)), 15794adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao ] 15804adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao 15814adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao 15824adfde8bc82dd39f59e0445588c3e599ada477dJosh Gaoclass TestTypeUserDefined(ParserTestCase): 15834adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao """Test a user-defined option/argument type""" 15844adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao 15854adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao class MyType(TestCase): 15864adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao 15874adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao def __init__(self, value): 15884adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao self.value = value 15894adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao 15904adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao __hash__ = None 15914adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao 15924adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao def __eq__(self, other): 15934adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao return (type(self), self.value) == (type(other), other.value) 15944adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao 15954adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao argument_signatures = [ 15964adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao Sig('-x', type=MyType), 15974adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao Sig('spam', type=MyType), 15984adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao ] 15994adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao failures = [] 16004adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao successes = [ 16014adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao ('a -x b', NS(x=MyType('b'), spam=MyType('a'))), 16024adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao ('-xf g', NS(x=MyType('f'), spam=MyType('g'))), 16034adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao ] 16044adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao 16054adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao 16064adfde8bc82dd39f59e0445588c3e599ada477dJosh Gaoclass TestTypeClassicClass(ParserTestCase): 16074adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao """Test a classic class type""" 16084adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao 16094adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao class C: 16104adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao 16114adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao def __init__(self, value): 16124adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao self.value = value 16134adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao 16144adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao __hash__ = None 16154adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao 16164adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao def __eq__(self, other): 16174adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao return (type(self), self.value) == (type(other), other.value) 16184adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao 16194adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao argument_signatures = [ 16204adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao Sig('-x', type=C), 16214adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao Sig('spam', type=C), 16224adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao ] 16234adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao failures = [] 16244adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao successes = [ 16254adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao ('a -x b', NS(x=C('b'), spam=C('a'))), 16264adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao ('-xf g', NS(x=C('f'), spam=C('g'))), 16274adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao ] 16284adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao 16294adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao 16304adfde8bc82dd39f59e0445588c3e599ada477dJosh Gaoclass TestTypeRegistration(TestCase): 16314adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao """Test a user-defined type by registering it""" 16324adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao 16334adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao def test(self): 16344adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao 16354adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao def get_my_type(string): 16364adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao return 'my_type{%s}' % string 16374adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao 16384adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao parser = argparse.ArgumentParser() 16394adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao parser.register('type', 'my_type', get_my_type) 16404adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao parser.add_argument('-x', type='my_type') 16414adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao parser.add_argument('y', type='my_type') 16424adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao 16434adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao self.assertEqual(parser.parse_args('1'.split()), 16444adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao NS(x=None, y='my_type{1}')) 16454adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao self.assertEqual(parser.parse_args('-x 1 42'.split()), 16464adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao NS(x='my_type{1}', y='my_type{42}')) 16474adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao 16484adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao 16494adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao# ============ 16504adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao# Action tests 16514adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao# ============ 16524adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao 16534adfde8bc82dd39f59e0445588c3e599ada477dJosh Gaoclass TestActionUserDefined(ParserTestCase): 16544adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao """Test a user-defined option/argument action""" 16554adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao 16564adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao class OptionalAction(argparse.Action): 16574adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao 16584adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao def __call__(self, parser, namespace, value, option_string=None): 16594adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao try: 16604adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao # check destination and option string 16614adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao assert self.dest == 'spam', 'dest: %s' % self.dest 16624adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao assert option_string == '-s', 'flag: %s' % option_string 16634adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao # when option is before argument, badger=2, and when 16644adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao # option is after argument, badger=<whatever was set> 16654adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao expected_ns = NS(spam=0.25) 16664adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao if value in [0.125, 0.625]: 16674adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao expected_ns.badger = 2 16684adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao elif value in [2.0]: 16694adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao expected_ns.badger = 84 16704adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao else: 16714adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao raise AssertionError('value: %s' % value) 16724adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao assert expected_ns == namespace, ('expected %s, got %s' % 16734adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao (expected_ns, namespace)) 16744adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao except AssertionError: 16754adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao e = sys.exc_info()[1] 16764adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao raise ArgumentParserError('opt_action failed: %s' % e) 16774adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao setattr(namespace, 'spam', value) 16784adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao 16794adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao class PositionalAction(argparse.Action): 16804adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao 16814adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao def __call__(self, parser, namespace, value, option_string=None): 16824adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao try: 16834adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao assert option_string is None, ('option_string: %s' % 16844adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao option_string) 16854adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao # check destination 16864adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao assert self.dest == 'badger', 'dest: %s' % self.dest 16874adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao # when argument is before option, spam=0.25, and when 16884adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao # option is after argument, spam=<whatever was set> 16894adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao expected_ns = NS(badger=2) 16904adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao if value in [42, 84]: 16914adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao expected_ns.spam = 0.25 16924adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao elif value in [1]: 16934adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao expected_ns.spam = 0.625 16944adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao elif value in [2]: 16954adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao expected_ns.spam = 0.125 16964adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao else: 16974adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao raise AssertionError('value: %s' % value) 16984adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao assert expected_ns == namespace, ('expected %s, got %s' % 16994adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao (expected_ns, namespace)) 17004adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao except AssertionError: 17014adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao e = sys.exc_info()[1] 17024adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao raise ArgumentParserError('arg_action failed: %s' % e) 17034adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao setattr(namespace, 'badger', value) 17044adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao 17054adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao argument_signatures = [ 17064adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao Sig('-s', dest='spam', action=OptionalAction, 17074adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao type=float, default=0.25), 17084adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao Sig('badger', action=PositionalAction, 17094adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao type=int, nargs='?', default=2), 17104adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao ] 17114adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao failures = [] 17124adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao successes = [ 17134adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao ('-s0.125', NS(spam=0.125, badger=2)), 17144adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao ('42', NS(spam=0.25, badger=42)), 17154adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao ('-s 0.625 1', NS(spam=0.625, badger=1)), 17164adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao ('84 -s2', NS(spam=2.0, badger=84)), 17174adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao ] 17184adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao 17194adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao 17204adfde8bc82dd39f59e0445588c3e599ada477dJosh Gaoclass TestActionRegistration(TestCase): 17214adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao """Test a user-defined action supplied by registering it""" 17224adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao 17234adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao class MyAction(argparse.Action): 17244adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao 17254adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao def __call__(self, parser, namespace, values, option_string=None): 17264adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao setattr(namespace, self.dest, 'foo[%s]' % values) 17274adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao 17284adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao def test(self): 17294adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao 17304adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao parser = argparse.ArgumentParser() 17314adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao parser.register('action', 'my_action', self.MyAction) 17324adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao parser.add_argument('badger', action='my_action') 17334adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao 17344adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao self.assertEqual(parser.parse_args(['1']), NS(badger='foo[1]')) 17354adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao self.assertEqual(parser.parse_args(['42']), NS(badger='foo[42]')) 17364adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao 17374adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao 17384adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao# ================ 17394adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao# Subparsers tests 17404adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao# ================ 17414adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao 17424adfde8bc82dd39f59e0445588c3e599ada477dJosh Gaoclass TestAddSubparsers(TestCase): 17434adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao """Test the add_subparsers method""" 17444adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao 17454adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao def assertArgumentParserError(self, *args, **kwargs): 17464adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao self.assertRaises(ArgumentParserError, *args, **kwargs) 17474adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao 17484adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao def _get_parser(self, subparser_help=False, prefix_chars=None): 17494adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao # create a parser with a subparsers argument 17504adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao if prefix_chars: 17514adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao parser = ErrorRaisingArgumentParser( 17524adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao prog='PROG', description='main description', prefix_chars=prefix_chars) 17534adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao parser.add_argument( 17544adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao prefix_chars[0] * 2 + 'foo', action='store_true', help='foo help') 17554adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao else: 17564adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao parser = ErrorRaisingArgumentParser( 17574adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao prog='PROG', description='main description') 17584adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao parser.add_argument( 17594adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao '--foo', action='store_true', help='foo help') 17604adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao parser.add_argument( 17614adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao 'bar', type=float, help='bar help') 17624adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao 17634adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao # check that only one subparsers argument can be added 17644adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao subparsers = parser.add_subparsers(help='command help') 17654adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao self.assertArgumentParserError(parser.add_subparsers) 17664adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao 17674adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao # add first sub-parser 17684adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao parser1_kwargs = dict(description='1 description') 17694adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao if subparser_help: 17704adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao parser1_kwargs['help'] = '1 help' 17714adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao parser1 = subparsers.add_parser('1', **parser1_kwargs) 17724adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao parser1.add_argument('-w', type=int, help='w help') 17734adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao parser1.add_argument('x', choices='abc', help='x help') 17744adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao 17754adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao # add second sub-parser 17764adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao parser2_kwargs = dict(description='2 description') 17774adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao if subparser_help: 17784adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao parser2_kwargs['help'] = '2 help' 17794adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao parser2 = subparsers.add_parser('2', **parser2_kwargs) 17804adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao parser2.add_argument('-y', choices='123', help='y help') 17814adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao parser2.add_argument('z', type=complex, nargs='*', help='z help') 17824adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao 17834adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao # add third sub-parser 17844adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao parser3_kwargs = dict(description='3 description') 17854adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao if subparser_help: 17864adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao parser3_kwargs['help'] = '3 help' 17874adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao parser3 = subparsers.add_parser('3', **parser3_kwargs) 17884adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao parser3.add_argument('t', type=int, help='t help') 17894adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao parser3.add_argument('u', nargs='...', help='u help') 17904adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao 17914adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao # return the main parser 17924adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao return parser 17934adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao 17944adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao def setUp(self): 17954adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao super(TestAddSubparsers, self).setUp() 17964adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao self.parser = self._get_parser() 17974adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao self.command_help_parser = self._get_parser(subparser_help=True) 17984adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao 17994adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao def test_parse_args_failures(self): 18004adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao # check some failure cases: 18014adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao for args_str in ['', 'a', 'a a', '0.5 a', '0.5 1', 18024adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao '0.5 1 -y', '0.5 2 -w']: 18034adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao args = args_str.split() 18044adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao self.assertArgumentParserError(self.parser.parse_args, args) 18054adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao 18064adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao def test_parse_args(self): 18074adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao # check some non-failure cases: 18084adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao self.assertEqual( 18094adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao self.parser.parse_args('0.5 1 b -w 7'.split()), 18104adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao NS(foo=False, bar=0.5, w=7, x='b'), 18114adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao ) 18124adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao self.assertEqual( 18134adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao self.parser.parse_args('0.25 --foo 2 -y 2 3j -- -1j'.split()), 18144adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao NS(foo=True, bar=0.25, y='2', z=[3j, -1j]), 18154adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao ) 18164adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao self.assertEqual( 18174adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao self.parser.parse_args('--foo 0.125 1 c'.split()), 18184adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao NS(foo=True, bar=0.125, w=None, x='c'), 18194adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao ) 18204adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao self.assertEqual( 18214adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao self.parser.parse_args('-1.5 3 11 -- a --foo 7 -- b'.split()), 18224adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao NS(foo=False, bar=-1.5, t=11, u=['a', '--foo', '7', '--', 'b']), 18234adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao ) 18244adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao 18254adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao def test_parse_known_args(self): 18264adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao self.assertEqual( 18274adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao self.parser.parse_known_args('0.5 1 b -w 7'.split()), 18284adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao (NS(foo=False, bar=0.5, w=7, x='b'), []), 18294adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao ) 18304adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao self.assertEqual( 18314adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao self.parser.parse_known_args('0.5 -p 1 b -w 7'.split()), 18324adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao (NS(foo=False, bar=0.5, w=7, x='b'), ['-p']), 18334adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao ) 18344adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao self.assertEqual( 18354adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao self.parser.parse_known_args('0.5 1 b -w 7 -p'.split()), 18364adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao (NS(foo=False, bar=0.5, w=7, x='b'), ['-p']), 18374adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao ) 18384adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao self.assertEqual( 18394adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao self.parser.parse_known_args('0.5 1 b -q -rs -w 7'.split()), 18404adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao (NS(foo=False, bar=0.5, w=7, x='b'), ['-q', '-rs']), 18414adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao ) 18424adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao self.assertEqual( 18434adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao self.parser.parse_known_args('0.5 -W 1 b -X Y -w 7 Z'.split()), 18444adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao (NS(foo=False, bar=0.5, w=7, x='b'), ['-W', '-X', 'Y', 'Z']), 18454adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao ) 18464adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao 18474adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao def test_dest(self): 18484adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao parser = ErrorRaisingArgumentParser() 18494adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao parser.add_argument('--foo', action='store_true') 18504adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao subparsers = parser.add_subparsers(dest='bar') 18514adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao parser1 = subparsers.add_parser('1') 18524adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao parser1.add_argument('baz') 18534adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao self.assertEqual(NS(foo=False, bar='1', baz='2'), 18544adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao parser.parse_args('1 2'.split())) 18554adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao 18564adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao def test_help(self): 18574adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao self.assertEqual(self.parser.format_usage(), 18584adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao 'usage: PROG [-h] [--foo] bar {1,2,3} ...\n') 18594adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao self.assertEqual(self.parser.format_help(), textwrap.dedent('''\ 18604adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao usage: PROG [-h] [--foo] bar {1,2,3} ... 18614adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao 18624adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao main description 18634adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao 18644adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao positional arguments: 18654adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao bar bar help 18664adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao {1,2,3} command help 18674adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao 18684adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao optional arguments: 18694adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao -h, --help show this help message and exit 18704adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao --foo foo help 18714adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao ''')) 18724adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao 18734adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao def test_help_extra_prefix_chars(self): 18744adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao # Make sure - is still used for help if it is a non-first prefix char 18754adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao parser = self._get_parser(prefix_chars='+:-') 18764adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao self.assertEqual(parser.format_usage(), 18774adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao 'usage: PROG [-h] [++foo] bar {1,2,3} ...\n') 18784adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao self.assertEqual(parser.format_help(), textwrap.dedent('''\ 18794adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao usage: PROG [-h] [++foo] bar {1,2,3} ... 18804adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao 18814adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao main description 18824adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao 18834adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao positional arguments: 18844adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao bar bar help 18854adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao {1,2,3} command help 18864adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao 18874adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao optional arguments: 18884adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao -h, --help show this help message and exit 18894adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao ++foo foo help 18904adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao ''')) 18914adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao 18924adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao 18934adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao def test_help_alternate_prefix_chars(self): 18944adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao parser = self._get_parser(prefix_chars='+:/') 18954adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao self.assertEqual(parser.format_usage(), 18964adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao 'usage: PROG [+h] [++foo] bar {1,2,3} ...\n') 18974adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao self.assertEqual(parser.format_help(), textwrap.dedent('''\ 18984adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao usage: PROG [+h] [++foo] bar {1,2,3} ... 18994adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao 19004adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao main description 19014adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao 19024adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao positional arguments: 19034adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao bar bar help 19044adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao {1,2,3} command help 19054adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao 19064adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao optional arguments: 19074adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao +h, ++help show this help message and exit 19084adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao ++foo foo help 19094adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao ''')) 19104adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao 19114adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao def test_parser_command_help(self): 19124adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao self.assertEqual(self.command_help_parser.format_usage(), 19134adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao 'usage: PROG [-h] [--foo] bar {1,2,3} ...\n') 19144adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao self.assertEqual(self.command_help_parser.format_help(), 19154adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao textwrap.dedent('''\ 19164adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao usage: PROG [-h] [--foo] bar {1,2,3} ... 19174adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao 19184adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao main description 19194adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao 19204adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao positional arguments: 19214adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao bar bar help 19224adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao {1,2,3} command help 19234adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao 1 1 help 19244adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao 2 2 help 19254adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao 3 3 help 19264adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao 19274adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao optional arguments: 19284adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao -h, --help show this help message and exit 19294adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao --foo foo help 19304adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao ''')) 19314adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao 19324adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao def test_subparser_title_help(self): 19334adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao parser = ErrorRaisingArgumentParser(prog='PROG', 19344adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao description='main description') 19354adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao parser.add_argument('--foo', action='store_true', help='foo help') 19364adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao parser.add_argument('bar', help='bar help') 19374adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao subparsers = parser.add_subparsers(title='subcommands', 19384adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao description='command help', 19394adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao help='additional text') 19404adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao parser1 = subparsers.add_parser('1') 19414adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao parser2 = subparsers.add_parser('2') 19424adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao self.assertEqual(parser.format_usage(), 19434adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao 'usage: PROG [-h] [--foo] bar {1,2} ...\n') 19444adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao self.assertEqual(parser.format_help(), textwrap.dedent('''\ 19454adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao usage: PROG [-h] [--foo] bar {1,2} ... 19464adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao 19474adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao main description 19484adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao 19494adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao positional arguments: 19504adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao bar bar help 19514adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao 19524adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao optional arguments: 19534adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao -h, --help show this help message and exit 19544adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao --foo foo help 19554adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao 19564adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao subcommands: 19574adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao command help 19584adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao 19594adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao {1,2} additional text 19604adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao ''')) 19614adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao 19624adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao def _test_subparser_help(self, args_str, expected_help): 19634adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao try: 19644adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao self.parser.parse_args(args_str.split()) 19654adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao except ArgumentParserError: 19664adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao err = sys.exc_info()[1] 19674adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao if err.stdout != expected_help: 19684adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao print(repr(expected_help)) 19694adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao print(repr(err.stdout)) 19704adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao self.assertEqual(err.stdout, expected_help) 19714adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao 19724adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao def test_subparser1_help(self): 19734adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao self._test_subparser_help('5.0 1 -h', textwrap.dedent('''\ 19744adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao usage: PROG bar 1 [-h] [-w W] {a,b,c} 19754adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao 19764adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao 1 description 19774adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao 19784adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao positional arguments: 19794adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao {a,b,c} x help 19804adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao 19814adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao optional arguments: 19824adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao -h, --help show this help message and exit 19834adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao -w W w help 19844adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao ''')) 19854adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao 19864adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao def test_subparser2_help(self): 19874adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao self._test_subparser_help('5.0 2 -h', textwrap.dedent('''\ 19884adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao usage: PROG bar 2 [-h] [-y {1,2,3}] [z [z ...]] 19894adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao 19904adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao 2 description 19914adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao 19924adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao positional arguments: 19934adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao z z help 19944adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao 19954adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao optional arguments: 19964adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao -h, --help show this help message and exit 19974adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao -y {1,2,3} y help 19984adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao ''')) 19994adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao 20004adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao# ============ 20014adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao# Groups tests 20024adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao# ============ 20034adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao 20044adfde8bc82dd39f59e0445588c3e599ada477dJosh Gaoclass TestPositionalsGroups(TestCase): 20054adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao """Tests that order of group positionals matches construction order""" 20064adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao 20074adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao def test_nongroup_first(self): 20084adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao parser = ErrorRaisingArgumentParser() 20094adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao parser.add_argument('foo') 20104adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao group = parser.add_argument_group('g') 20114adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao group.add_argument('bar') 20124adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao parser.add_argument('baz') 20134adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao expected = NS(foo='1', bar='2', baz='3') 20144adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao result = parser.parse_args('1 2 3'.split()) 20154adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao self.assertEqual(expected, result) 20164adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao 20174adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao def test_group_first(self): 20184adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao parser = ErrorRaisingArgumentParser() 20194adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao group = parser.add_argument_group('xxx') 20204adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao group.add_argument('foo') 20214adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao parser.add_argument('bar') 20224adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao parser.add_argument('baz') 20234adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao expected = NS(foo='1', bar='2', baz='3') 20244adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao result = parser.parse_args('1 2 3'.split()) 20254adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao self.assertEqual(expected, result) 20264adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao 20274adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao def test_interleaved_groups(self): 20284adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao parser = ErrorRaisingArgumentParser() 20294adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao group = parser.add_argument_group('xxx') 20304adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao parser.add_argument('foo') 20314adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao group.add_argument('bar') 20324adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao parser.add_argument('baz') 20334adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao group = parser.add_argument_group('yyy') 20344adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao group.add_argument('frell') 20354adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao expected = NS(foo='1', bar='2', baz='3', frell='4') 20364adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao result = parser.parse_args('1 2 3 4'.split()) 20374adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao self.assertEqual(expected, result) 20384adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao 20394adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao# =================== 20404adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao# Parent parser tests 20414adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao# =================== 20424adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao 20434adfde8bc82dd39f59e0445588c3e599ada477dJosh Gaoclass TestParentParsers(TestCase): 20444adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao """Tests that parsers can be created with parent parsers""" 20454adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao 20464adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao def assertArgumentParserError(self, *args, **kwargs): 20474adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao self.assertRaises(ArgumentParserError, *args, **kwargs) 20484adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao 20494adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao def setUp(self): 20504adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao super(TestParentParsers, self).setUp() 20514adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao self.wxyz_parent = ErrorRaisingArgumentParser(add_help=False) 20524adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao self.wxyz_parent.add_argument('--w') 20534adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao x_group = self.wxyz_parent.add_argument_group('x') 20544adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao x_group.add_argument('-y') 20554adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao self.wxyz_parent.add_argument('z') 20564adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao 20574adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao self.abcd_parent = ErrorRaisingArgumentParser(add_help=False) 20584adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao self.abcd_parent.add_argument('a') 20594adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao self.abcd_parent.add_argument('-b') 20604adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao c_group = self.abcd_parent.add_argument_group('c') 20614adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao c_group.add_argument('--d') 20624adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao 20634adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao self.w_parent = ErrorRaisingArgumentParser(add_help=False) 20644adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao self.w_parent.add_argument('--w') 20654adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao 20664adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao self.z_parent = ErrorRaisingArgumentParser(add_help=False) 20674adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao self.z_parent.add_argument('z') 20684adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao 20694adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao # parents with mutually exclusive groups 20704adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao self.ab_mutex_parent = ErrorRaisingArgumentParser(add_help=False) 20714adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao group = self.ab_mutex_parent.add_mutually_exclusive_group() 20724adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao group.add_argument('-a', action='store_true') 20734adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao group.add_argument('-b', action='store_true') 20744adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao 20754adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao self.main_program = os.path.basename(sys.argv[0]) 20764adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao 20774adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao def test_single_parent(self): 20784adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao parser = ErrorRaisingArgumentParser(parents=[self.wxyz_parent]) 20794adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao self.assertEqual(parser.parse_args('-y 1 2 --w 3'.split()), 20804adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao NS(w='3', y='1', z='2')) 20814adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao 20824adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao def test_single_parent_mutex(self): 20834adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao self._test_mutex_ab(self.ab_mutex_parent.parse_args) 20844adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao parser = ErrorRaisingArgumentParser(parents=[self.ab_mutex_parent]) 20854adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao self._test_mutex_ab(parser.parse_args) 20864adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao 20874adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao def test_single_granparent_mutex(self): 20884adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao parents = [self.ab_mutex_parent] 20894adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao parser = ErrorRaisingArgumentParser(add_help=False, parents=parents) 20904adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao parser = ErrorRaisingArgumentParser(parents=[parser]) 20914adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao self._test_mutex_ab(parser.parse_args) 20924adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao 20934adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao def _test_mutex_ab(self, parse_args): 20944adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao self.assertEqual(parse_args([]), NS(a=False, b=False)) 20954adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao self.assertEqual(parse_args(['-a']), NS(a=True, b=False)) 20964adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao self.assertEqual(parse_args(['-b']), NS(a=False, b=True)) 20974adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao self.assertArgumentParserError(parse_args, ['-a', '-b']) 20984adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao self.assertArgumentParserError(parse_args, ['-b', '-a']) 20994adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao self.assertArgumentParserError(parse_args, ['-c']) 21004adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao self.assertArgumentParserError(parse_args, ['-a', '-c']) 21014adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao self.assertArgumentParserError(parse_args, ['-b', '-c']) 21024adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao 21034adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao def test_multiple_parents(self): 21044adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao parents = [self.abcd_parent, self.wxyz_parent] 21054adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao parser = ErrorRaisingArgumentParser(parents=parents) 21064adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao self.assertEqual(parser.parse_args('--d 1 --w 2 3 4'.split()), 21074adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao NS(a='3', b=None, d='1', w='2', y=None, z='4')) 21084adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao 21094adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao def test_multiple_parents_mutex(self): 21104adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao parents = [self.ab_mutex_parent, self.wxyz_parent] 21114adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao parser = ErrorRaisingArgumentParser(parents=parents) 21124adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao self.assertEqual(parser.parse_args('-a --w 2 3'.split()), 21134adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao NS(a=True, b=False, w='2', y=None, z='3')) 21144adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao self.assertArgumentParserError( 21154adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao parser.parse_args, '-a --w 2 3 -b'.split()) 21164adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao self.assertArgumentParserError( 21174adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao parser.parse_args, '-a -b --w 2 3'.split()) 21184adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao 21194adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao def test_conflicting_parents(self): 21204adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao self.assertRaises( 21214adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao argparse.ArgumentError, 21224adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao argparse.ArgumentParser, 21234adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao parents=[self.w_parent, self.wxyz_parent]) 21244adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao 21254adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao def test_conflicting_parents_mutex(self): 21264adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao self.assertRaises( 21274adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao argparse.ArgumentError, 21284adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao argparse.ArgumentParser, 21294adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao parents=[self.abcd_parent, self.ab_mutex_parent]) 21304adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao 21314adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao def test_same_argument_name_parents(self): 21324adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao parents = [self.wxyz_parent, self.z_parent] 21334adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao parser = ErrorRaisingArgumentParser(parents=parents) 21344adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao self.assertEqual(parser.parse_args('1 2'.split()), 21354adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao NS(w=None, y=None, z='2')) 21364adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao 21374adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao def test_subparser_parents(self): 21384adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao parser = ErrorRaisingArgumentParser() 21394adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao subparsers = parser.add_subparsers() 21404adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao abcde_parser = subparsers.add_parser('bar', parents=[self.abcd_parent]) 21414adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao abcde_parser.add_argument('e') 21424adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao self.assertEqual(parser.parse_args('bar -b 1 --d 2 3 4'.split()), 21434adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao NS(a='3', b='1', d='2', e='4')) 21444adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao 21454adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao def test_subparser_parents_mutex(self): 21464adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao parser = ErrorRaisingArgumentParser() 21474adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao subparsers = parser.add_subparsers() 21484adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao parents = [self.ab_mutex_parent] 21494adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao abc_parser = subparsers.add_parser('foo', parents=parents) 21504adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao c_group = abc_parser.add_argument_group('c_group') 21514adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao c_group.add_argument('c') 21524adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao parents = [self.wxyz_parent, self.ab_mutex_parent] 21534adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao wxyzabe_parser = subparsers.add_parser('bar', parents=parents) 21544adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao wxyzabe_parser.add_argument('e') 21554adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao self.assertEqual(parser.parse_args('foo -a 4'.split()), 21564adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao NS(a=True, b=False, c='4')) 21574adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao self.assertEqual(parser.parse_args('bar -b --w 2 3 4'.split()), 21584adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao NS(a=False, b=True, w='2', y=None, z='3', e='4')) 21594adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao self.assertArgumentParserError( 21604adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao parser.parse_args, 'foo -a -b 4'.split()) 21614adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao self.assertArgumentParserError( 21624adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao parser.parse_args, 'bar -b -a 4'.split()) 21634adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao 21644adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao def test_parent_help(self): 21654adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao parents = [self.abcd_parent, self.wxyz_parent] 21664adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao parser = ErrorRaisingArgumentParser(parents=parents) 21674adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao parser_help = parser.format_help() 21684adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao progname = self.main_program 21694adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao self.assertEqual(parser_help, textwrap.dedent('''\ 21704adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao usage: {}{}[-h] [-b B] [--d D] [--w W] [-y Y] a z 21714adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao 21724adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao positional arguments: 21734adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao a 21744adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao z 21754adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao 21764adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao optional arguments: 21774adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao -h, --help show this help message and exit 21784adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao -b B 21794adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao --w W 21804adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao 21814adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao c: 21824adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao --d D 21834adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao 21844adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao x: 21854adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao -y Y 21864adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao '''.format(progname, ' ' if progname else '' ))) 21874adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao 21884adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao def test_groups_parents(self): 21894adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao parent = ErrorRaisingArgumentParser(add_help=False) 21904adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao g = parent.add_argument_group(title='g', description='gd') 21914adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao g.add_argument('-w') 21924adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao g.add_argument('-x') 21934adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao m = parent.add_mutually_exclusive_group() 21944adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao m.add_argument('-y') 21954adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao m.add_argument('-z') 21964adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao parser = ErrorRaisingArgumentParser(parents=[parent]) 21974adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao 21984adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao self.assertRaises(ArgumentParserError, parser.parse_args, 21994adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao ['-y', 'Y', '-z', 'Z']) 22004adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao 22014adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao parser_help = parser.format_help() 22024adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao progname = self.main_program 22034adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao self.assertEqual(parser_help, textwrap.dedent('''\ 22044adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao usage: {}{}[-h] [-w W] [-x X] [-y Y | -z Z] 22054adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao 22064adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao optional arguments: 22074adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao -h, --help show this help message and exit 22084adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao -y Y 22094adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao -z Z 22104adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao 22114adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao g: 22124adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao gd 22134adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao 22144adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao -w W 22154adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao -x X 22164adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao '''.format(progname, ' ' if progname else '' ))) 22174adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao 22184adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao# ============================== 22194adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao# Mutually exclusive group tests 22204adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao# ============================== 22214adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao 22224adfde8bc82dd39f59e0445588c3e599ada477dJosh Gaoclass TestMutuallyExclusiveGroupErrors(TestCase): 22234adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao 22244adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao def test_invalid_add_argument_group(self): 22254adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao parser = ErrorRaisingArgumentParser() 22264adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao raises = self.assertRaises 22274adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao raises(TypeError, parser.add_mutually_exclusive_group, title='foo') 22284adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao 22294adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao def test_invalid_add_argument(self): 22304adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao parser = ErrorRaisingArgumentParser() 22314adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao group = parser.add_mutually_exclusive_group() 22324adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao add_argument = group.add_argument 22334adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao raises = self.assertRaises 22344adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao raises(ValueError, add_argument, '--foo', required=True) 22354adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao raises(ValueError, add_argument, 'bar') 22364adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao raises(ValueError, add_argument, 'bar', nargs='+') 22374adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao raises(ValueError, add_argument, 'bar', nargs=1) 22384adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao raises(ValueError, add_argument, 'bar', nargs=argparse.PARSER) 22394adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao 22404adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao def test_help(self): 22414adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao parser = ErrorRaisingArgumentParser(prog='PROG') 22424adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao group1 = parser.add_mutually_exclusive_group() 22434adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao group1.add_argument('--foo', action='store_true') 22444adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao group1.add_argument('--bar', action='store_false') 22454adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao group2 = parser.add_mutually_exclusive_group() 22464adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao group2.add_argument('--soup', action='store_true') 22474adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao group2.add_argument('--nuts', action='store_false') 22484adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao expected = '''\ 22494adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao usage: PROG [-h] [--foo | --bar] [--soup | --nuts] 22504adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao 22514adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao optional arguments: 22524adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao -h, --help show this help message and exit 22534adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao --foo 22544adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao --bar 22554adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao --soup 22564adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao --nuts 22574adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao ''' 22584adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao self.assertEqual(parser.format_help(), textwrap.dedent(expected)) 22594adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao 22604adfde8bc82dd39f59e0445588c3e599ada477dJosh Gaoclass MEMixin(object): 22614adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao 22624adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao def test_failures_when_not_required(self): 22634adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao parse_args = self.get_parser(required=False).parse_args 22644adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao error = ArgumentParserError 22654adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao for args_string in self.failures: 22664adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao self.assertRaises(error, parse_args, args_string.split()) 22674adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao 22684adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao def test_failures_when_required(self): 22694adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao parse_args = self.get_parser(required=True).parse_args 22704adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao error = ArgumentParserError 22714adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao for args_string in self.failures + ['']: 22724adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao self.assertRaises(error, parse_args, args_string.split()) 22734adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao 22744adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao def test_successes_when_not_required(self): 22754adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao parse_args = self.get_parser(required=False).parse_args 22764adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao successes = self.successes + self.successes_when_not_required 22774adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao for args_string, expected_ns in successes: 22784adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao actual_ns = parse_args(args_string.split()) 22794adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao self.assertEqual(actual_ns, expected_ns) 22804adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao 22814adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao def test_successes_when_required(self): 22824adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao parse_args = self.get_parser(required=True).parse_args 22834adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao for args_string, expected_ns in self.successes: 22844adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao actual_ns = parse_args(args_string.split()) 22854adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao self.assertEqual(actual_ns, expected_ns) 22864adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao 22874adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao def test_usage_when_not_required(self): 22884adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao format_usage = self.get_parser(required=False).format_usage 22894adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao expected_usage = self.usage_when_not_required 22904adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao self.assertEqual(format_usage(), textwrap.dedent(expected_usage)) 22914adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao 22924adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao def test_usage_when_required(self): 22934adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao format_usage = self.get_parser(required=True).format_usage 22944adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao expected_usage = self.usage_when_required 22954adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao self.assertEqual(format_usage(), textwrap.dedent(expected_usage)) 22964adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao 22974adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao def test_help_when_not_required(self): 22984adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao format_help = self.get_parser(required=False).format_help 22994adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao help = self.usage_when_not_required + self.help 23004adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao self.assertEqual(format_help(), textwrap.dedent(help)) 23014adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao 23024adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao def test_help_when_required(self): 23034adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao format_help = self.get_parser(required=True).format_help 23044adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao help = self.usage_when_required + self.help 23054adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao self.assertEqual(format_help(), textwrap.dedent(help)) 23064adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao 23074adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao 23084adfde8bc82dd39f59e0445588c3e599ada477dJosh Gaoclass TestMutuallyExclusiveSimple(MEMixin, TestCase): 23094adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao 23104adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao def get_parser(self, required=None): 23114adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao parser = ErrorRaisingArgumentParser(prog='PROG') 23124adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao group = parser.add_mutually_exclusive_group(required=required) 23134adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao group.add_argument('--bar', help='bar help') 23144adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao group.add_argument('--baz', nargs='?', const='Z', help='baz help') 23154adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao return parser 23164adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao 23174adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao failures = ['--bar X --baz Y', '--bar X --baz'] 23184adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao successes = [ 23194adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao ('--bar X', NS(bar='X', baz=None)), 23204adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao ('--bar X --bar Z', NS(bar='Z', baz=None)), 23214adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao ('--baz Y', NS(bar=None, baz='Y')), 23224adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao ('--baz', NS(bar=None, baz='Z')), 23234adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao ] 23244adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao successes_when_not_required = [ 23254adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao ('', NS(bar=None, baz=None)), 23264adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao ] 23274adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao 23284adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao usage_when_not_required = '''\ 23294adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao usage: PROG [-h] [--bar BAR | --baz [BAZ]] 23304adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao ''' 23314adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao usage_when_required = '''\ 23324adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao usage: PROG [-h] (--bar BAR | --baz [BAZ]) 23334adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao ''' 23344adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao help = '''\ 23354adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao 23364adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao optional arguments: 23374adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao -h, --help show this help message and exit 23384adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao --bar BAR bar help 23394adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao --baz [BAZ] baz help 23404adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao ''' 23414adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao 23424adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao 23434adfde8bc82dd39f59e0445588c3e599ada477dJosh Gaoclass TestMutuallyExclusiveLong(MEMixin, TestCase): 23444adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao 23454adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao def get_parser(self, required=None): 23464adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao parser = ErrorRaisingArgumentParser(prog='PROG') 23474adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao parser.add_argument('--abcde', help='abcde help') 23484adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao parser.add_argument('--fghij', help='fghij help') 23494adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao group = parser.add_mutually_exclusive_group(required=required) 23504adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao group.add_argument('--klmno', help='klmno help') 23514adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao group.add_argument('--pqrst', help='pqrst help') 23524adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao return parser 23534adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao 23544adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao failures = ['--klmno X --pqrst Y'] 23554adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao successes = [ 23564adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao ('--klmno X', NS(abcde=None, fghij=None, klmno='X', pqrst=None)), 23574adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao ('--abcde Y --klmno X', 23584adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao NS(abcde='Y', fghij=None, klmno='X', pqrst=None)), 23594adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao ('--pqrst X', NS(abcde=None, fghij=None, klmno=None, pqrst='X')), 23604adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao ('--pqrst X --fghij Y', 23614adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao NS(abcde=None, fghij='Y', klmno=None, pqrst='X')), 23624adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao ] 23634adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao successes_when_not_required = [ 23644adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao ('', NS(abcde=None, fghij=None, klmno=None, pqrst=None)), 23654adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao ] 23664adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao 23674adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao usage_when_not_required = '''\ 23684adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao usage: PROG [-h] [--abcde ABCDE] [--fghij FGHIJ] 23694adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao [--klmno KLMNO | --pqrst PQRST] 23704adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao ''' 23714adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao usage_when_required = '''\ 23724adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao usage: PROG [-h] [--abcde ABCDE] [--fghij FGHIJ] 23734adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao (--klmno KLMNO | --pqrst PQRST) 23744adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao ''' 23754adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao help = '''\ 23764adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao 23774adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao optional arguments: 23784adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao -h, --help show this help message and exit 23794adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao --abcde ABCDE abcde help 23804adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao --fghij FGHIJ fghij help 23814adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao --klmno KLMNO klmno help 23824adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao --pqrst PQRST pqrst help 23834adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao ''' 23844adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao 23854adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao 23864adfde8bc82dd39f59e0445588c3e599ada477dJosh Gaoclass TestMutuallyExclusiveFirstSuppressed(MEMixin, TestCase): 23874adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao 23884adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao def get_parser(self, required): 23894adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao parser = ErrorRaisingArgumentParser(prog='PROG') 23904adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao group = parser.add_mutually_exclusive_group(required=required) 23914adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao group.add_argument('-x', help=argparse.SUPPRESS) 23924adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao group.add_argument('-y', action='store_false', help='y help') 23934adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao return parser 23944adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao 23954adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao failures = ['-x X -y'] 23964adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao successes = [ 23974adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao ('-x X', NS(x='X', y=True)), 23984adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao ('-x X -x Y', NS(x='Y', y=True)), 23994adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao ('-y', NS(x=None, y=False)), 24004adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao ] 24014adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao successes_when_not_required = [ 24024adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao ('', NS(x=None, y=True)), 24034adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao ] 24044adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao 24054adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao usage_when_not_required = '''\ 24064adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao usage: PROG [-h] [-y] 24074adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao ''' 24084adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao usage_when_required = '''\ 24094adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao usage: PROG [-h] -y 24104adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao ''' 24114adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao help = '''\ 24124adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao 24134adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao optional arguments: 24144adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao -h, --help show this help message and exit 24154adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao -y y help 24164adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao ''' 24174adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao 24184adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao 24194adfde8bc82dd39f59e0445588c3e599ada477dJosh Gaoclass TestMutuallyExclusiveManySuppressed(MEMixin, TestCase): 24204adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao 24214adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao def get_parser(self, required): 24224adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao parser = ErrorRaisingArgumentParser(prog='PROG') 24234adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao group = parser.add_mutually_exclusive_group(required=required) 24244adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao add = group.add_argument 24254adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao add('--spam', action='store_true', help=argparse.SUPPRESS) 24264adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao add('--badger', action='store_false', help=argparse.SUPPRESS) 24274adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao add('--bladder', help=argparse.SUPPRESS) 24284adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao return parser 24294adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao 24304adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao failures = [ 24314adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao '--spam --badger', 24324adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao '--badger --bladder B', 24334adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao '--bladder B --spam', 24344adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao ] 24354adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao successes = [ 24364adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao ('--spam', NS(spam=True, badger=True, bladder=None)), 24374adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao ('--badger', NS(spam=False, badger=False, bladder=None)), 24384adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao ('--bladder B', NS(spam=False, badger=True, bladder='B')), 24394adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao ('--spam --spam', NS(spam=True, badger=True, bladder=None)), 24404adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao ] 24414adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao successes_when_not_required = [ 24424adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao ('', NS(spam=False, badger=True, bladder=None)), 24434adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao ] 24444adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao 24454adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao usage_when_required = usage_when_not_required = '''\ 24464adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao usage: PROG [-h] 24474adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao ''' 24484adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao help = '''\ 24494adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao 24504adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao optional arguments: 24514adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao -h, --help show this help message and exit 24524adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao ''' 24534adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao 24544adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao 24554adfde8bc82dd39f59e0445588c3e599ada477dJosh Gaoclass TestMutuallyExclusiveOptionalAndPositional(MEMixin, TestCase): 24564adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao 24574adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao def get_parser(self, required): 24584adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao parser = ErrorRaisingArgumentParser(prog='PROG') 24594adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao group = parser.add_mutually_exclusive_group(required=required) 24604adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao group.add_argument('--foo', action='store_true', help='FOO') 24614adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao group.add_argument('--spam', help='SPAM') 24624adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao group.add_argument('badger', nargs='*', default='X', help='BADGER') 24634adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao return parser 24644adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao 24654adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao failures = [ 24664adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao '--foo --spam S', 24674adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao '--spam S X', 24684adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao 'X --foo', 24694adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao 'X Y Z --spam S', 24704adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao '--foo X Y', 24714adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao ] 24724adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao successes = [ 24734adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao ('--foo', NS(foo=True, spam=None, badger='X')), 24744adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao ('--spam S', NS(foo=False, spam='S', badger='X')), 24754adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao ('X', NS(foo=False, spam=None, badger=['X'])), 24764adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao ('X Y Z', NS(foo=False, spam=None, badger=['X', 'Y', 'Z'])), 24774adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao ] 24784adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao successes_when_not_required = [ 24794adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao ('', NS(foo=False, spam=None, badger='X')), 24804adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao ] 24814adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao 24824adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao usage_when_not_required = '''\ 24834adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao usage: PROG [-h] [--foo | --spam SPAM | badger [badger ...]] 24844adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao ''' 24854adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao usage_when_required = '''\ 24864adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao usage: PROG [-h] (--foo | --spam SPAM | badger [badger ...]) 24874adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao ''' 24884adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao help = '''\ 24894adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao 24904adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao positional arguments: 24914adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao badger BADGER 24924adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao 24934adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao optional arguments: 24944adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao -h, --help show this help message and exit 24954adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao --foo FOO 24964adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao --spam SPAM SPAM 24974adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao ''' 24984adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao 24994adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao 25004adfde8bc82dd39f59e0445588c3e599ada477dJosh Gaoclass TestMutuallyExclusiveOptionalsMixed(MEMixin, TestCase): 25014adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao 25024adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao def get_parser(self, required): 25034adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao parser = ErrorRaisingArgumentParser(prog='PROG') 25044adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao parser.add_argument('-x', action='store_true', help='x help') 25054adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao group = parser.add_mutually_exclusive_group(required=required) 25064adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao group.add_argument('-a', action='store_true', help='a help') 25074adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao group.add_argument('-b', action='store_true', help='b help') 25084adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao parser.add_argument('-y', action='store_true', help='y help') 25094adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao group.add_argument('-c', action='store_true', help='c help') 25104adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao return parser 25114adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao 25124adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao failures = ['-a -b', '-b -c', '-a -c', '-a -b -c'] 25134adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao successes = [ 25144adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao ('-a', NS(a=True, b=False, c=False, x=False, y=False)), 25154adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao ('-b', NS(a=False, b=True, c=False, x=False, y=False)), 25164adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao ('-c', NS(a=False, b=False, c=True, x=False, y=False)), 25174adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao ('-a -x', NS(a=True, b=False, c=False, x=True, y=False)), 25184adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao ('-y -b', NS(a=False, b=True, c=False, x=False, y=True)), 25194adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao ('-x -y -c', NS(a=False, b=False, c=True, x=True, y=True)), 25204adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao ] 25214adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao successes_when_not_required = [ 25224adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao ('', NS(a=False, b=False, c=False, x=False, y=False)), 25234adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao ('-x', NS(a=False, b=False, c=False, x=True, y=False)), 25244adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao ('-y', NS(a=False, b=False, c=False, x=False, y=True)), 25254adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao ] 25264adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao 25274adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao usage_when_required = usage_when_not_required = '''\ 25284adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao usage: PROG [-h] [-x] [-a] [-b] [-y] [-c] 25294adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao ''' 25304adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao help = '''\ 25314adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao 25324adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao optional arguments: 25334adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao -h, --help show this help message and exit 25344adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao -x x help 25354adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao -a a help 25364adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao -b b help 25374adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao -y y help 25384adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao -c c help 25394adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao ''' 25404adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao 25414adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao 25424adfde8bc82dd39f59e0445588c3e599ada477dJosh Gaoclass TestMutuallyExclusiveInGroup(MEMixin, TestCase): 25434adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao 25444adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao def get_parser(self, required=None): 25454adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao parser = ErrorRaisingArgumentParser(prog='PROG') 25464adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao titled_group = parser.add_argument_group( 25474adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao title='Titled group', description='Group description') 25484adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao mutex_group = \ 25494adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao titled_group.add_mutually_exclusive_group(required=required) 25504adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao mutex_group.add_argument('--bar', help='bar help') 25514adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao mutex_group.add_argument('--baz', help='baz help') 25524adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao return parser 25534adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao 25544adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao failures = ['--bar X --baz Y', '--baz X --bar Y'] 25554adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao successes = [ 25564adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao ('--bar X', NS(bar='X', baz=None)), 25574adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao ('--baz Y', NS(bar=None, baz='Y')), 25584adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao ] 25594adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao successes_when_not_required = [ 25604adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao ('', NS(bar=None, baz=None)), 25614adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao ] 25624adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao 25634adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao usage_when_not_required = '''\ 25644adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao usage: PROG [-h] [--bar BAR | --baz BAZ] 25654adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao ''' 25664adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao usage_when_required = '''\ 25674adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao usage: PROG [-h] (--bar BAR | --baz BAZ) 25684adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao ''' 25694adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao help = '''\ 25704adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao 25714adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao optional arguments: 25724adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao -h, --help show this help message and exit 25734adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao 25744adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao Titled group: 25754adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao Group description 25764adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao 25774adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao --bar BAR bar help 25784adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao --baz BAZ baz help 25794adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao ''' 25804adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao 25814adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao 25824adfde8bc82dd39f59e0445588c3e599ada477dJosh Gaoclass TestMutuallyExclusiveOptionalsAndPositionalsMixed(MEMixin, TestCase): 25834adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao 25844adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao def get_parser(self, required): 25854adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao parser = ErrorRaisingArgumentParser(prog='PROG') 25864adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao parser.add_argument('x', help='x help') 25874adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao parser.add_argument('-y', action='store_true', help='y help') 25884adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao group = parser.add_mutually_exclusive_group(required=required) 25894adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao group.add_argument('a', nargs='?', help='a help') 25904adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao group.add_argument('-b', action='store_true', help='b help') 25914adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao group.add_argument('-c', action='store_true', help='c help') 25924adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao return parser 25934adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao 25944adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao failures = ['X A -b', '-b -c', '-c X A'] 25954adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao successes = [ 25964adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao ('X A', NS(a='A', b=False, c=False, x='X', y=False)), 25974adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao ('X -b', NS(a=None, b=True, c=False, x='X', y=False)), 25984adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao ('X -c', NS(a=None, b=False, c=True, x='X', y=False)), 25994adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao ('X A -y', NS(a='A', b=False, c=False, x='X', y=True)), 26004adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao ('X -y -b', NS(a=None, b=True, c=False, x='X', y=True)), 26014adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao ] 26024adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao successes_when_not_required = [ 26034adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao ('X', NS(a=None, b=False, c=False, x='X', y=False)), 26044adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao ('X -y', NS(a=None, b=False, c=False, x='X', y=True)), 26054adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao ] 26064adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao 26074adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao usage_when_required = usage_when_not_required = '''\ 26084adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao usage: PROG [-h] [-y] [-b] [-c] x [a] 26094adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao ''' 26104adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao help = '''\ 26114adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao 26124adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao positional arguments: 26134adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao x x help 26144adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao a a help 26154adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao 26164adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao optional arguments: 26174adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao -h, --help show this help message and exit 26184adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao -y y help 26194adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao -b b help 26204adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao -c c help 26214adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao ''' 26224adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao 26234adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao# ================================================= 26244adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao# Mutually exclusive group in parent parser tests 26254adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao# ================================================= 26264adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao 26274adfde8bc82dd39f59e0445588c3e599ada477dJosh Gaoclass MEPBase(object): 26284adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao 26294adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao def get_parser(self, required=None): 26304adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao parent = super(MEPBase, self).get_parser(required=required) 26314adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao parser = ErrorRaisingArgumentParser( 26324adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao prog=parent.prog, add_help=False, parents=[parent]) 26334adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao return parser 26344adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao 26354adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao 26364adfde8bc82dd39f59e0445588c3e599ada477dJosh Gaoclass TestMutuallyExclusiveGroupErrorsParent( 26374adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao MEPBase, TestMutuallyExclusiveGroupErrors): 26384adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao pass 26394adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao 26404adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao 26414adfde8bc82dd39f59e0445588c3e599ada477dJosh Gaoclass TestMutuallyExclusiveSimpleParent( 26424adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao MEPBase, TestMutuallyExclusiveSimple): 26434adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao pass 26444adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao 26454adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao 26464adfde8bc82dd39f59e0445588c3e599ada477dJosh Gaoclass TestMutuallyExclusiveLongParent( 26474adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao MEPBase, TestMutuallyExclusiveLong): 26484adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao pass 26494adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao 26504adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao 26514adfde8bc82dd39f59e0445588c3e599ada477dJosh Gaoclass TestMutuallyExclusiveFirstSuppressedParent( 26524adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao MEPBase, TestMutuallyExclusiveFirstSuppressed): 26534adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao pass 26544adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao 26554adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao 26564adfde8bc82dd39f59e0445588c3e599ada477dJosh Gaoclass TestMutuallyExclusiveManySuppressedParent( 26574adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao MEPBase, TestMutuallyExclusiveManySuppressed): 26584adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao pass 26594adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao 26604adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao 26614adfde8bc82dd39f59e0445588c3e599ada477dJosh Gaoclass TestMutuallyExclusiveOptionalAndPositionalParent( 26624adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao MEPBase, TestMutuallyExclusiveOptionalAndPositional): 26634adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao pass 26644adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao 26654adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao 26664adfde8bc82dd39f59e0445588c3e599ada477dJosh Gaoclass TestMutuallyExclusiveOptionalsMixedParent( 26674adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao MEPBase, TestMutuallyExclusiveOptionalsMixed): 26684adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao pass 26694adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao 26704adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao 26714adfde8bc82dd39f59e0445588c3e599ada477dJosh Gaoclass TestMutuallyExclusiveOptionalsAndPositionalsMixedParent( 26724adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao MEPBase, TestMutuallyExclusiveOptionalsAndPositionalsMixed): 26734adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao pass 26744adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao 26754adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao# ================= 26764adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao# Set default tests 26774adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao# ================= 26784adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao 26794adfde8bc82dd39f59e0445588c3e599ada477dJosh Gaoclass TestSetDefaults(TestCase): 26804adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao 26814adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao def test_set_defaults_no_args(self): 26824adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao parser = ErrorRaisingArgumentParser() 26834adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao parser.set_defaults(x='foo') 26844adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao parser.set_defaults(y='bar', z=1) 26854adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao self.assertEqual(NS(x='foo', y='bar', z=1), 26864adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao parser.parse_args([])) 26874adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao self.assertEqual(NS(x='foo', y='bar', z=1), 26884adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao parser.parse_args([], NS())) 26894adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao self.assertEqual(NS(x='baz', y='bar', z=1), 26904adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao parser.parse_args([], NS(x='baz'))) 26914adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao self.assertEqual(NS(x='baz', y='bar', z=2), 26924adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao parser.parse_args([], NS(x='baz', z=2))) 26934adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao 26944adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao def test_set_defaults_with_args(self): 26954adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao parser = ErrorRaisingArgumentParser() 26964adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao parser.set_defaults(x='foo', y='bar') 26974adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao parser.add_argument('-x', default='xfoox') 26984adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao self.assertEqual(NS(x='xfoox', y='bar'), 26994adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao parser.parse_args([])) 27004adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao self.assertEqual(NS(x='xfoox', y='bar'), 27014adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao parser.parse_args([], NS())) 27024adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao self.assertEqual(NS(x='baz', y='bar'), 27034adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao parser.parse_args([], NS(x='baz'))) 27044adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao self.assertEqual(NS(x='1', y='bar'), 27054adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao parser.parse_args('-x 1'.split())) 27064adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao self.assertEqual(NS(x='1', y='bar'), 27074adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao parser.parse_args('-x 1'.split(), NS())) 27084adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao self.assertEqual(NS(x='1', y='bar'), 27094adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao parser.parse_args('-x 1'.split(), NS(x='baz'))) 27104adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao 27114adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao def test_set_defaults_subparsers(self): 27124adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao parser = ErrorRaisingArgumentParser() 27134adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao parser.set_defaults(x='foo') 27144adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao subparsers = parser.add_subparsers() 27154adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao parser_a = subparsers.add_parser('a') 27164adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao parser_a.set_defaults(y='bar') 27174adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao self.assertEqual(NS(x='foo', y='bar'), 27184adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao parser.parse_args('a'.split())) 27194adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao 27204adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao def test_set_defaults_parents(self): 27214adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao parent = ErrorRaisingArgumentParser(add_help=False) 27224adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao parent.set_defaults(x='foo') 27234adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao parser = ErrorRaisingArgumentParser(parents=[parent]) 27244adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao self.assertEqual(NS(x='foo'), parser.parse_args([])) 27254adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao 27264adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao def test_set_defaults_same_as_add_argument(self): 27274adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao parser = ErrorRaisingArgumentParser() 27284adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao parser.set_defaults(w='W', x='X', y='Y', z='Z') 27294adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao parser.add_argument('-w') 27304adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao parser.add_argument('-x', default='XX') 27314adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao parser.add_argument('y', nargs='?') 27324adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao parser.add_argument('z', nargs='?', default='ZZ') 27334adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao 27344adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao # defaults set previously 27354adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao self.assertEqual(NS(w='W', x='XX', y='Y', z='ZZ'), 27364adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao parser.parse_args([])) 27374adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao 27384adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao # reset defaults 27394adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao parser.set_defaults(w='WW', x='X', y='YY', z='Z') 27404adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao self.assertEqual(NS(w='WW', x='X', y='YY', z='Z'), 27414adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao parser.parse_args([])) 27424adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao 27434adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao def test_set_defaults_same_as_add_argument_group(self): 27444adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao parser = ErrorRaisingArgumentParser() 27454adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao parser.set_defaults(w='W', x='X', y='Y', z='Z') 27464adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao group = parser.add_argument_group('foo') 27474adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao group.add_argument('-w') 27484adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao group.add_argument('-x', default='XX') 27494adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao group.add_argument('y', nargs='?') 27504adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao group.add_argument('z', nargs='?', default='ZZ') 27514adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao 27524adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao 27534adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao # defaults set previously 27544adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao self.assertEqual(NS(w='W', x='XX', y='Y', z='ZZ'), 27554adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao parser.parse_args([])) 27564adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao 27574adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao # reset defaults 27584adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao parser.set_defaults(w='WW', x='X', y='YY', z='Z') 27594adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao self.assertEqual(NS(w='WW', x='X', y='YY', z='Z'), 27604adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao parser.parse_args([])) 27614adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao 27624adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao# ================= 27634adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao# Get default tests 27644adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao# ================= 27654adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao 27664adfde8bc82dd39f59e0445588c3e599ada477dJosh Gaoclass TestGetDefault(TestCase): 27674adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao 27684adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao def test_get_default(self): 27694adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao parser = ErrorRaisingArgumentParser() 27704adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao self.assertEqual(None, parser.get_default("foo")) 27714adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao self.assertEqual(None, parser.get_default("bar")) 27724adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao 27734adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao parser.add_argument("--foo") 27744adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao self.assertEqual(None, parser.get_default("foo")) 27754adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao self.assertEqual(None, parser.get_default("bar")) 27764adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao 27774adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao parser.add_argument("--bar", type=int, default=42) 27784adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao self.assertEqual(None, parser.get_default("foo")) 27794adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao self.assertEqual(42, parser.get_default("bar")) 27804adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao 27814adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao parser.set_defaults(foo="badger") 27824adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao self.assertEqual("badger", parser.get_default("foo")) 27834adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao self.assertEqual(42, parser.get_default("bar")) 27844adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao 27854adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao# ========================== 27864adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao# Namespace 'contains' tests 27874adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao# ========================== 27884adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao 27894adfde8bc82dd39f59e0445588c3e599ada477dJosh Gaoclass TestNamespaceContainsSimple(TestCase): 27904adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao 27914adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao def test_empty(self): 27924adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao ns = argparse.Namespace() 27934adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao self.assertEqual('' in ns, False) 27944adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao self.assertEqual('' not in ns, True) 27954adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao self.assertEqual('x' in ns, False) 27964adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao 27974adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao def test_non_empty(self): 27984adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao ns = argparse.Namespace(x=1, y=2) 27994adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao self.assertEqual('x' in ns, True) 28004adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao self.assertEqual('x' not in ns, False) 28014adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao self.assertEqual('y' in ns, True) 28024adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao self.assertEqual('' in ns, False) 28034adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao self.assertEqual('xx' in ns, False) 28044adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao self.assertEqual('z' in ns, False) 28054adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao 28064adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao# ===================== 28074adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao# Help formatting tests 28084adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao# ===================== 28094adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao 28104adfde8bc82dd39f59e0445588c3e599ada477dJosh Gaoclass TestHelpFormattingMetaclass(type): 28114adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao 28124adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao def __init__(cls, name, bases, bodydict): 28134adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao if name == 'HelpTestCase': 28144adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao return 28154adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao 28164adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao class AddTests(object): 28174adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao 28184adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao def __init__(self, test_class, func_suffix, std_name): 28194adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao self.func_suffix = func_suffix 28204adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao self.std_name = std_name 28214adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao 28224adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao for test_func in [self.test_format, 28234adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao self.test_print, 28244adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao self.test_print_file]: 28254adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao test_name = '%s_%s' % (test_func.__name__, func_suffix) 28264adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao 28274adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao def test_wrapper(self, test_func=test_func): 28284adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao test_func(self) 28294adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao try: 28304adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao test_wrapper.__name__ = test_name 28314adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao except TypeError: 28324adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao pass 28334adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao setattr(test_class, test_name, test_wrapper) 28344adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao 28354adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao def _get_parser(self, tester): 28364adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao parser = argparse.ArgumentParser( 28374adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao *tester.parser_signature.args, 28384adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao **tester.parser_signature.kwargs) 28394adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao for argument_sig in getattr(tester, 'argument_signatures', []): 28404adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao parser.add_argument(*argument_sig.args, 28414adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao **argument_sig.kwargs) 28424adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao group_sigs = getattr(tester, 'argument_group_signatures', []) 28434adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao for group_sig, argument_sigs in group_sigs: 28444adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao group = parser.add_argument_group(*group_sig.args, 28454adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao **group_sig.kwargs) 28464adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao for argument_sig in argument_sigs: 28474adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao group.add_argument(*argument_sig.args, 28484adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao **argument_sig.kwargs) 28494adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao subparsers_sigs = getattr(tester, 'subparsers_signatures', []) 28504adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao if subparsers_sigs: 28514adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao subparsers = parser.add_subparsers() 28524adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao for subparser_sig in subparsers_sigs: 28534adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao subparsers.add_parser(*subparser_sig.args, 28544adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao **subparser_sig.kwargs) 28554adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao return parser 28564adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao 28574adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao def _test(self, tester, parser_text): 28584adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao expected_text = getattr(tester, self.func_suffix) 28594adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao expected_text = textwrap.dedent(expected_text) 28604adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao if expected_text != parser_text: 28614adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao print(repr(expected_text)) 28624adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao print(repr(parser_text)) 28634adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao for char1, char2 in zip(expected_text, parser_text): 28644adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao if char1 != char2: 28654adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao print('first diff: %r %r' % (char1, char2)) 28664adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao break 28674adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao tester.assertEqual(expected_text, parser_text) 28684adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao 28694adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao def test_format(self, tester): 28704adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao parser = self._get_parser(tester) 28714adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao format = getattr(parser, 'format_%s' % self.func_suffix) 28724adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao self._test(tester, format()) 28734adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao 28744adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao def test_print(self, tester): 28754adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao parser = self._get_parser(tester) 28764adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao print_ = getattr(parser, 'print_%s' % self.func_suffix) 28774adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao old_stream = getattr(sys, self.std_name) 28784adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao setattr(sys, self.std_name, StdIOBuffer()) 28794adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao try: 28804adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao print_() 28814adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao parser_text = getattr(sys, self.std_name).getvalue() 28824adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao finally: 28834adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao setattr(sys, self.std_name, old_stream) 28844adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao self._test(tester, parser_text) 28854adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao 28864adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao def test_print_file(self, tester): 28874adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao parser = self._get_parser(tester) 28884adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao print_ = getattr(parser, 'print_%s' % self.func_suffix) 28894adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao sfile = StdIOBuffer() 28904adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao print_(sfile) 28914adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao parser_text = sfile.getvalue() 28924adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao self._test(tester, parser_text) 28934adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao 28944adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao # add tests for {format,print}_{usage,help,version} 28954adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao for func_suffix, std_name in [('usage', 'stdout'), 28964adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao ('help', 'stdout'), 28974adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao ('version', 'stderr')]: 28984adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao AddTests(cls, func_suffix, std_name) 28994adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao 29004adfde8bc82dd39f59e0445588c3e599ada477dJosh Gaobases = TestCase, 29014adfde8bc82dd39f59e0445588c3e599ada477dJosh GaoHelpTestCase = TestHelpFormattingMetaclass('HelpTestCase', bases, {}) 29024adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao 29034adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao 29044adfde8bc82dd39f59e0445588c3e599ada477dJosh Gaoclass TestHelpBiggerOptionals(HelpTestCase): 29054adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao """Make sure that argument help aligns when options are longer""" 29064adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao 29074adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao parser_signature = Sig(prog='PROG', description='DESCRIPTION', 29084adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao epilog='EPILOG', version='0.1') 29094adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao argument_signatures = [ 29104adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao Sig('-x', action='store_true', help='X HELP'), 29114adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao Sig('--y', help='Y HELP'), 29124adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao Sig('foo', help='FOO HELP'), 29134adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao Sig('bar', help='BAR HELP'), 29144adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao ] 29154adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao argument_group_signatures = [] 29164adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao usage = '''\ 29174adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao usage: PROG [-h] [-v] [-x] [--y Y] foo bar 29184adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao ''' 29194adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao help = usage + '''\ 29204adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao 29214adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao DESCRIPTION 29224adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao 29234adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao positional arguments: 29244adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao foo FOO HELP 29254adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao bar BAR HELP 29264adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao 29274adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao optional arguments: 29284adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao -h, --help show this help message and exit 29294adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao -v, --version show program's version number and exit 29304adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao -x X HELP 29314adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao --y Y Y HELP 29324adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao 29334adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao EPILOG 29344adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao ''' 29354adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao version = '''\ 29364adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao 0.1 29374adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao ''' 29384adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao 29394adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao 29404adfde8bc82dd39f59e0445588c3e599ada477dJosh Gaoclass TestHelpBiggerOptionalGroups(HelpTestCase): 29414adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao """Make sure that argument help aligns when options are longer""" 29424adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao 29434adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao parser_signature = Sig(prog='PROG', description='DESCRIPTION', 29444adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao epilog='EPILOG', version='0.1') 29454adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao argument_signatures = [ 29464adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao Sig('-x', action='store_true', help='X HELP'), 29474adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao Sig('--y', help='Y HELP'), 29484adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao Sig('foo', help='FOO HELP'), 29494adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao Sig('bar', help='BAR HELP'), 29504adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao ] 29514adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao argument_group_signatures = [ 29524adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao (Sig('GROUP TITLE', description='GROUP DESCRIPTION'), [ 29534adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao Sig('baz', help='BAZ HELP'), 29544adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao Sig('-z', nargs='+', help='Z HELP')]), 29554adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao ] 29564adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao usage = '''\ 29574adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao usage: PROG [-h] [-v] [-x] [--y Y] [-z Z [Z ...]] foo bar baz 29584adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao ''' 29594adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao help = usage + '''\ 29604adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao 29614adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao DESCRIPTION 29624adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao 29634adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao positional arguments: 29644adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao foo FOO HELP 29654adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao bar BAR HELP 29664adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao 29674adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao optional arguments: 29684adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao -h, --help show this help message and exit 29694adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao -v, --version show program's version number and exit 29704adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao -x X HELP 29714adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao --y Y Y HELP 29724adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao 29734adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao GROUP TITLE: 29744adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao GROUP DESCRIPTION 29754adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao 29764adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao baz BAZ HELP 29774adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao -z Z [Z ...] Z HELP 29784adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao 29794adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao EPILOG 29804adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao ''' 29814adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao version = '''\ 29824adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao 0.1 29834adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao ''' 29844adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao 29854adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao 29864adfde8bc82dd39f59e0445588c3e599ada477dJosh Gaoclass TestHelpBiggerPositionals(HelpTestCase): 29874adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao """Make sure that help aligns when arguments are longer""" 29884adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao 29894adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao parser_signature = Sig(usage='USAGE', description='DESCRIPTION') 29904adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao argument_signatures = [ 29914adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao Sig('-x', action='store_true', help='X HELP'), 29924adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao Sig('--y', help='Y HELP'), 29934adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao Sig('ekiekiekifekang', help='EKI HELP'), 29944adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao Sig('bar', help='BAR HELP'), 29954adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao ] 29964adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao argument_group_signatures = [] 29974adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao usage = '''\ 29984adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao usage: USAGE 29994adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao ''' 30004adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao help = usage + '''\ 30014adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao 30024adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao DESCRIPTION 30034adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao 30044adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao positional arguments: 30054adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao ekiekiekifekang EKI HELP 30064adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao bar BAR HELP 30074adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao 30084adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao optional arguments: 30094adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao -h, --help show this help message and exit 30104adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao -x X HELP 30114adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao --y Y Y HELP 30124adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao ''' 30134adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao 30144adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao version = '' 30154adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao 30164adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao 30174adfde8bc82dd39f59e0445588c3e599ada477dJosh Gaoclass TestHelpReformatting(HelpTestCase): 30184adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao """Make sure that text after short names starts on the first line""" 30194adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao 30204adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao parser_signature = Sig( 30214adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao prog='PROG', 30224adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao description=' oddly formatted\n' 30234adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao 'description\n' 30244adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao '\n' 30254adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao 'that is so long that it should go onto multiple ' 30264adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao 'lines when wrapped') 30274adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao argument_signatures = [ 30284adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao Sig('-x', metavar='XX', help='oddly\n' 30294adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao ' formatted -x help'), 30304adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao Sig('y', metavar='yyy', help='normal y help'), 30314adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao ] 30324adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao argument_group_signatures = [ 30334adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao (Sig('title', description='\n' 30344adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao ' oddly formatted group\n' 30354adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao '\n' 30364adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao 'description'), 30374adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao [Sig('-a', action='store_true', 30384adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao help=' oddly \n' 30394adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao 'formatted -a help \n' 30404adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao ' again, so long that it should be wrapped over ' 30414adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao 'multiple lines')]), 30424adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao ] 30434adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao usage = '''\ 30444adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao usage: PROG [-h] [-x XX] [-a] yyy 30454adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao ''' 30464adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao help = usage + '''\ 30474adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao 30484adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao oddly formatted description that is so long that it should go onto \ 30494adfde8bc82dd39f59e0445588c3e599ada477dJosh Gaomultiple 30504adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao lines when wrapped 30514adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao 30524adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao positional arguments: 30534adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao yyy normal y help 30544adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao 30554adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao optional arguments: 30564adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao -h, --help show this help message and exit 30574adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao -x XX oddly formatted -x help 30584adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao 30594adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao title: 30604adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao oddly formatted group description 30614adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao 30624adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao -a oddly formatted -a help again, so long that it should \ 30634adfde8bc82dd39f59e0445588c3e599ada477dJosh Gaobe wrapped 30644adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao over multiple lines 30654adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao ''' 30664adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao version = '' 30674adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao 30684adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao 30694adfde8bc82dd39f59e0445588c3e599ada477dJosh Gaoclass TestHelpWrappingShortNames(HelpTestCase): 30704adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao """Make sure that text after short names starts on the first line""" 30714adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao 30724adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao parser_signature = Sig(prog='PROG', description= 'D\nD' * 30) 30734adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao argument_signatures = [ 30744adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao Sig('-x', metavar='XX', help='XHH HX' * 20), 30754adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao Sig('y', metavar='yyy', help='YH YH' * 20), 30764adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao ] 30774adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao argument_group_signatures = [ 30784adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao (Sig('ALPHAS'), [ 30794adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao Sig('-a', action='store_true', help='AHHH HHA' * 10)]), 30804adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao ] 30814adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao usage = '''\ 30824adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao usage: PROG [-h] [-x XX] [-a] yyy 30834adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao ''' 30844adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao help = usage + '''\ 30854adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao 30864adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao D DD DD DD DD DD DD DD DD DD DD DD DD DD DD DD DD DD DD DD DD DD DD \ 30874adfde8bc82dd39f59e0445588c3e599ada477dJosh GaoDD DD DD 30884adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao DD DD DD DD D 30894adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao 30904adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao positional arguments: 30914adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao yyy YH YHYH YHYH YHYH YHYH YHYH YHYH YHYH YHYH YHYH YHYH \ 30924adfde8bc82dd39f59e0445588c3e599ada477dJosh GaoYHYH YHYH 30934adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao YHYH YHYH YHYH YHYH YHYH YHYH YHYH YH 30944adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao 30954adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao optional arguments: 30964adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao -h, --help show this help message and exit 30974adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao -x XX XHH HXXHH HXXHH HXXHH HXXHH HXXHH HXXHH HXXHH HXXHH \ 30984adfde8bc82dd39f59e0445588c3e599ada477dJosh GaoHXXHH HXXHH 30994adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao HXXHH HXXHH HXXHH HXXHH HXXHH HXXHH HXXHH HXXHH HXXHH HX 31004adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao 31014adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao ALPHAS: 31024adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao -a AHHH HHAAHHH HHAAHHH HHAAHHH HHAAHHH HHAAHHH HHAAHHH \ 31034adfde8bc82dd39f59e0445588c3e599ada477dJosh GaoHHAAHHH 31044adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao HHAAHHH HHAAHHH HHA 31054adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao ''' 31064adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao version = '' 31074adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao 31084adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao 31094adfde8bc82dd39f59e0445588c3e599ada477dJosh Gaoclass TestHelpWrappingLongNames(HelpTestCase): 31104adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao """Make sure that text after long names starts on the next line""" 31114adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao 31124adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao parser_signature = Sig(usage='USAGE', description= 'D D' * 30, 31134adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao version='V V'*30) 31144adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao argument_signatures = [ 31154adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao Sig('-x', metavar='X' * 25, help='XH XH' * 20), 31164adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao Sig('y', metavar='y' * 25, help='YH YH' * 20), 31174adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao ] 31184adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao argument_group_signatures = [ 31194adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao (Sig('ALPHAS'), [ 31204adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao Sig('-a', metavar='A' * 25, help='AH AH' * 20), 31214adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao Sig('z', metavar='z' * 25, help='ZH ZH' * 20)]), 31224adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao ] 31234adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao usage = '''\ 31244adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao usage: USAGE 31254adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao ''' 31264adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao help = usage + '''\ 31274adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao 31284adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao D DD DD DD DD DD DD DD DD DD DD DD DD DD DD DD DD DD DD DD DD DD DD \ 31294adfde8bc82dd39f59e0445588c3e599ada477dJosh GaoDD DD DD 31304adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao DD DD DD DD D 31314adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao 31324adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao positional arguments: 31334adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao yyyyyyyyyyyyyyyyyyyyyyyyy 31344adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao YH YHYH YHYH YHYH YHYH YHYH YHYH YHYH YHYH \ 31354adfde8bc82dd39f59e0445588c3e599ada477dJosh GaoYHYH YHYH 31364adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao YHYH YHYH YHYH YHYH YHYH YHYH YHYH YHYH YHYH YH 31374adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao 31384adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao optional arguments: 31394adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao -h, --help show this help message and exit 31404adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao -v, --version show program's version number and exit 31414adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao -x XXXXXXXXXXXXXXXXXXXXXXXXX 31424adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao XH XHXH XHXH XHXH XHXH XHXH XHXH XHXH XHXH \ 31434adfde8bc82dd39f59e0445588c3e599ada477dJosh GaoXHXH XHXH 31444adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao XHXH XHXH XHXH XHXH XHXH XHXH XHXH XHXH XHXH XH 31454adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao 31464adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao ALPHAS: 31474adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao -a AAAAAAAAAAAAAAAAAAAAAAAAA 31484adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao AH AHAH AHAH AHAH AHAH AHAH AHAH AHAH AHAH \ 31494adfde8bc82dd39f59e0445588c3e599ada477dJosh GaoAHAH AHAH 31504adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao AHAH AHAH AHAH AHAH AHAH AHAH AHAH AHAH AHAH AH 31514adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao zzzzzzzzzzzzzzzzzzzzzzzzz 31524adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao ZH ZHZH ZHZH ZHZH ZHZH ZHZH ZHZH ZHZH ZHZH \ 31534adfde8bc82dd39f59e0445588c3e599ada477dJosh GaoZHZH ZHZH 31544adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao ZHZH ZHZH ZHZH ZHZH ZHZH ZHZH ZHZH ZHZH ZHZH ZH 31554adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao ''' 31564adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao version = '''\ 31574adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao V VV VV VV VV VV VV VV VV VV VV VV VV VV VV VV VV VV VV VV VV VV VV \ 31584adfde8bc82dd39f59e0445588c3e599ada477dJosh GaoVV VV VV 31594adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao VV VV VV VV V 31604adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao ''' 31614adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao 31624adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao 31634adfde8bc82dd39f59e0445588c3e599ada477dJosh Gaoclass TestHelpUsage(HelpTestCase): 31644adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao """Test basic usage messages""" 31654adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao 31664adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao parser_signature = Sig(prog='PROG') 31674adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao argument_signatures = [ 31684adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao Sig('-w', nargs='+', help='w'), 31694adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao Sig('-x', nargs='*', help='x'), 31704adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao Sig('a', help='a'), 31714adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao Sig('b', help='b', nargs=2), 31724adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao Sig('c', help='c', nargs='?'), 31734adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao ] 31744adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao argument_group_signatures = [ 31754adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao (Sig('group'), [ 31764adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao Sig('-y', nargs='?', help='y'), 31774adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao Sig('-z', nargs=3, help='z'), 31784adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao Sig('d', help='d', nargs='*'), 31794adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao Sig('e', help='e', nargs='+'), 31804adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao ]) 31814adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao ] 31824adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao usage = '''\ 31834adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao usage: PROG [-h] [-w W [W ...]] [-x [X [X ...]]] [-y [Y]] [-z Z Z Z] 31844adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao a b b [c] [d [d ...]] e [e ...] 31854adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao ''' 31864adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao help = usage + '''\ 31874adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao 31884adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao positional arguments: 31894adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao a a 31904adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao b b 31914adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao c c 31924adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao 31934adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao optional arguments: 31944adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao -h, --help show this help message and exit 31954adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao -w W [W ...] w 31964adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao -x [X [X ...]] x 31974adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao 31984adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao group: 31994adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao -y [Y] y 32004adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao -z Z Z Z z 32014adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao d d 32024adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao e e 32034adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao ''' 32044adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao version = '' 32054adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao 32064adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao 32074adfde8bc82dd39f59e0445588c3e599ada477dJosh Gaoclass TestHelpOnlyUserGroups(HelpTestCase): 32084adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao """Test basic usage messages""" 32094adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao 32104adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao parser_signature = Sig(prog='PROG', add_help=False) 32114adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao argument_signatures = [] 32124adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao argument_group_signatures = [ 32134adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao (Sig('xxxx'), [ 32144adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao Sig('-x', help='x'), 32154adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao Sig('a', help='a'), 32164adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao ]), 32174adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao (Sig('yyyy'), [ 32184adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao Sig('b', help='b'), 32194adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao Sig('-y', help='y'), 32204adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao ]), 32214adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao ] 32224adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao usage = '''\ 32234adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao usage: PROG [-x X] [-y Y] a b 32244adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao ''' 32254adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao help = usage + '''\ 32264adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao 32274adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao xxxx: 32284adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao -x X x 32294adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao a a 32304adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao 32314adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao yyyy: 32324adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao b b 32334adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao -y Y y 32344adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao ''' 32354adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao version = '' 32364adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao 32374adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao 32384adfde8bc82dd39f59e0445588c3e599ada477dJosh Gaoclass TestHelpUsageLongProg(HelpTestCase): 32394adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao """Test usage messages where the prog is long""" 32404adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao 32414adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao parser_signature = Sig(prog='P' * 60) 32424adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao argument_signatures = [ 32434adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao Sig('-w', metavar='W'), 32444adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao Sig('-x', metavar='X'), 32454adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao Sig('a'), 32464adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao Sig('b'), 32474adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao ] 32484adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao argument_group_signatures = [] 32494adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao usage = '''\ 32504adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao usage: PPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPP 32514adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao [-h] [-w W] [-x X] a b 32524adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao ''' 32534adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao help = usage + '''\ 32544adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao 32554adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao positional arguments: 32564adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao a 32574adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao b 32584adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao 32594adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao optional arguments: 32604adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao -h, --help show this help message and exit 32614adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao -w W 32624adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao -x X 32634adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao ''' 32644adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao version = '' 32654adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao 32664adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao 32674adfde8bc82dd39f59e0445588c3e599ada477dJosh Gaoclass TestHelpUsageLongProgOptionsWrap(HelpTestCase): 32684adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao """Test usage messages where the prog is long and the optionals wrap""" 32694adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao 32704adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao parser_signature = Sig(prog='P' * 60) 32714adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao argument_signatures = [ 32724adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao Sig('-w', metavar='W' * 25), 32734adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao Sig('-x', metavar='X' * 25), 32744adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao Sig('-y', metavar='Y' * 25), 32754adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao Sig('-z', metavar='Z' * 25), 32764adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao Sig('a'), 32774adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao Sig('b'), 32784adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao ] 32794adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao argument_group_signatures = [] 32804adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao usage = '''\ 32814adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao usage: PPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPP 32824adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao [-h] [-w WWWWWWWWWWWWWWWWWWWWWWWWW] \ 32834adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao[-x XXXXXXXXXXXXXXXXXXXXXXXXX] 32844adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao [-y YYYYYYYYYYYYYYYYYYYYYYYYY] [-z ZZZZZZZZZZZZZZZZZZZZZZZZZ] 32854adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao a b 32864adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao ''' 32874adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao help = usage + '''\ 32884adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao 32894adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao positional arguments: 32904adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao a 32914adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao b 32924adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao 32934adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao optional arguments: 32944adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao -h, --help show this help message and exit 32954adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao -w WWWWWWWWWWWWWWWWWWWWWWWWW 32964adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao -x XXXXXXXXXXXXXXXXXXXXXXXXX 32974adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao -y YYYYYYYYYYYYYYYYYYYYYYYYY 32984adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao -z ZZZZZZZZZZZZZZZZZZZZZZZZZ 32994adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao ''' 33004adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao version = '' 33014adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao 33024adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao 33034adfde8bc82dd39f59e0445588c3e599ada477dJosh Gaoclass TestHelpUsageLongProgPositionalsWrap(HelpTestCase): 33044adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao """Test usage messages where the prog is long and the positionals wrap""" 33054adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao 33064adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao parser_signature = Sig(prog='P' * 60, add_help=False) 33074adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao argument_signatures = [ 33084adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao Sig('a' * 25), 33094adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao Sig('b' * 25), 33104adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao Sig('c' * 25), 33114adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao ] 33124adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao argument_group_signatures = [] 33134adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao usage = '''\ 33144adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao usage: PPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPP 33154adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao aaaaaaaaaaaaaaaaaaaaaaaaa bbbbbbbbbbbbbbbbbbbbbbbbb 33164adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao ccccccccccccccccccccccccc 33174adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao ''' 33184adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao help = usage + '''\ 33194adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao 33204adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao positional arguments: 33214adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao aaaaaaaaaaaaaaaaaaaaaaaaa 33224adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao bbbbbbbbbbbbbbbbbbbbbbbbb 33234adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao ccccccccccccccccccccccccc 33244adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao ''' 33254adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao version = '' 33264adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao 33274adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao 33284adfde8bc82dd39f59e0445588c3e599ada477dJosh Gaoclass TestHelpUsageOptionalsWrap(HelpTestCase): 33294adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao """Test usage messages where the optionals wrap""" 33304adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao 33314adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao parser_signature = Sig(prog='PROG') 33324adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao argument_signatures = [ 33334adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao Sig('-w', metavar='W' * 25), 33344adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao Sig('-x', metavar='X' * 25), 33354adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao Sig('-y', metavar='Y' * 25), 33364adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao Sig('-z', metavar='Z' * 25), 33374adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao Sig('a'), 33384adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao Sig('b'), 33394adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao Sig('c'), 33404adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao ] 33414adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao argument_group_signatures = [] 33424adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao usage = '''\ 33434adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao usage: PROG [-h] [-w WWWWWWWWWWWWWWWWWWWWWWWWW] \ 33444adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao[-x XXXXXXXXXXXXXXXXXXXXXXXXX] 33454adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao [-y YYYYYYYYYYYYYYYYYYYYYYYYY] \ 33464adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao[-z ZZZZZZZZZZZZZZZZZZZZZZZZZ] 33474adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao a b c 33484adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao ''' 33494adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao help = usage + '''\ 33504adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao 33514adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao positional arguments: 33524adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao a 33534adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao b 33544adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao c 33554adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao 33564adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao optional arguments: 33574adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao -h, --help show this help message and exit 33584adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao -w WWWWWWWWWWWWWWWWWWWWWWWWW 33594adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao -x XXXXXXXXXXXXXXXXXXXXXXXXX 33604adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao -y YYYYYYYYYYYYYYYYYYYYYYYYY 33614adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao -z ZZZZZZZZZZZZZZZZZZZZZZZZZ 33624adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao ''' 33634adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao version = '' 33644adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao 33654adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao 33664adfde8bc82dd39f59e0445588c3e599ada477dJosh Gaoclass TestHelpUsagePositionalsWrap(HelpTestCase): 33674adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao """Test usage messages where the positionals wrap""" 33684adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao 33694adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao parser_signature = Sig(prog='PROG') 33704adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao argument_signatures = [ 33714adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao Sig('-x'), 33724adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao Sig('-y'), 33734adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao Sig('-z'), 33744adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao Sig('a' * 25), 33754adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao Sig('b' * 25), 33764adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao Sig('c' * 25), 33774adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao ] 33784adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao argument_group_signatures = [] 33794adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao usage = '''\ 33804adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao usage: PROG [-h] [-x X] [-y Y] [-z Z] 33814adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao aaaaaaaaaaaaaaaaaaaaaaaaa bbbbbbbbbbbbbbbbbbbbbbbbb 33824adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao ccccccccccccccccccccccccc 33834adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao ''' 33844adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao help = usage + '''\ 33854adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao 33864adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao positional arguments: 33874adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao aaaaaaaaaaaaaaaaaaaaaaaaa 33884adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao bbbbbbbbbbbbbbbbbbbbbbbbb 33894adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao ccccccccccccccccccccccccc 33904adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao 33914adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao optional arguments: 33924adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao -h, --help show this help message and exit 33934adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao -x X 33944adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao -y Y 33954adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao -z Z 33964adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao ''' 33974adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao version = '' 33984adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao 33994adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao 34004adfde8bc82dd39f59e0445588c3e599ada477dJosh Gaoclass TestHelpUsageOptionalsPositionalsWrap(HelpTestCase): 34014adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao """Test usage messages where the optionals and positionals wrap""" 34024adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao 34034adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao parser_signature = Sig(prog='PROG') 34044adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao argument_signatures = [ 34054adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao Sig('-x', metavar='X' * 25), 34064adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao Sig('-y', metavar='Y' * 25), 34074adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao Sig('-z', metavar='Z' * 25), 34084adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao Sig('a' * 25), 34094adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao Sig('b' * 25), 34104adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao Sig('c' * 25), 34114adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao ] 34124adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao argument_group_signatures = [] 34134adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao usage = '''\ 34144adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao usage: PROG [-h] [-x XXXXXXXXXXXXXXXXXXXXXXXXX] \ 34154adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao[-y YYYYYYYYYYYYYYYYYYYYYYYYY] 34164adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao [-z ZZZZZZZZZZZZZZZZZZZZZZZZZ] 34174adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao aaaaaaaaaaaaaaaaaaaaaaaaa bbbbbbbbbbbbbbbbbbbbbbbbb 34184adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao ccccccccccccccccccccccccc 34194adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao ''' 34204adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao help = usage + '''\ 34214adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao 34224adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao positional arguments: 34234adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao aaaaaaaaaaaaaaaaaaaaaaaaa 34244adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao bbbbbbbbbbbbbbbbbbbbbbbbb 34254adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao ccccccccccccccccccccccccc 34264adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao 34274adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao optional arguments: 34284adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao -h, --help show this help message and exit 34294adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao -x XXXXXXXXXXXXXXXXXXXXXXXXX 34304adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao -y YYYYYYYYYYYYYYYYYYYYYYYYY 34314adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao -z ZZZZZZZZZZZZZZZZZZZZZZZZZ 34324adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao ''' 34334adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao version = '' 34344adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao 34354adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao 34364adfde8bc82dd39f59e0445588c3e599ada477dJosh Gaoclass TestHelpUsageOptionalsOnlyWrap(HelpTestCase): 34374adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao """Test usage messages where there are only optionals and they wrap""" 34384adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao 34394adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao parser_signature = Sig(prog='PROG') 34404adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao argument_signatures = [ 34414adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao Sig('-x', metavar='X' * 25), 34424adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao Sig('-y', metavar='Y' * 25), 34434adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao Sig('-z', metavar='Z' * 25), 34444adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao ] 34454adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao argument_group_signatures = [] 34464adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao usage = '''\ 34474adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao usage: PROG [-h] [-x XXXXXXXXXXXXXXXXXXXXXXXXX] \ 34484adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao[-y YYYYYYYYYYYYYYYYYYYYYYYYY] 34494adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao [-z ZZZZZZZZZZZZZZZZZZZZZZZZZ] 34504adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao ''' 34514adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao help = usage + '''\ 34524adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao 34534adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao optional arguments: 34544adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao -h, --help show this help message and exit 34554adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao -x XXXXXXXXXXXXXXXXXXXXXXXXX 34564adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao -y YYYYYYYYYYYYYYYYYYYYYYYYY 34574adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao -z ZZZZZZZZZZZZZZZZZZZZZZZZZ 34584adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao ''' 34594adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao version = '' 34604adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao 34614adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao 34624adfde8bc82dd39f59e0445588c3e599ada477dJosh Gaoclass TestHelpUsagePositionalsOnlyWrap(HelpTestCase): 34634adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao """Test usage messages where there are only positionals and they wrap""" 34644adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao 34654adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao parser_signature = Sig(prog='PROG', add_help=False) 34664adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao argument_signatures = [ 34674adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao Sig('a' * 25), 34684adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao Sig('b' * 25), 34694adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao Sig('c' * 25), 34704adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao ] 34714adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao argument_group_signatures = [] 34724adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao usage = '''\ 34734adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao usage: PROG aaaaaaaaaaaaaaaaaaaaaaaaa bbbbbbbbbbbbbbbbbbbbbbbbb 34744adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao ccccccccccccccccccccccccc 34754adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao ''' 34764adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao help = usage + '''\ 34774adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao 34784adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao positional arguments: 34794adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao aaaaaaaaaaaaaaaaaaaaaaaaa 34804adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao bbbbbbbbbbbbbbbbbbbbbbbbb 34814adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao ccccccccccccccccccccccccc 34824adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao ''' 34834adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao version = '' 34844adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao 34854adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao 34864adfde8bc82dd39f59e0445588c3e599ada477dJosh Gaoclass TestHelpVariableExpansion(HelpTestCase): 34874adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao """Test that variables are expanded properly in help messages""" 34884adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao 34894adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao parser_signature = Sig(prog='PROG') 34904adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao argument_signatures = [ 34914adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao Sig('-x', type=int, 34924adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao help='x %(prog)s %(default)s %(type)s %%'), 34934adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao Sig('-y', action='store_const', default=42, const='XXX', 34944adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao help='y %(prog)s %(default)s %(const)s'), 34954adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao Sig('--foo', choices='abc', 34964adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao help='foo %(prog)s %(default)s %(choices)s'), 34974adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao Sig('--bar', default='baz', choices=[1, 2], metavar='BBB', 34984adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao help='bar %(prog)s %(default)s %(dest)s'), 34994adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao Sig('spam', help='spam %(prog)s %(default)s'), 35004adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao Sig('badger', default=0.5, help='badger %(prog)s %(default)s'), 35014adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao ] 35024adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao argument_group_signatures = [ 35034adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao (Sig('group'), [ 35044adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao Sig('-a', help='a %(prog)s %(default)s'), 35054adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao Sig('-b', default=-1, help='b %(prog)s %(default)s'), 35064adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao ]) 35074adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao ] 35084adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao usage = ('''\ 35094adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao usage: PROG [-h] [-x X] [-y] [--foo {a,b,c}] [--bar BBB] [-a A] [-b B] 35104adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao spam badger 35114adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao ''') 35124adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao help = usage + '''\ 35134adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao 35144adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao positional arguments: 35154adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao spam spam PROG None 35164adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao badger badger PROG 0.5 35174adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao 35184adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao optional arguments: 35194adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao -h, --help show this help message and exit 35204adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao -x X x PROG None int % 35214adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao -y y PROG 42 XXX 35224adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao --foo {a,b,c} foo PROG None a, b, c 35234adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao --bar BBB bar PROG baz bar 35244adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao 35254adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao group: 35264adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao -a A a PROG None 35274adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao -b B b PROG -1 35284adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao ''' 35294adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao version = '' 35304adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao 35314adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao 35324adfde8bc82dd39f59e0445588c3e599ada477dJosh Gaoclass TestHelpVariableExpansionUsageSupplied(HelpTestCase): 35334adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao """Test that variables are expanded properly when usage= is present""" 35344adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao 35354adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao parser_signature = Sig(prog='PROG', usage='%(prog)s FOO') 35364adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao argument_signatures = [] 35374adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao argument_group_signatures = [] 35384adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao usage = ('''\ 35394adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao usage: PROG FOO 35404adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao ''') 35414adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao help = usage + '''\ 35424adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao 35434adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao optional arguments: 35444adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao -h, --help show this help message and exit 35454adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao ''' 35464adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao version = '' 35474adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao 35484adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao 35494adfde8bc82dd39f59e0445588c3e599ada477dJosh Gaoclass TestHelpVariableExpansionNoArguments(HelpTestCase): 35504adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao """Test that variables are expanded properly with no arguments""" 35514adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao 35524adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao parser_signature = Sig(prog='PROG', add_help=False) 35534adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao argument_signatures = [] 35544adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao argument_group_signatures = [] 35554adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao usage = ('''\ 35564adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao usage: PROG 35574adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao ''') 35584adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao help = usage 35594adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao version = '' 35604adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao 35614adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao 35624adfde8bc82dd39f59e0445588c3e599ada477dJosh Gaoclass TestHelpSuppressUsage(HelpTestCase): 35634adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao """Test that items can be suppressed in usage messages""" 35644adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao 35654adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao parser_signature = Sig(prog='PROG', usage=argparse.SUPPRESS) 35664adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao argument_signatures = [ 35674adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao Sig('--foo', help='foo help'), 35684adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao Sig('spam', help='spam help'), 35694adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao ] 35704adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao argument_group_signatures = [] 35714adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao help = '''\ 35724adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao positional arguments: 35734adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao spam spam help 35744adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao 35754adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao optional arguments: 35764adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao -h, --help show this help message and exit 35774adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao --foo FOO foo help 35784adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao ''' 35794adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao usage = '' 35804adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao version = '' 35814adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao 35824adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao 35834adfde8bc82dd39f59e0445588c3e599ada477dJosh Gaoclass TestHelpSuppressOptional(HelpTestCase): 35844adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao """Test that optional arguments can be suppressed in help messages""" 35854adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao 35864adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao parser_signature = Sig(prog='PROG', add_help=False) 35874adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao argument_signatures = [ 35884adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao Sig('--foo', help=argparse.SUPPRESS), 35894adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao Sig('spam', help='spam help'), 35904adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao ] 35914adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao argument_group_signatures = [] 35924adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao usage = '''\ 35934adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao usage: PROG spam 35944adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao ''' 35954adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao help = usage + '''\ 35964adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao 35974adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao positional arguments: 35984adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao spam spam help 35994adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao ''' 36004adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao version = '' 36014adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao 36024adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao 36034adfde8bc82dd39f59e0445588c3e599ada477dJosh Gaoclass TestHelpSuppressOptionalGroup(HelpTestCase): 36044adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao """Test that optional groups can be suppressed in help messages""" 36054adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao 36064adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao parser_signature = Sig(prog='PROG') 36074adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao argument_signatures = [ 36084adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao Sig('--foo', help='foo help'), 36094adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao Sig('spam', help='spam help'), 36104adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao ] 36114adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao argument_group_signatures = [ 36124adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao (Sig('group'), [Sig('--bar', help=argparse.SUPPRESS)]), 36134adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao ] 36144adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao usage = '''\ 36154adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao usage: PROG [-h] [--foo FOO] spam 36164adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao ''' 36174adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao help = usage + '''\ 36184adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao 36194adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao positional arguments: 36204adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao spam spam help 36214adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao 36224adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao optional arguments: 36234adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao -h, --help show this help message and exit 36244adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao --foo FOO foo help 36254adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao ''' 36264adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao version = '' 36274adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao 36284adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao 36294adfde8bc82dd39f59e0445588c3e599ada477dJosh Gaoclass TestHelpSuppressPositional(HelpTestCase): 36304adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao """Test that positional arguments can be suppressed in help messages""" 36314adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao 36324adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao parser_signature = Sig(prog='PROG') 36334adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao argument_signatures = [ 36344adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao Sig('--foo', help='foo help'), 36354adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao Sig('spam', help=argparse.SUPPRESS), 36364adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao ] 36374adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao argument_group_signatures = [] 36384adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao usage = '''\ 36394adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao usage: PROG [-h] [--foo FOO] 36404adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao ''' 36414adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao help = usage + '''\ 36424adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao 36434adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao optional arguments: 36444adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao -h, --help show this help message and exit 36454adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao --foo FOO foo help 36464adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao ''' 36474adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao version = '' 36484adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao 36494adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao 36504adfde8bc82dd39f59e0445588c3e599ada477dJosh Gaoclass TestHelpRequiredOptional(HelpTestCase): 36514adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao """Test that required options don't look optional""" 36524adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao 36534adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao parser_signature = Sig(prog='PROG') 36544adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao argument_signatures = [ 36554adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao Sig('--foo', required=True, help='foo help'), 36564adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao ] 36574adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao argument_group_signatures = [] 36584adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao usage = '''\ 36594adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao usage: PROG [-h] --foo FOO 36604adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao ''' 36614adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao help = usage + '''\ 36624adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao 36634adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao optional arguments: 36644adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao -h, --help show this help message and exit 36654adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao --foo FOO foo help 36664adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao ''' 36674adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao version = '' 36684adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao 36694adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao 36704adfde8bc82dd39f59e0445588c3e599ada477dJosh Gaoclass TestHelpAlternatePrefixChars(HelpTestCase): 36714adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao """Test that options display with different prefix characters""" 36724adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao 36734adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao parser_signature = Sig(prog='PROG', prefix_chars='^;', add_help=False) 36744adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao argument_signatures = [ 36754adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao Sig('^^foo', action='store_true', help='foo help'), 36764adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao Sig(';b', ';;bar', help='bar help'), 36774adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao ] 36784adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao argument_group_signatures = [] 36794adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao usage = '''\ 36804adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao usage: PROG [^^foo] [;b BAR] 36814adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao ''' 36824adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao help = usage + '''\ 36834adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao 36844adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao optional arguments: 36854adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao ^^foo foo help 36864adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao ;b BAR, ;;bar BAR bar help 36874adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao ''' 36884adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao version = '' 36894adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao 36904adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao 36914adfde8bc82dd39f59e0445588c3e599ada477dJosh Gaoclass TestHelpNoHelpOptional(HelpTestCase): 36924adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao """Test that the --help argument can be suppressed help messages""" 36934adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao 36944adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao parser_signature = Sig(prog='PROG', add_help=False) 36954adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao argument_signatures = [ 36964adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao Sig('--foo', help='foo help'), 36974adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao Sig('spam', help='spam help'), 36984adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao ] 36994adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao argument_group_signatures = [] 37004adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao usage = '''\ 37014adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao usage: PROG [--foo FOO] spam 37024adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao ''' 37034adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao help = usage + '''\ 37044adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao 37054adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao positional arguments: 37064adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao spam spam help 37074adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao 37084adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao optional arguments: 37094adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao --foo FOO foo help 37104adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao ''' 37114adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao version = '' 37124adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao 37134adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao 37144adfde8bc82dd39f59e0445588c3e599ada477dJosh Gaoclass TestHelpVersionOptional(HelpTestCase): 37154adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao """Test that the --version argument can be suppressed help messages""" 37164adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao 37174adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao parser_signature = Sig(prog='PROG', version='1.0') 37184adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao argument_signatures = [ 37194adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao Sig('--foo', help='foo help'), 37204adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao Sig('spam', help='spam help'), 37214adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao ] 37224adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao argument_group_signatures = [] 37234adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao usage = '''\ 37244adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao usage: PROG [-h] [-v] [--foo FOO] spam 37254adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao ''' 37264adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao help = usage + '''\ 37274adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao 37284adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao positional arguments: 37294adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao spam spam help 37304adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao 37314adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao optional arguments: 37324adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao -h, --help show this help message and exit 37334adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao -v, --version show program's version number and exit 37344adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao --foo FOO foo help 37354adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao ''' 37364adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao version = '''\ 37374adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao 1.0 37384adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao ''' 37394adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao 37404adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao 37414adfde8bc82dd39f59e0445588c3e599ada477dJosh Gaoclass TestHelpNone(HelpTestCase): 37424adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao """Test that no errors occur if no help is specified""" 37434adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao 37444adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao parser_signature = Sig(prog='PROG') 37454adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao argument_signatures = [ 37464adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao Sig('--foo'), 37474adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao Sig('spam'), 37484adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao ] 37494adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao argument_group_signatures = [] 37504adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao usage = '''\ 37514adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao usage: PROG [-h] [--foo FOO] spam 37524adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao ''' 37534adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao help = usage + '''\ 37544adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao 37554adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao positional arguments: 37564adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao spam 37574adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao 37584adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao optional arguments: 37594adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao -h, --help show this help message and exit 37604adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao --foo FOO 37614adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao ''' 37624adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao version = '' 37634adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao 37644adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao 37654adfde8bc82dd39f59e0445588c3e599ada477dJosh Gaoclass TestHelpTupleMetavar(HelpTestCase): 37664adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao """Test specifying metavar as a tuple""" 37674adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao 37684adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao parser_signature = Sig(prog='PROG') 37694adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao argument_signatures = [ 37704adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao Sig('-w', help='w', nargs='+', metavar=('W1', 'W2')), 37714adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao Sig('-x', help='x', nargs='*', metavar=('X1', 'X2')), 37724adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao Sig('-y', help='y', nargs=3, metavar=('Y1', 'Y2', 'Y3')), 37734adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao Sig('-z', help='z', nargs='?', metavar=('Z1', )), 37744adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao ] 37754adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao argument_group_signatures = [] 37764adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao usage = '''\ 37774adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao usage: PROG [-h] [-w W1 [W2 ...]] [-x [X1 [X2 ...]]] [-y Y1 Y2 Y3] \ 37784adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao[-z [Z1]] 37794adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao ''' 37804adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao help = usage + '''\ 37814adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao 37824adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao optional arguments: 37834adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao -h, --help show this help message and exit 37844adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao -w W1 [W2 ...] w 37854adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao -x [X1 [X2 ...]] x 37864adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao -y Y1 Y2 Y3 y 37874adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao -z [Z1] z 37884adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao ''' 37894adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao version = '' 37904adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao 37914adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao 37924adfde8bc82dd39f59e0445588c3e599ada477dJosh Gaoclass TestHelpRawText(HelpTestCase): 37934adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao """Test the RawTextHelpFormatter""" 37944adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao 37954adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao parser_signature = Sig( 37964adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao prog='PROG', formatter_class=argparse.RawTextHelpFormatter, 37974adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao description='Keep the formatting\n' 37984adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao ' exactly as it is written\n' 37994adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao '\n' 38004adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao 'here\n') 38014adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao 38024adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao argument_signatures = [ 38034adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao Sig('--foo', help=' foo help should also\n' 38044adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao 'appear as given here'), 38054adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao Sig('spam', help='spam help'), 38064adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao ] 38074adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao argument_group_signatures = [ 38084adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao (Sig('title', description=' This text\n' 38094adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao ' should be indented\n' 38104adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao ' exactly like it is here\n'), 38114adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao [Sig('--bar', help='bar help')]), 38124adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao ] 38134adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao usage = '''\ 38144adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao usage: PROG [-h] [--foo FOO] [--bar BAR] spam 38154adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao ''' 38164adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao help = usage + '''\ 38174adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao 38184adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao Keep the formatting 38194adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao exactly as it is written 38204adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao 38214adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao here 38224adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao 38234adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao positional arguments: 38244adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao spam spam help 38254adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao 38264adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao optional arguments: 38274adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao -h, --help show this help message and exit 38284adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao --foo FOO foo help should also 38294adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao appear as given here 38304adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao 38314adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao title: 38324adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao This text 38334adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao should be indented 38344adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao exactly like it is here 38354adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao 38364adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao --bar BAR bar help 38374adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao ''' 38384adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao version = '' 38394adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao 38404adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao 38414adfde8bc82dd39f59e0445588c3e599ada477dJosh Gaoclass TestHelpRawDescription(HelpTestCase): 38424adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao """Test the RawTextHelpFormatter""" 38434adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao 38444adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao parser_signature = Sig( 38454adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao prog='PROG', formatter_class=argparse.RawDescriptionHelpFormatter, 38464adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao description='Keep the formatting\n' 38474adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao ' exactly as it is written\n' 38484adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao '\n' 38494adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao 'here\n') 38504adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao 38514adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao argument_signatures = [ 38524adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao Sig('--foo', help=' foo help should not\n' 38534adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao ' retain this odd formatting'), 38544adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao Sig('spam', help='spam help'), 38554adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao ] 38564adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao argument_group_signatures = [ 38574adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao (Sig('title', description=' This text\n' 38584adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao ' should be indented\n' 38594adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao ' exactly like it is here\n'), 38604adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao [Sig('--bar', help='bar help')]), 38614adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao ] 38624adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao usage = '''\ 38634adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao usage: PROG [-h] [--foo FOO] [--bar BAR] spam 38644adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao ''' 38654adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao help = usage + '''\ 38664adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao 38674adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao Keep the formatting 38684adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao exactly as it is written 38694adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao 38704adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao here 38714adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao 38724adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao positional arguments: 38734adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao spam spam help 38744adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao 38754adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao optional arguments: 38764adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao -h, --help show this help message and exit 38774adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao --foo FOO foo help should not retain this odd formatting 38784adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao 38794adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao title: 38804adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao This text 38814adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao should be indented 38824adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao exactly like it is here 38834adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao 38844adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao --bar BAR bar help 38854adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao ''' 38864adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao version = '' 38874adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao 38884adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao 38894adfde8bc82dd39f59e0445588c3e599ada477dJosh Gaoclass TestHelpArgumentDefaults(HelpTestCase): 38904adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao """Test the ArgumentDefaultsHelpFormatter""" 38914adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao 38924adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao parser_signature = Sig( 38934adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao prog='PROG', formatter_class=argparse.ArgumentDefaultsHelpFormatter, 38944adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao description='description') 38954adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao 38964adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao argument_signatures = [ 38974adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao Sig('--foo', help='foo help - oh and by the way, %(default)s'), 38984adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao Sig('--bar', action='store_true', help='bar help'), 38994adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao Sig('spam', help='spam help'), 39004adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao Sig('badger', nargs='?', default='wooden', help='badger help'), 39014adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao ] 39024adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao argument_group_signatures = [ 39034adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao (Sig('title', description='description'), 39044adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao [Sig('--baz', type=int, default=42, help='baz help')]), 39054adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao ] 39064adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao usage = '''\ 39074adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao usage: PROG [-h] [--foo FOO] [--bar] [--baz BAZ] spam [badger] 39084adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao ''' 39094adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao help = usage + '''\ 39104adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao 39114adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao description 39124adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao 39134adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao positional arguments: 39144adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao spam spam help 39154adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao badger badger help (default: wooden) 39164adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao 39174adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao optional arguments: 39184adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao -h, --help show this help message and exit 39194adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao --foo FOO foo help - oh and by the way, None 39204adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao --bar bar help (default: False) 39214adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao 39224adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao title: 39234adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao description 39244adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao 39254adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao --baz BAZ baz help (default: 42) 39264adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao ''' 39274adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao version = '' 39284adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao 39294adfde8bc82dd39f59e0445588c3e599ada477dJosh Gaoclass TestHelpVersionAction(HelpTestCase): 39304adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao """Test the default help for the version action""" 39314adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao 39324adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao parser_signature = Sig(prog='PROG', description='description') 39334adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao argument_signatures = [Sig('-V', '--version', action='version', version='3.6')] 39344adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao argument_group_signatures = [] 39354adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao usage = '''\ 39364adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao usage: PROG [-h] [-V] 39374adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao ''' 39384adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao help = usage + '''\ 39394adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao 39404adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao description 39414adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao 39424adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao optional arguments: 39434adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao -h, --help show this help message and exit 39444adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao -V, --version show program's version number and exit 39454adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao ''' 39464adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao version = '' 39474adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao 39484adfde8bc82dd39f59e0445588c3e599ada477dJosh Gaoclass TestHelpSubparsersOrdering(HelpTestCase): 39494adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao """Test ordering of subcommands in help matches the code""" 39504adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao parser_signature = Sig(prog='PROG', 39514adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao description='display some subcommands', 39524adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao version='0.1') 39534adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao 39544adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao subparsers_signatures = [Sig(name=name) 39554adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao for name in ('a', 'b', 'c', 'd', 'e')] 39564adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao 39574adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao usage = '''\ 39584adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao usage: PROG [-h] [-v] {a,b,c,d,e} ... 39594adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao ''' 39604adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao 39614adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao help = usage + '''\ 39624adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao 39634adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao display some subcommands 39644adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao 39654adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao positional arguments: 39664adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao {a,b,c,d,e} 39674adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao 39684adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao optional arguments: 39694adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao -h, --help show this help message and exit 39704adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao -v, --version show program's version number and exit 39714adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao ''' 39724adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao 39734adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao version = '''\ 39744adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao 0.1 39754adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao ''' 39764adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao 39774adfde8bc82dd39f59e0445588c3e599ada477dJosh Gaoclass TestHelpSubparsersWithHelpOrdering(HelpTestCase): 39784adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao """Test ordering of subcommands in help matches the code""" 39794adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao parser_signature = Sig(prog='PROG', 39804adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao description='display some subcommands', 39814adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao version='0.1') 39824adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao 39834adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao subcommand_data = (('a', 'a subcommand help'), 39844adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao ('b', 'b subcommand help'), 39854adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao ('c', 'c subcommand help'), 39864adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao ('d', 'd subcommand help'), 39874adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao ('e', 'e subcommand help'), 39884adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao ) 39894adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao 39904adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao subparsers_signatures = [Sig(name=name, help=help) 39914adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao for name, help in subcommand_data] 39924adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao 39934adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao usage = '''\ 39944adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao usage: PROG [-h] [-v] {a,b,c,d,e} ... 39954adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao ''' 39964adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao 39974adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao help = usage + '''\ 39984adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao 39994adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao display some subcommands 40004adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao 40014adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao positional arguments: 40024adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao {a,b,c,d,e} 40034adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao a a subcommand help 40044adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao b b subcommand help 40054adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao c c subcommand help 40064adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao d d subcommand help 40074adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao e e subcommand help 40084adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao 40094adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao optional arguments: 40104adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao -h, --help show this help message and exit 40114adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao -v, --version show program's version number and exit 40124adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao ''' 40134adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao 40144adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao version = '''\ 40154adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao 0.1 40164adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao ''' 40174adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao 40184adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao 40194adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao# ===================================== 40204adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao# Optional/Positional constructor tests 40214adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao# ===================================== 40224adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao 40234adfde8bc82dd39f59e0445588c3e599ada477dJosh Gaoclass TestInvalidArgumentConstructors(TestCase): 40244adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao """Test a bunch of invalid Argument constructors""" 40254adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao 40264adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao def assertTypeError(self, *args, **kwargs): 40274adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao parser = argparse.ArgumentParser() 40284adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao self.assertRaises(TypeError, parser.add_argument, 40294adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao *args, **kwargs) 40304adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao 40314adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao def assertValueError(self, *args, **kwargs): 40324adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao parser = argparse.ArgumentParser() 40334adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao self.assertRaises(ValueError, parser.add_argument, 40344adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao *args, **kwargs) 40354adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao 40364adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao def test_invalid_keyword_arguments(self): 40374adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao self.assertTypeError('-x', bar=None) 40384adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao self.assertTypeError('-y', callback='foo') 40394adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao self.assertTypeError('-y', callback_args=()) 40404adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao self.assertTypeError('-y', callback_kwargs={}) 40414adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao 40424adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao def test_missing_destination(self): 40434adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao self.assertTypeError() 40444adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao for action in ['append', 'store']: 40454adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao self.assertTypeError(action=action) 40464adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao 40474adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao def test_invalid_option_strings(self): 40484adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao self.assertValueError('--') 40494adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao self.assertValueError('---') 40504adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao 40514adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao def test_invalid_type(self): 40524adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao self.assertValueError('--foo', type='int') 40534adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao self.assertValueError('--foo', type=(int, float)) 40544adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao 40554adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao def test_invalid_action(self): 40564adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao self.assertValueError('-x', action='foo') 40574adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao self.assertValueError('foo', action='baz') 40584adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao self.assertValueError('--foo', action=('store', 'append')) 40594adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao parser = argparse.ArgumentParser() 40604adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao try: 40614adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao parser.add_argument("--foo", action="store-true") 40624adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao except ValueError: 40634adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao e = sys.exc_info()[1] 40644adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao expected = 'unknown action' 40654adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao msg = 'expected %r, found %r' % (expected, e) 40664adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao self.assertTrue(expected in str(e), msg) 40674adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao 40684adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao def test_multiple_dest(self): 40694adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao parser = argparse.ArgumentParser() 40704adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao parser.add_argument(dest='foo') 40714adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao try: 40724adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao parser.add_argument('bar', dest='baz') 40734adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao except ValueError: 40744adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao e = sys.exc_info()[1] 40754adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao expected = 'dest supplied twice for positional argument' 40764adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao msg = 'expected %r, found %r' % (expected, e) 40774adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao self.assertTrue(expected in str(e), msg) 40784adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao 40794adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao def test_no_argument_actions(self): 40804adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao for action in ['store_const', 'store_true', 'store_false', 40814adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao 'append_const', 'count']: 40824adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao for attrs in [dict(type=int), dict(nargs='+'), 40834adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao dict(choices='ab')]: 40844adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao self.assertTypeError('-x', action=action, **attrs) 40854adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao 40864adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao def test_no_argument_no_const_actions(self): 40874adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao # options with zero arguments 40884adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao for action in ['store_true', 'store_false', 'count']: 40894adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao 40904adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao # const is always disallowed 40914adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao self.assertTypeError('-x', const='foo', action=action) 40924adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao 40934adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao # nargs is always disallowed 40944adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao self.assertTypeError('-x', nargs='*', action=action) 40954adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao 40964adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao def test_more_than_one_argument_actions(self): 40974adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao for action in ['store', 'append']: 40984adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao 40994adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao # nargs=0 is disallowed 41004adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao self.assertValueError('-x', nargs=0, action=action) 41014adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao self.assertValueError('spam', nargs=0, action=action) 41024adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao 41034adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao # const is disallowed with non-optional arguments 41044adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao for nargs in [1, '*', '+']: 41054adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao self.assertValueError('-x', const='foo', 41064adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao nargs=nargs, action=action) 41074adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao self.assertValueError('spam', const='foo', 41084adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao nargs=nargs, action=action) 41094adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao 41104adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao def test_required_const_actions(self): 41114adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao for action in ['store_const', 'append_const']: 41124adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao 41134adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao # nargs is always disallowed 41144adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao self.assertTypeError('-x', nargs='+', action=action) 41154adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao 41164adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao def test_parsers_action_missing_params(self): 41174adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao self.assertTypeError('command', action='parsers') 41184adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao self.assertTypeError('command', action='parsers', prog='PROG') 41194adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao self.assertTypeError('command', action='parsers', 41204adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao parser_class=argparse.ArgumentParser) 41214adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao 41224adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao def test_required_positional(self): 41234adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao self.assertTypeError('foo', required=True) 41244adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao 41254adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao def test_user_defined_action(self): 41264adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao 41274adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao class Success(Exception): 41284adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao pass 41294adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao 41304adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao class Action(object): 41314adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao 41324adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao def __init__(self, 41334adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao option_strings, 41344adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao dest, 41354adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao const, 41364adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao default, 41374adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao required=False): 41384adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao if dest == 'spam': 41394adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao if const is Success: 41404adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao if default is Success: 41414adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao raise Success() 41424adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao 41434adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao def __call__(self, *args, **kwargs): 41444adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao pass 41454adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao 41464adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao parser = argparse.ArgumentParser() 41474adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao self.assertRaises(Success, parser.add_argument, '--spam', 41484adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao action=Action, default=Success, const=Success) 41494adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao self.assertRaises(Success, parser.add_argument, 'spam', 41504adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao action=Action, default=Success, const=Success) 41514adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao 41524adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao# ================================ 41534adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao# Actions returned by add_argument 41544adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao# ================================ 41554adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao 41564adfde8bc82dd39f59e0445588c3e599ada477dJosh Gaoclass TestActionsReturned(TestCase): 41574adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao 41584adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao def test_dest(self): 41594adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao parser = argparse.ArgumentParser() 41604adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao action = parser.add_argument('--foo') 41614adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao self.assertEqual(action.dest, 'foo') 41624adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao action = parser.add_argument('-b', '--bar') 41634adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao self.assertEqual(action.dest, 'bar') 41644adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao action = parser.add_argument('-x', '-y') 41654adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao self.assertEqual(action.dest, 'x') 41664adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao 41674adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao def test_misc(self): 41684adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao parser = argparse.ArgumentParser() 41694adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao action = parser.add_argument('--foo', nargs='?', const=42, 41704adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao default=84, type=int, choices=[1, 2], 41714adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao help='FOO', metavar='BAR', dest='baz') 41724adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao self.assertEqual(action.nargs, '?') 41734adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao self.assertEqual(action.const, 42) 41744adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao self.assertEqual(action.default, 84) 41754adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao self.assertEqual(action.type, int) 41764adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao self.assertEqual(action.choices, [1, 2]) 41774adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao self.assertEqual(action.help, 'FOO') 41784adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao self.assertEqual(action.metavar, 'BAR') 41794adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao self.assertEqual(action.dest, 'baz') 41804adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao 41814adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao 41824adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao# ================================ 41834adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao# Argument conflict handling tests 41844adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao# ================================ 41854adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao 41864adfde8bc82dd39f59e0445588c3e599ada477dJosh Gaoclass TestConflictHandling(TestCase): 41874adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao 41884adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao def test_bad_type(self): 41894adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao self.assertRaises(ValueError, argparse.ArgumentParser, 41904adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao conflict_handler='foo') 41914adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao 41924adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao def test_conflict_error(self): 41934adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao parser = argparse.ArgumentParser() 41944adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao parser.add_argument('-x') 41954adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao self.assertRaises(argparse.ArgumentError, 41964adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao parser.add_argument, '-x') 41974adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao parser.add_argument('--spam') 41984adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao self.assertRaises(argparse.ArgumentError, 41994adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao parser.add_argument, '--spam') 42004adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao 42014adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao def test_resolve_error(self): 42024adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao get_parser = argparse.ArgumentParser 42034adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao parser = get_parser(prog='PROG', conflict_handler='resolve') 42044adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao 42054adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao parser.add_argument('-x', help='OLD X') 42064adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao parser.add_argument('-x', help='NEW X') 42074adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao self.assertEqual(parser.format_help(), textwrap.dedent('''\ 42084adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao usage: PROG [-h] [-x X] 42094adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao 42104adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao optional arguments: 42114adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao -h, --help show this help message and exit 42124adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao -x X NEW X 42134adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao ''')) 42144adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao 42154adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao parser.add_argument('--spam', metavar='OLD_SPAM') 42164adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao parser.add_argument('--spam', metavar='NEW_SPAM') 42174adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao self.assertEqual(parser.format_help(), textwrap.dedent('''\ 42184adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao usage: PROG [-h] [-x X] [--spam NEW_SPAM] 42194adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao 42204adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao optional arguments: 42214adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao -h, --help show this help message and exit 42224adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao -x X NEW X 42234adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao --spam NEW_SPAM 42244adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao ''')) 42254adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao 42264adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao 42274adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao# ============================= 42284adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao# Help and Version option tests 42294adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao# ============================= 42304adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao 42314adfde8bc82dd39f59e0445588c3e599ada477dJosh Gaoclass TestOptionalsHelpVersionActions(TestCase): 42324adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao """Test the help and version actions""" 42334adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao 42344adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao def _get_error(self, func, *args, **kwargs): 42354adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao try: 42364adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao func(*args, **kwargs) 42374adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao except ArgumentParserError: 42384adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao return sys.exc_info()[1] 42394adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao else: 42404adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao self.assertRaises(ArgumentParserError, func, *args, **kwargs) 42414adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao 42424adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao def assertPrintHelpExit(self, parser, args_str): 42434adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao self.assertEqual( 42444adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao parser.format_help(), 42454adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao self._get_error(parser.parse_args, args_str.split()).stdout) 42464adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao 42474adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao def assertPrintVersionExit(self, parser, args_str): 42484adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao self.assertEqual( 42494adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao parser.format_version(), 42504adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao self._get_error(parser.parse_args, args_str.split()).stderr) 42514adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao 42524adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao def assertArgumentParserError(self, parser, *args): 42534adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao self.assertRaises(ArgumentParserError, parser.parse_args, args) 42544adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao 42554adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao def test_version(self): 42564adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao parser = ErrorRaisingArgumentParser(version='1.0') 42574adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao self.assertPrintHelpExit(parser, '-h') 42584adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao self.assertPrintHelpExit(parser, '--help') 42594adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao self.assertPrintVersionExit(parser, '-v') 42604adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao self.assertPrintVersionExit(parser, '--version') 42614adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao 42624adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao def test_version_format(self): 42634adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao parser = ErrorRaisingArgumentParser(prog='PPP', version='%(prog)s 3.5') 42644adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao msg = self._get_error(parser.parse_args, ['-v']).stderr 42654adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao self.assertEqual('PPP 3.5\n', msg) 42664adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao 42674adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao def test_version_no_help(self): 42684adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao parser = ErrorRaisingArgumentParser(add_help=False, version='1.0') 42694adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao self.assertArgumentParserError(parser, '-h') 42704adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao self.assertArgumentParserError(parser, '--help') 42714adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao self.assertPrintVersionExit(parser, '-v') 42724adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao self.assertPrintVersionExit(parser, '--version') 42734adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao 42744adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao def test_version_action(self): 42754adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao parser = ErrorRaisingArgumentParser(prog='XXX') 42764adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao parser.add_argument('-V', action='version', version='%(prog)s 3.7') 42774adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao msg = self._get_error(parser.parse_args, ['-V']).stderr 42784adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao self.assertEqual('XXX 3.7\n', msg) 42794adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao 42804adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao def test_no_help(self): 42814adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao parser = ErrorRaisingArgumentParser(add_help=False) 42824adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao self.assertArgumentParserError(parser, '-h') 42834adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao self.assertArgumentParserError(parser, '--help') 42844adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao self.assertArgumentParserError(parser, '-v') 42854adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao self.assertArgumentParserError(parser, '--version') 42864adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao 42874adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao def test_alternate_help_version(self): 42884adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao parser = ErrorRaisingArgumentParser() 42894adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao parser.add_argument('-x', action='help') 42904adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao parser.add_argument('-y', action='version') 42914adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao self.assertPrintHelpExit(parser, '-x') 42924adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao self.assertPrintVersionExit(parser, '-y') 42934adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao self.assertArgumentParserError(parser, '-v') 42944adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao self.assertArgumentParserError(parser, '--version') 42954adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao 42964adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao def test_help_version_extra_arguments(self): 42974adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao parser = ErrorRaisingArgumentParser(version='1.0') 42984adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao parser.add_argument('-x', action='store_true') 42994adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao parser.add_argument('y') 43004adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao 43014adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao # try all combinations of valid prefixes and suffixes 43024adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao valid_prefixes = ['', '-x', 'foo', '-x bar', 'baz -x'] 43034adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao valid_suffixes = valid_prefixes + ['--bad-option', 'foo bar baz'] 43044adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao for prefix in valid_prefixes: 43054adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao for suffix in valid_suffixes: 43064adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao format = '%s %%s %s' % (prefix, suffix) 43074adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao self.assertPrintHelpExit(parser, format % '-h') 43084adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao self.assertPrintHelpExit(parser, format % '--help') 43094adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao self.assertPrintVersionExit(parser, format % '-v') 43104adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao self.assertPrintVersionExit(parser, format % '--version') 43114adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao 43124adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao 43134adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao# ====================== 43144adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao# str() and repr() tests 43154adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao# ====================== 43164adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao 43174adfde8bc82dd39f59e0445588c3e599ada477dJosh Gaoclass TestStrings(TestCase): 43184adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao """Test str() and repr() on Optionals and Positionals""" 43194adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao 43204adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao def assertStringEqual(self, obj, result_string): 43214adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao for func in [str, repr]: 43224adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao self.assertEqual(func(obj), result_string) 43234adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao 43244adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao def test_optional(self): 43254adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao option = argparse.Action( 43264adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao option_strings=['--foo', '-a', '-b'], 43274adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao dest='b', 43284adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao type='int', 43294adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao nargs='+', 43304adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao default=42, 43314adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao choices=[1, 2, 3], 43324adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao help='HELP', 43334adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao metavar='METAVAR') 43344adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao string = ( 43354adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao "Action(option_strings=['--foo', '-a', '-b'], dest='b', " 43364adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao "nargs='+', const=None, default=42, type='int', " 43374adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao "choices=[1, 2, 3], help='HELP', metavar='METAVAR')") 43384adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao self.assertStringEqual(option, string) 43394adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao 43404adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao def test_argument(self): 43414adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao argument = argparse.Action( 43424adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao option_strings=[], 43434adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao dest='x', 43444adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao type=float, 43454adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao nargs='?', 43464adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao default=2.5, 43474adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao choices=[0.5, 1.5, 2.5], 43484adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao help='H HH H', 43494adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao metavar='MV MV MV') 43504adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao string = ( 43514adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao "Action(option_strings=[], dest='x', nargs='?', " 43524adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao "const=None, default=2.5, type=%r, choices=[0.5, 1.5, 2.5], " 43534adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao "help='H HH H', metavar='MV MV MV')" % float) 43544adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao self.assertStringEqual(argument, string) 43554adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao 43564adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao def test_namespace(self): 43574adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao ns = argparse.Namespace(foo=42, bar='spam') 43584adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao string = "Namespace(bar='spam', foo=42)" 43594adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao self.assertStringEqual(ns, string) 43604adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao 43614adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao def test_parser(self): 43624adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao parser = argparse.ArgumentParser(prog='PROG') 43634adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao string = ( 43644adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao "ArgumentParser(prog='PROG', usage=None, description=None, " 43654adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao "version=None, formatter_class=%r, conflict_handler='error', " 43664adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao "add_help=True)" % argparse.HelpFormatter) 43674adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao self.assertStringEqual(parser, string) 43684adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao 43694adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao# =============== 43704adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao# Namespace tests 43714adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao# =============== 43724adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao 43734adfde8bc82dd39f59e0445588c3e599ada477dJosh Gaoclass TestNamespace(TestCase): 43744adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao 43754adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao def test_constructor(self): 43764adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao ns = argparse.Namespace() 43774adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao self.assertRaises(AttributeError, getattr, ns, 'x') 43784adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao 43794adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao ns = argparse.Namespace(a=42, b='spam') 43804adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao self.assertEqual(ns.a, 42) 43814adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao self.assertEqual(ns.b, 'spam') 43824adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao 43834adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao def test_equality(self): 43844adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao ns1 = argparse.Namespace(a=1, b=2) 43854adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao ns2 = argparse.Namespace(b=2, a=1) 43864adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao ns3 = argparse.Namespace(a=1) 43874adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao ns4 = argparse.Namespace(b=2) 43884adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao 43894adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao self.assertEqual(ns1, ns2) 43904adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao self.assertNotEqual(ns1, ns3) 43914adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao self.assertNotEqual(ns1, ns4) 43924adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao self.assertNotEqual(ns2, ns3) 43934adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao self.assertNotEqual(ns2, ns4) 43944adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao self.assertTrue(ns1 != ns3) 43954adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao self.assertTrue(ns1 != ns4) 43964adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao self.assertTrue(ns2 != ns3) 43974adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao self.assertTrue(ns2 != ns4) 43984adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao 43994adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao 44004adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao# =================== 44014adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao# File encoding tests 44024adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao# =================== 44034adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao 44044adfde8bc82dd39f59e0445588c3e599ada477dJosh Gaoclass TestEncoding(TestCase): 44054adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao 44064adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao def _test_module_encoding(self, path): 44074adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao path, _ = os.path.splitext(path) 44084adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao path += ".py" 44094adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao with codecs.open(path, 'r', 'utf8') as f: 44104adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao f.read() 44114adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao 44124adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao def test_argparse_module_encoding(self): 44134adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao self._test_module_encoding(argparse.__file__) 44144adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao 44154adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao def test_test_argparse_module_encoding(self): 44164adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao self._test_module_encoding(__file__) 44174adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao 44184adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao# =================== 44194adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao# ArgumentError tests 44204adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao# =================== 44214adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao 44224adfde8bc82dd39f59e0445588c3e599ada477dJosh Gaoclass TestArgumentError(TestCase): 44234adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao 44244adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao def test_argument_error(self): 44254adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao msg = "my error here" 44264adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao error = argparse.ArgumentError(None, msg) 44274adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao self.assertEqual(str(error), msg) 44284adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao 44294adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao# ======================= 44304adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao# ArgumentTypeError tests 44314adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao# ======================= 44324adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao 44334adfde8bc82dd39f59e0445588c3e599ada477dJosh Gaoclass TestArgumentTypeError(TestCase): 44344adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao 44354adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao def test_argument_type_error(self): 44364adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao 44374adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao def spam(string): 44384adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao raise argparse.ArgumentTypeError('spam!') 44394adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao 44404adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao parser = ErrorRaisingArgumentParser(prog='PROG', add_help=False) 44414adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao parser.add_argument('x', type=spam) 44424adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao try: 44434adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao parser.parse_args(['XXX']) 44444adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao except ArgumentParserError: 44454adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao expected = 'usage: PROG x\nPROG: error: argument x: spam!\n' 44464adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao msg = sys.exc_info()[1].stderr 44474adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao self.assertEqual(expected, msg) 44484adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao else: 44494adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao self.fail() 44504adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao 44514adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao# ================================================ 44524adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao# Check that the type function is called only once 44534adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao# ================================================ 44544adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao 44554adfde8bc82dd39f59e0445588c3e599ada477dJosh Gaoclass TestTypeFunctionCallOnlyOnce(TestCase): 44564adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao 44574adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao def test_type_function_call_only_once(self): 44584adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao def spam(string_to_convert): 44594adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao self.assertEqual(string_to_convert, 'spam!') 44604adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao return 'foo_converted' 44614adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao 44624adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao parser = argparse.ArgumentParser() 44634adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao parser.add_argument('--foo', type=spam, default='bar') 44644adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao args = parser.parse_args('--foo spam!'.split()) 44654adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao self.assertEqual(NS(foo='foo_converted'), args) 44664adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao 44674adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao# ================================================================== 44684adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao# Check semantics regarding the default argument and type conversion 44694adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao# ================================================================== 44704adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao 44714adfde8bc82dd39f59e0445588c3e599ada477dJosh Gaoclass TestTypeFunctionCalledOnDefault(TestCase): 44724adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao 44734adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao def test_type_function_call_with_non_string_default(self): 44744adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao def spam(int_to_convert): 44754adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao self.assertEqual(int_to_convert, 0) 44764adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao return 'foo_converted' 44774adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao 44784adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao parser = argparse.ArgumentParser() 44794adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao parser.add_argument('--foo', type=spam, default=0) 44804adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao args = parser.parse_args([]) 44814adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao # foo should *not* be converted because its default is not a string. 44824adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao self.assertEqual(NS(foo=0), args) 44834adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao 44844adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao def test_type_function_call_with_string_default(self): 44854adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao def spam(int_to_convert): 44864adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao return 'foo_converted' 44874adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao 44884adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao parser = argparse.ArgumentParser() 44894adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao parser.add_argument('--foo', type=spam, default='0') 44904adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao args = parser.parse_args([]) 44914adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao # foo is converted because its default is a string. 44924adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao self.assertEqual(NS(foo='foo_converted'), args) 44934adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao 44944adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao def test_no_double_type_conversion_of_default(self): 44954adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao def extend(str_to_convert): 44964adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao return str_to_convert + '*' 44974adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao 44984adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao parser = argparse.ArgumentParser() 44994adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao parser.add_argument('--test', type=extend, default='*') 45004adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao args = parser.parse_args([]) 45014adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao # The test argument will be two stars, one coming from the default 45024adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao # value and one coming from the type conversion being called exactly 45034adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao # once. 45044adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao self.assertEqual(NS(test='**'), args) 45054adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao 45064adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao def test_issue_15906(self): 45074adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao # Issue #15906: When action='append', type=str, default=[] are 45084adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao # providing, the dest value was the string representation "[]" when it 45094adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao # should have been an empty list. 45104adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao parser = argparse.ArgumentParser() 45114adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao parser.add_argument('--test', dest='test', type=str, 45124adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao default=[], action='append') 45134adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao args = parser.parse_args([]) 45144adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao self.assertEqual(args.test, []) 45154adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao 45164adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao# ====================== 45174adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao# parse_known_args tests 45184adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao# ====================== 45194adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao 45204adfde8bc82dd39f59e0445588c3e599ada477dJosh Gaoclass TestParseKnownArgs(TestCase): 45214adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao 45224adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao def test_arguments_tuple(self): 45234adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao parser = argparse.ArgumentParser() 45244adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao parser.parse_args(()) 45254adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao 45264adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao def test_arguments_list(self): 45274adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao parser = argparse.ArgumentParser() 45284adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao parser.parse_args([]) 45294adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao 45304adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao def test_arguments_tuple_positional(self): 45314adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao parser = argparse.ArgumentParser() 45324adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao parser.add_argument('x') 45334adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao parser.parse_args(('x',)) 45344adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao 45354adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao def test_arguments_list_positional(self): 45364adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao parser = argparse.ArgumentParser() 45374adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao parser.add_argument('x') 45384adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao parser.parse_args(['x']) 45394adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao 45404adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao def test_optionals(self): 45414adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao parser = argparse.ArgumentParser() 45424adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao parser.add_argument('--foo') 45434adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao args, extras = parser.parse_known_args('--foo F --bar --baz'.split()) 45444adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao self.assertEqual(NS(foo='F'), args) 45454adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao self.assertEqual(['--bar', '--baz'], extras) 45464adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao 45474adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao def test_mixed(self): 45484adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao parser = argparse.ArgumentParser() 45494adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao parser.add_argument('-v', nargs='?', const=1, type=int) 45504adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao parser.add_argument('--spam', action='store_false') 45514adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao parser.add_argument('badger') 45524adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao 45534adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao argv = ["B", "C", "--foo", "-v", "3", "4"] 45544adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao args, extras = parser.parse_known_args(argv) 45554adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao self.assertEqual(NS(v=3, spam=True, badger="B"), args) 45564adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao self.assertEqual(["C", "--foo", "4"], extras) 45574adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao 45584adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao# ========================== 45594adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao# add_argument metavar tests 45604adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao# ========================== 45614adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao 45624adfde8bc82dd39f59e0445588c3e599ada477dJosh Gaoclass TestAddArgumentMetavar(TestCase): 45634adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao 45644adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao EXPECTED_MESSAGE = "length of metavar tuple does not match nargs" 45654adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao 45664adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao def do_test_no_exception(self, nargs, metavar): 45674adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao parser = argparse.ArgumentParser() 45684adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao parser.add_argument("--foo", nargs=nargs, metavar=metavar) 45694adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao 45704adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao def do_test_exception(self, nargs, metavar): 45714adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao parser = argparse.ArgumentParser() 45724adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao with self.assertRaises(ValueError) as cm: 45734adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao parser.add_argument("--foo", nargs=nargs, metavar=metavar) 45744adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao self.assertEqual(cm.exception.args[0], self.EXPECTED_MESSAGE) 45754adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao 45764adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao # Unit tests for different values of metavar when nargs=None 45774adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao 45784adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao def test_nargs_None_metavar_string(self): 45794adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao self.do_test_no_exception(nargs=None, metavar="1") 45804adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao 45814adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao def test_nargs_None_metavar_length0(self): 45824adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao self.do_test_exception(nargs=None, metavar=tuple()) 45834adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao 45844adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao def test_nargs_None_metavar_length1(self): 45854adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao self.do_test_no_exception(nargs=None, metavar=("1")) 45864adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao 45874adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao def test_nargs_None_metavar_length2(self): 45884adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao self.do_test_exception(nargs=None, metavar=("1", "2")) 45894adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao 45904adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao def test_nargs_None_metavar_length3(self): 45914adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao self.do_test_exception(nargs=None, metavar=("1", "2", "3")) 45924adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao 45934adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao # Unit tests for different values of metavar when nargs=? 45944adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao 45954adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao def test_nargs_optional_metavar_string(self): 45964adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao self.do_test_no_exception(nargs="?", metavar="1") 45974adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao 45984adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao def test_nargs_optional_metavar_length0(self): 45994adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao self.do_test_exception(nargs="?", metavar=tuple()) 46004adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao 46014adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao def test_nargs_optional_metavar_length1(self): 46024adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao self.do_test_no_exception(nargs="?", metavar=("1")) 46034adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao 46044adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao def test_nargs_optional_metavar_length2(self): 46054adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao self.do_test_exception(nargs="?", metavar=("1", "2")) 46064adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao 46074adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao def test_nargs_optional_metavar_length3(self): 46084adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao self.do_test_exception(nargs="?", metavar=("1", "2", "3")) 46094adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao 46104adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao # Unit tests for different values of metavar when nargs=* 46114adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao 46124adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao def test_nargs_zeroormore_metavar_string(self): 46134adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao self.do_test_no_exception(nargs="*", metavar="1") 46144adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao 46154adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao def test_nargs_zeroormore_metavar_length0(self): 46164adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao self.do_test_exception(nargs="*", metavar=tuple()) 46174adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao 46184adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao def test_nargs_zeroormore_metavar_length1(self): 46194adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao self.do_test_no_exception(nargs="*", metavar=("1")) 46204adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao 46214adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao def test_nargs_zeroormore_metavar_length2(self): 46224adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao self.do_test_no_exception(nargs="*", metavar=("1", "2")) 46234adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao 46244adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao def test_nargs_zeroormore_metavar_length3(self): 46254adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao self.do_test_exception(nargs="*", metavar=("1", "2", "3")) 46264adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao 46274adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao # Unit tests for different values of metavar when nargs=+ 46284adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao 46294adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao def test_nargs_oneormore_metavar_string(self): 46304adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao self.do_test_no_exception(nargs="+", metavar="1") 46314adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao 46324adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao def test_nargs_oneormore_metavar_length0(self): 46334adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao self.do_test_exception(nargs="+", metavar=tuple()) 46344adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao 46354adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao def test_nargs_oneormore_metavar_length1(self): 46364adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao self.do_test_no_exception(nargs="+", metavar=("1")) 46374adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao 46384adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao def test_nargs_oneormore_metavar_length2(self): 46394adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao self.do_test_no_exception(nargs="+", metavar=("1", "2")) 46404adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao 46414adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao def test_nargs_oneormore_metavar_length3(self): 46424adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao self.do_test_exception(nargs="+", metavar=("1", "2", "3")) 46434adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao 46444adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao # Unit tests for different values of metavar when nargs=... 46454adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao 46464adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao def test_nargs_remainder_metavar_string(self): 46474adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao self.do_test_no_exception(nargs="...", metavar="1") 46484adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao 46494adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao def test_nargs_remainder_metavar_length0(self): 46504adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao self.do_test_no_exception(nargs="...", metavar=tuple()) 46514adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao 46524adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao def test_nargs_remainder_metavar_length1(self): 46534adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao self.do_test_no_exception(nargs="...", metavar=("1")) 46544adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao 46554adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao def test_nargs_remainder_metavar_length2(self): 46564adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao self.do_test_no_exception(nargs="...", metavar=("1", "2")) 46574adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao 46584adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao def test_nargs_remainder_metavar_length3(self): 46594adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao self.do_test_no_exception(nargs="...", metavar=("1", "2", "3")) 46604adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao 46614adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao # Unit tests for different values of metavar when nargs=A... 46624adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao 46634adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao def test_nargs_parser_metavar_string(self): 46644adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao self.do_test_no_exception(nargs="A...", metavar="1") 46654adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao 46664adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao def test_nargs_parser_metavar_length0(self): 46674adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao self.do_test_exception(nargs="A...", metavar=tuple()) 46684adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao 46694adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao def test_nargs_parser_metavar_length1(self): 46704adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao self.do_test_no_exception(nargs="A...", metavar=("1")) 46714adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao 46724adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao def test_nargs_parser_metavar_length2(self): 46734adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao self.do_test_exception(nargs="A...", metavar=("1", "2")) 46744adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao 46754adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao def test_nargs_parser_metavar_length3(self): 46764adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao self.do_test_exception(nargs="A...", metavar=("1", "2", "3")) 46774adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao 46784adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao # Unit tests for different values of metavar when nargs=1 46794adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao 46804adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao def test_nargs_1_metavar_string(self): 46814adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao self.do_test_no_exception(nargs=1, metavar="1") 46824adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao 46834adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao def test_nargs_1_metavar_length0(self): 46844adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao self.do_test_exception(nargs=1, metavar=tuple()) 46854adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao 46864adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao def test_nargs_1_metavar_length1(self): 46874adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao self.do_test_no_exception(nargs=1, metavar=("1")) 46884adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao 46894adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao def test_nargs_1_metavar_length2(self): 46904adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao self.do_test_exception(nargs=1, metavar=("1", "2")) 46914adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao 46924adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao def test_nargs_1_metavar_length3(self): 46934adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao self.do_test_exception(nargs=1, metavar=("1", "2", "3")) 46944adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao 46954adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao # Unit tests for different values of metavar when nargs=2 46964adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao 46974adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao def test_nargs_2_metavar_string(self): 46984adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao self.do_test_no_exception(nargs=2, metavar="1") 46994adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao 47004adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao def test_nargs_2_metavar_length0(self): 47014adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao self.do_test_exception(nargs=2, metavar=tuple()) 47024adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao 47034adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao def test_nargs_2_metavar_length1(self): 47044adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao self.do_test_no_exception(nargs=2, metavar=("1")) 47054adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao 47064adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao def test_nargs_2_metavar_length2(self): 47074adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao self.do_test_no_exception(nargs=2, metavar=("1", "2")) 47084adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao 47094adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao def test_nargs_2_metavar_length3(self): 47104adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao self.do_test_exception(nargs=2, metavar=("1", "2", "3")) 47114adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao 47124adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao # Unit tests for different values of metavar when nargs=3 47134adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao 47144adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao def test_nargs_3_metavar_string(self): 47154adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao self.do_test_no_exception(nargs=3, metavar="1") 47164adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao 47174adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao def test_nargs_3_metavar_length0(self): 47184adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao self.do_test_exception(nargs=3, metavar=tuple()) 47194adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao 47204adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao def test_nargs_3_metavar_length1(self): 47214adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao self.do_test_no_exception(nargs=3, metavar=("1")) 47224adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao 47234adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao def test_nargs_3_metavar_length2(self): 47244adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao self.do_test_exception(nargs=3, metavar=("1", "2")) 47254adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao 47264adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao def test_nargs_3_metavar_length3(self): 47274adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao self.do_test_no_exception(nargs=3, metavar=("1", "2", "3")) 47284adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao 47294adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao# ============================ 47304adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao# from argparse import * tests 47314adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao# ============================ 47324adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao 47334adfde8bc82dd39f59e0445588c3e599ada477dJosh Gaoclass TestImportStar(TestCase): 47344adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao 47354adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao def test(self): 47364adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao for name in argparse.__all__: 47374adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao self.assertTrue(hasattr(argparse, name)) 47384adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao 47394adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao def test_all_exports_everything_but_modules(self): 47404adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao items = [ 47414adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao name 47424adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao for name, value in vars(argparse).items() 47434adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao if not name.startswith("_") 47444adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao if not inspect.ismodule(value) 47454adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao ] 47464adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao self.assertEqual(sorted(items), sorted(argparse.__all__)) 47474adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao 47484adfde8bc82dd39f59e0445588c3e599ada477dJosh Gaodef test_main(): 47494adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao # silence warnings about version argument - these are expected 47504adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao with test_support.check_warnings( 47514adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao ('The "version" argument to ArgumentParser is deprecated.', 47524adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao DeprecationWarning), 47534adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao ('The (format|print)_version method is deprecated', 47544adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao DeprecationWarning)): 47554adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao test_support.run_unittest(__name__) 47564adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao # Remove global references to avoid looking like we have refleaks. 47574adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao RFile.seen = {} 47584adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao WFile.seen = set() 47594adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao 47604adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao 47614adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao 47624adfde8bc82dd39f59e0445588c3e599ada477dJosh Gaoif __name__ == '__main__': 47634adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao test_main() 4764