annotate Lib/test/test_argparse.py @ 80661:94de77bd0b4b 2.7

Issue #16194: document imp.load_dynamic problems when read several extension modules from the same binary object file.
author Andrew Svetlov <andrew.svetlov@gmail.com>
date Thu, 29 Nov 2012 19:51:28 +0200
parents 8f847f66a49f
children
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
59989
2e0813d6738d Replace license with simple attribution.
Steven Bethard <steven.bethard@gmail.com>
parents: 59423
diff changeset
1 # Author: Steven J. Bethard <steven.bethard@gmail.com>.
59267
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
2
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
3 import codecs
65864
493a2d407c94 Merged revisions 86086 via svnmerge from
Steven Bethard <steven.bethard@gmail.com>
parents: 65860
diff changeset
4 import inspect
59267
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
5 import os
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
6 import shutil
67744
7f9a98f766d7 Issue #9509: make argarse properly handle IOErrors raised by argparse.FileType. Approved by Georg in the tracker.
Steven Bethard <steven.bethard@gmail.com>
parents: 66348
diff changeset
7 import stat
59267
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
8 import sys
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
9 import textwrap
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
10 import tempfile
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
11 import unittest
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
12 import argparse
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
13
59281
eba942e77895 remove cross-version compatibility code
Benjamin Peterson <benjamin@python.org>
parents: 59280
diff changeset
14 from StringIO import StringIO
eba942e77895 remove cross-version compatibility code
Benjamin Peterson <benjamin@python.org>
parents: 59280
diff changeset
15
60453
2e8d2d7c43c0 Switch regrtest to use StringIO instead of cStringIO for test_multiprocessing on Windows. Issue 8333.
Michael Foord <fuzzyman@voidspace.org.uk>
parents: 60116
diff changeset
16 class StdIOBuffer(StringIO):
2e8d2d7c43c0 Switch regrtest to use StringIO instead of cStringIO for test_multiprocessing on Windows. Issue 8333.
Michael Foord <fuzzyman@voidspace.org.uk>
parents: 60116
diff changeset
17 pass
2e8d2d7c43c0 Switch regrtest to use StringIO instead of cStringIO for test_multiprocessing on Windows. Issue 8333.
Michael Foord <fuzzyman@voidspace.org.uk>
parents: 60116
diff changeset
18
59270
82eda345a5f6 enable running of argparse tests and fix two that failed in the new environment
Benjamin Peterson <benjamin@python.org>
parents: 59268
diff changeset
19 from test import test_support
82eda345a5f6 enable running of argparse tests and fix two that failed in the new environment
Benjamin Peterson <benjamin@python.org>
parents: 59268
diff changeset
20
59267
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
21 class TestCase(unittest.TestCase):
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
22
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
23 def assertEqual(self, obj1, obj2):
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
24 if obj1 != obj2:
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
25 print('')
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
26 print(repr(obj1))
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
27 print(repr(obj2))
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
28 print(obj1)
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
29 print(obj2)
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
30 super(TestCase, self).assertEqual(obj1, obj2)
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
31
65860
9db857960402 Merged revisions 86080 via svnmerge from
Steven Bethard <steven.bethard@gmail.com>
parents: 65333
diff changeset
32 def setUp(self):
9db857960402 Merged revisions 86080 via svnmerge from
Steven Bethard <steven.bethard@gmail.com>
parents: 65333
diff changeset
33 # The tests assume that line wrapping occurs at 80 columns, but this
9db857960402 Merged revisions 86080 via svnmerge from
Steven Bethard <steven.bethard@gmail.com>
parents: 65333
diff changeset
34 # behaviour can be overridden by setting the COLUMNS environment
9db857960402 Merged revisions 86080 via svnmerge from
Steven Bethard <steven.bethard@gmail.com>
parents: 65333
diff changeset
35 # variable. To ensure that this assumption is true, unset COLUMNS.
9db857960402 Merged revisions 86080 via svnmerge from
Steven Bethard <steven.bethard@gmail.com>
parents: 65333
diff changeset
36 env = test_support.EnvironmentVarGuard()
9db857960402 Merged revisions 86080 via svnmerge from
Steven Bethard <steven.bethard@gmail.com>
parents: 65333
diff changeset
37 env.unset("COLUMNS")
9db857960402 Merged revisions 86080 via svnmerge from
Steven Bethard <steven.bethard@gmail.com>
parents: 65333
diff changeset
38 self.addCleanup(env.__exit__)
59267
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
39
60453
2e8d2d7c43c0 Switch regrtest to use StringIO instead of cStringIO for test_multiprocessing on Windows. Issue 8333.
Michael Foord <fuzzyman@voidspace.org.uk>
parents: 60116
diff changeset
40
59267
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
41 class TempDirMixin(object):
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
42
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
43 def setUp(self):
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
44 self.temp_dir = tempfile.mkdtemp()
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
45 self.old_dir = os.getcwd()
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
46 os.chdir(self.temp_dir)
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
47
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
48 def tearDown(self):
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
49 os.chdir(self.old_dir)
67744
7f9a98f766d7 Issue #9509: make argarse properly handle IOErrors raised by argparse.FileType. Approved by Georg in the tracker.
Steven Bethard <steven.bethard@gmail.com>
parents: 66348
diff changeset
50 shutil.rmtree(self.temp_dir, True)
7f9a98f766d7 Issue #9509: make argarse properly handle IOErrors raised by argparse.FileType. Approved by Georg in the tracker.
Steven Bethard <steven.bethard@gmail.com>
parents: 66348
diff changeset
51
7f9a98f766d7 Issue #9509: make argarse properly handle IOErrors raised by argparse.FileType. Approved by Georg in the tracker.
Steven Bethard <steven.bethard@gmail.com>
parents: 66348
diff changeset
52 def create_readonly_file(self, filename):
7f9a98f766d7 Issue #9509: make argarse properly handle IOErrors raised by argparse.FileType. Approved by Georg in the tracker.
Steven Bethard <steven.bethard@gmail.com>
parents: 66348
diff changeset
53 file_path = os.path.join(self.temp_dir, filename)
7f9a98f766d7 Issue #9509: make argarse properly handle IOErrors raised by argparse.FileType. Approved by Georg in the tracker.
Steven Bethard <steven.bethard@gmail.com>
parents: 66348
diff changeset
54 with open(file_path, 'w') as file:
7f9a98f766d7 Issue #9509: make argarse properly handle IOErrors raised by argparse.FileType. Approved by Georg in the tracker.
Steven Bethard <steven.bethard@gmail.com>
parents: 66348
diff changeset
55 file.write(filename)
7f9a98f766d7 Issue #9509: make argarse properly handle IOErrors raised by argparse.FileType. Approved by Georg in the tracker.
Steven Bethard <steven.bethard@gmail.com>
parents: 66348
diff changeset
56 os.chmod(file_path, stat.S_IREAD)
59267
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
57
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
58 class Sig(object):
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
59
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
60 def __init__(self, *args, **kwargs):
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
61 self.args = args
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
62 self.kwargs = kwargs
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
63
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
64
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
65 class NS(object):
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
66
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
67 def __init__(self, **kwargs):
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
68 self.__dict__.update(kwargs)
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
69
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
70 def __repr__(self):
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
71 sorted_items = sorted(self.__dict__.items())
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
72 kwarg_str = ', '.join(['%s=%r' % tup for tup in sorted_items])
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
73 return '%s(%s)' % (type(self).__name__, kwarg_str)
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
74
59423
0802bc973b32 eliminate py3k warnings in argparse
Benjamin Peterson <benjamin@python.org>
parents: 59284
diff changeset
75 __hash__ = None
0802bc973b32 eliminate py3k warnings in argparse
Benjamin Peterson <benjamin@python.org>
parents: 59284
diff changeset
76
59267
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
77 def __eq__(self, other):
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
78 return vars(self) == vars(other)
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
79
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
80 def __ne__(self, other):
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
81 return not (self == other)
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
82
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
83
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
84 class ArgumentParserError(Exception):
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
85
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
86 def __init__(self, message, stdout=None, stderr=None, error_code=None):
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
87 Exception.__init__(self, message, stdout, stderr)
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
88 self.message = message
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
89 self.stdout = stdout
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
90 self.stderr = stderr
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
91 self.error_code = error_code
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
92
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
93
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
94 def stderr_to_parser_error(parse_args, *args, **kwargs):
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
95 # if this is being called recursively and stderr or stdout is already being
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
96 # redirected, simply call the function and let the enclosing function
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
97 # catch the exception
60453
2e8d2d7c43c0 Switch regrtest to use StringIO instead of cStringIO for test_multiprocessing on Windows. Issue 8333.
Michael Foord <fuzzyman@voidspace.org.uk>
parents: 60116
diff changeset
98 if isinstance(sys.stderr, StdIOBuffer) or isinstance(sys.stdout, StdIOBuffer):
59267
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
99 return parse_args(*args, **kwargs)
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
100
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
101 # if this is not being called recursively, redirect stderr and
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
102 # use it as the ArgumentParserError message
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
103 old_stdout = sys.stdout
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
104 old_stderr = sys.stderr
60453
2e8d2d7c43c0 Switch regrtest to use StringIO instead of cStringIO for test_multiprocessing on Windows. Issue 8333.
Michael Foord <fuzzyman@voidspace.org.uk>
parents: 60116
diff changeset
105 sys.stdout = StdIOBuffer()
2e8d2d7c43c0 Switch regrtest to use StringIO instead of cStringIO for test_multiprocessing on Windows. Issue 8333.
Michael Foord <fuzzyman@voidspace.org.uk>
parents: 60116
diff changeset
106 sys.stderr = StdIOBuffer()
59267
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
107 try:
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
108 try:
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
109 result = parse_args(*args, **kwargs)
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
110 for key in list(vars(result)):
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
111 if getattr(result, key) is sys.stdout:
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
112 setattr(result, key, old_stdout)
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
113 if getattr(result, key) is sys.stderr:
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
114 setattr(result, key, old_stderr)
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
115 return result
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
116 except SystemExit:
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
117 code = sys.exc_info()[1].code
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
118 stdout = sys.stdout.getvalue()
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
119 stderr = sys.stderr.getvalue()
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
120 raise ArgumentParserError("SystemExit", stdout, stderr, code)
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
121 finally:
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
122 sys.stdout = old_stdout
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
123 sys.stderr = old_stderr
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
124
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
125
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
126 class ErrorRaisingArgumentParser(argparse.ArgumentParser):
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
127
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
128 def parse_args(self, *args, **kwargs):
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
129 parse_args = super(ErrorRaisingArgumentParser, self).parse_args
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
130 return stderr_to_parser_error(parse_args, *args, **kwargs)
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
131
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
132 def exit(self, *args, **kwargs):
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
133 exit = super(ErrorRaisingArgumentParser, self).exit
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
134 return stderr_to_parser_error(exit, *args, **kwargs)
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
135
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
136 def error(self, *args, **kwargs):
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
137 error = super(ErrorRaisingArgumentParser, self).error
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
138 return stderr_to_parser_error(error, *args, **kwargs)
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
139
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
140
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
141 class ParserTesterMetaclass(type):
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
142 """Adds parser tests using the class attributes.
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
143
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
144 Classes of this type should specify the following attributes:
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
145
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
146 argument_signatures -- a list of Sig objects which specify
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
147 the signatures of Argument objects to be created
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
148 failures -- a list of args lists that should cause the parser
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
149 to fail
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
150 successes -- a list of (initial_args, options, remaining_args) tuples
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
151 where initial_args specifies the string args to be parsed,
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
152 options is a dict that should match the vars() of the options
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
153 parsed out of initial_args, and remaining_args should be any
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
154 remaining unparsed arguments
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
155 """
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
156
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
157 def __init__(cls, name, bases, bodydict):
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
158 if name == 'ParserTestCase':
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
159 return
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
160
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
161 # default parser signature is empty
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
162 if not hasattr(cls, 'parser_signature'):
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
163 cls.parser_signature = Sig()
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
164 if not hasattr(cls, 'parser_class'):
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
165 cls.parser_class = ErrorRaisingArgumentParser
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
166
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
167 # ---------------------------------------
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
168 # functions for adding optional arguments
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
169 # ---------------------------------------
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
170 def no_groups(parser, argument_signatures):
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
171 """Add all arguments directly to the parser"""
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
172 for sig in argument_signatures:
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
173 parser.add_argument(*sig.args, **sig.kwargs)
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
174
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
175 def one_group(parser, argument_signatures):
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
176 """Add all arguments under a single group in the parser"""
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
177 group = parser.add_argument_group('foo')
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
178 for sig in argument_signatures:
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
179 group.add_argument(*sig.args, **sig.kwargs)
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
180
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
181 def many_groups(parser, argument_signatures):
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
182 """Add each argument in its own group to the parser"""
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
183 for i, sig in enumerate(argument_signatures):
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
184 group = parser.add_argument_group('foo:%i' % i)
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
185 group.add_argument(*sig.args, **sig.kwargs)
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
186
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
187 # --------------------------
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
188 # functions for parsing args
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
189 # --------------------------
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
190 def listargs(parser, args):
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
191 """Parse the args by passing in a list"""
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
192 return parser.parse_args(args)
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
193
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
194 def sysargs(parser, args):
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
195 """Parse the args by defaulting to sys.argv"""
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
196 old_sys_argv = sys.argv
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
197 sys.argv = [old_sys_argv[0]] + args
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
198 try:
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
199 return parser.parse_args()
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
200 finally:
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
201 sys.argv = old_sys_argv
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
202
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
203 # class that holds the combination of one optional argument
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
204 # addition method and one arg parsing method
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
205 class AddTests(object):
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
206
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
207 def __init__(self, tester_cls, add_arguments, parse_args):
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
208 self._add_arguments = add_arguments
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
209 self._parse_args = parse_args
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
210
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
211 add_arguments_name = self._add_arguments.__name__
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
212 parse_args_name = self._parse_args.__name__
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
213 for test_func in [self.test_failures, self.test_successes]:
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
214 func_name = test_func.__name__
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
215 names = func_name, add_arguments_name, parse_args_name
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
216 test_name = '_'.join(names)
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
217
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
218 def wrapper(self, test_func=test_func):
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
219 test_func(self)
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
220 try:
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
221 wrapper.__name__ = test_name
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
222 except TypeError:
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
223 pass
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
224 setattr(tester_cls, test_name, wrapper)
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
225
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
226 def _get_parser(self, tester):
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
227 args = tester.parser_signature.args
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
228 kwargs = tester.parser_signature.kwargs
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
229 parser = tester.parser_class(*args, **kwargs)
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
230 self._add_arguments(parser, tester.argument_signatures)
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
231 return parser
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
232
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
233 def test_failures(self, tester):
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
234 parser = self._get_parser(tester)
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
235 for args_str in tester.failures:
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
236 args = args_str.split()
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
237 raises = tester.assertRaises
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
238 raises(ArgumentParserError, parser.parse_args, args)
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
239
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
240 def test_successes(self, tester):
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
241 parser = self._get_parser(tester)
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
242 for args, expected_ns in tester.successes:
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
243 if isinstance(args, str):
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
244 args = args.split()
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
245 result_ns = self._parse_args(parser, args)
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
246 tester.assertEqual(expected_ns, result_ns)
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
247
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
248 # add tests for each combination of an optionals adding method
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
249 # and an arg parsing method
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
250 for add_arguments in [no_groups, one_group, many_groups]:
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
251 for parse_args in [listargs, sysargs]:
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
252 AddTests(cls, add_arguments, parse_args)
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
253
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
254 bases = TestCase,
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
255 ParserTestCase = ParserTesterMetaclass('ParserTestCase', bases, {})
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
256
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
257 # ===============
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
258 # Optionals tests
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
259 # ===============
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
260
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
261 class TestOptionalsSingleDash(ParserTestCase):
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
262 """Test an Optional with a single-dash option string"""
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
263
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
264 argument_signatures = [Sig('-x')]
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
265 failures = ['-x', 'a', '--foo', '-x --foo', '-x -y']
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
266 successes = [
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
267 ('', NS(x=None)),
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
268 ('-x a', NS(x='a')),
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
269 ('-xa', NS(x='a')),
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
270 ('-x -1', NS(x='-1')),
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
271 ('-x-1', NS(x='-1')),
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
272 ]
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
273
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
274
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
275 class TestOptionalsSingleDashCombined(ParserTestCase):
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
276 """Test an Optional with a single-dash option string"""
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
277
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
278 argument_signatures = [
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
279 Sig('-x', action='store_true'),
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
280 Sig('-yyy', action='store_const', const=42),
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
281 Sig('-z'),
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
282 ]
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
283 failures = ['a', '--foo', '-xa', '-x --foo', '-x -z', '-z -x',
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
284 '-yx', '-yz a', '-yyyx', '-yyyza', '-xyza']
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
285 successes = [
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
286 ('', NS(x=False, yyy=None, z=None)),
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
287 ('-x', NS(x=True, yyy=None, z=None)),
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
288 ('-za', NS(x=False, yyy=None, z='a')),
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
289 ('-z a', NS(x=False, yyy=None, z='a')),
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
290 ('-xza', NS(x=True, yyy=None, z='a')),
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
291 ('-xz a', NS(x=True, yyy=None, z='a')),
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
292 ('-x -za', NS(x=True, yyy=None, z='a')),
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
293 ('-x -z a', NS(x=True, yyy=None, z='a')),
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
294 ('-y', NS(x=False, yyy=42, z=None)),
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
295 ('-yyy', NS(x=False, yyy=42, z=None)),
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
296 ('-x -yyy -za', NS(x=True, yyy=42, z='a')),
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
297 ('-x -yyy -z a', NS(x=True, yyy=42, z='a')),
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
298 ]
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
299
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
300
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
301 class TestOptionalsSingleDashLong(ParserTestCase):
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
302 """Test an Optional with a multi-character single-dash option string"""
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
303
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
304 argument_signatures = [Sig('-foo')]
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
305 failures = ['-foo', 'a', '--foo', '-foo --foo', '-foo -y', '-fooa']
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
306 successes = [
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
307 ('', NS(foo=None)),
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
308 ('-foo a', NS(foo='a')),
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
309 ('-foo -1', NS(foo='-1')),
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
310 ('-fo a', NS(foo='a')),
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
311 ('-f a', NS(foo='a')),
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
312 ]
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
313
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
314
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
315 class TestOptionalsSingleDashSubsetAmbiguous(ParserTestCase):
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
316 """Test Optionals where option strings are subsets of each other"""
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
317
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
318 argument_signatures = [Sig('-f'), Sig('-foobar'), Sig('-foorab')]
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
319 failures = ['-f', '-foo', '-fo', '-foo b', '-foob', '-fooba', '-foora']
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
320 successes = [
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
321 ('', NS(f=None, foobar=None, foorab=None)),
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
322 ('-f a', NS(f='a', foobar=None, foorab=None)),
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
323 ('-fa', NS(f='a', foobar=None, foorab=None)),
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
324 ('-foa', NS(f='oa', foobar=None, foorab=None)),
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
325 ('-fooa', NS(f='ooa', foobar=None, foorab=None)),
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
326 ('-foobar a', NS(f=None, foobar='a', foorab=None)),
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
327 ('-foorab a', NS(f=None, foobar=None, foorab='a')),
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
328 ]
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
329
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
330
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
331 class TestOptionalsSingleDashAmbiguous(ParserTestCase):
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
332 """Test Optionals that partially match but are not subsets"""
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
333
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
334 argument_signatures = [Sig('-foobar'), Sig('-foorab')]
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
335 failures = ['-f', '-f a', '-fa', '-foa', '-foo', '-fo', '-foo b']
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
336 successes = [
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
337 ('', NS(foobar=None, foorab=None)),
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
338 ('-foob a', NS(foobar='a', foorab=None)),
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
339 ('-foor a', NS(foobar=None, foorab='a')),
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
340 ('-fooba a', NS(foobar='a', foorab=None)),
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
341 ('-foora a', NS(foobar=None, foorab='a')),
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
342 ('-foobar a', NS(foobar='a', foorab=None)),
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
343 ('-foorab a', NS(foobar=None, foorab='a')),
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
344 ]
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
345
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
346
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
347 class TestOptionalsNumeric(ParserTestCase):
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
348 """Test an Optional with a short opt string"""
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
349
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
350 argument_signatures = [Sig('-1', dest='one')]
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
351 failures = ['-1', 'a', '-1 --foo', '-1 -y', '-1 -1', '-1 -2']
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
352 successes = [
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
353 ('', NS(one=None)),
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
354 ('-1 a', NS(one='a')),
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
355 ('-1a', NS(one='a')),
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
356 ('-1-2', NS(one='-2')),
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
357 ]
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
358
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
359
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
360 class TestOptionalsDoubleDash(ParserTestCase):
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
361 """Test an Optional with a double-dash option string"""
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
362
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
363 argument_signatures = [Sig('--foo')]
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
364 failures = ['--foo', '-f', '-f a', 'a', '--foo -x', '--foo --bar']
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
365 successes = [
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
366 ('', NS(foo=None)),
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
367 ('--foo a', NS(foo='a')),
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
368 ('--foo=a', NS(foo='a')),
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
369 ('--foo -2.5', NS(foo='-2.5')),
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
370 ('--foo=-2.5', NS(foo='-2.5')),
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
371 ]
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
372
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
373
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
374 class TestOptionalsDoubleDashPartialMatch(ParserTestCase):
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
375 """Tests partial matching with a double-dash option string"""
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
376
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
377 argument_signatures = [
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
378 Sig('--badger', action='store_true'),
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
379 Sig('--bat'),
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
380 ]
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
381 failures = ['--bar', '--b', '--ba', '--b=2', '--ba=4', '--badge 5']
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
382 successes = [
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
383 ('', NS(badger=False, bat=None)),
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
384 ('--bat X', NS(badger=False, bat='X')),
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
385 ('--bad', NS(badger=True, bat=None)),
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
386 ('--badg', NS(badger=True, bat=None)),
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
387 ('--badge', NS(badger=True, bat=None)),
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
388 ('--badger', NS(badger=True, bat=None)),
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
389 ]
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
390
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
391
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
392 class TestOptionalsDoubleDashPrefixMatch(ParserTestCase):
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
393 """Tests when one double-dash option string is a prefix of another"""
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
394
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
395 argument_signatures = [
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
396 Sig('--badger', action='store_true'),
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
397 Sig('--ba'),
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
398 ]
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
399 failures = ['--bar', '--b', '--ba', '--b=2', '--badge 5']
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
400 successes = [
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
401 ('', NS(badger=False, ba=None)),
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
402 ('--ba X', NS(badger=False, ba='X')),
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
403 ('--ba=X', NS(badger=False, ba='X')),
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
404 ('--bad', NS(badger=True, ba=None)),
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
405 ('--badg', NS(badger=True, ba=None)),
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
406 ('--badge', NS(badger=True, ba=None)),
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
407 ('--badger', NS(badger=True, ba=None)),
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
408 ]
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
409
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
410
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
411 class TestOptionalsSingleDoubleDash(ParserTestCase):
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
412 """Test an Optional with single- and double-dash option strings"""
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
413
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
414 argument_signatures = [
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
415 Sig('-f', action='store_true'),
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
416 Sig('--bar'),
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
417 Sig('-baz', action='store_const', const=42),
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
418 ]
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
419 failures = ['--bar', '-fbar', '-fbaz', '-bazf', '-b B', 'B']
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
420 successes = [
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
421 ('', NS(f=False, bar=None, baz=None)),
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
422 ('-f', NS(f=True, bar=None, baz=None)),
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
423 ('--ba B', NS(f=False, bar='B', baz=None)),
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
424 ('-f --bar B', NS(f=True, bar='B', baz=None)),
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
425 ('-f -b', NS(f=True, bar=None, baz=42)),
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
426 ('-ba -f', NS(f=True, bar=None, baz=42)),
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
427 ]
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
428
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
429
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
430 class TestOptionalsAlternatePrefixChars(ParserTestCase):
63691
23c089dc5cff Merged revisions 83675 via svnmerge from
R. David Murray <rdmurray@bitdance.com>
parents: 61879
diff changeset
431 """Test an Optional with option strings with custom prefixes"""
59267
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
432
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
433 parser_signature = Sig(prefix_chars='+:/', add_help=False)
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
434 argument_signatures = [
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
435 Sig('+f', action='store_true'),
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
436 Sig('::bar'),
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
437 Sig('/baz', action='store_const', const=42),
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
438 ]
63691
23c089dc5cff Merged revisions 83675 via svnmerge from
R. David Murray <rdmurray@bitdance.com>
parents: 61879
diff changeset
439 failures = ['--bar', '-fbar', '-b B', 'B', '-f', '--bar B', '-baz', '-h', '--help', '+h', '::help', '/help']
23c089dc5cff Merged revisions 83675 via svnmerge from
R. David Murray <rdmurray@bitdance.com>
parents: 61879
diff changeset
440 successes = [
23c089dc5cff Merged revisions 83675 via svnmerge from
R. David Murray <rdmurray@bitdance.com>
parents: 61879
diff changeset
441 ('', NS(f=False, bar=None, baz=None)),
23c089dc5cff Merged revisions 83675 via svnmerge from
R. David Murray <rdmurray@bitdance.com>
parents: 61879
diff changeset
442 ('+f', NS(f=True, bar=None, baz=None)),
23c089dc5cff Merged revisions 83675 via svnmerge from
R. David Murray <rdmurray@bitdance.com>
parents: 61879
diff changeset
443 ('::ba B', NS(f=False, bar='B', baz=None)),
23c089dc5cff Merged revisions 83675 via svnmerge from
R. David Murray <rdmurray@bitdance.com>
parents: 61879
diff changeset
444 ('+f ::bar B', NS(f=True, bar='B', baz=None)),
23c089dc5cff Merged revisions 83675 via svnmerge from
R. David Murray <rdmurray@bitdance.com>
parents: 61879
diff changeset
445 ('+f /b', NS(f=True, bar=None, baz=42)),
23c089dc5cff Merged revisions 83675 via svnmerge from
R. David Murray <rdmurray@bitdance.com>
parents: 61879
diff changeset
446 ('/ba +f', NS(f=True, bar=None, baz=42)),
23c089dc5cff Merged revisions 83675 via svnmerge from
R. David Murray <rdmurray@bitdance.com>
parents: 61879
diff changeset
447 ]
23c089dc5cff Merged revisions 83675 via svnmerge from
R. David Murray <rdmurray@bitdance.com>
parents: 61879
diff changeset
448
23c089dc5cff Merged revisions 83675 via svnmerge from
R. David Murray <rdmurray@bitdance.com>
parents: 61879
diff changeset
449
23c089dc5cff Merged revisions 83675 via svnmerge from
R. David Murray <rdmurray@bitdance.com>
parents: 61879
diff changeset
450 class TestOptionalsAlternatePrefixCharsAddedHelp(ParserTestCase):
23c089dc5cff Merged revisions 83675 via svnmerge from
R. David Murray <rdmurray@bitdance.com>
parents: 61879
diff changeset
451 """When ``-`` not in prefix_chars, default operators created for help
23c089dc5cff Merged revisions 83675 via svnmerge from
R. David Murray <rdmurray@bitdance.com>
parents: 61879
diff changeset
452 should use the prefix_chars in use rather than - or --
23c089dc5cff Merged revisions 83675 via svnmerge from
R. David Murray <rdmurray@bitdance.com>
parents: 61879
diff changeset
453 http://bugs.python.org/issue9444"""
23c089dc5cff Merged revisions 83675 via svnmerge from
R. David Murray <rdmurray@bitdance.com>
parents: 61879
diff changeset
454
23c089dc5cff Merged revisions 83675 via svnmerge from
R. David Murray <rdmurray@bitdance.com>
parents: 61879
diff changeset
455 parser_signature = Sig(prefix_chars='+:/', add_help=True)
23c089dc5cff Merged revisions 83675 via svnmerge from
R. David Murray <rdmurray@bitdance.com>
parents: 61879
diff changeset
456 argument_signatures = [
23c089dc5cff Merged revisions 83675 via svnmerge from
R. David Murray <rdmurray@bitdance.com>
parents: 61879
diff changeset
457 Sig('+f', action='store_true'),
23c089dc5cff Merged revisions 83675 via svnmerge from
R. David Murray <rdmurray@bitdance.com>
parents: 61879
diff changeset
458 Sig('::bar'),
23c089dc5cff Merged revisions 83675 via svnmerge from
R. David Murray <rdmurray@bitdance.com>
parents: 61879
diff changeset
459 Sig('/baz', action='store_const', const=42),
23c089dc5cff Merged revisions 83675 via svnmerge from
R. David Murray <rdmurray@bitdance.com>
parents: 61879
diff changeset
460 ]
59267
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
461 failures = ['--bar', '-fbar', '-b B', 'B', '-f', '--bar B', '-baz']
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
462 successes = [
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
463 ('', NS(f=False, bar=None, baz=None)),
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
464 ('+f', NS(f=True, bar=None, baz=None)),
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
465 ('::ba B', NS(f=False, bar='B', baz=None)),
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
466 ('+f ::bar B', NS(f=True, bar='B', baz=None)),
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
467 ('+f /b', NS(f=True, bar=None, baz=42)),
63691
23c089dc5cff Merged revisions 83675 via svnmerge from
R. David Murray <rdmurray@bitdance.com>
parents: 61879
diff changeset
468 ('/ba +f', NS(f=True, bar=None, baz=42))
59267
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
469 ]
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
470
65868
848912789b79 Merged revisions 86090 via svnmerge from
Steven Bethard <steven.bethard@gmail.com>
parents: 65864
diff changeset
471
848912789b79 Merged revisions 86090 via svnmerge from
Steven Bethard <steven.bethard@gmail.com>
parents: 65864
diff changeset
472 class TestOptionalsAlternatePrefixCharsMultipleShortArgs(ParserTestCase):
848912789b79 Merged revisions 86090 via svnmerge from
Steven Bethard <steven.bethard@gmail.com>
parents: 65864
diff changeset
473 """Verify that Optionals must be called with their defined prefixes"""
848912789b79 Merged revisions 86090 via svnmerge from
Steven Bethard <steven.bethard@gmail.com>
parents: 65864
diff changeset
474
848912789b79 Merged revisions 86090 via svnmerge from
Steven Bethard <steven.bethard@gmail.com>
parents: 65864
diff changeset
475 parser_signature = Sig(prefix_chars='+-', add_help=False)
848912789b79 Merged revisions 86090 via svnmerge from
Steven Bethard <steven.bethard@gmail.com>
parents: 65864
diff changeset
476 argument_signatures = [
848912789b79 Merged revisions 86090 via svnmerge from
Steven Bethard <steven.bethard@gmail.com>
parents: 65864
diff changeset
477 Sig('-x', action='store_true'),
848912789b79 Merged revisions 86090 via svnmerge from
Steven Bethard <steven.bethard@gmail.com>
parents: 65864
diff changeset
478 Sig('+y', action='store_true'),
848912789b79 Merged revisions 86090 via svnmerge from
Steven Bethard <steven.bethard@gmail.com>
parents: 65864
diff changeset
479 Sig('+z', action='store_true'),
848912789b79 Merged revisions 86090 via svnmerge from
Steven Bethard <steven.bethard@gmail.com>
parents: 65864
diff changeset
480 ]
848912789b79 Merged revisions 86090 via svnmerge from
Steven Bethard <steven.bethard@gmail.com>
parents: 65864
diff changeset
481 failures = ['-w',
848912789b79 Merged revisions 86090 via svnmerge from
Steven Bethard <steven.bethard@gmail.com>
parents: 65864
diff changeset
482 '-xyz',
848912789b79 Merged revisions 86090 via svnmerge from
Steven Bethard <steven.bethard@gmail.com>
parents: 65864
diff changeset
483 '+x',
848912789b79 Merged revisions 86090 via svnmerge from
Steven Bethard <steven.bethard@gmail.com>
parents: 65864
diff changeset
484 '-y',
848912789b79 Merged revisions 86090 via svnmerge from
Steven Bethard <steven.bethard@gmail.com>
parents: 65864
diff changeset
485 '+xyz',
848912789b79 Merged revisions 86090 via svnmerge from
Steven Bethard <steven.bethard@gmail.com>
parents: 65864
diff changeset
486 ]
848912789b79 Merged revisions 86090 via svnmerge from
Steven Bethard <steven.bethard@gmail.com>
parents: 65864
diff changeset
487 successes = [
848912789b79 Merged revisions 86090 via svnmerge from
Steven Bethard <steven.bethard@gmail.com>
parents: 65864
diff changeset
488 ('', NS(x=False, y=False, z=False)),
848912789b79 Merged revisions 86090 via svnmerge from
Steven Bethard <steven.bethard@gmail.com>
parents: 65864
diff changeset
489 ('-x', NS(x=True, y=False, z=False)),
848912789b79 Merged revisions 86090 via svnmerge from
Steven Bethard <steven.bethard@gmail.com>
parents: 65864
diff changeset
490 ('+y -x', NS(x=True, y=True, z=False)),
848912789b79 Merged revisions 86090 via svnmerge from
Steven Bethard <steven.bethard@gmail.com>
parents: 65864
diff changeset
491 ('+yz -x', NS(x=True, y=True, z=True)),
848912789b79 Merged revisions 86090 via svnmerge from
Steven Bethard <steven.bethard@gmail.com>
parents: 65864
diff changeset
492 ]
848912789b79 Merged revisions 86090 via svnmerge from
Steven Bethard <steven.bethard@gmail.com>
parents: 65864
diff changeset
493
848912789b79 Merged revisions 86090 via svnmerge from
Steven Bethard <steven.bethard@gmail.com>
parents: 65864
diff changeset
494
59267
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
495 class TestOptionalsShortLong(ParserTestCase):
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
496 """Test a combination of single- and double-dash option strings"""
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
497
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
498 argument_signatures = [
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
499 Sig('-v', '--verbose', '-n', '--noisy', action='store_true'),
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
500 ]
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
501 failures = ['--x --verbose', '-N', 'a', '-v x']
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
502 successes = [
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
503 ('', NS(verbose=False)),
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
504 ('-v', NS(verbose=True)),
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
505 ('--verbose', NS(verbose=True)),
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
506 ('-n', NS(verbose=True)),
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
507 ('--noisy', NS(verbose=True)),
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
508 ]
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
509
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
510
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
511 class TestOptionalsDest(ParserTestCase):
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
512 """Tests various means of setting destination"""
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
513
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
514 argument_signatures = [Sig('--foo-bar'), Sig('--baz', dest='zabbaz')]
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
515 failures = ['a']
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
516 successes = [
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
517 ('--foo-bar f', NS(foo_bar='f', zabbaz=None)),
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
518 ('--baz g', NS(foo_bar=None, zabbaz='g')),
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
519 ('--foo-bar h --baz i', NS(foo_bar='h', zabbaz='i')),
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
520 ('--baz j --foo-bar k', NS(foo_bar='k', zabbaz='j')),
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
521 ]
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
522
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
523
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
524 class TestOptionalsDefault(ParserTestCase):
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
525 """Tests specifying a default for an Optional"""
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
526
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
527 argument_signatures = [Sig('-x'), Sig('-y', default=42)]
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
528 failures = ['a']
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
529 successes = [
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
530 ('', NS(x=None, y=42)),
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
531 ('-xx', NS(x='x', y=42)),
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
532 ('-yy', NS(x=None, y='y')),
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
533 ]
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
534
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
535
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
536 class TestOptionalsNargsDefault(ParserTestCase):
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
537 """Tests not specifying the number of args for an Optional"""
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
538
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
539 argument_signatures = [Sig('-x')]
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
540 failures = ['a', '-x']
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
541 successes = [
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
542 ('', NS(x=None)),
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
543 ('-x a', NS(x='a')),
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
544 ]
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
545
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
546
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
547 class TestOptionalsNargs1(ParserTestCase):
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
548 """Tests specifying the 1 arg for an Optional"""
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
549
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
550 argument_signatures = [Sig('-x', nargs=1)]
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
551 failures = ['a', '-x']
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
552 successes = [
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
553 ('', NS(x=None)),
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
554 ('-x a', NS(x=['a'])),
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
555 ]
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
556
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
557
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
558 class TestOptionalsNargs3(ParserTestCase):
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
559 """Tests specifying the 3 args for an Optional"""
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
560
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
561 argument_signatures = [Sig('-x', nargs=3)]
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
562 failures = ['a', '-x', '-x a', '-x a b', 'a -x', 'a -x b']
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
563 successes = [
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
564 ('', NS(x=None)),
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
565 ('-x a b c', NS(x=['a', 'b', 'c'])),
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
566 ]
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
567
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
568
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
569 class TestOptionalsNargsOptional(ParserTestCase):
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
570 """Tests specifying an Optional arg for an Optional"""
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
571
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
572 argument_signatures = [
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
573 Sig('-w', nargs='?'),
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
574 Sig('-x', nargs='?', const=42),
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
575 Sig('-y', nargs='?', default='spam'),
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
576 Sig('-z', nargs='?', type=int, const='42', default='84'),
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
577 ]
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
578 failures = ['2']
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
579 successes = [
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
580 ('', NS(w=None, x=None, y='spam', z=84)),
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
581 ('-w', NS(w=None, x=None, y='spam', z=84)),
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
582 ('-w 2', NS(w='2', x=None, y='spam', z=84)),
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
583 ('-x', NS(w=None, x=42, y='spam', z=84)),
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
584 ('-x 2', NS(w=None, x='2', y='spam', z=84)),
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
585 ('-y', NS(w=None, x=None, y=None, z=84)),
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
586 ('-y 2', NS(w=None, x=None, y='2', z=84)),
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
587 ('-z', NS(w=None, x=None, y='spam', z=42)),
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
588 ('-z 2', NS(w=None, x=None, y='spam', z=2)),
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
589 ]
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
590
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
591
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
592 class TestOptionalsNargsZeroOrMore(ParserTestCase):
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
593 """Tests specifying an args for an Optional that accepts zero or more"""
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
594
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
595 argument_signatures = [
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
596 Sig('-x', nargs='*'),
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
597 Sig('-y', nargs='*', default='spam'),
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
598 ]
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
599 failures = ['a']
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
600 successes = [
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
601 ('', NS(x=None, y='spam')),
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
602 ('-x', NS(x=[], y='spam')),
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
603 ('-x a', NS(x=['a'], y='spam')),
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
604 ('-x a b', NS(x=['a', 'b'], y='spam')),
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
605 ('-y', NS(x=None, y=[])),
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
606 ('-y a', NS(x=None, y=['a'])),
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
607 ('-y a b', NS(x=None, y=['a', 'b'])),
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
608 ]
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
609
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
610
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
611 class TestOptionalsNargsOneOrMore(ParserTestCase):
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
612 """Tests specifying an args for an Optional that accepts one or more"""
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
613
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
614 argument_signatures = [
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
615 Sig('-x', nargs='+'),
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
616 Sig('-y', nargs='+', default='spam'),
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
617 ]
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
618 failures = ['a', '-x', '-y', 'a -x', 'a -y b']
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
619 successes = [
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
620 ('', NS(x=None, y='spam')),
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
621 ('-x a', NS(x=['a'], y='spam')),
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
622 ('-x a b', NS(x=['a', 'b'], y='spam')),
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
623 ('-y a', NS(x=None, y=['a'])),
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
624 ('-y a b', NS(x=None, y=['a', 'b'])),
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
625 ]
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
626
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
627
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
628 class TestOptionalsChoices(ParserTestCase):
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
629 """Tests specifying the choices for an Optional"""
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
630
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
631 argument_signatures = [
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
632 Sig('-f', choices='abc'),
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
633 Sig('-g', type=int, choices=range(5))]
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
634 failures = ['a', '-f d', '-fad', '-ga', '-g 6']
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
635 successes = [
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
636 ('', NS(f=None, g=None)),
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
637 ('-f a', NS(f='a', g=None)),
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
638 ('-f c', NS(f='c', g=None)),
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
639 ('-g 0', NS(f=None, g=0)),
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
640 ('-g 03', NS(f=None, g=3)),
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
641 ('-fb -g4', NS(f='b', g=4)),
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
642 ]
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
643
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
644
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
645 class TestOptionalsRequired(ParserTestCase):
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
646 """Tests the an optional action that is required"""
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
647
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
648 argument_signatures = [
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
649 Sig('-x', type=int, required=True),
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
650 ]
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
651 failures = ['a', '']
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
652 successes = [
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
653 ('-x 1', NS(x=1)),
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
654 ('-x42', NS(x=42)),
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
655 ]
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
656
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
657
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
658 class TestOptionalsActionStore(ParserTestCase):
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
659 """Tests the store action for an Optional"""
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
660
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
661 argument_signatures = [Sig('-x', action='store')]
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
662 failures = ['a', 'a -x']
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
663 successes = [
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
664 ('', NS(x=None)),
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
665 ('-xfoo', NS(x='foo')),
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
666 ]
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
667
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
668
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
669 class TestOptionalsActionStoreConst(ParserTestCase):
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
670 """Tests the store_const action for an Optional"""
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
671
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
672 argument_signatures = [Sig('-y', action='store_const', const=object)]
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
673 failures = ['a']
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
674 successes = [
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
675 ('', NS(y=None)),
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
676 ('-y', NS(y=object)),
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
677 ]
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
678
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
679
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
680 class TestOptionalsActionStoreFalse(ParserTestCase):
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
681 """Tests the store_false action for an Optional"""
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
682
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
683 argument_signatures = [Sig('-z', action='store_false')]
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
684 failures = ['a', '-za', '-z a']
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
685 successes = [
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
686 ('', NS(z=True)),
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
687 ('-z', NS(z=False)),
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
688 ]
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
689
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
690
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
691 class TestOptionalsActionStoreTrue(ParserTestCase):
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
692 """Tests the store_true action for an Optional"""
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
693
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
694 argument_signatures = [Sig('--apple', action='store_true')]
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
695 failures = ['a', '--apple=b', '--apple b']
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
696 successes = [
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
697 ('', NS(apple=False)),
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
698 ('--apple', NS(apple=True)),
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
699 ]
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
700
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
701
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
702 class TestOptionalsActionAppend(ParserTestCase):
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
703 """Tests the append action for an Optional"""
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
704
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
705 argument_signatures = [Sig('--baz', action='append')]
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
706 failures = ['a', '--baz', 'a --baz', '--baz a b']
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
707 successes = [
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
708 ('', NS(baz=None)),
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
709 ('--baz a', NS(baz=['a'])),
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
710 ('--baz a --baz b', NS(baz=['a', 'b'])),
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
711 ]
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
712
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
713
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
714 class TestOptionalsActionAppendWithDefault(ParserTestCase):
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
715 """Tests the append action for an Optional"""
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
716
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
717 argument_signatures = [Sig('--baz', action='append', default=['X'])]
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
718 failures = ['a', '--baz', 'a --baz', '--baz a b']
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
719 successes = [
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
720 ('', NS(baz=['X'])),
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
721 ('--baz a', NS(baz=['X', 'a'])),
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
722 ('--baz a --baz b', NS(baz=['X', 'a', 'b'])),
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
723 ]
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
724
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
725
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
726 class TestOptionalsActionAppendConst(ParserTestCase):
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
727 """Tests the append_const action for an Optional"""
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
728
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
729 argument_signatures = [
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
730 Sig('-b', action='append_const', const=Exception),
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
731 Sig('-c', action='append', dest='b'),
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
732 ]
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
733 failures = ['a', '-c', 'a -c', '-bx', '-b x']
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
734 successes = [
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
735 ('', NS(b=None)),
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
736 ('-b', NS(b=[Exception])),
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
737 ('-b -cx -b -cyz', NS(b=[Exception, 'x', Exception, 'yz'])),
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
738 ]
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
739
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
740
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
741 class TestOptionalsActionAppendConstWithDefault(ParserTestCase):
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
742 """Tests the append_const action for an Optional"""
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
743
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
744 argument_signatures = [
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
745 Sig('-b', action='append_const', const=Exception, default=['X']),
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
746 Sig('-c', action='append', dest='b'),
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
747 ]
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
748 failures = ['a', '-c', 'a -c', '-bx', '-b x']
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
749 successes = [
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
750 ('', NS(b=['X'])),
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
751 ('-b', NS(b=['X', Exception])),
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
752 ('-b -cx -b -cyz', NS(b=['X', Exception, 'x', Exception, 'yz'])),
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
753 ]
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
754
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
755
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
756 class TestOptionalsActionCount(ParserTestCase):
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
757 """Tests the count action for an Optional"""
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
758
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
759 argument_signatures = [Sig('-x', action='count')]
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
760 failures = ['a', '-x a', '-x b', '-x a -x b']
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
761 successes = [
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
762 ('', NS(x=None)),
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
763 ('-x', NS(x=1)),
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
764 ]
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
765
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
766
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
767 # ================
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
768 # Positional tests
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
769 # ================
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
770
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
771 class TestPositionalsNargsNone(ParserTestCase):
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
772 """Test a Positional that doesn't specify nargs"""
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
773
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
774 argument_signatures = [Sig('foo')]
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
775 failures = ['', '-x', 'a b']
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
776 successes = [
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
777 ('a', NS(foo='a')),
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
778 ]
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
779
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
780
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
781 class TestPositionalsNargs1(ParserTestCase):
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
782 """Test a Positional that specifies an nargs of 1"""
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
783
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
784 argument_signatures = [Sig('foo', nargs=1)]
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
785 failures = ['', '-x', 'a b']
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
786 successes = [
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
787 ('a', NS(foo=['a'])),
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
788 ]
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
789
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
790
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
791 class TestPositionalsNargs2(ParserTestCase):
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
792 """Test a Positional that specifies an nargs of 2"""
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
793
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
794 argument_signatures = [Sig('foo', nargs=2)]
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
795 failures = ['', 'a', '-x', 'a b c']
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
796 successes = [
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
797 ('a b', NS(foo=['a', 'b'])),
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
798 ]
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
799
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
800
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
801 class TestPositionalsNargsZeroOrMore(ParserTestCase):
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
802 """Test a Positional that specifies unlimited nargs"""
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
803
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
804 argument_signatures = [Sig('foo', nargs='*')]
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
805 failures = ['-x']
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
806 successes = [
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
807 ('', NS(foo=[])),
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
808 ('a', NS(foo=['a'])),
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
809 ('a b', NS(foo=['a', 'b'])),
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
810 ]
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
811
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
812
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
813 class TestPositionalsNargsZeroOrMoreDefault(ParserTestCase):
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
814 """Test a Positional that specifies unlimited nargs and a default"""
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
815
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
816 argument_signatures = [Sig('foo', nargs='*', default='bar')]
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
817 failures = ['-x']
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
818 successes = [
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
819 ('', NS(foo='bar')),
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
820 ('a', NS(foo=['a'])),
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
821 ('a b', NS(foo=['a', 'b'])),
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
822 ]
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
823
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
824
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
825 class TestPositionalsNargsOneOrMore(ParserTestCase):
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
826 """Test a Positional that specifies one or more nargs"""
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
827
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
828 argument_signatures = [Sig('foo', nargs='+')]
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
829 failures = ['', '-x']
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
830 successes = [
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
831 ('a', NS(foo=['a'])),
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
832 ('a b', NS(foo=['a', 'b'])),
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
833 ]
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
834
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
835
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
836 class TestPositionalsNargsOptional(ParserTestCase):
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
837 """Tests an Optional Positional"""
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
838
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
839 argument_signatures = [Sig('foo', nargs='?')]
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
840 failures = ['-x', 'a b']
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
841 successes = [
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
842 ('', NS(foo=None)),
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
843 ('a', NS(foo='a')),
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
844 ]
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
845
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
846
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
847 class TestPositionalsNargsOptionalDefault(ParserTestCase):
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
848 """Tests an Optional Positional with a default value"""
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
849
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
850 argument_signatures = [Sig('foo', nargs='?', default=42)]
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
851 failures = ['-x', 'a b']
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
852 successes = [
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
853 ('', NS(foo=42)),
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
854 ('a', NS(foo='a')),
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
855 ]
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
856
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
857
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
858 class TestPositionalsNargsOptionalConvertedDefault(ParserTestCase):
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
859 """Tests an Optional Positional with a default value
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
860 that needs to be converted to the appropriate type.
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
861 """
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
862
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
863 argument_signatures = [
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
864 Sig('foo', nargs='?', type=int, default='42'),
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
865 ]
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
866 failures = ['-x', 'a b', '1 2']
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
867 successes = [
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
868 ('', NS(foo=42)),
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
869 ('1', NS(foo=1)),
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
870 ]
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
871
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
872
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
873 class TestPositionalsNargsNoneNone(ParserTestCase):
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
874 """Test two Positionals that don't specify nargs"""
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
875
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
876 argument_signatures = [Sig('foo'), Sig('bar')]
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
877 failures = ['', '-x', 'a', 'a b c']
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
878 successes = [
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
879 ('a b', NS(foo='a', bar='b')),
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
880 ]
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
881
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
882
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
883 class TestPositionalsNargsNone1(ParserTestCase):
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
884 """Test a Positional with no nargs followed by one with 1"""
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
885
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
886 argument_signatures = [Sig('foo'), Sig('bar', nargs=1)]
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
887 failures = ['', '--foo', 'a', 'a b c']
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
888 successes = [
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
889 ('a b', NS(foo='a', bar=['b'])),
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
890 ]
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
891
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
892
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
893 class TestPositionalsNargs2None(ParserTestCase):
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
894 """Test a Positional with 2 nargs followed by one with none"""
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
895
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
896 argument_signatures = [Sig('foo', nargs=2), Sig('bar')]
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
897 failures = ['', '--foo', 'a', 'a b', 'a b c d']
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
898 successes = [
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
899 ('a b c', NS(foo=['a', 'b'], bar='c')),
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
900 ]
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
901
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
902
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
903 class TestPositionalsNargsNoneZeroOrMore(ParserTestCase):
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
904 """Test a Positional with no nargs followed by one with unlimited"""
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
905
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
906 argument_signatures = [Sig('foo'), Sig('bar', nargs='*')]
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
907 failures = ['', '--foo']
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
908 successes = [
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
909 ('a', NS(foo='a', bar=[])),
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
910 ('a b', NS(foo='a', bar=['b'])),
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
911 ('a b c', NS(foo='a', bar=['b', 'c'])),
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
912 ]
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
913
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
914
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
915 class TestPositionalsNargsNoneOneOrMore(ParserTestCase):
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
916 """Test a Positional with no nargs followed by one with one or more"""
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
917
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
918 argument_signatures = [Sig('foo'), Sig('bar', nargs='+')]
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
919 failures = ['', '--foo', 'a']
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
920 successes = [
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
921 ('a b', NS(foo='a', bar=['b'])),
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
922 ('a b c', NS(foo='a', bar=['b', 'c'])),
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
923 ]
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
924
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
925
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
926 class TestPositionalsNargsNoneOptional(ParserTestCase):
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
927 """Test a Positional with no nargs followed by one with an Optional"""
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
928
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
929 argument_signatures = [Sig('foo'), Sig('bar', nargs='?')]
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
930 failures = ['', '--foo', 'a b c']
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
931 successes = [
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
932 ('a', NS(foo='a', bar=None)),
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
933 ('a b', NS(foo='a', bar='b')),
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
934 ]
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
935
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
936
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
937 class TestPositionalsNargsZeroOrMoreNone(ParserTestCase):
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
938 """Test a Positional with unlimited nargs followed by one with none"""
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
939
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
940 argument_signatures = [Sig('foo', nargs='*'), Sig('bar')]
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
941 failures = ['', '--foo']
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
942 successes = [
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
943 ('a', NS(foo=[], bar='a')),
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
944 ('a b', NS(foo=['a'], bar='b')),
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
945 ('a b c', NS(foo=['a', 'b'], bar='c')),
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
946 ]
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
947
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
948
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
949 class TestPositionalsNargsOneOrMoreNone(ParserTestCase):
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
950 """Test a Positional with one or more nargs followed by one with none"""
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
951
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
952 argument_signatures = [Sig('foo', nargs='+'), Sig('bar')]
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
953 failures = ['', '--foo', 'a']
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
954 successes = [
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
955 ('a b', NS(foo=['a'], bar='b')),
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
956 ('a b c', NS(foo=['a', 'b'], bar='c')),
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
957 ]
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
958
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
959
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
960 class TestPositionalsNargsOptionalNone(ParserTestCase):
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
961 """Test a Positional with an Optional nargs followed by one with none"""
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
962
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
963 argument_signatures = [Sig('foo', nargs='?', default=42), Sig('bar')]
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
964 failures = ['', '--foo', 'a b c']
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
965 successes = [
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
966 ('a', NS(foo=42, bar='a')),
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
967 ('a b', NS(foo='a', bar='b')),
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
968 ]
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
969
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
970
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
971 class TestPositionalsNargs2ZeroOrMore(ParserTestCase):
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
972 """Test a Positional with 2 nargs followed by one with unlimited"""
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
973
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
974 argument_signatures = [Sig('foo', nargs=2), Sig('bar', nargs='*')]
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
975 failures = ['', '--foo', 'a']
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
976 successes = [
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
977 ('a b', NS(foo=['a', 'b'], bar=[])),
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
978 ('a b c', NS(foo=['a', 'b'], bar=['c'])),
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
979 ]
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
980
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
981
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
982 class TestPositionalsNargs2OneOrMore(ParserTestCase):
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
983 """Test a Positional with 2 nargs followed by one with one or more"""
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
984
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
985 argument_signatures = [Sig('foo', nargs=2), Sig('bar', nargs='+')]
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
986 failures = ['', '--foo', 'a', 'a b']
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
987 successes = [
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
988 ('a b c', NS(foo=['a', 'b'], bar=['c'])),
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
989 ]
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
990
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
991
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
992 class TestPositionalsNargs2Optional(ParserTestCase):
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
993 """Test a Positional with 2 nargs followed by one optional"""
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
994
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
995 argument_signatures = [Sig('foo', nargs=2), Sig('bar', nargs='?')]
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
996 failures = ['', '--foo', 'a', 'a b c d']
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
997 successes = [
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
998 ('a b', NS(foo=['a', 'b'], bar=None)),
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
999 ('a b c', NS(foo=['a', 'b'], bar='c')),
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
1000 ]
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
1001
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
1002
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
1003 class TestPositionalsNargsZeroOrMore1(ParserTestCase):
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
1004 """Test a Positional with unlimited nargs followed by one with 1"""
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
1005
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
1006 argument_signatures = [Sig('foo', nargs='*'), Sig('bar', nargs=1)]
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
1007 failures = ['', '--foo', ]
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
1008 successes = [
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
1009 ('a', NS(foo=[], bar=['a'])),
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
1010 ('a b', NS(foo=['a'], bar=['b'])),
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
1011 ('a b c', NS(foo=['a', 'b'], bar=['c'])),
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
1012 ]
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
1013
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
1014
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
1015 class TestPositionalsNargsOneOrMore1(ParserTestCase):
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
1016 """Test a Positional with one or more nargs followed by one with 1"""
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
1017
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
1018 argument_signatures = [Sig('foo', nargs='+'), Sig('bar', nargs=1)]
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
1019 failures = ['', '--foo', 'a']
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
1020 successes = [
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
1021 ('a b', NS(foo=['a'], bar=['b'])),
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
1022 ('a b c', NS(foo=['a', 'b'], bar=['c'])),
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
1023 ]
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
1024
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
1025
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
1026 class TestPositionalsNargsOptional1(ParserTestCase):
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
1027 """Test a Positional with an Optional nargs followed by one with 1"""
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
1028
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
1029 argument_signatures = [Sig('foo', nargs='?'), Sig('bar', nargs=1)]
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
1030 failures = ['', '--foo', 'a b c']
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
1031 successes = [
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
1032 ('a', NS(foo=None, bar=['a'])),
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
1033 ('a b', NS(foo='a', bar=['b'])),
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
1034 ]
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
1035
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
1036
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
1037 class TestPositionalsNargsNoneZeroOrMore1(ParserTestCase):
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
1038 """Test three Positionals: no nargs, unlimited nargs and 1 nargs"""
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
1039
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
1040 argument_signatures = [
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
1041 Sig('foo'),
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
1042 Sig('bar', nargs='*'),
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
1043 Sig('baz', nargs=1),
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
1044 ]
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
1045 failures = ['', '--foo', 'a']
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
1046 successes = [
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
1047 ('a b', NS(foo='a', bar=[], baz=['b'])),
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
1048 ('a b c', NS(foo='a', bar=['b'], baz=['c'])),
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
1049 ]
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
1050
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
1051
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
1052 class TestPositionalsNargsNoneOneOrMore1(ParserTestCase):
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
1053 """Test three Positionals: no nargs, one or more nargs and 1 nargs"""
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
1054
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
1055 argument_signatures = [
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
1056 Sig('foo'),
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
1057 Sig('bar', nargs='+'),
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
1058 Sig('baz', nargs=1),
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
1059 ]
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
1060 failures = ['', '--foo', 'a', 'b']
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
1061 successes = [
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
1062 ('a b c', NS(foo='a', bar=['b'], baz=['c'])),
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
1063 ('a b c d', NS(foo='a', bar=['b', 'c'], baz=['d'])),
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
1064 ]
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
1065
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
1066
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
1067 class TestPositionalsNargsNoneOptional1(ParserTestCase):
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
1068 """Test three Positionals: no nargs, optional narg and 1 nargs"""
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
1069
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
1070 argument_signatures = [
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
1071 Sig('foo'),
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
1072 Sig('bar', nargs='?', default=0.625),
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
1073 Sig('baz', nargs=1),
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
1074 ]
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
1075 failures = ['', '--foo', 'a']
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
1076 successes = [
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
1077 ('a b', NS(foo='a', bar=0.625, baz=['b'])),
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
1078 ('a b c', NS(foo='a', bar='b', baz=['c'])),
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
1079 ]
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
1080
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
1081
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
1082 class TestPositionalsNargsOptionalOptional(ParserTestCase):
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
1083 """Test two optional nargs"""
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
1084
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
1085 argument_signatures = [
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
1086 Sig('foo', nargs='?'),
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
1087 Sig('bar', nargs='?', default=42),
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
1088 ]
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
1089 failures = ['--foo', 'a b c']
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
1090 successes = [
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
1091 ('', NS(foo=None, bar=42)),
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
1092 ('a', NS(foo='a', bar=42)),
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
1093 ('a b', NS(foo='a', bar='b')),
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
1094 ]
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
1095
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
1096
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
1097 class TestPositionalsNargsOptionalZeroOrMore(ParserTestCase):
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
1098 """Test an Optional narg followed by unlimited nargs"""
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
1099
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
1100 argument_signatures = [Sig('foo', nargs='?'), Sig('bar', nargs='*')]
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
1101 failures = ['--foo']
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
1102 successes = [
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
1103 ('', NS(foo=None, bar=[])),
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
1104 ('a', NS(foo='a', bar=[])),
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
1105 ('a b', NS(foo='a', bar=['b'])),
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
1106 ('a b c', NS(foo='a', bar=['b', 'c'])),
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
1107 ]
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
1108
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
1109
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
1110 class TestPositionalsNargsOptionalOneOrMore(ParserTestCase):
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
1111 """Test an Optional narg followed by one or more nargs"""
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
1112
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
1113 argument_signatures = [Sig('foo', nargs='?'), Sig('bar', nargs='+')]
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
1114 failures = ['', '--foo']
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
1115 successes = [
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
1116 ('a', NS(foo=None, bar=['a'])),
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
1117 ('a b', NS(foo='a', bar=['b'])),
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
1118 ('a b c', NS(foo='a', bar=['b', 'c'])),
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
1119 ]
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
1120
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
1121
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
1122 class TestPositionalsChoicesString(ParserTestCase):
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
1123 """Test a set of single-character choices"""
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
1124
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
1125 argument_signatures = [Sig('spam', choices=set('abcdefg'))]
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
1126 failures = ['', '--foo', 'h', '42', 'ef']
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
1127 successes = [
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
1128 ('a', NS(spam='a')),
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
1129 ('g', NS(spam='g')),
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
1130 ]
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
1131
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
1132
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
1133 class TestPositionalsChoicesInt(ParserTestCase):
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
1134 """Test a set of integer choices"""
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
1135
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
1136 argument_signatures = [Sig('spam', type=int, choices=range(20))]
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
1137 failures = ['', '--foo', 'h', '42', 'ef']
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
1138 successes = [
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
1139 ('4', NS(spam=4)),
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
1140 ('15', NS(spam=15)),
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
1141 ]
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
1142
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
1143
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
1144 class TestPositionalsActionAppend(ParserTestCase):
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
1145 """Test the 'append' action"""
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
1146
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
1147 argument_signatures = [
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
1148 Sig('spam', action='append'),
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
1149 Sig('spam', action='append', nargs=2),
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
1150 ]
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
1151 failures = ['', '--foo', 'a', 'a b', 'a b c d']
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
1152 successes = [
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
1153 ('a b c', NS(spam=['a', ['b', 'c']])),
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
1154 ]
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
1155
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
1156 # ========================================
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
1157 # Combined optionals and positionals tests
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
1158 # ========================================
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
1159
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
1160 class TestOptionalsNumericAndPositionals(ParserTestCase):
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
1161 """Tests negative number args when numeric options are present"""
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
1162
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
1163 argument_signatures = [
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
1164 Sig('x', nargs='?'),
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
1165 Sig('-4', dest='y', action='store_true'),
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
1166 ]
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
1167 failures = ['-2', '-315']
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
1168 successes = [
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
1169 ('', NS(x=None, y=False)),
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
1170 ('a', NS(x='a', y=False)),
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
1171 ('-4', NS(x=None, y=True)),
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
1172 ('-4 a', NS(x='a', y=True)),
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
1173 ]
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
1174
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
1175
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
1176 class TestOptionalsAlmostNumericAndPositionals(ParserTestCase):
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
1177 """Tests negative number args when almost numeric options are present"""
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
1178
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
1179 argument_signatures = [
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
1180 Sig('x', nargs='?'),
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
1181 Sig('-k4', dest='y', action='store_true'),
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
1182 ]
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
1183 failures = ['-k3']
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
1184 successes = [
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
1185 ('', NS(x=None, y=False)),
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
1186 ('-2', NS(x='-2', y=False)),
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
1187 ('a', NS(x='a', y=False)),
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
1188 ('-k4', NS(x=None, y=True)),
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
1189 ('-k4 a', NS(x='a', y=True)),
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
1190 ]
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
1191
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
1192
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
1193 class TestEmptyAndSpaceContainingArguments(ParserTestCase):
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
1194
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
1195 argument_signatures = [
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
1196 Sig('x', nargs='?'),
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
1197 Sig('-y', '--yyy', dest='y'),
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
1198 ]
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
1199 failures = ['-y']
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
1200 successes = [
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
1201 ([''], NS(x='', y=None)),
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
1202 (['a badger'], NS(x='a badger', y=None)),
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
1203 (['-a badger'], NS(x='-a badger', y=None)),
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
1204 (['-y', ''], NS(x=None, y='')),
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
1205 (['-y', 'a badger'], NS(x=None, y='a badger')),
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
1206 (['-y', '-a badger'], NS(x=None, y='-a badger')),
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
1207 (['--yyy=a badger'], NS(x=None, y='a badger')),
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
1208 (['--yyy=-a badger'], NS(x=None, y='-a badger')),
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
1209 ]
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
1210
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
1211
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
1212 class TestPrefixCharacterOnlyArguments(ParserTestCase):
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
1213
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
1214 parser_signature = Sig(prefix_chars='-+')
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
1215 argument_signatures = [
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
1216 Sig('-', dest='x', nargs='?', const='badger'),
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
1217 Sig('+', dest='y', type=int, default=42),
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
1218 Sig('-+-', dest='z', action='store_true'),
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
1219 ]
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
1220 failures = ['-y', '+ -']
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
1221 successes = [
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
1222 ('', NS(x=None, y=42, z=False)),
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
1223 ('-', NS(x='badger', y=42, z=False)),
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
1224 ('- X', NS(x='X', y=42, z=False)),
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
1225 ('+ -3', NS(x=None, y=-3, z=False)),
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
1226 ('-+-', NS(x=None, y=42, z=True)),
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
1227 ('- ===', NS(x='===', y=42, z=False)),
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
1228 ]
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
1229
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
1230
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
1231 class TestNargsZeroOrMore(ParserTestCase):
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
1232 """Tests specifying an args for an Optional that accepts zero or more"""
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
1233
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
1234 argument_signatures = [Sig('-x', nargs='*'), Sig('y', nargs='*')]
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
1235 failures = []
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
1236 successes = [
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
1237 ('', NS(x=None, y=[])),
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
1238 ('-x', NS(x=[], y=[])),
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
1239 ('-x a', NS(x=['a'], y=[])),
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
1240 ('-x a -- b', NS(x=['a'], y=['b'])),
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
1241 ('a', NS(x=None, y=['a'])),
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
1242 ('a -x', NS(x=[], y=['a'])),
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
1243 ('a -x b', NS(x=['b'], y=['a'])),
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
1244 ]
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
1245
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
1246
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
1247 class TestNargsRemainder(ParserTestCase):
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
1248 """Tests specifying a positional with nargs=REMAINDER"""
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
1249
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
1250 argument_signatures = [Sig('x'), Sig('y', nargs='...'), Sig('-z')]
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
1251 failures = ['', '-z', '-z Z']
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
1252 successes = [
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
1253 ('X', NS(x='X', y=[], z=None)),
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
1254 ('-z Z X', NS(x='X', y=[], z='Z')),
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
1255 ('X A B -z Z', NS(x='X', y=['A', 'B', '-z', 'Z'], z=None)),
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
1256 ('X Y --foo', NS(x='X', y=['Y', '--foo'], z=None)),
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
1257 ]
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
1258
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
1259
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
1260 class TestOptionLike(ParserTestCase):
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
1261 """Tests options that may or may not be arguments"""
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
1262
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
1263 argument_signatures = [
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
1264 Sig('-x', type=float),
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
1265 Sig('-3', type=float, dest='y'),
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
1266 Sig('z', nargs='*'),
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
1267 ]
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
1268 failures = ['-x', '-y2.5', '-xa', '-x -a',
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
1269 '-x -3', '-x -3.5', '-3 -3.5',
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
1270 '-x -2.5', '-x -2.5 a', '-3 -.5',
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
1271 'a x -1', '-x -1 a', '-3 -1 a']
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
1272 successes = [
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
1273 ('', NS(x=None, y=None, z=[])),
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
1274 ('-x 2.5', NS(x=2.5, y=None, z=[])),
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
1275 ('-x 2.5 a', NS(x=2.5, y=None, z=['a'])),
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
1276 ('-3.5', NS(x=None, y=0.5, z=[])),
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
1277 ('-3-.5', NS(x=None, y=-0.5, z=[])),
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
1278 ('-3 .5', NS(x=None, y=0.5, z=[])),
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
1279 ('a -3.5', NS(x=None, y=0.5, z=['a'])),
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
1280 ('a', NS(x=None, y=None, z=['a'])),
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
1281 ('a -x 1', NS(x=1.0, y=None, z=['a'])),
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
1282 ('-x 1 a', NS(x=1.0, y=None, z=['a'])),
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
1283 ('-3 1 a', NS(x=None, y=1.0, z=['a'])),
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
1284 ]
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
1285
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
1286
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
1287 class TestDefaultSuppress(ParserTestCase):
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
1288 """Test actions with suppressed defaults"""
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
1289
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
1290 argument_signatures = [
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
1291 Sig('foo', nargs='?', default=argparse.SUPPRESS),
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
1292 Sig('bar', nargs='*', default=argparse.SUPPRESS),
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
1293 Sig('--baz', action='store_true', default=argparse.SUPPRESS),
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
1294 ]
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
1295 failures = ['-x']
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
1296 successes = [
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
1297 ('', NS()),
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
1298 ('a', NS(foo='a')),
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
1299 ('a b', NS(foo='a', bar=['b'])),
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
1300 ('--baz', NS(baz=True)),
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
1301 ('a --baz', NS(foo='a', baz=True)),
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
1302 ('--baz a b', NS(foo='a', bar=['b'], baz=True)),
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
1303 ]
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
1304
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
1305
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
1306 class TestParserDefaultSuppress(ParserTestCase):
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
1307 """Test actions with a parser-level default of SUPPRESS"""
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
1308
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
1309 parser_signature = Sig(argument_default=argparse.SUPPRESS)
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
1310 argument_signatures = [
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
1311 Sig('foo', nargs='?'),
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
1312 Sig('bar', nargs='*'),
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
1313 Sig('--baz', action='store_true'),
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
1314 ]
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
1315 failures = ['-x']
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
1316 successes = [
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
1317 ('', NS()),
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
1318 ('a', NS(foo='a')),
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
1319 ('a b', NS(foo='a', bar=['b'])),
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
1320 ('--baz', NS(baz=True)),
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
1321 ('a --baz', NS(foo='a', baz=True)),
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
1322 ('--baz a b', NS(foo='a', bar=['b'], baz=True)),
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
1323 ]
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
1324
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
1325
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
1326 class TestParserDefault42(ParserTestCase):
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
1327 """Test actions with a parser-level default of 42"""
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
1328
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
1329 parser_signature = Sig(argument_default=42, version='1.0')
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
1330 argument_signatures = [
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
1331 Sig('foo', nargs='?'),
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
1332 Sig('bar', nargs='*'),
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
1333 Sig('--baz', action='store_true'),
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
1334 ]
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
1335 failures = ['-x']
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
1336 successes = [
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
1337 ('', NS(foo=42, bar=42, baz=42)),
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
1338 ('a', NS(foo='a', bar=42, baz=42)),
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
1339 ('a b', NS(foo='a', bar=['b'], baz=42)),
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
1340 ('--baz', NS(foo=42, bar=42, baz=True)),
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
1341 ('a --baz', NS(foo='a', bar=42, baz=True)),
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
1342 ('--baz a b', NS(foo='a', bar=['b'], baz=True)),
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
1343 ]
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
1344
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
1345
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
1346 class TestArgumentsFromFile(TempDirMixin, ParserTestCase):
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
1347 """Test reading arguments from a file"""
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
1348
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
1349 def setUp(self):
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
1350 super(TestArgumentsFromFile, self).setUp()
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
1351 file_texts = [
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
1352 ('hello', 'hello world!\n'),
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
1353 ('recursive', '-a\n'
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
1354 'A\n'
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
1355 '@hello'),
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
1356 ('invalid', '@no-such-path\n'),
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
1357 ]
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
1358 for path, text in file_texts:
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
1359 file = open(path, 'w')
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
1360 file.write(text)
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
1361 file.close()
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
1362
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
1363 parser_signature = Sig(fromfile_prefix_chars='@')
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
1364 argument_signatures = [
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
1365 Sig('-a'),
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
1366 Sig('x'),
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
1367 Sig('y', nargs='+'),
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
1368 ]
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
1369 failures = ['', '-b', 'X', '@invalid', '@missing']
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
1370 successes = [
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
1371 ('X Y', NS(a=None, x='X', y=['Y'])),
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
1372 ('X -a A Y Z', NS(a='A', x='X', y=['Y', 'Z'])),
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
1373 ('@hello X', NS(a=None, x='hello world!', y=['X'])),
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
1374 ('X @hello', NS(a=None, x='X', y=['hello world!'])),
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
1375 ('-a B @recursive Y Z', NS(a='A', x='hello world!', y=['Y', 'Z'])),
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
1376 ('X @recursive Z -a B', NS(a='B', x='X', y=['hello world!', 'Z'])),
78231
c9806f0aaefb #12353: argparse now correctly handles null argument values.
R David Murray <rdmurray@bitdance.com>
parents: 74318
diff changeset
1377 (["-a", "", "X", "Y"], NS(a='', x='X', y=['Y'])),
59267
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
1378 ]
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
1379
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
1380
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
1381 class TestArgumentsFromFileConverter(TempDirMixin, ParserTestCase):
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
1382 """Test reading arguments from a file"""
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
1383
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
1384 def setUp(self):
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
1385 super(TestArgumentsFromFileConverter, self).setUp()
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
1386 file_texts = [
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
1387 ('hello', 'hello world!\n'),
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
1388 ]
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
1389 for path, text in file_texts:
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
1390 file = open(path, 'w')
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
1391 file.write(text)
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
1392 file.close()
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
1393
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
1394 class FromFileConverterArgumentParser(ErrorRaisingArgumentParser):
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
1395
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
1396 def convert_arg_line_to_args(self, arg_line):
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
1397 for arg in arg_line.split():
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
1398 if not arg.strip():
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
1399 continue
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
1400 yield arg
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
1401 parser_class = FromFileConverterArgumentParser
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
1402 parser_signature = Sig(fromfile_prefix_chars='@')
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
1403 argument_signatures = [
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
1404 Sig('y', nargs='+'),
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
1405 ]
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
1406 failures = []
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
1407 successes = [
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
1408 ('@hello X', NS(y=['hello', 'world!', 'X'])),
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
1409 ]
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
1410
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
1411
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
1412 # =====================
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
1413 # Type conversion tests
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
1414 # =====================
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
1415
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
1416 class TestFileTypeRepr(TestCase):
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
1417
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
1418 def test_r(self):
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
1419 type = argparse.FileType('r')
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
1420 self.assertEqual("FileType('r')", repr(type))
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
1421
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
1422 def test_wb_1(self):
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
1423 type = argparse.FileType('wb', 1)
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
1424 self.assertEqual("FileType('wb', 1)", repr(type))
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
1425
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
1426
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
1427 class RFile(object):
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
1428 seen = {}
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
1429
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
1430 def __init__(self, name):
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
1431 self.name = name
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
1432
59423
0802bc973b32 eliminate py3k warnings in argparse
Benjamin Peterson <benjamin@python.org>
parents: 59284
diff changeset
1433 __hash__ = None
0802bc973b32 eliminate py3k warnings in argparse
Benjamin Peterson <benjamin@python.org>
parents: 59284
diff changeset
1434
59267
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
1435 def __eq__(self, other):
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
1436 if other in self.seen:
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
1437 text = self.seen[other]
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
1438 else:
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
1439 text = self.seen[other] = other.read()
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
1440 other.close()
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
1441 if not isinstance(text, str):
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
1442 text = text.decode('ascii')
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
1443 return self.name == other.name == text
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
1444
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
1445
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
1446 class TestFileTypeR(TempDirMixin, ParserTestCase):
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
1447 """Test the FileType option/argument type for reading files"""
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
1448
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
1449 def setUp(self):
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
1450 super(TestFileTypeR, self).setUp()
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
1451 for file_name in ['foo', 'bar']:
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
1452 file = open(os.path.join(self.temp_dir, file_name), 'w')
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
1453 file.write(file_name)
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
1454 file.close()
67744
7f9a98f766d7 Issue #9509: make argarse properly handle IOErrors raised by argparse.FileType. Approved by Georg in the tracker.
Steven Bethard <steven.bethard@gmail.com>
parents: 66348
diff changeset
1455 self.create_readonly_file('readonly')
59267
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
1456
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
1457 argument_signatures = [
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
1458 Sig('-x', type=argparse.FileType()),
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
1459 Sig('spam', type=argparse.FileType('r')),
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
1460 ]
67744
7f9a98f766d7 Issue #9509: make argarse properly handle IOErrors raised by argparse.FileType. Approved by Georg in the tracker.
Steven Bethard <steven.bethard@gmail.com>
parents: 66348
diff changeset
1461 failures = ['-x', '-x bar', 'non-existent-file.txt']
59267
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
1462 successes = [
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
1463 ('foo', NS(x=None, spam=RFile('foo'))),
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
1464 ('-x foo bar', NS(x=RFile('foo'), spam=RFile('bar'))),
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
1465 ('bar -x foo', NS(x=RFile('foo'), spam=RFile('bar'))),
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
1466 ('-x - -', NS(x=sys.stdin, spam=sys.stdin)),
67744
7f9a98f766d7 Issue #9509: make argarse properly handle IOErrors raised by argparse.FileType. Approved by Georg in the tracker.
Steven Bethard <steven.bethard@gmail.com>
parents: 66348
diff changeset
1467 ('readonly', NS(x=None, spam=RFile('readonly'))),
59267
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
1468 ]
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
1469
78823
62b5667ef2f4 #12776,#11839: call argparse type function only once.
R David Murray <rdmurray@bitdance.com>
parents: 78233
diff changeset
1470 class TestFileTypeDefaults(TempDirMixin, ParserTestCase):
62b5667ef2f4 #12776,#11839: call argparse type function only once.
R David Murray <rdmurray@bitdance.com>
parents: 78233
diff changeset
1471 """Test that a file is not created unless the default is needed"""
62b5667ef2f4 #12776,#11839: call argparse type function only once.
R David Murray <rdmurray@bitdance.com>
parents: 78233
diff changeset
1472 def setUp(self):
62b5667ef2f4 #12776,#11839: call argparse type function only once.
R David Murray <rdmurray@bitdance.com>
parents: 78233
diff changeset
1473 super(TestFileTypeDefaults, self).setUp()
62b5667ef2f4 #12776,#11839: call argparse type function only once.
R David Murray <rdmurray@bitdance.com>
parents: 78233
diff changeset
1474 file = open(os.path.join(self.temp_dir, 'good'), 'w')
62b5667ef2f4 #12776,#11839: call argparse type function only once.
R David Murray <rdmurray@bitdance.com>
parents: 78233
diff changeset
1475 file.write('good')
62b5667ef2f4 #12776,#11839: call argparse type function only once.
R David Murray <rdmurray@bitdance.com>
parents: 78233
diff changeset
1476 file.close()
62b5667ef2f4 #12776,#11839: call argparse type function only once.
R David Murray <rdmurray@bitdance.com>
parents: 78233
diff changeset
1477
62b5667ef2f4 #12776,#11839: call argparse type function only once.
R David Murray <rdmurray@bitdance.com>
parents: 78233
diff changeset
1478 argument_signatures = [
62b5667ef2f4 #12776,#11839: call argparse type function only once.
R David Murray <rdmurray@bitdance.com>
parents: 78233
diff changeset
1479 Sig('-c', type=argparse.FileType('r'), default='no-file.txt'),
62b5667ef2f4 #12776,#11839: call argparse type function only once.
R David Murray <rdmurray@bitdance.com>
parents: 78233
diff changeset
1480 ]
62b5667ef2f4 #12776,#11839: call argparse type function only once.
R David Murray <rdmurray@bitdance.com>
parents: 78233
diff changeset
1481 # should provoke no such file error
62b5667ef2f4 #12776,#11839: call argparse type function only once.
R David Murray <rdmurray@bitdance.com>
parents: 78233
diff changeset
1482 failures = ['']
62b5667ef2f4 #12776,#11839: call argparse type function only once.
R David Murray <rdmurray@bitdance.com>
parents: 78233
diff changeset
1483 # should not provoke error because default file is created
62b5667ef2f4 #12776,#11839: call argparse type function only once.
R David Murray <rdmurray@bitdance.com>
parents: 78233
diff changeset
1484 successes = [('-c good', NS(c=RFile('good')))]
62b5667ef2f4 #12776,#11839: call argparse type function only once.
R David Murray <rdmurray@bitdance.com>
parents: 78233
diff changeset
1485
59267
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
1486
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
1487 class TestFileTypeRB(TempDirMixin, ParserTestCase):
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
1488 """Test the FileType option/argument type for reading files"""
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
1489
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
1490 def setUp(self):
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
1491 super(TestFileTypeRB, self).setUp()
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
1492 for file_name in ['foo', 'bar']:
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
1493 file = open(os.path.join(self.temp_dir, file_name), 'w')
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
1494 file.write(file_name)
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
1495 file.close()
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
1496
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
1497 argument_signatures = [
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
1498 Sig('-x', type=argparse.FileType('rb')),
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
1499 Sig('spam', type=argparse.FileType('rb')),
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
1500 ]
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
1501 failures = ['-x', '-x bar']
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
1502 successes = [
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
1503 ('foo', NS(x=None, spam=RFile('foo'))),
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
1504 ('-x foo bar', NS(x=RFile('foo'), spam=RFile('bar'))),
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
1505 ('bar -x foo', NS(x=RFile('foo'), spam=RFile('bar'))),
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
1506 ('-x - -', NS(x=sys.stdin, spam=sys.stdin)),
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
1507 ]
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
1508
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
1509
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
1510 class WFile(object):
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
1511 seen = set()
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
1512
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
1513 def __init__(self, name):
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
1514 self.name = name
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
1515
59423
0802bc973b32 eliminate py3k warnings in argparse
Benjamin Peterson <benjamin@python.org>
parents: 59284
diff changeset
1516 __hash__ = None
0802bc973b32 eliminate py3k warnings in argparse
Benjamin Peterson <benjamin@python.org>
parents: 59284
diff changeset
1517
59267
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
1518 def __eq__(self, other):
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
1519 if other not in self.seen:
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
1520 text = 'Check that file is writable.'
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
1521 if 'b' in other.mode:
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
1522 text = text.encode('ascii')
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
1523 other.write(text)
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
1524 other.close()
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
1525 self.seen.add(other)
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
1526 return self.name == other.name
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
1527
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
1528
73647
6e1e1118adca Close #13401: Skip TestFileTypeW of test_argparse if the current user is root
Victor Stinner <victor.stinner@haypocalc.com>
parents: 69125
diff changeset
1529 @unittest.skipIf(hasattr(os, 'geteuid') and os.geteuid() == 0,
6e1e1118adca Close #13401: Skip TestFileTypeW of test_argparse if the current user is root
Victor Stinner <victor.stinner@haypocalc.com>
parents: 69125
diff changeset
1530 "non-root user required")
59267
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
1531 class TestFileTypeW(TempDirMixin, ParserTestCase):
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
1532 """Test the FileType option/argument type for writing files"""
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
1533
67744
7f9a98f766d7 Issue #9509: make argarse properly handle IOErrors raised by argparse.FileType. Approved by Georg in the tracker.
Steven Bethard <steven.bethard@gmail.com>
parents: 66348
diff changeset
1534 def setUp(self):
7f9a98f766d7 Issue #9509: make argarse properly handle IOErrors raised by argparse.FileType. Approved by Georg in the tracker.
Steven Bethard <steven.bethard@gmail.com>
parents: 66348
diff changeset
1535 super(TestFileTypeW, self).setUp()
7f9a98f766d7 Issue #9509: make argarse properly handle IOErrors raised by argparse.FileType. Approved by Georg in the tracker.
Steven Bethard <steven.bethard@gmail.com>
parents: 66348
diff changeset
1536 self.create_readonly_file('readonly')
7f9a98f766d7 Issue #9509: make argarse properly handle IOErrors raised by argparse.FileType. Approved by Georg in the tracker.
Steven Bethard <steven.bethard@gmail.com>
parents: 66348
diff changeset
1537
59267
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
1538 argument_signatures = [
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
1539 Sig('-x', type=argparse.FileType('w')),
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
1540 Sig('spam', type=argparse.FileType('w')),
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
1541 ]
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
1542 failures = ['-x', '-x bar']
67744
7f9a98f766d7 Issue #9509: make argarse properly handle IOErrors raised by argparse.FileType. Approved by Georg in the tracker.
Steven Bethard <steven.bethard@gmail.com>
parents: 66348
diff changeset
1543 failures = ['-x', '-x bar', 'readonly']
59267
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
1544 successes = [
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
1545 ('foo', NS(x=None, spam=WFile('foo'))),
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
1546 ('-x foo bar', NS(x=WFile('foo'), spam=WFile('bar'))),
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
1547 ('bar -x foo', NS(x=WFile('foo'), spam=WFile('bar'))),
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
1548 ('-x - -', NS(x=sys.stdout, spam=sys.stdout)),
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
1549 ]
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
1550
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
1551
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
1552 class TestFileTypeWB(TempDirMixin, ParserTestCase):
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
1553
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
1554 argument_signatures = [
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
1555 Sig('-x', type=argparse.FileType('wb')),
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
1556 Sig('spam', type=argparse.FileType('wb')),
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
1557 ]
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
1558 failures = ['-x', '-x bar']
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
1559 successes = [
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
1560 ('foo', NS(x=None, spam=WFile('foo'))),
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
1561 ('-x foo bar', NS(x=WFile('foo'), spam=WFile('bar'))),
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
1562 ('bar -x foo', NS(x=WFile('foo'), spam=WFile('bar'))),
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
1563 ('-x - -', NS(x=sys.stdout, spam=sys.stdout)),
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
1564 ]
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
1565
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
1566
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
1567 class TestTypeCallable(ParserTestCase):
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
1568 """Test some callables as option/argument types"""
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
1569
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
1570 argument_signatures = [
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
1571 Sig('--eggs', type=complex),
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
1572 Sig('spam', type=float),
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
1573 ]
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
1574 failures = ['a', '42j', '--eggs a', '--eggs 2i']
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
1575 successes = [
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
1576 ('--eggs=42 42', NS(eggs=42, spam=42.0)),
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
1577 ('--eggs 2j -- -1.5', NS(eggs=2j, spam=-1.5)),
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
1578 ('1024.675', NS(eggs=None, spam=1024.675)),
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
1579 ]
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
1580
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
1581
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
1582 class TestTypeUserDefined(ParserTestCase):
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
1583 """Test a user-defined option/argument type"""
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
1584
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
1585 class MyType(TestCase):
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
1586
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
1587 def __init__(self, value):
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
1588 self.value = value
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
1589
59423
0802bc973b32 eliminate py3k warnings in argparse
Benjamin Peterson <benjamin@python.org>
parents: 59284
diff changeset
1590 __hash__ = None
0802bc973b32 eliminate py3k warnings in argparse
Benjamin Peterson <benjamin@python.org>
parents: 59284
diff changeset
1591
59267
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
1592 def __eq__(self, other):
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
1593 return (type(self), self.value) == (type(other), other.value)
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
1594
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
1595 argument_signatures = [
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
1596 Sig('-x', type=MyType),
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
1597 Sig('spam', type=MyType),
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
1598 ]
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
1599 failures = []
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
1600 successes = [
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
1601 ('a -x b', NS(x=MyType('b'), spam=MyType('a'))),
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
1602 ('-xf g', NS(x=MyType('f'), spam=MyType('g'))),
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
1603 ]
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
1604
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
1605
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
1606 class TestTypeClassicClass(ParserTestCase):
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
1607 """Test a classic class type"""
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
1608
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
1609 class C:
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
1610
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
1611 def __init__(self, value):
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
1612 self.value = value
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
1613
59423
0802bc973b32 eliminate py3k warnings in argparse
Benjamin Peterson <benjamin@python.org>
parents: 59284
diff changeset
1614 __hash__ = None
0802bc973b32 eliminate py3k warnings in argparse
Benjamin Peterson <benjamin@python.org>
parents: 59284
diff changeset
1615
59267
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
1616 def __eq__(self, other):
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
1617 return (type(self), self.value) == (type(other), other.value)
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
1618
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
1619 argument_signatures = [
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
1620 Sig('-x', type=C),
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
1621 Sig('spam', type=C),
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
1622 ]
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
1623 failures = []
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
1624 successes = [
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
1625 ('a -x b', NS(x=C('b'), spam=C('a'))),
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
1626 ('-xf g', NS(x=C('f'), spam=C('g'))),
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
1627 ]
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
1628
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
1629
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
1630 class TestTypeRegistration(TestCase):
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
1631 """Test a user-defined type by registering it"""
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
1632
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
1633 def test(self):
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
1634
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
1635 def get_my_type(string):
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
1636 return 'my_type{%s}' % string
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
1637
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
1638 parser = argparse.ArgumentParser()
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
1639 parser.register('type', 'my_type', get_my_type)
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
1640 parser.add_argument('-x', type='my_type')
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
1641 parser.add_argument('y', type='my_type')
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
1642
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
1643 self.assertEqual(parser.parse_args('1'.split()),
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
1644 NS(x=None, y='my_type{1}'))
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
1645 self.assertEqual(parser.parse_args('-x 1 42'.split()),
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
1646 NS(x='my_type{1}', y='my_type{42}'))
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
1647
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
1648
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
1649 # ============
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
1650 # Action tests
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
1651 # ============
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
1652
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
1653 class TestActionUserDefined(ParserTestCase):
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
1654 """Test a user-defined option/argument action"""
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
1655
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
1656 class OptionalAction(argparse.Action):
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
1657
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
1658 def __call__(self, parser, namespace, value, option_string=None):
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
1659 try:
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
1660 # check destination and option string
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
1661 assert self.dest == 'spam', 'dest: %s' % self.dest
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
1662 assert option_string == '-s', 'flag: %s' % option_string
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
1663 # when option is before argument, badger=2, and when
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
1664 # option is after argument, badger=<whatever was set>
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
1665 expected_ns = NS(spam=0.25)
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
1666 if value in [0.125, 0.625]:
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
1667 expected_ns.badger = 2
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
1668 elif value in [2.0]:
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
1669 expected_ns.badger = 84
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
1670 else:
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
1671 raise AssertionError('value: %s' % value)
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
1672 assert expected_ns == namespace, ('expected %s, got %s' %
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
1673 (expected_ns, namespace))
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
1674 except AssertionError:
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
1675 e = sys.exc_info()[1]
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
1676 raise ArgumentParserError('opt_action failed: %s' % e)
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
1677 setattr(namespace, 'spam', value)
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
1678
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
1679 class PositionalAction(argparse.Action):
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
1680
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
1681 def __call__(self, parser, namespace, value, option_string=None):
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
1682 try:
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
1683 assert option_string is None, ('option_string: %s' %
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
1684 option_string)
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
1685 # check destination
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
1686 assert self.dest == 'badger', 'dest: %s' % self.dest
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
1687 # when argument is before option, spam=0.25, and when
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
1688 # option is after argument, spam=<whatever was set>
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
1689 expected_ns = NS(badger=2)
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
1690 if value in [42, 84]:
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
1691 expected_ns.spam = 0.25
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
1692 elif value in [1]:
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
1693 expected_ns.spam = 0.625
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
1694 elif value in [2]:
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
1695 expected_ns.spam = 0.125
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
1696 else:
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
1697 raise AssertionError('value: %s' % value)
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
1698 assert expected_ns == namespace, ('expected %s, got %s' %
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
1699 (expected_ns, namespace))
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
1700 except AssertionError:
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
1701 e = sys.exc_info()[1]
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
1702 raise ArgumentParserError('arg_action failed: %s' % e)
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
1703 setattr(namespace, 'badger', value)
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
1704
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
1705 argument_signatures = [
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
1706 Sig('-s', dest='spam', action=OptionalAction,
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
1707 type=float, default=0.25),
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
1708 Sig('badger', action=PositionalAction,
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
1709 type=int, nargs='?', default=2),
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
1710 ]
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
1711 failures = []
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
1712 successes = [
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
1713 ('-s0.125', NS(spam=0.125, badger=2)),
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
1714 ('42', NS(spam=0.25, badger=42)),
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
1715 ('-s 0.625 1', NS(spam=0.625, badger=1)),
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
1716 ('84 -s2', NS(spam=2.0, badger=84)),
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
1717 ]
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
1718
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
1719
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
1720 class TestActionRegistration(TestCase):
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
1721 """Test a user-defined action supplied by registering it"""
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
1722
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
1723 class MyAction(argparse.Action):
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
1724
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
1725 def __call__(self, parser, namespace, values, option_string=None):
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
1726 setattr(namespace, self.dest, 'foo[%s]' % values)
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
1727
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
1728 def test(self):
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
1729
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
1730 parser = argparse.ArgumentParser()
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
1731 parser.register('action', 'my_action', self.MyAction)
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
1732 parser.add_argument('badger', action='my_action')
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
1733
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
1734 self.assertEqual(parser.parse_args(['1']), NS(badger='foo[1]'))
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
1735 self.assertEqual(parser.parse_args(['42']), NS(badger='foo[42]'))
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
1736
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
1737
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
1738 # ================
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
1739 # Subparsers tests
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
1740 # ================
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
1741
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
1742 class TestAddSubparsers(TestCase):
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
1743 """Test the add_subparsers method"""
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
1744
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
1745 def assertArgumentParserError(self, *args, **kwargs):
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
1746 self.assertRaises(ArgumentParserError, *args, **kwargs)
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
1747
63691
23c089dc5cff Merged revisions 83675 via svnmerge from
R. David Murray <rdmurray@bitdance.com>
parents: 61879
diff changeset
1748 def _get_parser(self, subparser_help=False, prefix_chars=None):
59267
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
1749 # create a parser with a subparsers argument
63691
23c089dc5cff Merged revisions 83675 via svnmerge from
R. David Murray <rdmurray@bitdance.com>
parents: 61879
diff changeset
1750 if prefix_chars:
23c089dc5cff Merged revisions 83675 via svnmerge from
R. David Murray <rdmurray@bitdance.com>
parents: 61879
diff changeset
1751 parser = ErrorRaisingArgumentParser(
23c089dc5cff Merged revisions 83675 via svnmerge from
R. David Murray <rdmurray@bitdance.com>
parents: 61879
diff changeset
1752 prog='PROG', description='main description', prefix_chars=prefix_chars)
23c089dc5cff Merged revisions 83675 via svnmerge from
R. David Murray <rdmurray@bitdance.com>
parents: 61879
diff changeset
1753 parser.add_argument(
23c089dc5cff Merged revisions 83675 via svnmerge from
R. David Murray <rdmurray@bitdance.com>
parents: 61879
diff changeset
1754 prefix_chars[0] * 2 + 'foo', action='store_true', help='foo help')
23c089dc5cff Merged revisions 83675 via svnmerge from
R. David Murray <rdmurray@bitdance.com>
parents: 61879
diff changeset
1755 else:
23c089dc5cff Merged revisions 83675 via svnmerge from
R. David Murray <rdmurray@bitdance.com>
parents: 61879
diff changeset
1756 parser = ErrorRaisingArgumentParser(
23c089dc5cff Merged revisions 83675 via svnmerge from
R. David Murray <rdmurray@bitdance.com>
parents: 61879
diff changeset
1757 prog='PROG', description='main description')
23c089dc5cff Merged revisions 83675 via svnmerge from
R. David Murray <rdmurray@bitdance.com>
parents: 61879
diff changeset
1758 parser.add_argument(
23c089dc5cff Merged revisions 83675 via svnmerge from
R. David Murray <rdmurray@bitdance.com>
parents: 61879
diff changeset
1759 '--foo', action='store_true', help='foo help')
59267
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
1760 parser.add_argument(
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
1761 'bar', type=float, help='bar help')
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
1762
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
1763 # check that only one subparsers argument can be added
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
1764 subparsers = parser.add_subparsers(help='command help')
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
1765 self.assertArgumentParserError(parser.add_subparsers)
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
1766
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
1767 # add first sub-parser
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
1768 parser1_kwargs = dict(description='1 description')
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
1769 if subparser_help:
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
1770 parser1_kwargs['help'] = '1 help'
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
1771 parser1 = subparsers.add_parser('1', **parser1_kwargs)
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
1772 parser1.add_argument('-w', type=int, help='w help')
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
1773 parser1.add_argument('x', choices='abc', help='x help')
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
1774
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
1775 # add second sub-parser
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
1776 parser2_kwargs = dict(description='2 description')
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
1777 if subparser_help:
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
1778 parser2_kwargs['help'] = '2 help'
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
1779 parser2 = subparsers.add_parser('2', **parser2_kwargs)
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
1780 parser2.add_argument('-y', choices='123', help='y help')
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
1781 parser2.add_argument('z', type=complex, nargs='*', help='z help')
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
1782
78233
bd2c167dfabc #13922: argparse no longer incorrectly strips '--' after the first one.
R David Murray <rdmurray@bitdance.com>
parents: 78231
diff changeset
1783 # add third sub-parser
bd2c167dfabc #13922: argparse no longer incorrectly strips '--' after the first one.
R David Murray <rdmurray@bitdance.com>
parents: 78231
diff changeset
1784 parser3_kwargs = dict(description='3 description')
bd2c167dfabc #13922: argparse no longer incorrectly strips '--' after the first one.
R David Murray <rdmurray@bitdance.com>
parents: 78231
diff changeset
1785 if subparser_help:
bd2c167dfabc #13922: argparse no longer incorrectly strips '--' after the first one.
R David Murray <rdmurray@bitdance.com>
parents: 78231
diff changeset
1786 parser3_kwargs['help'] = '3 help'
bd2c167dfabc #13922: argparse no longer incorrectly strips '--' after the first one.
R David Murray <rdmurray@bitdance.com>
parents: 78231
diff changeset
1787 parser3 = subparsers.add_parser('3', **parser3_kwargs)
bd2c167dfabc #13922: argparse no longer incorrectly strips '--' after the first one.
R David Murray <rdmurray@bitdance.com>
parents: 78231
diff changeset
1788 parser3.add_argument('t', type=int, help='t help')
bd2c167dfabc #13922: argparse no longer incorrectly strips '--' after the first one.
R David Murray <rdmurray@bitdance.com>
parents: 78231
diff changeset
1789 parser3.add_argument('u', nargs='...', help='u help')
bd2c167dfabc #13922: argparse no longer incorrectly strips '--' after the first one.
R David Murray <rdmurray@bitdance.com>
parents: 78231
diff changeset
1790
59267
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
1791 # return the main parser
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
1792 return parser
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
1793
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
1794 def setUp(self):
65860
9db857960402 Merged revisions 86080 via svnmerge from
Steven Bethard <steven.bethard@gmail.com>
parents: 65333
diff changeset
1795 super(TestAddSubparsers, self).setUp()
59267
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
1796 self.parser = self._get_parser()
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
1797 self.command_help_parser = self._get_parser(subparser_help=True)
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
1798
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
1799 def test_parse_args_failures(self):
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
1800 # check some failure cases:
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
1801 for args_str in ['', 'a', 'a a', '0.5 a', '0.5 1',
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
1802 '0.5 1 -y', '0.5 2 -w']:
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
1803 args = args_str.split()
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
1804 self.assertArgumentParserError(self.parser.parse_args, args)
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
1805
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
1806 def test_parse_args(self):
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
1807 # check some non-failure cases:
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
1808 self.assertEqual(
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
1809 self.parser.parse_args('0.5 1 b -w 7'.split()),
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
1810 NS(foo=False, bar=0.5, w=7, x='b'),
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
1811 )
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
1812 self.assertEqual(
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
1813 self.parser.parse_args('0.25 --foo 2 -y 2 3j -- -1j'.split()),
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
1814 NS(foo=True, bar=0.25, y='2', z=[3j, -1j]),
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
1815 )
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
1816 self.assertEqual(
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
1817 self.parser.parse_args('--foo 0.125 1 c'.split()),
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
1818 NS(foo=True, bar=0.125, w=None, x='c'),
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
1819 )
78233
bd2c167dfabc #13922: argparse no longer incorrectly strips '--' after the first one.
R David Murray <rdmurray@bitdance.com>
parents: 78231
diff changeset
1820 self.assertEqual(
bd2c167dfabc #13922: argparse no longer incorrectly strips '--' after the first one.
R David Murray <rdmurray@bitdance.com>
parents: 78231
diff changeset
1821 self.parser.parse_args('-1.5 3 11 -- a --foo 7 -- b'.split()),
bd2c167dfabc #13922: argparse no longer incorrectly strips '--' after the first one.
R David Murray <rdmurray@bitdance.com>
parents: 78231
diff changeset
1822 NS(foo=False, bar=-1.5, t=11, u=['a', '--foo', '7', '--', 'b']),
bd2c167dfabc #13922: argparse no longer incorrectly strips '--' after the first one.
R David Murray <rdmurray@bitdance.com>
parents: 78231
diff changeset
1823 )
59267
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
1824
65888
573db2af2dda Merged revisions 86111 via svnmerge from
Steven Bethard <steven.bethard@gmail.com>
parents: 65870
diff changeset
1825 def test_parse_known_args(self):
573db2af2dda Merged revisions 86111 via svnmerge from
Steven Bethard <steven.bethard@gmail.com>
parents: 65870
diff changeset
1826 self.assertEqual(
573db2af2dda Merged revisions 86111 via svnmerge from
Steven Bethard <steven.bethard@gmail.com>
parents: 65870
diff changeset
1827 self.parser.parse_known_args('0.5 1 b -w 7'.split()),
573db2af2dda Merged revisions 86111 via svnmerge from
Steven Bethard <steven.bethard@gmail.com>
parents: 65870
diff changeset
1828 (NS(foo=False, bar=0.5, w=7, x='b'), []),
573db2af2dda Merged revisions 86111 via svnmerge from
Steven Bethard <steven.bethard@gmail.com>
parents: 65870
diff changeset
1829 )
573db2af2dda Merged revisions 86111 via svnmerge from
Steven Bethard <steven.bethard@gmail.com>
parents: 65870
diff changeset
1830 self.assertEqual(
573db2af2dda Merged revisions 86111 via svnmerge from
Steven Bethard <steven.bethard@gmail.com>
parents: 65870
diff changeset
1831 self.parser.parse_known_args('0.5 -p 1 b -w 7'.split()),
573db2af2dda Merged revisions 86111 via svnmerge from
Steven Bethard <steven.bethard@gmail.com>
parents: 65870
diff changeset
1832 (NS(foo=False, bar=0.5, w=7, x='b'), ['-p']),
573db2af2dda Merged revisions 86111 via svnmerge from
Steven Bethard <steven.bethard@gmail.com>
parents: 65870
diff changeset
1833 )
573db2af2dda Merged revisions 86111 via svnmerge from
Steven Bethard <steven.bethard@gmail.com>
parents: 65870
diff changeset
1834 self.assertEqual(
573db2af2dda Merged revisions 86111 via svnmerge from
Steven Bethard <steven.bethard@gmail.com>
parents: 65870
diff changeset
1835 self.parser.parse_known_args('0.5 1 b -w 7 -p'.split()),
573db2af2dda Merged revisions 86111 via svnmerge from
Steven Bethard <steven.bethard@gmail.com>
parents: 65870
diff changeset
1836 (NS(foo=False, bar=0.5, w=7, x='b'), ['-p']),
573db2af2dda Merged revisions 86111 via svnmerge from
Steven Bethard <steven.bethard@gmail.com>
parents: 65870
diff changeset
1837 )
573db2af2dda Merged revisions 86111 via svnmerge from
Steven Bethard <steven.bethard@gmail.com>
parents: 65870
diff changeset
1838 self.assertEqual(
573db2af2dda Merged revisions 86111 via svnmerge from
Steven Bethard <steven.bethard@gmail.com>
parents: 65870
diff changeset
1839 self.parser.parse_known_args('0.5 1 b -q -rs -w 7'.split()),
573db2af2dda Merged revisions 86111 via svnmerge from
Steven Bethard <steven.bethard@gmail.com>
parents: 65870
diff changeset
1840 (NS(foo=False, bar=0.5, w=7, x='b'), ['-q', '-rs']),
573db2af2dda Merged revisions 86111 via svnmerge from
Steven Bethard <steven.bethard@gmail.com>
parents: 65870
diff changeset
1841 )
573db2af2dda Merged revisions 86111 via svnmerge from
Steven Bethard <steven.bethard@gmail.com>
parents: 65870
diff changeset
1842 self.assertEqual(
573db2af2dda Merged revisions 86111 via svnmerge from
Steven Bethard <steven.bethard@gmail.com>
parents: 65870
diff changeset
1843 self.parser.parse_known_args('0.5 -W 1 b -X Y -w 7 Z'.split()),
573db2af2dda Merged revisions 86111 via svnmerge from
Steven Bethard <steven.bethard@gmail.com>
parents: 65870
diff changeset
1844 (NS(foo=False, bar=0.5, w=7, x='b'), ['-W', '-X', 'Y', 'Z']),
573db2af2dda Merged revisions 86111 via svnmerge from
Steven Bethard <steven.bethard@gmail.com>
parents: 65870
diff changeset
1845 )
573db2af2dda Merged revisions 86111 via svnmerge from
Steven Bethard <steven.bethard@gmail.com>
parents: 65870
diff changeset
1846
59267
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
1847 def test_dest(self):
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
1848 parser = ErrorRaisingArgumentParser()
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
1849 parser.add_argument('--foo', action='store_true')
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
1850 subparsers = parser.add_subparsers(dest='bar')
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
1851 parser1 = subparsers.add_parser('1')
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
1852 parser1.add_argument('baz')
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
1853 self.assertEqual(NS(foo=False, bar='1', baz='2'),
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
1854 parser.parse_args('1 2'.split()))
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
1855
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
1856 def test_help(self):
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
1857 self.assertEqual(self.parser.format_usage(),
78233
bd2c167dfabc #13922: argparse no longer incorrectly strips '--' after the first one.
R David Murray <rdmurray@bitdance.com>
parents: 78231
diff changeset
1858 'usage: PROG [-h] [--foo] bar {1,2,3} ...\n')
59267
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
1859 self.assertEqual(self.parser.format_help(), textwrap.dedent('''\
78233
bd2c167dfabc #13922: argparse no longer incorrectly strips '--' after the first one.
R David Murray <rdmurray@bitdance.com>
parents: 78231
diff changeset
1860 usage: PROG [-h] [--foo] bar {1,2,3} ...
59267
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
1861
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
1862 main description
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
1863
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
1864 positional arguments:
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
1865 bar bar help
78233
bd2c167dfabc #13922: argparse no longer incorrectly strips '--' after the first one.
R David Murray <rdmurray@bitdance.com>
parents: 78231
diff changeset
1866 {1,2,3} command help
59267
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
1867
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
1868 optional arguments:
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
1869 -h, --help show this help message and exit
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
1870 --foo foo help
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
1871 '''))
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
1872
63691
23c089dc5cff Merged revisions 83675 via svnmerge from
R. David Murray <rdmurray@bitdance.com>
parents: 61879
diff changeset
1873 def test_help_extra_prefix_chars(self):
23c089dc5cff Merged revisions 83675 via svnmerge from
R. David Murray <rdmurray@bitdance.com>
parents: 61879
diff changeset
1874 # Make sure - is still used for help if it is a non-first prefix char
23c089dc5cff Merged revisions 83675 via svnmerge from
R. David Murray <rdmurray@bitdance.com>
parents: 61879
diff changeset
1875 parser = self._get_parser(prefix_chars='+:-')
23c089dc5cff Merged revisions 83675 via svnmerge from
R. David Murray <rdmurray@bitdance.com>
parents: 61879
diff changeset
1876 self.assertEqual(parser.format_usage(),
78233
bd2c167dfabc #13922: argparse no longer incorrectly strips '--' after the first one.
R David Murray <rdmurray@bitdance.com>
parents: 78231
diff changeset
1877 'usage: PROG [-h] [++foo] bar {1,2,3} ...\n')
63691
23c089dc5cff Merged revisions 83675 via svnmerge from
R. David Murray <rdmurray@bitdance.com>
parents: 61879
diff changeset
1878 self.assertEqual(parser.format_help(), textwrap.dedent('''\
78233
bd2c167dfabc #13922: argparse no longer incorrectly strips '--' after the first one.
R David Murray <rdmurray@bitdance.com>
parents: 78231
diff changeset
1879 usage: PROG [-h] [++foo] bar {1,2,3} ...
63691
23c089dc5cff Merged revisions 83675 via svnmerge from
R. David Murray <rdmurray@bitdance.com>
parents: 61879
diff changeset
1880
23c089dc5cff Merged revisions 83675 via svnmerge from
R. David Murray <rdmurray@bitdance.com>
parents: 61879
diff changeset
1881 main description
23c089dc5cff Merged revisions 83675 via svnmerge from
R. David Murray <rdmurray@bitdance.com>
parents: 61879
diff changeset
1882
23c089dc5cff Merged revisions 83675 via svnmerge from
R. David Murray <rdmurray@bitdance.com>
parents: 61879
diff changeset
1883 positional arguments:
23c089dc5cff Merged revisions 83675 via svnmerge from
R. David Murray <rdmurray@bitdance.com>
parents: 61879
diff changeset
1884 bar bar help
78233
bd2c167dfabc #13922: argparse no longer incorrectly strips '--' after the first one.
R David Murray <rdmurray@bitdance.com>
parents: 78231
diff changeset
1885 {1,2,3} command help
63691
23c089dc5cff Merged revisions 83675 via svnmerge from
R. David Murray <rdmurray@bitdance.com>
parents: 61879
diff changeset
1886
23c089dc5cff Merged revisions 83675 via svnmerge from
R. David Murray <rdmurray@bitdance.com>
parents: 61879
diff changeset
1887 optional arguments:
23c089dc5cff Merged revisions 83675 via svnmerge from
R. David Murray <rdmurray@bitdance.com>
parents: 61879
diff changeset
1888 -h, --help show this help message and exit
23c089dc5cff Merged revisions 83675 via svnmerge from
R. David Murray <rdmurray@bitdance.com>
parents: 61879
diff changeset
1889 ++foo foo help
23c089dc5cff Merged revisions 83675 via svnmerge from
R. David Murray <rdmurray@bitdance.com>
parents: 61879
diff changeset
1890 '''))
23c089dc5cff Merged revisions 83675 via svnmerge from
R. David Murray <rdmurray@bitdance.com>
parents: 61879
diff changeset
1891
23c089dc5cff Merged revisions 83675 via svnmerge from
R. David Murray <rdmurray@bitdance.com>
parents: 61879
diff changeset
1892
23c089dc5cff Merged revisions 83675 via svnmerge from
R. David Murray <rdmurray@bitdance.com>
parents: 61879
diff changeset
1893 def test_help_alternate_prefix_chars(self):
23c089dc5cff Merged revisions 83675 via svnmerge from
R. David Murray <rdmurray@bitdance.com>
parents: 61879
diff changeset
1894 parser = self._get_parser(prefix_chars='+:/')
23c089dc5cff Merged revisions 83675 via svnmerge from
R. David Murray <rdmurray@bitdance.com>
parents: 61879
diff changeset
1895 self.assertEqual(parser.format_usage(),
78233
bd2c167dfabc #13922: argparse no longer incorrectly strips '--' after the first one.
R David Murray <rdmurray@bitdance.com>
parents: 78231
diff changeset
1896 'usage: PROG [+h] [++foo] bar {1,2,3} ...\n')
63691
23c089dc5cff Merged revisions 83675 via svnmerge from
R. David Murray <rdmurray@bitdance.com>
parents: 61879
diff changeset
1897 self.assertEqual(parser.format_help(), textwrap.dedent('''\
78233
bd2c167dfabc #13922: argparse no longer incorrectly strips '--' after the first one.
R David Murray <rdmurray@bitdance.com>
parents: 78231
diff changeset
1898 usage: PROG [+h] [++foo] bar {1,2,3} ...
63691
23c089dc5cff Merged revisions 83675 via svnmerge from
R. David Murray <rdmurray@bitdance.com>
parents: 61879
diff changeset
1899
23c089dc5cff Merged revisions 83675 via svnmerge from
R. David Murray <rdmurray@bitdance.com>
parents: 61879
diff changeset
1900 main description
23c089dc5cff Merged revisions 83675 via svnmerge from
R. David Murray <rdmurray@bitdance.com>
parents: 61879
diff changeset
1901
23c089dc5cff Merged revisions 83675 via svnmerge from
R. David Murray <rdmurray@bitdance.com>
parents: 61879
diff changeset
1902 positional arguments:
23c089dc5cff Merged revisions 83675 via svnmerge from
R. David Murray <rdmurray@bitdance.com>
parents: 61879
diff changeset
1903 bar bar help
78233
bd2c167dfabc #13922: argparse no longer incorrectly strips '--' after the first one.
R David Murray <rdmurray@bitdance.com>
parents: 78231
diff changeset
1904 {1,2,3} command help
63691
23c089dc5cff Merged revisions 83675 via svnmerge from
R. David Murray <rdmurray@bitdance.com>
parents: 61879
diff changeset
1905
23c089dc5cff Merged revisions 83675 via svnmerge from
R. David Murray <rdmurray@bitdance.com>
parents: 61879
diff changeset
1906 optional arguments:
23c089dc5cff Merged revisions 83675 via svnmerge from
R. David Murray <rdmurray@bitdance.com>
parents: 61879
diff changeset
1907 +h, ++help show this help message and exit
23c089dc5cff Merged revisions 83675 via svnmerge from
R. David Murray <rdmurray@bitdance.com>
parents: 61879
diff changeset
1908 ++foo foo help
23c089dc5cff Merged revisions 83675 via svnmerge from
R. David Murray <rdmurray@bitdance.com>
parents: 61879
diff changeset
1909 '''))
23c089dc5cff Merged revisions 83675 via svnmerge from
R. David Murray <rdmurray@bitdance.com>
parents: 61879
diff changeset
1910
59267
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
1911 def test_parser_command_help(self):
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
1912 self.assertEqual(self.command_help_parser.format_usage(),
78233
bd2c167dfabc #13922: argparse no longer incorrectly strips '--' after the first one.
R David Murray <rdmurray@bitdance.com>
parents: 78231
diff changeset
1913 'usage: PROG [-h] [--foo] bar {1,2,3} ...\n')
59267
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
1914 self.assertEqual(self.command_help_parser.format_help(),
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
1915 textwrap.dedent('''\
78233
bd2c167dfabc #13922: argparse no longer incorrectly strips '--' after the first one.
R David Murray <rdmurray@bitdance.com>
parents: 78231
diff changeset
1916 usage: PROG [-h] [--foo] bar {1,2,3} ...
59267
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
1917
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
1918 main description
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
1919
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
1920 positional arguments:
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
1921 bar bar help
78233
bd2c167dfabc #13922: argparse no longer incorrectly strips '--' after the first one.
R David Murray <rdmurray@bitdance.com>
parents: 78231
diff changeset
1922 {1,2,3} command help
59267
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
1923 1 1 help
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
1924 2 2 help
78233
bd2c167dfabc #13922: argparse no longer incorrectly strips '--' after the first one.
R David Murray <rdmurray@bitdance.com>
parents: 78231
diff changeset
1925 3 3 help
59267
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
1926
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
1927 optional arguments:
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
1928 -h, --help show this help message and exit
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
1929 --foo foo help
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
1930 '''))
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
1931
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
1932 def test_subparser_title_help(self):
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
1933 parser = ErrorRaisingArgumentParser(prog='PROG',
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
1934 description='main description')
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
1935 parser.add_argument('--foo', action='store_true', help='foo help')
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
1936 parser.add_argument('bar', help='bar help')
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
1937 subparsers = parser.add_subparsers(title='subcommands',
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
1938 description='command help',
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
1939 help='additional text')
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
1940 parser1 = subparsers.add_parser('1')
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
1941 parser2 = subparsers.add_parser('2')
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
1942 self.assertEqual(parser.format_usage(),
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
1943 'usage: PROG [-h] [--foo] bar {1,2} ...\n')
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
1944 self.assertEqual(parser.format_help(), textwrap.dedent('''\
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
1945 usage: PROG [-h] [--foo] bar {1,2} ...
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
1946
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
1947 main description
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
1948
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
1949 positional arguments:
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
1950 bar bar help
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
1951
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
1952 optional arguments:
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
1953 -h, --help show this help message and exit
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
1954 --foo foo help
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
1955
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
1956 subcommands:
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
1957 command help
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
1958
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
1959 {1,2} additional text
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
1960 '''))
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
1961
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
1962 def _test_subparser_help(self, args_str, expected_help):
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
1963 try:
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
1964 self.parser.parse_args(args_str.split())
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
1965 except ArgumentParserError:
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
1966 err = sys.exc_info()[1]
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
1967 if err.stdout != expected_help:
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
1968 print(repr(expected_help))
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
1969 print(repr(err.stdout))
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
1970 self.assertEqual(err.stdout, expected_help)
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
1971
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
1972 def test_subparser1_help(self):
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
1973 self._test_subparser_help('5.0 1 -h', textwrap.dedent('''\
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
1974 usage: PROG bar 1 [-h] [-w W] {a,b,c}
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
1975
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
1976 1 description
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
1977
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
1978 positional arguments:
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
1979 {a,b,c} x help
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
1980
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
1981 optional arguments:
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
1982 -h, --help show this help message and exit
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
1983 -w W w help
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
1984 '''))
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
1985
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
1986 def test_subparser2_help(self):
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
1987 self._test_subparser_help('5.0 2 -h', textwrap.dedent('''\
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
1988 usage: PROG bar 2 [-h] [-y {1,2,3}] [z [z ...]]
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
1989
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
1990 2 description
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
1991
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
1992 positional arguments:
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
1993 z z help
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
1994
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
1995 optional arguments:
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
1996 -h, --help show this help message and exit
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
1997 -y {1,2,3} y help
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
1998 '''))
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
1999
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
2000 # ============
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
2001 # Groups tests
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
2002 # ============
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
2003
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
2004 class TestPositionalsGroups(TestCase):
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
2005 """Tests that order of group positionals matches construction order"""
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
2006
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
2007 def test_nongroup_first(self):
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
2008 parser = ErrorRaisingArgumentParser()
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
2009 parser.add_argument('foo')
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
2010 group = parser.add_argument_group('g')
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
2011 group.add_argument('bar')
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
2012 parser.add_argument('baz')
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
2013 expected = NS(foo='1', bar='2', baz='3')
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
2014 result = parser.parse_args('1 2 3'.split())
59273
83e7ee185162 convert deprecated fail* methods to assert* variants
Benjamin Peterson <benjamin@python.org>
parents: 59272
diff changeset
2015 self.assertEqual(expected, result)
59267
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
2016
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
2017 def test_group_first(self):
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
2018 parser = ErrorRaisingArgumentParser()
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
2019 group = parser.add_argument_group('xxx')
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
2020 group.add_argument('foo')
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
2021 parser.add_argument('bar')
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
2022 parser.add_argument('baz')
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
2023 expected = NS(foo='1', bar='2', baz='3')
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
2024 result = parser.parse_args('1 2 3'.split())
59273
83e7ee185162 convert deprecated fail* methods to assert* variants
Benjamin Peterson <benjamin@python.org>
parents: 59272
diff changeset
2025 self.assertEqual(expected, result)
59267
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
2026
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
2027 def test_interleaved_groups(self):
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
2028 parser = ErrorRaisingArgumentParser()
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
2029 group = parser.add_argument_group('xxx')
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
2030 parser.add_argument('foo')
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
2031 group.add_argument('bar')
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
2032 parser.add_argument('baz')
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
2033 group = parser.add_argument_group('yyy')
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
2034 group.add_argument('frell')
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
2035 expected = NS(foo='1', bar='2', baz='3', frell='4')
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
2036 result = parser.parse_args('1 2 3 4'.split())
59273
83e7ee185162 convert deprecated fail* methods to assert* variants
Benjamin Peterson <benjamin@python.org>
parents: 59272
diff changeset
2037 self.assertEqual(expected, result)
59267
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
2038
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
2039 # ===================
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
2040 # Parent parser tests
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
2041 # ===================
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
2042
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
2043 class TestParentParsers(TestCase):
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
2044 """Tests that parsers can be created with parent parsers"""
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
2045
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
2046 def assertArgumentParserError(self, *args, **kwargs):
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
2047 self.assertRaises(ArgumentParserError, *args, **kwargs)
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
2048
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
2049 def setUp(self):
65860
9db857960402 Merged revisions 86080 via svnmerge from
Steven Bethard <steven.bethard@gmail.com>
parents: 65333
diff changeset
2050 super(TestParentParsers, self).setUp()
59267
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
2051 self.wxyz_parent = ErrorRaisingArgumentParser(add_help=False)
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
2052 self.wxyz_parent.add_argument('--w')
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
2053 x_group = self.wxyz_parent.add_argument_group('x')
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
2054 x_group.add_argument('-y')
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
2055 self.wxyz_parent.add_argument('z')
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
2056
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
2057 self.abcd_parent = ErrorRaisingArgumentParser(add_help=False)
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
2058 self.abcd_parent.add_argument('a')
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
2059 self.abcd_parent.add_argument('-b')
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
2060 c_group = self.abcd_parent.add_argument_group('c')
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
2061 c_group.add_argument('--d')
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
2062
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
2063 self.w_parent = ErrorRaisingArgumentParser(add_help=False)
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
2064 self.w_parent.add_argument('--w')
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
2065
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
2066 self.z_parent = ErrorRaisingArgumentParser(add_help=False)
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
2067 self.z_parent.add_argument('z')
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
2068
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
2069 # parents with mutually exclusive groups
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
2070 self.ab_mutex_parent = ErrorRaisingArgumentParser(add_help=False)
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
2071 group = self.ab_mutex_parent.add_mutually_exclusive_group()
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
2072 group.add_argument('-a', action='store_true')
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
2073 group.add_argument('-b', action='store_true')
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
2074
59270
82eda345a5f6 enable running of argparse tests and fix two that failed in the new environment
Benjamin Peterson <benjamin@python.org>
parents: 59268
diff changeset
2075 self.main_program = os.path.basename(sys.argv[0])
82eda345a5f6 enable running of argparse tests and fix two that failed in the new environment
Benjamin Peterson <benjamin@python.org>
parents: 59268
diff changeset
2076
59267
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
2077 def test_single_parent(self):
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
2078 parser = ErrorRaisingArgumentParser(parents=[self.wxyz_parent])
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
2079 self.assertEqual(parser.parse_args('-y 1 2 --w 3'.split()),
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
2080 NS(w='3', y='1', z='2'))
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
2081
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
2082 def test_single_parent_mutex(self):
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
2083 self._test_mutex_ab(self.ab_mutex_parent.parse_args)
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
2084 parser = ErrorRaisingArgumentParser(parents=[self.ab_mutex_parent])
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
2085 self._test_mutex_ab(parser.parse_args)
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
2086
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
2087 def test_single_granparent_mutex(self):
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
2088 parents = [self.ab_mutex_parent]
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
2089 parser = ErrorRaisingArgumentParser(add_help=False, parents=parents)
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
2090 parser = ErrorRaisingArgumentParser(parents=[parser])
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
2091 self._test_mutex_ab(parser.parse_args)
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
2092
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
2093 def _test_mutex_ab(self, parse_args):
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
2094 self.assertEqual(parse_args([]), NS(a=False, b=False))
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
2095 self.assertEqual(parse_args(['-a']), NS(a=True, b=False))
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
2096 self.assertEqual(parse_args(['-b']), NS(a=False, b=True))
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
2097 self.assertArgumentParserError(parse_args, ['-a', '-b'])
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
2098 self.assertArgumentParserError(parse_args, ['-b', '-a'])
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
2099 self.assertArgumentParserError(parse_args, ['-c'])
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
2100 self.assertArgumentParserError(parse_args, ['-a', '-c'])
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
2101 self.assertArgumentParserError(parse_args, ['-b', '-c'])
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
2102
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
2103 def test_multiple_parents(self):
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
2104 parents = [self.abcd_parent, self.wxyz_parent]
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
2105 parser = ErrorRaisingArgumentParser(parents=parents)
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
2106 self.assertEqual(parser.parse_args('--d 1 --w 2 3 4'.split()),
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
2107 NS(a='3', b=None, d='1', w='2', y=None, z='4'))
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
2108
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
2109 def test_multiple_parents_mutex(self):
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
2110 parents = [self.ab_mutex_parent, self.wxyz_parent]
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
2111 parser = ErrorRaisingArgumentParser(parents=parents)
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
2112 self.assertEqual(parser.parse_args('-a --w 2 3'.split()),
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
2113 NS(a=True, b=False, w='2', y=None, z='3'))
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
2114 self.assertArgumentParserError(
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
2115 parser.parse_args, '-a --w 2 3 -b'.split())
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
2116 self.assertArgumentParserError(
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
2117 parser.parse_args, '-a -b --w 2 3'.split())
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
2118
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
2119 def test_conflicting_parents(self):
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
2120 self.assertRaises(
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
2121 argparse.ArgumentError,
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
2122 argparse.ArgumentParser,
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
2123 parents=[self.w_parent, self.wxyz_parent])
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
2124
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
2125 def test_conflicting_parents_mutex(self):
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
2126 self.assertRaises(
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
2127 argparse.ArgumentError,
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
2128 argparse.ArgumentParser,
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
2129 parents=[self.abcd_parent, self.ab_mutex_parent])
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
2130
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
2131 def test_same_argument_name_parents(self):
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
2132 parents = [self.wxyz_parent, self.z_parent]
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
2133 parser = ErrorRaisingArgumentParser(parents=parents)
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
2134 self.assertEqual(parser.parse_args('1 2'.split()),
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
2135 NS(w=None, y=None, z='2'))
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
2136
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
2137 def test_subparser_parents(self):
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
2138 parser = ErrorRaisingArgumentParser()
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
2139 subparsers = parser.add_subparsers()
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
2140 abcde_parser = subparsers.add_parser('bar', parents=[self.abcd_parent])
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
2141 abcde_parser.add_argument('e')
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
2142 self.assertEqual(parser.parse_args('bar -b 1 --d 2 3 4'.split()),
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
2143 NS(a='3', b='1', d='2', e='4'))
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
2144
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
2145 def test_subparser_parents_mutex(self):
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
2146 parser = ErrorRaisingArgumentParser()
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
2147 subparsers = parser.add_subparsers()
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
2148 parents = [self.ab_mutex_parent]
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
2149 abc_parser = subparsers.add_parser('foo', parents=parents)
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
2150 c_group = abc_parser.add_argument_group('c_group')
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
2151 c_group.add_argument('c')
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
2152 parents = [self.wxyz_parent, self.ab_mutex_parent]
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
2153 wxyzabe_parser = subparsers.add_parser('bar', parents=parents)
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
2154 wxyzabe_parser.add_argument('e')
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
2155 self.assertEqual(parser.parse_args('foo -a 4'.split()),
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
2156 NS(a=True, b=False, c='4'))
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
2157 self.assertEqual(parser.parse_args('bar -b --w 2 3 4'.split()),
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
2158 NS(a=False, b=True, w='2', y=None, z='3', e='4'))
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
2159 self.assertArgumentParserError(
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
2160 parser.parse_args, 'foo -a -b 4'.split())
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
2161 self.assertArgumentParserError(
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
2162 parser.parse_args, 'bar -b -a 4'.split())
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
2163
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
2164 def test_parent_help(self):
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
2165 parents = [self.abcd_parent, self.wxyz_parent]
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
2166 parser = ErrorRaisingArgumentParser(parents=parents)
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
2167 parser_help = parser.format_help()
74318
ec32e6ec16fc #11906 Make test_argparse work interactively by removing extra space
Terry Jan Reedy <tjreedy@udel.edu>
parents: 73647
diff changeset
2168 progname = self.main_program
59267
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
2169 self.assertEqual(parser_help, textwrap.dedent('''\
74318
ec32e6ec16fc #11906 Make test_argparse work interactively by removing extra space
Terry Jan Reedy <tjreedy@udel.edu>
parents: 73647
diff changeset
2170 usage: {}{}[-h] [-b B] [--d D] [--w W] [-y Y] a z
59267
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
2171
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
2172 positional arguments:
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
2173 a
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
2174 z
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
2175
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
2176 optional arguments:
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
2177 -h, --help show this help message and exit
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
2178 -b B
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
2179 --w W
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
2180
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
2181 c:
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
2182 --d D
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
2183
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
2184 x:
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
2185 -y Y
74318
ec32e6ec16fc #11906 Make test_argparse work interactively by removing extra space
Terry Jan Reedy <tjreedy@udel.edu>
parents: 73647
diff changeset
2186 '''.format(progname, ' ' if progname else '' )))
59267
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
2187
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
2188 def test_groups_parents(self):
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
2189 parent = ErrorRaisingArgumentParser(add_help=False)
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
2190 g = parent.add_argument_group(title='g', description='gd')
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
2191 g.add_argument('-w')
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
2192 g.add_argument('-x')
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
2193 m = parent.add_mutually_exclusive_group()
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
2194 m.add_argument('-y')
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
2195 m.add_argument('-z')
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
2196 parser = ErrorRaisingArgumentParser(parents=[parent])
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
2197
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
2198 self.assertRaises(ArgumentParserError, parser.parse_args,
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
2199 ['-y', 'Y', '-z', 'Z'])
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
2200
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
2201 parser_help = parser.format_help()
74318
ec32e6ec16fc #11906 Make test_argparse work interactively by removing extra space
Terry Jan Reedy <tjreedy@udel.edu>
parents: 73647
diff changeset
2202 progname = self.main_program
59267
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
2203 self.assertEqual(parser_help, textwrap.dedent('''\
74318
ec32e6ec16fc #11906 Make test_argparse work interactively by removing extra space
Terry Jan Reedy <tjreedy@udel.edu>
parents: 73647
diff changeset
2204 usage: {}{}[-h] [-w W] [-x X] [-y Y | -z Z]
59267
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
2205
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
2206 optional arguments:
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
2207 -h, --help show this help message and exit
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
2208 -y Y
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
2209 -z Z
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
2210
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
2211 g:
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
2212 gd
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
2213
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
2214 -w W
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
2215 -x X
74318
ec32e6ec16fc #11906 Make test_argparse work interactively by removing extra space
Terry Jan Reedy <tjreedy@udel.edu>
parents: 73647
diff changeset
2216 '''.format(progname, ' ' if progname else '' )))
59267
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
2217
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
2218 # ==============================
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
2219 # Mutually exclusive group tests
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
2220 # ==============================
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
2221
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
2222 class TestMutuallyExclusiveGroupErrors(TestCase):
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
2223
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
2224 def test_invalid_add_argument_group(self):
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
2225 parser = ErrorRaisingArgumentParser()
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
2226 raises = self.assertRaises
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
2227 raises(TypeError, parser.add_mutually_exclusive_group, title='foo')
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
2228
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
2229 def test_invalid_add_argument(self):
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
2230 parser = ErrorRaisingArgumentParser()
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
2231 group = parser.add_mutually_exclusive_group()
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
2232 add_argument = group.add_argument
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
2233 raises = self.assertRaises
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
2234 raises(ValueError, add_argument, '--foo', required=True)
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
2235 raises(ValueError, add_argument, 'bar')
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
2236 raises(ValueError, add_argument, 'bar', nargs='+')
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
2237 raises(ValueError, add_argument, 'bar', nargs=1)
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
2238 raises(ValueError, add_argument, 'bar', nargs=argparse.PARSER)
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
2239
65870
5952b937ab9a Merged revisions 86092 via svnmerge from
Steven Bethard <steven.bethard@gmail.com>
parents: 65868
diff changeset
2240 def test_help(self):
5952b937ab9a Merged revisions 86092 via svnmerge from
Steven Bethard <steven.bethard@gmail.com>
parents: 65868
diff changeset
2241 parser = ErrorRaisingArgumentParser(prog='PROG')
5952b937ab9a Merged revisions 86092 via svnmerge from
Steven Bethard <steven.bethard@gmail.com>
parents: 65868
diff changeset
2242 group1 = parser.add_mutually_exclusive_group()
5952b937ab9a Merged revisions 86092 via svnmerge from
Steven Bethard <steven.bethard@gmail.com>
parents: 65868
diff changeset
2243 group1.add_argument('--foo', action='store_true')
5952b937ab9a Merged revisions 86092 via svnmerge from
Steven Bethard <steven.bethard@gmail.com>
parents: 65868
diff changeset
2244 group1.add_argument('--bar', action='store_false')
5952b937ab9a Merged revisions 86092 via svnmerge from
Steven Bethard <steven.bethard@gmail.com>
parents: 65868
diff changeset
2245 group2 = parser.add_mutually_exclusive_group()
5952b937ab9a Merged revisions 86092 via svnmerge from
Steven Bethard <steven.bethard@gmail.com>
parents: 65868
diff changeset
2246 group2.add_argument('--soup', action='store_true')
5952b937ab9a Merged revisions 86092 via svnmerge from
Steven Bethard <steven.bethard@gmail.com>
parents: 65868
diff changeset
2247 group2.add_argument('--nuts', action='store_false')
5952b937ab9a Merged revisions 86092 via svnmerge from
Steven Bethard <steven.bethard@gmail.com>
parents: 65868
diff changeset
2248 expected = '''\
5952b937ab9a Merged revisions 86092 via svnmerge from
Steven Bethard <steven.bethard@gmail.com>
parents: 65868
diff changeset
2249 usage: PROG [-h] [--foo | --bar] [--soup | --nuts]
5952b937ab9a Merged revisions 86092 via svnmerge from
Steven Bethard <steven.bethard@gmail.com>
parents: 65868
diff changeset
2250
5952b937ab9a Merged revisions 86092 via svnmerge from
Steven Bethard <steven.bethard@gmail.com>
parents: 65868
diff changeset
2251 optional arguments:
5952b937ab9a Merged revisions 86092 via svnmerge from
Steven Bethard <steven.bethard@gmail.com>
parents: 65868
diff changeset
2252 -h, --help show this help message and exit
5952b937ab9a Merged revisions 86092 via svnmerge from
Steven Bethard <steven.bethard@gmail.com>
parents: 65868
diff changeset
2253 --foo
5952b937ab9a Merged revisions 86092 via svnmerge from
Steven Bethard <steven.bethard@gmail.com>
parents: 65868
diff changeset
2254 --bar
5952b937ab9a Merged revisions 86092 via svnmerge from
Steven Bethard <steven.bethard@gmail.com>
parents: 65868
diff changeset
2255 --soup
5952b937ab9a Merged revisions 86092 via svnmerge from
Steven Bethard <steven.bethard@gmail.com>
parents: 65868
diff changeset
2256 --nuts
5952b937ab9a Merged revisions 86092 via svnmerge from
Steven Bethard <steven.bethard@gmail.com>
parents: 65868
diff changeset
2257 '''
5952b937ab9a Merged revisions 86092 via svnmerge from
Steven Bethard <steven.bethard@gmail.com>
parents: 65868
diff changeset
2258 self.assertEqual(parser.format_help(), textwrap.dedent(expected))
59267
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
2259
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
2260 class MEMixin(object):
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
2261
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
2262 def test_failures_when_not_required(self):
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
2263 parse_args = self.get_parser(required=False).parse_args
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
2264 error = ArgumentParserError
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
2265 for args_string in self.failures:
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
2266 self.assertRaises(error, parse_args, args_string.split())
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
2267
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
2268 def test_failures_when_required(self):
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
2269 parse_args = self.get_parser(required=True).parse_args
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
2270 error = ArgumentParserError
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
2271 for args_string in self.failures + ['']:
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
2272 self.assertRaises(error, parse_args, args_string.split())
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
2273
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
2274 def test_successes_when_not_required(self):
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
2275 parse_args = self.get_parser(required=False).parse_args
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
2276 successes = self.successes + self.successes_when_not_required
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
2277 for args_string, expected_ns in successes:
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
2278 actual_ns = parse_args(args_string.split())
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
2279 self.assertEqual(actual_ns, expected_ns)
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
2280
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
2281 def test_successes_when_required(self):
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
2282 parse_args = self.get_parser(required=True).parse_args
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
2283 for args_string, expected_ns in self.successes:
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
2284 actual_ns = parse_args(args_string.split())
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
2285 self.assertEqual(actual_ns, expected_ns)
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
2286
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
2287 def test_usage_when_not_required(self):
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
2288 format_usage = self.get_parser(required=False).format_usage
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
2289 expected_usage = self.usage_when_not_required
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
2290 self.assertEqual(format_usage(), textwrap.dedent(expected_usage))
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
2291
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
2292 def test_usage_when_required(self):
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
2293 format_usage = self.get_parser(required=True).format_usage
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
2294 expected_usage = self.usage_when_required
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
2295 self.assertEqual(format_usage(), textwrap.dedent(expected_usage))
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
2296
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
2297 def test_help_when_not_required(self):
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
2298 format_help = self.get_parser(required=False).format_help
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
2299 help = self.usage_when_not_required + self.help
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
2300 self.assertEqual(format_help(), textwrap.dedent(help))
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
2301
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
2302 def test_help_when_required(self):
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
2303 format_help = self.get_parser(required=True).format_help
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
2304 help = self.usage_when_required + self.help
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
2305 self.assertEqual(format_help(), textwrap.dedent(help))
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
2306
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
2307
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
2308 class TestMutuallyExclusiveSimple(MEMixin, TestCase):
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
2309
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
2310 def get_parser(self, required=None):
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
2311 parser = ErrorRaisingArgumentParser(prog='PROG')
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
2312 group = parser.add_mutually_exclusive_group(required=required)
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
2313 group.add_argument('--bar', help='bar help')
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
2314 group.add_argument('--baz', nargs='?', const='Z', help='baz help')
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
2315 return parser
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
2316
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
2317 failures = ['--bar X --baz Y', '--bar X --baz']
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
2318 successes = [
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
2319 ('--bar X', NS(bar='X', baz=None)),
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
2320 ('--bar X --bar Z', NS(bar='Z', baz=None)),
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
2321 ('--baz Y', NS(bar=None, baz='Y')),
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
2322 ('--baz', NS(bar=None, baz='Z')),
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
2323 ]
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
2324 successes_when_not_required = [
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
2325 ('', NS(bar=None, baz=None)),
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
2326 ]
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
2327
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
2328 usage_when_not_required = '''\
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
2329 usage: PROG [-h] [--bar BAR | --baz [BAZ]]
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
2330 '''
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
2331 usage_when_required = '''\
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
2332 usage: PROG [-h] (--bar BAR | --baz [BAZ])
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
2333 '''
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
2334 help = '''\
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
2335
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
2336 optional arguments:
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
2337 -h, --help show this help message and exit
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
2338 --bar BAR bar help
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
2339 --baz [BAZ] baz help
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
2340 '''
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
2341
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
2342
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
2343 class TestMutuallyExclusiveLong(MEMixin, TestCase):
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
2344
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
2345 def get_parser(self, required=None):
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
2346 parser = ErrorRaisingArgumentParser(prog='PROG')
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
2347 parser.add_argument('--abcde', help='abcde help')
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
2348 parser.add_argument('--fghij', help='fghij help')
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
2349 group = parser.add_mutually_exclusive_group(required=required)
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
2350 group.add_argument('--klmno', help='klmno help')
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
2351 group.add_argument('--pqrst', help='pqrst help')
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
2352 return parser
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
2353
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
2354 failures = ['--klmno X --pqrst Y']
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
2355 successes = [
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
2356 ('--klmno X', NS(abcde=None, fghij=None, klmno='X', pqrst=None)),
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
2357 ('--abcde Y --klmno X',
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
2358 NS(abcde='Y', fghij=None, klmno='X', pqrst=None)),
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
2359 ('--pqrst X', NS(abcde=None, fghij=None, klmno=None, pqrst='X')),
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
2360 ('--pqrst X --fghij Y',
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
2361 NS(abcde=None, fghij='Y', klmno=None, pqrst='X')),
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
2362 ]
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
2363 successes_when_not_required = [
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
2364 ('', NS(abcde=None, fghij=None, klmno=None, pqrst=None)),
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
2365 ]
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
2366
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
2367 usage_when_not_required = '''\
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
2368 usage: PROG [-h] [--abcde ABCDE] [--fghij FGHIJ]
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
2369 [--klmno KLMNO | --pqrst PQRST]
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
2370 '''
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
2371 usage_when_required = '''\
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
2372 usage: PROG [-h] [--abcde ABCDE] [--fghij FGHIJ]
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
2373 (--klmno KLMNO | --pqrst PQRST)
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
2374 '''
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
2375 help = '''\
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
2376
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
2377 optional arguments:
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
2378 -h, --help show this help message and exit
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
2379 --abcde ABCDE abcde help
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
2380 --fghij FGHIJ fghij help
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
2381 --klmno KLMNO klmno help
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
2382 --pqrst PQRST pqrst help
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
2383 '''
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
2384
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
2385
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
2386 class TestMutuallyExclusiveFirstSuppressed(MEMixin, TestCase):
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
2387
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
2388 def get_parser(self, required):
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
2389 parser = ErrorRaisingArgumentParser(prog='PROG')
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
2390 group = parser.add_mutually_exclusive_group(required=required)
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
2391 group.add_argument('-x', help=argparse.SUPPRESS)
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
2392 group.add_argument('-y', action='store_false', help='y help')
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
2393 return parser
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
2394
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
2395 failures = ['-x X -y']
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
2396 successes = [
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
2397 ('-x X', NS(x='X', y=True)),
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
2398 ('-x X -x Y', NS(x='Y', y=True)),
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
2399 ('-y', NS(x=None, y=False)),
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
2400 ]
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
2401 successes_when_not_required = [
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
2402 ('', NS(x=None, y=True)),
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
2403 ]
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
2404
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
2405 usage_when_not_required = '''\
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
2406 usage: PROG [-h] [-y]
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
2407 '''
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
2408 usage_when_required = '''\
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
2409 usage: PROG [-h] -y
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
2410 '''
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
2411 help = '''\
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
2412
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
2413 optional arguments:
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
2414 -h, --help show this help message and exit
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
2415 -y y help
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
2416 '''
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
2417
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
2418
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
2419 class TestMutuallyExclusiveManySuppressed(MEMixin, TestCase):
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
2420
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
2421 def get_parser(self, required):
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
2422 parser = ErrorRaisingArgumentParser(prog='PROG')
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
2423 group = parser.add_mutually_exclusive_group(required=required)
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
2424 add = group.add_argument
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
2425 add('--spam', action='store_true', help=argparse.SUPPRESS)
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
2426 add('--badger', action='store_false', help=argparse.SUPPRESS)
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
2427 add('--bladder', help=argparse.SUPPRESS)
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
2428 return parser
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
2429
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
2430 failures = [
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
2431 '--spam --badger',
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
2432 '--badger --bladder B',
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
2433 '--bladder B --spam',
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
2434 ]
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
2435 successes = [
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
2436 ('--spam', NS(spam=True, badger=True, bladder=None)),
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
2437 ('--badger', NS(spam=False, badger=False, bladder=None)),
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
2438 ('--bladder B', NS(spam=False, badger=True, bladder='B')),
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
2439 ('--spam --spam', NS(spam=True, badger=True, bladder=None)),
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
2440 ]
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
2441 successes_when_not_required = [
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
2442 ('', NS(spam=False, badger=True, bladder=None)),
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
2443 ]
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
2444
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
2445 usage_when_required = usage_when_not_required = '''\
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
2446 usage: PROG [-h]
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
2447 '''
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
2448 help = '''\
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
2449
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
2450 optional arguments:
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
2451 -h, --help show this help message and exit
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
2452 '''
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
2453
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
2454
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
2455 class TestMutuallyExclusiveOptionalAndPositional(MEMixin, TestCase):
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
2456
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
2457 def get_parser(self, required):
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
2458 parser = ErrorRaisingArgumentParser(prog='PROG')
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
2459 group = parser.add_mutually_exclusive_group(required=required)
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
2460 group.add_argument('--foo', action='store_true', help='FOO')
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
2461 group.add_argument('--spam', help='SPAM')
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
2462 group.add_argument('badger', nargs='*', default='X', help='BADGER')
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
2463 return parser
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
2464
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
2465 failures = [
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
2466 '--foo --spam S',
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
2467 '--spam S X',
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
2468 'X --foo',
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
2469 'X Y Z --spam S',
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
2470 '--foo X Y',
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
2471 ]
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
2472 successes = [
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
2473 ('--foo', NS(foo=True, spam=None, badger='X')),
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
2474 ('--spam S', NS(foo=False, spam='S', badger='X')),
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
2475 ('X', NS(foo=False, spam=None, badger=['X'])),
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
2476 ('X Y Z', NS(foo=False, spam=None, badger=['X', 'Y', 'Z'])),
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
2477 ]
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
2478 successes_when_not_required = [
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
2479 ('', NS(foo=False, spam=None, badger='X')),
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
2480 ]
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
2481
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
2482 usage_when_not_required = '''\
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
2483 usage: PROG [-h] [--foo | --spam SPAM | badger [badger ...]]
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
2484 '''
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
2485 usage_when_required = '''\
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
2486 usage: PROG [-h] (--foo | --spam SPAM | badger [badger ...])
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
2487 '''
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
2488 help = '''\
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
2489
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
2490 positional arguments:
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
2491 badger BADGER
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
2492
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
2493 optional arguments:
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
2494 -h, --help show this help message and exit
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
2495 --foo FOO
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
2496 --spam SPAM SPAM
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
2497 '''
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
2498
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
2499
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
2500 class TestMutuallyExclusiveOptionalsMixed(MEMixin, TestCase):
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
2501
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
2502 def get_parser(self, required):
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
2503 parser = ErrorRaisingArgumentParser(prog='PROG')
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
2504 parser.add_argument('-x', action='store_true', help='x help')
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
2505 group = parser.add_mutually_exclusive_group(required=required)
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
2506 group.add_argument('-a', action='store_true', help='a help')
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
2507 group.add_argument('-b', action='store_true', help='b help')
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
2508 parser.add_argument('-y', action='store_true', help='y help')
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
2509 group.add_argument('-c', action='store_true', help='c help')
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
2510 return parser
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
2511
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
2512 failures = ['-a -b', '-b -c', '-a -c', '-a -b -c']
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
2513 successes = [
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
2514 ('-a', NS(a=True, b=False, c=False, x=False, y=False)),
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
2515 ('-b', NS(a=False, b=True, c=False, x=False, y=False)),
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
2516 ('-c', NS(a=False, b=False, c=True, x=False, y=False)),
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
2517 ('-a -x', NS(a=True, b=False, c=False, x=True, y=False)),
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
2518 ('-y -b', NS(a=False, b=True, c=False, x=False, y=True)),
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
2519 ('-x -y -c', NS(a=False, b=False, c=True, x=True, y=True)),
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
2520 ]
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
2521 successes_when_not_required = [
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
2522 ('', NS(a=False, b=False, c=False, x=False, y=False)),
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
2523 ('-x', NS(a=False, b=False, c=False, x=True, y=False)),
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
2524 ('-y', NS(a=False, b=False, c=False, x=False, y=True)),
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
2525 ]
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
2526
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
2527 usage_when_required = usage_when_not_required = '''\
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
2528 usage: PROG [-h] [-x] [-a] [-b] [-y] [-c]
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
2529 '''
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
2530 help = '''\
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
2531
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
2532 optional arguments:
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
2533 -h, --help show this help message and exit
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
2534 -x x help
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
2535 -a a help
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
2536 -b b help
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
2537 -y y help
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
2538 -c c help
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
2539 '''
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
2540
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
2541
67824
e82501812ae3 #10680: fix mutually exclusive arguments in argument groups.
Steven Bethard <steven.bethard@gmail.com>
parents: 67744
diff changeset
2542 class TestMutuallyExclusiveInGroup(MEMixin, TestCase):
e82501812ae3 #10680: fix mutually exclusive arguments in argument groups.
Steven Bethard <steven.bethard@gmail.com>
parents: 67744
diff changeset
2543
e82501812ae3 #10680: fix mutually exclusive arguments in argument groups.
Steven Bethard <steven.bethard@gmail.com>
parents: 67744
diff changeset
2544 def get_parser(self, required=None):
e82501812ae3 #10680: fix mutually exclusive arguments in argument groups.
Steven Bethard <steven.bethard@gmail.com>
parents: 67744
diff changeset
2545 parser = ErrorRaisingArgumentParser(prog='PROG')
e82501812ae3 #10680: fix mutually exclusive arguments in argument groups.
Steven Bethard <steven.bethard@gmail.com>
parents: 67744
diff changeset
2546 titled_group = parser.add_argument_group(
e82501812ae3 #10680: fix mutually exclusive arguments in argument groups.
Steven Bethard <steven.bethard@gmail.com>
parents: 67744
diff changeset
2547 title='Titled group', description='Group description')
e82501812ae3 #10680: fix mutually exclusive arguments in argument groups.
Steven Bethard <steven.bethard@gmail.com>
parents: 67744
diff changeset
2548 mutex_group = \
e82501812ae3 #10680: fix mutually exclusive arguments in argument groups.
Steven Bethard <steven.bethard@gmail.com>
parents: 67744
diff changeset
2549 titled_group.add_mutually_exclusive_group(required=required)
e82501812ae3 #10680: fix mutually exclusive arguments in argument groups.
Steven Bethard <steven.bethard@gmail.com>
parents: 67744
diff changeset
2550 mutex_group.add_argument('--bar', help='bar help')
e82501812ae3 #10680: fix mutually exclusive arguments in argument groups.
Steven Bethard <steven.bethard@gmail.com>
parents: 67744
diff changeset
2551 mutex_group.add_argument('--baz', help='baz help')
e82501812ae3 #10680: fix mutually exclusive arguments in argument groups.
Steven Bethard <steven.bethard@gmail.com>
parents: 67744
diff changeset
2552 return parser
e82501812ae3 #10680: fix mutually exclusive arguments in argument groups.
Steven Bethard <steven.bethard@gmail.com>
parents: 67744
diff changeset
2553
e82501812ae3 #10680: fix mutually exclusive arguments in argument groups.
Steven Bethard <steven.bethard@gmail.com>
parents: 67744
diff changeset
2554 failures = ['--bar X --baz Y', '--baz X --bar Y']
e82501812ae3 #10680: fix mutually exclusive arguments in argument groups.
Steven Bethard <steven.bethard@gmail.com>
parents: 67744
diff changeset
2555 successes = [
e82501812ae3 #10680: fix mutually exclusive arguments in argument groups.
Steven Bethard <steven.bethard@gmail.com>
parents: 67744
diff changeset
2556 ('--bar X', NS(bar='X', baz=None)),
e82501812ae3 #10680: fix mutually exclusive arguments in argument groups.
Steven Bethard <steven.bethard@gmail.com>
parents: 67744
diff changeset
2557 ('--baz Y', NS(bar=None, baz='Y')),
e82501812ae3 #10680: fix mutually exclusive arguments in argument groups.
Steven Bethard <steven.bethard@gmail.com>
parents: 67744
diff changeset
2558 ]
e82501812ae3 #10680: fix mutually exclusive arguments in argument groups.
Steven Bethard <steven.bethard@gmail.com>
parents: 67744
diff changeset
2559 successes_when_not_required = [
e82501812ae3 #10680: fix mutually exclusive arguments in argument groups.
Steven Bethard <steven.bethard@gmail.com>
parents: 67744
diff changeset
2560 ('', NS(bar=None, baz=None)),
e82501812ae3 #10680: fix mutually exclusive arguments in argument groups.
Steven Bethard <steven.bethard@gmail.com>
parents: 67744
diff changeset
2561 ]
e82501812ae3 #10680: fix mutually exclusive arguments in argument groups.
Steven Bethard <steven.bethard@gmail.com>
parents: 67744
diff changeset
2562
e82501812ae3 #10680: fix mutually exclusive arguments in argument groups.
Steven Bethard <steven.bethard@gmail.com>
parents: 67744
diff changeset
2563 usage_when_not_required = '''\
e82501812ae3 #10680: fix mutually exclusive arguments in argument groups.
Steven Bethard <steven.bethard@gmail.com>
parents: 67744
diff changeset
2564 usage: PROG [-h] [--bar BAR | --baz BAZ]
e82501812ae3 #10680: fix mutually exclusive arguments in argument groups.
Steven Bethard <steven.bethard@gmail.com>
parents: 67744
diff changeset
2565 '''
e82501812ae3 #10680: fix mutually exclusive arguments in argument groups.
Steven Bethard <steven.bethard@gmail.com>
parents: 67744
diff changeset
2566 usage_when_required = '''\
e82501812ae3 #10680: fix mutually exclusive arguments in argument groups.
Steven Bethard <steven.bethard@gmail.com>
parents: 67744
diff changeset
2567 usage: PROG [-h] (--bar BAR | --baz BAZ)
e82501812ae3 #10680: fix mutually exclusive arguments in argument groups.
Steven Bethard <steven.bethard@gmail.com>
parents: 67744
diff changeset
2568 '''
e82501812ae3 #10680: fix mutually exclusive arguments in argument groups.
Steven Bethard <steven.bethard@gmail.com>
parents: 67744
diff changeset
2569 help = '''\
e82501812ae3 #10680: fix mutually exclusive arguments in argument groups.
Steven Bethard <steven.bethard@gmail.com>
parents: 67744
diff changeset
2570
e82501812ae3 #10680: fix mutually exclusive arguments in argument groups.
Steven Bethard <steven.bethard@gmail.com>
parents: 67744
diff changeset
2571 optional arguments:
e82501812ae3 #10680: fix mutually exclusive arguments in argument groups.
Steven Bethard <steven.bethard@gmail.com>
parents: 67744
diff changeset
2572 -h, --help show this help message and exit
e82501812ae3 #10680: fix mutually exclusive arguments in argument groups.
Steven Bethard <steven.bethard@gmail.com>
parents: 67744
diff changeset
2573
e82501812ae3 #10680: fix mutually exclusive arguments in argument groups.
Steven Bethard <steven.bethard@gmail.com>
parents: 67744
diff changeset
2574 Titled group:
e82501812ae3 #10680: fix mutually exclusive arguments in argument groups.
Steven Bethard <steven.bethard@gmail.com>
parents: 67744
diff changeset
2575 Group description
e82501812ae3 #10680: fix mutually exclusive arguments in argument groups.
Steven Bethard <steven.bethard@gmail.com>
parents: 67744
diff changeset
2576
e82501812ae3 #10680: fix mutually exclusive arguments in argument groups.
Steven Bethard <steven.bethard@gmail.com>
parents: 67744
diff changeset
2577 --bar BAR bar help
e82501812ae3 #10680: fix mutually exclusive arguments in argument groups.
Steven Bethard <steven.bethard@gmail.com>
parents: 67744
diff changeset
2578 --baz BAZ baz help
e82501812ae3 #10680: fix mutually exclusive arguments in argument groups.
Steven Bethard <steven.bethard@gmail.com>
parents: 67744
diff changeset
2579 '''
e82501812ae3 #10680: fix mutually exclusive arguments in argument groups.
Steven Bethard <steven.bethard@gmail.com>
parents: 67744
diff changeset
2580
e82501812ae3 #10680: fix mutually exclusive arguments in argument groups.
Steven Bethard <steven.bethard@gmail.com>
parents: 67744
diff changeset
2581
59267
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
2582 class TestMutuallyExclusiveOptionalsAndPositionalsMixed(MEMixin, TestCase):
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
2583
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
2584 def get_parser(self, required):
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
2585 parser = ErrorRaisingArgumentParser(prog='PROG')
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
2586 parser.add_argument('x', help='x help')
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
2587 parser.add_argument('-y', action='store_true', help='y help')
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
2588 group = parser.add_mutually_exclusive_group(required=required)
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
2589 group.add_argument('a', nargs='?', help='a help')
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
2590 group.add_argument('-b', action='store_true', help='b help')
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
2591 group.add_argument('-c', action='store_true', help='c help')
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
2592 return parser
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
2593
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
2594 failures = ['X A -b', '-b -c', '-c X A']
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
2595 successes = [
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
2596 ('X A', NS(a='A', b=False, c=False, x='X', y=False)),
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
2597 ('X -b', NS(a=None, b=True, c=False, x='X', y=False)),
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
2598 ('X -c', NS(a=None, b=False, c=True, x='X', y=False)),
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
2599 ('X A -y', NS(a='A', b=False, c=False, x='X', y=True)),
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
2600 ('X -y -b', NS(a=None, b=True, c=False, x='X', y=True)),
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
2601 ]
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
2602 successes_when_not_required = [
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
2603 ('X', NS(a=None, b=False, c=False, x='X', y=False)),
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
2604 ('X -y', NS(a=None, b=False, c=False, x='X', y=True)),
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
2605 ]
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
2606
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
2607 usage_when_required = usage_when_not_required = '''\
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
2608 usage: PROG [-h] [-y] [-b] [-c] x [a]
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
2609 '''
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
2610 help = '''\
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
2611
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
2612 positional arguments:
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
2613 x x help
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
2614 a a help
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
2615
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
2616 optional arguments:
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
2617 -h, --help show this help message and exit
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
2618 -y y help
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
2619 -b b help
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
2620 -c c help
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
2621 '''
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
2622
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
2623 # =================================================
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
2624 # Mutually exclusive group in parent parser tests
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
2625 # =================================================
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
2626
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
2627 class MEPBase(object):
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
2628
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
2629 def get_parser(self, required=None):
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
2630 parent = super(MEPBase, self).get_parser(required=required)
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
2631 parser = ErrorRaisingArgumentParser(
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
2632 prog=parent.prog, add_help=False, parents=[parent])
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
2633 return parser
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
2634
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
2635
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
2636 class TestMutuallyExclusiveGroupErrorsParent(
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
2637 MEPBase, TestMutuallyExclusiveGroupErrors):
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
2638 pass
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
2639
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
2640
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
2641 class TestMutuallyExclusiveSimpleParent(
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
2642 MEPBase, TestMutuallyExclusiveSimple):
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
2643 pass
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
2644
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
2645
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
2646 class TestMutuallyExclusiveLongParent(
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
2647 MEPBase, TestMutuallyExclusiveLong):
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
2648 pass
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
2649
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
2650
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
2651 class TestMutuallyExclusiveFirstSuppressedParent(
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
2652 MEPBase, TestMutuallyExclusiveFirstSuppressed):
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
2653 pass
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
2654
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
2655
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
2656 class TestMutuallyExclusiveManySuppressedParent(
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
2657 MEPBase, TestMutuallyExclusiveManySuppressed):
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
2658 pass
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
2659
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
2660
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
2661 class TestMutuallyExclusiveOptionalAndPositionalParent(
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
2662 MEPBase, TestMutuallyExclusiveOptionalAndPositional):
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
2663 pass
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
2664
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
2665
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
2666 class TestMutuallyExclusiveOptionalsMixedParent(
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
2667 MEPBase, TestMutuallyExclusiveOptionalsMixed):
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
2668 pass
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
2669
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
2670
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
2671 class TestMutuallyExclusiveOptionalsAndPositionalsMixedParent(
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
2672 MEPBase, TestMutuallyExclusiveOptionalsAndPositionalsMixed):
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
2673 pass
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
2674
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
2675 # =================
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
2676 # Set default tests
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
2677 # =================
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
2678
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
2679 class TestSetDefaults(TestCase):
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
2680
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
2681 def test_set_defaults_no_args(self):
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
2682 parser = ErrorRaisingArgumentParser()
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
2683 parser.set_defaults(x='foo')
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
2684 parser.set_defaults(y='bar', z=1)
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
2685 self.assertEqual(NS(x='foo', y='bar', z=1),
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
2686 parser.parse_args([]))
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
2687 self.assertEqual(NS(x='foo', y='bar', z=1),
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
2688 parser.parse_args([], NS()))
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
2689 self.assertEqual(NS(x='baz', y='bar', z=1),
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
2690 parser.parse_args([], NS(x='baz')))
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
2691 self.assertEqual(NS(x='baz', y='bar', z=2),
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
2692 parser.parse_args([], NS(x='baz', z=2)))
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
2693
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
2694 def test_set_defaults_with_args(self):
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
2695 parser = ErrorRaisingArgumentParser()
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
2696 parser.set_defaults(x='foo', y='bar')
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
2697 parser.add_argument('-x', default='xfoox')
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
2698 self.assertEqual(NS(x='xfoox', y='bar'),
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
2699 parser.parse_args([]))
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
2700 self.assertEqual(NS(x='xfoox', y='bar'),
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
2701 parser.parse_args([], NS()))
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
2702 self.assertEqual(NS(x='baz', y='bar'),
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
2703 parser.parse_args([], NS(x='baz')))
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
2704 self.assertEqual(NS(x='1', y='bar'),
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
2705 parser.parse_args('-x 1'.split()))
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
2706 self.assertEqual(NS(x='1', y='bar'),
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
2707 parser.parse_args('-x 1'.split(), NS()))
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
2708 self.assertEqual(NS(x='1', y='bar'),
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
2709 parser.parse_args('-x 1'.split(), NS(x='baz')))
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
2710
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
2711 def test_set_defaults_subparsers(self):
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
2712 parser = ErrorRaisingArgumentParser()
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
2713 parser.set_defaults(x='foo')
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
2714 subparsers = parser.add_subparsers()
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
2715 parser_a = subparsers.add_parser('a')
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
2716 parser_a.set_defaults(y='bar')
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
2717 self.assertEqual(NS(x='foo', y='bar'),
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
2718 parser.parse_args('a'.split()))
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
2719
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
2720 def test_set_defaults_parents(self):
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
2721 parent = ErrorRaisingArgumentParser(add_help=False)
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
2722 parent.set_defaults(x='foo')
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
2723 parser = ErrorRaisingArgumentParser(parents=[parent])
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
2724 self.assertEqual(NS(x='foo'), parser.parse_args([]))
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
2725
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
2726 def test_set_defaults_same_as_add_argument(self):
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
2727 parser = ErrorRaisingArgumentParser()
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
2728 parser.set_defaults(w='W', x='X', y='Y', z='Z')
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
2729 parser.add_argument('-w')
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
2730 parser.add_argument('-x', default='XX')
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
2731 parser.add_argument('y', nargs='?')
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
2732 parser.add_argument('z', nargs='?', default='ZZ')
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
2733
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
2734 # defaults set previously
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
2735 self.assertEqual(NS(w='W', x='XX', y='Y', z='ZZ'),
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
2736 parser.parse_args([]))
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
2737
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
2738 # reset defaults
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
2739 parser.set_defaults(w='WW', x='X', y='YY', z='Z')
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
2740 self.assertEqual(NS(w='WW', x='X', y='YY', z='Z'),
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
2741 parser.parse_args([]))
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
2742
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
2743 def test_set_defaults_same_as_add_argument_group(self):
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
2744 parser = ErrorRaisingArgumentParser()
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
2745 parser.set_defaults(w='W', x='X', y='Y', z='Z')
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
2746 group = parser.add_argument_group('foo')
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
2747 group.add_argument('-w')
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
2748 group.add_argument('-x', default='XX')
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
2749 group.add_argument('y', nargs='?')
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
2750 group.add_argument('z', nargs='?', default='ZZ')
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
2751
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
2752
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
2753 # defaults set previously
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
2754 self.assertEqual(NS(w='W', x='XX', y='Y', z='ZZ'),
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
2755 parser.parse_args([]))
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
2756
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
2757 # reset defaults
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
2758 parser.set_defaults(w='WW', x='X', y='YY', z='Z')
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
2759 self.assertEqual(NS(w='WW', x='X', y='YY', z='Z'),
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
2760 parser.parse_args([]))
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
2761
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
2762 # =================
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
2763 # Get default tests
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
2764 # =================
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
2765
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
2766 class TestGetDefault(TestCase):
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
2767
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
2768 def test_get_default(self):
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
2769 parser = ErrorRaisingArgumentParser()
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
2770 self.assertEqual(None, parser.get_default("foo"))
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
2771 self.assertEqual(None, parser.get_default("bar"))
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
2772
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
2773 parser.add_argument("--foo")
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
2774 self.assertEqual(None, parser.get_default("foo"))
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
2775 self.assertEqual(None, parser.get_default("bar"))
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
2776
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
2777 parser.add_argument("--bar", type=int, default=42)
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
2778 self.assertEqual(None, parser.get_default("foo"))
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
2779 self.assertEqual(42, parser.get_default("bar"))
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
2780
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
2781 parser.set_defaults(foo="badger")
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
2782 self.assertEqual("badger", parser.get_default("foo"))
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
2783 self.assertEqual(42, parser.get_default("bar"))
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
2784
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
2785 # ==========================
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
2786 # Namespace 'contains' tests
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
2787 # ==========================
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
2788
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
2789 class TestNamespaceContainsSimple(TestCase):
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
2790
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
2791 def test_empty(self):
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
2792 ns = argparse.Namespace()
66348
614c84670c63 Merged revisions 86596 via svnmerge from
Ezio Melotti <ezio.melotti@gmail.com>
parents: 65888
diff changeset
2793 self.assertEqual('' in ns, False)
614c84670c63 Merged revisions 86596 via svnmerge from
Ezio Melotti <ezio.melotti@gmail.com>
parents: 65888
diff changeset
2794 self.assertEqual('' not in ns, True)
614c84670c63 Merged revisions 86596 via svnmerge from
Ezio Melotti <ezio.melotti@gmail.com>
parents: 65888
diff changeset
2795 self.assertEqual('x' in ns, False)
59267
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
2796
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
2797 def test_non_empty(self):
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
2798 ns = argparse.Namespace(x=1, y=2)
66348
614c84670c63 Merged revisions 86596 via svnmerge from
Ezio Melotti <ezio.melotti@gmail.com>
parents: 65888
diff changeset
2799 self.assertEqual('x' in ns, True)
614c84670c63 Merged revisions 86596 via svnmerge from
Ezio Melotti <ezio.melotti@gmail.com>
parents: 65888
diff changeset
2800 self.assertEqual('x' not in ns, False)
614c84670c63 Merged revisions 86596 via svnmerge from
Ezio Melotti <ezio.melotti@gmail.com>
parents: 65888
diff changeset
2801 self.assertEqual('y' in ns, True)
614c84670c63 Merged revisions 86596 via svnmerge from
Ezio Melotti <ezio.melotti@gmail.com>
parents: 65888
diff changeset
2802 self.assertEqual('' in ns, False)
614c84670c63 Merged revisions 86596 via svnmerge from
Ezio Melotti <ezio.melotti@gmail.com>
parents: 65888
diff changeset
2803 self.assertEqual('xx' in ns, False)
614c84670c63 Merged revisions 86596 via svnmerge from
Ezio Melotti <ezio.melotti@gmail.com>
parents: 65888
diff changeset
2804 self.assertEqual('z' in ns, False)
59267
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
2805
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
2806 # =====================
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
2807 # Help formatting tests
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
2808 # =====================
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
2809
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
2810 class TestHelpFormattingMetaclass(type):
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
2811
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
2812 def __init__(cls, name, bases, bodydict):
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
2813 if name == 'HelpTestCase':
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
2814 return
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
2815
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
2816 class AddTests(object):
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
2817
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
2818 def __init__(self, test_class, func_suffix, std_name):
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
2819 self.func_suffix = func_suffix
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
2820 self.std_name = std_name
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
2821
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
2822 for test_func in [self.test_format,
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
2823 self.test_print,
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
2824 self.test_print_file]:
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
2825 test_name = '%s_%s' % (test_func.__name__, func_suffix)
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
2826
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
2827 def test_wrapper(self, test_func=test_func):
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
2828 test_func(self)
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
2829 try:
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
2830 test_wrapper.__name__ = test_name
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
2831 except TypeError:
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
2832 pass
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
2833 setattr(test_class, test_name, test_wrapper)
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
2834
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
2835 def _get_parser(self, tester):
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
2836 parser = argparse.ArgumentParser(
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
2837 *tester.parser_signature.args,
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
2838 **tester.parser_signature.kwargs)
69005
75ec20b4c50e Issue #9026: Fix order of argparse sub-commands in help messages. (Merged from 3.2.)
Steven Bethard <steven.bethard@gmail.com>
parents: 68969
diff changeset
2839 for argument_sig in getattr(tester, 'argument_signatures', []):
59267
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
2840 parser.add_argument(*argument_sig.args,
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
2841 **argument_sig.kwargs)
69005
75ec20b4c50e Issue #9026: Fix order of argparse sub-commands in help messages. (Merged from 3.2.)
Steven Bethard <steven.bethard@gmail.com>
parents: 68969
diff changeset
2842 group_sigs = getattr(tester, 'argument_group_signatures', [])
75ec20b4c50e Issue #9026: Fix order of argparse sub-commands in help messages. (Merged from 3.2.)
Steven Bethard <steven.bethard@gmail.com>
parents: 68969
diff changeset
2843 for group_sig, argument_sigs in group_sigs:
59267
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
2844 group = parser.add_argument_group(*group_sig.args,
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
2845 **group_sig.kwargs)
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
2846 for argument_sig in argument_sigs:
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
2847 group.add_argument(*argument_sig.args,
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
2848 **argument_sig.kwargs)
69005
75ec20b4c50e Issue #9026: Fix order of argparse sub-commands in help messages. (Merged from 3.2.)
Steven Bethard <steven.bethard@gmail.com>
parents: 68969
diff changeset
2849 subparsers_sigs = getattr(tester, 'subparsers_signatures', [])
75ec20b4c50e Issue #9026: Fix order of argparse sub-commands in help messages. (Merged from 3.2.)
Steven Bethard <steven.bethard@gmail.com>
parents: 68969
diff changeset
2850 if subparsers_sigs:
75ec20b4c50e Issue #9026: Fix order of argparse sub-commands in help messages. (Merged from 3.2.)
Steven Bethard <steven.bethard@gmail.com>
parents: 68969
diff changeset
2851 subparsers = parser.add_subparsers()
75ec20b4c50e Issue #9026: Fix order of argparse sub-commands in help messages. (Merged from 3.2.)
Steven Bethard <steven.bethard@gmail.com>
parents: 68969
diff changeset
2852 for subparser_sig in subparsers_sigs:
75ec20b4c50e Issue #9026: Fix order of argparse sub-commands in help messages. (Merged from 3.2.)
Steven Bethard <steven.bethard@gmail.com>
parents: 68969
diff changeset
2853 subparsers.add_parser(*subparser_sig.args,
75ec20b4c50e Issue #9026: Fix order of argparse sub-commands in help messages. (Merged from 3.2.)
Steven Bethard <steven.bethard@gmail.com>
parents: 68969
diff changeset
2854 **subparser_sig.kwargs)
59267
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
2855 return parser
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
2856
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
2857 def _test(self, tester, parser_text):
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
2858 expected_text = getattr(tester, self.func_suffix)
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
2859 expected_text = textwrap.dedent(expected_text)
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
2860 if expected_text != parser_text:
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
2861 print(repr(expected_text))
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
2862 print(repr(parser_text))
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
2863 for char1, char2 in zip(expected_text, parser_text):
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
2864 if char1 != char2:
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
2865 print('first diff: %r %r' % (char1, char2))
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
2866 break
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
2867 tester.assertEqual(expected_text, parser_text)
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
2868
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
2869 def test_format(self, tester):
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
2870 parser = self._get_parser(tester)
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
2871 format = getattr(parser, 'format_%s' % self.func_suffix)
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
2872 self._test(tester, format())
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
2873
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
2874 def test_print(self, tester):
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
2875 parser = self._get_parser(tester)
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
2876 print_ = getattr(parser, 'print_%s' % self.func_suffix)
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
2877 old_stream = getattr(sys, self.std_name)
60453
2e8d2d7c43c0 Switch regrtest to use StringIO instead of cStringIO for test_multiprocessing on Windows. Issue 8333.
Michael Foord <fuzzyman@voidspace.org.uk>
parents: 60116
diff changeset
2878 setattr(sys, self.std_name, StdIOBuffer())
59267
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
2879 try:
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
2880 print_()
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
2881 parser_text = getattr(sys, self.std_name).getvalue()
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
2882 finally:
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
2883 setattr(sys, self.std_name, old_stream)
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
2884 self._test(tester, parser_text)
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
2885
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
2886 def test_print_file(self, tester):
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
2887 parser = self._get_parser(tester)
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
2888 print_ = getattr(parser, 'print_%s' % self.func_suffix)
60453
2e8d2d7c43c0 Switch regrtest to use StringIO instead of cStringIO for test_multiprocessing on Windows. Issue 8333.
Michael Foord <fuzzyman@voidspace.org.uk>
parents: 60116
diff changeset
2889 sfile = StdIOBuffer()
59267
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
2890 print_(sfile)
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
2891 parser_text = sfile.getvalue()
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
2892 self._test(tester, parser_text)
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
2893
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
2894 # add tests for {format,print}_{usage,help,version}
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
2895 for func_suffix, std_name in [('usage', 'stdout'),
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
2896 ('help', 'stdout'),
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
2897 ('version', 'stderr')]:
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
2898 AddTests(cls, func_suffix, std_name)
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
2899
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
2900 bases = TestCase,
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
2901 HelpTestCase = TestHelpFormattingMetaclass('HelpTestCase', bases, {})
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
2902
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
2903
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
2904 class TestHelpBiggerOptionals(HelpTestCase):
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
2905 """Make sure that argument help aligns when options are longer"""
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
2906
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
2907 parser_signature = Sig(prog='PROG', description='DESCRIPTION',
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
2908 epilog='EPILOG', version='0.1')
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
2909 argument_signatures = [
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
2910 Sig('-x', action='store_true', help='X HELP'),
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
2911 Sig('--y', help='Y HELP'),
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
2912 Sig('foo', help='FOO HELP'),
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
2913 Sig('bar', help='BAR HELP'),
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
2914 ]
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
2915 argument_group_signatures = []
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
2916 usage = '''\
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
2917 usage: PROG [-h] [-v] [-x] [--y Y] foo bar
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
2918 '''
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
2919 help = usage + '''\
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
2920
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
2921 DESCRIPTION
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
2922
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
2923 positional arguments:
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
2924 foo FOO HELP
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
2925 bar BAR HELP
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
2926
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
2927 optional arguments:
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
2928 -h, --help show this help message and exit
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
2929 -v, --version show program's version number and exit
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
2930 -x X HELP
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
2931 --y Y Y HELP
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
2932
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
2933 EPILOG
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
2934 '''
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
2935 version = '''\
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
2936 0.1
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
2937 '''
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
2938
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
2939
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
2940 class TestHelpBiggerOptionalGroups(HelpTestCase):
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
2941 """Make sure that argument help aligns when options are longer"""
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
2942
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
2943 parser_signature = Sig(prog='PROG', description='DESCRIPTION',
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
2944 epilog='EPILOG', version='0.1')
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
2945 argument_signatures = [
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
2946 Sig('-x', action='store_true', help='X HELP'),
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
2947 Sig('--y', help='Y HELP'),
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
2948 Sig('foo', help='FOO HELP'),
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
2949 Sig('bar', help='BAR HELP'),
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
2950 ]
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
2951 argument_group_signatures = [
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
2952 (Sig('GROUP TITLE', description='GROUP DESCRIPTION'), [
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
2953 Sig('baz', help='BAZ HELP'),
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
2954 Sig('-z', nargs='+', help='Z HELP')]),
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
2955 ]
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
2956 usage = '''\
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
2957 usage: PROG [-h] [-v] [-x] [--y Y] [-z Z [Z ...]] foo bar baz
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
2958 '''
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
2959 help = usage + '''\
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
2960
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
2961 DESCRIPTION
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
2962
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
2963 positional arguments:
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
2964 foo FOO HELP
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
2965 bar BAR HELP
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
2966
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
2967 optional arguments:
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
2968 -h, --help show this help message and exit
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
2969 -v, --version show program's version number and exit
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
2970 -x X HELP
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
2971 --y Y Y HELP
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
2972
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
2973 GROUP TITLE:
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
2974 GROUP DESCRIPTION
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
2975
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
2976 baz BAZ HELP
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
2977 -z Z [Z ...] Z HELP
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
2978
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
2979 EPILOG
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
2980 '''
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
2981 version = '''\
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
2982 0.1
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
2983 '''
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
2984
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
2985
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
2986 class TestHelpBiggerPositionals(HelpTestCase):
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
2987 """Make sure that help aligns when arguments are longer"""
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
2988
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
2989 parser_signature = Sig(usage='USAGE', description='DESCRIPTION')
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
2990 argument_signatures = [
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
2991 Sig('-x', action='store_true', help='X HELP'),
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
2992 Sig('--y', help='Y HELP'),
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
2993 Sig('ekiekiekifekang', help='EKI HELP'),
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
2994 Sig('bar', help='BAR HELP'),
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
2995 ]
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
2996 argument_group_signatures = []
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
2997 usage = '''\
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
2998 usage: USAGE
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
2999 '''
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
3000 help = usage + '''\
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
3001
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
3002 DESCRIPTION
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
3003
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
3004 positional arguments:
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
3005 ekiekiekifekang EKI HELP
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
3006 bar BAR HELP
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
3007
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
3008 optional arguments:
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
3009 -h, --help show this help message and exit
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
3010 -x X HELP
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
3011 --y Y Y HELP
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
3012 '''
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
3013
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
3014 version = ''
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
3015
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
3016
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
3017 class TestHelpReformatting(HelpTestCase):
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
3018 """Make sure that text after short names starts on the first line"""
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
3019
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
3020 parser_signature = Sig(
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
3021 prog='PROG',
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
3022 description=' oddly formatted\n'
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
3023 'description\n'
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
3024 '\n'
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
3025 'that is so long that it should go onto multiple '
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
3026 'lines when wrapped')
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
3027 argument_signatures = [
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
3028 Sig('-x', metavar='XX', help='oddly\n'
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
3029 ' formatted -x help'),
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
3030 Sig('y', metavar='yyy', help='normal y help'),
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
3031 ]
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
3032 argument_group_signatures = [
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
3033 (Sig('title', description='\n'
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
3034 ' oddly formatted group\n'
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
3035 '\n'
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
3036 'description'),
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
3037 [Sig('-a', action='store_true',
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
3038 help=' oddly \n'
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
3039 'formatted -a help \n'
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
3040 ' again, so long that it should be wrapped over '
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
3041 'multiple lines')]),
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
3042 ]
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
3043 usage = '''\
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
3044 usage: PROG [-h] [-x XX] [-a] yyy
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
3045 '''
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
3046 help = usage + '''\
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
3047
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
3048 oddly formatted description that is so long that it should go onto \
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
3049 multiple
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
3050 lines when wrapped
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
3051
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
3052 positional arguments:
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
3053 yyy normal y help
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
3054
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
3055 optional arguments:
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
3056 -h, --help show this help message and exit
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
3057 -x XX oddly formatted -x help
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
3058
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
3059 title:
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
3060 oddly formatted group description
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
3061
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
3062 -a oddly formatted -a help again, so long that it should \
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
3063 be wrapped
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
3064 over multiple lines
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
3065 '''
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
3066 version = ''
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
3067
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
3068
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
3069 class TestHelpWrappingShortNames(HelpTestCase):
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
3070 """Make sure that text after short names starts on the first line"""
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
3071
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
3072 parser_signature = Sig(prog='PROG', description= 'D\nD' * 30)
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
3073 argument_signatures = [
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
3074 Sig('-x', metavar='XX', help='XHH HX' * 20),
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
3075 Sig('y', metavar='yyy', help='YH YH' * 20),
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
3076 ]
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
3077 argument_group_signatures = [
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
3078 (Sig('ALPHAS'), [
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
3079 Sig('-a', action='store_true', help='AHHH HHA' * 10)]),
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
3080 ]
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
3081 usage = '''\
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
3082 usage: PROG [-h] [-x XX] [-a] yyy
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
3083 '''
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
3084 help = usage + '''\
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
3085
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
3086 D DD DD DD DD DD DD DD DD DD DD DD DD DD DD DD DD DD DD DD DD DD DD \
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
3087 DD DD DD
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
3088 DD DD DD DD D
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
3089
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
3090 positional arguments:
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
3091 yyy YH YHYH YHYH YHYH YHYH YHYH YHYH YHYH YHYH YHYH YHYH \
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
3092 YHYH YHYH
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
3093 YHYH YHYH YHYH YHYH YHYH YHYH YHYH YH
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
3094
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
3095 optional arguments:
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
3096 -h, --help show this help message and exit
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
3097 -x XX XHH HXXHH HXXHH HXXHH HXXHH HXXHH HXXHH HXXHH HXXHH \
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
3098 HXXHH HXXHH
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
3099 HXXHH HXXHH HXXHH HXXHH HXXHH HXXHH HXXHH HXXHH HXXHH HX
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
3100
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
3101 ALPHAS:
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
3102 -a AHHH HHAAHHH HHAAHHH HHAAHHH HHAAHHH HHAAHHH HHAAHHH \
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
3103 HHAAHHH
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
3104 HHAAHHH HHAAHHH HHA
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
3105 '''
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
3106 version = ''
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
3107
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
3108
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
3109 class TestHelpWrappingLongNames(HelpTestCase):
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
3110 """Make sure that text after long names starts on the next line"""
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
3111
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
3112 parser_signature = Sig(usage='USAGE', description= 'D D' * 30,
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
3113 version='V V'*30)
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
3114 argument_signatures = [
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
3115 Sig('-x', metavar='X' * 25, help='XH XH' * 20),
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
3116 Sig('y', metavar='y' * 25, help='YH YH' * 20),
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
3117 ]
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
3118 argument_group_signatures = [
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
3119 (Sig('ALPHAS'), [
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
3120 Sig('-a', metavar='A' * 25, help='AH AH' * 20),
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
3121 Sig('z', metavar='z' * 25, help='ZH ZH' * 20)]),
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
3122 ]
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
3123 usage = '''\
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
3124 usage: USAGE
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
3125 '''
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
3126 help = usage + '''\
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
3127
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
3128 D DD DD DD DD DD DD DD DD DD DD DD DD DD DD DD DD DD DD DD DD DD DD \
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
3129 DD DD DD
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
3130 DD DD DD DD D
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
3131
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
3132 positional arguments:
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
3133 yyyyyyyyyyyyyyyyyyyyyyyyy
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
3134 YH YHYH YHYH YHYH YHYH YHYH YHYH YHYH YHYH \
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
3135 YHYH YHYH
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
3136 YHYH YHYH YHYH YHYH YHYH YHYH YHYH YHYH YHYH YH
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
3137
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
3138 optional arguments:
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
3139 -h, --help show this help message and exit
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
3140 -v, --version show program's version number and exit
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
3141 -x XXXXXXXXXXXXXXXXXXXXXXXXX
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
3142 XH XHXH XHXH XHXH XHXH XHXH XHXH XHXH XHXH \
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
3143 XHXH XHXH
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
3144 XHXH XHXH XHXH XHXH XHXH XHXH XHXH XHXH XHXH XH
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
3145
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
3146 ALPHAS:
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
3147 -a AAAAAAAAAAAAAAAAAAAAAAAAA
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
3148 AH AHAH AHAH AHAH AHAH AHAH AHAH AHAH AHAH \
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
3149 AHAH AHAH
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
3150 AHAH AHAH AHAH AHAH AHAH AHAH AHAH AHAH AHAH AH
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
3151 zzzzzzzzzzzzzzzzzzzzzzzzz
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
3152 ZH ZHZH ZHZH ZHZH ZHZH ZHZH ZHZH ZHZH ZHZH \
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
3153 ZHZH ZHZH
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
3154 ZHZH ZHZH ZHZH ZHZH ZHZH ZHZH ZHZH ZHZH ZHZH ZH
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
3155 '''
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
3156 version = '''\
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
3157 V VV VV VV VV VV VV VV VV VV VV VV VV VV VV VV VV VV VV VV VV VV VV \
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
3158 VV VV VV
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
3159 VV VV VV VV V
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
3160 '''
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
3161
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
3162
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
3163 class TestHelpUsage(HelpTestCase):
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
3164 """Test basic usage messages"""
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
3165
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
3166 parser_signature = Sig(prog='PROG')
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
3167 argument_signatures = [
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
3168 Sig('-w', nargs='+', help='w'),
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
3169 Sig('-x', nargs='*', help='x'),
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
3170 Sig('a', help='a'),
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
3171 Sig('b', help='b', nargs=2),
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
3172 Sig('c', help='c', nargs='?'),
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
3173 ]
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
3174 argument_group_signatures = [
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
3175 (Sig('group'), [
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
3176 Sig('-y', nargs='?', help='y'),
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
3177 Sig('-z', nargs=3, help='z'),
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
3178 Sig('d', help='d', nargs='*'),
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
3179 Sig('e', help='e', nargs='+'),
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
3180 ])
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
3181 ]
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
3182 usage = '''\
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
3183 usage: PROG [-h] [-w W [W ...]] [-x [X [X ...]]] [-y [Y]] [-z Z Z Z]
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
3184 a b b [c] [d [d ...]] e [e ...]
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
3185 '''
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
3186 help = usage + '''\
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
3187
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
3188 positional arguments:
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
3189 a a
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
3190 b b
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
3191 c c
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
3192
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
3193 optional arguments:
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
3194 -h, --help show this help message and exit
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
3195 -w W [W ...] w
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
3196 -x [X [X ...]] x
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
3197
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
3198 group:
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
3199 -y [Y] y
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
3200 -z Z Z Z z
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
3201 d d
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
3202 e e
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
3203 '''
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
3204 version = ''
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
3205
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
3206
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
3207 class TestHelpOnlyUserGroups(HelpTestCase):
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
3208 """Test basic usage messages"""
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
3209
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
3210 parser_signature = Sig(prog='PROG', add_help=False)
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
3211 argument_signatures = []
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
3212 argument_group_signatures = [
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
3213 (Sig('xxxx'), [
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
3214 Sig('-x', help='x'),
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
3215 Sig('a', help='a'),
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
3216 ]),
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
3217 (Sig('yyyy'), [
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
3218 Sig('b', help='b'),
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
3219 Sig('-y', help='y'),
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
3220 ]),
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
3221 ]
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
3222 usage = '''\
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
3223 usage: PROG [-x X] [-y Y] a b
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
3224 '''
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
3225 help = usage + '''\
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
3226
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
3227 xxxx:
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
3228 -x X x
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
3229 a a
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
3230
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
3231 yyyy:
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
3232 b b
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
3233 -y Y y
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
3234 '''
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
3235 version = ''
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
3236
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
3237
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
3238 class TestHelpUsageLongProg(HelpTestCase):
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
3239 """Test usage messages where the prog is long"""
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
3240
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
3241 parser_signature = Sig(prog='P' * 60)
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
3242 argument_signatures = [
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
3243 Sig('-w', metavar='W'),
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
3244 Sig('-x', metavar='X'),
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
3245 Sig('a'),
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
3246 Sig('b'),
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
3247 ]
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
3248 argument_group_signatures = []
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
3249 usage = '''\
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
3250 usage: PPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPP
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
3251 [-h] [-w W] [-x X] a b
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
3252 '''
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
3253 help = usage + '''\
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
3254
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
3255 positional arguments:
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
3256 a
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
3257 b
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
3258
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
3259 optional arguments:
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
3260 -h, --help show this help message and exit
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
3261 -w W
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
3262 -x X
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
3263 '''
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
3264 version = ''
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
3265
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
3266
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
3267 class TestHelpUsageLongProgOptionsWrap(HelpTestCase):
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
3268 """Test usage messages where the prog is long and the optionals wrap"""
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
3269
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
3270 parser_signature = Sig(prog='P' * 60)
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
3271 argument_signatures = [
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
3272 Sig('-w', metavar='W' * 25),
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
3273 Sig('-x', metavar='X' * 25),
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
3274 Sig('-y', metavar='Y' * 25),
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
3275 Sig('-z', metavar='Z' * 25),
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
3276 Sig('a'),
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
3277 Sig('b'),
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
3278 ]
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
3279 argument_group_signatures = []
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
3280 usage = '''\
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
3281 usage: PPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPP
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
3282 [-h] [-w WWWWWWWWWWWWWWWWWWWWWWWWW] \
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
3283 [-x XXXXXXXXXXXXXXXXXXXXXXXXX]
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
3284 [-y YYYYYYYYYYYYYYYYYYYYYYYYY] [-z ZZZZZZZZZZZZZZZZZZZZZZZZZ]
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
3285 a b
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
3286 '''
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
3287 help = usage + '''\
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
3288
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
3289 positional arguments:
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
3290 a
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
3291 b
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
3292
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
3293 optional arguments:
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
3294 -h, --help show this help message and exit
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
3295 -w WWWWWWWWWWWWWWWWWWWWWWWWW
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
3296 -x XXXXXXXXXXXXXXXXXXXXXXXXX
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
3297 -y YYYYYYYYYYYYYYYYYYYYYYYYY
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
3298 -z ZZZZZZZZZZZZZZZZZZZZZZZZZ
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
3299 '''
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
3300 version = ''
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
3301
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
3302
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
3303 class TestHelpUsageLongProgPositionalsWrap(HelpTestCase):
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
3304 """Test usage messages where the prog is long and the positionals wrap"""
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
3305
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
3306 parser_signature = Sig(prog='P' * 60, add_help=False)
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
3307 argument_signatures = [
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
3308 Sig('a' * 25),
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
3309 Sig('b' * 25),
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
3310 Sig('c' * 25),
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
3311 ]
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
3312 argument_group_signatures = []
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
3313 usage = '''\
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
3314 usage: PPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPP
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
3315 aaaaaaaaaaaaaaaaaaaaaaaaa bbbbbbbbbbbbbbbbbbbbbbbbb
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
3316 ccccccccccccccccccccccccc
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
3317 '''
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
3318 help = usage + '''\
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
3319
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
3320 positional arguments:
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
3321 aaaaaaaaaaaaaaaaaaaaaaaaa
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
3322 bbbbbbbbbbbbbbbbbbbbbbbbb
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
3323 ccccccccccccccccccccccccc
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
3324 '''
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
3325 version = ''
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
3326
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
3327
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
3328 class TestHelpUsageOptionalsWrap(HelpTestCase):
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
3329 """Test usage messages where the optionals wrap"""
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
3330
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
3331 parser_signature = Sig(prog='PROG')
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
3332 argument_signatures = [
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
3333 Sig('-w', metavar='W' * 25),
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
3334 Sig('-x', metavar='X' * 25),
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
3335 Sig('-y', metavar='Y' * 25),
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
3336 Sig('-z', metavar='Z' * 25),
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
3337 Sig('a'),
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
3338 Sig('b'),
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
3339 Sig('c'),
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
3340 ]
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
3341 argument_group_signatures = []
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
3342 usage = '''\
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
3343 usage: PROG [-h] [-w WWWWWWWWWWWWWWWWWWWWWWWWW] \
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
3344 [-x XXXXXXXXXXXXXXXXXXXXXXXXX]
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
3345 [-y YYYYYYYYYYYYYYYYYYYYYYYYY] \
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
3346 [-z ZZZZZZZZZZZZZZZZZZZZZZZZZ]
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
3347 a b c
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
3348 '''
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
3349 help = usage + '''\
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
3350
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
3351 positional arguments:
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
3352 a
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
3353 b
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
3354 c
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
3355
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
3356 optional arguments:
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
3357 -h, --help show this help message and exit
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
3358 -w WWWWWWWWWWWWWWWWWWWWWWWWW
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
3359 -x XXXXXXXXXXXXXXXXXXXXXXXXX
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
3360 -y YYYYYYYYYYYYYYYYYYYYYYYYY
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
3361 -z ZZZZZZZZZZZZZZZZZZZZZZZZZ
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
3362 '''
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
3363 version = ''
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
3364
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
3365
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
3366 class TestHelpUsagePositionalsWrap(HelpTestCase):
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
3367 """Test usage messages where the positionals wrap"""
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
3368
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
3369 parser_signature = Sig(prog='PROG')
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
3370 argument_signatures = [
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
3371 Sig('-x'),
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
3372 Sig('-y'),
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
3373 Sig('-z'),
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
3374 Sig('a' * 25),
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
3375 Sig('b' * 25),
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
3376 Sig('c' * 25),
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
3377 ]
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
3378 argument_group_signatures = []
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
3379 usage = '''\
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
3380 usage: PROG [-h] [-x X] [-y Y] [-z Z]
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
3381 aaaaaaaaaaaaaaaaaaaaaaaaa bbbbbbbbbbbbbbbbbbbbbbbbb
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
3382 ccccccccccccccccccccccccc
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
3383 '''
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
3384 help = usage + '''\
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
3385
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
3386 positional arguments:
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
3387 aaaaaaaaaaaaaaaaaaaaaaaaa
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
3388 bbbbbbbbbbbbbbbbbbbbbbbbb
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
3389 ccccccccccccccccccccccccc
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
3390
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
3391 optional arguments:
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
3392 -h, --help show this help message and exit
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
3393 -x X
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
3394 -y Y
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
3395 -z Z
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
3396 '''
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
3397 version = ''
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
3398
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
3399
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
3400 class TestHelpUsageOptionalsPositionalsWrap(HelpTestCase):
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
3401 """Test usage messages where the optionals and positionals wrap"""
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
3402
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
3403 parser_signature = Sig(prog='PROG')
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
3404 argument_signatures = [
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
3405 Sig('-x', metavar='X' * 25),
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
3406 Sig('-y', metavar='Y' * 25),
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
3407 Sig('-z', metavar='Z' * 25),
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
3408 Sig('a' * 25),
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
3409 Sig('b' * 25),
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
3410 Sig('c' * 25),
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
3411 ]
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
3412 argument_group_signatures = []
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
3413 usage = '''\
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
3414 usage: PROG [-h] [-x XXXXXXXXXXXXXXXXXXXXXXXXX] \
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
3415 [-y YYYYYYYYYYYYYYYYYYYYYYYYY]
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
3416 [-z ZZZZZZZZZZZZZZZZZZZZZZZZZ]
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
3417 aaaaaaaaaaaaaaaaaaaaaaaaa bbbbbbbbbbbbbbbbbbbbbbbbb
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
3418 ccccccccccccccccccccccccc
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
3419 '''
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
3420 help = usage + '''\
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
3421
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
3422 positional arguments:
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
3423 aaaaaaaaaaaaaaaaaaaaaaaaa
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
3424 bbbbbbbbbbbbbbbbbbbbbbbbb
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
3425 ccccccccccccccccccccccccc
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
3426
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
3427 optional arguments:
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
3428 -h, --help show this help message and exit
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
3429 -x XXXXXXXXXXXXXXXXXXXXXXXXX
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
3430 -y YYYYYYYYYYYYYYYYYYYYYYYYY
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
3431 -z ZZZZZZZZZZZZZZZZZZZZZZZZZ
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
3432 '''
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
3433 version = ''
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
3434
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
3435
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
3436 class TestHelpUsageOptionalsOnlyWrap(HelpTestCase):
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
3437 """Test usage messages where there are only optionals and they wrap"""
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
3438
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
3439 parser_signature = Sig(prog='PROG')
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
3440 argument_signatures = [
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
3441 Sig('-x', metavar='X' * 25),
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
3442 Sig('-y', metavar='Y' * 25),
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
3443 Sig('-z', metavar='Z' * 25),
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
3444 ]
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
3445 argument_group_signatures = []
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
3446 usage = '''\
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
3447 usage: PROG [-h] [-x XXXXXXXXXXXXXXXXXXXXXXXXX] \
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
3448 [-y YYYYYYYYYYYYYYYYYYYYYYYYY]
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
3449 [-z ZZZZZZZZZZZZZZZZZZZZZZZZZ]
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
3450 '''
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
3451 help = usage + '''\
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
3452
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
3453 optional arguments:
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
3454 -h, --help show this help message and exit
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
3455 -x XXXXXXXXXXXXXXXXXXXXXXXXX
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
3456 -y YYYYYYYYYYYYYYYYYYYYYYYYY
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
3457 -z ZZZZZZZZZZZZZZZZZZZZZZZZZ
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
3458 '''
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
3459 version = ''
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
3460
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
3461
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
3462 class TestHelpUsagePositionalsOnlyWrap(HelpTestCase):
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
3463 """Test usage messages where there are only positionals and they wrap"""
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
3464
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
3465 parser_signature = Sig(prog='PROG', add_help=False)
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
3466 argument_signatures = [
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
3467 Sig('a' * 25),
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
3468 Sig('b' * 25),
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
3469 Sig('c' * 25),
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
3470 ]
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
3471 argument_group_signatures = []
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
3472 usage = '''\
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
3473 usage: PROG aaaaaaaaaaaaaaaaaaaaaaaaa bbbbbbbbbbbbbbbbbbbbbbbbb
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
3474 ccccccccccccccccccccccccc
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
3475 '''
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
3476 help = usage + '''\
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
3477
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
3478 positional arguments:
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
3479 aaaaaaaaaaaaaaaaaaaaaaaaa
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
3480 bbbbbbbbbbbbbbbbbbbbbbbbb
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
3481 ccccccccccccccccccccccccc
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
3482 '''
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
3483 version = ''
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
3484
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
3485
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
3486 class TestHelpVariableExpansion(HelpTestCase):
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
3487 """Test that variables are expanded properly in help messages"""
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
3488
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
3489 parser_signature = Sig(prog='PROG')
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
3490 argument_signatures = [
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
3491 Sig('-x', type=int,
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
3492 help='x %(prog)s %(default)s %(type)s %%'),
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
3493 Sig('-y', action='store_const', default=42, const='XXX',
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
3494 help='y %(prog)s %(default)s %(const)s'),
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
3495 Sig('--foo', choices='abc',
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
3496 help='foo %(prog)s %(default)s %(choices)s'),
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
3497 Sig('--bar', default='baz', choices=[1, 2], metavar='BBB',
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
3498 help='bar %(prog)s %(default)s %(dest)s'),
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
3499 Sig('spam', help='spam %(prog)s %(default)s'),
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
3500 Sig('badger', default=0.5, help='badger %(prog)s %(default)s'),
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
3501 ]
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
3502 argument_group_signatures = [
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
3503 (Sig('group'), [
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
3504 Sig('-a', help='a %(prog)s %(default)s'),
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
3505 Sig('-b', default=-1, help='b %(prog)s %(default)s'),
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
3506 ])
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
3507 ]
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
3508 usage = ('''\
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
3509 usage: PROG [-h] [-x X] [-y] [--foo {a,b,c}] [--bar BBB] [-a A] [-b B]
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
3510 spam badger
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
3511 ''')
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
3512 help = usage + '''\
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
3513
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
3514 positional arguments:
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
3515 spam spam PROG None
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
3516 badger badger PROG 0.5
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
3517
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
3518 optional arguments:
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
3519 -h, --help show this help message and exit
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
3520 -x X x PROG None int %
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
3521 -y y PROG 42 XXX
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
3522 --foo {a,b,c} foo PROG None a, b, c
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
3523 --bar BBB bar PROG baz bar
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
3524
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
3525 group:
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
3526 -a A a PROG None
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
3527 -b B b PROG -1
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
3528 '''
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
3529 version = ''
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
3530
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
3531
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
3532 class TestHelpVariableExpansionUsageSupplied(HelpTestCase):
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
3533 """Test that variables are expanded properly when usage= is present"""
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
3534
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
3535 parser_signature = Sig(prog='PROG', usage='%(prog)s FOO')
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
3536 argument_signatures = []
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
3537 argument_group_signatures = []
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
3538 usage = ('''\
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
3539 usage: PROG FOO
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
3540 ''')
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
3541 help = usage + '''\
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
3542
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
3543 optional arguments:
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
3544 -h, --help show this help message and exit
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
3545 '''
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
3546 version = ''
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
3547
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
3548
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
3549 class TestHelpVariableExpansionNoArguments(HelpTestCase):
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
3550 """Test that variables are expanded properly with no arguments"""
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
3551
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
3552 parser_signature = Sig(prog='PROG', add_help=False)
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
3553 argument_signatures = []
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
3554 argument_group_signatures = []
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
3555 usage = ('''\
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
3556 usage: PROG
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
3557 ''')
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
3558 help = usage
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
3559 version = ''
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
3560
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
3561
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
3562 class TestHelpSuppressUsage(HelpTestCase):
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
3563 """Test that items can be suppressed in usage messages"""
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
3564
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
3565 parser_signature = Sig(prog='PROG', usage=argparse.SUPPRESS)
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
3566 argument_signatures = [
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
3567 Sig('--foo', help='foo help'),
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
3568 Sig('spam', help='spam help'),
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
3569 ]
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
3570 argument_group_signatures = []
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
3571 help = '''\
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
3572 positional arguments:
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
3573 spam spam help
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
3574
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
3575 optional arguments:
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
3576 -h, --help show this help message and exit
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
3577 --foo FOO foo help
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
3578 '''
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
3579 usage = ''
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
3580 version = ''
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
3581
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
3582
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
3583 class TestHelpSuppressOptional(HelpTestCase):
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
3584 """Test that optional arguments can be suppressed in help messages"""
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
3585
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
3586 parser_signature = Sig(prog='PROG', add_help=False)
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
3587 argument_signatures = [
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
3588 Sig('--foo', help=argparse.SUPPRESS),
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
3589 Sig('spam', help='spam help'),
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
3590 ]
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
3591 argument_group_signatures = []
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
3592 usage = '''\
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
3593 usage: PROG spam
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
3594 '''
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
3595 help = usage + '''\
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
3596
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
3597 positional arguments:
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
3598 spam spam help
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
3599 '''
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
3600 version = ''
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
3601
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
3602
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
3603 class TestHelpSuppressOptionalGroup(HelpTestCase):
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
3604 """Test that optional groups can be suppressed in help messages"""
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
3605
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
3606 parser_signature = Sig(prog='PROG')
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
3607 argument_signatures = [
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
3608 Sig('--foo', help='foo help'),
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
3609 Sig('spam', help='spam help'),
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
3610 ]
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
3611 argument_group_signatures = [
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
3612 (Sig('group'), [Sig('--bar', help=argparse.SUPPRESS)]),
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
3613 ]
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
3614 usage = '''\
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
3615 usage: PROG [-h] [--foo FOO] spam
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
3616 '''
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
3617 help = usage + '''\
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
3618
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
3619 positional arguments:
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
3620 spam spam help
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
3621
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
3622 optional arguments:
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
3623 -h, --help show this help message and exit
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
3624 --foo FOO foo help
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
3625 '''
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
3626 version = ''
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
3627
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
3628
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
3629 class TestHelpSuppressPositional(HelpTestCase):
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
3630 """Test that positional arguments can be suppressed in help messages"""
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
3631
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
3632 parser_signature = Sig(prog='PROG')
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
3633 argument_signatures = [
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
3634 Sig('--foo', help='foo help'),
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
3635 Sig('spam', help=argparse.SUPPRESS),
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
3636 ]
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
3637 argument_group_signatures = []
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
3638 usage = '''\
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
3639 usage: PROG [-h] [--foo FOO]
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
3640 '''
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
3641 help = usage + '''\
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
3642
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
3643 optional arguments:
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
3644 -h, --help show this help message and exit
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
3645 --foo FOO foo help
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
3646 '''
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
3647 version = ''
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
3648
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
3649
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
3650 class TestHelpRequiredOptional(HelpTestCase):
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
3651 """Test that required options don't look optional"""
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
3652
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
3653 parser_signature = Sig(prog='PROG')
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
3654 argument_signatures = [
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
3655 Sig('--foo', required=True, help='foo help'),
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
3656 ]
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
3657 argument_group_signatures = []
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
3658 usage = '''\
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
3659 usage: PROG [-h] --foo FOO
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
3660 '''
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
3661 help = usage + '''\
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
3662
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
3663 optional arguments:
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
3664 -h, --help show this help message and exit
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
3665 --foo FOO foo help
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
3666 '''
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
3667 version = ''
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
3668
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
3669
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
3670 class TestHelpAlternatePrefixChars(HelpTestCase):
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
3671 """Test that options display with different prefix characters"""
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
3672
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
3673 parser_signature = Sig(prog='PROG', prefix_chars='^;', add_help=False)
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
3674 argument_signatures = [
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
3675 Sig('^^foo', action='store_true', help='foo help'),
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
3676 Sig(';b', ';;bar', help='bar help'),
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
3677 ]
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
3678 argument_group_signatures = []
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
3679 usage = '''\
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
3680 usage: PROG [^^foo] [;b BAR]
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
3681 '''
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
3682 help = usage + '''\
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
3683
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
3684 optional arguments:
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
3685 ^^foo foo help
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
3686 ;b BAR, ;;bar BAR bar help
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
3687 '''
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
3688 version = ''
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
3689
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
3690
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
3691 class TestHelpNoHelpOptional(HelpTestCase):
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
3692 """Test that the --help argument can be suppressed help messages"""
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
3693
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
3694 parser_signature = Sig(prog='PROG', add_help=False)
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
3695 argument_signatures = [
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
3696 Sig('--foo', help='foo help'),
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
3697 Sig('spam', help='spam help'),
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
3698 ]
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
3699 argument_group_signatures = []
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
3700 usage = '''\
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
3701 usage: PROG [--foo FOO] spam
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
3702 '''
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
3703 help = usage + '''\
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
3704
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
3705 positional arguments:
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
3706 spam spam help
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
3707
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
3708 optional arguments:
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
3709 --foo FOO foo help
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
3710 '''
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
3711 version = ''
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
3712
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
3713
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
3714 class TestHelpVersionOptional(HelpTestCase):
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
3715 """Test that the --version argument can be suppressed help messages"""
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
3716
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
3717 parser_signature = Sig(prog='PROG', version='1.0')
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
3718 argument_signatures = [
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
3719 Sig('--foo', help='foo help'),
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
3720 Sig('spam', help='spam help'),
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
3721 ]
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
3722 argument_group_signatures = []
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
3723 usage = '''\
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
3724 usage: PROG [-h] [-v] [--foo FOO] spam
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
3725 '''
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
3726 help = usage + '''\
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
3727
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
3728 positional arguments:
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
3729 spam spam help
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
3730
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
3731 optional arguments:
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
3732 -h, --help show this help message and exit
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
3733 -v, --version show program's version number and exit
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
3734 --foo FOO foo help
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
3735 '''
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
3736 version = '''\
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
3737 1.0
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
3738 '''
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
3739
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
3740
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
3741 class TestHelpNone(HelpTestCase):
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
3742 """Test that no errors occur if no help is specified"""
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
3743
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
3744 parser_signature = Sig(prog='PROG')
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
3745 argument_signatures = [
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
3746 Sig('--foo'),
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
3747 Sig('spam'),
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
3748 ]
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
3749 argument_group_signatures = []
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
3750 usage = '''\
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
3751 usage: PROG [-h] [--foo FOO] spam
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
3752 '''
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
3753 help = usage + '''\
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
3754
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
3755 positional arguments:
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
3756 spam
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
3757
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
3758 optional arguments:
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
3759 -h, --help show this help message and exit
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
3760 --foo FOO
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
3761 '''
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
3762 version = ''
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
3763
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
3764
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
3765 class TestHelpTupleMetavar(HelpTestCase):
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
3766 """Test specifying metavar as a tuple"""
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
3767
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
3768 parser_signature = Sig(prog='PROG')
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
3769 argument_signatures = [
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
3770 Sig('-w', help='w', nargs='+', metavar=('W1', 'W2')),
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
3771 Sig('-x', help='x', nargs='*', metavar=('X1', 'X2')),
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
3772 Sig('-y', help='y', nargs=3, metavar=('Y1', 'Y2', 'Y3')),
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
3773 Sig('-z', help='z', nargs='?', metavar=('Z1', )),
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
3774 ]
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
3775 argument_group_signatures = []
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
3776 usage = '''\
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
3777 usage: PROG [-h] [-w W1 [W2 ...]] [-x [X1 [X2 ...]]] [-y Y1 Y2 Y3] \
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
3778 [-z [Z1]]
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
3779 '''
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
3780 help = usage + '''\
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
3781
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
3782 optional arguments:
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
3783 -h, --help show this help message and exit
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
3784 -w W1 [W2 ...] w
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
3785 -x [X1 [X2 ...]] x
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
3786 -y Y1 Y2 Y3 y
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
3787 -z [Z1] z
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
3788 '''
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
3789 version = ''
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
3790
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
3791
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
3792 class TestHelpRawText(HelpTestCase):
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
3793 """Test the RawTextHelpFormatter"""
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
3794
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
3795 parser_signature = Sig(
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
3796 prog='PROG', formatter_class=argparse.RawTextHelpFormatter,
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
3797 description='Keep the formatting\n'
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
3798 ' exactly as it is written\n'
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
3799 '\n'
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
3800 'here\n')
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
3801
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
3802 argument_signatures = [
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
3803 Sig('--foo', help=' foo help should also\n'
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
3804 'appear as given here'),
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
3805 Sig('spam', help='spam help'),
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
3806 ]
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
3807 argument_group_signatures = [
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
3808 (Sig('title', description=' This text\n'
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
3809 ' should be indented\n'
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
3810 ' exactly like it is here\n'),
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
3811 [Sig('--bar', help='bar help')]),
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
3812 ]
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
3813 usage = '''\
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
3814 usage: PROG [-h] [--foo FOO] [--bar BAR] spam
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
3815 '''
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
3816 help = usage + '''\
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
3817
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
3818 Keep the formatting
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
3819 exactly as it is written
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
3820
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
3821 here
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
3822
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
3823 positional arguments:
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
3824 spam spam help
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
3825
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
3826 optional arguments:
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
3827 -h, --help show this help message and exit
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
3828 --foo FOO foo help should also
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
3829 appear as given here
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
3830
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
3831 title:
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
3832 This text
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
3833 should be indented
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
3834 exactly like it is here
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
3835
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
3836 --bar BAR bar help
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
3837 '''
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
3838 version = ''
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
3839
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
3840
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
3841 class TestHelpRawDescription(HelpTestCase):
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
3842 """Test the RawTextHelpFormatter"""
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
3843
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
3844 parser_signature = Sig(
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
3845 prog='PROG', formatter_class=argparse.RawDescriptionHelpFormatter,
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
3846 description='Keep the formatting\n'
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
3847 ' exactly as it is written\n'
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
3848 '\n'
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
3849 'here\n')
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
3850
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
3851 argument_signatures = [
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
3852 Sig('--foo', help=' foo help should not\n'
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
3853 ' retain this odd formatting'),
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
3854 Sig('spam', help='spam help'),
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
3855 ]
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
3856 argument_group_signatures = [
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
3857 (Sig('title', description=' This text\n'
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
3858 ' should be indented\n'
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
3859 ' exactly like it is here\n'),
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
3860 [Sig('--bar', help='bar help')]),
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
3861 ]
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
3862 usage = '''\
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
3863 usage: PROG [-h] [--foo FOO] [--bar BAR] spam
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
3864 '''
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
3865 help = usage + '''\
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
3866
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
3867 Keep the formatting
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
3868 exactly as it is written
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
3869
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
3870 here
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
3871
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
3872 positional arguments:
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
3873 spam spam help
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
3874
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
3875 optional arguments:
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
3876 -h, --help show this help message and exit
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
3877 --foo FOO foo help should not retain this odd formatting
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
3878
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
3879 title:
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
3880 This text
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
3881 should be indented
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
3882 exactly like it is here
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
3883
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
3884 --bar BAR bar help
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
3885 '''
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
3886 version = ''
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
3887
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
3888
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
3889 class TestHelpArgumentDefaults(HelpTestCase):
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
3890 """Test the ArgumentDefaultsHelpFormatter"""
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
3891
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
3892 parser_signature = Sig(
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
3893 prog='PROG', formatter_class=argparse.ArgumentDefaultsHelpFormatter,
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
3894 description='description')
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
3895
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
3896 argument_signatures = [
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
3897 Sig('--foo', help='foo help - oh and by the way, %(default)s'),
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
3898 Sig('--bar', action='store_true', help='bar help'),
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
3899 Sig('spam', help='spam help'),
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
3900 Sig('badger', nargs='?', default='wooden', help='badger help'),
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
3901 ]
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
3902 argument_group_signatures = [
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
3903 (Sig('title', description='description'),
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
3904 [Sig('--baz', type=int, default=42, help='baz help')]),
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
3905 ]
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
3906 usage = '''\
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
3907 usage: PROG [-h] [--foo FOO] [--bar] [--baz BAZ] spam [badger]
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
3908 '''
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
3909 help = usage + '''\
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
3910
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
3911 description
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
3912
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
3913 positional arguments:
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
3914 spam spam help
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
3915 badger badger help (default: wooden)
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
3916
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
3917 optional arguments:
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
3918 -h, --help show this help message and exit
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
3919 --foo FOO foo help - oh and by the way, None
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
3920 --bar bar help (default: False)
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
3921
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
3922 title:
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
3923 description
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
3924
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
3925 --baz BAZ baz help (default: 42)
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
3926 '''
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
3927 version = ''
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
3928
61879
e64ea1619820 Fix default value for version help. Approved by Benjamin on python-dev: http://mail.python.org/pipermail/python-dev/2010-May/100231.html
Steven Bethard <steven.bethard@gmail.com>
parents: 60453
diff changeset
3929 class TestHelpVersionAction(HelpTestCase):
e64ea1619820 Fix default value for version help. Approved by Benjamin on python-dev: http://mail.python.org/pipermail/python-dev/2010-May/100231.html
Steven Bethard <steven.bethard@gmail.com>
parents: 60453
diff changeset
3930 """Test the default help for the version action"""
e64ea1619820 Fix default value for version help. Approved by Benjamin on python-dev: http://mail.python.org/pipermail/python-dev/2010-May/100231.html
Steven Bethard <steven.bethard@gmail.com>
parents: 60453
diff changeset
3931
e64ea1619820 Fix default value for version help. Approved by Benjamin on python-dev: http://mail.python.org/pipermail/python-dev/2010-May/100231.html
Steven Bethard <steven.bethard@gmail.com>
parents: 60453
diff changeset
3932 parser_signature = Sig(prog='PROG', description='description')
e64ea1619820 Fix default value for version help. Approved by Benjamin on python-dev: http://mail.python.org/pipermail/python-dev/2010-May/100231.html
Steven Bethard <steven.bethard@gmail.com>
parents: 60453
diff changeset
3933 argument_signatures = [Sig('-V', '--version', action='version', version='3.6')]
e64ea1619820 Fix default value for version help. Approved by Benjamin on python-dev: http://mail.python.org/pipermail/python-dev/2010-May/100231.html
Steven Bethard <steven.bethard@gmail.com>
parents: 60453
diff changeset
3934 argument_group_signatures = []
e64ea1619820 Fix default value for version help. Approved by Benjamin on python-dev: http://mail.python.org/pipermail/python-dev/2010-May/100231.html
Steven Bethard <steven.bethard@gmail.com>
parents: 60453
diff changeset
3935 usage = '''\
e64ea1619820 Fix default value for version help. Approved by Benjamin on python-dev: http://mail.python.org/pipermail/python-dev/2010-May/100231.html
Steven Bethard <steven.bethard@gmail.com>
parents: 60453
diff changeset
3936 usage: PROG [-h] [-V]
e64ea1619820 Fix default value for version help. Approved by Benjamin on python-dev: http://mail.python.org/pipermail/python-dev/2010-May/100231.html
Steven Bethard <steven.bethard@gmail.com>
parents: 60453
diff changeset
3937 '''
e64ea1619820 Fix default value for version help. Approved by Benjamin on python-dev: http://mail.python.org/pipermail/python-dev/2010-May/100231.html
Steven Bethard <steven.bethard@gmail.com>
parents: 60453
diff changeset
3938 help = usage + '''\
e64ea1619820 Fix default value for version help. Approved by Benjamin on python-dev: http://mail.python.org/pipermail/python-dev/2010-May/100231.html
Steven Bethard <steven.bethard@gmail.com>
parents: 60453
diff changeset
3939
e64ea1619820 Fix default value for version help. Approved by Benjamin on python-dev: http://mail.python.org/pipermail/python-dev/2010-May/100231.html
Steven Bethard <steven.bethard@gmail.com>
parents: 60453
diff changeset
3940 description
e64ea1619820 Fix default value for version help. Approved by Benjamin on python-dev: http://mail.python.org/pipermail/python-dev/2010-May/100231.html
Steven Bethard <steven.bethard@gmail.com>
parents: 60453
diff changeset
3941
e64ea1619820 Fix default value for version help. Approved by Benjamin on python-dev: http://mail.python.org/pipermail/python-dev/2010-May/100231.html
Steven Bethard <steven.bethard@gmail.com>
parents: 60453
diff changeset
3942 optional arguments:
e64ea1619820 Fix default value for version help. Approved by Benjamin on python-dev: http://mail.python.org/pipermail/python-dev/2010-May/100231.html
Steven Bethard <steven.bethard@gmail.com>
parents: 60453
diff changeset
3943 -h, --help show this help message and exit
e64ea1619820 Fix default value for version help. Approved by Benjamin on python-dev: http://mail.python.org/pipermail/python-dev/2010-May/100231.html
Steven Bethard <steven.bethard@gmail.com>
parents: 60453
diff changeset
3944 -V, --version show program's version number and exit
e64ea1619820 Fix default value for version help. Approved by Benjamin on python-dev: http://mail.python.org/pipermail/python-dev/2010-May/100231.html
Steven Bethard <steven.bethard@gmail.com>
parents: 60453
diff changeset
3945 '''
e64ea1619820 Fix default value for version help. Approved by Benjamin on python-dev: http://mail.python.org/pipermail/python-dev/2010-May/100231.html
Steven Bethard <steven.bethard@gmail.com>
parents: 60453
diff changeset
3946 version = ''
e64ea1619820 Fix default value for version help. Approved by Benjamin on python-dev: http://mail.python.org/pipermail/python-dev/2010-May/100231.html
Steven Bethard <steven.bethard@gmail.com>
parents: 60453
diff changeset
3947
69005
75ec20b4c50e Issue #9026: Fix order of argparse sub-commands in help messages. (Merged from 3.2.)
Steven Bethard <steven.bethard@gmail.com>
parents: 68969
diff changeset
3948 class TestHelpSubparsersOrdering(HelpTestCase):
75ec20b4c50e Issue #9026: Fix order of argparse sub-commands in help messages. (Merged from 3.2.)
Steven Bethard <steven.bethard@gmail.com>
parents: 68969
diff changeset
3949 """Test ordering of subcommands in help matches the code"""
75ec20b4c50e Issue #9026: Fix order of argparse sub-commands in help messages. (Merged from 3.2.)
Steven Bethard <steven.bethard@gmail.com>
parents: 68969
diff changeset
3950 parser_signature = Sig(prog='PROG',
75ec20b4c50e Issue #9026: Fix order of argparse sub-commands in help messages. (Merged from 3.2.)
Steven Bethard <steven.bethard@gmail.com>
parents: 68969
diff changeset
3951 description='display some subcommands',
75ec20b4c50e Issue #9026: Fix order of argparse sub-commands in help messages. (Merged from 3.2.)
Steven Bethard <steven.bethard@gmail.com>
parents: 68969
diff changeset
3952 version='0.1')
75ec20b4c50e Issue #9026: Fix order of argparse sub-commands in help messages. (Merged from 3.2.)
Steven Bethard <steven.bethard@gmail.com>
parents: 68969
diff changeset
3953
75ec20b4c50e Issue #9026: Fix order of argparse sub-commands in help messages. (Merged from 3.2.)
Steven Bethard <steven.bethard@gmail.com>
parents: 68969
diff changeset
3954 subparsers_signatures = [Sig(name=name)
75ec20b4c50e Issue #9026: Fix order of argparse sub-commands in help messages. (Merged from 3.2.)
Steven Bethard <steven.bethard@gmail.com>
parents: 68969
diff changeset
3955 for name in ('a', 'b', 'c', 'd', 'e')]
75ec20b4c50e Issue #9026: Fix order of argparse sub-commands in help messages. (Merged from 3.2.)
Steven Bethard <steven.bethard@gmail.com>
parents: 68969
diff changeset
3956
75ec20b4c50e Issue #9026: Fix order of argparse sub-commands in help messages. (Merged from 3.2.)
Steven Bethard <steven.bethard@gmail.com>
parents: 68969
diff changeset
3957 usage = '''\
75ec20b4c50e Issue #9026: Fix order of argparse sub-commands in help messages. (Merged from 3.2.)
Steven Bethard <steven.bethard@gmail.com>
parents: 68969
diff changeset
3958 usage: PROG [-h] [-v] {a,b,c,d,e} ...
75ec20b4c50e Issue #9026: Fix order of argparse sub-commands in help messages. (Merged from 3.2.)
Steven Bethard <steven.bethard@gmail.com>
parents: 68969
diff changeset
3959 '''
75ec20b4c50e Issue #9026: Fix order of argparse sub-commands in help messages. (Merged from 3.2.)
Steven Bethard <steven.bethard@gmail.com>
parents: 68969
diff changeset
3960
75ec20b4c50e Issue #9026: Fix order of argparse sub-commands in help messages. (Merged from 3.2.)
Steven Bethard <steven.bethard@gmail.com>
parents: 68969
diff changeset
3961 help = usage + '''\
75ec20b4c50e Issue #9026: Fix order of argparse sub-commands in help messages. (Merged from 3.2.)
Steven Bethard <steven.bethard@gmail.com>
parents: 68969
diff changeset
3962
75ec20b4c50e Issue #9026: Fix order of argparse sub-commands in help messages. (Merged from 3.2.)
Steven Bethard <steven.bethard@gmail.com>
parents: 68969
diff changeset
3963 display some subcommands
75ec20b4c50e Issue #9026: Fix order of argparse sub-commands in help messages. (Merged from 3.2.)
Steven Bethard <steven.bethard@gmail.com>
parents: 68969
diff changeset
3964
75ec20b4c50e Issue #9026: Fix order of argparse sub-commands in help messages. (Merged from 3.2.)
Steven Bethard <steven.bethard@gmail.com>
parents: 68969
diff changeset
3965 positional arguments:
75ec20b4c50e Issue #9026: Fix order of argparse sub-commands in help messages. (Merged from 3.2.)
Steven Bethard <steven.bethard@gmail.com>
parents: 68969
diff changeset
3966 {a,b,c,d,e}
75ec20b4c50e Issue #9026: Fix order of argparse sub-commands in help messages. (Merged from 3.2.)
Steven Bethard <steven.bethard@gmail.com>
parents: 68969
diff changeset
3967
75ec20b4c50e Issue #9026: Fix order of argparse sub-commands in help messages. (Merged from 3.2.)
Steven Bethard <steven.bethard@gmail.com>
parents: 68969
diff changeset
3968 optional arguments:
75ec20b4c50e Issue #9026: Fix order of argparse sub-commands in help messages. (Merged from 3.2.)
Steven Bethard <steven.bethard@gmail.com>
parents: 68969
diff changeset
3969 -h, --help show this help message and exit
75ec20b4c50e Issue #9026: Fix order of argparse sub-commands in help messages. (Merged from 3.2.)
Steven Bethard <steven.bethard@gmail.com>
parents: 68969
diff changeset
3970 -v, --version show program's version number and exit
75ec20b4c50e Issue #9026: Fix order of argparse sub-commands in help messages. (Merged from 3.2.)
Steven Bethard <steven.bethard@gmail.com>
parents: 68969
diff changeset
3971 '''
75ec20b4c50e Issue #9026: Fix order of argparse sub-commands in help messages. (Merged from 3.2.)
Steven Bethard <steven.bethard@gmail.com>
parents: 68969
diff changeset
3972
75ec20b4c50e Issue #9026: Fix order of argparse sub-commands in help messages. (Merged from 3.2.)
Steven Bethard <steven.bethard@gmail.com>
parents: 68969
diff changeset
3973 version = '''\
75ec20b4c50e Issue #9026: Fix order of argparse sub-commands in help messages. (Merged from 3.2.)
Steven Bethard <steven.bethard@gmail.com>
parents: 68969
diff changeset
3974 0.1
75ec20b4c50e Issue #9026: Fix order of argparse sub-commands in help messages. (Merged from 3.2.)
Steven Bethard <steven.bethard@gmail.com>
parents: 68969
diff changeset
3975 '''
75ec20b4c50e Issue #9026: Fix order of argparse sub-commands in help messages. (Merged from 3.2.)
Steven Bethard <steven.bethard@gmail.com>
parents: 68969
diff changeset
3976
75ec20b4c50e Issue #9026: Fix order of argparse sub-commands in help messages. (Merged from 3.2.)
Steven Bethard <steven.bethard@gmail.com>
parents: 68969
diff changeset
3977 class TestHelpSubparsersWithHelpOrdering(HelpTestCase):
75ec20b4c50e Issue #9026: Fix order of argparse sub-commands in help messages. (Merged from 3.2.)
Steven Bethard <steven.bethard@gmail.com>
parents: 68969
diff changeset
3978 """Test ordering of subcommands in help matches the code"""
75ec20b4c50e Issue #9026: Fix order of argparse sub-commands in help messages. (Merged from 3.2.)
Steven Bethard <steven.bethard@gmail.com>
parents: 68969
diff changeset
3979 parser_signature = Sig(prog='PROG',
75ec20b4c50e Issue #9026: Fix order of argparse sub-commands in help messages. (Merged from 3.2.)
Steven Bethard <steven.bethard@gmail.com>
parents: 68969
diff changeset
3980 description='display some subcommands',
75ec20b4c50e Issue #9026: Fix order of argparse sub-commands in help messages. (Merged from 3.2.)
Steven Bethard <steven.bethard@gmail.com>
parents: 68969
diff changeset
3981 version='0.1')
75ec20b4c50e Issue #9026: Fix order of argparse sub-commands in help messages. (Merged from 3.2.)
Steven Bethard <steven.bethard@gmail.com>
parents: 68969
diff changeset
3982
75ec20b4c50e Issue #9026: Fix order of argparse sub-commands in help messages. (Merged from 3.2.)
Steven Bethard <steven.bethard@gmail.com>
parents: 68969
diff changeset
3983 subcommand_data = (('a', 'a subcommand help'),
75ec20b4c50e Issue #9026: Fix order of argparse sub-commands in help messages. (Merged from 3.2.)
Steven Bethard <steven.bethard@gmail.com>
parents: 68969
diff changeset
3984 ('b', 'b subcommand help'),
75ec20b4c50e Issue #9026: Fix order of argparse sub-commands in help messages. (Merged from 3.2.)
Steven Bethard <steven.bethard@gmail.com>
parents: 68969
diff changeset
3985 ('c', 'c subcommand help'),
75ec20b4c50e Issue #9026: Fix order of argparse sub-commands in help messages. (Merged from 3.2.)
Steven Bethard <steven.bethard@gmail.com>
parents: 68969
diff changeset
3986 ('d', 'd subcommand help'),
75ec20b4c50e Issue #9026: Fix order of argparse sub-commands in help messages. (Merged from 3.2.)
Steven Bethard <steven.bethard@gmail.com>
parents: 68969
diff changeset
3987 ('e', 'e subcommand help'),
75ec20b4c50e Issue #9026: Fix order of argparse sub-commands in help messages. (Merged from 3.2.)
Steven Bethard <steven.bethard@gmail.com>
parents: 68969
diff changeset
3988 )
75ec20b4c50e Issue #9026: Fix order of argparse sub-commands in help messages. (Merged from 3.2.)
Steven Bethard <steven.bethard@gmail.com>
parents: 68969
diff changeset
3989
75ec20b4c50e Issue #9026: Fix order of argparse sub-commands in help messages. (Merged from 3.2.)
Steven Bethard <steven.bethard@gmail.com>
parents: 68969
diff changeset
3990 subparsers_signatures = [Sig(name=name, help=help)
75ec20b4c50e Issue #9026: Fix order of argparse sub-commands in help messages. (Merged from 3.2.)
Steven Bethard <steven.bethard@gmail.com>
parents: 68969
diff changeset
3991 for name, help in subcommand_data]
75ec20b4c50e Issue #9026: Fix order of argparse sub-commands in help messages. (Merged from 3.2.)
Steven Bethard <steven.bethard@gmail.com>
parents: 68969
diff changeset
3992
75ec20b4c50e Issue #9026: Fix order of argparse sub-commands in help messages. (Merged from 3.2.)
Steven Bethard <steven.bethard@gmail.com>
parents: 68969
diff changeset
3993 usage = '''\
75ec20b4c50e Issue #9026: Fix order of argparse sub-commands in help messages. (Merged from 3.2.)
Steven Bethard <steven.bethard@gmail.com>
parents: 68969
diff changeset
3994 usage: PROG [-h] [-v] {a,b,c,d,e} ...
75ec20b4c50e Issue #9026: Fix order of argparse sub-commands in help messages. (Merged from 3.2.)
Steven Bethard <steven.bethard@gmail.com>
parents: 68969
diff changeset
3995 '''
75ec20b4c50e Issue #9026: Fix order of argparse sub-commands in help messages. (Merged from 3.2.)
Steven Bethard <steven.bethard@gmail.com>
parents: 68969
diff changeset
3996
75ec20b4c50e Issue #9026: Fix order of argparse sub-commands in help messages. (Merged from 3.2.)
Steven Bethard <steven.bethard@gmail.com>
parents: 68969
diff changeset
3997 help = usage + '''\
75ec20b4c50e Issue #9026: Fix order of argparse sub-commands in help messages. (Merged from 3.2.)
Steven Bethard <steven.bethard@gmail.com>
parents: 68969
diff changeset
3998
75ec20b4c50e Issue #9026: Fix order of argparse sub-commands in help messages. (Merged from 3.2.)
Steven Bethard <steven.bethard@gmail.com>
parents: 68969
diff changeset
3999 display some subcommands
75ec20b4c50e Issue #9026: Fix order of argparse sub-commands in help messages. (Merged from 3.2.)
Steven Bethard <steven.bethard@gmail.com>
parents: 68969
diff changeset
4000
75ec20b4c50e Issue #9026: Fix order of argparse sub-commands in help messages. (Merged from 3.2.)
Steven Bethard <steven.bethard@gmail.com>
parents: 68969
diff changeset
4001 positional arguments:
75ec20b4c50e Issue #9026: Fix order of argparse sub-commands in help messages. (Merged from 3.2.)
Steven Bethard <steven.bethard@gmail.com>
parents: 68969
diff changeset
4002 {a,b,c,d,e}
75ec20b4c50e Issue #9026: Fix order of argparse sub-commands in help messages. (Merged from 3.2.)
Steven Bethard <steven.bethard@gmail.com>
parents: 68969
diff changeset
4003 a a subcommand help
75ec20b4c50e Issue #9026: Fix order of argparse sub-commands in help messages. (Merged from 3.2.)
Steven Bethard <steven.bethard@gmail.com>
parents: 68969
diff changeset
4004 b b subcommand help
75ec20b4c50e Issue #9026: Fix order of argparse sub-commands in help messages. (Merged from 3.2.)
Steven Bethard <steven.bethard@gmail.com>
parents: 68969
diff changeset
4005 c c subcommand help
75ec20b4c50e Issue #9026: Fix order of argparse sub-commands in help messages. (Merged from 3.2.)
Steven Bethard <steven.bethard@gmail.com>
parents: 68969
diff changeset
4006 d d subcommand help
75ec20b4c50e Issue #9026: Fix order of argparse sub-commands in help messages. (Merged from 3.2.)
Steven Bethard <steven.bethard@gmail.com>
parents: 68969
diff changeset
4007 e e subcommand help
75ec20b4c50e Issue #9026: Fix order of argparse sub-commands in help messages. (Merged from 3.2.)
Steven Bethard <steven.bethard@gmail.com>
parents: 68969
diff changeset
4008
75ec20b4c50e Issue #9026: Fix order of argparse sub-commands in help messages. (Merged from 3.2.)
Steven Bethard <steven.bethard@gmail.com>
parents: 68969
diff changeset
4009 optional arguments:
75ec20b4c50e Issue #9026: Fix order of argparse sub-commands in help messages. (Merged from 3.2.)
Steven Bethard <steven.bethard@gmail.com>
parents: 68969
diff changeset
4010 -h, --help show this help message and exit
75ec20b4c50e Issue #9026: Fix order of argparse sub-commands in help messages. (Merged from 3.2.)
Steven Bethard <steven.bethard@gmail.com>
parents: 68969
diff changeset
4011 -v, --version show program's version number and exit
75ec20b4c50e Issue #9026: Fix order of argparse sub-commands in help messages. (Merged from 3.2.)
Steven Bethard <steven.bethard@gmail.com>
parents: 68969
diff changeset
4012 '''
75ec20b4c50e Issue #9026: Fix order of argparse sub-commands in help messages. (Merged from 3.2.)
Steven Bethard <steven.bethard@gmail.com>
parents: 68969
diff changeset
4013
75ec20b4c50e Issue #9026: Fix order of argparse sub-commands in help messages. (Merged from 3.2.)
Steven Bethard <steven.bethard@gmail.com>
parents: 68969
diff changeset
4014 version = '''\
75ec20b4c50e Issue #9026: Fix order of argparse sub-commands in help messages. (Merged from 3.2.)
Steven Bethard <steven.bethard@gmail.com>
parents: 68969
diff changeset
4015 0.1
75ec20b4c50e Issue #9026: Fix order of argparse sub-commands in help messages. (Merged from 3.2.)
Steven Bethard <steven.bethard@gmail.com>
parents: 68969
diff changeset
4016 '''
75ec20b4c50e Issue #9026: Fix order of argparse sub-commands in help messages. (Merged from 3.2.)
Steven Bethard <steven.bethard@gmail.com>
parents: 68969
diff changeset
4017
75ec20b4c50e Issue #9026: Fix order of argparse sub-commands in help messages. (Merged from 3.2.)
Steven Bethard <steven.bethard@gmail.com>
parents: 68969
diff changeset
4018
59267
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
4019 # =====================================
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
4020 # Optional/Positional constructor tests
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
4021 # =====================================
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
4022
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
4023 class TestInvalidArgumentConstructors(TestCase):
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
4024 """Test a bunch of invalid Argument constructors"""
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
4025
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
4026 def assertTypeError(self, *args, **kwargs):
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
4027 parser = argparse.ArgumentParser()
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
4028 self.assertRaises(TypeError, parser.add_argument,
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
4029 *args, **kwargs)
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
4030
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
4031 def assertValueError(self, *args, **kwargs):
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
4032 parser = argparse.ArgumentParser()
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
4033 self.assertRaises(ValueError, parser.add_argument,
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
4034 *args, **kwargs)
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
4035
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
4036 def test_invalid_keyword_arguments(self):
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
4037 self.assertTypeError('-x', bar=None)
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
4038 self.assertTypeError('-y', callback='foo')
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
4039 self.assertTypeError('-y', callback_args=())
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
4040 self.assertTypeError('-y', callback_kwargs={})
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
4041
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
4042 def test_missing_destination(self):
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
4043 self.assertTypeError()
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
4044 for action in ['append', 'store']:
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
4045 self.assertTypeError(action=action)
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
4046
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
4047 def test_invalid_option_strings(self):
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
4048 self.assertValueError('--')
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
4049 self.assertValueError('---')
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
4050
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
4051 def test_invalid_type(self):
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
4052 self.assertValueError('--foo', type='int')
69125
f961e9179998 Issue #9347: Fix formatting for tuples in argparse type= error messages.
Steven Bethard <steven.bethard@gmail.com>
parents: 69005
diff changeset
4053 self.assertValueError('--foo', type=(int, float))
59267
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
4054
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
4055 def test_invalid_action(self):
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
4056 self.assertValueError('-x', action='foo')
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
4057 self.assertValueError('foo', action='baz')
69125
f961e9179998 Issue #9347: Fix formatting for tuples in argparse type= error messages.
Steven Bethard <steven.bethard@gmail.com>
parents: 69005
diff changeset
4058 self.assertValueError('--foo', action=('store', 'append'))
59267
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
4059 parser = argparse.ArgumentParser()
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
4060 try:
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
4061 parser.add_argument("--foo", action="store-true")
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
4062 except ValueError:
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
4063 e = sys.exc_info()[1]
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
4064 expected = 'unknown action'
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
4065 msg = 'expected %r, found %r' % (expected, e)
59273
83e7ee185162 convert deprecated fail* methods to assert* variants
Benjamin Peterson <benjamin@python.org>
parents: 59272
diff changeset
4066 self.assertTrue(expected in str(e), msg)
59267
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
4067
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
4068 def test_multiple_dest(self):
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
4069 parser = argparse.ArgumentParser()
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
4070 parser.add_argument(dest='foo')
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
4071 try:
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
4072 parser.add_argument('bar', dest='baz')
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
4073 except ValueError:
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
4074 e = sys.exc_info()[1]
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
4075 expected = 'dest supplied twice for positional argument'
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
4076 msg = 'expected %r, found %r' % (expected, e)
59273
83e7ee185162 convert deprecated fail* methods to assert* variants
Benjamin Peterson <benjamin@python.org>
parents: 59272
diff changeset
4077 self.assertTrue(expected in str(e), msg)
59267
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
4078
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
4079 def test_no_argument_actions(self):
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
4080 for action in ['store_const', 'store_true', 'store_false',
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
4081 'append_const', 'count']:
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
4082 for attrs in [dict(type=int), dict(nargs='+'),
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
4083 dict(choices='ab')]:
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
4084 self.assertTypeError('-x', action=action, **attrs)
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
4085
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
4086 def test_no_argument_no_const_actions(self):
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
4087 # options with zero arguments
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
4088 for action in ['store_true', 'store_false', 'count']:
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
4089
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
4090 # const is always disallowed
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
4091 self.assertTypeError('-x', const='foo', action=action)
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
4092
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
4093 # nargs is always disallowed
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
4094 self.assertTypeError('-x', nargs='*', action=action)
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
4095
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
4096 def test_more_than_one_argument_actions(self):
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
4097 for action in ['store', 'append']:
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
4098
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
4099 # nargs=0 is disallowed
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
4100 self.assertValueError('-x', nargs=0, action=action)
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
4101 self.assertValueError('spam', nargs=0, action=action)
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
4102
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
4103 # const is disallowed with non-optional arguments
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
4104 for nargs in [1, '*', '+']:
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
4105 self.assertValueError('-x', const='foo',
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
4106 nargs=nargs, action=action)
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
4107 self.assertValueError('spam', const='foo',
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
4108 nargs=nargs, action=action)
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
4109
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
4110 def test_required_const_actions(self):
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
4111 for action in ['store_const', 'append_const']:
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
4112
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
4113 # nargs is always disallowed
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
4114 self.assertTypeError('-x', nargs='+', action=action)
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
4115
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
4116 def test_parsers_action_missing_params(self):
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
4117 self.assertTypeError('command', action='parsers')
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
4118 self.assertTypeError('command', action='parsers', prog='PROG')
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
4119 self.assertTypeError('command', action='parsers',
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
4120 parser_class=argparse.ArgumentParser)
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
4121
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
4122 def test_required_positional(self):
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
4123 self.assertTypeError('foo', required=True)
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
4124
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
4125 def test_user_defined_action(self):
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
4126
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
4127 class Success(Exception):
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
4128 pass
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
4129
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
4130 class Action(object):
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
4131
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
4132 def __init__(self,
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
4133 option_strings,
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
4134 dest,
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
4135 const,
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
4136 default,
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
4137 required=False):
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
4138 if dest == 'spam':
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
4139 if const is Success:
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
4140 if default is Success:
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
4141 raise Success()
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
4142
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
4143 def __call__(self, *args, **kwargs):
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
4144 pass
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
4145
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
4146 parser = argparse.ArgumentParser()
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
4147 self.assertRaises(Success, parser.add_argument, '--spam',
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
4148 action=Action, default=Success, const=Success)
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
4149 self.assertRaises(Success, parser.add_argument, 'spam',
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
4150 action=Action, default=Success, const=Success)
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
4151
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
4152 # ================================
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
4153 # Actions returned by add_argument
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
4154 # ================================
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
4155
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
4156 class TestActionsReturned(TestCase):
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
4157
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
4158 def test_dest(self):
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
4159 parser = argparse.ArgumentParser()
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
4160 action = parser.add_argument('--foo')
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
4161 self.assertEqual(action.dest, 'foo')
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
4162 action = parser.add_argument('-b', '--bar')
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
4163 self.assertEqual(action.dest, 'bar')
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
4164 action = parser.add_argument('-x', '-y')
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
4165 self.assertEqual(action.dest, 'x')
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
4166
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
4167 def test_misc(self):
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
4168 parser = argparse.ArgumentParser()
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
4169 action = parser.add_argument('--foo', nargs='?', const=42,
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
4170 default=84, type=int, choices=[1, 2],
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
4171 help='FOO', metavar='BAR', dest='baz')
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
4172 self.assertEqual(action.nargs, '?')
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
4173 self.assertEqual(action.const, 42)
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
4174 self.assertEqual(action.default, 84)
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
4175 self.assertEqual(action.type, int)
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
4176 self.assertEqual(action.choices, [1, 2])
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
4177 self.assertEqual(action.help, 'FOO')
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
4178 self.assertEqual(action.metavar, 'BAR')
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
4179 self.assertEqual(action.dest, 'baz')
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
4180
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
4181
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
4182 # ================================
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
4183 # Argument conflict handling tests
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
4184 # ================================
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
4185
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
4186 class TestConflictHandling(TestCase):
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
4187
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
4188 def test_bad_type(self):
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
4189 self.assertRaises(ValueError, argparse.ArgumentParser,
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
4190 conflict_handler='foo')
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
4191
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
4192 def test_conflict_error(self):
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
4193 parser = argparse.ArgumentParser()
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
4194 parser.add_argument('-x')
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
4195 self.assertRaises(argparse.ArgumentError,
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
4196 parser.add_argument, '-x')
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
4197 parser.add_argument('--spam')
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
4198 self.assertRaises(argparse.ArgumentError,
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
4199 parser.add_argument, '--spam')
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
4200
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
4201 def test_resolve_error(self):
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
4202 get_parser = argparse.ArgumentParser
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
4203 parser = get_parser(prog='PROG', conflict_handler='resolve')
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
4204
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
4205 parser.add_argument('-x', help='OLD X')
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
4206 parser.add_argument('-x', help='NEW X')
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
4207 self.assertEqual(parser.format_help(), textwrap.dedent('''\
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
4208 usage: PROG [-h] [-x X]
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
4209
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
4210 optional arguments:
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
4211 -h, --help show this help message and exit
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
4212 -x X NEW X
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
4213 '''))
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
4214
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
4215 parser.add_argument('--spam', metavar='OLD_SPAM')
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
4216 parser.add_argument('--spam', metavar='NEW_SPAM')
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
4217 self.assertEqual(parser.format_help(), textwrap.dedent('''\
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
4218 usage: PROG [-h] [-x X] [--spam NEW_SPAM]
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
4219
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
4220 optional arguments:
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
4221 -h, --help show this help message and exit
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
4222 -x X NEW X
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
4223 --spam NEW_SPAM
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
4224 '''))
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
4225
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
4226
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
4227 # =============================
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
4228 # Help and Version option tests
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
4229 # =============================
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
4230
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
4231 class TestOptionalsHelpVersionActions(TestCase):
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
4232 """Test the help and version actions"""
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
4233
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
4234 def _get_error(self, func, *args, **kwargs):
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
4235 try:
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
4236 func(*args, **kwargs)
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
4237 except ArgumentParserError:
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
4238 return sys.exc_info()[1]
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
4239 else:
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
4240 self.assertRaises(ArgumentParserError, func, *args, **kwargs)
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
4241
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
4242 def assertPrintHelpExit(self, parser, args_str):
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
4243 self.assertEqual(
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
4244 parser.format_help(),
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
4245 self._get_error(parser.parse_args, args_str.split()).stdout)
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
4246
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
4247 def assertPrintVersionExit(self, parser, args_str):
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
4248 self.assertEqual(
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
4249 parser.format_version(),
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
4250 self._get_error(parser.parse_args, args_str.split()).stderr)
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
4251
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
4252 def assertArgumentParserError(self, parser, *args):
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
4253 self.assertRaises(ArgumentParserError, parser.parse_args, args)
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
4254
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
4255 def test_version(self):
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
4256 parser = ErrorRaisingArgumentParser(version='1.0')
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
4257 self.assertPrintHelpExit(parser, '-h')
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
4258 self.assertPrintHelpExit(parser, '--help')
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
4259 self.assertPrintVersionExit(parser, '-v')
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
4260 self.assertPrintVersionExit(parser, '--version')
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
4261
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
4262 def test_version_format(self):
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
4263 parser = ErrorRaisingArgumentParser(prog='PPP', version='%(prog)s 3.5')
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
4264 msg = self._get_error(parser.parse_args, ['-v']).stderr
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
4265 self.assertEqual('PPP 3.5\n', msg)
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
4266
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
4267 def test_version_no_help(self):
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
4268 parser = ErrorRaisingArgumentParser(add_help=False, version='1.0')
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
4269 self.assertArgumentParserError(parser, '-h')
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
4270 self.assertArgumentParserError(parser, '--help')
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
4271 self.assertPrintVersionExit(parser, '-v')
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
4272 self.assertPrintVersionExit(parser, '--version')
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
4273
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
4274 def test_version_action(self):
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
4275 parser = ErrorRaisingArgumentParser(prog='XXX')
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
4276 parser.add_argument('-V', action='version', version='%(prog)s 3.7')
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
4277 msg = self._get_error(parser.parse_args, ['-V']).stderr
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
4278 self.assertEqual('XXX 3.7\n', msg)
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
4279
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
4280 def test_no_help(self):
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
4281 parser = ErrorRaisingArgumentParser(add_help=False)
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
4282 self.assertArgumentParserError(parser, '-h')
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
4283 self.assertArgumentParserError(parser, '--help')
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
4284 self.assertArgumentParserError(parser, '-v')
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
4285 self.assertArgumentParserError(parser, '--version')
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
4286
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
4287 def test_alternate_help_version(self):
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
4288 parser = ErrorRaisingArgumentParser()
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
4289 parser.add_argument('-x', action='help')
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
4290 parser.add_argument('-y', action='version')
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
4291 self.assertPrintHelpExit(parser, '-x')
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
4292 self.assertPrintVersionExit(parser, '-y')
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
4293 self.assertArgumentParserError(parser, '-v')
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
4294 self.assertArgumentParserError(parser, '--version')
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
4295
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
4296 def test_help_version_extra_arguments(self):
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
4297 parser = ErrorRaisingArgumentParser(version='1.0')
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
4298 parser.add_argument('-x', action='store_true')
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
4299 parser.add_argument('y')
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
4300
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
4301 # try all combinations of valid prefixes and suffixes
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
4302 valid_prefixes = ['', '-x', 'foo', '-x bar', 'baz -x']
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
4303 valid_suffixes = valid_prefixes + ['--bad-option', 'foo bar baz']
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
4304 for prefix in valid_prefixes:
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
4305 for suffix in valid_suffixes:
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
4306 format = '%s %%s %s' % (prefix, suffix)
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
4307 self.assertPrintHelpExit(parser, format % '-h')
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
4308 self.assertPrintHelpExit(parser, format % '--help')
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
4309 self.assertPrintVersionExit(parser, format % '-v')
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
4310 self.assertPrintVersionExit(parser, format % '--version')
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
4311
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
4312
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
4313 # ======================
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
4314 # str() and repr() tests
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
4315 # ======================
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
4316
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
4317 class TestStrings(TestCase):
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
4318 """Test str() and repr() on Optionals and Positionals"""
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
4319
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
4320 def assertStringEqual(self, obj, result_string):
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
4321 for func in [str, repr]:
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
4322 self.assertEqual(func(obj), result_string)
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
4323
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
4324 def test_optional(self):
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
4325 option = argparse.Action(
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
4326 option_strings=['--foo', '-a', '-b'],
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
4327 dest='b',
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
4328 type='int',
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
4329 nargs='+',
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
4330 default=42,
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
4331 choices=[1, 2, 3],
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
4332 help='HELP',
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
4333 metavar='METAVAR')
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
4334 string = (
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
4335 "Action(option_strings=['--foo', '-a', '-b'], dest='b', "
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
4336 "nargs='+', const=None, default=42, type='int', "
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
4337 "choices=[1, 2, 3], help='HELP', metavar='METAVAR')")
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
4338 self.assertStringEqual(option, string)
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
4339
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
4340 def test_argument(self):
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
4341 argument = argparse.Action(
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
4342 option_strings=[],
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
4343 dest='x',
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
4344 type=float,
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
4345 nargs='?',
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
4346 default=2.5,
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
4347 choices=[0.5, 1.5, 2.5],
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
4348 help='H HH H',
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
4349 metavar='MV MV MV')
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
4350 string = (
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
4351 "Action(option_strings=[], dest='x', nargs='?', "
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
4352 "const=None, default=2.5, type=%r, choices=[0.5, 1.5, 2.5], "
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
4353 "help='H HH H', metavar='MV MV MV')" % float)
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
4354 self.assertStringEqual(argument, string)
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
4355
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
4356 def test_namespace(self):
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
4357 ns = argparse.Namespace(foo=42, bar='spam')
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
4358 string = "Namespace(bar='spam', foo=42)"
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
4359 self.assertStringEqual(ns, string)
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
4360
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
4361 def test_parser(self):
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
4362 parser = argparse.ArgumentParser(prog='PROG')
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
4363 string = (
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
4364 "ArgumentParser(prog='PROG', usage=None, description=None, "
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
4365 "version=None, formatter_class=%r, conflict_handler='error', "
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
4366 "add_help=True)" % argparse.HelpFormatter)
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
4367 self.assertStringEqual(parser, string)
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
4368
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
4369 # ===============
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
4370 # Namespace tests
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
4371 # ===============
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
4372
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
4373 class TestNamespace(TestCase):
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
4374
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
4375 def test_constructor(self):
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
4376 ns = argparse.Namespace()
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
4377 self.assertRaises(AttributeError, getattr, ns, 'x')
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
4378
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
4379 ns = argparse.Namespace(a=42, b='spam')
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
4380 self.assertEqual(ns.a, 42)
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
4381 self.assertEqual(ns.b, 'spam')
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
4382
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
4383 def test_equality(self):
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
4384 ns1 = argparse.Namespace(a=1, b=2)
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
4385 ns2 = argparse.Namespace(b=2, a=1)
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
4386 ns3 = argparse.Namespace(a=1)
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
4387 ns4 = argparse.Namespace(b=2)
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
4388
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
4389 self.assertEqual(ns1, ns2)
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
4390 self.assertNotEqual(ns1, ns3)
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
4391 self.assertNotEqual(ns1, ns4)
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
4392 self.assertNotEqual(ns2, ns3)
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
4393 self.assertNotEqual(ns2, ns4)
59273
83e7ee185162 convert deprecated fail* methods to assert* variants
Benjamin Peterson <benjamin@python.org>
parents: 59272
diff changeset
4394 self.assertTrue(ns1 != ns3)
83e7ee185162 convert deprecated fail* methods to assert* variants
Benjamin Peterson <benjamin@python.org>
parents: 59272
diff changeset
4395 self.assertTrue(ns1 != ns4)
83e7ee185162 convert deprecated fail* methods to assert* variants
Benjamin Peterson <benjamin@python.org>
parents: 59272
diff changeset
4396 self.assertTrue(ns2 != ns3)
83e7ee185162 convert deprecated fail* methods to assert* variants
Benjamin Peterson <benjamin@python.org>
parents: 59272
diff changeset
4397 self.assertTrue(ns2 != ns4)
59267
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
4398
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
4399
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
4400 # ===================
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
4401 # File encoding tests
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
4402 # ===================
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
4403
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
4404 class TestEncoding(TestCase):
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
4405
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
4406 def _test_module_encoding(self, path):
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
4407 path, _ = os.path.splitext(path)
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
4408 path += ".py"
65333
4269267e6e57 Merged revisions 85497 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 63691
diff changeset
4409 with codecs.open(path, 'r', 'utf8') as f:
4269267e6e57 Merged revisions 85497 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 63691
diff changeset
4410 f.read()
59267
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
4411
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
4412 def test_argparse_module_encoding(self):
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
4413 self._test_module_encoding(argparse.__file__)
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
4414
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
4415 def test_test_argparse_module_encoding(self):
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
4416 self._test_module_encoding(__file__)
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
4417
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
4418 # ===================
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
4419 # ArgumentError tests
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
4420 # ===================
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
4421
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
4422 class TestArgumentError(TestCase):
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
4423
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
4424 def test_argument_error(self):
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
4425 msg = "my error here"
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
4426 error = argparse.ArgumentError(None, msg)
59273
83e7ee185162 convert deprecated fail* methods to assert* variants
Benjamin Peterson <benjamin@python.org>
parents: 59272
diff changeset
4427 self.assertEqual(str(error), msg)
59267
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
4428
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
4429 # =======================
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
4430 # ArgumentTypeError tests
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
4431 # =======================
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
4432
67921
89d52effc30a Merged revisions 86542,87136,87216,87221,87228,87256,87337-87338,87372,87516,87571,88164 via svnmerge from
R. David Murray <rdmurray@bitdance.com>
parents: 67824
diff changeset
4433 class TestArgumentTypeError(TestCase):
59267
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
4434
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
4435 def test_argument_type_error(self):
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
4436
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
4437 def spam(string):
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
4438 raise argparse.ArgumentTypeError('spam!')
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
4439
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
4440 parser = ErrorRaisingArgumentParser(prog='PROG', add_help=False)
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
4441 parser.add_argument('x', type=spam)
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
4442 try:
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
4443 parser.parse_args(['XXX'])
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
4444 except ArgumentParserError:
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
4445 expected = 'usage: PROG x\nPROG: error: argument x: spam!\n'
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
4446 msg = sys.exc_info()[1].stderr
59273
83e7ee185162 convert deprecated fail* methods to assert* variants
Benjamin Peterson <benjamin@python.org>
parents: 59272
diff changeset
4447 self.assertEqual(expected, msg)
59267
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
4448 else:
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
4449 self.fail()
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
4450
78823
62b5667ef2f4 #12776,#11839: call argparse type function only once.
R David Murray <rdmurray@bitdance.com>
parents: 78233
diff changeset
4451 # ================================================
62b5667ef2f4 #12776,#11839: call argparse type function only once.
R David Murray <rdmurray@bitdance.com>
parents: 78233
diff changeset
4452 # Check that the type function is called only once
62b5667ef2f4 #12776,#11839: call argparse type function only once.
R David Murray <rdmurray@bitdance.com>
parents: 78233
diff changeset
4453 # ================================================
62b5667ef2f4 #12776,#11839: call argparse type function only once.
R David Murray <rdmurray@bitdance.com>
parents: 78233
diff changeset
4454
62b5667ef2f4 #12776,#11839: call argparse type function only once.
R David Murray <rdmurray@bitdance.com>
parents: 78233
diff changeset
4455 class TestTypeFunctionCallOnlyOnce(TestCase):
62b5667ef2f4 #12776,#11839: call argparse type function only once.
R David Murray <rdmurray@bitdance.com>
parents: 78233
diff changeset
4456
62b5667ef2f4 #12776,#11839: call argparse type function only once.
R David Murray <rdmurray@bitdance.com>
parents: 78233
diff changeset
4457 def test_type_function_call_only_once(self):
62b5667ef2f4 #12776,#11839: call argparse type function only once.
R David Murray <rdmurray@bitdance.com>
parents: 78233
diff changeset
4458 def spam(string_to_convert):
62b5667ef2f4 #12776,#11839: call argparse type function only once.
R David Murray <rdmurray@bitdance.com>
parents: 78233
diff changeset
4459 self.assertEqual(string_to_convert, 'spam!')
62b5667ef2f4 #12776,#11839: call argparse type function only once.
R David Murray <rdmurray@bitdance.com>
parents: 78233
diff changeset
4460 return 'foo_converted'
62b5667ef2f4 #12776,#11839: call argparse type function only once.
R David Murray <rdmurray@bitdance.com>
parents: 78233
diff changeset
4461
62b5667ef2f4 #12776,#11839: call argparse type function only once.
R David Murray <rdmurray@bitdance.com>
parents: 78233
diff changeset
4462 parser = argparse.ArgumentParser()
62b5667ef2f4 #12776,#11839: call argparse type function only once.
R David Murray <rdmurray@bitdance.com>
parents: 78233
diff changeset
4463 parser.add_argument('--foo', type=spam, default='bar')
62b5667ef2f4 #12776,#11839: call argparse type function only once.
R David Murray <rdmurray@bitdance.com>
parents: 78233
diff changeset
4464 args = parser.parse_args('--foo spam!'.split())
62b5667ef2f4 #12776,#11839: call argparse type function only once.
R David Murray <rdmurray@bitdance.com>
parents: 78233
diff changeset
4465 self.assertEqual(NS(foo='foo_converted'), args)
62b5667ef2f4 #12776,#11839: call argparse type function only once.
R David Murray <rdmurray@bitdance.com>
parents: 78233
diff changeset
4466
79014
8f847f66a49f A follow up for issue #15906: change the test for calling the type conversion
Barry Warsaw <barry@python.org>
parents: 78999
diff changeset
4467 # ==================================================================
8f847f66a49f A follow up for issue #15906: change the test for calling the type conversion
Barry Warsaw <barry@python.org>
parents: 78999
diff changeset
4468 # Check semantics regarding the default argument and type conversion
8f847f66a49f A follow up for issue #15906: change the test for calling the type conversion
Barry Warsaw <barry@python.org>
parents: 78999
diff changeset
4469 # ==================================================================
8f847f66a49f A follow up for issue #15906: change the test for calling the type conversion
Barry Warsaw <barry@python.org>
parents: 78999
diff changeset
4470
8f847f66a49f A follow up for issue #15906: change the test for calling the type conversion
Barry Warsaw <barry@python.org>
parents: 78999
diff changeset
4471 class TestTypeFunctionCalledOnDefault(TestCase):
78823
62b5667ef2f4 #12776,#11839: call argparse type function only once.
R David Murray <rdmurray@bitdance.com>
parents: 78233
diff changeset
4472
62b5667ef2f4 #12776,#11839: call argparse type function only once.
R David Murray <rdmurray@bitdance.com>
parents: 78233
diff changeset
4473 def test_type_function_call_with_non_string_default(self):
62b5667ef2f4 #12776,#11839: call argparse type function only once.
R David Murray <rdmurray@bitdance.com>
parents: 78233
diff changeset
4474 def spam(int_to_convert):
62b5667ef2f4 #12776,#11839: call argparse type function only once.
R David Murray <rdmurray@bitdance.com>
parents: 78233
diff changeset
4475 self.assertEqual(int_to_convert, 0)
62b5667ef2f4 #12776,#11839: call argparse type function only once.
R David Murray <rdmurray@bitdance.com>
parents: 78233
diff changeset
4476 return 'foo_converted'
62b5667ef2f4 #12776,#11839: call argparse type function only once.
R David Murray <rdmurray@bitdance.com>
parents: 78233
diff changeset
4477
62b5667ef2f4 #12776,#11839: call argparse type function only once.
R David Murray <rdmurray@bitdance.com>
parents: 78233
diff changeset
4478 parser = argparse.ArgumentParser()
62b5667ef2f4 #12776,#11839: call argparse type function only once.
R David Murray <rdmurray@bitdance.com>
parents: 78233
diff changeset
4479 parser.add_argument('--foo', type=spam, default=0)
62b5667ef2f4 #12776,#11839: call argparse type function only once.
R David Murray <rdmurray@bitdance.com>
parents: 78233
diff changeset
4480 args = parser.parse_args([])
79014
8f847f66a49f A follow up for issue #15906: change the test for calling the type conversion
Barry Warsaw <barry@python.org>
parents: 78999
diff changeset
4481 # foo should *not* be converted because its default is not a string.
8f847f66a49f A follow up for issue #15906: change the test for calling the type conversion
Barry Warsaw <barry@python.org>
parents: 78999
diff changeset
4482 self.assertEqual(NS(foo=0), args)
8f847f66a49f A follow up for issue #15906: change the test for calling the type conversion
Barry Warsaw <barry@python.org>
parents: 78999
diff changeset
4483
8f847f66a49f A follow up for issue #15906: change the test for calling the type conversion
Barry Warsaw <barry@python.org>
parents: 78999
diff changeset
4484 def test_type_function_call_with_string_default(self):
8f847f66a49f A follow up for issue #15906: change the test for calling the type conversion
Barry Warsaw <barry@python.org>
parents: 78999
diff changeset
4485 def spam(int_to_convert):
8f847f66a49f A follow up for issue #15906: change the test for calling the type conversion
Barry Warsaw <barry@python.org>
parents: 78999
diff changeset
4486 return 'foo_converted'
8f847f66a49f A follow up for issue #15906: change the test for calling the type conversion
Barry Warsaw <barry@python.org>
parents: 78999
diff changeset
4487
8f847f66a49f A follow up for issue #15906: change the test for calling the type conversion
Barry Warsaw <barry@python.org>
parents: 78999
diff changeset
4488 parser = argparse.ArgumentParser()
8f847f66a49f A follow up for issue #15906: change the test for calling the type conversion
Barry Warsaw <barry@python.org>
parents: 78999
diff changeset
4489 parser.add_argument('--foo', type=spam, default='0')
8f847f66a49f A follow up for issue #15906: change the test for calling the type conversion
Barry Warsaw <barry@python.org>
parents: 78999
diff changeset
4490 args = parser.parse_args([])
8f847f66a49f A follow up for issue #15906: change the test for calling the type conversion
Barry Warsaw <barry@python.org>
parents: 78999
diff changeset
4491 # foo is converted because its default is a string.
78823
62b5667ef2f4 #12776,#11839: call argparse type function only once.
R David Murray <rdmurray@bitdance.com>
parents: 78233
diff changeset
4492 self.assertEqual(NS(foo='foo_converted'), args)
62b5667ef2f4 #12776,#11839: call argparse type function only once.
R David Murray <rdmurray@bitdance.com>
parents: 78233
diff changeset
4493
79014
8f847f66a49f A follow up for issue #15906: change the test for calling the type conversion
Barry Warsaw <barry@python.org>
parents: 78999
diff changeset
4494 def test_no_double_type_conversion_of_default(self):
8f847f66a49f A follow up for issue #15906: change the test for calling the type conversion
Barry Warsaw <barry@python.org>
parents: 78999
diff changeset
4495 def extend(str_to_convert):
8f847f66a49f A follow up for issue #15906: change the test for calling the type conversion
Barry Warsaw <barry@python.org>
parents: 78999
diff changeset
4496 return str_to_convert + '*'
8f847f66a49f A follow up for issue #15906: change the test for calling the type conversion
Barry Warsaw <barry@python.org>
parents: 78999
diff changeset
4497
8f847f66a49f A follow up for issue #15906: change the test for calling the type conversion
Barry Warsaw <barry@python.org>
parents: 78999
diff changeset
4498 parser = argparse.ArgumentParser()
8f847f66a49f A follow up for issue #15906: change the test for calling the type conversion
Barry Warsaw <barry@python.org>
parents: 78999
diff changeset
4499 parser.add_argument('--test', type=extend, default='*')
8f847f66a49f A follow up for issue #15906: change the test for calling the type conversion
Barry Warsaw <barry@python.org>
parents: 78999
diff changeset
4500 args = parser.parse_args([])
8f847f66a49f A follow up for issue #15906: change the test for calling the type conversion
Barry Warsaw <barry@python.org>
parents: 78999
diff changeset
4501 # The test argument will be two stars, one coming from the default
8f847f66a49f A follow up for issue #15906: change the test for calling the type conversion
Barry Warsaw <barry@python.org>
parents: 78999
diff changeset
4502 # value and one coming from the type conversion being called exactly
8f847f66a49f A follow up for issue #15906: change the test for calling the type conversion
Barry Warsaw <barry@python.org>
parents: 78999
diff changeset
4503 # once.
8f847f66a49f A follow up for issue #15906: change the test for calling the type conversion
Barry Warsaw <barry@python.org>
parents: 78999
diff changeset
4504 self.assertEqual(NS(test='**'), args)
8f847f66a49f A follow up for issue #15906: change the test for calling the type conversion
Barry Warsaw <barry@python.org>
parents: 78999
diff changeset
4505
78999
739606bdcba4 - Issue #15906: Fix a regression in argparse caused by the preceding change,
Barry Warsaw <barry@python.org>
parents: 78881
diff changeset
4506 def test_issue_15906(self):
739606bdcba4 - Issue #15906: Fix a regression in argparse caused by the preceding change,
Barry Warsaw <barry@python.org>
parents: 78881
diff changeset
4507 # Issue #15906: When action='append', type=str, default=[] are
739606bdcba4 - Issue #15906: Fix a regression in argparse caused by the preceding change,
Barry Warsaw <barry@python.org>
parents: 78881
diff changeset
4508 # providing, the dest value was the string representation "[]" when it
739606bdcba4 - Issue #15906: Fix a regression in argparse caused by the preceding change,
Barry Warsaw <barry@python.org>
parents: 78881
diff changeset
4509 # should have been an empty list.
739606bdcba4 - Issue #15906: Fix a regression in argparse caused by the preceding change,
Barry Warsaw <barry@python.org>
parents: 78881
diff changeset
4510 parser = argparse.ArgumentParser()
739606bdcba4 - Issue #15906: Fix a regression in argparse caused by the preceding change,
Barry Warsaw <barry@python.org>
parents: 78881
diff changeset
4511 parser.add_argument('--test', dest='test', type=str,
739606bdcba4 - Issue #15906: Fix a regression in argparse caused by the preceding change,
Barry Warsaw <barry@python.org>
parents: 78881
diff changeset
4512 default=[], action='append')
739606bdcba4 - Issue #15906: Fix a regression in argparse caused by the preceding change,
Barry Warsaw <barry@python.org>
parents: 78881
diff changeset
4513 args = parser.parse_args([])
739606bdcba4 - Issue #15906: Fix a regression in argparse caused by the preceding change,
Barry Warsaw <barry@python.org>
parents: 78881
diff changeset
4514 self.assertEqual(args.test, [])
739606bdcba4 - Issue #15906: Fix a regression in argparse caused by the preceding change,
Barry Warsaw <barry@python.org>
parents: 78881
diff changeset
4515
59267
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
4516 # ======================
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
4517 # parse_known_args tests
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
4518 # ======================
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
4519
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
4520 class TestParseKnownArgs(TestCase):
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
4521
78881
a2147bbf7868 #15847: allow args to be a tuple in parse_args
R David Murray <rdmurray@bitdance.com>
parents: 78823
diff changeset
4522 def test_arguments_tuple(self):
a2147bbf7868 #15847: allow args to be a tuple in parse_args
R David Murray <rdmurray@bitdance.com>
parents: 78823
diff changeset
4523 parser = argparse.ArgumentParser()
a2147bbf7868 #15847: allow args to be a tuple in parse_args
R David Murray <rdmurray@bitdance.com>
parents: 78823
diff changeset
4524 parser.parse_args(())
a2147bbf7868 #15847: allow args to be a tuple in parse_args
R David Murray <rdmurray@bitdance.com>
parents: 78823
diff changeset
4525
a2147bbf7868 #15847: allow args to be a tuple in parse_args
R David Murray <rdmurray@bitdance.com>
parents: 78823
diff changeset
4526 def test_arguments_list(self):
a2147bbf7868 #15847: allow args to be a tuple in parse_args
R David Murray <rdmurray@bitdance.com>
parents: 78823
diff changeset
4527 parser = argparse.ArgumentParser()
a2147bbf7868 #15847: allow args to be a tuple in parse_args
R David Murray <rdmurray@bitdance.com>
parents: 78823
diff changeset
4528 parser.parse_args([])
a2147bbf7868 #15847: allow args to be a tuple in parse_args
R David Murray <rdmurray@bitdance.com>
parents: 78823
diff changeset
4529
a2147bbf7868 #15847: allow args to be a tuple in parse_args
R David Murray <rdmurray@bitdance.com>
parents: 78823
diff changeset
4530 def test_arguments_tuple_positional(self):
a2147bbf7868 #15847: allow args to be a tuple in parse_args
R David Murray <rdmurray@bitdance.com>
parents: 78823
diff changeset
4531 parser = argparse.ArgumentParser()
a2147bbf7868 #15847: allow args to be a tuple in parse_args
R David Murray <rdmurray@bitdance.com>
parents: 78823
diff changeset
4532 parser.add_argument('x')
a2147bbf7868 #15847: allow args to be a tuple in parse_args
R David Murray <rdmurray@bitdance.com>
parents: 78823
diff changeset
4533 parser.parse_args(('x',))
a2147bbf7868 #15847: allow args to be a tuple in parse_args
R David Murray <rdmurray@bitdance.com>
parents: 78823
diff changeset
4534
a2147bbf7868 #15847: allow args to be a tuple in parse_args
R David Murray <rdmurray@bitdance.com>
parents: 78823
diff changeset
4535 def test_arguments_list_positional(self):
a2147bbf7868 #15847: allow args to be a tuple in parse_args
R David Murray <rdmurray@bitdance.com>
parents: 78823
diff changeset
4536 parser = argparse.ArgumentParser()
a2147bbf7868 #15847: allow args to be a tuple in parse_args
R David Murray <rdmurray@bitdance.com>
parents: 78823
diff changeset
4537 parser.add_argument('x')
a2147bbf7868 #15847: allow args to be a tuple in parse_args
R David Murray <rdmurray@bitdance.com>
parents: 78823
diff changeset
4538 parser.parse_args(['x'])
a2147bbf7868 #15847: allow args to be a tuple in parse_args
R David Murray <rdmurray@bitdance.com>
parents: 78823
diff changeset
4539
59267
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
4540 def test_optionals(self):
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
4541 parser = argparse.ArgumentParser()
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
4542 parser.add_argument('--foo')
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
4543 args, extras = parser.parse_known_args('--foo F --bar --baz'.split())
59273
83e7ee185162 convert deprecated fail* methods to assert* variants
Benjamin Peterson <benjamin@python.org>
parents: 59272
diff changeset
4544 self.assertEqual(NS(foo='F'), args)
83e7ee185162 convert deprecated fail* methods to assert* variants
Benjamin Peterson <benjamin@python.org>
parents: 59272
diff changeset
4545 self.assertEqual(['--bar', '--baz'], extras)
59267
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
4546
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
4547 def test_mixed(self):
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
4548 parser = argparse.ArgumentParser()
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
4549 parser.add_argument('-v', nargs='?', const=1, type=int)
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
4550 parser.add_argument('--spam', action='store_false')
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
4551 parser.add_argument('badger')
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
4552
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
4553 argv = ["B", "C", "--foo", "-v", "3", "4"]
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
4554 args, extras = parser.parse_known_args(argv)
59273
83e7ee185162 convert deprecated fail* methods to assert* variants
Benjamin Peterson <benjamin@python.org>
parents: 59272
diff changeset
4555 self.assertEqual(NS(v=3, spam=True, badger="B"), args)
83e7ee185162 convert deprecated fail* methods to assert* variants
Benjamin Peterson <benjamin@python.org>
parents: 59272
diff changeset
4556 self.assertEqual(["C", "--foo", "4"], extras)
59267
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
4557
68969
4bb651eb7539 Issue #9348: Raise an early error if argparse nargs and metavar don't match. (Merge from 3.2.)
Steven Bethard <steven.bethard@gmail.com>
parents: 67921
diff changeset
4558 # ==========================
4bb651eb7539 Issue #9348: Raise an early error if argparse nargs and metavar don't match. (Merge from 3.2.)
Steven Bethard <steven.bethard@gmail.com>
parents: 67921
diff changeset
4559 # add_argument metavar tests
4bb651eb7539 Issue #9348: Raise an early error if argparse nargs and metavar don't match. (Merge from 3.2.)
Steven Bethard <steven.bethard@gmail.com>
parents: 67921
diff changeset
4560 # ==========================
4bb651eb7539 Issue #9348: Raise an early error if argparse nargs and metavar don't match. (Merge from 3.2.)
Steven Bethard <steven.bethard@gmail.com>
parents: 67921
diff changeset
4561
4bb651eb7539 Issue #9348: Raise an early error if argparse nargs and metavar don't match. (Merge from 3.2.)
Steven Bethard <steven.bethard@gmail.com>
parents: 67921
diff changeset
4562 class TestAddArgumentMetavar(TestCase):
4bb651eb7539 Issue #9348: Raise an early error if argparse nargs and metavar don't match. (Merge from 3.2.)
Steven Bethard <steven.bethard@gmail.com>
parents: 67921
diff changeset
4563
4bb651eb7539 Issue #9348: Raise an early error if argparse nargs and metavar don't match. (Merge from 3.2.)
Steven Bethard <steven.bethard@gmail.com>
parents: 67921
diff changeset
4564 EXPECTED_MESSAGE = "length of metavar tuple does not match nargs"
4bb651eb7539 Issue #9348: Raise an early error if argparse nargs and metavar don't match. (Merge from 3.2.)
Steven Bethard <steven.bethard@gmail.com>
parents: 67921
diff changeset
4565
4bb651eb7539 Issue #9348: Raise an early error if argparse nargs and metavar don't match. (Merge from 3.2.)
Steven Bethard <steven.bethard@gmail.com>
parents: 67921
diff changeset
4566 def do_test_no_exception(self, nargs, metavar):
4bb651eb7539 Issue #9348: Raise an early error if argparse nargs and metavar don't match. (Merge from 3.2.)
Steven Bethard <steven.bethard@gmail.com>
parents: 67921
diff changeset
4567 parser = argparse.ArgumentParser()
4bb651eb7539 Issue #9348: Raise an early error if argparse nargs and metavar don't match. (Merge from 3.2.)
Steven Bethard <steven.bethard@gmail.com>
parents: 67921
diff changeset
4568 parser.add_argument("--foo", nargs=nargs, metavar=metavar)
4bb651eb7539 Issue #9348: Raise an early error if argparse nargs and metavar don't match. (Merge from 3.2.)
Steven Bethard <steven.bethard@gmail.com>
parents: 67921
diff changeset
4569
4bb651eb7539 Issue #9348: Raise an early error if argparse nargs and metavar don't match. (Merge from 3.2.)
Steven Bethard <steven.bethard@gmail.com>
parents: 67921
diff changeset
4570 def do_test_exception(self, nargs, metavar):
4bb651eb7539 Issue #9348: Raise an early error if argparse nargs and metavar don't match. (Merge from 3.2.)
Steven Bethard <steven.bethard@gmail.com>
parents: 67921
diff changeset
4571 parser = argparse.ArgumentParser()
4bb651eb7539 Issue #9348: Raise an early error if argparse nargs and metavar don't match. (Merge from 3.2.)
Steven Bethard <steven.bethard@gmail.com>
parents: 67921
diff changeset
4572 with self.assertRaises(ValueError) as cm:
4bb651eb7539 Issue #9348: Raise an early error if argparse nargs and metavar don't match. (Merge from 3.2.)
Steven Bethard <steven.bethard@gmail.com>
parents: 67921
diff changeset
4573 parser.add_argument("--foo", nargs=nargs, metavar=metavar)
4bb651eb7539 Issue #9348: Raise an early error if argparse nargs and metavar don't match. (Merge from 3.2.)
Steven Bethard <steven.bethard@gmail.com>
parents: 67921
diff changeset
4574 self.assertEqual(cm.exception.args[0], self.EXPECTED_MESSAGE)
4bb651eb7539 Issue #9348: Raise an early error if argparse nargs and metavar don't match. (Merge from 3.2.)
Steven Bethard <steven.bethard@gmail.com>
parents: 67921
diff changeset
4575
4bb651eb7539 Issue #9348: Raise an early error if argparse nargs and metavar don't match. (Merge from 3.2.)
Steven Bethard <steven.bethard@gmail.com>
parents: 67921
diff changeset
4576 # Unit tests for different values of metavar when nargs=None
4bb651eb7539 Issue #9348: Raise an early error if argparse nargs and metavar don't match. (Merge from 3.2.)
Steven Bethard <steven.bethard@gmail.com>
parents: 67921
diff changeset
4577
4bb651eb7539 Issue #9348: Raise an early error if argparse nargs and metavar don't match. (Merge from 3.2.)
Steven Bethard <steven.bethard@gmail.com>
parents: 67921
diff changeset
4578 def test_nargs_None_metavar_string(self):
4bb651eb7539 Issue #9348: Raise an early error if argparse nargs and metavar don't match. (Merge from 3.2.)
Steven Bethard <steven.bethard@gmail.com>
parents: 67921
diff changeset
4579 self.do_test_no_exception(nargs=None, metavar="1")
4bb651eb7539 Issue #9348: Raise an early error if argparse nargs and metavar don't match. (Merge from 3.2.)
Steven Bethard <steven.bethard@gmail.com>
parents: 67921
diff changeset
4580
4bb651eb7539 Issue #9348: Raise an early error if argparse nargs and metavar don't match. (Merge from 3.2.)
Steven Bethard <steven.bethard@gmail.com>
parents: 67921
diff changeset
4581 def test_nargs_None_metavar_length0(self):
4bb651eb7539 Issue #9348: Raise an early error if argparse nargs and metavar don't match. (Merge from 3.2.)
Steven Bethard <steven.bethard@gmail.com>
parents: 67921
diff changeset
4582 self.do_test_exception(nargs=None, metavar=tuple())
4bb651eb7539 Issue #9348: Raise an early error if argparse nargs and metavar don't match. (Merge from 3.2.)
Steven Bethard <steven.bethard@gmail.com>
parents: 67921
diff changeset
4583
4bb651eb7539 Issue #9348: Raise an early error if argparse nargs and metavar don't match. (Merge from 3.2.)
Steven Bethard <steven.bethard@gmail.com>
parents: 67921
diff changeset
4584 def test_nargs_None_metavar_length1(self):
4bb651eb7539 Issue #9348: Raise an early error if argparse nargs and metavar don't match. (Merge from 3.2.)
Steven Bethard <steven.bethard@gmail.com>
parents: 67921
diff changeset
4585 self.do_test_no_exception(nargs=None, metavar=("1"))
4bb651eb7539 Issue #9348: Raise an early error if argparse nargs and metavar don't match. (Merge from 3.2.)
Steven Bethard <steven.bethard@gmail.com>
parents: 67921
diff changeset
4586
4bb651eb7539 Issue #9348: Raise an early error if argparse nargs and metavar don't match. (Merge from 3.2.)
Steven Bethard <steven.bethard@gmail.com>
parents: 67921
diff changeset
4587 def test_nargs_None_metavar_length2(self):
4bb651eb7539 Issue #9348: Raise an early error if argparse nargs and metavar don't match. (Merge from 3.2.)
Steven Bethard <steven.bethard@gmail.com>
parents: 67921
diff changeset
4588 self.do_test_exception(nargs=None, metavar=("1", "2"))
4bb651eb7539 Issue #9348: Raise an early error if argparse nargs and metavar don't match. (Merge from 3.2.)
Steven Bethard <steven.bethard@gmail.com>
parents: 67921
diff changeset
4589
4bb651eb7539 Issue #9348: Raise an early error if argparse nargs and metavar don't match. (Merge from 3.2.)
Steven Bethard <steven.bethard@gmail.com>
parents: 67921
diff changeset
4590 def test_nargs_None_metavar_length3(self):
4bb651eb7539 Issue #9348: Raise an early error if argparse nargs and metavar don't match. (Merge from 3.2.)
Steven Bethard <steven.bethard@gmail.com>
parents: 67921
diff changeset
4591 self.do_test_exception(nargs=None, metavar=("1", "2", "3"))
4bb651eb7539 Issue #9348: Raise an early error if argparse nargs and metavar don't match. (Merge from 3.2.)
Steven Bethard <steven.bethard@gmail.com>
parents: 67921
diff changeset
4592
4bb651eb7539 Issue #9348: Raise an early error if argparse nargs and metavar don't match. (Merge from 3.2.)
Steven Bethard <steven.bethard@gmail.com>
parents: 67921
diff changeset
4593 # Unit tests for different values of metavar when nargs=?
4bb651eb7539 Issue #9348: Raise an early error if argparse nargs and metavar don't match. (Merge from 3.2.)
Steven Bethard <steven.bethard@gmail.com>
parents: 67921
diff changeset
4594
4bb651eb7539 Issue #9348: Raise an early error if argparse nargs and metavar don't match. (Merge from 3.2.)
Steven Bethard <steven.bethard@gmail.com>
parents: 67921
diff changeset
4595 def test_nargs_optional_metavar_string(self):
4bb651eb7539 Issue #9348: Raise an early error if argparse nargs and metavar don't match. (Merge from 3.2.)
Steven Bethard <steven.bethard@gmail.com>
parents: 67921
diff changeset
4596 self.do_test_no_exception(nargs="?", metavar="1")
4bb651eb7539 Issue #9348: Raise an early error if argparse nargs and metavar don't match. (Merge from 3.2.)
Steven Bethard <steven.bethard@gmail.com>
parents: 67921
diff changeset
4597
4bb651eb7539 Issue #9348: Raise an early error if argparse nargs and metavar don't match. (Merge from 3.2.)
Steven Bethard <steven.bethard@gmail.com>
parents: 67921
diff changeset
4598 def test_nargs_optional_metavar_length0(self):
4bb651eb7539 Issue #9348: Raise an early error if argparse nargs and metavar don't match. (Merge from 3.2.)
Steven Bethard <steven.bethard@gmail.com>
parents: 67921
diff changeset
4599 self.do_test_exception(nargs="?", metavar=tuple())
4bb651eb7539 Issue #9348: Raise an early error if argparse nargs and metavar don't match. (Merge from 3.2.)
Steven Bethard <steven.bethard@gmail.com>
parents: 67921
diff changeset
4600
4bb651eb7539 Issue #9348: Raise an early error if argparse nargs and metavar don't match. (Merge from 3.2.)
Steven Bethard <steven.bethard@gmail.com>
parents: 67921
diff changeset
4601 def test_nargs_optional_metavar_length1(self):
4bb651eb7539 Issue #9348: Raise an early error if argparse nargs and metavar don't match. (Merge from 3.2.)
Steven Bethard <steven.bethard@gmail.com>
parents: 67921
diff changeset
4602 self.do_test_no_exception(nargs="?", metavar=("1"))
4bb651eb7539 Issue #9348: Raise an early error if argparse nargs and metavar don't match. (Merge from 3.2.)
Steven Bethard <steven.bethard@gmail.com>
parents: 67921
diff changeset
4603
4bb651eb7539 Issue #9348: Raise an early error if argparse nargs and metavar don't match. (Merge from 3.2.)
Steven Bethard <steven.bethard@gmail.com>
parents: 67921
diff changeset
4604 def test_nargs_optional_metavar_length2(self):
4bb651eb7539 Issue #9348: Raise an early error if argparse nargs and metavar don't match. (Merge from 3.2.)
Steven Bethard <steven.bethard@gmail.com>
parents: 67921
diff changeset
4605 self.do_test_exception(nargs="?", metavar=("1", "2"))
4bb651eb7539 Issue #9348: Raise an early error if argparse nargs and metavar don't match. (Merge from 3.2.)
Steven Bethard <steven.bethard@gmail.com>
parents: 67921
diff changeset
4606
4bb651eb7539 Issue #9348: Raise an early error if argparse nargs and metavar don't match. (Merge from 3.2.)
Steven Bethard <steven.bethard@gmail.com>
parents: 67921
diff changeset
4607 def test_nargs_optional_metavar_length3(self):
4bb651eb7539 Issue #9348: Raise an early error if argparse nargs and metavar don't match. (Merge from 3.2.)
Steven Bethard <steven.bethard@gmail.com>
parents: 67921
diff changeset
4608 self.do_test_exception(nargs="?", metavar=("1", "2", "3"))
4bb651eb7539 Issue #9348: Raise an early error if argparse nargs and metavar don't match. (Merge from 3.2.)
Steven Bethard <steven.bethard@gmail.com>
parents: 67921
diff changeset
4609
4bb651eb7539 Issue #9348: Raise an early error if argparse nargs and metavar don't match. (Merge from 3.2.)
Steven Bethard <steven.bethard@gmail.com>
parents: 67921
diff changeset
4610 # Unit tests for different values of metavar when nargs=*
4bb651eb7539 Issue #9348: Raise an early error if argparse nargs and metavar don't match. (Merge from 3.2.)
Steven Bethard <steven.bethard@gmail.com>
parents: 67921
diff changeset
4611
4bb651eb7539 Issue #9348: Raise an early error if argparse nargs and metavar don't match. (Merge from 3.2.)
Steven Bethard <steven.bethard@gmail.com>
parents: 67921
diff changeset
4612 def test_nargs_zeroormore_metavar_string(self):
4bb651eb7539 Issue #9348: Raise an early error if argparse nargs and metavar don't match. (Merge from 3.2.)
Steven Bethard <steven.bethard@gmail.com>
parents: 67921
diff changeset
4613 self.do_test_no_exception(nargs="*", metavar="1")
4bb651eb7539 Issue #9348: Raise an early error if argparse nargs and metavar don't match. (Merge from 3.2.)
Steven Bethard <steven.bethard@gmail.com>
parents: 67921
diff changeset
4614
4bb651eb7539 Issue #9348: Raise an early error if argparse nargs and metavar don't match. (Merge from 3.2.)
Steven Bethard <steven.bethard@gmail.com>
parents: 67921
diff changeset
4615 def test_nargs_zeroormore_metavar_length0(self):
4bb651eb7539 Issue #9348: Raise an early error if argparse nargs and metavar don't match. (Merge from 3.2.)
Steven Bethard <steven.bethard@gmail.com>
parents: 67921
diff changeset
4616 self.do_test_exception(nargs="*", metavar=tuple())
4bb651eb7539 Issue #9348: Raise an early error if argparse nargs and metavar don't match. (Merge from 3.2.)
Steven Bethard <steven.bethard@gmail.com>
parents: 67921
diff changeset
4617
4bb651eb7539 Issue #9348: Raise an early error if argparse nargs and metavar don't match. (Merge from 3.2.)
Steven Bethard <steven.bethard@gmail.com>
parents: 67921
diff changeset
4618 def test_nargs_zeroormore_metavar_length1(self):
4bb651eb7539 Issue #9348: Raise an early error if argparse nargs and metavar don't match. (Merge from 3.2.)
Steven Bethard <steven.bethard@gmail.com>
parents: 67921
diff changeset
4619 self.do_test_no_exception(nargs="*", metavar=("1"))
4bb651eb7539 Issue #9348: Raise an early error if argparse nargs and metavar don't match. (Merge from 3.2.)
Steven Bethard <steven.bethard@gmail.com>
parents: 67921
diff changeset
4620
4bb651eb7539 Issue #9348: Raise an early error if argparse nargs and metavar don't match. (Merge from 3.2.)
Steven Bethard <steven.bethard@gmail.com>
parents: 67921
diff changeset
4621 def test_nargs_zeroormore_metavar_length2(self):
4bb651eb7539 Issue #9348: Raise an early error if argparse nargs and metavar don't match. (Merge from 3.2.)
Steven Bethard <steven.bethard@gmail.com>
parents: 67921
diff changeset
4622 self.do_test_no_exception(nargs="*", metavar=("1", "2"))
4bb651eb7539 Issue #9348: Raise an early error if argparse nargs and metavar don't match. (Merge from 3.2.)
Steven Bethard <steven.bethard@gmail.com>
parents: 67921
diff changeset
4623
4bb651eb7539 Issue #9348: Raise an early error if argparse nargs and metavar don't match. (Merge from 3.2.)
Steven Bethard <steven.bethard@gmail.com>
parents: 67921
diff changeset
4624 def test_nargs_zeroormore_metavar_length3(self):
4bb651eb7539 Issue #9348: Raise an early error if argparse nargs and metavar don't match. (Merge from 3.2.)
Steven Bethard <steven.bethard@gmail.com>
parents: 67921
diff changeset
4625 self.do_test_exception(nargs="*", metavar=("1", "2", "3"))
4bb651eb7539 Issue #9348: Raise an early error if argparse nargs and metavar don't match. (Merge from 3.2.)
Steven Bethard <steven.bethard@gmail.com>
parents: 67921
diff changeset
4626
4bb651eb7539 Issue #9348: Raise an early error if argparse nargs and metavar don't match. (Merge from 3.2.)
Steven Bethard <steven.bethard@gmail.com>
parents: 67921
diff changeset
4627 # Unit tests for different values of metavar when nargs=+
4bb651eb7539 Issue #9348: Raise an early error if argparse nargs and metavar don't match. (Merge from 3.2.)
Steven Bethard <steven.bethard@gmail.com>
parents: 67921
diff changeset
4628
4bb651eb7539 Issue #9348: Raise an early error if argparse nargs and metavar don't match. (Merge from 3.2.)
Steven Bethard <steven.bethard@gmail.com>
parents: 67921
diff changeset
4629 def test_nargs_oneormore_metavar_string(self):
4bb651eb7539 Issue #9348: Raise an early error if argparse nargs and metavar don't match. (Merge from 3.2.)
Steven Bethard <steven.bethard@gmail.com>
parents: 67921
diff changeset
4630 self.do_test_no_exception(nargs="+", metavar="1")
4bb651eb7539 Issue #9348: Raise an early error if argparse nargs and metavar don't match. (Merge from 3.2.)
Steven Bethard <steven.bethard@gmail.com>
parents: 67921
diff changeset
4631
4bb651eb7539 Issue #9348: Raise an early error if argparse nargs and metavar don't match. (Merge from 3.2.)
Steven Bethard <steven.bethard@gmail.com>
parents: 67921
diff changeset
4632 def test_nargs_oneormore_metavar_length0(self):
4bb651eb7539 Issue #9348: Raise an early error if argparse nargs and metavar don't match. (Merge from 3.2.)
Steven Bethard <steven.bethard@gmail.com>
parents: 67921
diff changeset
4633 self.do_test_exception(nargs="+", metavar=tuple())
4bb651eb7539 Issue #9348: Raise an early error if argparse nargs and metavar don't match. (Merge from 3.2.)
Steven Bethard <steven.bethard@gmail.com>
parents: 67921
diff changeset
4634
4bb651eb7539 Issue #9348: Raise an early error if argparse nargs and metavar don't match. (Merge from 3.2.)
Steven Bethard <steven.bethard@gmail.com>
parents: 67921
diff changeset
4635 def test_nargs_oneormore_metavar_length1(self):
4bb651eb7539 Issue #9348: Raise an early error if argparse nargs and metavar don't match. (Merge from 3.2.)
Steven Bethard <steven.bethard@gmail.com>
parents: 67921
diff changeset
4636 self.do_test_no_exception(nargs="+", metavar=("1"))
4bb651eb7539 Issue #9348: Raise an early error if argparse nargs and metavar don't match. (Merge from 3.2.)
Steven Bethard <steven.bethard@gmail.com>
parents: 67921
diff changeset
4637
4bb651eb7539 Issue #9348: Raise an early error if argparse nargs and metavar don't match. (Merge from 3.2.)
Steven Bethard <steven.bethard@gmail.com>
parents: 67921
diff changeset
4638 def test_nargs_oneormore_metavar_length2(self):
4bb651eb7539 Issue #9348: Raise an early error if argparse nargs and metavar don't match. (Merge from 3.2.)
Steven Bethard <steven.bethard@gmail.com>
parents: 67921
diff changeset
4639 self.do_test_no_exception(nargs="+", metavar=("1", "2"))
4bb651eb7539 Issue #9348: Raise an early error if argparse nargs and metavar don't match. (Merge from 3.2.)
Steven Bethard <steven.bethard@gmail.com>
parents: 67921
diff changeset
4640
4bb651eb7539 Issue #9348: Raise an early error if argparse nargs and metavar don't match. (Merge from 3.2.)
Steven Bethard <steven.bethard@gmail.com>
parents: 67921
diff changeset
4641 def test_nargs_oneormore_metavar_length3(self):
4bb651eb7539 Issue #9348: Raise an early error if argparse nargs and metavar don't match. (Merge from 3.2.)
Steven Bethard <steven.bethard@gmail.com>
parents: 67921
diff changeset
4642 self.do_test_exception(nargs="+", metavar=("1", "2", "3"))
4bb651eb7539 Issue #9348: Raise an early error if argparse nargs and metavar don't match. (Merge from 3.2.)
Steven Bethard <steven.bethard@gmail.com>
parents: 67921
diff changeset
4643
4bb651eb7539 Issue #9348: Raise an early error if argparse nargs and metavar don't match. (Merge from 3.2.)
Steven Bethard <steven.bethard@gmail.com>
parents: 67921
diff changeset
4644 # Unit tests for different values of metavar when nargs=...
4bb651eb7539 Issue #9348: Raise an early error if argparse nargs and metavar don't match. (Merge from 3.2.)
Steven Bethard <steven.bethard@gmail.com>
parents: 67921
diff changeset
4645
4bb651eb7539 Issue #9348: Raise an early error if argparse nargs and metavar don't match. (Merge from 3.2.)
Steven Bethard <steven.bethard@gmail.com>
parents: 67921
diff changeset
4646 def test_nargs_remainder_metavar_string(self):
4bb651eb7539 Issue #9348: Raise an early error if argparse nargs and metavar don't match. (Merge from 3.2.)
Steven Bethard <steven.bethard@gmail.com>
parents: 67921
diff changeset
4647 self.do_test_no_exception(nargs="...", metavar="1")
4bb651eb7539 Issue #9348: Raise an early error if argparse nargs and metavar don't match. (Merge from 3.2.)
Steven Bethard <steven.bethard@gmail.com>
parents: 67921
diff changeset
4648
4bb651eb7539 Issue #9348: Raise an early error if argparse nargs and metavar don't match. (Merge from 3.2.)
Steven Bethard <steven.bethard@gmail.com>
parents: 67921
diff changeset
4649 def test_nargs_remainder_metavar_length0(self):
4bb651eb7539 Issue #9348: Raise an early error if argparse nargs and metavar don't match. (Merge from 3.2.)
Steven Bethard <steven.bethard@gmail.com>
parents: 67921
diff changeset
4650 self.do_test_no_exception(nargs="...", metavar=tuple())
4bb651eb7539 Issue #9348: Raise an early error if argparse nargs and metavar don't match. (Merge from 3.2.)
Steven Bethard <steven.bethard@gmail.com>
parents: 67921
diff changeset
4651
4bb651eb7539 Issue #9348: Raise an early error if argparse nargs and metavar don't match. (Merge from 3.2.)
Steven Bethard <steven.bethard@gmail.com>
parents: 67921
diff changeset
4652 def test_nargs_remainder_metavar_length1(self):
4bb651eb7539 Issue #9348: Raise an early error if argparse nargs and metavar don't match. (Merge from 3.2.)
Steven Bethard <steven.bethard@gmail.com>
parents: 67921
diff changeset
4653 self.do_test_no_exception(nargs="...", metavar=("1"))
4bb651eb7539 Issue #9348: Raise an early error if argparse nargs and metavar don't match. (Merge from 3.2.)
Steven Bethard <steven.bethard@gmail.com>
parents: 67921
diff changeset
4654
4bb651eb7539 Issue #9348: Raise an early error if argparse nargs and metavar don't match. (Merge from 3.2.)
Steven Bethard <steven.bethard@gmail.com>
parents: 67921
diff changeset
4655 def test_nargs_remainder_metavar_length2(self):
4bb651eb7539 Issue #9348: Raise an early error if argparse nargs and metavar don't match. (Merge from 3.2.)
Steven Bethard <steven.bethard@gmail.com>
parents: 67921
diff changeset
4656 self.do_test_no_exception(nargs="...", metavar=("1", "2"))
4bb651eb7539 Issue #9348: Raise an early error if argparse nargs and metavar don't match. (Merge from 3.2.)
Steven Bethard <steven.bethard@gmail.com>
parents: 67921
diff changeset
4657
4bb651eb7539 Issue #9348: Raise an early error if argparse nargs and metavar don't match. (Merge from 3.2.)
Steven Bethard <steven.bethard@gmail.com>
parents: 67921
diff changeset
4658 def test_nargs_remainder_metavar_length3(self):
4bb651eb7539 Issue #9348: Raise an early error if argparse nargs and metavar don't match. (Merge from 3.2.)
Steven Bethard <steven.bethard@gmail.com>
parents: 67921
diff changeset
4659 self.do_test_no_exception(nargs="...", metavar=("1", "2", "3"))
4bb651eb7539 Issue #9348: Raise an early error if argparse nargs and metavar don't match. (Merge from 3.2.)
Steven Bethard <steven.bethard@gmail.com>
parents: 67921
diff changeset
4660
4bb651eb7539 Issue #9348: Raise an early error if argparse nargs and metavar don't match. (Merge from 3.2.)
Steven Bethard <steven.bethard@gmail.com>
parents: 67921
diff changeset
4661 # Unit tests for different values of metavar when nargs=A...
4bb651eb7539 Issue #9348: Raise an early error if argparse nargs and metavar don't match. (Merge from 3.2.)
Steven Bethard <steven.bethard@gmail.com>
parents: 67921
diff changeset
4662
4bb651eb7539 Issue #9348: Raise an early error if argparse nargs and metavar don't match. (Merge from 3.2.)
Steven Bethard <steven.bethard@gmail.com>
parents: 67921
diff changeset
4663 def test_nargs_parser_metavar_string(self):
4bb651eb7539 Issue #9348: Raise an early error if argparse nargs and metavar don't match. (Merge from 3.2.)
Steven Bethard <steven.bethard@gmail.com>
parents: 67921
diff changeset
4664 self.do_test_no_exception(nargs="A...", metavar="1")
4bb651eb7539 Issue #9348: Raise an early error if argparse nargs and metavar don't match. (Merge from 3.2.)
Steven Bethard <steven.bethard@gmail.com>
parents: 67921
diff changeset
4665
4bb651eb7539 Issue #9348: Raise an early error if argparse nargs and metavar don't match. (Merge from 3.2.)
Steven Bethard <steven.bethard@gmail.com>
parents: 67921
diff changeset
4666 def test_nargs_parser_metavar_length0(self):
4bb651eb7539 Issue #9348: Raise an early error if argparse nargs and metavar don't match. (Merge from 3.2.)
Steven Bethard <steven.bethard@gmail.com>
parents: 67921
diff changeset
4667 self.do_test_exception(nargs="A...", metavar=tuple())
4bb651eb7539 Issue #9348: Raise an early error if argparse nargs and metavar don't match. (Merge from 3.2.)
Steven Bethard <steven.bethard@gmail.com>
parents: 67921
diff changeset
4668
4bb651eb7539 Issue #9348: Raise an early error if argparse nargs and metavar don't match. (Merge from 3.2.)
Steven Bethard <steven.bethard@gmail.com>
parents: 67921
diff changeset
4669 def test_nargs_parser_metavar_length1(self):
4bb651eb7539 Issue #9348: Raise an early error if argparse nargs and metavar don't match. (Merge from 3.2.)
Steven Bethard <steven.bethard@gmail.com>
parents: 67921
diff changeset
4670 self.do_test_no_exception(nargs="A...", metavar=("1"))
4bb651eb7539 Issue #9348: Raise an early error if argparse nargs and metavar don't match. (Merge from 3.2.)
Steven Bethard <steven.bethard@gmail.com>
parents: 67921
diff changeset
4671
4bb651eb7539 Issue #9348: Raise an early error if argparse nargs and metavar don't match. (Merge from 3.2.)
Steven Bethard <steven.bethard@gmail.com>
parents: 67921
diff changeset
4672 def test_nargs_parser_metavar_length2(self):
4bb651eb7539 Issue #9348: Raise an early error if argparse nargs and metavar don't match. (Merge from 3.2.)
Steven Bethard <steven.bethard@gmail.com>
parents: 67921
diff changeset
4673 self.do_test_exception(nargs="A...", metavar=("1", "2"))
4bb651eb7539 Issue #9348: Raise an early error if argparse nargs and metavar don't match. (Merge from 3.2.)
Steven Bethard <steven.bethard@gmail.com>
parents: 67921
diff changeset
4674
4bb651eb7539 Issue #9348: Raise an early error if argparse nargs and metavar don't match. (Merge from 3.2.)
Steven Bethard <steven.bethard@gmail.com>
parents: 67921
diff changeset
4675 def test_nargs_parser_metavar_length3(self):
4bb651eb7539 Issue #9348: Raise an early error if argparse nargs and metavar don't match. (Merge from 3.2.)
Steven Bethard <steven.bethard@gmail.com>
parents: 67921
diff changeset
4676 self.do_test_exception(nargs="A...", metavar=("1", "2", "3"))
4bb651eb7539 Issue #9348: Raise an early error if argparse nargs and metavar don't match. (Merge from 3.2.)
Steven Bethard <steven.bethard@gmail.com>
parents: 67921
diff changeset
4677
4bb651eb7539 Issue #9348: Raise an early error if argparse nargs and metavar don't match. (Merge from 3.2.)
Steven Bethard <steven.bethard@gmail.com>
parents: 67921
diff changeset
4678 # Unit tests for different values of metavar when nargs=1
4bb651eb7539 Issue #9348: Raise an early error if argparse nargs and metavar don't match. (Merge from 3.2.)
Steven Bethard <steven.bethard@gmail.com>
parents: 67921
diff changeset
4679
4bb651eb7539 Issue #9348: Raise an early error if argparse nargs and metavar don't match. (Merge from 3.2.)
Steven Bethard <steven.bethard@gmail.com>
parents: 67921
diff changeset
4680 def test_nargs_1_metavar_string(self):
4bb651eb7539 Issue #9348: Raise an early error if argparse nargs and metavar don't match. (Merge from 3.2.)
Steven Bethard <steven.bethard@gmail.com>
parents: 67921
diff changeset
4681 self.do_test_no_exception(nargs=1, metavar="1")
4bb651eb7539 Issue #9348: Raise an early error if argparse nargs and metavar don't match. (Merge from 3.2.)
Steven Bethard <steven.bethard@gmail.com>
parents: 67921
diff changeset
4682
4bb651eb7539 Issue #9348: Raise an early error if argparse nargs and metavar don't match. (Merge from 3.2.)
Steven Bethard <steven.bethard@gmail.com>
parents: 67921
diff changeset
4683 def test_nargs_1_metavar_length0(self):
4bb651eb7539 Issue #9348: Raise an early error if argparse nargs and metavar don't match. (Merge from 3.2.)
Steven Bethard <steven.bethard@gmail.com>
parents: 67921
diff changeset
4684 self.do_test_exception(nargs=1, metavar=tuple())
4bb651eb7539 Issue #9348: Raise an early error if argparse nargs and metavar don't match. (Merge from 3.2.)
Steven Bethard <steven.bethard@gmail.com>
parents: 67921
diff changeset
4685
4bb651eb7539 Issue #9348: Raise an early error if argparse nargs and metavar don't match. (Merge from 3.2.)
Steven Bethard <steven.bethard@gmail.com>
parents: 67921
diff changeset
4686 def test_nargs_1_metavar_length1(self):
4bb651eb7539 Issue #9348: Raise an early error if argparse nargs and metavar don't match. (Merge from 3.2.)
Steven Bethard <steven.bethard@gmail.com>
parents: 67921
diff changeset
4687 self.do_test_no_exception(nargs=1, metavar=("1"))
4bb651eb7539 Issue #9348: Raise an early error if argparse nargs and metavar don't match. (Merge from 3.2.)
Steven Bethard <steven.bethard@gmail.com>
parents: 67921
diff changeset
4688
4bb651eb7539 Issue #9348: Raise an early error if argparse nargs and metavar don't match. (Merge from 3.2.)
Steven Bethard <steven.bethard@gmail.com>
parents: 67921
diff changeset
4689 def test_nargs_1_metavar_length2(self):
4bb651eb7539 Issue #9348: Raise an early error if argparse nargs and metavar don't match. (Merge from 3.2.)
Steven Bethard <steven.bethard@gmail.com>
parents: 67921
diff changeset
4690 self.do_test_exception(nargs=1, metavar=("1", "2"))
4bb651eb7539 Issue #9348: Raise an early error if argparse nargs and metavar don't match. (Merge from 3.2.)
Steven Bethard <steven.bethard@gmail.com>
parents: 67921
diff changeset
4691
4bb651eb7539 Issue #9348: Raise an early error if argparse nargs and metavar don't match. (Merge from 3.2.)
Steven Bethard <steven.bethard@gmail.com>
parents: 67921
diff changeset
4692 def test_nargs_1_metavar_length3(self):
4bb651eb7539 Issue #9348: Raise an early error if argparse nargs and metavar don't match. (Merge from 3.2.)
Steven Bethard <steven.bethard@gmail.com>
parents: 67921
diff changeset
4693 self.do_test_exception(nargs=1, metavar=("1", "2", "3"))
4bb651eb7539 Issue #9348: Raise an early error if argparse nargs and metavar don't match. (Merge from 3.2.)
Steven Bethard <steven.bethard@gmail.com>
parents: 67921
diff changeset
4694
4bb651eb7539 Issue #9348: Raise an early error if argparse nargs and metavar don't match. (Merge from 3.2.)
Steven Bethard <steven.bethard@gmail.com>
parents: 67921
diff changeset
4695 # Unit tests for different values of metavar when nargs=2
4bb651eb7539 Issue #9348: Raise an early error if argparse nargs and metavar don't match. (Merge from 3.2.)
Steven Bethard <steven.bethard@gmail.com>
parents: 67921
diff changeset
4696
4bb651eb7539 Issue #9348: Raise an early error if argparse nargs and metavar don't match. (Merge from 3.2.)
Steven Bethard <steven.bethard@gmail.com>
parents: 67921
diff changeset
4697 def test_nargs_2_metavar_string(self):
4bb651eb7539 Issue #9348: Raise an early error if argparse nargs and metavar don't match. (Merge from 3.2.)
Steven Bethard <steven.bethard@gmail.com>
parents: 67921
diff changeset
4698 self.do_test_no_exception(nargs=2, metavar="1")
4bb651eb7539 Issue #9348: Raise an early error if argparse nargs and metavar don't match. (Merge from 3.2.)
Steven Bethard <steven.bethard@gmail.com>
parents: 67921
diff changeset
4699
4bb651eb7539 Issue #9348: Raise an early error if argparse nargs and metavar don't match. (Merge from 3.2.)
Steven Bethard <steven.bethard@gmail.com>
parents: 67921
diff changeset
4700 def test_nargs_2_metavar_length0(self):
4bb651eb7539 Issue #9348: Raise an early error if argparse nargs and metavar don't match. (Merge from 3.2.)
Steven Bethard <steven.bethard@gmail.com>
parents: 67921
diff changeset
4701 self.do_test_exception(nargs=2, metavar=tuple())
4bb651eb7539 Issue #9348: Raise an early error if argparse nargs and metavar don't match. (Merge from 3.2.)
Steven Bethard <steven.bethard@gmail.com>
parents: 67921
diff changeset
4702
4bb651eb7539 Issue #9348: Raise an early error if argparse nargs and metavar don't match. (Merge from 3.2.)
Steven Bethard <steven.bethard@gmail.com>
parents: 67921
diff changeset
4703 def test_nargs_2_metavar_length1(self):
4bb651eb7539 Issue #9348: Raise an early error if argparse nargs and metavar don't match. (Merge from 3.2.)
Steven Bethard <steven.bethard@gmail.com>
parents: 67921
diff changeset
4704 self.do_test_no_exception(nargs=2, metavar=("1"))
4bb651eb7539 Issue #9348: Raise an early error if argparse nargs and metavar don't match. (Merge from 3.2.)
Steven Bethard <steven.bethard@gmail.com>
parents: 67921
diff changeset
4705
4bb651eb7539 Issue #9348: Raise an early error if argparse nargs and metavar don't match. (Merge from 3.2.)
Steven Bethard <steven.bethard@gmail.com>
parents: 67921
diff changeset
4706 def test_nargs_2_metavar_length2(self):
4bb651eb7539 Issue #9348: Raise an early error if argparse nargs and metavar don't match. (Merge from 3.2.)
Steven Bethard <steven.bethard@gmail.com>
parents: 67921
diff changeset
4707 self.do_test_no_exception(nargs=2, metavar=("1", "2"))
4bb651eb7539 Issue #9348: Raise an early error if argparse nargs and metavar don't match. (Merge from 3.2.)
Steven Bethard <steven.bethard@gmail.com>
parents: 67921
diff changeset
4708
4bb651eb7539 Issue #9348: Raise an early error if argparse nargs and metavar don't match. (Merge from 3.2.)
Steven Bethard <steven.bethard@gmail.com>
parents: 67921
diff changeset
4709 def test_nargs_2_metavar_length3(self):
4bb651eb7539 Issue #9348: Raise an early error if argparse nargs and metavar don't match. (Merge from 3.2.)
Steven Bethard <steven.bethard@gmail.com>
parents: 67921
diff changeset
4710 self.do_test_exception(nargs=2, metavar=("1", "2", "3"))
4bb651eb7539 Issue #9348: Raise an early error if argparse nargs and metavar don't match. (Merge from 3.2.)
Steven Bethard <steven.bethard@gmail.com>
parents: 67921
diff changeset
4711
4bb651eb7539 Issue #9348: Raise an early error if argparse nargs and metavar don't match. (Merge from 3.2.)
Steven Bethard <steven.bethard@gmail.com>
parents: 67921
diff changeset
4712 # Unit tests for different values of metavar when nargs=3
4bb651eb7539 Issue #9348: Raise an early error if argparse nargs and metavar don't match. (Merge from 3.2.)
Steven Bethard <steven.bethard@gmail.com>
parents: 67921
diff changeset
4713
4bb651eb7539 Issue #9348: Raise an early error if argparse nargs and metavar don't match. (Merge from 3.2.)
Steven Bethard <steven.bethard@gmail.com>
parents: 67921
diff changeset
4714 def test_nargs_3_metavar_string(self):
4bb651eb7539 Issue #9348: Raise an early error if argparse nargs and metavar don't match. (Merge from 3.2.)
Steven Bethard <steven.bethard@gmail.com>
parents: 67921
diff changeset
4715 self.do_test_no_exception(nargs=3, metavar="1")
4bb651eb7539 Issue #9348: Raise an early error if argparse nargs and metavar don't match. (Merge from 3.2.)
Steven Bethard <steven.bethard@gmail.com>
parents: 67921
diff changeset
4716
4bb651eb7539 Issue #9348: Raise an early error if argparse nargs and metavar don't match. (Merge from 3.2.)
Steven Bethard <steven.bethard@gmail.com>
parents: 67921
diff changeset
4717 def test_nargs_3_metavar_length0(self):
4bb651eb7539 Issue #9348: Raise an early error if argparse nargs and metavar don't match. (Merge from 3.2.)
Steven Bethard <steven.bethard@gmail.com>
parents: 67921
diff changeset
4718 self.do_test_exception(nargs=3, metavar=tuple())
4bb651eb7539 Issue #9348: Raise an early error if argparse nargs and metavar don't match. (Merge from 3.2.)
Steven Bethard <steven.bethard@gmail.com>
parents: 67921
diff changeset
4719
4bb651eb7539 Issue #9348: Raise an early error if argparse nargs and metavar don't match. (Merge from 3.2.)
Steven Bethard <steven.bethard@gmail.com>
parents: 67921
diff changeset
4720 def test_nargs_3_metavar_length1(self):
4bb651eb7539 Issue #9348: Raise an early error if argparse nargs and metavar don't match. (Merge from 3.2.)
Steven Bethard <steven.bethard@gmail.com>
parents: 67921
diff changeset
4721 self.do_test_no_exception(nargs=3, metavar=("1"))
4bb651eb7539 Issue #9348: Raise an early error if argparse nargs and metavar don't match. (Merge from 3.2.)
Steven Bethard <steven.bethard@gmail.com>
parents: 67921
diff changeset
4722
4bb651eb7539 Issue #9348: Raise an early error if argparse nargs and metavar don't match. (Merge from 3.2.)
Steven Bethard <steven.bethard@gmail.com>
parents: 67921
diff changeset
4723 def test_nargs_3_metavar_length2(self):
4bb651eb7539 Issue #9348: Raise an early error if argparse nargs and metavar don't match. (Merge from 3.2.)
Steven Bethard <steven.bethard@gmail.com>
parents: 67921
diff changeset
4724 self.do_test_exception(nargs=3, metavar=("1", "2"))
4bb651eb7539 Issue #9348: Raise an early error if argparse nargs and metavar don't match. (Merge from 3.2.)
Steven Bethard <steven.bethard@gmail.com>
parents: 67921
diff changeset
4725
4bb651eb7539 Issue #9348: Raise an early error if argparse nargs and metavar don't match. (Merge from 3.2.)
Steven Bethard <steven.bethard@gmail.com>
parents: 67921
diff changeset
4726 def test_nargs_3_metavar_length3(self):
4bb651eb7539 Issue #9348: Raise an early error if argparse nargs and metavar don't match. (Merge from 3.2.)
Steven Bethard <steven.bethard@gmail.com>
parents: 67921
diff changeset
4727 self.do_test_no_exception(nargs=3, metavar=("1", "2", "3"))
4bb651eb7539 Issue #9348: Raise an early error if argparse nargs and metavar don't match. (Merge from 3.2.)
Steven Bethard <steven.bethard@gmail.com>
parents: 67921
diff changeset
4728
59267
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
4729 # ============================
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
4730 # from argparse import * tests
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
4731 # ============================
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
4732
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
4733 class TestImportStar(TestCase):
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
4734
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
4735 def test(self):
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
4736 for name in argparse.__all__:
59273
83e7ee185162 convert deprecated fail* methods to assert* variants
Benjamin Peterson <benjamin@python.org>
parents: 59272
diff changeset
4737 self.assertTrue(hasattr(argparse, name))
59267
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
4738
65864
493a2d407c94 Merged revisions 86086 via svnmerge from
Steven Bethard <steven.bethard@gmail.com>
parents: 65860
diff changeset
4739 def test_all_exports_everything_but_modules(self):
493a2d407c94 Merged revisions 86086 via svnmerge from
Steven Bethard <steven.bethard@gmail.com>
parents: 65860
diff changeset
4740 items = [
493a2d407c94 Merged revisions 86086 via svnmerge from
Steven Bethard <steven.bethard@gmail.com>
parents: 65860
diff changeset
4741 name
493a2d407c94 Merged revisions 86086 via svnmerge from
Steven Bethard <steven.bethard@gmail.com>
parents: 65860
diff changeset
4742 for name, value in vars(argparse).items()
493a2d407c94 Merged revisions 86086 via svnmerge from
Steven Bethard <steven.bethard@gmail.com>
parents: 65860
diff changeset
4743 if not name.startswith("_")
493a2d407c94 Merged revisions 86086 via svnmerge from
Steven Bethard <steven.bethard@gmail.com>
parents: 65860
diff changeset
4744 if not inspect.ismodule(value)
493a2d407c94 Merged revisions 86086 via svnmerge from
Steven Bethard <steven.bethard@gmail.com>
parents: 65860
diff changeset
4745 ]
493a2d407c94 Merged revisions 86086 via svnmerge from
Steven Bethard <steven.bethard@gmail.com>
parents: 65860
diff changeset
4746 self.assertEqual(sorted(items), sorted(argparse.__all__))
493a2d407c94 Merged revisions 86086 via svnmerge from
Steven Bethard <steven.bethard@gmail.com>
parents: 65860
diff changeset
4747
59270
82eda345a5f6 enable running of argparse tests and fix two that failed in the new environment
Benjamin Peterson <benjamin@python.org>
parents: 59268
diff changeset
4748 def test_main():
60116
3748bca4d869 Replace catch_warnings with check_warnings when it makes sense. Use assertRaises context manager to simplify some tests.
Florent Xicluna <florent.xicluna@gmail.com>
parents: 59989
diff changeset
4749 # silence warnings about version argument - these are expected
3748bca4d869 Replace catch_warnings with check_warnings when it makes sense. Use assertRaises context manager to simplify some tests.
Florent Xicluna <florent.xicluna@gmail.com>
parents: 59989
diff changeset
4750 with test_support.check_warnings(
3748bca4d869 Replace catch_warnings with check_warnings when it makes sense. Use assertRaises context manager to simplify some tests.
Florent Xicluna <florent.xicluna@gmail.com>
parents: 59989
diff changeset
4751 ('The "version" argument to ArgumentParser is deprecated.',
3748bca4d869 Replace catch_warnings with check_warnings when it makes sense. Use assertRaises context manager to simplify some tests.
Florent Xicluna <florent.xicluna@gmail.com>
parents: 59989
diff changeset
4752 DeprecationWarning),
3748bca4d869 Replace catch_warnings with check_warnings when it makes sense. Use assertRaises context manager to simplify some tests.
Florent Xicluna <florent.xicluna@gmail.com>
parents: 59989
diff changeset
4753 ('The (format|print)_version method is deprecated',
3748bca4d869 Replace catch_warnings with check_warnings when it makes sense. Use assertRaises context manager to simplify some tests.
Florent Xicluna <florent.xicluna@gmail.com>
parents: 59989
diff changeset
4754 DeprecationWarning)):
59271
4b7b6953cd06 prevent warning filter adjustment from altering other tests
Benjamin Peterson <benjamin@python.org>
parents: 59270
diff changeset
4755 test_support.run_unittest(__name__)
59284
f5411125245e plug ref leaks
Benjamin Peterson <benjamin@python.org>
parents: 59281
diff changeset
4756 # Remove global references to avoid looking like we have refleaks.
f5411125245e plug ref leaks
Benjamin Peterson <benjamin@python.org>
parents: 59281
diff changeset
4757 RFile.seen = {}
f5411125245e plug ref leaks
Benjamin Peterson <benjamin@python.org>
parents: 59281
diff changeset
4758 WFile.seen = set()
f5411125245e plug ref leaks
Benjamin Peterson <benjamin@python.org>
parents: 59281
diff changeset
4759
59270
82eda345a5f6 enable running of argparse tests and fix two that failed in the new environment
Benjamin Peterson <benjamin@python.org>
parents: 59268
diff changeset
4760
59267
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
4761
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
4762 if __name__ == '__main__':
59272
137a21fcd385 use test_main() in __main__ section
Benjamin Peterson <benjamin@python.org>
parents: 59271
diff changeset
4763 test_main()