10c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi# Author: Steven J. Bethard <steven.bethard@gmail.com>. 20c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi 30c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yiimport codecs 40c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yiimport inspect 50c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yiimport os 60c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yiimport shutil 70c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yiimport stat 80c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yiimport sys 90c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yiimport textwrap 100c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yiimport tempfile 110c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yiimport unittest 120c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yiimport argparse 130c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi 140c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yifrom StringIO import StringIO 150c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi 160c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yiclass StdIOBuffer(StringIO): 170c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi pass 180c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi 190c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yifrom test import test_support 200c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi 210c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yiclass TestCase(unittest.TestCase): 220c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi 230c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi def assertEqual(self, obj1, obj2): 240c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi if obj1 != obj2: 250c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi print('') 260c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi print(repr(obj1)) 270c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi print(repr(obj2)) 280c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi print(obj1) 290c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi print(obj2) 300c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi super(TestCase, self).assertEqual(obj1, obj2) 310c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi 320c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi def setUp(self): 330c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi # The tests assume that line wrapping occurs at 80 columns, but this 340c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi # behaviour can be overridden by setting the COLUMNS environment 350c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi # variable. To ensure that this assumption is true, unset COLUMNS. 360c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi env = test_support.EnvironmentVarGuard() 370c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi env.unset("COLUMNS") 380c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi self.addCleanup(env.__exit__) 390c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi 400c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi 410c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yiclass TempDirMixin(object): 420c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi 430c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi def setUp(self): 440c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi self.temp_dir = tempfile.mkdtemp() 450c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi self.old_dir = os.getcwd() 460c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi os.chdir(self.temp_dir) 470c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi 480c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi def tearDown(self): 490c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi os.chdir(self.old_dir) 500c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi shutil.rmtree(self.temp_dir, True) 510c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi 520c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi def create_readonly_file(self, filename): 530c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi file_path = os.path.join(self.temp_dir, filename) 540c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi with open(file_path, 'w') as file: 550c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi file.write(filename) 560c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi os.chmod(file_path, stat.S_IREAD) 570c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi 580c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yiclass Sig(object): 590c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi 600c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi def __init__(self, *args, **kwargs): 610c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi self.args = args 620c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi self.kwargs = kwargs 630c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi 640c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi 650c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yiclass NS(object): 660c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi 670c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi def __init__(self, **kwargs): 680c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi self.__dict__.update(kwargs) 690c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi 700c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi def __repr__(self): 710c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi sorted_items = sorted(self.__dict__.items()) 720c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi kwarg_str = ', '.join(['%s=%r' % tup for tup in sorted_items]) 730c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi return '%s(%s)' % (type(self).__name__, kwarg_str) 740c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi 750c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi __hash__ = None 760c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi 770c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi def __eq__(self, other): 780c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi return vars(self) == vars(other) 790c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi 800c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi def __ne__(self, other): 810c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi return not (self == other) 820c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi 830c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi 840c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yiclass ArgumentParserError(Exception): 850c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi 860c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi def __init__(self, message, stdout=None, stderr=None, error_code=None): 870c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi Exception.__init__(self, message, stdout, stderr) 880c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi self.message = message 890c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi self.stdout = stdout 900c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi self.stderr = stderr 910c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi self.error_code = error_code 920c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi 930c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi 940c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yidef stderr_to_parser_error(parse_args, *args, **kwargs): 950c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi # if this is being called recursively and stderr or stdout is already being 960c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi # redirected, simply call the function and let the enclosing function 970c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi # catch the exception 980c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi if isinstance(sys.stderr, StdIOBuffer) or isinstance(sys.stdout, StdIOBuffer): 990c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi return parse_args(*args, **kwargs) 1000c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi 1010c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi # if this is not being called recursively, redirect stderr and 1020c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi # use it as the ArgumentParserError message 1030c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi old_stdout = sys.stdout 1040c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi old_stderr = sys.stderr 1050c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi sys.stdout = StdIOBuffer() 1060c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi sys.stderr = StdIOBuffer() 1070c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi try: 1080c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi try: 1090c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi result = parse_args(*args, **kwargs) 1100c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi for key in list(vars(result)): 1110c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi if getattr(result, key) is sys.stdout: 1120c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi setattr(result, key, old_stdout) 1130c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi if getattr(result, key) is sys.stderr: 1140c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi setattr(result, key, old_stderr) 1150c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi return result 1160c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi except SystemExit: 1170c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi code = sys.exc_info()[1].code 1180c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi stdout = sys.stdout.getvalue() 1190c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi stderr = sys.stderr.getvalue() 1200c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi raise ArgumentParserError("SystemExit", stdout, stderr, code) 1210c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi finally: 1220c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi sys.stdout = old_stdout 1230c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi sys.stderr = old_stderr 1240c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi 1250c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi 1260c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yiclass ErrorRaisingArgumentParser(argparse.ArgumentParser): 1270c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi 1280c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi def parse_args(self, *args, **kwargs): 1290c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi parse_args = super(ErrorRaisingArgumentParser, self).parse_args 1300c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi return stderr_to_parser_error(parse_args, *args, **kwargs) 1310c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi 1320c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi def exit(self, *args, **kwargs): 1330c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi exit = super(ErrorRaisingArgumentParser, self).exit 1340c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi return stderr_to_parser_error(exit, *args, **kwargs) 1350c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi 1360c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi def error(self, *args, **kwargs): 1370c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi error = super(ErrorRaisingArgumentParser, self).error 1380c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi return stderr_to_parser_error(error, *args, **kwargs) 1390c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi 1400c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi 1410c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yiclass ParserTesterMetaclass(type): 1420c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi """Adds parser tests using the class attributes. 1430c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi 1440c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi Classes of this type should specify the following attributes: 1450c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi 1460c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi argument_signatures -- a list of Sig objects which specify 1470c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi the signatures of Argument objects to be created 1480c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi failures -- a list of args lists that should cause the parser 1490c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi to fail 1500c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi successes -- a list of (initial_args, options, remaining_args) tuples 1510c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi where initial_args specifies the string args to be parsed, 1520c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi options is a dict that should match the vars() of the options 1530c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi parsed out of initial_args, and remaining_args should be any 1540c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi remaining unparsed arguments 1550c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi """ 1560c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi 1570c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi def __init__(cls, name, bases, bodydict): 1580c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi if name == 'ParserTestCase': 1590c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi return 1600c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi 1610c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi # default parser signature is empty 1620c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi if not hasattr(cls, 'parser_signature'): 1630c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi cls.parser_signature = Sig() 1640c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi if not hasattr(cls, 'parser_class'): 1650c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi cls.parser_class = ErrorRaisingArgumentParser 1660c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi 1670c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi # --------------------------------------- 1680c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi # functions for adding optional arguments 1690c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi # --------------------------------------- 1700c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi def no_groups(parser, argument_signatures): 1710c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi """Add all arguments directly to the parser""" 1720c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi for sig in argument_signatures: 1730c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi parser.add_argument(*sig.args, **sig.kwargs) 1740c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi 1750c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi def one_group(parser, argument_signatures): 1760c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi """Add all arguments under a single group in the parser""" 1770c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi group = parser.add_argument_group('foo') 1780c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi for sig in argument_signatures: 1790c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi group.add_argument(*sig.args, **sig.kwargs) 1800c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi 1810c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi def many_groups(parser, argument_signatures): 1820c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi """Add each argument in its own group to the parser""" 1830c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi for i, sig in enumerate(argument_signatures): 1840c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi group = parser.add_argument_group('foo:%i' % i) 1850c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi group.add_argument(*sig.args, **sig.kwargs) 1860c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi 1870c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi # -------------------------- 1880c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi # functions for parsing args 1890c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi # -------------------------- 1900c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi def listargs(parser, args): 1910c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi """Parse the args by passing in a list""" 1920c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi return parser.parse_args(args) 1930c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi 1940c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi def sysargs(parser, args): 1950c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi """Parse the args by defaulting to sys.argv""" 1960c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi old_sys_argv = sys.argv 1970c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi sys.argv = [old_sys_argv[0]] + args 1980c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi try: 1990c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi return parser.parse_args() 2000c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi finally: 2010c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi sys.argv = old_sys_argv 2020c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi 2030c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi # class that holds the combination of one optional argument 2040c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi # addition method and one arg parsing method 2050c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi class AddTests(object): 2060c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi 2070c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi def __init__(self, tester_cls, add_arguments, parse_args): 2080c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi self._add_arguments = add_arguments 2090c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi self._parse_args = parse_args 2100c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi 2110c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi add_arguments_name = self._add_arguments.__name__ 2120c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi parse_args_name = self._parse_args.__name__ 2130c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi for test_func in [self.test_failures, self.test_successes]: 2140c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi func_name = test_func.__name__ 2150c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi names = func_name, add_arguments_name, parse_args_name 2160c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi test_name = '_'.join(names) 2170c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi 2180c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi def wrapper(self, test_func=test_func): 2190c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi test_func(self) 2200c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi try: 2210c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi wrapper.__name__ = test_name 2220c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi except TypeError: 2230c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi pass 2240c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi setattr(tester_cls, test_name, wrapper) 2250c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi 2260c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi def _get_parser(self, tester): 2270c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi args = tester.parser_signature.args 2280c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi kwargs = tester.parser_signature.kwargs 2290c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi parser = tester.parser_class(*args, **kwargs) 2300c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi self._add_arguments(parser, tester.argument_signatures) 2310c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi return parser 2320c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi 2330c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi def test_failures(self, tester): 2340c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi parser = self._get_parser(tester) 2350c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi for args_str in tester.failures: 2360c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi args = args_str.split() 2370c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi raises = tester.assertRaises 2380c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi raises(ArgumentParserError, parser.parse_args, args) 2390c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi 2400c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi def test_successes(self, tester): 2410c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi parser = self._get_parser(tester) 2420c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi for args, expected_ns in tester.successes: 2430c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi if isinstance(args, str): 2440c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi args = args.split() 2450c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi result_ns = self._parse_args(parser, args) 2460c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi tester.assertEqual(expected_ns, result_ns) 2470c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi 2480c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi # add tests for each combination of an optionals adding method 2490c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi # and an arg parsing method 2500c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi for add_arguments in [no_groups, one_group, many_groups]: 2510c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi for parse_args in [listargs, sysargs]: 2520c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi AddTests(cls, add_arguments, parse_args) 2530c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi 2540c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yibases = TestCase, 2550c5958b1636c47ed7c284f859c8e805fd06a0e6Bill YiParserTestCase = ParserTesterMetaclass('ParserTestCase', bases, {}) 2560c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi 2570c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi# =============== 2580c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi# Optionals tests 2590c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi# =============== 2600c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi 2610c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yiclass TestOptionalsSingleDash(ParserTestCase): 2620c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi """Test an Optional with a single-dash option string""" 2630c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi 2640c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi argument_signatures = [Sig('-x')] 2650c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi failures = ['-x', 'a', '--foo', '-x --foo', '-x -y'] 2660c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi successes = [ 2670c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi ('', NS(x=None)), 2680c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi ('-x a', NS(x='a')), 2690c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi ('-xa', NS(x='a')), 2700c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi ('-x -1', NS(x='-1')), 2710c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi ('-x-1', NS(x='-1')), 2720c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi ] 2730c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi 2740c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi 2750c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yiclass TestOptionalsSingleDashCombined(ParserTestCase): 2760c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi """Test an Optional with a single-dash option string""" 2770c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi 2780c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi argument_signatures = [ 2790c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi Sig('-x', action='store_true'), 2800c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi Sig('-yyy', action='store_const', const=42), 2810c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi Sig('-z'), 2820c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi ] 2830c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi failures = ['a', '--foo', '-xa', '-x --foo', '-x -z', '-z -x', 2840c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi '-yx', '-yz a', '-yyyx', '-yyyza', '-xyza'] 2850c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi successes = [ 2860c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi ('', NS(x=False, yyy=None, z=None)), 2870c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi ('-x', NS(x=True, yyy=None, z=None)), 2880c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi ('-za', NS(x=False, yyy=None, z='a')), 2890c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi ('-z a', NS(x=False, yyy=None, z='a')), 2900c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi ('-xza', NS(x=True, yyy=None, z='a')), 2910c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi ('-xz a', NS(x=True, yyy=None, z='a')), 2920c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi ('-x -za', NS(x=True, yyy=None, z='a')), 2930c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi ('-x -z a', NS(x=True, yyy=None, z='a')), 2940c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi ('-y', NS(x=False, yyy=42, z=None)), 2950c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi ('-yyy', NS(x=False, yyy=42, z=None)), 2960c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi ('-x -yyy -za', NS(x=True, yyy=42, z='a')), 2970c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi ('-x -yyy -z a', NS(x=True, yyy=42, z='a')), 2980c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi ] 2990c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi 3000c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi 3010c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yiclass TestOptionalsSingleDashLong(ParserTestCase): 3020c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi """Test an Optional with a multi-character single-dash option string""" 3030c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi 3040c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi argument_signatures = [Sig('-foo')] 3050c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi failures = ['-foo', 'a', '--foo', '-foo --foo', '-foo -y', '-fooa'] 3060c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi successes = [ 3070c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi ('', NS(foo=None)), 3080c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi ('-foo a', NS(foo='a')), 3090c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi ('-foo -1', NS(foo='-1')), 3100c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi ('-fo a', NS(foo='a')), 3110c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi ('-f a', NS(foo='a')), 3120c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi ] 3130c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi 3140c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi 3150c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yiclass TestOptionalsSingleDashSubsetAmbiguous(ParserTestCase): 3160c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi """Test Optionals where option strings are subsets of each other""" 3170c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi 3180c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi argument_signatures = [Sig('-f'), Sig('-foobar'), Sig('-foorab')] 3190c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi failures = ['-f', '-foo', '-fo', '-foo b', '-foob', '-fooba', '-foora'] 3200c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi successes = [ 3210c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi ('', NS(f=None, foobar=None, foorab=None)), 3220c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi ('-f a', NS(f='a', foobar=None, foorab=None)), 3230c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi ('-fa', NS(f='a', foobar=None, foorab=None)), 3240c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi ('-foa', NS(f='oa', foobar=None, foorab=None)), 3250c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi ('-fooa', NS(f='ooa', foobar=None, foorab=None)), 3260c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi ('-foobar a', NS(f=None, foobar='a', foorab=None)), 3270c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi ('-foorab a', NS(f=None, foobar=None, foorab='a')), 3280c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi ] 3290c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi 3300c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi 3310c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yiclass TestOptionalsSingleDashAmbiguous(ParserTestCase): 3320c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi """Test Optionals that partially match but are not subsets""" 3330c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi 3340c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi argument_signatures = [Sig('-foobar'), Sig('-foorab')] 3350c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi failures = ['-f', '-f a', '-fa', '-foa', '-foo', '-fo', '-foo b'] 3360c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi successes = [ 3370c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi ('', NS(foobar=None, foorab=None)), 3380c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi ('-foob a', NS(foobar='a', foorab=None)), 3390c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi ('-foor a', NS(foobar=None, foorab='a')), 3400c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi ('-fooba a', NS(foobar='a', foorab=None)), 3410c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi ('-foora a', NS(foobar=None, foorab='a')), 3420c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi ('-foobar a', NS(foobar='a', foorab=None)), 3430c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi ('-foorab a', NS(foobar=None, foorab='a')), 3440c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi ] 3450c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi 3460c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi 3470c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yiclass TestOptionalsNumeric(ParserTestCase): 3480c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi """Test an Optional with a short opt string""" 3490c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi 3500c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi argument_signatures = [Sig('-1', dest='one')] 3510c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi failures = ['-1', 'a', '-1 --foo', '-1 -y', '-1 -1', '-1 -2'] 3520c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi successes = [ 3530c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi ('', NS(one=None)), 3540c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi ('-1 a', NS(one='a')), 3550c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi ('-1a', NS(one='a')), 3560c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi ('-1-2', NS(one='-2')), 3570c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi ] 3580c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi 3590c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi 3600c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yiclass TestOptionalsDoubleDash(ParserTestCase): 3610c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi """Test an Optional with a double-dash option string""" 3620c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi 3630c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi argument_signatures = [Sig('--foo')] 3640c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi failures = ['--foo', '-f', '-f a', 'a', '--foo -x', '--foo --bar'] 3650c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi successes = [ 3660c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi ('', NS(foo=None)), 3670c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi ('--foo a', NS(foo='a')), 3680c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi ('--foo=a', NS(foo='a')), 3690c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi ('--foo -2.5', NS(foo='-2.5')), 3700c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi ('--foo=-2.5', NS(foo='-2.5')), 3710c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi ] 3720c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi 3730c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi 3740c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yiclass TestOptionalsDoubleDashPartialMatch(ParserTestCase): 3750c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi """Tests partial matching with a double-dash option string""" 3760c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi 3770c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi argument_signatures = [ 3780c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi Sig('--badger', action='store_true'), 3790c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi Sig('--bat'), 3800c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi ] 3810c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi failures = ['--bar', '--b', '--ba', '--b=2', '--ba=4', '--badge 5'] 3820c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi successes = [ 3830c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi ('', NS(badger=False, bat=None)), 3840c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi ('--bat X', NS(badger=False, bat='X')), 3850c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi ('--bad', NS(badger=True, bat=None)), 3860c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi ('--badg', NS(badger=True, bat=None)), 3870c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi ('--badge', NS(badger=True, bat=None)), 3880c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi ('--badger', NS(badger=True, bat=None)), 3890c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi ] 3900c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi 3910c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi 3920c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yiclass TestOptionalsDoubleDashPrefixMatch(ParserTestCase): 3930c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi """Tests when one double-dash option string is a prefix of another""" 3940c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi 3950c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi argument_signatures = [ 3960c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi Sig('--badger', action='store_true'), 3970c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi Sig('--ba'), 3980c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi ] 3990c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi failures = ['--bar', '--b', '--ba', '--b=2', '--badge 5'] 4000c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi successes = [ 4010c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi ('', NS(badger=False, ba=None)), 4020c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi ('--ba X', NS(badger=False, ba='X')), 4030c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi ('--ba=X', NS(badger=False, ba='X')), 4040c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi ('--bad', NS(badger=True, ba=None)), 4050c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi ('--badg', NS(badger=True, ba=None)), 4060c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi ('--badge', NS(badger=True, ba=None)), 4070c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi ('--badger', NS(badger=True, ba=None)), 4080c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi ] 4090c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi 4100c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi 4110c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yiclass TestOptionalsSingleDoubleDash(ParserTestCase): 4120c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi """Test an Optional with single- and double-dash option strings""" 4130c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi 4140c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi argument_signatures = [ 4150c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi Sig('-f', action='store_true'), 4160c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi Sig('--bar'), 4170c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi Sig('-baz', action='store_const', const=42), 4180c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi ] 4190c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi failures = ['--bar', '-fbar', '-fbaz', '-bazf', '-b B', 'B'] 4200c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi successes = [ 4210c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi ('', NS(f=False, bar=None, baz=None)), 4220c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi ('-f', NS(f=True, bar=None, baz=None)), 4230c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi ('--ba B', NS(f=False, bar='B', baz=None)), 4240c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi ('-f --bar B', NS(f=True, bar='B', baz=None)), 4250c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi ('-f -b', NS(f=True, bar=None, baz=42)), 4260c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi ('-ba -f', NS(f=True, bar=None, baz=42)), 4270c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi ] 4280c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi 4290c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi 4300c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yiclass TestOptionalsAlternatePrefixChars(ParserTestCase): 4310c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi """Test an Optional with option strings with custom prefixes""" 4320c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi 4330c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi parser_signature = Sig(prefix_chars='+:/', add_help=False) 4340c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi argument_signatures = [ 4350c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi Sig('+f', action='store_true'), 4360c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi Sig('::bar'), 4370c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi Sig('/baz', action='store_const', const=42), 4380c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi ] 4390c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi failures = ['--bar', '-fbar', '-b B', 'B', '-f', '--bar B', '-baz', '-h', '--help', '+h', '::help', '/help'] 4400c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi successes = [ 4410c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi ('', NS(f=False, bar=None, baz=None)), 4420c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi ('+f', NS(f=True, bar=None, baz=None)), 4430c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi ('::ba B', NS(f=False, bar='B', baz=None)), 4440c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi ('+f ::bar B', NS(f=True, bar='B', baz=None)), 4450c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi ('+f /b', NS(f=True, bar=None, baz=42)), 4460c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi ('/ba +f', NS(f=True, bar=None, baz=42)), 4470c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi ] 4480c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi 4490c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi 4500c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yiclass TestOptionalsAlternatePrefixCharsAddedHelp(ParserTestCase): 4510c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi """When ``-`` not in prefix_chars, default operators created for help 4520c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi should use the prefix_chars in use rather than - or -- 4530c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi http://bugs.python.org/issue9444""" 4540c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi 4550c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi parser_signature = Sig(prefix_chars='+:/', add_help=True) 4560c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi argument_signatures = [ 4570c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi Sig('+f', action='store_true'), 4580c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi Sig('::bar'), 4590c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi Sig('/baz', action='store_const', const=42), 4600c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi ] 4610c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi failures = ['--bar', '-fbar', '-b B', 'B', '-f', '--bar B', '-baz'] 4620c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi successes = [ 4630c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi ('', NS(f=False, bar=None, baz=None)), 4640c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi ('+f', NS(f=True, bar=None, baz=None)), 4650c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi ('::ba B', NS(f=False, bar='B', baz=None)), 4660c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi ('+f ::bar B', NS(f=True, bar='B', baz=None)), 4670c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi ('+f /b', NS(f=True, bar=None, baz=42)), 4680c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi ('/ba +f', NS(f=True, bar=None, baz=42)) 4690c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi ] 4700c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi 4710c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi 4720c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yiclass TestOptionalsAlternatePrefixCharsMultipleShortArgs(ParserTestCase): 4730c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi """Verify that Optionals must be called with their defined prefixes""" 4740c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi 4750c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi parser_signature = Sig(prefix_chars='+-', add_help=False) 4760c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi argument_signatures = [ 4770c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi Sig('-x', action='store_true'), 4780c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi Sig('+y', action='store_true'), 4790c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi Sig('+z', action='store_true'), 4800c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi ] 4810c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi failures = ['-w', 4820c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi '-xyz', 4830c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi '+x', 4840c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi '-y', 4850c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi '+xyz', 4860c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi ] 4870c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi successes = [ 4880c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi ('', NS(x=False, y=False, z=False)), 4890c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi ('-x', NS(x=True, y=False, z=False)), 4900c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi ('+y -x', NS(x=True, y=True, z=False)), 4910c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi ('+yz -x', NS(x=True, y=True, z=True)), 4920c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi ] 4930c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi 4940c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi 4950c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yiclass TestOptionalsShortLong(ParserTestCase): 4960c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi """Test a combination of single- and double-dash option strings""" 4970c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi 4980c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi argument_signatures = [ 4990c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi Sig('-v', '--verbose', '-n', '--noisy', action='store_true'), 5000c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi ] 5010c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi failures = ['--x --verbose', '-N', 'a', '-v x'] 5020c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi successes = [ 5030c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi ('', NS(verbose=False)), 5040c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi ('-v', NS(verbose=True)), 5050c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi ('--verbose', NS(verbose=True)), 5060c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi ('-n', NS(verbose=True)), 5070c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi ('--noisy', NS(verbose=True)), 5080c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi ] 5090c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi 5100c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi 5110c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yiclass TestOptionalsDest(ParserTestCase): 5120c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi """Tests various means of setting destination""" 5130c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi 5140c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi argument_signatures = [Sig('--foo-bar'), Sig('--baz', dest='zabbaz')] 5150c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi failures = ['a'] 5160c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi successes = [ 5170c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi ('--foo-bar f', NS(foo_bar='f', zabbaz=None)), 5180c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi ('--baz g', NS(foo_bar=None, zabbaz='g')), 5190c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi ('--foo-bar h --baz i', NS(foo_bar='h', zabbaz='i')), 5200c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi ('--baz j --foo-bar k', NS(foo_bar='k', zabbaz='j')), 5210c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi ] 5220c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi 5230c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi 5240c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yiclass TestOptionalsDefault(ParserTestCase): 5250c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi """Tests specifying a default for an Optional""" 5260c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi 5270c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi argument_signatures = [Sig('-x'), Sig('-y', default=42)] 5280c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi failures = ['a'] 5290c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi successes = [ 5300c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi ('', NS(x=None, y=42)), 5310c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi ('-xx', NS(x='x', y=42)), 5320c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi ('-yy', NS(x=None, y='y')), 5330c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi ] 5340c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi 5350c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi 5360c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yiclass TestOptionalsNargsDefault(ParserTestCase): 5370c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi """Tests not specifying the number of args for an Optional""" 5380c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi 5390c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi argument_signatures = [Sig('-x')] 5400c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi failures = ['a', '-x'] 5410c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi successes = [ 5420c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi ('', NS(x=None)), 5430c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi ('-x a', NS(x='a')), 5440c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi ] 5450c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi 5460c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi 5470c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yiclass TestOptionalsNargs1(ParserTestCase): 5480c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi """Tests specifying the 1 arg for an Optional""" 5490c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi 5500c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi argument_signatures = [Sig('-x', nargs=1)] 5510c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi failures = ['a', '-x'] 5520c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi successes = [ 5530c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi ('', NS(x=None)), 5540c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi ('-x a', NS(x=['a'])), 5550c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi ] 5560c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi 5570c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi 5580c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yiclass TestOptionalsNargs3(ParserTestCase): 5590c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi """Tests specifying the 3 args for an Optional""" 5600c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi 5610c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi argument_signatures = [Sig('-x', nargs=3)] 5620c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi failures = ['a', '-x', '-x a', '-x a b', 'a -x', 'a -x b'] 5630c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi successes = [ 5640c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi ('', NS(x=None)), 5650c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi ('-x a b c', NS(x=['a', 'b', 'c'])), 5660c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi ] 5670c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi 5680c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi 5690c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yiclass TestOptionalsNargsOptional(ParserTestCase): 5700c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi """Tests specifying an Optional arg for an Optional""" 5710c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi 5720c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi argument_signatures = [ 5730c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi Sig('-w', nargs='?'), 5740c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi Sig('-x', nargs='?', const=42), 5750c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi Sig('-y', nargs='?', default='spam'), 5760c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi Sig('-z', nargs='?', type=int, const='42', default='84'), 5770c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi ] 5780c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi failures = ['2'] 5790c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi successes = [ 5800c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi ('', NS(w=None, x=None, y='spam', z=84)), 5810c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi ('-w', NS(w=None, x=None, y='spam', z=84)), 5820c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi ('-w 2', NS(w='2', x=None, y='spam', z=84)), 5830c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi ('-x', NS(w=None, x=42, y='spam', z=84)), 5840c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi ('-x 2', NS(w=None, x='2', y='spam', z=84)), 5850c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi ('-y', NS(w=None, x=None, y=None, z=84)), 5860c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi ('-y 2', NS(w=None, x=None, y='2', z=84)), 5870c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi ('-z', NS(w=None, x=None, y='spam', z=42)), 5880c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi ('-z 2', NS(w=None, x=None, y='spam', z=2)), 5890c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi ] 5900c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi 5910c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi 5920c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yiclass TestOptionalsNargsZeroOrMore(ParserTestCase): 5930c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi """Tests specifying an args for an Optional that accepts zero or more""" 5940c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi 5950c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi argument_signatures = [ 5960c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi Sig('-x', nargs='*'), 5970c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi Sig('-y', nargs='*', default='spam'), 5980c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi ] 5990c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi failures = ['a'] 6000c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi successes = [ 6010c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi ('', NS(x=None, y='spam')), 6020c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi ('-x', NS(x=[], y='spam')), 6030c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi ('-x a', NS(x=['a'], y='spam')), 6040c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi ('-x a b', NS(x=['a', 'b'], y='spam')), 6050c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi ('-y', NS(x=None, y=[])), 6060c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi ('-y a', NS(x=None, y=['a'])), 6070c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi ('-y a b', NS(x=None, y=['a', 'b'])), 6080c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi ] 6090c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi 6100c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi 6110c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yiclass TestOptionalsNargsOneOrMore(ParserTestCase): 6120c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi """Tests specifying an args for an Optional that accepts one or more""" 6130c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi 6140c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi argument_signatures = [ 6150c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi Sig('-x', nargs='+'), 6160c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi Sig('-y', nargs='+', default='spam'), 6170c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi ] 6180c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi failures = ['a', '-x', '-y', 'a -x', 'a -y b'] 6190c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi successes = [ 6200c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi ('', NS(x=None, y='spam')), 6210c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi ('-x a', NS(x=['a'], y='spam')), 6220c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi ('-x a b', NS(x=['a', 'b'], y='spam')), 6230c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi ('-y a', NS(x=None, y=['a'])), 6240c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi ('-y a b', NS(x=None, y=['a', 'b'])), 6250c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi ] 6260c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi 6270c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi 6280c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yiclass TestOptionalsChoices(ParserTestCase): 6290c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi """Tests specifying the choices for an Optional""" 6300c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi 6310c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi argument_signatures = [ 6320c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi Sig('-f', choices='abc'), 6330c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi Sig('-g', type=int, choices=range(5))] 6340c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi failures = ['a', '-f d', '-fad', '-ga', '-g 6'] 6350c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi successes = [ 6360c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi ('', NS(f=None, g=None)), 6370c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi ('-f a', NS(f='a', g=None)), 6380c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi ('-f c', NS(f='c', g=None)), 6390c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi ('-g 0', NS(f=None, g=0)), 6400c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi ('-g 03', NS(f=None, g=3)), 6410c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi ('-fb -g4', NS(f='b', g=4)), 6420c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi ] 6430c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi 6440c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi 6450c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yiclass TestOptionalsRequired(ParserTestCase): 6460c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi """Tests the an optional action that is required""" 6470c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi 6480c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi argument_signatures = [ 6490c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi Sig('-x', type=int, required=True), 6500c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi ] 6510c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi failures = ['a', ''] 6520c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi successes = [ 6530c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi ('-x 1', NS(x=1)), 6540c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi ('-x42', NS(x=42)), 6550c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi ] 6560c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi 6570c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi 6580c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yiclass TestOptionalsActionStore(ParserTestCase): 6590c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi """Tests the store action for an Optional""" 6600c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi 6610c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi argument_signatures = [Sig('-x', action='store')] 6620c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi failures = ['a', 'a -x'] 6630c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi successes = [ 6640c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi ('', NS(x=None)), 6650c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi ('-xfoo', NS(x='foo')), 6660c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi ] 6670c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi 6680c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi 6690c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yiclass TestOptionalsActionStoreConst(ParserTestCase): 6700c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi """Tests the store_const action for an Optional""" 6710c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi 6720c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi argument_signatures = [Sig('-y', action='store_const', const=object)] 6730c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi failures = ['a'] 6740c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi successes = [ 6750c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi ('', NS(y=None)), 6760c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi ('-y', NS(y=object)), 6770c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi ] 6780c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi 6790c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi 6800c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yiclass TestOptionalsActionStoreFalse(ParserTestCase): 6810c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi """Tests the store_false action for an Optional""" 6820c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi 6830c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi argument_signatures = [Sig('-z', action='store_false')] 6840c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi failures = ['a', '-za', '-z a'] 6850c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi successes = [ 6860c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi ('', NS(z=True)), 6870c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi ('-z', NS(z=False)), 6880c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi ] 6890c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi 6900c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi 6910c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yiclass TestOptionalsActionStoreTrue(ParserTestCase): 6920c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi """Tests the store_true action for an Optional""" 6930c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi 6940c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi argument_signatures = [Sig('--apple', action='store_true')] 6950c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi failures = ['a', '--apple=b', '--apple b'] 6960c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi successes = [ 6970c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi ('', NS(apple=False)), 6980c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi ('--apple', NS(apple=True)), 6990c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi ] 7000c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi 7010c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi 7020c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yiclass TestOptionalsActionAppend(ParserTestCase): 7030c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi """Tests the append action for an Optional""" 7040c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi 7050c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi argument_signatures = [Sig('--baz', action='append')] 7060c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi failures = ['a', '--baz', 'a --baz', '--baz a b'] 7070c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi successes = [ 7080c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi ('', NS(baz=None)), 7090c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi ('--baz a', NS(baz=['a'])), 7100c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi ('--baz a --baz b', NS(baz=['a', 'b'])), 7110c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi ] 7120c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi 7130c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi 7140c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yiclass TestOptionalsActionAppendWithDefault(ParserTestCase): 7150c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi """Tests the append action for an Optional""" 7160c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi 7170c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi argument_signatures = [Sig('--baz', action='append', default=['X'])] 7180c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi failures = ['a', '--baz', 'a --baz', '--baz a b'] 7190c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi successes = [ 7200c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi ('', NS(baz=['X'])), 7210c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi ('--baz a', NS(baz=['X', 'a'])), 7220c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi ('--baz a --baz b', NS(baz=['X', 'a', 'b'])), 7230c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi ] 7240c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi 7250c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi 7260c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yiclass TestOptionalsActionAppendConst(ParserTestCase): 7270c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi """Tests the append_const action for an Optional""" 7280c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi 7290c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi argument_signatures = [ 7300c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi Sig('-b', action='append_const', const=Exception), 7310c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi Sig('-c', action='append', dest='b'), 7320c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi ] 7330c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi failures = ['a', '-c', 'a -c', '-bx', '-b x'] 7340c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi successes = [ 7350c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi ('', NS(b=None)), 7360c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi ('-b', NS(b=[Exception])), 7370c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi ('-b -cx -b -cyz', NS(b=[Exception, 'x', Exception, 'yz'])), 7380c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi ] 7390c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi 7400c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi 7410c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yiclass TestOptionalsActionAppendConstWithDefault(ParserTestCase): 7420c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi """Tests the append_const action for an Optional""" 7430c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi 7440c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi argument_signatures = [ 7450c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi Sig('-b', action='append_const', const=Exception, default=['X']), 7460c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi Sig('-c', action='append', dest='b'), 7470c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi ] 7480c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi failures = ['a', '-c', 'a -c', '-bx', '-b x'] 7490c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi successes = [ 7500c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi ('', NS(b=['X'])), 7510c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi ('-b', NS(b=['X', Exception])), 7520c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi ('-b -cx -b -cyz', NS(b=['X', Exception, 'x', Exception, 'yz'])), 7530c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi ] 7540c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi 7550c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi 7560c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yiclass TestOptionalsActionCount(ParserTestCase): 7570c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi """Tests the count action for an Optional""" 7580c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi 7590c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi argument_signatures = [Sig('-x', action='count')] 7600c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi failures = ['a', '-x a', '-x b', '-x a -x b'] 7610c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi successes = [ 7620c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi ('', NS(x=None)), 7630c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi ('-x', NS(x=1)), 7640c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi ] 7650c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi 7660c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi 7670c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi# ================ 7680c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi# Positional tests 7690c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi# ================ 7700c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi 7710c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yiclass TestPositionalsNargsNone(ParserTestCase): 7720c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi """Test a Positional that doesn't specify nargs""" 7730c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi 7740c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi argument_signatures = [Sig('foo')] 7750c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi failures = ['', '-x', 'a b'] 7760c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi successes = [ 7770c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi ('a', NS(foo='a')), 7780c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi ] 7790c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi 7800c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi 7810c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yiclass TestPositionalsNargs1(ParserTestCase): 7820c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi """Test a Positional that specifies an nargs of 1""" 7830c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi 7840c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi argument_signatures = [Sig('foo', nargs=1)] 7850c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi failures = ['', '-x', 'a b'] 7860c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi successes = [ 7870c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi ('a', NS(foo=['a'])), 7880c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi ] 7890c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi 7900c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi 7910c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yiclass TestPositionalsNargs2(ParserTestCase): 7920c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi """Test a Positional that specifies an nargs of 2""" 7930c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi 7940c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi argument_signatures = [Sig('foo', nargs=2)] 7950c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi failures = ['', 'a', '-x', 'a b c'] 7960c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi successes = [ 7970c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi ('a b', NS(foo=['a', 'b'])), 7980c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi ] 7990c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi 8000c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi 8010c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yiclass TestPositionalsNargsZeroOrMore(ParserTestCase): 8020c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi """Test a Positional that specifies unlimited nargs""" 8030c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi 8040c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi argument_signatures = [Sig('foo', nargs='*')] 8050c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi failures = ['-x'] 8060c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi successes = [ 8070c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi ('', NS(foo=[])), 8080c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi ('a', NS(foo=['a'])), 8090c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi ('a b', NS(foo=['a', 'b'])), 8100c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi ] 8110c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi 8120c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi 8130c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yiclass TestPositionalsNargsZeroOrMoreDefault(ParserTestCase): 8140c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi """Test a Positional that specifies unlimited nargs and a default""" 8150c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi 8160c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi argument_signatures = [Sig('foo', nargs='*', default='bar')] 8170c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi failures = ['-x'] 8180c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi successes = [ 8190c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi ('', NS(foo='bar')), 8200c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi ('a', NS(foo=['a'])), 8210c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi ('a b', NS(foo=['a', 'b'])), 8220c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi ] 8230c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi 8240c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi 8250c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yiclass TestPositionalsNargsOneOrMore(ParserTestCase): 8260c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi """Test a Positional that specifies one or more nargs""" 8270c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi 8280c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi argument_signatures = [Sig('foo', nargs='+')] 8290c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi failures = ['', '-x'] 8300c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi successes = [ 8310c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi ('a', NS(foo=['a'])), 8320c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi ('a b', NS(foo=['a', 'b'])), 8330c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi ] 8340c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi 8350c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi 8360c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yiclass TestPositionalsNargsOptional(ParserTestCase): 8370c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi """Tests an Optional Positional""" 8380c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi 8390c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi argument_signatures = [Sig('foo', nargs='?')] 8400c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi failures = ['-x', 'a b'] 8410c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi successes = [ 8420c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi ('', NS(foo=None)), 8430c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi ('a', NS(foo='a')), 8440c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi ] 8450c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi 8460c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi 8470c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yiclass TestPositionalsNargsOptionalDefault(ParserTestCase): 8480c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi """Tests an Optional Positional with a default value""" 8490c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi 8500c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi argument_signatures = [Sig('foo', nargs='?', default=42)] 8510c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi failures = ['-x', 'a b'] 8520c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi successes = [ 8530c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi ('', NS(foo=42)), 8540c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi ('a', NS(foo='a')), 8550c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi ] 8560c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi 8570c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi 8580c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yiclass TestPositionalsNargsOptionalConvertedDefault(ParserTestCase): 8590c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi """Tests an Optional Positional with a default value 8600c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi that needs to be converted to the appropriate type. 8610c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi """ 8620c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi 8630c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi argument_signatures = [ 8640c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi Sig('foo', nargs='?', type=int, default='42'), 8650c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi ] 8660c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi failures = ['-x', 'a b', '1 2'] 8670c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi successes = [ 8680c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi ('', NS(foo=42)), 8690c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi ('1', NS(foo=1)), 8700c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi ] 8710c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi 8720c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi 8730c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yiclass TestPositionalsNargsNoneNone(ParserTestCase): 8740c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi """Test two Positionals that don't specify nargs""" 8750c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi 8760c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi argument_signatures = [Sig('foo'), Sig('bar')] 8770c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi failures = ['', '-x', 'a', 'a b c'] 8780c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi successes = [ 8790c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi ('a b', NS(foo='a', bar='b')), 8800c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi ] 8810c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi 8820c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi 8830c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yiclass TestPositionalsNargsNone1(ParserTestCase): 8840c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi """Test a Positional with no nargs followed by one with 1""" 8850c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi 8860c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi argument_signatures = [Sig('foo'), Sig('bar', nargs=1)] 8870c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi failures = ['', '--foo', 'a', 'a b c'] 8880c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi successes = [ 8890c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi ('a b', NS(foo='a', bar=['b'])), 8900c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi ] 8910c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi 8920c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi 8930c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yiclass TestPositionalsNargs2None(ParserTestCase): 8940c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi """Test a Positional with 2 nargs followed by one with none""" 8950c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi 8960c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi argument_signatures = [Sig('foo', nargs=2), Sig('bar')] 8970c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi failures = ['', '--foo', 'a', 'a b', 'a b c d'] 8980c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi successes = [ 8990c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi ('a b c', NS(foo=['a', 'b'], bar='c')), 9000c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi ] 9010c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi 9020c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi 9030c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yiclass TestPositionalsNargsNoneZeroOrMore(ParserTestCase): 9040c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi """Test a Positional with no nargs followed by one with unlimited""" 9050c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi 9060c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi argument_signatures = [Sig('foo'), Sig('bar', nargs='*')] 9070c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi failures = ['', '--foo'] 9080c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi successes = [ 9090c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi ('a', NS(foo='a', bar=[])), 9100c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi ('a b', NS(foo='a', bar=['b'])), 9110c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi ('a b c', NS(foo='a', bar=['b', 'c'])), 9120c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi ] 9130c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi 9140c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi 9150c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yiclass TestPositionalsNargsNoneOneOrMore(ParserTestCase): 9160c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi """Test a Positional with no nargs followed by one with one or more""" 9170c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi 9180c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi argument_signatures = [Sig('foo'), Sig('bar', nargs='+')] 9190c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi failures = ['', '--foo', 'a'] 9200c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi successes = [ 9210c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi ('a b', NS(foo='a', bar=['b'])), 9220c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi ('a b c', NS(foo='a', bar=['b', 'c'])), 9230c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi ] 9240c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi 9250c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi 9260c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yiclass TestPositionalsNargsNoneOptional(ParserTestCase): 9270c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi """Test a Positional with no nargs followed by one with an Optional""" 9280c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi 9290c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi argument_signatures = [Sig('foo'), Sig('bar', nargs='?')] 9300c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi failures = ['', '--foo', 'a b c'] 9310c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi successes = [ 9320c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi ('a', NS(foo='a', bar=None)), 9330c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi ('a b', NS(foo='a', bar='b')), 9340c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi ] 9350c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi 9360c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi 9370c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yiclass TestPositionalsNargsZeroOrMoreNone(ParserTestCase): 9380c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi """Test a Positional with unlimited nargs followed by one with none""" 9390c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi 9400c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi argument_signatures = [Sig('foo', nargs='*'), Sig('bar')] 9410c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi failures = ['', '--foo'] 9420c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi successes = [ 9430c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi ('a', NS(foo=[], bar='a')), 9440c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi ('a b', NS(foo=['a'], bar='b')), 9450c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi ('a b c', NS(foo=['a', 'b'], bar='c')), 9460c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi ] 9470c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi 9480c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi 9490c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yiclass TestPositionalsNargsOneOrMoreNone(ParserTestCase): 9500c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi """Test a Positional with one or more nargs followed by one with none""" 9510c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi 9520c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi argument_signatures = [Sig('foo', nargs='+'), Sig('bar')] 9530c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi failures = ['', '--foo', 'a'] 9540c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi successes = [ 9550c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi ('a b', NS(foo=['a'], bar='b')), 9560c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi ('a b c', NS(foo=['a', 'b'], bar='c')), 9570c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi ] 9580c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi 9590c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi 9600c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yiclass TestPositionalsNargsOptionalNone(ParserTestCase): 9610c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi """Test a Positional with an Optional nargs followed by one with none""" 9620c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi 9630c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi argument_signatures = [Sig('foo', nargs='?', default=42), Sig('bar')] 9640c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi failures = ['', '--foo', 'a b c'] 9650c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi successes = [ 9660c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi ('a', NS(foo=42, bar='a')), 9670c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi ('a b', NS(foo='a', bar='b')), 9680c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi ] 9690c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi 9700c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi 9710c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yiclass TestPositionalsNargs2ZeroOrMore(ParserTestCase): 9720c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi """Test a Positional with 2 nargs followed by one with unlimited""" 9730c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi 9740c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi argument_signatures = [Sig('foo', nargs=2), Sig('bar', nargs='*')] 9750c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi failures = ['', '--foo', 'a'] 9760c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi successes = [ 9770c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi ('a b', NS(foo=['a', 'b'], bar=[])), 9780c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi ('a b c', NS(foo=['a', 'b'], bar=['c'])), 9790c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi ] 9800c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi 9810c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi 9820c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yiclass TestPositionalsNargs2OneOrMore(ParserTestCase): 9830c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi """Test a Positional with 2 nargs followed by one with one or more""" 9840c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi 9850c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi argument_signatures = [Sig('foo', nargs=2), Sig('bar', nargs='+')] 9860c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi failures = ['', '--foo', 'a', 'a b'] 9870c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi successes = [ 9880c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi ('a b c', NS(foo=['a', 'b'], bar=['c'])), 9890c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi ] 9900c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi 9910c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi 9920c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yiclass TestPositionalsNargs2Optional(ParserTestCase): 9930c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi """Test a Positional with 2 nargs followed by one optional""" 9940c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi 9950c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi argument_signatures = [Sig('foo', nargs=2), Sig('bar', nargs='?')] 9960c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi failures = ['', '--foo', 'a', 'a b c d'] 9970c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi successes = [ 9980c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi ('a b', NS(foo=['a', 'b'], bar=None)), 9990c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi ('a b c', NS(foo=['a', 'b'], bar='c')), 10000c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi ] 10010c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi 10020c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi 10030c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yiclass TestPositionalsNargsZeroOrMore1(ParserTestCase): 10040c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi """Test a Positional with unlimited nargs followed by one with 1""" 10050c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi 10060c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi argument_signatures = [Sig('foo', nargs='*'), Sig('bar', nargs=1)] 10070c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi failures = ['', '--foo', ] 10080c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi successes = [ 10090c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi ('a', NS(foo=[], bar=['a'])), 10100c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi ('a b', NS(foo=['a'], bar=['b'])), 10110c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi ('a b c', NS(foo=['a', 'b'], bar=['c'])), 10120c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi ] 10130c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi 10140c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi 10150c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yiclass TestPositionalsNargsOneOrMore1(ParserTestCase): 10160c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi """Test a Positional with one or more nargs followed by one with 1""" 10170c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi 10180c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi argument_signatures = [Sig('foo', nargs='+'), Sig('bar', nargs=1)] 10190c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi failures = ['', '--foo', 'a'] 10200c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi successes = [ 10210c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi ('a b', NS(foo=['a'], bar=['b'])), 10220c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi ('a b c', NS(foo=['a', 'b'], bar=['c'])), 10230c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi ] 10240c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi 10250c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi 10260c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yiclass TestPositionalsNargsOptional1(ParserTestCase): 10270c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi """Test a Positional with an Optional nargs followed by one with 1""" 10280c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi 10290c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi argument_signatures = [Sig('foo', nargs='?'), Sig('bar', nargs=1)] 10300c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi failures = ['', '--foo', 'a b c'] 10310c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi successes = [ 10320c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi ('a', NS(foo=None, bar=['a'])), 10330c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi ('a b', NS(foo='a', bar=['b'])), 10340c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi ] 10350c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi 10360c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi 10370c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yiclass TestPositionalsNargsNoneZeroOrMore1(ParserTestCase): 10380c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi """Test three Positionals: no nargs, unlimited nargs and 1 nargs""" 10390c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi 10400c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi argument_signatures = [ 10410c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi Sig('foo'), 10420c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi Sig('bar', nargs='*'), 10430c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi Sig('baz', nargs=1), 10440c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi ] 10450c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi failures = ['', '--foo', 'a'] 10460c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi successes = [ 10470c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi ('a b', NS(foo='a', bar=[], baz=['b'])), 10480c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi ('a b c', NS(foo='a', bar=['b'], baz=['c'])), 10490c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi ] 10500c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi 10510c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi 10520c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yiclass TestPositionalsNargsNoneOneOrMore1(ParserTestCase): 10530c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi """Test three Positionals: no nargs, one or more nargs and 1 nargs""" 10540c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi 10550c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi argument_signatures = [ 10560c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi Sig('foo'), 10570c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi Sig('bar', nargs='+'), 10580c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi Sig('baz', nargs=1), 10590c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi ] 10600c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi failures = ['', '--foo', 'a', 'b'] 10610c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi successes = [ 10620c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi ('a b c', NS(foo='a', bar=['b'], baz=['c'])), 10630c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi ('a b c d', NS(foo='a', bar=['b', 'c'], baz=['d'])), 10640c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi ] 10650c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi 10660c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi 10670c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yiclass TestPositionalsNargsNoneOptional1(ParserTestCase): 10680c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi """Test three Positionals: no nargs, optional narg and 1 nargs""" 10690c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi 10700c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi argument_signatures = [ 10710c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi Sig('foo'), 10720c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi Sig('bar', nargs='?', default=0.625), 10730c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi Sig('baz', nargs=1), 10740c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi ] 10750c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi failures = ['', '--foo', 'a'] 10760c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi successes = [ 10770c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi ('a b', NS(foo='a', bar=0.625, baz=['b'])), 10780c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi ('a b c', NS(foo='a', bar='b', baz=['c'])), 10790c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi ] 10800c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi 10810c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi 10820c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yiclass TestPositionalsNargsOptionalOptional(ParserTestCase): 10830c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi """Test two optional nargs""" 10840c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi 10850c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi argument_signatures = [ 10860c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi Sig('foo', nargs='?'), 10870c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi Sig('bar', nargs='?', default=42), 10880c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi ] 10890c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi failures = ['--foo', 'a b c'] 10900c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi successes = [ 10910c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi ('', NS(foo=None, bar=42)), 10920c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi ('a', NS(foo='a', bar=42)), 10930c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi ('a b', NS(foo='a', bar='b')), 10940c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi ] 10950c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi 10960c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi 10970c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yiclass TestPositionalsNargsOptionalZeroOrMore(ParserTestCase): 10980c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi """Test an Optional narg followed by unlimited nargs""" 10990c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi 11000c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi argument_signatures = [Sig('foo', nargs='?'), Sig('bar', nargs='*')] 11010c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi failures = ['--foo'] 11020c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi successes = [ 11030c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi ('', NS(foo=None, bar=[])), 11040c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi ('a', NS(foo='a', bar=[])), 11050c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi ('a b', NS(foo='a', bar=['b'])), 11060c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi ('a b c', NS(foo='a', bar=['b', 'c'])), 11070c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi ] 11080c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi 11090c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi 11100c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yiclass TestPositionalsNargsOptionalOneOrMore(ParserTestCase): 11110c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi """Test an Optional narg followed by one or more nargs""" 11120c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi 11130c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi argument_signatures = [Sig('foo', nargs='?'), Sig('bar', nargs='+')] 11140c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi failures = ['', '--foo'] 11150c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi successes = [ 11160c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi ('a', NS(foo=None, bar=['a'])), 11170c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi ('a b', NS(foo='a', bar=['b'])), 11180c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi ('a b c', NS(foo='a', bar=['b', 'c'])), 11190c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi ] 11200c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi 11210c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi 11220c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yiclass TestPositionalsChoicesString(ParserTestCase): 11230c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi """Test a set of single-character choices""" 11240c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi 11250c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi argument_signatures = [Sig('spam', choices=set('abcdefg'))] 11260c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi failures = ['', '--foo', 'h', '42', 'ef'] 11270c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi successes = [ 11280c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi ('a', NS(spam='a')), 11290c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi ('g', NS(spam='g')), 11300c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi ] 11310c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi 11320c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi 11330c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yiclass TestPositionalsChoicesInt(ParserTestCase): 11340c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi """Test a set of integer choices""" 11350c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi 11360c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi argument_signatures = [Sig('spam', type=int, choices=range(20))] 11370c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi failures = ['', '--foo', 'h', '42', 'ef'] 11380c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi successes = [ 11390c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi ('4', NS(spam=4)), 11400c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi ('15', NS(spam=15)), 11410c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi ] 11420c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi 11430c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi 11440c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yiclass TestPositionalsActionAppend(ParserTestCase): 11450c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi """Test the 'append' action""" 11460c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi 11470c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi argument_signatures = [ 11480c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi Sig('spam', action='append'), 11490c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi Sig('spam', action='append', nargs=2), 11500c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi ] 11510c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi failures = ['', '--foo', 'a', 'a b', 'a b c d'] 11520c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi successes = [ 11530c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi ('a b c', NS(spam=['a', ['b', 'c']])), 11540c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi ] 11550c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi 11560c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi# ======================================== 11570c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi# Combined optionals and positionals tests 11580c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi# ======================================== 11590c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi 11600c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yiclass TestOptionalsNumericAndPositionals(ParserTestCase): 11610c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi """Tests negative number args when numeric options are present""" 11620c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi 11630c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi argument_signatures = [ 11640c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi Sig('x', nargs='?'), 11650c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi Sig('-4', dest='y', action='store_true'), 11660c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi ] 11670c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi failures = ['-2', '-315'] 11680c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi successes = [ 11690c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi ('', NS(x=None, y=False)), 11700c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi ('a', NS(x='a', y=False)), 11710c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi ('-4', NS(x=None, y=True)), 11720c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi ('-4 a', NS(x='a', y=True)), 11730c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi ] 11740c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi 11750c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi 11760c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yiclass TestOptionalsAlmostNumericAndPositionals(ParserTestCase): 11770c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi """Tests negative number args when almost numeric options are present""" 11780c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi 11790c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi argument_signatures = [ 11800c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi Sig('x', nargs='?'), 11810c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi Sig('-k4', dest='y', action='store_true'), 11820c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi ] 11830c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi failures = ['-k3'] 11840c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi successes = [ 11850c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi ('', NS(x=None, y=False)), 11860c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi ('-2', NS(x='-2', y=False)), 11870c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi ('a', NS(x='a', y=False)), 11880c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi ('-k4', NS(x=None, y=True)), 11890c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi ('-k4 a', NS(x='a', y=True)), 11900c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi ] 11910c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi 11920c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi 11930c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yiclass TestEmptyAndSpaceContainingArguments(ParserTestCase): 11940c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi 11950c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi argument_signatures = [ 11960c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi Sig('x', nargs='?'), 11970c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi Sig('-y', '--yyy', dest='y'), 11980c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi ] 11990c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi failures = ['-y'] 12000c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi successes = [ 12010c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi ([''], NS(x='', y=None)), 12020c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi (['a badger'], NS(x='a badger', y=None)), 12030c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi (['-a badger'], NS(x='-a badger', y=None)), 12040c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi (['-y', ''], NS(x=None, y='')), 12050c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi (['-y', 'a badger'], NS(x=None, y='a badger')), 12060c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi (['-y', '-a badger'], NS(x=None, y='-a badger')), 12070c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi (['--yyy=a badger'], NS(x=None, y='a badger')), 12080c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi (['--yyy=-a badger'], NS(x=None, y='-a badger')), 12090c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi ] 12100c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi 12110c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi 12120c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yiclass TestPrefixCharacterOnlyArguments(ParserTestCase): 12130c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi 12140c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi parser_signature = Sig(prefix_chars='-+') 12150c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi argument_signatures = [ 12160c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi Sig('-', dest='x', nargs='?', const='badger'), 12170c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi Sig('+', dest='y', type=int, default=42), 12180c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi Sig('-+-', dest='z', action='store_true'), 12190c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi ] 12200c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi failures = ['-y', '+ -'] 12210c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi successes = [ 12220c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi ('', NS(x=None, y=42, z=False)), 12230c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi ('-', NS(x='badger', y=42, z=False)), 12240c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi ('- X', NS(x='X', y=42, z=False)), 12250c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi ('+ -3', NS(x=None, y=-3, z=False)), 12260c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi ('-+-', NS(x=None, y=42, z=True)), 12270c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi ('- ===', NS(x='===', y=42, z=False)), 12280c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi ] 12290c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi 12300c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi 12310c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yiclass TestNargsZeroOrMore(ParserTestCase): 12320c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi """Tests specifying an args for an Optional that accepts zero or more""" 12330c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi 12340c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi argument_signatures = [Sig('-x', nargs='*'), Sig('y', nargs='*')] 12350c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi failures = [] 12360c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi successes = [ 12370c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi ('', NS(x=None, y=[])), 12380c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi ('-x', NS(x=[], y=[])), 12390c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi ('-x a', NS(x=['a'], y=[])), 12400c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi ('-x a -- b', NS(x=['a'], y=['b'])), 12410c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi ('a', NS(x=None, y=['a'])), 12420c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi ('a -x', NS(x=[], y=['a'])), 12430c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi ('a -x b', NS(x=['b'], y=['a'])), 12440c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi ] 12450c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi 12460c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi 12470c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yiclass TestNargsRemainder(ParserTestCase): 12480c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi """Tests specifying a positional with nargs=REMAINDER""" 12490c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi 12500c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi argument_signatures = [Sig('x'), Sig('y', nargs='...'), Sig('-z')] 12510c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi failures = ['', '-z', '-z Z'] 12520c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi successes = [ 12530c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi ('X', NS(x='X', y=[], z=None)), 12540c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi ('-z Z X', NS(x='X', y=[], z='Z')), 12550c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi ('X A B -z Z', NS(x='X', y=['A', 'B', '-z', 'Z'], z=None)), 12560c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi ('X Y --foo', NS(x='X', y=['Y', '--foo'], z=None)), 12570c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi ] 12580c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi 12590c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi 12600c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yiclass TestOptionLike(ParserTestCase): 12610c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi """Tests options that may or may not be arguments""" 12620c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi 12630c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi argument_signatures = [ 12640c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi Sig('-x', type=float), 12650c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi Sig('-3', type=float, dest='y'), 12660c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi Sig('z', nargs='*'), 12670c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi ] 12680c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi failures = ['-x', '-y2.5', '-xa', '-x -a', 12690c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi '-x -3', '-x -3.5', '-3 -3.5', 12700c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi '-x -2.5', '-x -2.5 a', '-3 -.5', 12710c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi 'a x -1', '-x -1 a', '-3 -1 a'] 12720c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi successes = [ 12730c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi ('', NS(x=None, y=None, z=[])), 12740c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi ('-x 2.5', NS(x=2.5, y=None, z=[])), 12750c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi ('-x 2.5 a', NS(x=2.5, y=None, z=['a'])), 12760c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi ('-3.5', NS(x=None, y=0.5, z=[])), 12770c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi ('-3-.5', NS(x=None, y=-0.5, z=[])), 12780c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi ('-3 .5', NS(x=None, y=0.5, z=[])), 12790c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi ('a -3.5', NS(x=None, y=0.5, z=['a'])), 12800c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi ('a', NS(x=None, y=None, z=['a'])), 12810c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi ('a -x 1', NS(x=1.0, y=None, z=['a'])), 12820c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi ('-x 1 a', NS(x=1.0, y=None, z=['a'])), 12830c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi ('-3 1 a', NS(x=None, y=1.0, z=['a'])), 12840c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi ] 12850c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi 12860c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi 12870c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yiclass TestDefaultSuppress(ParserTestCase): 12880c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi """Test actions with suppressed defaults""" 12890c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi 12900c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi argument_signatures = [ 12910c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi Sig('foo', nargs='?', default=argparse.SUPPRESS), 12920c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi Sig('bar', nargs='*', default=argparse.SUPPRESS), 12930c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi Sig('--baz', action='store_true', default=argparse.SUPPRESS), 12940c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi ] 12950c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi failures = ['-x'] 12960c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi successes = [ 12970c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi ('', NS()), 12980c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi ('a', NS(foo='a')), 12990c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi ('a b', NS(foo='a', bar=['b'])), 13000c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi ('--baz', NS(baz=True)), 13010c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi ('a --baz', NS(foo='a', baz=True)), 13020c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi ('--baz a b', NS(foo='a', bar=['b'], baz=True)), 13030c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi ] 13040c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi 13050c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi 13060c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yiclass TestParserDefaultSuppress(ParserTestCase): 13070c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi """Test actions with a parser-level default of SUPPRESS""" 13080c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi 13090c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi parser_signature = Sig(argument_default=argparse.SUPPRESS) 13100c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi argument_signatures = [ 13110c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi Sig('foo', nargs='?'), 13120c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi Sig('bar', nargs='*'), 13130c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi Sig('--baz', action='store_true'), 13140c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi ] 13150c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi failures = ['-x'] 13160c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi successes = [ 13170c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi ('', NS()), 13180c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi ('a', NS(foo='a')), 13190c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi ('a b', NS(foo='a', bar=['b'])), 13200c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi ('--baz', NS(baz=True)), 13210c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi ('a --baz', NS(foo='a', baz=True)), 13220c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi ('--baz a b', NS(foo='a', bar=['b'], baz=True)), 13230c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi ] 13240c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi 13250c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi 13260c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yiclass TestParserDefault42(ParserTestCase): 13270c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi """Test actions with a parser-level default of 42""" 13280c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi 13290c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi parser_signature = Sig(argument_default=42, version='1.0') 13300c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi argument_signatures = [ 13310c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi Sig('foo', nargs='?'), 13320c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi Sig('bar', nargs='*'), 13330c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi Sig('--baz', action='store_true'), 13340c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi ] 13350c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi failures = ['-x'] 13360c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi successes = [ 13370c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi ('', NS(foo=42, bar=42, baz=42)), 13380c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi ('a', NS(foo='a', bar=42, baz=42)), 13390c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi ('a b', NS(foo='a', bar=['b'], baz=42)), 13400c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi ('--baz', NS(foo=42, bar=42, baz=True)), 13410c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi ('a --baz', NS(foo='a', bar=42, baz=True)), 13420c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi ('--baz a b', NS(foo='a', bar=['b'], baz=True)), 13430c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi ] 13440c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi 13450c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi 13460c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yiclass TestArgumentsFromFile(TempDirMixin, ParserTestCase): 13470c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi """Test reading arguments from a file""" 13480c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi 13490c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi def setUp(self): 13500c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi super(TestArgumentsFromFile, self).setUp() 13510c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi file_texts = [ 13520c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi ('hello', 'hello world!\n'), 13530c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi ('recursive', '-a\n' 13540c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi 'A\n' 13550c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi '@hello'), 13560c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi ('invalid', '@no-such-path\n'), 13570c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi ] 13580c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi for path, text in file_texts: 13590c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi file = open(path, 'w') 13600c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi file.write(text) 13610c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi file.close() 13620c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi 13630c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi parser_signature = Sig(fromfile_prefix_chars='@') 13640c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi argument_signatures = [ 13650c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi Sig('-a'), 13660c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi Sig('x'), 13670c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi Sig('y', nargs='+'), 13680c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi ] 13690c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi failures = ['', '-b', 'X', '@invalid', '@missing'] 13700c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi successes = [ 13710c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi ('X Y', NS(a=None, x='X', y=['Y'])), 13720c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi ('X -a A Y Z', NS(a='A', x='X', y=['Y', 'Z'])), 13730c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi ('@hello X', NS(a=None, x='hello world!', y=['X'])), 13740c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi ('X @hello', NS(a=None, x='X', y=['hello world!'])), 13750c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi ('-a B @recursive Y Z', NS(a='A', x='hello world!', y=['Y', 'Z'])), 13760c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi ('X @recursive Z -a B', NS(a='B', x='X', y=['hello world!', 'Z'])), 13770c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi (["-a", "", "X", "Y"], NS(a='', x='X', y=['Y'])), 13780c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi ] 13790c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi 13800c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi 13810c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yiclass TestArgumentsFromFileConverter(TempDirMixin, ParserTestCase): 13820c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi """Test reading arguments from a file""" 13830c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi 13840c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi def setUp(self): 13850c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi super(TestArgumentsFromFileConverter, self).setUp() 13860c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi file_texts = [ 13870c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi ('hello', 'hello world!\n'), 13880c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi ] 13890c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi for path, text in file_texts: 13900c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi file = open(path, 'w') 13910c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi file.write(text) 13920c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi file.close() 13930c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi 13940c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi class FromFileConverterArgumentParser(ErrorRaisingArgumentParser): 13950c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi 13960c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi def convert_arg_line_to_args(self, arg_line): 13970c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi for arg in arg_line.split(): 13980c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi if not arg.strip(): 13990c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi continue 14000c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi yield arg 14010c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi parser_class = FromFileConverterArgumentParser 14020c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi parser_signature = Sig(fromfile_prefix_chars='@') 14030c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi argument_signatures = [ 14040c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi Sig('y', nargs='+'), 14050c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi ] 14060c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi failures = [] 14070c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi successes = [ 14080c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi ('@hello X', NS(y=['hello', 'world!', 'X'])), 14090c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi ] 14100c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi 14110c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi 14120c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi# ===================== 14130c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi# Type conversion tests 14140c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi# ===================== 14150c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi 14160c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yiclass TestFileTypeRepr(TestCase): 14170c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi 14180c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi def test_r(self): 14190c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi type = argparse.FileType('r') 14200c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi self.assertEqual("FileType('r')", repr(type)) 14210c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi 14220c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi def test_wb_1(self): 14230c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi type = argparse.FileType('wb', 1) 14240c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi self.assertEqual("FileType('wb', 1)", repr(type)) 14250c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi 14260c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi 14270c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yiclass RFile(object): 14280c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi seen = {} 14290c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi 14300c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi def __init__(self, name): 14310c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi self.name = name 14320c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi 14330c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi __hash__ = None 14340c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi 14350c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi def __eq__(self, other): 14360c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi if other in self.seen: 14370c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi text = self.seen[other] 14380c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi else: 14390c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi text = self.seen[other] = other.read() 14400c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi other.close() 14410c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi if not isinstance(text, str): 14420c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi text = text.decode('ascii') 14430c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi return self.name == other.name == text 14440c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi 14450c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi 14460c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yiclass TestFileTypeR(TempDirMixin, ParserTestCase): 14470c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi """Test the FileType option/argument type for reading files""" 14480c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi 14490c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi def setUp(self): 14500c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi super(TestFileTypeR, self).setUp() 14510c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi for file_name in ['foo', 'bar']: 14520c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi file = open(os.path.join(self.temp_dir, file_name), 'w') 14530c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi file.write(file_name) 14540c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi file.close() 14550c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi self.create_readonly_file('readonly') 14560c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi 14570c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi argument_signatures = [ 14580c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi Sig('-x', type=argparse.FileType()), 14590c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi Sig('spam', type=argparse.FileType('r')), 14600c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi ] 14610c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi failures = ['-x', '-x bar', 'non-existent-file.txt'] 14620c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi successes = [ 14630c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi ('foo', NS(x=None, spam=RFile('foo'))), 14640c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi ('-x foo bar', NS(x=RFile('foo'), spam=RFile('bar'))), 14650c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi ('bar -x foo', NS(x=RFile('foo'), spam=RFile('bar'))), 14660c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi ('-x - -', NS(x=sys.stdin, spam=sys.stdin)), 14670c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi ('readonly', NS(x=None, spam=RFile('readonly'))), 14680c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi ] 14690c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi 14700c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yiclass TestFileTypeDefaults(TempDirMixin, ParserTestCase): 14710c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi """Test that a file is not created unless the default is needed""" 14720c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi def setUp(self): 14730c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi super(TestFileTypeDefaults, self).setUp() 14740c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi file = open(os.path.join(self.temp_dir, 'good'), 'w') 14750c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi file.write('good') 14760c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi file.close() 14770c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi 14780c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi argument_signatures = [ 14790c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi Sig('-c', type=argparse.FileType('r'), default='no-file.txt'), 14800c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi ] 14810c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi # should provoke no such file error 14820c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi failures = [''] 14830c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi # should not provoke error because default file is created 14840c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi successes = [('-c good', NS(c=RFile('good')))] 14850c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi 14860c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi 14870c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yiclass TestFileTypeRB(TempDirMixin, ParserTestCase): 14880c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi """Test the FileType option/argument type for reading files""" 14890c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi 14900c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi def setUp(self): 14910c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi super(TestFileTypeRB, self).setUp() 14920c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi for file_name in ['foo', 'bar']: 14930c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi file = open(os.path.join(self.temp_dir, file_name), 'w') 14940c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi file.write(file_name) 14950c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi file.close() 14960c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi 14970c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi argument_signatures = [ 14980c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi Sig('-x', type=argparse.FileType('rb')), 14990c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi Sig('spam', type=argparse.FileType('rb')), 15000c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi ] 15010c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi failures = ['-x', '-x bar'] 15020c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi successes = [ 15030c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi ('foo', NS(x=None, spam=RFile('foo'))), 15040c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi ('-x foo bar', NS(x=RFile('foo'), spam=RFile('bar'))), 15050c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi ('bar -x foo', NS(x=RFile('foo'), spam=RFile('bar'))), 15060c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi ('-x - -', NS(x=sys.stdin, spam=sys.stdin)), 15070c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi ] 15080c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi 15090c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi 15100c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yiclass WFile(object): 15110c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi seen = set() 15120c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi 15130c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi def __init__(self, name): 15140c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi self.name = name 15150c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi 15160c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi __hash__ = None 15170c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi 15180c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi def __eq__(self, other): 15190c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi if other not in self.seen: 15200c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi text = 'Check that file is writable.' 15210c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi if 'b' in other.mode: 15220c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi text = text.encode('ascii') 15230c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi other.write(text) 15240c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi other.close() 15250c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi self.seen.add(other) 15260c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi return self.name == other.name 15270c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi 15280c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi 15290c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi@unittest.skipIf(hasattr(os, 'geteuid') and os.geteuid() == 0, 15300c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi "non-root user required") 15310c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yiclass TestFileTypeW(TempDirMixin, ParserTestCase): 15320c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi """Test the FileType option/argument type for writing files""" 15330c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi 15340c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi def setUp(self): 15350c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi super(TestFileTypeW, self).setUp() 15360c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi self.create_readonly_file('readonly') 15370c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi 15380c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi argument_signatures = [ 15390c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi Sig('-x', type=argparse.FileType('w')), 15400c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi Sig('spam', type=argparse.FileType('w')), 15410c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi ] 15420c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi failures = ['-x', '-x bar'] 15430c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi failures = ['-x', '-x bar', 'readonly'] 15440c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi successes = [ 15450c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi ('foo', NS(x=None, spam=WFile('foo'))), 15460c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi ('-x foo bar', NS(x=WFile('foo'), spam=WFile('bar'))), 15470c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi ('bar -x foo', NS(x=WFile('foo'), spam=WFile('bar'))), 15480c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi ('-x - -', NS(x=sys.stdout, spam=sys.stdout)), 15490c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi ] 15500c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi 15510c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi 15520c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yiclass TestFileTypeWB(TempDirMixin, ParserTestCase): 15530c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi 15540c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi argument_signatures = [ 15550c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi Sig('-x', type=argparse.FileType('wb')), 15560c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi Sig('spam', type=argparse.FileType('wb')), 15570c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi ] 15580c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi failures = ['-x', '-x bar'] 15590c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi successes = [ 15600c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi ('foo', NS(x=None, spam=WFile('foo'))), 15610c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi ('-x foo bar', NS(x=WFile('foo'), spam=WFile('bar'))), 15620c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi ('bar -x foo', NS(x=WFile('foo'), spam=WFile('bar'))), 15630c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi ('-x - -', NS(x=sys.stdout, spam=sys.stdout)), 15640c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi ] 15650c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi 15660c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi 15670c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yiclass TestTypeCallable(ParserTestCase): 15680c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi """Test some callables as option/argument types""" 15690c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi 15700c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi argument_signatures = [ 15710c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi Sig('--eggs', type=complex), 15720c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi Sig('spam', type=float), 15730c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi ] 15740c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi failures = ['a', '42j', '--eggs a', '--eggs 2i'] 15750c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi successes = [ 15760c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi ('--eggs=42 42', NS(eggs=42, spam=42.0)), 15770c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi ('--eggs 2j -- -1.5', NS(eggs=2j, spam=-1.5)), 15780c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi ('1024.675', NS(eggs=None, spam=1024.675)), 15790c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi ] 15800c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi 15810c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi 15820c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yiclass TestTypeUserDefined(ParserTestCase): 15830c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi """Test a user-defined option/argument type""" 15840c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi 15850c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi class MyType(TestCase): 15860c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi 15870c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi def __init__(self, value): 15880c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi self.value = value 15890c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi 15900c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi __hash__ = None 15910c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi 15920c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi def __eq__(self, other): 15930c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi return (type(self), self.value) == (type(other), other.value) 15940c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi 15950c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi argument_signatures = [ 15960c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi Sig('-x', type=MyType), 15970c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi Sig('spam', type=MyType), 15980c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi ] 15990c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi failures = [] 16000c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi successes = [ 16010c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi ('a -x b', NS(x=MyType('b'), spam=MyType('a'))), 16020c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi ('-xf g', NS(x=MyType('f'), spam=MyType('g'))), 16030c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi ] 16040c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi 16050c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi 16060c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yiclass TestTypeClassicClass(ParserTestCase): 16070c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi """Test a classic class type""" 16080c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi 16090c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi class C: 16100c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi 16110c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi def __init__(self, value): 16120c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi self.value = value 16130c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi 16140c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi __hash__ = None 16150c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi 16160c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi def __eq__(self, other): 16170c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi return (type(self), self.value) == (type(other), other.value) 16180c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi 16190c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi argument_signatures = [ 16200c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi Sig('-x', type=C), 16210c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi Sig('spam', type=C), 16220c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi ] 16230c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi failures = [] 16240c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi successes = [ 16250c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi ('a -x b', NS(x=C('b'), spam=C('a'))), 16260c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi ('-xf g', NS(x=C('f'), spam=C('g'))), 16270c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi ] 16280c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi 16290c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi 16300c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yiclass TestTypeRegistration(TestCase): 16310c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi """Test a user-defined type by registering it""" 16320c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi 16330c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi def test(self): 16340c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi 16350c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi def get_my_type(string): 16360c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi return 'my_type{%s}' % string 16370c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi 16380c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi parser = argparse.ArgumentParser() 16390c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi parser.register('type', 'my_type', get_my_type) 16400c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi parser.add_argument('-x', type='my_type') 16410c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi parser.add_argument('y', type='my_type') 16420c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi 16430c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi self.assertEqual(parser.parse_args('1'.split()), 16440c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi NS(x=None, y='my_type{1}')) 16450c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi self.assertEqual(parser.parse_args('-x 1 42'.split()), 16460c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi NS(x='my_type{1}', y='my_type{42}')) 16470c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi 16480c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi 16490c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi# ============ 16500c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi# Action tests 16510c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi# ============ 16520c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi 16530c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yiclass TestActionUserDefined(ParserTestCase): 16540c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi """Test a user-defined option/argument action""" 16550c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi 16560c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi class OptionalAction(argparse.Action): 16570c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi 16580c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi def __call__(self, parser, namespace, value, option_string=None): 16590c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi try: 16600c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi # check destination and option string 16610c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi assert self.dest == 'spam', 'dest: %s' % self.dest 16620c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi assert option_string == '-s', 'flag: %s' % option_string 16630c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi # when option is before argument, badger=2, and when 16640c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi # option is after argument, badger=<whatever was set> 16650c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi expected_ns = NS(spam=0.25) 16660c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi if value in [0.125, 0.625]: 16670c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi expected_ns.badger = 2 16680c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi elif value in [2.0]: 16690c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi expected_ns.badger = 84 16700c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi else: 16710c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi raise AssertionError('value: %s' % value) 16720c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi assert expected_ns == namespace, ('expected %s, got %s' % 16730c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi (expected_ns, namespace)) 16740c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi except AssertionError: 16750c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi e = sys.exc_info()[1] 16760c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi raise ArgumentParserError('opt_action failed: %s' % e) 16770c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi setattr(namespace, 'spam', value) 16780c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi 16790c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi class PositionalAction(argparse.Action): 16800c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi 16810c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi def __call__(self, parser, namespace, value, option_string=None): 16820c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi try: 16830c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi assert option_string is None, ('option_string: %s' % 16840c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi option_string) 16850c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi # check destination 16860c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi assert self.dest == 'badger', 'dest: %s' % self.dest 16870c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi # when argument is before option, spam=0.25, and when 16880c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi # option is after argument, spam=<whatever was set> 16890c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi expected_ns = NS(badger=2) 16900c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi if value in [42, 84]: 16910c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi expected_ns.spam = 0.25 16920c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi elif value in [1]: 16930c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi expected_ns.spam = 0.625 16940c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi elif value in [2]: 16950c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi expected_ns.spam = 0.125 16960c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi else: 16970c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi raise AssertionError('value: %s' % value) 16980c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi assert expected_ns == namespace, ('expected %s, got %s' % 16990c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi (expected_ns, namespace)) 17000c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi except AssertionError: 17010c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi e = sys.exc_info()[1] 17020c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi raise ArgumentParserError('arg_action failed: %s' % e) 17030c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi setattr(namespace, 'badger', value) 17040c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi 17050c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi argument_signatures = [ 17060c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi Sig('-s', dest='spam', action=OptionalAction, 17070c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi type=float, default=0.25), 17080c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi Sig('badger', action=PositionalAction, 17090c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi type=int, nargs='?', default=2), 17100c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi ] 17110c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi failures = [] 17120c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi successes = [ 17130c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi ('-s0.125', NS(spam=0.125, badger=2)), 17140c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi ('42', NS(spam=0.25, badger=42)), 17150c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi ('-s 0.625 1', NS(spam=0.625, badger=1)), 17160c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi ('84 -s2', NS(spam=2.0, badger=84)), 17170c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi ] 17180c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi 17190c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi 17200c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yiclass TestActionRegistration(TestCase): 17210c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi """Test a user-defined action supplied by registering it""" 17220c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi 17230c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi class MyAction(argparse.Action): 17240c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi 17250c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi def __call__(self, parser, namespace, values, option_string=None): 17260c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi setattr(namespace, self.dest, 'foo[%s]' % values) 17270c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi 17280c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi def test(self): 17290c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi 17300c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi parser = argparse.ArgumentParser() 17310c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi parser.register('action', 'my_action', self.MyAction) 17320c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi parser.add_argument('badger', action='my_action') 17330c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi 17340c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi self.assertEqual(parser.parse_args(['1']), NS(badger='foo[1]')) 17350c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi self.assertEqual(parser.parse_args(['42']), NS(badger='foo[42]')) 17360c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi 17370c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi 17380c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi# ================ 17390c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi# Subparsers tests 17400c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi# ================ 17410c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi 17420c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yiclass TestAddSubparsers(TestCase): 17430c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi """Test the add_subparsers method""" 17440c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi 17450c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi def assertArgumentParserError(self, *args, **kwargs): 17460c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi self.assertRaises(ArgumentParserError, *args, **kwargs) 17470c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi 17480c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi def _get_parser(self, subparser_help=False, prefix_chars=None): 17490c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi # create a parser with a subparsers argument 17500c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi if prefix_chars: 17510c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi parser = ErrorRaisingArgumentParser( 17520c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi prog='PROG', description='main description', prefix_chars=prefix_chars) 17530c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi parser.add_argument( 17540c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi prefix_chars[0] * 2 + 'foo', action='store_true', help='foo help') 17550c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi else: 17560c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi parser = ErrorRaisingArgumentParser( 17570c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi prog='PROG', description='main description') 17580c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi parser.add_argument( 17590c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi '--foo', action='store_true', help='foo help') 17600c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi parser.add_argument( 17610c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi 'bar', type=float, help='bar help') 17620c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi 17630c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi # check that only one subparsers argument can be added 17640c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi subparsers = parser.add_subparsers(help='command help') 17650c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi self.assertArgumentParserError(parser.add_subparsers) 17660c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi 17670c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi # add first sub-parser 17680c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi parser1_kwargs = dict(description='1 description') 17690c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi if subparser_help: 17700c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi parser1_kwargs['help'] = '1 help' 17710c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi parser1 = subparsers.add_parser('1', **parser1_kwargs) 17720c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi parser1.add_argument('-w', type=int, help='w help') 17730c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi parser1.add_argument('x', choices='abc', help='x help') 17740c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi 17750c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi # add second sub-parser 17760c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi parser2_kwargs = dict(description='2 description') 17770c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi if subparser_help: 17780c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi parser2_kwargs['help'] = '2 help' 17790c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi parser2 = subparsers.add_parser('2', **parser2_kwargs) 17800c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi parser2.add_argument('-y', choices='123', help='y help') 17810c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi parser2.add_argument('z', type=complex, nargs='*', help='z help') 17820c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi 17830c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi # add third sub-parser 17840c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi parser3_kwargs = dict(description='3 description') 17850c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi if subparser_help: 17860c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi parser3_kwargs['help'] = '3 help' 17870c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi parser3 = subparsers.add_parser('3', **parser3_kwargs) 17880c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi parser3.add_argument('t', type=int, help='t help') 17890c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi parser3.add_argument('u', nargs='...', help='u help') 17900c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi 17910c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi # return the main parser 17920c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi return parser 17930c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi 17940c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi def setUp(self): 17950c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi super(TestAddSubparsers, self).setUp() 17960c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi self.parser = self._get_parser() 17970c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi self.command_help_parser = self._get_parser(subparser_help=True) 17980c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi 17990c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi def test_parse_args_failures(self): 18000c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi # check some failure cases: 18010c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi for args_str in ['', 'a', 'a a', '0.5 a', '0.5 1', 18020c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi '0.5 1 -y', '0.5 2 -w']: 18030c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi args = args_str.split() 18040c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi self.assertArgumentParserError(self.parser.parse_args, args) 18050c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi 18060c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi def test_parse_args(self): 18070c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi # check some non-failure cases: 18080c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi self.assertEqual( 18090c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi self.parser.parse_args('0.5 1 b -w 7'.split()), 18100c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi NS(foo=False, bar=0.5, w=7, x='b'), 18110c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi ) 18120c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi self.assertEqual( 18130c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi self.parser.parse_args('0.25 --foo 2 -y 2 3j -- -1j'.split()), 18140c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi NS(foo=True, bar=0.25, y='2', z=[3j, -1j]), 18150c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi ) 18160c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi self.assertEqual( 18170c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi self.parser.parse_args('--foo 0.125 1 c'.split()), 18180c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi NS(foo=True, bar=0.125, w=None, x='c'), 18190c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi ) 18200c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi self.assertEqual( 18210c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi self.parser.parse_args('-1.5 3 11 -- a --foo 7 -- b'.split()), 18220c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi NS(foo=False, bar=-1.5, t=11, u=['a', '--foo', '7', '--', 'b']), 18230c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi ) 18240c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi 18250c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi def test_parse_known_args(self): 18260c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi self.assertEqual( 18270c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi self.parser.parse_known_args('0.5 1 b -w 7'.split()), 18280c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi (NS(foo=False, bar=0.5, w=7, x='b'), []), 18290c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi ) 18300c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi self.assertEqual( 18310c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi self.parser.parse_known_args('0.5 -p 1 b -w 7'.split()), 18320c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi (NS(foo=False, bar=0.5, w=7, x='b'), ['-p']), 18330c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi ) 18340c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi self.assertEqual( 18350c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi self.parser.parse_known_args('0.5 1 b -w 7 -p'.split()), 18360c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi (NS(foo=False, bar=0.5, w=7, x='b'), ['-p']), 18370c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi ) 18380c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi self.assertEqual( 18390c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi self.parser.parse_known_args('0.5 1 b -q -rs -w 7'.split()), 18400c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi (NS(foo=False, bar=0.5, w=7, x='b'), ['-q', '-rs']), 18410c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi ) 18420c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi self.assertEqual( 18430c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi self.parser.parse_known_args('0.5 -W 1 b -X Y -w 7 Z'.split()), 18440c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi (NS(foo=False, bar=0.5, w=7, x='b'), ['-W', '-X', 'Y', 'Z']), 18450c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi ) 18460c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi 18470c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi def test_dest(self): 18480c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi parser = ErrorRaisingArgumentParser() 18490c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi parser.add_argument('--foo', action='store_true') 18500c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi subparsers = parser.add_subparsers(dest='bar') 18510c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi parser1 = subparsers.add_parser('1') 18520c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi parser1.add_argument('baz') 18530c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi self.assertEqual(NS(foo=False, bar='1', baz='2'), 18540c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi parser.parse_args('1 2'.split())) 18550c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi 18560c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi def test_help(self): 18570c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi self.assertEqual(self.parser.format_usage(), 18580c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi 'usage: PROG [-h] [--foo] bar {1,2,3} ...\n') 18590c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi self.assertEqual(self.parser.format_help(), textwrap.dedent('''\ 18600c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi usage: PROG [-h] [--foo] bar {1,2,3} ... 18610c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi 18620c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi main description 18630c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi 18640c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi positional arguments: 18650c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi bar bar help 18660c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi {1,2,3} command help 18670c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi 18680c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi optional arguments: 18690c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi -h, --help show this help message and exit 18700c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi --foo foo help 18710c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi ''')) 18720c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi 18730c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi def test_help_extra_prefix_chars(self): 18740c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi # Make sure - is still used for help if it is a non-first prefix char 18750c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi parser = self._get_parser(prefix_chars='+:-') 18760c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi self.assertEqual(parser.format_usage(), 18770c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi 'usage: PROG [-h] [++foo] bar {1,2,3} ...\n') 18780c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi self.assertEqual(parser.format_help(), textwrap.dedent('''\ 18790c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi usage: PROG [-h] [++foo] bar {1,2,3} ... 18800c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi 18810c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi main description 18820c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi 18830c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi positional arguments: 18840c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi bar bar help 18850c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi {1,2,3} command help 18860c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi 18870c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi optional arguments: 18880c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi -h, --help show this help message and exit 18890c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi ++foo foo help 18900c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi ''')) 18910c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi 18920c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi 18930c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi def test_help_alternate_prefix_chars(self): 18940c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi parser = self._get_parser(prefix_chars='+:/') 18950c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi self.assertEqual(parser.format_usage(), 18960c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi 'usage: PROG [+h] [++foo] bar {1,2,3} ...\n') 18970c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi self.assertEqual(parser.format_help(), textwrap.dedent('''\ 18980c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi usage: PROG [+h] [++foo] bar {1,2,3} ... 18990c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi 19000c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi main description 19010c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi 19020c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi positional arguments: 19030c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi bar bar help 19040c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi {1,2,3} command help 19050c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi 19060c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi optional arguments: 19070c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi +h, ++help show this help message and exit 19080c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi ++foo foo help 19090c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi ''')) 19100c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi 19110c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi def test_parser_command_help(self): 19120c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi self.assertEqual(self.command_help_parser.format_usage(), 19130c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi 'usage: PROG [-h] [--foo] bar {1,2,3} ...\n') 19140c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi self.assertEqual(self.command_help_parser.format_help(), 19150c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi textwrap.dedent('''\ 19160c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi usage: PROG [-h] [--foo] bar {1,2,3} ... 19170c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi 19180c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi main description 19190c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi 19200c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi positional arguments: 19210c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi bar bar help 19220c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi {1,2,3} command help 19230c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi 1 1 help 19240c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi 2 2 help 19250c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi 3 3 help 19260c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi 19270c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi optional arguments: 19280c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi -h, --help show this help message and exit 19290c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi --foo foo help 19300c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi ''')) 19310c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi 19320c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi def test_subparser_title_help(self): 19330c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi parser = ErrorRaisingArgumentParser(prog='PROG', 19340c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi description='main description') 19350c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi parser.add_argument('--foo', action='store_true', help='foo help') 19360c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi parser.add_argument('bar', help='bar help') 19370c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi subparsers = parser.add_subparsers(title='subcommands', 19380c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi description='command help', 19390c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi help='additional text') 19400c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi parser1 = subparsers.add_parser('1') 19410c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi parser2 = subparsers.add_parser('2') 19420c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi self.assertEqual(parser.format_usage(), 19430c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi 'usage: PROG [-h] [--foo] bar {1,2} ...\n') 19440c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi self.assertEqual(parser.format_help(), textwrap.dedent('''\ 19450c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi usage: PROG [-h] [--foo] bar {1,2} ... 19460c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi 19470c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi main description 19480c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi 19490c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi positional arguments: 19500c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi bar bar help 19510c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi 19520c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi optional arguments: 19530c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi -h, --help show this help message and exit 19540c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi --foo foo help 19550c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi 19560c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi subcommands: 19570c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi command help 19580c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi 19590c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi {1,2} additional text 19600c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi ''')) 19610c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi 19620c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi def _test_subparser_help(self, args_str, expected_help): 19630c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi try: 19640c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi self.parser.parse_args(args_str.split()) 19650c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi except ArgumentParserError: 19660c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi err = sys.exc_info()[1] 19670c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi if err.stdout != expected_help: 19680c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi print(repr(expected_help)) 19690c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi print(repr(err.stdout)) 19700c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi self.assertEqual(err.stdout, expected_help) 19710c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi 19720c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi def test_subparser1_help(self): 19730c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi self._test_subparser_help('5.0 1 -h', textwrap.dedent('''\ 19740c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi usage: PROG bar 1 [-h] [-w W] {a,b,c} 19750c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi 19760c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi 1 description 19770c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi 19780c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi positional arguments: 19790c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi {a,b,c} x help 19800c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi 19810c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi optional arguments: 19820c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi -h, --help show this help message and exit 19830c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi -w W w help 19840c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi ''')) 19850c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi 19860c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi def test_subparser2_help(self): 19870c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi self._test_subparser_help('5.0 2 -h', textwrap.dedent('''\ 19880c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi usage: PROG bar 2 [-h] [-y {1,2,3}] [z [z ...]] 19890c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi 19900c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi 2 description 19910c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi 19920c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi positional arguments: 19930c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi z z help 19940c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi 19950c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi optional arguments: 19960c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi -h, --help show this help message and exit 19970c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi -y {1,2,3} y help 19980c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi ''')) 19990c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi 20000c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi# ============ 20010c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi# Groups tests 20020c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi# ============ 20030c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi 20040c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yiclass TestPositionalsGroups(TestCase): 20050c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi """Tests that order of group positionals matches construction order""" 20060c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi 20070c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi def test_nongroup_first(self): 20080c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi parser = ErrorRaisingArgumentParser() 20090c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi parser.add_argument('foo') 20100c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi group = parser.add_argument_group('g') 20110c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi group.add_argument('bar') 20120c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi parser.add_argument('baz') 20130c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi expected = NS(foo='1', bar='2', baz='3') 20140c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi result = parser.parse_args('1 2 3'.split()) 20150c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi self.assertEqual(expected, result) 20160c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi 20170c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi def test_group_first(self): 20180c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi parser = ErrorRaisingArgumentParser() 20190c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi group = parser.add_argument_group('xxx') 20200c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi group.add_argument('foo') 20210c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi parser.add_argument('bar') 20220c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi parser.add_argument('baz') 20230c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi expected = NS(foo='1', bar='2', baz='3') 20240c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi result = parser.parse_args('1 2 3'.split()) 20250c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi self.assertEqual(expected, result) 20260c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi 20270c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi def test_interleaved_groups(self): 20280c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi parser = ErrorRaisingArgumentParser() 20290c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi group = parser.add_argument_group('xxx') 20300c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi parser.add_argument('foo') 20310c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi group.add_argument('bar') 20320c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi parser.add_argument('baz') 20330c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi group = parser.add_argument_group('yyy') 20340c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi group.add_argument('frell') 20350c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi expected = NS(foo='1', bar='2', baz='3', frell='4') 20360c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi result = parser.parse_args('1 2 3 4'.split()) 20370c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi self.assertEqual(expected, result) 20380c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi 20390c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi# =================== 20400c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi# Parent parser tests 20410c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi# =================== 20420c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi 20430c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yiclass TestParentParsers(TestCase): 20440c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi """Tests that parsers can be created with parent parsers""" 20450c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi 20460c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi def assertArgumentParserError(self, *args, **kwargs): 20470c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi self.assertRaises(ArgumentParserError, *args, **kwargs) 20480c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi 20490c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi def setUp(self): 20500c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi super(TestParentParsers, self).setUp() 20510c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi self.wxyz_parent = ErrorRaisingArgumentParser(add_help=False) 20520c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi self.wxyz_parent.add_argument('--w') 20530c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi x_group = self.wxyz_parent.add_argument_group('x') 20540c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi x_group.add_argument('-y') 20550c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi self.wxyz_parent.add_argument('z') 20560c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi 20570c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi self.abcd_parent = ErrorRaisingArgumentParser(add_help=False) 20580c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi self.abcd_parent.add_argument('a') 20590c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi self.abcd_parent.add_argument('-b') 20600c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi c_group = self.abcd_parent.add_argument_group('c') 20610c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi c_group.add_argument('--d') 20620c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi 20630c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi self.w_parent = ErrorRaisingArgumentParser(add_help=False) 20640c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi self.w_parent.add_argument('--w') 20650c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi 20660c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi self.z_parent = ErrorRaisingArgumentParser(add_help=False) 20670c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi self.z_parent.add_argument('z') 20680c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi 20690c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi # parents with mutually exclusive groups 20700c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi self.ab_mutex_parent = ErrorRaisingArgumentParser(add_help=False) 20710c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi group = self.ab_mutex_parent.add_mutually_exclusive_group() 20720c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi group.add_argument('-a', action='store_true') 20730c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi group.add_argument('-b', action='store_true') 20740c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi 20750c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi self.main_program = os.path.basename(sys.argv[0]) 20760c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi 20770c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi def test_single_parent(self): 20780c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi parser = ErrorRaisingArgumentParser(parents=[self.wxyz_parent]) 20790c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi self.assertEqual(parser.parse_args('-y 1 2 --w 3'.split()), 20800c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi NS(w='3', y='1', z='2')) 20810c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi 20820c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi def test_single_parent_mutex(self): 20830c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi self._test_mutex_ab(self.ab_mutex_parent.parse_args) 20840c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi parser = ErrorRaisingArgumentParser(parents=[self.ab_mutex_parent]) 20850c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi self._test_mutex_ab(parser.parse_args) 20860c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi 20870c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi def test_single_granparent_mutex(self): 20880c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi parents = [self.ab_mutex_parent] 20890c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi parser = ErrorRaisingArgumentParser(add_help=False, parents=parents) 20900c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi parser = ErrorRaisingArgumentParser(parents=[parser]) 20910c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi self._test_mutex_ab(parser.parse_args) 20920c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi 20930c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi def _test_mutex_ab(self, parse_args): 20940c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi self.assertEqual(parse_args([]), NS(a=False, b=False)) 20950c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi self.assertEqual(parse_args(['-a']), NS(a=True, b=False)) 20960c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi self.assertEqual(parse_args(['-b']), NS(a=False, b=True)) 20970c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi self.assertArgumentParserError(parse_args, ['-a', '-b']) 20980c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi self.assertArgumentParserError(parse_args, ['-b', '-a']) 20990c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi self.assertArgumentParserError(parse_args, ['-c']) 21000c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi self.assertArgumentParserError(parse_args, ['-a', '-c']) 21010c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi self.assertArgumentParserError(parse_args, ['-b', '-c']) 21020c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi 21030c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi def test_multiple_parents(self): 21040c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi parents = [self.abcd_parent, self.wxyz_parent] 21050c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi parser = ErrorRaisingArgumentParser(parents=parents) 21060c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi self.assertEqual(parser.parse_args('--d 1 --w 2 3 4'.split()), 21070c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi NS(a='3', b=None, d='1', w='2', y=None, z='4')) 21080c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi 21090c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi def test_multiple_parents_mutex(self): 21100c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi parents = [self.ab_mutex_parent, self.wxyz_parent] 21110c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi parser = ErrorRaisingArgumentParser(parents=parents) 21120c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi self.assertEqual(parser.parse_args('-a --w 2 3'.split()), 21130c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi NS(a=True, b=False, w='2', y=None, z='3')) 21140c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi self.assertArgumentParserError( 21150c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi parser.parse_args, '-a --w 2 3 -b'.split()) 21160c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi self.assertArgumentParserError( 21170c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi parser.parse_args, '-a -b --w 2 3'.split()) 21180c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi 21190c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi def test_conflicting_parents(self): 21200c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi self.assertRaises( 21210c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi argparse.ArgumentError, 21220c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi argparse.ArgumentParser, 21230c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi parents=[self.w_parent, self.wxyz_parent]) 21240c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi 21250c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi def test_conflicting_parents_mutex(self): 21260c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi self.assertRaises( 21270c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi argparse.ArgumentError, 21280c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi argparse.ArgumentParser, 21290c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi parents=[self.abcd_parent, self.ab_mutex_parent]) 21300c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi 21310c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi def test_same_argument_name_parents(self): 21320c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi parents = [self.wxyz_parent, self.z_parent] 21330c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi parser = ErrorRaisingArgumentParser(parents=parents) 21340c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi self.assertEqual(parser.parse_args('1 2'.split()), 21350c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi NS(w=None, y=None, z='2')) 21360c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi 21370c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi def test_subparser_parents(self): 21380c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi parser = ErrorRaisingArgumentParser() 21390c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi subparsers = parser.add_subparsers() 21400c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi abcde_parser = subparsers.add_parser('bar', parents=[self.abcd_parent]) 21410c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi abcde_parser.add_argument('e') 21420c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi self.assertEqual(parser.parse_args('bar -b 1 --d 2 3 4'.split()), 21430c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi NS(a='3', b='1', d='2', e='4')) 21440c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi 21450c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi def test_subparser_parents_mutex(self): 21460c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi parser = ErrorRaisingArgumentParser() 21470c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi subparsers = parser.add_subparsers() 21480c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi parents = [self.ab_mutex_parent] 21490c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi abc_parser = subparsers.add_parser('foo', parents=parents) 21500c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi c_group = abc_parser.add_argument_group('c_group') 21510c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi c_group.add_argument('c') 21520c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi parents = [self.wxyz_parent, self.ab_mutex_parent] 21530c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi wxyzabe_parser = subparsers.add_parser('bar', parents=parents) 21540c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi wxyzabe_parser.add_argument('e') 21550c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi self.assertEqual(parser.parse_args('foo -a 4'.split()), 21560c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi NS(a=True, b=False, c='4')) 21570c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi self.assertEqual(parser.parse_args('bar -b --w 2 3 4'.split()), 21580c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi NS(a=False, b=True, w='2', y=None, z='3', e='4')) 21590c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi self.assertArgumentParserError( 21600c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi parser.parse_args, 'foo -a -b 4'.split()) 21610c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi self.assertArgumentParserError( 21620c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi parser.parse_args, 'bar -b -a 4'.split()) 21630c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi 21640c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi def test_parent_help(self): 21650c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi parents = [self.abcd_parent, self.wxyz_parent] 21660c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi parser = ErrorRaisingArgumentParser(parents=parents) 21670c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi parser_help = parser.format_help() 21680c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi progname = self.main_program 21690c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi self.assertEqual(parser_help, textwrap.dedent('''\ 21700c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi usage: {}{}[-h] [-b B] [--d D] [--w W] [-y Y] a z 21710c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi 21720c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi positional arguments: 21730c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi a 21740c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi z 21750c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi 21760c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi optional arguments: 21770c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi -h, --help show this help message and exit 21780c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi -b B 21790c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi --w W 21800c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi 21810c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi c: 21820c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi --d D 21830c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi 21840c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi x: 21850c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi -y Y 21860c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi '''.format(progname, ' ' if progname else '' ))) 21870c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi 21880c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi def test_groups_parents(self): 21890c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi parent = ErrorRaisingArgumentParser(add_help=False) 21900c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi g = parent.add_argument_group(title='g', description='gd') 21910c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi g.add_argument('-w') 21920c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi g.add_argument('-x') 21930c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi m = parent.add_mutually_exclusive_group() 21940c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi m.add_argument('-y') 21950c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi m.add_argument('-z') 21960c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi parser = ErrorRaisingArgumentParser(parents=[parent]) 21970c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi 21980c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi self.assertRaises(ArgumentParserError, parser.parse_args, 21990c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi ['-y', 'Y', '-z', 'Z']) 22000c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi 22010c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi parser_help = parser.format_help() 22020c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi progname = self.main_program 22030c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi self.assertEqual(parser_help, textwrap.dedent('''\ 22040c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi usage: {}{}[-h] [-w W] [-x X] [-y Y | -z Z] 22050c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi 22060c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi optional arguments: 22070c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi -h, --help show this help message and exit 22080c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi -y Y 22090c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi -z Z 22100c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi 22110c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi g: 22120c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi gd 22130c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi 22140c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi -w W 22150c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi -x X 22160c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi '''.format(progname, ' ' if progname else '' ))) 22170c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi 22180c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi# ============================== 22190c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi# Mutually exclusive group tests 22200c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi# ============================== 22210c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi 22220c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yiclass TestMutuallyExclusiveGroupErrors(TestCase): 22230c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi 22240c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi def test_invalid_add_argument_group(self): 22250c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi parser = ErrorRaisingArgumentParser() 22260c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi raises = self.assertRaises 22270c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi raises(TypeError, parser.add_mutually_exclusive_group, title='foo') 22280c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi 22290c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi def test_invalid_add_argument(self): 22300c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi parser = ErrorRaisingArgumentParser() 22310c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi group = parser.add_mutually_exclusive_group() 22320c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi add_argument = group.add_argument 22330c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi raises = self.assertRaises 22340c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi raises(ValueError, add_argument, '--foo', required=True) 22350c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi raises(ValueError, add_argument, 'bar') 22360c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi raises(ValueError, add_argument, 'bar', nargs='+') 22370c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi raises(ValueError, add_argument, 'bar', nargs=1) 22380c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi raises(ValueError, add_argument, 'bar', nargs=argparse.PARSER) 22390c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi 22400c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi def test_help(self): 22410c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi parser = ErrorRaisingArgumentParser(prog='PROG') 22420c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi group1 = parser.add_mutually_exclusive_group() 22430c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi group1.add_argument('--foo', action='store_true') 22440c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi group1.add_argument('--bar', action='store_false') 22450c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi group2 = parser.add_mutually_exclusive_group() 22460c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi group2.add_argument('--soup', action='store_true') 22470c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi group2.add_argument('--nuts', action='store_false') 22480c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi expected = '''\ 22490c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi usage: PROG [-h] [--foo | --bar] [--soup | --nuts] 22500c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi 22510c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi optional arguments: 22520c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi -h, --help show this help message and exit 22530c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi --foo 22540c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi --bar 22550c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi --soup 22560c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi --nuts 22570c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi ''' 22580c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi self.assertEqual(parser.format_help(), textwrap.dedent(expected)) 22590c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi 22600c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yiclass MEMixin(object): 22610c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi 22620c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi def test_failures_when_not_required(self): 22630c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi parse_args = self.get_parser(required=False).parse_args 22640c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi error = ArgumentParserError 22650c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi for args_string in self.failures: 22660c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi self.assertRaises(error, parse_args, args_string.split()) 22670c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi 22680c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi def test_failures_when_required(self): 22690c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi parse_args = self.get_parser(required=True).parse_args 22700c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi error = ArgumentParserError 22710c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi for args_string in self.failures + ['']: 22720c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi self.assertRaises(error, parse_args, args_string.split()) 22730c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi 22740c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi def test_successes_when_not_required(self): 22750c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi parse_args = self.get_parser(required=False).parse_args 22760c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi successes = self.successes + self.successes_when_not_required 22770c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi for args_string, expected_ns in successes: 22780c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi actual_ns = parse_args(args_string.split()) 22790c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi self.assertEqual(actual_ns, expected_ns) 22800c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi 22810c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi def test_successes_when_required(self): 22820c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi parse_args = self.get_parser(required=True).parse_args 22830c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi for args_string, expected_ns in self.successes: 22840c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi actual_ns = parse_args(args_string.split()) 22850c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi self.assertEqual(actual_ns, expected_ns) 22860c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi 22870c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi def test_usage_when_not_required(self): 22880c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi format_usage = self.get_parser(required=False).format_usage 22890c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi expected_usage = self.usage_when_not_required 22900c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi self.assertEqual(format_usage(), textwrap.dedent(expected_usage)) 22910c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi 22920c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi def test_usage_when_required(self): 22930c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi format_usage = self.get_parser(required=True).format_usage 22940c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi expected_usage = self.usage_when_required 22950c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi self.assertEqual(format_usage(), textwrap.dedent(expected_usage)) 22960c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi 22970c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi def test_help_when_not_required(self): 22980c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi format_help = self.get_parser(required=False).format_help 22990c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi help = self.usage_when_not_required + self.help 23000c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi self.assertEqual(format_help(), textwrap.dedent(help)) 23010c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi 23020c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi def test_help_when_required(self): 23030c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi format_help = self.get_parser(required=True).format_help 23040c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi help = self.usage_when_required + self.help 23050c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi self.assertEqual(format_help(), textwrap.dedent(help)) 23060c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi 23070c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi 23080c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yiclass TestMutuallyExclusiveSimple(MEMixin, TestCase): 23090c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi 23100c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi def get_parser(self, required=None): 23110c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi parser = ErrorRaisingArgumentParser(prog='PROG') 23120c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi group = parser.add_mutually_exclusive_group(required=required) 23130c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi group.add_argument('--bar', help='bar help') 23140c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi group.add_argument('--baz', nargs='?', const='Z', help='baz help') 23150c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi return parser 23160c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi 23170c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi failures = ['--bar X --baz Y', '--bar X --baz'] 23180c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi successes = [ 23190c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi ('--bar X', NS(bar='X', baz=None)), 23200c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi ('--bar X --bar Z', NS(bar='Z', baz=None)), 23210c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi ('--baz Y', NS(bar=None, baz='Y')), 23220c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi ('--baz', NS(bar=None, baz='Z')), 23230c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi ] 23240c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi successes_when_not_required = [ 23250c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi ('', NS(bar=None, baz=None)), 23260c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi ] 23270c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi 23280c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi usage_when_not_required = '''\ 23290c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi usage: PROG [-h] [--bar BAR | --baz [BAZ]] 23300c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi ''' 23310c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi usage_when_required = '''\ 23320c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi usage: PROG [-h] (--bar BAR | --baz [BAZ]) 23330c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi ''' 23340c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi help = '''\ 23350c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi 23360c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi optional arguments: 23370c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi -h, --help show this help message and exit 23380c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi --bar BAR bar help 23390c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi --baz [BAZ] baz help 23400c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi ''' 23410c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi 23420c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi 23430c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yiclass TestMutuallyExclusiveLong(MEMixin, TestCase): 23440c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi 23450c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi def get_parser(self, required=None): 23460c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi parser = ErrorRaisingArgumentParser(prog='PROG') 23470c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi parser.add_argument('--abcde', help='abcde help') 23480c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi parser.add_argument('--fghij', help='fghij help') 23490c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi group = parser.add_mutually_exclusive_group(required=required) 23500c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi group.add_argument('--klmno', help='klmno help') 23510c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi group.add_argument('--pqrst', help='pqrst help') 23520c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi return parser 23530c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi 23540c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi failures = ['--klmno X --pqrst Y'] 23550c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi successes = [ 23560c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi ('--klmno X', NS(abcde=None, fghij=None, klmno='X', pqrst=None)), 23570c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi ('--abcde Y --klmno X', 23580c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi NS(abcde='Y', fghij=None, klmno='X', pqrst=None)), 23590c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi ('--pqrst X', NS(abcde=None, fghij=None, klmno=None, pqrst='X')), 23600c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi ('--pqrst X --fghij Y', 23610c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi NS(abcde=None, fghij='Y', klmno=None, pqrst='X')), 23620c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi ] 23630c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi successes_when_not_required = [ 23640c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi ('', NS(abcde=None, fghij=None, klmno=None, pqrst=None)), 23650c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi ] 23660c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi 23670c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi usage_when_not_required = '''\ 23680c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi usage: PROG [-h] [--abcde ABCDE] [--fghij FGHIJ] 23690c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi [--klmno KLMNO | --pqrst PQRST] 23700c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi ''' 23710c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi usage_when_required = '''\ 23720c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi usage: PROG [-h] [--abcde ABCDE] [--fghij FGHIJ] 23730c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi (--klmno KLMNO | --pqrst PQRST) 23740c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi ''' 23750c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi help = '''\ 23760c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi 23770c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi optional arguments: 23780c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi -h, --help show this help message and exit 23790c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi --abcde ABCDE abcde help 23800c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi --fghij FGHIJ fghij help 23810c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi --klmno KLMNO klmno help 23820c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi --pqrst PQRST pqrst help 23830c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi ''' 23840c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi 23850c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi 23860c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yiclass TestMutuallyExclusiveFirstSuppressed(MEMixin, TestCase): 23870c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi 23880c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi def get_parser(self, required): 23890c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi parser = ErrorRaisingArgumentParser(prog='PROG') 23900c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi group = parser.add_mutually_exclusive_group(required=required) 23910c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi group.add_argument('-x', help=argparse.SUPPRESS) 23920c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi group.add_argument('-y', action='store_false', help='y help') 23930c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi return parser 23940c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi 23950c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi failures = ['-x X -y'] 23960c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi successes = [ 23970c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi ('-x X', NS(x='X', y=True)), 23980c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi ('-x X -x Y', NS(x='Y', y=True)), 23990c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi ('-y', NS(x=None, y=False)), 24000c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi ] 24010c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi successes_when_not_required = [ 24020c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi ('', NS(x=None, y=True)), 24030c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi ] 24040c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi 24050c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi usage_when_not_required = '''\ 24060c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi usage: PROG [-h] [-y] 24070c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi ''' 24080c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi usage_when_required = '''\ 24090c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi usage: PROG [-h] -y 24100c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi ''' 24110c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi help = '''\ 24120c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi 24130c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi optional arguments: 24140c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi -h, --help show this help message and exit 24150c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi -y y help 24160c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi ''' 24170c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi 24180c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi 24190c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yiclass TestMutuallyExclusiveManySuppressed(MEMixin, TestCase): 24200c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi 24210c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi def get_parser(self, required): 24220c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi parser = ErrorRaisingArgumentParser(prog='PROG') 24230c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi group = parser.add_mutually_exclusive_group(required=required) 24240c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi add = group.add_argument 24250c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi add('--spam', action='store_true', help=argparse.SUPPRESS) 24260c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi add('--badger', action='store_false', help=argparse.SUPPRESS) 24270c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi add('--bladder', help=argparse.SUPPRESS) 24280c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi return parser 24290c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi 24300c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi failures = [ 24310c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi '--spam --badger', 24320c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi '--badger --bladder B', 24330c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi '--bladder B --spam', 24340c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi ] 24350c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi successes = [ 24360c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi ('--spam', NS(spam=True, badger=True, bladder=None)), 24370c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi ('--badger', NS(spam=False, badger=False, bladder=None)), 24380c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi ('--bladder B', NS(spam=False, badger=True, bladder='B')), 24390c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi ('--spam --spam', NS(spam=True, badger=True, bladder=None)), 24400c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi ] 24410c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi successes_when_not_required = [ 24420c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi ('', NS(spam=False, badger=True, bladder=None)), 24430c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi ] 24440c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi 24450c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi usage_when_required = usage_when_not_required = '''\ 24460c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi usage: PROG [-h] 24470c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi ''' 24480c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi help = '''\ 24490c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi 24500c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi optional arguments: 24510c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi -h, --help show this help message and exit 24520c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi ''' 24530c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi 24540c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi 24550c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yiclass TestMutuallyExclusiveOptionalAndPositional(MEMixin, TestCase): 24560c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi 24570c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi def get_parser(self, required): 24580c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi parser = ErrorRaisingArgumentParser(prog='PROG') 24590c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi group = parser.add_mutually_exclusive_group(required=required) 24600c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi group.add_argument('--foo', action='store_true', help='FOO') 24610c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi group.add_argument('--spam', help='SPAM') 24620c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi group.add_argument('badger', nargs='*', default='X', help='BADGER') 24630c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi return parser 24640c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi 24650c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi failures = [ 24660c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi '--foo --spam S', 24670c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi '--spam S X', 24680c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi 'X --foo', 24690c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi 'X Y Z --spam S', 24700c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi '--foo X Y', 24710c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi ] 24720c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi successes = [ 24730c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi ('--foo', NS(foo=True, spam=None, badger='X')), 24740c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi ('--spam S', NS(foo=False, spam='S', badger='X')), 24750c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi ('X', NS(foo=False, spam=None, badger=['X'])), 24760c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi ('X Y Z', NS(foo=False, spam=None, badger=['X', 'Y', 'Z'])), 24770c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi ] 24780c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi successes_when_not_required = [ 24790c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi ('', NS(foo=False, spam=None, badger='X')), 24800c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi ] 24810c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi 24820c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi usage_when_not_required = '''\ 24830c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi usage: PROG [-h] [--foo | --spam SPAM | badger [badger ...]] 24840c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi ''' 24850c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi usage_when_required = '''\ 24860c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi usage: PROG [-h] (--foo | --spam SPAM | badger [badger ...]) 24870c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi ''' 24880c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi help = '''\ 24890c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi 24900c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi positional arguments: 24910c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi badger BADGER 24920c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi 24930c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi optional arguments: 24940c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi -h, --help show this help message and exit 24950c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi --foo FOO 24960c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi --spam SPAM SPAM 24970c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi ''' 24980c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi 24990c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi 25000c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yiclass TestMutuallyExclusiveOptionalsMixed(MEMixin, TestCase): 25010c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi 25020c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi def get_parser(self, required): 25030c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi parser = ErrorRaisingArgumentParser(prog='PROG') 25040c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi parser.add_argument('-x', action='store_true', help='x help') 25050c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi group = parser.add_mutually_exclusive_group(required=required) 25060c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi group.add_argument('-a', action='store_true', help='a help') 25070c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi group.add_argument('-b', action='store_true', help='b help') 25080c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi parser.add_argument('-y', action='store_true', help='y help') 25090c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi group.add_argument('-c', action='store_true', help='c help') 25100c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi return parser 25110c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi 25120c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi failures = ['-a -b', '-b -c', '-a -c', '-a -b -c'] 25130c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi successes = [ 25140c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi ('-a', NS(a=True, b=False, c=False, x=False, y=False)), 25150c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi ('-b', NS(a=False, b=True, c=False, x=False, y=False)), 25160c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi ('-c', NS(a=False, b=False, c=True, x=False, y=False)), 25170c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi ('-a -x', NS(a=True, b=False, c=False, x=True, y=False)), 25180c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi ('-y -b', NS(a=False, b=True, c=False, x=False, y=True)), 25190c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi ('-x -y -c', NS(a=False, b=False, c=True, x=True, y=True)), 25200c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi ] 25210c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi successes_when_not_required = [ 25220c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi ('', NS(a=False, b=False, c=False, x=False, y=False)), 25230c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi ('-x', NS(a=False, b=False, c=False, x=True, y=False)), 25240c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi ('-y', NS(a=False, b=False, c=False, x=False, y=True)), 25250c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi ] 25260c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi 25270c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi usage_when_required = usage_when_not_required = '''\ 25280c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi usage: PROG [-h] [-x] [-a] [-b] [-y] [-c] 25290c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi ''' 25300c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi help = '''\ 25310c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi 25320c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi optional arguments: 25330c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi -h, --help show this help message and exit 25340c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi -x x help 25350c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi -a a help 25360c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi -b b help 25370c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi -y y help 25380c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi -c c help 25390c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi ''' 25400c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi 25410c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi 25420c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yiclass TestMutuallyExclusiveInGroup(MEMixin, TestCase): 25430c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi 25440c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi def get_parser(self, required=None): 25450c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi parser = ErrorRaisingArgumentParser(prog='PROG') 25460c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi titled_group = parser.add_argument_group( 25470c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi title='Titled group', description='Group description') 25480c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi mutex_group = \ 25490c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi titled_group.add_mutually_exclusive_group(required=required) 25500c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi mutex_group.add_argument('--bar', help='bar help') 25510c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi mutex_group.add_argument('--baz', help='baz help') 25520c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi return parser 25530c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi 25540c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi failures = ['--bar X --baz Y', '--baz X --bar Y'] 25550c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi successes = [ 25560c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi ('--bar X', NS(bar='X', baz=None)), 25570c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi ('--baz Y', NS(bar=None, baz='Y')), 25580c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi ] 25590c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi successes_when_not_required = [ 25600c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi ('', NS(bar=None, baz=None)), 25610c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi ] 25620c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi 25630c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi usage_when_not_required = '''\ 25640c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi usage: PROG [-h] [--bar BAR | --baz BAZ] 25650c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi ''' 25660c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi usage_when_required = '''\ 25670c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi usage: PROG [-h] (--bar BAR | --baz BAZ) 25680c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi ''' 25690c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi help = '''\ 25700c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi 25710c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi optional arguments: 25720c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi -h, --help show this help message and exit 25730c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi 25740c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi Titled group: 25750c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi Group description 25760c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi 25770c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi --bar BAR bar help 25780c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi --baz BAZ baz help 25790c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi ''' 25800c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi 25810c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi 25820c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yiclass TestMutuallyExclusiveOptionalsAndPositionalsMixed(MEMixin, TestCase): 25830c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi 25840c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi def get_parser(self, required): 25850c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi parser = ErrorRaisingArgumentParser(prog='PROG') 25860c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi parser.add_argument('x', help='x help') 25870c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi parser.add_argument('-y', action='store_true', help='y help') 25880c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi group = parser.add_mutually_exclusive_group(required=required) 25890c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi group.add_argument('a', nargs='?', help='a help') 25900c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi group.add_argument('-b', action='store_true', help='b help') 25910c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi group.add_argument('-c', action='store_true', help='c help') 25920c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi return parser 25930c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi 25940c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi failures = ['X A -b', '-b -c', '-c X A'] 25950c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi successes = [ 25960c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi ('X A', NS(a='A', b=False, c=False, x='X', y=False)), 25970c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi ('X -b', NS(a=None, b=True, c=False, x='X', y=False)), 25980c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi ('X -c', NS(a=None, b=False, c=True, x='X', y=False)), 25990c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi ('X A -y', NS(a='A', b=False, c=False, x='X', y=True)), 26000c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi ('X -y -b', NS(a=None, b=True, c=False, x='X', y=True)), 26010c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi ] 26020c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi successes_when_not_required = [ 26030c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi ('X', NS(a=None, b=False, c=False, x='X', y=False)), 26040c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi ('X -y', NS(a=None, b=False, c=False, x='X', y=True)), 26050c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi ] 26060c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi 26070c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi usage_when_required = usage_when_not_required = '''\ 26080c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi usage: PROG [-h] [-y] [-b] [-c] x [a] 26090c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi ''' 26100c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi help = '''\ 26110c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi 26120c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi positional arguments: 26130c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi x x help 26140c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi a a help 26150c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi 26160c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi optional arguments: 26170c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi -h, --help show this help message and exit 26180c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi -y y help 26190c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi -b b help 26200c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi -c c help 26210c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi ''' 26220c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi 26230c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi# ================================================= 26240c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi# Mutually exclusive group in parent parser tests 26250c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi# ================================================= 26260c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi 26270c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yiclass MEPBase(object): 26280c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi 26290c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi def get_parser(self, required=None): 26300c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi parent = super(MEPBase, self).get_parser(required=required) 26310c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi parser = ErrorRaisingArgumentParser( 26320c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi prog=parent.prog, add_help=False, parents=[parent]) 26330c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi return parser 26340c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi 26350c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi 26360c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yiclass TestMutuallyExclusiveGroupErrorsParent( 26370c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi MEPBase, TestMutuallyExclusiveGroupErrors): 26380c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi pass 26390c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi 26400c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi 26410c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yiclass TestMutuallyExclusiveSimpleParent( 26420c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi MEPBase, TestMutuallyExclusiveSimple): 26430c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi pass 26440c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi 26450c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi 26460c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yiclass TestMutuallyExclusiveLongParent( 26470c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi MEPBase, TestMutuallyExclusiveLong): 26480c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi pass 26490c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi 26500c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi 26510c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yiclass TestMutuallyExclusiveFirstSuppressedParent( 26520c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi MEPBase, TestMutuallyExclusiveFirstSuppressed): 26530c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi pass 26540c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi 26550c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi 26560c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yiclass TestMutuallyExclusiveManySuppressedParent( 26570c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi MEPBase, TestMutuallyExclusiveManySuppressed): 26580c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi pass 26590c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi 26600c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi 26610c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yiclass TestMutuallyExclusiveOptionalAndPositionalParent( 26620c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi MEPBase, TestMutuallyExclusiveOptionalAndPositional): 26630c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi pass 26640c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi 26650c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi 26660c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yiclass TestMutuallyExclusiveOptionalsMixedParent( 26670c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi MEPBase, TestMutuallyExclusiveOptionalsMixed): 26680c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi pass 26690c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi 26700c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi 26710c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yiclass TestMutuallyExclusiveOptionalsAndPositionalsMixedParent( 26720c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi MEPBase, TestMutuallyExclusiveOptionalsAndPositionalsMixed): 26730c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi pass 26740c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi 26750c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi# ================= 26760c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi# Set default tests 26770c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi# ================= 26780c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi 26790c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yiclass TestSetDefaults(TestCase): 26800c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi 26810c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi def test_set_defaults_no_args(self): 26820c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi parser = ErrorRaisingArgumentParser() 26830c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi parser.set_defaults(x='foo') 26840c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi parser.set_defaults(y='bar', z=1) 26850c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi self.assertEqual(NS(x='foo', y='bar', z=1), 26860c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi parser.parse_args([])) 26870c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi self.assertEqual(NS(x='foo', y='bar', z=1), 26880c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi parser.parse_args([], NS())) 26890c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi self.assertEqual(NS(x='baz', y='bar', z=1), 26900c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi parser.parse_args([], NS(x='baz'))) 26910c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi self.assertEqual(NS(x='baz', y='bar', z=2), 26920c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi parser.parse_args([], NS(x='baz', z=2))) 26930c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi 26940c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi def test_set_defaults_with_args(self): 26950c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi parser = ErrorRaisingArgumentParser() 26960c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi parser.set_defaults(x='foo', y='bar') 26970c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi parser.add_argument('-x', default='xfoox') 26980c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi self.assertEqual(NS(x='xfoox', y='bar'), 26990c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi parser.parse_args([])) 27000c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi self.assertEqual(NS(x='xfoox', y='bar'), 27010c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi parser.parse_args([], NS())) 27020c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi self.assertEqual(NS(x='baz', y='bar'), 27030c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi parser.parse_args([], NS(x='baz'))) 27040c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi self.assertEqual(NS(x='1', y='bar'), 27050c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi parser.parse_args('-x 1'.split())) 27060c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi self.assertEqual(NS(x='1', y='bar'), 27070c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi parser.parse_args('-x 1'.split(), NS())) 27080c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi self.assertEqual(NS(x='1', y='bar'), 27090c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi parser.parse_args('-x 1'.split(), NS(x='baz'))) 27100c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi 27110c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi def test_set_defaults_subparsers(self): 27120c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi parser = ErrorRaisingArgumentParser() 27130c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi parser.set_defaults(x='foo') 27140c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi subparsers = parser.add_subparsers() 27150c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi parser_a = subparsers.add_parser('a') 27160c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi parser_a.set_defaults(y='bar') 27170c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi self.assertEqual(NS(x='foo', y='bar'), 27180c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi parser.parse_args('a'.split())) 27190c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi 27200c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi def test_set_defaults_parents(self): 27210c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi parent = ErrorRaisingArgumentParser(add_help=False) 27220c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi parent.set_defaults(x='foo') 27230c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi parser = ErrorRaisingArgumentParser(parents=[parent]) 27240c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi self.assertEqual(NS(x='foo'), parser.parse_args([])) 27250c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi 27260c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi def test_set_defaults_same_as_add_argument(self): 27270c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi parser = ErrorRaisingArgumentParser() 27280c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi parser.set_defaults(w='W', x='X', y='Y', z='Z') 27290c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi parser.add_argument('-w') 27300c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi parser.add_argument('-x', default='XX') 27310c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi parser.add_argument('y', nargs='?') 27320c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi parser.add_argument('z', nargs='?', default='ZZ') 27330c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi 27340c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi # defaults set previously 27350c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi self.assertEqual(NS(w='W', x='XX', y='Y', z='ZZ'), 27360c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi parser.parse_args([])) 27370c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi 27380c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi # reset defaults 27390c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi parser.set_defaults(w='WW', x='X', y='YY', z='Z') 27400c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi self.assertEqual(NS(w='WW', x='X', y='YY', z='Z'), 27410c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi parser.parse_args([])) 27420c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi 27430c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi def test_set_defaults_same_as_add_argument_group(self): 27440c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi parser = ErrorRaisingArgumentParser() 27450c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi parser.set_defaults(w='W', x='X', y='Y', z='Z') 27460c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi group = parser.add_argument_group('foo') 27470c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi group.add_argument('-w') 27480c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi group.add_argument('-x', default='XX') 27490c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi group.add_argument('y', nargs='?') 27500c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi group.add_argument('z', nargs='?', default='ZZ') 27510c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi 27520c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi 27530c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi # defaults set previously 27540c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi self.assertEqual(NS(w='W', x='XX', y='Y', z='ZZ'), 27550c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi parser.parse_args([])) 27560c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi 27570c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi # reset defaults 27580c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi parser.set_defaults(w='WW', x='X', y='YY', z='Z') 27590c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi self.assertEqual(NS(w='WW', x='X', y='YY', z='Z'), 27600c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi parser.parse_args([])) 27610c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi 27620c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi# ================= 27630c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi# Get default tests 27640c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi# ================= 27650c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi 27660c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yiclass TestGetDefault(TestCase): 27670c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi 27680c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi def test_get_default(self): 27690c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi parser = ErrorRaisingArgumentParser() 27700c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi self.assertEqual(None, parser.get_default("foo")) 27710c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi self.assertEqual(None, parser.get_default("bar")) 27720c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi 27730c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi parser.add_argument("--foo") 27740c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi self.assertEqual(None, parser.get_default("foo")) 27750c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi self.assertEqual(None, parser.get_default("bar")) 27760c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi 27770c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi parser.add_argument("--bar", type=int, default=42) 27780c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi self.assertEqual(None, parser.get_default("foo")) 27790c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi self.assertEqual(42, parser.get_default("bar")) 27800c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi 27810c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi parser.set_defaults(foo="badger") 27820c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi self.assertEqual("badger", parser.get_default("foo")) 27830c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi self.assertEqual(42, parser.get_default("bar")) 27840c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi 27850c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi# ========================== 27860c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi# Namespace 'contains' tests 27870c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi# ========================== 27880c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi 27890c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yiclass TestNamespaceContainsSimple(TestCase): 27900c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi 27910c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi def test_empty(self): 27920c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi ns = argparse.Namespace() 27930c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi self.assertEqual('' in ns, False) 27940c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi self.assertEqual('' not in ns, True) 27950c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi self.assertEqual('x' in ns, False) 27960c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi 27970c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi def test_non_empty(self): 27980c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi ns = argparse.Namespace(x=1, y=2) 27990c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi self.assertEqual('x' in ns, True) 28000c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi self.assertEqual('x' not in ns, False) 28010c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi self.assertEqual('y' in ns, True) 28020c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi self.assertEqual('' in ns, False) 28030c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi self.assertEqual('xx' in ns, False) 28040c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi self.assertEqual('z' in ns, False) 28050c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi 28060c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi# ===================== 28070c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi# Help formatting tests 28080c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi# ===================== 28090c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi 28100c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yiclass TestHelpFormattingMetaclass(type): 28110c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi 28120c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi def __init__(cls, name, bases, bodydict): 28130c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi if name == 'HelpTestCase': 28140c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi return 28150c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi 28160c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi class AddTests(object): 28170c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi 28180c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi def __init__(self, test_class, func_suffix, std_name): 28190c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi self.func_suffix = func_suffix 28200c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi self.std_name = std_name 28210c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi 28220c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi for test_func in [self.test_format, 28230c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi self.test_print, 28240c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi self.test_print_file]: 28250c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi test_name = '%s_%s' % (test_func.__name__, func_suffix) 28260c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi 28270c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi def test_wrapper(self, test_func=test_func): 28280c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi test_func(self) 28290c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi try: 28300c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi test_wrapper.__name__ = test_name 28310c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi except TypeError: 28320c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi pass 28330c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi setattr(test_class, test_name, test_wrapper) 28340c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi 28350c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi def _get_parser(self, tester): 28360c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi parser = argparse.ArgumentParser( 28370c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi *tester.parser_signature.args, 28380c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi **tester.parser_signature.kwargs) 28390c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi for argument_sig in getattr(tester, 'argument_signatures', []): 28400c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi parser.add_argument(*argument_sig.args, 28410c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi **argument_sig.kwargs) 28420c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi group_sigs = getattr(tester, 'argument_group_signatures', []) 28430c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi for group_sig, argument_sigs in group_sigs: 28440c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi group = parser.add_argument_group(*group_sig.args, 28450c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi **group_sig.kwargs) 28460c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi for argument_sig in argument_sigs: 28470c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi group.add_argument(*argument_sig.args, 28480c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi **argument_sig.kwargs) 28490c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi subparsers_sigs = getattr(tester, 'subparsers_signatures', []) 28500c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi if subparsers_sigs: 28510c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi subparsers = parser.add_subparsers() 28520c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi for subparser_sig in subparsers_sigs: 28530c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi subparsers.add_parser(*subparser_sig.args, 28540c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi **subparser_sig.kwargs) 28550c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi return parser 28560c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi 28570c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi def _test(self, tester, parser_text): 28580c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi expected_text = getattr(tester, self.func_suffix) 28590c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi expected_text = textwrap.dedent(expected_text) 28600c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi if expected_text != parser_text: 28610c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi print(repr(expected_text)) 28620c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi print(repr(parser_text)) 28630c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi for char1, char2 in zip(expected_text, parser_text): 28640c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi if char1 != char2: 28650c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi print('first diff: %r %r' % (char1, char2)) 28660c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi break 28670c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi tester.assertEqual(expected_text, parser_text) 28680c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi 28690c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi def test_format(self, tester): 28700c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi parser = self._get_parser(tester) 28710c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi format = getattr(parser, 'format_%s' % self.func_suffix) 28720c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi self._test(tester, format()) 28730c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi 28740c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi def test_print(self, tester): 28750c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi parser = self._get_parser(tester) 28760c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi print_ = getattr(parser, 'print_%s' % self.func_suffix) 28770c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi old_stream = getattr(sys, self.std_name) 28780c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi setattr(sys, self.std_name, StdIOBuffer()) 28790c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi try: 28800c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi print_() 28810c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi parser_text = getattr(sys, self.std_name).getvalue() 28820c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi finally: 28830c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi setattr(sys, self.std_name, old_stream) 28840c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi self._test(tester, parser_text) 28850c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi 28860c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi def test_print_file(self, tester): 28870c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi parser = self._get_parser(tester) 28880c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi print_ = getattr(parser, 'print_%s' % self.func_suffix) 28890c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi sfile = StdIOBuffer() 28900c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi print_(sfile) 28910c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi parser_text = sfile.getvalue() 28920c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi self._test(tester, parser_text) 28930c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi 28940c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi # add tests for {format,print}_{usage,help,version} 28950c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi for func_suffix, std_name in [('usage', 'stdout'), 28960c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi ('help', 'stdout'), 28970c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi ('version', 'stderr')]: 28980c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi AddTests(cls, func_suffix, std_name) 28990c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi 29000c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yibases = TestCase, 29010c5958b1636c47ed7c284f859c8e805fd06a0e6Bill YiHelpTestCase = TestHelpFormattingMetaclass('HelpTestCase', bases, {}) 29020c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi 29030c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi 29040c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yiclass TestHelpBiggerOptionals(HelpTestCase): 29050c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi """Make sure that argument help aligns when options are longer""" 29060c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi 29070c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi parser_signature = Sig(prog='PROG', description='DESCRIPTION', 29080c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi epilog='EPILOG', version='0.1') 29090c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi argument_signatures = [ 29100c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi Sig('-x', action='store_true', help='X HELP'), 29110c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi Sig('--y', help='Y HELP'), 29120c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi Sig('foo', help='FOO HELP'), 29130c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi Sig('bar', help='BAR HELP'), 29140c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi ] 29150c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi argument_group_signatures = [] 29160c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi usage = '''\ 29170c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi usage: PROG [-h] [-v] [-x] [--y Y] foo bar 29180c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi ''' 29190c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi help = usage + '''\ 29200c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi 29210c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi DESCRIPTION 29220c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi 29230c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi positional arguments: 29240c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi foo FOO HELP 29250c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi bar BAR HELP 29260c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi 29270c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi optional arguments: 29280c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi -h, --help show this help message and exit 29290c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi -v, --version show program's version number and exit 29300c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi -x X HELP 29310c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi --y Y Y HELP 29320c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi 29330c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi EPILOG 29340c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi ''' 29350c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi version = '''\ 29360c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi 0.1 29370c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi ''' 29380c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi 29390c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi 29400c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yiclass TestHelpBiggerOptionalGroups(HelpTestCase): 29410c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi """Make sure that argument help aligns when options are longer""" 29420c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi 29430c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi parser_signature = Sig(prog='PROG', description='DESCRIPTION', 29440c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi epilog='EPILOG', version='0.1') 29450c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi argument_signatures = [ 29460c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi Sig('-x', action='store_true', help='X HELP'), 29470c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi Sig('--y', help='Y HELP'), 29480c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi Sig('foo', help='FOO HELP'), 29490c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi Sig('bar', help='BAR HELP'), 29500c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi ] 29510c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi argument_group_signatures = [ 29520c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi (Sig('GROUP TITLE', description='GROUP DESCRIPTION'), [ 29530c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi Sig('baz', help='BAZ HELP'), 29540c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi Sig('-z', nargs='+', help='Z HELP')]), 29550c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi ] 29560c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi usage = '''\ 29570c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi usage: PROG [-h] [-v] [-x] [--y Y] [-z Z [Z ...]] foo bar baz 29580c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi ''' 29590c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi help = usage + '''\ 29600c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi 29610c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi DESCRIPTION 29620c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi 29630c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi positional arguments: 29640c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi foo FOO HELP 29650c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi bar BAR HELP 29660c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi 29670c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi optional arguments: 29680c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi -h, --help show this help message and exit 29690c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi -v, --version show program's version number and exit 29700c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi -x X HELP 29710c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi --y Y Y HELP 29720c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi 29730c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi GROUP TITLE: 29740c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi GROUP DESCRIPTION 29750c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi 29760c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi baz BAZ HELP 29770c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi -z Z [Z ...] Z HELP 29780c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi 29790c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi EPILOG 29800c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi ''' 29810c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi version = '''\ 29820c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi 0.1 29830c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi ''' 29840c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi 29850c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi 29860c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yiclass TestHelpBiggerPositionals(HelpTestCase): 29870c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi """Make sure that help aligns when arguments are longer""" 29880c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi 29890c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi parser_signature = Sig(usage='USAGE', description='DESCRIPTION') 29900c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi argument_signatures = [ 29910c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi Sig('-x', action='store_true', help='X HELP'), 29920c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi Sig('--y', help='Y HELP'), 29930c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi Sig('ekiekiekifekang', help='EKI HELP'), 29940c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi Sig('bar', help='BAR HELP'), 29950c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi ] 29960c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi argument_group_signatures = [] 29970c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi usage = '''\ 29980c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi usage: USAGE 29990c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi ''' 30000c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi help = usage + '''\ 30010c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi 30020c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi DESCRIPTION 30030c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi 30040c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi positional arguments: 30050c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi ekiekiekifekang EKI HELP 30060c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi bar BAR HELP 30070c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi 30080c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi optional arguments: 30090c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi -h, --help show this help message and exit 30100c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi -x X HELP 30110c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi --y Y Y HELP 30120c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi ''' 30130c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi 30140c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi version = '' 30150c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi 30160c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi 30170c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yiclass TestHelpReformatting(HelpTestCase): 30180c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi """Make sure that text after short names starts on the first line""" 30190c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi 30200c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi parser_signature = Sig( 30210c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi prog='PROG', 30220c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi description=' oddly formatted\n' 30230c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi 'description\n' 30240c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi '\n' 30250c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi 'that is so long that it should go onto multiple ' 30260c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi 'lines when wrapped') 30270c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi argument_signatures = [ 30280c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi Sig('-x', metavar='XX', help='oddly\n' 30290c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi ' formatted -x help'), 30300c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi Sig('y', metavar='yyy', help='normal y help'), 30310c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi ] 30320c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi argument_group_signatures = [ 30330c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi (Sig('title', description='\n' 30340c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi ' oddly formatted group\n' 30350c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi '\n' 30360c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi 'description'), 30370c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi [Sig('-a', action='store_true', 30380c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi help=' oddly \n' 30390c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi 'formatted -a help \n' 30400c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi ' again, so long that it should be wrapped over ' 30410c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi 'multiple lines')]), 30420c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi ] 30430c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi usage = '''\ 30440c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi usage: PROG [-h] [-x XX] [-a] yyy 30450c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi ''' 30460c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi help = usage + '''\ 30470c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi 30480c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi oddly formatted description that is so long that it should go onto \ 30490c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yimultiple 30500c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi lines when wrapped 30510c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi 30520c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi positional arguments: 30530c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi yyy normal y help 30540c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi 30550c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi optional arguments: 30560c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi -h, --help show this help message and exit 30570c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi -x XX oddly formatted -x help 30580c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi 30590c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi title: 30600c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi oddly formatted group description 30610c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi 30620c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi -a oddly formatted -a help again, so long that it should \ 30630c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yibe wrapped 30640c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi over multiple lines 30650c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi ''' 30660c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi version = '' 30670c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi 30680c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi 30690c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yiclass TestHelpWrappingShortNames(HelpTestCase): 30700c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi """Make sure that text after short names starts on the first line""" 30710c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi 30720c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi parser_signature = Sig(prog='PROG', description= 'D\nD' * 30) 30730c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi argument_signatures = [ 30740c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi Sig('-x', metavar='XX', help='XHH HX' * 20), 30750c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi Sig('y', metavar='yyy', help='YH YH' * 20), 30760c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi ] 30770c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi argument_group_signatures = [ 30780c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi (Sig('ALPHAS'), [ 30790c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi Sig('-a', action='store_true', help='AHHH HHA' * 10)]), 30800c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi ] 30810c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi usage = '''\ 30820c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi usage: PROG [-h] [-x XX] [-a] yyy 30830c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi ''' 30840c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi help = usage + '''\ 30850c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi 30860c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi D DD DD DD DD DD DD DD DD DD DD DD DD DD DD DD DD DD DD DD DD DD DD \ 30870c5958b1636c47ed7c284f859c8e805fd06a0e6Bill YiDD DD DD 30880c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi DD DD DD DD D 30890c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi 30900c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi positional arguments: 30910c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi yyy YH YHYH YHYH YHYH YHYH YHYH YHYH YHYH YHYH YHYH YHYH \ 30920c5958b1636c47ed7c284f859c8e805fd06a0e6Bill YiYHYH YHYH 30930c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi YHYH YHYH YHYH YHYH YHYH YHYH YHYH YH 30940c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi 30950c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi optional arguments: 30960c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi -h, --help show this help message and exit 30970c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi -x XX XHH HXXHH HXXHH HXXHH HXXHH HXXHH HXXHH HXXHH HXXHH \ 30980c5958b1636c47ed7c284f859c8e805fd06a0e6Bill YiHXXHH HXXHH 30990c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi HXXHH HXXHH HXXHH HXXHH HXXHH HXXHH HXXHH HXXHH HXXHH HX 31000c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi 31010c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi ALPHAS: 31020c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi -a AHHH HHAAHHH HHAAHHH HHAAHHH HHAAHHH HHAAHHH HHAAHHH \ 31030c5958b1636c47ed7c284f859c8e805fd06a0e6Bill YiHHAAHHH 31040c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi HHAAHHH HHAAHHH HHA 31050c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi ''' 31060c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi version = '' 31070c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi 31080c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi 31090c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yiclass TestHelpWrappingLongNames(HelpTestCase): 31100c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi """Make sure that text after long names starts on the next line""" 31110c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi 31120c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi parser_signature = Sig(usage='USAGE', description= 'D D' * 30, 31130c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi version='V V'*30) 31140c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi argument_signatures = [ 31150c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi Sig('-x', metavar='X' * 25, help='XH XH' * 20), 31160c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi Sig('y', metavar='y' * 25, help='YH YH' * 20), 31170c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi ] 31180c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi argument_group_signatures = [ 31190c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi (Sig('ALPHAS'), [ 31200c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi Sig('-a', metavar='A' * 25, help='AH AH' * 20), 31210c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi Sig('z', metavar='z' * 25, help='ZH ZH' * 20)]), 31220c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi ] 31230c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi usage = '''\ 31240c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi usage: USAGE 31250c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi ''' 31260c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi help = usage + '''\ 31270c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi 31280c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi D DD DD DD DD DD DD DD DD DD DD DD DD DD DD DD DD DD DD DD DD DD DD \ 31290c5958b1636c47ed7c284f859c8e805fd06a0e6Bill YiDD DD DD 31300c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi DD DD DD DD D 31310c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi 31320c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi positional arguments: 31330c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi yyyyyyyyyyyyyyyyyyyyyyyyy 31340c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi YH YHYH YHYH YHYH YHYH YHYH YHYH YHYH YHYH \ 31350c5958b1636c47ed7c284f859c8e805fd06a0e6Bill YiYHYH YHYH 31360c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi YHYH YHYH YHYH YHYH YHYH YHYH YHYH YHYH YHYH YH 31370c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi 31380c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi optional arguments: 31390c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi -h, --help show this help message and exit 31400c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi -v, --version show program's version number and exit 31410c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi -x XXXXXXXXXXXXXXXXXXXXXXXXX 31420c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi XH XHXH XHXH XHXH XHXH XHXH XHXH XHXH XHXH \ 31430c5958b1636c47ed7c284f859c8e805fd06a0e6Bill YiXHXH XHXH 31440c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi XHXH XHXH XHXH XHXH XHXH XHXH XHXH XHXH XHXH XH 31450c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi 31460c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi ALPHAS: 31470c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi -a AAAAAAAAAAAAAAAAAAAAAAAAA 31480c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi AH AHAH AHAH AHAH AHAH AHAH AHAH AHAH AHAH \ 31490c5958b1636c47ed7c284f859c8e805fd06a0e6Bill YiAHAH AHAH 31500c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi AHAH AHAH AHAH AHAH AHAH AHAH AHAH AHAH AHAH AH 31510c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi zzzzzzzzzzzzzzzzzzzzzzzzz 31520c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi ZH ZHZH ZHZH ZHZH ZHZH ZHZH ZHZH ZHZH ZHZH \ 31530c5958b1636c47ed7c284f859c8e805fd06a0e6Bill YiZHZH ZHZH 31540c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi ZHZH ZHZH ZHZH ZHZH ZHZH ZHZH ZHZH ZHZH ZHZH ZH 31550c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi ''' 31560c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi version = '''\ 31570c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi V VV VV VV VV VV VV VV VV VV VV VV VV VV VV VV VV VV VV VV VV VV VV \ 31580c5958b1636c47ed7c284f859c8e805fd06a0e6Bill YiVV VV VV 31590c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi VV VV VV VV V 31600c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi ''' 31610c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi 31620c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi 31630c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yiclass TestHelpUsage(HelpTestCase): 31640c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi """Test basic usage messages""" 31650c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi 31660c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi parser_signature = Sig(prog='PROG') 31670c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi argument_signatures = [ 31680c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi Sig('-w', nargs='+', help='w'), 31690c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi Sig('-x', nargs='*', help='x'), 31700c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi Sig('a', help='a'), 31710c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi Sig('b', help='b', nargs=2), 31720c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi Sig('c', help='c', nargs='?'), 31730c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi ] 31740c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi argument_group_signatures = [ 31750c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi (Sig('group'), [ 31760c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi Sig('-y', nargs='?', help='y'), 31770c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi Sig('-z', nargs=3, help='z'), 31780c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi Sig('d', help='d', nargs='*'), 31790c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi Sig('e', help='e', nargs='+'), 31800c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi ]) 31810c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi ] 31820c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi usage = '''\ 31830c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi usage: PROG [-h] [-w W [W ...]] [-x [X [X ...]]] [-y [Y]] [-z Z Z Z] 31840c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi a b b [c] [d [d ...]] e [e ...] 31850c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi ''' 31860c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi help = usage + '''\ 31870c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi 31880c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi positional arguments: 31890c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi a a 31900c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi b b 31910c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi c c 31920c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi 31930c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi optional arguments: 31940c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi -h, --help show this help message and exit 31950c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi -w W [W ...] w 31960c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi -x [X [X ...]] x 31970c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi 31980c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi group: 31990c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi -y [Y] y 32000c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi -z Z Z Z z 32010c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi d d 32020c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi e e 32030c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi ''' 32040c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi version = '' 32050c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi 32060c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi 32070c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yiclass TestHelpOnlyUserGroups(HelpTestCase): 32080c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi """Test basic usage messages""" 32090c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi 32100c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi parser_signature = Sig(prog='PROG', add_help=False) 32110c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi argument_signatures = [] 32120c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi argument_group_signatures = [ 32130c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi (Sig('xxxx'), [ 32140c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi Sig('-x', help='x'), 32150c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi Sig('a', help='a'), 32160c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi ]), 32170c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi (Sig('yyyy'), [ 32180c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi Sig('b', help='b'), 32190c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi Sig('-y', help='y'), 32200c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi ]), 32210c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi ] 32220c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi usage = '''\ 32230c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi usage: PROG [-x X] [-y Y] a b 32240c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi ''' 32250c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi help = usage + '''\ 32260c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi 32270c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi xxxx: 32280c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi -x X x 32290c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi a a 32300c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi 32310c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi yyyy: 32320c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi b b 32330c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi -y Y y 32340c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi ''' 32350c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi version = '' 32360c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi 32370c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi 32380c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yiclass TestHelpUsageLongProg(HelpTestCase): 32390c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi """Test usage messages where the prog is long""" 32400c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi 32410c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi parser_signature = Sig(prog='P' * 60) 32420c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi argument_signatures = [ 32430c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi Sig('-w', metavar='W'), 32440c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi Sig('-x', metavar='X'), 32450c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi Sig('a'), 32460c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi Sig('b'), 32470c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi ] 32480c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi argument_group_signatures = [] 32490c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi usage = '''\ 32500c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi usage: PPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPP 32510c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi [-h] [-w W] [-x X] a b 32520c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi ''' 32530c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi help = usage + '''\ 32540c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi 32550c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi positional arguments: 32560c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi a 32570c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi b 32580c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi 32590c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi optional arguments: 32600c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi -h, --help show this help message and exit 32610c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi -w W 32620c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi -x X 32630c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi ''' 32640c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi version = '' 32650c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi 32660c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi 32670c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yiclass TestHelpUsageLongProgOptionsWrap(HelpTestCase): 32680c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi """Test usage messages where the prog is long and the optionals wrap""" 32690c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi 32700c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi parser_signature = Sig(prog='P' * 60) 32710c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi argument_signatures = [ 32720c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi Sig('-w', metavar='W' * 25), 32730c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi Sig('-x', metavar='X' * 25), 32740c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi Sig('-y', metavar='Y' * 25), 32750c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi Sig('-z', metavar='Z' * 25), 32760c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi Sig('a'), 32770c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi Sig('b'), 32780c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi ] 32790c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi argument_group_signatures = [] 32800c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi usage = '''\ 32810c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi usage: PPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPP 32820c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi [-h] [-w WWWWWWWWWWWWWWWWWWWWWWWWW] \ 32830c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi[-x XXXXXXXXXXXXXXXXXXXXXXXXX] 32840c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi [-y YYYYYYYYYYYYYYYYYYYYYYYYY] [-z ZZZZZZZZZZZZZZZZZZZZZZZZZ] 32850c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi a b 32860c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi ''' 32870c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi help = usage + '''\ 32880c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi 32890c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi positional arguments: 32900c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi a 32910c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi b 32920c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi 32930c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi optional arguments: 32940c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi -h, --help show this help message and exit 32950c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi -w WWWWWWWWWWWWWWWWWWWWWWWWW 32960c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi -x XXXXXXXXXXXXXXXXXXXXXXXXX 32970c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi -y YYYYYYYYYYYYYYYYYYYYYYYYY 32980c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi -z ZZZZZZZZZZZZZZZZZZZZZZZZZ 32990c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi ''' 33000c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi version = '' 33010c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi 33020c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi 33030c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yiclass TestHelpUsageLongProgPositionalsWrap(HelpTestCase): 33040c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi """Test usage messages where the prog is long and the positionals wrap""" 33050c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi 33060c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi parser_signature = Sig(prog='P' * 60, add_help=False) 33070c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi argument_signatures = [ 33080c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi Sig('a' * 25), 33090c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi Sig('b' * 25), 33100c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi Sig('c' * 25), 33110c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi ] 33120c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi argument_group_signatures = [] 33130c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi usage = '''\ 33140c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi usage: PPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPP 33150c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi aaaaaaaaaaaaaaaaaaaaaaaaa bbbbbbbbbbbbbbbbbbbbbbbbb 33160c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi ccccccccccccccccccccccccc 33170c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi ''' 33180c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi help = usage + '''\ 33190c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi 33200c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi positional arguments: 33210c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi aaaaaaaaaaaaaaaaaaaaaaaaa 33220c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi bbbbbbbbbbbbbbbbbbbbbbbbb 33230c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi ccccccccccccccccccccccccc 33240c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi ''' 33250c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi version = '' 33260c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi 33270c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi 33280c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yiclass TestHelpUsageOptionalsWrap(HelpTestCase): 33290c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi """Test usage messages where the optionals wrap""" 33300c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi 33310c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi parser_signature = Sig(prog='PROG') 33320c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi argument_signatures = [ 33330c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi Sig('-w', metavar='W' * 25), 33340c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi Sig('-x', metavar='X' * 25), 33350c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi Sig('-y', metavar='Y' * 25), 33360c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi Sig('-z', metavar='Z' * 25), 33370c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi Sig('a'), 33380c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi Sig('b'), 33390c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi Sig('c'), 33400c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi ] 33410c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi argument_group_signatures = [] 33420c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi usage = '''\ 33430c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi usage: PROG [-h] [-w WWWWWWWWWWWWWWWWWWWWWWWWW] \ 33440c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi[-x XXXXXXXXXXXXXXXXXXXXXXXXX] 33450c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi [-y YYYYYYYYYYYYYYYYYYYYYYYYY] \ 33460c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi[-z ZZZZZZZZZZZZZZZZZZZZZZZZZ] 33470c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi a b c 33480c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi ''' 33490c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi help = usage + '''\ 33500c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi 33510c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi positional arguments: 33520c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi a 33530c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi b 33540c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi c 33550c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi 33560c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi optional arguments: 33570c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi -h, --help show this help message and exit 33580c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi -w WWWWWWWWWWWWWWWWWWWWWWWWW 33590c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi -x XXXXXXXXXXXXXXXXXXXXXXXXX 33600c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi -y YYYYYYYYYYYYYYYYYYYYYYYYY 33610c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi -z ZZZZZZZZZZZZZZZZZZZZZZZZZ 33620c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi ''' 33630c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi version = '' 33640c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi 33650c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi 33660c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yiclass TestHelpUsagePositionalsWrap(HelpTestCase): 33670c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi """Test usage messages where the positionals wrap""" 33680c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi 33690c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi parser_signature = Sig(prog='PROG') 33700c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi argument_signatures = [ 33710c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi Sig('-x'), 33720c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi Sig('-y'), 33730c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi Sig('-z'), 33740c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi Sig('a' * 25), 33750c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi Sig('b' * 25), 33760c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi Sig('c' * 25), 33770c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi ] 33780c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi argument_group_signatures = [] 33790c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi usage = '''\ 33800c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi usage: PROG [-h] [-x X] [-y Y] [-z Z] 33810c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi aaaaaaaaaaaaaaaaaaaaaaaaa bbbbbbbbbbbbbbbbbbbbbbbbb 33820c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi ccccccccccccccccccccccccc 33830c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi ''' 33840c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi help = usage + '''\ 33850c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi 33860c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi positional arguments: 33870c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi aaaaaaaaaaaaaaaaaaaaaaaaa 33880c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi bbbbbbbbbbbbbbbbbbbbbbbbb 33890c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi ccccccccccccccccccccccccc 33900c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi 33910c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi optional arguments: 33920c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi -h, --help show this help message and exit 33930c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi -x X 33940c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi -y Y 33950c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi -z Z 33960c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi ''' 33970c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi version = '' 33980c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi 33990c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi 34000c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yiclass TestHelpUsageOptionalsPositionalsWrap(HelpTestCase): 34010c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi """Test usage messages where the optionals and positionals wrap""" 34020c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi 34030c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi parser_signature = Sig(prog='PROG') 34040c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi argument_signatures = [ 34050c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi Sig('-x', metavar='X' * 25), 34060c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi Sig('-y', metavar='Y' * 25), 34070c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi Sig('-z', metavar='Z' * 25), 34080c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi Sig('a' * 25), 34090c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi Sig('b' * 25), 34100c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi Sig('c' * 25), 34110c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi ] 34120c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi argument_group_signatures = [] 34130c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi usage = '''\ 34140c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi usage: PROG [-h] [-x XXXXXXXXXXXXXXXXXXXXXXXXX] \ 34150c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi[-y YYYYYYYYYYYYYYYYYYYYYYYYY] 34160c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi [-z ZZZZZZZZZZZZZZZZZZZZZZZZZ] 34170c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi aaaaaaaaaaaaaaaaaaaaaaaaa bbbbbbbbbbbbbbbbbbbbbbbbb 34180c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi ccccccccccccccccccccccccc 34190c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi ''' 34200c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi help = usage + '''\ 34210c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi 34220c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi positional arguments: 34230c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi aaaaaaaaaaaaaaaaaaaaaaaaa 34240c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi bbbbbbbbbbbbbbbbbbbbbbbbb 34250c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi ccccccccccccccccccccccccc 34260c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi 34270c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi optional arguments: 34280c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi -h, --help show this help message and exit 34290c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi -x XXXXXXXXXXXXXXXXXXXXXXXXX 34300c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi -y YYYYYYYYYYYYYYYYYYYYYYYYY 34310c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi -z ZZZZZZZZZZZZZZZZZZZZZZZZZ 34320c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi ''' 34330c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi version = '' 34340c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi 34350c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi 34360c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yiclass TestHelpUsageOptionalsOnlyWrap(HelpTestCase): 34370c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi """Test usage messages where there are only optionals and they wrap""" 34380c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi 34390c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi parser_signature = Sig(prog='PROG') 34400c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi argument_signatures = [ 34410c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi Sig('-x', metavar='X' * 25), 34420c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi Sig('-y', metavar='Y' * 25), 34430c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi Sig('-z', metavar='Z' * 25), 34440c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi ] 34450c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi argument_group_signatures = [] 34460c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi usage = '''\ 34470c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi usage: PROG [-h] [-x XXXXXXXXXXXXXXXXXXXXXXXXX] \ 34480c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi[-y YYYYYYYYYYYYYYYYYYYYYYYYY] 34490c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi [-z ZZZZZZZZZZZZZZZZZZZZZZZZZ] 34500c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi ''' 34510c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi help = usage + '''\ 34520c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi 34530c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi optional arguments: 34540c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi -h, --help show this help message and exit 34550c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi -x XXXXXXXXXXXXXXXXXXXXXXXXX 34560c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi -y YYYYYYYYYYYYYYYYYYYYYYYYY 34570c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi -z ZZZZZZZZZZZZZZZZZZZZZZZZZ 34580c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi ''' 34590c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi version = '' 34600c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi 34610c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi 34620c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yiclass TestHelpUsagePositionalsOnlyWrap(HelpTestCase): 34630c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi """Test usage messages where there are only positionals and they wrap""" 34640c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi 34650c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi parser_signature = Sig(prog='PROG', add_help=False) 34660c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi argument_signatures = [ 34670c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi Sig('a' * 25), 34680c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi Sig('b' * 25), 34690c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi Sig('c' * 25), 34700c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi ] 34710c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi argument_group_signatures = [] 34720c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi usage = '''\ 34730c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi usage: PROG aaaaaaaaaaaaaaaaaaaaaaaaa bbbbbbbbbbbbbbbbbbbbbbbbb 34740c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi ccccccccccccccccccccccccc 34750c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi ''' 34760c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi help = usage + '''\ 34770c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi 34780c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi positional arguments: 34790c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi aaaaaaaaaaaaaaaaaaaaaaaaa 34800c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi bbbbbbbbbbbbbbbbbbbbbbbbb 34810c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi ccccccccccccccccccccccccc 34820c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi ''' 34830c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi version = '' 34840c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi 34850c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi 34860c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yiclass TestHelpVariableExpansion(HelpTestCase): 34870c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi """Test that variables are expanded properly in help messages""" 34880c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi 34890c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi parser_signature = Sig(prog='PROG') 34900c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi argument_signatures = [ 34910c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi Sig('-x', type=int, 34920c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi help='x %(prog)s %(default)s %(type)s %%'), 34930c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi Sig('-y', action='store_const', default=42, const='XXX', 34940c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi help='y %(prog)s %(default)s %(const)s'), 34950c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi Sig('--foo', choices='abc', 34960c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi help='foo %(prog)s %(default)s %(choices)s'), 34970c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi Sig('--bar', default='baz', choices=[1, 2], metavar='BBB', 34980c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi help='bar %(prog)s %(default)s %(dest)s'), 34990c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi Sig('spam', help='spam %(prog)s %(default)s'), 35000c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi Sig('badger', default=0.5, help='badger %(prog)s %(default)s'), 35010c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi ] 35020c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi argument_group_signatures = [ 35030c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi (Sig('group'), [ 35040c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi Sig('-a', help='a %(prog)s %(default)s'), 35050c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi Sig('-b', default=-1, help='b %(prog)s %(default)s'), 35060c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi ]) 35070c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi ] 35080c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi usage = ('''\ 35090c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi usage: PROG [-h] [-x X] [-y] [--foo {a,b,c}] [--bar BBB] [-a A] [-b B] 35100c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi spam badger 35110c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi ''') 35120c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi help = usage + '''\ 35130c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi 35140c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi positional arguments: 35150c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi spam spam PROG None 35160c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi badger badger PROG 0.5 35170c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi 35180c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi optional arguments: 35190c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi -h, --help show this help message and exit 35200c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi -x X x PROG None int % 35210c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi -y y PROG 42 XXX 35220c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi --foo {a,b,c} foo PROG None a, b, c 35230c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi --bar BBB bar PROG baz bar 35240c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi 35250c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi group: 35260c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi -a A a PROG None 35270c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi -b B b PROG -1 35280c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi ''' 35290c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi version = '' 35300c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi 35310c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi 35320c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yiclass TestHelpVariableExpansionUsageSupplied(HelpTestCase): 35330c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi """Test that variables are expanded properly when usage= is present""" 35340c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi 35350c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi parser_signature = Sig(prog='PROG', usage='%(prog)s FOO') 35360c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi argument_signatures = [] 35370c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi argument_group_signatures = [] 35380c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi usage = ('''\ 35390c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi usage: PROG FOO 35400c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi ''') 35410c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi help = usage + '''\ 35420c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi 35430c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi optional arguments: 35440c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi -h, --help show this help message and exit 35450c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi ''' 35460c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi version = '' 35470c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi 35480c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi 35490c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yiclass TestHelpVariableExpansionNoArguments(HelpTestCase): 35500c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi """Test that variables are expanded properly with no arguments""" 35510c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi 35520c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi parser_signature = Sig(prog='PROG', add_help=False) 35530c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi argument_signatures = [] 35540c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi argument_group_signatures = [] 35550c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi usage = ('''\ 35560c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi usage: PROG 35570c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi ''') 35580c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi help = usage 35590c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi version = '' 35600c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi 35610c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi 35620c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yiclass TestHelpSuppressUsage(HelpTestCase): 35630c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi """Test that items can be suppressed in usage messages""" 35640c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi 35650c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi parser_signature = Sig(prog='PROG', usage=argparse.SUPPRESS) 35660c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi argument_signatures = [ 35670c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi Sig('--foo', help='foo help'), 35680c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi Sig('spam', help='spam help'), 35690c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi ] 35700c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi argument_group_signatures = [] 35710c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi help = '''\ 35720c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi positional arguments: 35730c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi spam spam help 35740c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi 35750c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi optional arguments: 35760c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi -h, --help show this help message and exit 35770c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi --foo FOO foo help 35780c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi ''' 35790c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi usage = '' 35800c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi version = '' 35810c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi 35820c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi 35830c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yiclass TestHelpSuppressOptional(HelpTestCase): 35840c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi """Test that optional arguments can be suppressed in help messages""" 35850c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi 35860c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi parser_signature = Sig(prog='PROG', add_help=False) 35870c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi argument_signatures = [ 35880c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi Sig('--foo', help=argparse.SUPPRESS), 35890c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi Sig('spam', help='spam help'), 35900c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi ] 35910c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi argument_group_signatures = [] 35920c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi usage = '''\ 35930c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi usage: PROG spam 35940c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi ''' 35950c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi help = usage + '''\ 35960c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi 35970c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi positional arguments: 35980c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi spam spam help 35990c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi ''' 36000c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi version = '' 36010c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi 36020c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi 36030c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yiclass TestHelpSuppressOptionalGroup(HelpTestCase): 36040c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi """Test that optional groups can be suppressed in help messages""" 36050c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi 36060c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi parser_signature = Sig(prog='PROG') 36070c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi argument_signatures = [ 36080c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi Sig('--foo', help='foo help'), 36090c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi Sig('spam', help='spam help'), 36100c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi ] 36110c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi argument_group_signatures = [ 36120c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi (Sig('group'), [Sig('--bar', help=argparse.SUPPRESS)]), 36130c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi ] 36140c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi usage = '''\ 36150c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi usage: PROG [-h] [--foo FOO] spam 36160c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi ''' 36170c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi help = usage + '''\ 36180c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi 36190c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi positional arguments: 36200c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi spam spam help 36210c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi 36220c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi optional arguments: 36230c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi -h, --help show this help message and exit 36240c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi --foo FOO foo help 36250c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi ''' 36260c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi version = '' 36270c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi 36280c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi 36290c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yiclass TestHelpSuppressPositional(HelpTestCase): 36300c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi """Test that positional arguments can be suppressed in help messages""" 36310c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi 36320c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi parser_signature = Sig(prog='PROG') 36330c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi argument_signatures = [ 36340c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi Sig('--foo', help='foo help'), 36350c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi Sig('spam', help=argparse.SUPPRESS), 36360c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi ] 36370c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi argument_group_signatures = [] 36380c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi usage = '''\ 36390c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi usage: PROG [-h] [--foo FOO] 36400c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi ''' 36410c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi help = usage + '''\ 36420c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi 36430c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi optional arguments: 36440c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi -h, --help show this help message and exit 36450c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi --foo FOO foo help 36460c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi ''' 36470c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi version = '' 36480c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi 36490c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi 36500c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yiclass TestHelpRequiredOptional(HelpTestCase): 36510c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi """Test that required options don't look optional""" 36520c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi 36530c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi parser_signature = Sig(prog='PROG') 36540c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi argument_signatures = [ 36550c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi Sig('--foo', required=True, help='foo help'), 36560c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi ] 36570c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi argument_group_signatures = [] 36580c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi usage = '''\ 36590c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi usage: PROG [-h] --foo FOO 36600c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi ''' 36610c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi help = usage + '''\ 36620c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi 36630c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi optional arguments: 36640c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi -h, --help show this help message and exit 36650c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi --foo FOO foo help 36660c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi ''' 36670c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi version = '' 36680c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi 36690c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi 36700c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yiclass TestHelpAlternatePrefixChars(HelpTestCase): 36710c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi """Test that options display with different prefix characters""" 36720c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi 36730c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi parser_signature = Sig(prog='PROG', prefix_chars='^;', add_help=False) 36740c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi argument_signatures = [ 36750c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi Sig('^^foo', action='store_true', help='foo help'), 36760c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi Sig(';b', ';;bar', help='bar help'), 36770c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi ] 36780c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi argument_group_signatures = [] 36790c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi usage = '''\ 36800c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi usage: PROG [^^foo] [;b BAR] 36810c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi ''' 36820c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi help = usage + '''\ 36830c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi 36840c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi optional arguments: 36850c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi ^^foo foo help 36860c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi ;b BAR, ;;bar BAR bar help 36870c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi ''' 36880c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi version = '' 36890c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi 36900c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi 36910c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yiclass TestHelpNoHelpOptional(HelpTestCase): 36920c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi """Test that the --help argument can be suppressed help messages""" 36930c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi 36940c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi parser_signature = Sig(prog='PROG', add_help=False) 36950c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi argument_signatures = [ 36960c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi Sig('--foo', help='foo help'), 36970c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi Sig('spam', help='spam help'), 36980c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi ] 36990c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi argument_group_signatures = [] 37000c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi usage = '''\ 37010c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi usage: PROG [--foo FOO] spam 37020c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi ''' 37030c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi help = usage + '''\ 37040c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi 37050c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi positional arguments: 37060c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi spam spam help 37070c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi 37080c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi optional arguments: 37090c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi --foo FOO foo help 37100c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi ''' 37110c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi version = '' 37120c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi 37130c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi 37140c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yiclass TestHelpVersionOptional(HelpTestCase): 37150c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi """Test that the --version argument can be suppressed help messages""" 37160c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi 37170c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi parser_signature = Sig(prog='PROG', version='1.0') 37180c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi argument_signatures = [ 37190c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi Sig('--foo', help='foo help'), 37200c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi Sig('spam', help='spam help'), 37210c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi ] 37220c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi argument_group_signatures = [] 37230c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi usage = '''\ 37240c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi usage: PROG [-h] [-v] [--foo FOO] spam 37250c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi ''' 37260c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi help = usage + '''\ 37270c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi 37280c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi positional arguments: 37290c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi spam spam help 37300c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi 37310c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi optional arguments: 37320c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi -h, --help show this help message and exit 37330c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi -v, --version show program's version number and exit 37340c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi --foo FOO foo help 37350c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi ''' 37360c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi version = '''\ 37370c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi 1.0 37380c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi ''' 37390c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi 37400c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi 37410c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yiclass TestHelpNone(HelpTestCase): 37420c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi """Test that no errors occur if no help is specified""" 37430c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi 37440c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi parser_signature = Sig(prog='PROG') 37450c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi argument_signatures = [ 37460c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi Sig('--foo'), 37470c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi Sig('spam'), 37480c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi ] 37490c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi argument_group_signatures = [] 37500c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi usage = '''\ 37510c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi usage: PROG [-h] [--foo FOO] spam 37520c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi ''' 37530c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi help = usage + '''\ 37540c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi 37550c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi positional arguments: 37560c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi spam 37570c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi 37580c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi optional arguments: 37590c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi -h, --help show this help message and exit 37600c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi --foo FOO 37610c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi ''' 37620c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi version = '' 37630c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi 37640c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi 37650c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yiclass TestHelpTupleMetavar(HelpTestCase): 37660c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi """Test specifying metavar as a tuple""" 37670c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi 37680c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi parser_signature = Sig(prog='PROG') 37690c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi argument_signatures = [ 37700c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi Sig('-w', help='w', nargs='+', metavar=('W1', 'W2')), 37710c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi Sig('-x', help='x', nargs='*', metavar=('X1', 'X2')), 37720c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi Sig('-y', help='y', nargs=3, metavar=('Y1', 'Y2', 'Y3')), 37730c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi Sig('-z', help='z', nargs='?', metavar=('Z1', )), 37740c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi ] 37750c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi argument_group_signatures = [] 37760c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi usage = '''\ 37770c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi usage: PROG [-h] [-w W1 [W2 ...]] [-x [X1 [X2 ...]]] [-y Y1 Y2 Y3] \ 37780c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi[-z [Z1]] 37790c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi ''' 37800c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi help = usage + '''\ 37810c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi 37820c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi optional arguments: 37830c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi -h, --help show this help message and exit 37840c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi -w W1 [W2 ...] w 37850c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi -x [X1 [X2 ...]] x 37860c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi -y Y1 Y2 Y3 y 37870c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi -z [Z1] z 37880c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi ''' 37890c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi version = '' 37900c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi 37910c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi 37920c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yiclass TestHelpRawText(HelpTestCase): 37930c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi """Test the RawTextHelpFormatter""" 37940c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi 37950c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi parser_signature = Sig( 37960c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi prog='PROG', formatter_class=argparse.RawTextHelpFormatter, 37970c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi description='Keep the formatting\n' 37980c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi ' exactly as it is written\n' 37990c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi '\n' 38000c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi 'here\n') 38010c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi 38020c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi argument_signatures = [ 38030c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi Sig('--foo', help=' foo help should also\n' 38040c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi 'appear as given here'), 38050c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi Sig('spam', help='spam help'), 38060c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi ] 38070c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi argument_group_signatures = [ 38080c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi (Sig('title', description=' This text\n' 38090c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi ' should be indented\n' 38100c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi ' exactly like it is here\n'), 38110c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi [Sig('--bar', help='bar help')]), 38120c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi ] 38130c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi usage = '''\ 38140c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi usage: PROG [-h] [--foo FOO] [--bar BAR] spam 38150c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi ''' 38160c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi help = usage + '''\ 38170c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi 38180c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi Keep the formatting 38190c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi exactly as it is written 38200c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi 38210c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi here 38220c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi 38230c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi positional arguments: 38240c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi spam spam help 38250c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi 38260c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi optional arguments: 38270c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi -h, --help show this help message and exit 38280c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi --foo FOO foo help should also 38290c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi appear as given here 38300c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi 38310c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi title: 38320c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi This text 38330c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi should be indented 38340c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi exactly like it is here 38350c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi 38360c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi --bar BAR bar help 38370c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi ''' 38380c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi version = '' 38390c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi 38400c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi 38410c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yiclass TestHelpRawDescription(HelpTestCase): 38420c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi """Test the RawTextHelpFormatter""" 38430c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi 38440c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi parser_signature = Sig( 38450c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi prog='PROG', formatter_class=argparse.RawDescriptionHelpFormatter, 38460c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi description='Keep the formatting\n' 38470c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi ' exactly as it is written\n' 38480c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi '\n' 38490c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi 'here\n') 38500c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi 38510c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi argument_signatures = [ 38520c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi Sig('--foo', help=' foo help should not\n' 38530c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi ' retain this odd formatting'), 38540c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi Sig('spam', help='spam help'), 38550c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi ] 38560c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi argument_group_signatures = [ 38570c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi (Sig('title', description=' This text\n' 38580c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi ' should be indented\n' 38590c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi ' exactly like it is here\n'), 38600c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi [Sig('--bar', help='bar help')]), 38610c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi ] 38620c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi usage = '''\ 38630c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi usage: PROG [-h] [--foo FOO] [--bar BAR] spam 38640c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi ''' 38650c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi help = usage + '''\ 38660c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi 38670c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi Keep the formatting 38680c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi exactly as it is written 38690c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi 38700c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi here 38710c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi 38720c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi positional arguments: 38730c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi spam spam help 38740c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi 38750c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi optional arguments: 38760c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi -h, --help show this help message and exit 38770c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi --foo FOO foo help should not retain this odd formatting 38780c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi 38790c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi title: 38800c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi This text 38810c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi should be indented 38820c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi exactly like it is here 38830c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi 38840c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi --bar BAR bar help 38850c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi ''' 38860c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi version = '' 38870c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi 38880c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi 38890c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yiclass TestHelpArgumentDefaults(HelpTestCase): 38900c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi """Test the ArgumentDefaultsHelpFormatter""" 38910c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi 38920c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi parser_signature = Sig( 38930c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi prog='PROG', formatter_class=argparse.ArgumentDefaultsHelpFormatter, 38940c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi description='description') 38950c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi 38960c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi argument_signatures = [ 38970c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi Sig('--foo', help='foo help - oh and by the way, %(default)s'), 38980c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi Sig('--bar', action='store_true', help='bar help'), 38990c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi Sig('spam', help='spam help'), 39000c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi Sig('badger', nargs='?', default='wooden', help='badger help'), 39010c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi ] 39020c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi argument_group_signatures = [ 39030c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi (Sig('title', description='description'), 39040c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi [Sig('--baz', type=int, default=42, help='baz help')]), 39050c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi ] 39060c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi usage = '''\ 39070c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi usage: PROG [-h] [--foo FOO] [--bar] [--baz BAZ] spam [badger] 39080c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi ''' 39090c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi help = usage + '''\ 39100c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi 39110c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi description 39120c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi 39130c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi positional arguments: 39140c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi spam spam help 39150c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi badger badger help (default: wooden) 39160c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi 39170c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi optional arguments: 39180c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi -h, --help show this help message and exit 39190c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi --foo FOO foo help - oh and by the way, None 39200c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi --bar bar help (default: False) 39210c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi 39220c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi title: 39230c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi description 39240c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi 39250c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi --baz BAZ baz help (default: 42) 39260c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi ''' 39270c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi version = '' 39280c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi 39290c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yiclass TestHelpVersionAction(HelpTestCase): 39300c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi """Test the default help for the version action""" 39310c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi 39320c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi parser_signature = Sig(prog='PROG', description='description') 39330c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi argument_signatures = [Sig('-V', '--version', action='version', version='3.6')] 39340c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi argument_group_signatures = [] 39350c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi usage = '''\ 39360c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi usage: PROG [-h] [-V] 39370c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi ''' 39380c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi help = usage + '''\ 39390c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi 39400c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi description 39410c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi 39420c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi optional arguments: 39430c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi -h, --help show this help message and exit 39440c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi -V, --version show program's version number and exit 39450c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi ''' 39460c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi version = '' 39470c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi 39480c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yiclass TestHelpSubparsersOrdering(HelpTestCase): 39490c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi """Test ordering of subcommands in help matches the code""" 39500c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi parser_signature = Sig(prog='PROG', 39510c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi description='display some subcommands', 39520c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi version='0.1') 39530c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi 39540c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi subparsers_signatures = [Sig(name=name) 39550c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi for name in ('a', 'b', 'c', 'd', 'e')] 39560c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi 39570c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi usage = '''\ 39580c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi usage: PROG [-h] [-v] {a,b,c,d,e} ... 39590c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi ''' 39600c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi 39610c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi help = usage + '''\ 39620c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi 39630c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi display some subcommands 39640c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi 39650c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi positional arguments: 39660c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi {a,b,c,d,e} 39670c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi 39680c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi optional arguments: 39690c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi -h, --help show this help message and exit 39700c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi -v, --version show program's version number and exit 39710c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi ''' 39720c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi 39730c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi version = '''\ 39740c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi 0.1 39750c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi ''' 39760c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi 39770c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yiclass TestHelpSubparsersWithHelpOrdering(HelpTestCase): 39780c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi """Test ordering of subcommands in help matches the code""" 39790c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi parser_signature = Sig(prog='PROG', 39800c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi description='display some subcommands', 39810c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi version='0.1') 39820c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi 39830c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi subcommand_data = (('a', 'a subcommand help'), 39840c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi ('b', 'b subcommand help'), 39850c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi ('c', 'c subcommand help'), 39860c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi ('d', 'd subcommand help'), 39870c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi ('e', 'e subcommand help'), 39880c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi ) 39890c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi 39900c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi subparsers_signatures = [Sig(name=name, help=help) 39910c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi for name, help in subcommand_data] 39920c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi 39930c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi usage = '''\ 39940c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi usage: PROG [-h] [-v] {a,b,c,d,e} ... 39950c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi ''' 39960c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi 39970c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi help = usage + '''\ 39980c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi 39990c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi display some subcommands 40000c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi 40010c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi positional arguments: 40020c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi {a,b,c,d,e} 40030c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi a a subcommand help 40040c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi b b subcommand help 40050c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi c c subcommand help 40060c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi d d subcommand help 40070c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi e e subcommand help 40080c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi 40090c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi optional arguments: 40100c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi -h, --help show this help message and exit 40110c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi -v, --version show program's version number and exit 40120c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi ''' 40130c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi 40140c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi version = '''\ 40150c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi 0.1 40160c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi ''' 40170c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi 40180c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi 40190c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi# ===================================== 40200c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi# Optional/Positional constructor tests 40210c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi# ===================================== 40220c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi 40230c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yiclass TestInvalidArgumentConstructors(TestCase): 40240c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi """Test a bunch of invalid Argument constructors""" 40250c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi 40260c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi def assertTypeError(self, *args, **kwargs): 40270c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi parser = argparse.ArgumentParser() 40280c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi self.assertRaises(TypeError, parser.add_argument, 40290c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi *args, **kwargs) 40300c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi 40310c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi def assertValueError(self, *args, **kwargs): 40320c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi parser = argparse.ArgumentParser() 40330c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi self.assertRaises(ValueError, parser.add_argument, 40340c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi *args, **kwargs) 40350c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi 40360c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi def test_invalid_keyword_arguments(self): 40370c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi self.assertTypeError('-x', bar=None) 40380c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi self.assertTypeError('-y', callback='foo') 40390c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi self.assertTypeError('-y', callback_args=()) 40400c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi self.assertTypeError('-y', callback_kwargs={}) 40410c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi 40420c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi def test_missing_destination(self): 40430c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi self.assertTypeError() 40440c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi for action in ['append', 'store']: 40450c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi self.assertTypeError(action=action) 40460c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi 40470c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi def test_invalid_option_strings(self): 40480c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi self.assertValueError('--') 40490c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi self.assertValueError('---') 40500c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi 40510c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi def test_invalid_type(self): 40520c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi self.assertValueError('--foo', type='int') 40530c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi self.assertValueError('--foo', type=(int, float)) 40540c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi 40550c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi def test_invalid_action(self): 40560c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi self.assertValueError('-x', action='foo') 40570c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi self.assertValueError('foo', action='baz') 40580c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi self.assertValueError('--foo', action=('store', 'append')) 40590c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi parser = argparse.ArgumentParser() 40600c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi try: 40610c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi parser.add_argument("--foo", action="store-true") 40620c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi except ValueError: 40630c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi e = sys.exc_info()[1] 40640c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi expected = 'unknown action' 40650c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi msg = 'expected %r, found %r' % (expected, e) 40660c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi self.assertTrue(expected in str(e), msg) 40670c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi 40680c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi def test_multiple_dest(self): 40690c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi parser = argparse.ArgumentParser() 40700c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi parser.add_argument(dest='foo') 40710c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi try: 40720c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi parser.add_argument('bar', dest='baz') 40730c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi except ValueError: 40740c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi e = sys.exc_info()[1] 40750c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi expected = 'dest supplied twice for positional argument' 40760c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi msg = 'expected %r, found %r' % (expected, e) 40770c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi self.assertTrue(expected in str(e), msg) 40780c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi 40790c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi def test_no_argument_actions(self): 40800c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi for action in ['store_const', 'store_true', 'store_false', 40810c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi 'append_const', 'count']: 40820c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi for attrs in [dict(type=int), dict(nargs='+'), 40830c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi dict(choices='ab')]: 40840c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi self.assertTypeError('-x', action=action, **attrs) 40850c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi 40860c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi def test_no_argument_no_const_actions(self): 40870c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi # options with zero arguments 40880c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi for action in ['store_true', 'store_false', 'count']: 40890c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi 40900c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi # const is always disallowed 40910c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi self.assertTypeError('-x', const='foo', action=action) 40920c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi 40930c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi # nargs is always disallowed 40940c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi self.assertTypeError('-x', nargs='*', action=action) 40950c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi 40960c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi def test_more_than_one_argument_actions(self): 40970c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi for action in ['store', 'append']: 40980c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi 40990c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi # nargs=0 is disallowed 41000c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi self.assertValueError('-x', nargs=0, action=action) 41010c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi self.assertValueError('spam', nargs=0, action=action) 41020c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi 41030c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi # const is disallowed with non-optional arguments 41040c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi for nargs in [1, '*', '+']: 41050c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi self.assertValueError('-x', const='foo', 41060c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi nargs=nargs, action=action) 41070c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi self.assertValueError('spam', const='foo', 41080c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi nargs=nargs, action=action) 41090c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi 41100c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi def test_required_const_actions(self): 41110c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi for action in ['store_const', 'append_const']: 41120c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi 41130c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi # nargs is always disallowed 41140c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi self.assertTypeError('-x', nargs='+', action=action) 41150c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi 41160c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi def test_parsers_action_missing_params(self): 41170c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi self.assertTypeError('command', action='parsers') 41180c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi self.assertTypeError('command', action='parsers', prog='PROG') 41190c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi self.assertTypeError('command', action='parsers', 41200c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi parser_class=argparse.ArgumentParser) 41210c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi 41220c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi def test_required_positional(self): 41230c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi self.assertTypeError('foo', required=True) 41240c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi 41250c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi def test_user_defined_action(self): 41260c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi 41270c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi class Success(Exception): 41280c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi pass 41290c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi 41300c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi class Action(object): 41310c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi 41320c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi def __init__(self, 41330c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi option_strings, 41340c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi dest, 41350c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi const, 41360c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi default, 41370c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi required=False): 41380c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi if dest == 'spam': 41390c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi if const is Success: 41400c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi if default is Success: 41410c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi raise Success() 41420c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi 41430c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi def __call__(self, *args, **kwargs): 41440c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi pass 41450c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi 41460c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi parser = argparse.ArgumentParser() 41470c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi self.assertRaises(Success, parser.add_argument, '--spam', 41480c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi action=Action, default=Success, const=Success) 41490c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi self.assertRaises(Success, parser.add_argument, 'spam', 41500c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi action=Action, default=Success, const=Success) 41510c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi 41520c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi# ================================ 41530c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi# Actions returned by add_argument 41540c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi# ================================ 41550c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi 41560c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yiclass TestActionsReturned(TestCase): 41570c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi 41580c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi def test_dest(self): 41590c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi parser = argparse.ArgumentParser() 41600c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi action = parser.add_argument('--foo') 41610c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi self.assertEqual(action.dest, 'foo') 41620c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi action = parser.add_argument('-b', '--bar') 41630c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi self.assertEqual(action.dest, 'bar') 41640c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi action = parser.add_argument('-x', '-y') 41650c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi self.assertEqual(action.dest, 'x') 41660c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi 41670c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi def test_misc(self): 41680c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi parser = argparse.ArgumentParser() 41690c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi action = parser.add_argument('--foo', nargs='?', const=42, 41700c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi default=84, type=int, choices=[1, 2], 41710c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi help='FOO', metavar='BAR', dest='baz') 41720c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi self.assertEqual(action.nargs, '?') 41730c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi self.assertEqual(action.const, 42) 41740c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi self.assertEqual(action.default, 84) 41750c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi self.assertEqual(action.type, int) 41760c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi self.assertEqual(action.choices, [1, 2]) 41770c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi self.assertEqual(action.help, 'FOO') 41780c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi self.assertEqual(action.metavar, 'BAR') 41790c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi self.assertEqual(action.dest, 'baz') 41800c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi 41810c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi 41820c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi# ================================ 41830c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi# Argument conflict handling tests 41840c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi# ================================ 41850c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi 41860c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yiclass TestConflictHandling(TestCase): 41870c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi 41880c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi def test_bad_type(self): 41890c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi self.assertRaises(ValueError, argparse.ArgumentParser, 41900c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi conflict_handler='foo') 41910c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi 41920c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi def test_conflict_error(self): 41930c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi parser = argparse.ArgumentParser() 41940c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi parser.add_argument('-x') 41950c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi self.assertRaises(argparse.ArgumentError, 41960c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi parser.add_argument, '-x') 41970c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi parser.add_argument('--spam') 41980c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi self.assertRaises(argparse.ArgumentError, 41990c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi parser.add_argument, '--spam') 42000c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi 42010c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi def test_resolve_error(self): 42020c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi get_parser = argparse.ArgumentParser 42030c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi parser = get_parser(prog='PROG', conflict_handler='resolve') 42040c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi 42050c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi parser.add_argument('-x', help='OLD X') 42060c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi parser.add_argument('-x', help='NEW X') 42070c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi self.assertEqual(parser.format_help(), textwrap.dedent('''\ 42080c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi usage: PROG [-h] [-x X] 42090c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi 42100c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi optional arguments: 42110c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi -h, --help show this help message and exit 42120c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi -x X NEW X 42130c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi ''')) 42140c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi 42150c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi parser.add_argument('--spam', metavar='OLD_SPAM') 42160c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi parser.add_argument('--spam', metavar='NEW_SPAM') 42170c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi self.assertEqual(parser.format_help(), textwrap.dedent('''\ 42180c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi usage: PROG [-h] [-x X] [--spam NEW_SPAM] 42190c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi 42200c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi optional arguments: 42210c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi -h, --help show this help message and exit 42220c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi -x X NEW X 42230c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi --spam NEW_SPAM 42240c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi ''')) 42250c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi 42260c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi 42270c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi# ============================= 42280c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi# Help and Version option tests 42290c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi# ============================= 42300c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi 42310c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yiclass TestOptionalsHelpVersionActions(TestCase): 42320c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi """Test the help and version actions""" 42330c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi 42340c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi def _get_error(self, func, *args, **kwargs): 42350c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi try: 42360c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi func(*args, **kwargs) 42370c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi except ArgumentParserError: 42380c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi return sys.exc_info()[1] 42390c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi else: 42400c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi self.assertRaises(ArgumentParserError, func, *args, **kwargs) 42410c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi 42420c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi def assertPrintHelpExit(self, parser, args_str): 42430c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi self.assertEqual( 42440c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi parser.format_help(), 42450c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi self._get_error(parser.parse_args, args_str.split()).stdout) 42460c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi 42470c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi def assertPrintVersionExit(self, parser, args_str): 42480c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi self.assertEqual( 42490c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi parser.format_version(), 42500c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi self._get_error(parser.parse_args, args_str.split()).stderr) 42510c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi 42520c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi def assertArgumentParserError(self, parser, *args): 42530c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi self.assertRaises(ArgumentParserError, parser.parse_args, args) 42540c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi 42550c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi def test_version(self): 42560c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi parser = ErrorRaisingArgumentParser(version='1.0') 42570c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi self.assertPrintHelpExit(parser, '-h') 42580c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi self.assertPrintHelpExit(parser, '--help') 42590c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi self.assertPrintVersionExit(parser, '-v') 42600c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi self.assertPrintVersionExit(parser, '--version') 42610c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi 42620c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi def test_version_format(self): 42630c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi parser = ErrorRaisingArgumentParser(prog='PPP', version='%(prog)s 3.5') 42640c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi msg = self._get_error(parser.parse_args, ['-v']).stderr 42650c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi self.assertEqual('PPP 3.5\n', msg) 42660c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi 42670c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi def test_version_no_help(self): 42680c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi parser = ErrorRaisingArgumentParser(add_help=False, version='1.0') 42690c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi self.assertArgumentParserError(parser, '-h') 42700c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi self.assertArgumentParserError(parser, '--help') 42710c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi self.assertPrintVersionExit(parser, '-v') 42720c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi self.assertPrintVersionExit(parser, '--version') 42730c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi 42740c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi def test_version_action(self): 42750c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi parser = ErrorRaisingArgumentParser(prog='XXX') 42760c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi parser.add_argument('-V', action='version', version='%(prog)s 3.7') 42770c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi msg = self._get_error(parser.parse_args, ['-V']).stderr 42780c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi self.assertEqual('XXX 3.7\n', msg) 42790c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi 42800c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi def test_no_help(self): 42810c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi parser = ErrorRaisingArgumentParser(add_help=False) 42820c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi self.assertArgumentParserError(parser, '-h') 42830c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi self.assertArgumentParserError(parser, '--help') 42840c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi self.assertArgumentParserError(parser, '-v') 42850c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi self.assertArgumentParserError(parser, '--version') 42860c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi 42870c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi def test_alternate_help_version(self): 42880c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi parser = ErrorRaisingArgumentParser() 42890c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi parser.add_argument('-x', action='help') 42900c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi parser.add_argument('-y', action='version') 42910c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi self.assertPrintHelpExit(parser, '-x') 42920c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi self.assertPrintVersionExit(parser, '-y') 42930c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi self.assertArgumentParserError(parser, '-v') 42940c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi self.assertArgumentParserError(parser, '--version') 42950c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi 42960c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi def test_help_version_extra_arguments(self): 42970c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi parser = ErrorRaisingArgumentParser(version='1.0') 42980c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi parser.add_argument('-x', action='store_true') 42990c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi parser.add_argument('y') 43000c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi 43010c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi # try all combinations of valid prefixes and suffixes 43020c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi valid_prefixes = ['', '-x', 'foo', '-x bar', 'baz -x'] 43030c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi valid_suffixes = valid_prefixes + ['--bad-option', 'foo bar baz'] 43040c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi for prefix in valid_prefixes: 43050c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi for suffix in valid_suffixes: 43060c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi format = '%s %%s %s' % (prefix, suffix) 43070c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi self.assertPrintHelpExit(parser, format % '-h') 43080c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi self.assertPrintHelpExit(parser, format % '--help') 43090c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi self.assertPrintVersionExit(parser, format % '-v') 43100c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi self.assertPrintVersionExit(parser, format % '--version') 43110c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi 43120c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi 43130c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi# ====================== 43140c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi# str() and repr() tests 43150c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi# ====================== 43160c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi 43170c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yiclass TestStrings(TestCase): 43180c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi """Test str() and repr() on Optionals and Positionals""" 43190c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi 43200c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi def assertStringEqual(self, obj, result_string): 43210c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi for func in [str, repr]: 43220c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi self.assertEqual(func(obj), result_string) 43230c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi 43240c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi def test_optional(self): 43250c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi option = argparse.Action( 43260c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi option_strings=['--foo', '-a', '-b'], 43270c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi dest='b', 43280c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi type='int', 43290c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi nargs='+', 43300c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi default=42, 43310c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi choices=[1, 2, 3], 43320c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi help='HELP', 43330c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi metavar='METAVAR') 43340c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi string = ( 43350c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi "Action(option_strings=['--foo', '-a', '-b'], dest='b', " 43360c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi "nargs='+', const=None, default=42, type='int', " 43370c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi "choices=[1, 2, 3], help='HELP', metavar='METAVAR')") 43380c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi self.assertStringEqual(option, string) 43390c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi 43400c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi def test_argument(self): 43410c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi argument = argparse.Action( 43420c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi option_strings=[], 43430c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi dest='x', 43440c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi type=float, 43450c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi nargs='?', 43460c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi default=2.5, 43470c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi choices=[0.5, 1.5, 2.5], 43480c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi help='H HH H', 43490c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi metavar='MV MV MV') 43500c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi string = ( 43510c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi "Action(option_strings=[], dest='x', nargs='?', " 43520c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi "const=None, default=2.5, type=%r, choices=[0.5, 1.5, 2.5], " 43530c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi "help='H HH H', metavar='MV MV MV')" % float) 43540c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi self.assertStringEqual(argument, string) 43550c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi 43560c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi def test_namespace(self): 43570c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi ns = argparse.Namespace(foo=42, bar='spam') 43580c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi string = "Namespace(bar='spam', foo=42)" 43590c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi self.assertStringEqual(ns, string) 43600c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi 43610c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi def test_parser(self): 43620c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi parser = argparse.ArgumentParser(prog='PROG') 43630c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi string = ( 43640c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi "ArgumentParser(prog='PROG', usage=None, description=None, " 43650c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi "version=None, formatter_class=%r, conflict_handler='error', " 43660c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi "add_help=True)" % argparse.HelpFormatter) 43670c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi self.assertStringEqual(parser, string) 43680c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi 43690c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi# =============== 43700c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi# Namespace tests 43710c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi# =============== 43720c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi 43730c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yiclass TestNamespace(TestCase): 43740c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi 43750c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi def test_constructor(self): 43760c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi ns = argparse.Namespace() 43770c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi self.assertRaises(AttributeError, getattr, ns, 'x') 43780c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi 43790c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi ns = argparse.Namespace(a=42, b='spam') 43800c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi self.assertEqual(ns.a, 42) 43810c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi self.assertEqual(ns.b, 'spam') 43820c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi 43830c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi def test_equality(self): 43840c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi ns1 = argparse.Namespace(a=1, b=2) 43850c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi ns2 = argparse.Namespace(b=2, a=1) 43860c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi ns3 = argparse.Namespace(a=1) 43870c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi ns4 = argparse.Namespace(b=2) 43880c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi 43890c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi self.assertEqual(ns1, ns2) 43900c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi self.assertNotEqual(ns1, ns3) 43910c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi self.assertNotEqual(ns1, ns4) 43920c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi self.assertNotEqual(ns2, ns3) 43930c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi self.assertNotEqual(ns2, ns4) 43940c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi self.assertTrue(ns1 != ns3) 43950c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi self.assertTrue(ns1 != ns4) 43960c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi self.assertTrue(ns2 != ns3) 43970c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi self.assertTrue(ns2 != ns4) 43980c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi 43990c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi 44000c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi# =================== 44010c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi# File encoding tests 44020c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi# =================== 44030c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi 44040c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yiclass TestEncoding(TestCase): 44050c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi 44060c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi def _test_module_encoding(self, path): 44070c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi path, _ = os.path.splitext(path) 44080c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi path += ".py" 44090c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi with codecs.open(path, 'r', 'utf8') as f: 44100c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi f.read() 44110c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi 44120c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi def test_argparse_module_encoding(self): 44130c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi self._test_module_encoding(argparse.__file__) 44140c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi 44150c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi def test_test_argparse_module_encoding(self): 44160c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi self._test_module_encoding(__file__) 44170c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi 44180c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi# =================== 44190c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi# ArgumentError tests 44200c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi# =================== 44210c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi 44220c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yiclass TestArgumentError(TestCase): 44230c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi 44240c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi def test_argument_error(self): 44250c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi msg = "my error here" 44260c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi error = argparse.ArgumentError(None, msg) 44270c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi self.assertEqual(str(error), msg) 44280c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi 44290c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi# ======================= 44300c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi# ArgumentTypeError tests 44310c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi# ======================= 44320c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi 44330c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yiclass TestArgumentTypeError(TestCase): 44340c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi 44350c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi def test_argument_type_error(self): 44360c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi 44370c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi def spam(string): 44380c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi raise argparse.ArgumentTypeError('spam!') 44390c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi 44400c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi parser = ErrorRaisingArgumentParser(prog='PROG', add_help=False) 44410c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi parser.add_argument('x', type=spam) 44420c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi try: 44430c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi parser.parse_args(['XXX']) 44440c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi except ArgumentParserError: 44450c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi expected = 'usage: PROG x\nPROG: error: argument x: spam!\n' 44460c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi msg = sys.exc_info()[1].stderr 44470c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi self.assertEqual(expected, msg) 44480c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi else: 44490c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi self.fail() 44500c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi 44510c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi# ================================================ 44520c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi# Check that the type function is called only once 44530c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi# ================================================ 44540c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi 44550c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yiclass TestTypeFunctionCallOnlyOnce(TestCase): 44560c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi 44570c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi def test_type_function_call_only_once(self): 44580c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi def spam(string_to_convert): 44590c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi self.assertEqual(string_to_convert, 'spam!') 44600c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi return 'foo_converted' 44610c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi 44620c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi parser = argparse.ArgumentParser() 44630c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi parser.add_argument('--foo', type=spam, default='bar') 44640c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi args = parser.parse_args('--foo spam!'.split()) 44650c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi self.assertEqual(NS(foo='foo_converted'), args) 44660c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi 44670c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi# ================================================================== 44680c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi# Check semantics regarding the default argument and type conversion 44690c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi# ================================================================== 44700c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi 44710c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yiclass TestTypeFunctionCalledOnDefault(TestCase): 44720c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi 44730c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi def test_type_function_call_with_non_string_default(self): 44740c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi def spam(int_to_convert): 44750c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi self.assertEqual(int_to_convert, 0) 44760c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi return 'foo_converted' 44770c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi 44780c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi parser = argparse.ArgumentParser() 44790c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi parser.add_argument('--foo', type=spam, default=0) 44800c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi args = parser.parse_args([]) 44810c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi # foo should *not* be converted because its default is not a string. 44820c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi self.assertEqual(NS(foo=0), args) 44830c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi 44840c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi def test_type_function_call_with_string_default(self): 44850c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi def spam(int_to_convert): 44860c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi return 'foo_converted' 44870c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi 44880c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi parser = argparse.ArgumentParser() 44890c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi parser.add_argument('--foo', type=spam, default='0') 44900c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi args = parser.parse_args([]) 44910c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi # foo is converted because its default is a string. 44920c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi self.assertEqual(NS(foo='foo_converted'), args) 44930c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi 44940c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi def test_no_double_type_conversion_of_default(self): 44950c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi def extend(str_to_convert): 44960c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi return str_to_convert + '*' 44970c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi 44980c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi parser = argparse.ArgumentParser() 44990c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi parser.add_argument('--test', type=extend, default='*') 45000c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi args = parser.parse_args([]) 45010c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi # The test argument will be two stars, one coming from the default 45020c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi # value and one coming from the type conversion being called exactly 45030c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi # once. 45040c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi self.assertEqual(NS(test='**'), args) 45050c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi 45060c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi def test_issue_15906(self): 45070c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi # Issue #15906: When action='append', type=str, default=[] are 45080c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi # providing, the dest value was the string representation "[]" when it 45090c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi # should have been an empty list. 45100c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi parser = argparse.ArgumentParser() 45110c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi parser.add_argument('--test', dest='test', type=str, 45120c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi default=[], action='append') 45130c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi args = parser.parse_args([]) 45140c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi self.assertEqual(args.test, []) 45150c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi 45160c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi# ====================== 45170c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi# parse_known_args tests 45180c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi# ====================== 45190c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi 45200c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yiclass TestParseKnownArgs(TestCase): 45210c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi 45220c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi def test_arguments_tuple(self): 45230c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi parser = argparse.ArgumentParser() 45240c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi parser.parse_args(()) 45250c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi 45260c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi def test_arguments_list(self): 45270c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi parser = argparse.ArgumentParser() 45280c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi parser.parse_args([]) 45290c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi 45300c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi def test_arguments_tuple_positional(self): 45310c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi parser = argparse.ArgumentParser() 45320c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi parser.add_argument('x') 45330c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi parser.parse_args(('x',)) 45340c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi 45350c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi def test_arguments_list_positional(self): 45360c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi parser = argparse.ArgumentParser() 45370c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi parser.add_argument('x') 45380c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi parser.parse_args(['x']) 45390c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi 45400c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi def test_optionals(self): 45410c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi parser = argparse.ArgumentParser() 45420c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi parser.add_argument('--foo') 45430c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi args, extras = parser.parse_known_args('--foo F --bar --baz'.split()) 45440c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi self.assertEqual(NS(foo='F'), args) 45450c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi self.assertEqual(['--bar', '--baz'], extras) 45460c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi 45470c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi def test_mixed(self): 45480c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi parser = argparse.ArgumentParser() 45490c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi parser.add_argument('-v', nargs='?', const=1, type=int) 45500c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi parser.add_argument('--spam', action='store_false') 45510c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi parser.add_argument('badger') 45520c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi 45530c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi argv = ["B", "C", "--foo", "-v", "3", "4"] 45540c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi args, extras = parser.parse_known_args(argv) 45550c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi self.assertEqual(NS(v=3, spam=True, badger="B"), args) 45560c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi self.assertEqual(["C", "--foo", "4"], extras) 45570c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi 45580c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi# ========================== 45590c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi# add_argument metavar tests 45600c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi# ========================== 45610c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi 45620c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yiclass TestAddArgumentMetavar(TestCase): 45630c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi 45640c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi EXPECTED_MESSAGE = "length of metavar tuple does not match nargs" 45650c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi 45660c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi def do_test_no_exception(self, nargs, metavar): 45670c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi parser = argparse.ArgumentParser() 45680c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi parser.add_argument("--foo", nargs=nargs, metavar=metavar) 45690c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi 45700c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi def do_test_exception(self, nargs, metavar): 45710c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi parser = argparse.ArgumentParser() 45720c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi with self.assertRaises(ValueError) as cm: 45730c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi parser.add_argument("--foo", nargs=nargs, metavar=metavar) 45740c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi self.assertEqual(cm.exception.args[0], self.EXPECTED_MESSAGE) 45750c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi 45760c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi # Unit tests for different values of metavar when nargs=None 45770c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi 45780c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi def test_nargs_None_metavar_string(self): 45790c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi self.do_test_no_exception(nargs=None, metavar="1") 45800c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi 45810c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi def test_nargs_None_metavar_length0(self): 45820c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi self.do_test_exception(nargs=None, metavar=tuple()) 45830c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi 45840c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi def test_nargs_None_metavar_length1(self): 45850c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi self.do_test_no_exception(nargs=None, metavar=("1")) 45860c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi 45870c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi def test_nargs_None_metavar_length2(self): 45880c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi self.do_test_exception(nargs=None, metavar=("1", "2")) 45890c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi 45900c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi def test_nargs_None_metavar_length3(self): 45910c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi self.do_test_exception(nargs=None, metavar=("1", "2", "3")) 45920c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi 45930c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi # Unit tests for different values of metavar when nargs=? 45940c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi 45950c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi def test_nargs_optional_metavar_string(self): 45960c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi self.do_test_no_exception(nargs="?", metavar="1") 45970c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi 45980c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi def test_nargs_optional_metavar_length0(self): 45990c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi self.do_test_exception(nargs="?", metavar=tuple()) 46000c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi 46010c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi def test_nargs_optional_metavar_length1(self): 46020c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi self.do_test_no_exception(nargs="?", metavar=("1")) 46030c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi 46040c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi def test_nargs_optional_metavar_length2(self): 46050c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi self.do_test_exception(nargs="?", metavar=("1", "2")) 46060c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi 46070c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi def test_nargs_optional_metavar_length3(self): 46080c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi self.do_test_exception(nargs="?", metavar=("1", "2", "3")) 46090c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi 46100c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi # Unit tests for different values of metavar when nargs=* 46110c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi 46120c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi def test_nargs_zeroormore_metavar_string(self): 46130c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi self.do_test_no_exception(nargs="*", metavar="1") 46140c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi 46150c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi def test_nargs_zeroormore_metavar_length0(self): 46160c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi self.do_test_exception(nargs="*", metavar=tuple()) 46170c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi 46180c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi def test_nargs_zeroormore_metavar_length1(self): 46190c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi self.do_test_no_exception(nargs="*", metavar=("1")) 46200c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi 46210c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi def test_nargs_zeroormore_metavar_length2(self): 46220c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi self.do_test_no_exception(nargs="*", metavar=("1", "2")) 46230c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi 46240c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi def test_nargs_zeroormore_metavar_length3(self): 46250c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi self.do_test_exception(nargs="*", metavar=("1", "2", "3")) 46260c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi 46270c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi # Unit tests for different values of metavar when nargs=+ 46280c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi 46290c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi def test_nargs_oneormore_metavar_string(self): 46300c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi self.do_test_no_exception(nargs="+", metavar="1") 46310c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi 46320c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi def test_nargs_oneormore_metavar_length0(self): 46330c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi self.do_test_exception(nargs="+", metavar=tuple()) 46340c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi 46350c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi def test_nargs_oneormore_metavar_length1(self): 46360c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi self.do_test_no_exception(nargs="+", metavar=("1")) 46370c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi 46380c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi def test_nargs_oneormore_metavar_length2(self): 46390c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi self.do_test_no_exception(nargs="+", metavar=("1", "2")) 46400c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi 46410c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi def test_nargs_oneormore_metavar_length3(self): 46420c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi self.do_test_exception(nargs="+", metavar=("1", "2", "3")) 46430c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi 46440c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi # Unit tests for different values of metavar when nargs=... 46450c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi 46460c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi def test_nargs_remainder_metavar_string(self): 46470c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi self.do_test_no_exception(nargs="...", metavar="1") 46480c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi 46490c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi def test_nargs_remainder_metavar_length0(self): 46500c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi self.do_test_no_exception(nargs="...", metavar=tuple()) 46510c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi 46520c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi def test_nargs_remainder_metavar_length1(self): 46530c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi self.do_test_no_exception(nargs="...", metavar=("1")) 46540c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi 46550c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi def test_nargs_remainder_metavar_length2(self): 46560c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi self.do_test_no_exception(nargs="...", metavar=("1", "2")) 46570c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi 46580c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi def test_nargs_remainder_metavar_length3(self): 46590c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi self.do_test_no_exception(nargs="...", metavar=("1", "2", "3")) 46600c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi 46610c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi # Unit tests for different values of metavar when nargs=A... 46620c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi 46630c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi def test_nargs_parser_metavar_string(self): 46640c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi self.do_test_no_exception(nargs="A...", metavar="1") 46650c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi 46660c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi def test_nargs_parser_metavar_length0(self): 46670c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi self.do_test_exception(nargs="A...", metavar=tuple()) 46680c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi 46690c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi def test_nargs_parser_metavar_length1(self): 46700c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi self.do_test_no_exception(nargs="A...", metavar=("1")) 46710c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi 46720c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi def test_nargs_parser_metavar_length2(self): 46730c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi self.do_test_exception(nargs="A...", metavar=("1", "2")) 46740c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi 46750c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi def test_nargs_parser_metavar_length3(self): 46760c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi self.do_test_exception(nargs="A...", metavar=("1", "2", "3")) 46770c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi 46780c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi # Unit tests for different values of metavar when nargs=1 46790c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi 46800c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi def test_nargs_1_metavar_string(self): 46810c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi self.do_test_no_exception(nargs=1, metavar="1") 46820c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi 46830c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi def test_nargs_1_metavar_length0(self): 46840c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi self.do_test_exception(nargs=1, metavar=tuple()) 46850c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi 46860c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi def test_nargs_1_metavar_length1(self): 46870c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi self.do_test_no_exception(nargs=1, metavar=("1")) 46880c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi 46890c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi def test_nargs_1_metavar_length2(self): 46900c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi self.do_test_exception(nargs=1, metavar=("1", "2")) 46910c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi 46920c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi def test_nargs_1_metavar_length3(self): 46930c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi self.do_test_exception(nargs=1, metavar=("1", "2", "3")) 46940c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi 46950c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi # Unit tests for different values of metavar when nargs=2 46960c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi 46970c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi def test_nargs_2_metavar_string(self): 46980c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi self.do_test_no_exception(nargs=2, metavar="1") 46990c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi 47000c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi def test_nargs_2_metavar_length0(self): 47010c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi self.do_test_exception(nargs=2, metavar=tuple()) 47020c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi 47030c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi def test_nargs_2_metavar_length1(self): 47040c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi self.do_test_no_exception(nargs=2, metavar=("1")) 47050c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi 47060c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi def test_nargs_2_metavar_length2(self): 47070c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi self.do_test_no_exception(nargs=2, metavar=("1", "2")) 47080c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi 47090c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi def test_nargs_2_metavar_length3(self): 47100c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi self.do_test_exception(nargs=2, metavar=("1", "2", "3")) 47110c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi 47120c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi # Unit tests for different values of metavar when nargs=3 47130c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi 47140c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi def test_nargs_3_metavar_string(self): 47150c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi self.do_test_no_exception(nargs=3, metavar="1") 47160c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi 47170c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi def test_nargs_3_metavar_length0(self): 47180c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi self.do_test_exception(nargs=3, metavar=tuple()) 47190c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi 47200c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi def test_nargs_3_metavar_length1(self): 47210c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi self.do_test_no_exception(nargs=3, metavar=("1")) 47220c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi 47230c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi def test_nargs_3_metavar_length2(self): 47240c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi self.do_test_exception(nargs=3, metavar=("1", "2")) 47250c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi 47260c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi def test_nargs_3_metavar_length3(self): 47270c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi self.do_test_no_exception(nargs=3, metavar=("1", "2", "3")) 47280c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi 47290c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi# ============================ 47300c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi# from argparse import * tests 47310c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi# ============================ 47320c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi 47330c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yiclass TestImportStar(TestCase): 47340c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi 47350c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi def test(self): 47360c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi for name in argparse.__all__: 47370c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi self.assertTrue(hasattr(argparse, name)) 47380c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi 47390c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi def test_all_exports_everything_but_modules(self): 47400c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi items = [ 47410c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi name 47420c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi for name, value in vars(argparse).items() 47430c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi if not name.startswith("_") 47440c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi if not inspect.ismodule(value) 47450c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi ] 47460c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi self.assertEqual(sorted(items), sorted(argparse.__all__)) 47470c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi 47480c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yidef test_main(): 47490c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi # silence warnings about version argument - these are expected 47500c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi with test_support.check_warnings( 47510c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi ('The "version" argument to ArgumentParser is deprecated.', 47520c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi DeprecationWarning), 47530c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi ('The (format|print)_version method is deprecated', 47540c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi DeprecationWarning)): 47550c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi test_support.run_unittest(__name__) 47560c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi # Remove global references to avoid looking like we have refleaks. 47570c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi RFile.seen = {} 47580c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi WFile.seen = set() 47590c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi 47600c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi 47610c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi 47620c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yiif __name__ == '__main__': 47630c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi test_main() 4764