annotate Lib/test/test_argparse.py @ 65035:87f4b32905df 2.7

Cosmetic fix to use print function.
author Hirokazu Yamamoto <ocean-city@m2.ccsnet.ne.jp>
date Fri, 01 Oct 2010 10:48:47 +0000
parents 23c089dc5cff
children 4269267e6e57
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
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
4 import os
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
5 import shutil
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
6 import sys
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
7 import textwrap
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
8 import tempfile
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
9 import unittest
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
10 import argparse
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
11
59281
eba942e77895 remove cross-version compatibility code
Benjamin Peterson <benjamin@python.org>
parents: 59280
diff changeset
12 from StringIO import StringIO
eba942e77895 remove cross-version compatibility code
Benjamin Peterson <benjamin@python.org>
parents: 59280
diff changeset
13
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
14 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
15 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
16
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
17 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
18
59267
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
19 class TestCase(unittest.TestCase):
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
20
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
21 def assertEqual(self, obj1, obj2):
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
22 if obj1 != obj2:
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
23 print('')
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
24 print(repr(obj1))
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
25 print(repr(obj2))
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
26 print(obj1)
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
27 print(obj2)
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
28 super(TestCase, self).assertEqual(obj1, obj2)
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
29
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
30
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
31
59267
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
32 class TempDirMixin(object):
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
33
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
34 def setUp(self):
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
35 self.temp_dir = tempfile.mkdtemp()
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
36 self.old_dir = os.getcwd()
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
37 os.chdir(self.temp_dir)
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
38
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
39 def tearDown(self):
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
40 os.chdir(self.old_dir)
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
41 while True:
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
42 try:
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
43 shutil.rmtree(self.temp_dir)
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
44 except WindowsError:
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
45 continue
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
46 else:
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
47 break
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
48
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
49
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
50 class Sig(object):
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
51
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
52 def __init__(self, *args, **kwargs):
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
53 self.args = args
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
54 self.kwargs = kwargs
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
55
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
56
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
57 class NS(object):
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
58
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
59 def __init__(self, **kwargs):
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
60 self.__dict__.update(kwargs)
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
61
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
62 def __repr__(self):
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
63 sorted_items = sorted(self.__dict__.items())
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
64 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
65 return '%s(%s)' % (type(self).__name__, kwarg_str)
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
66
59423
0802bc973b32 eliminate py3k warnings in argparse
Benjamin Peterson <benjamin@python.org>
parents: 59284
diff changeset
67 __hash__ = None
0802bc973b32 eliminate py3k warnings in argparse
Benjamin Peterson <benjamin@python.org>
parents: 59284
diff changeset
68
59267
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
69 def __eq__(self, other):
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
70 return vars(self) == vars(other)
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
71
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
72 def __ne__(self, other):
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
73 return not (self == other)
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
74
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
75
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
76 class ArgumentParserError(Exception):
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
77
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
78 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
79 Exception.__init__(self, message, stdout, stderr)
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
80 self.message = message
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
81 self.stdout = stdout
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
82 self.stderr = stderr
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
83 self.error_code = error_code
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
84
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 stderr_to_parser_error(parse_args, *args, **kwargs):
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
87 # 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
88 # redirected, simply call the function and let the enclosing function
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
89 # 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
90 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
91 return parse_args(*args, **kwargs)
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 # if this is not being called recursively, redirect stderr and
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
94 # use it as the ArgumentParserError message
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
95 old_stdout = sys.stdout
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
96 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
97 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
98 sys.stderr = StdIOBuffer()
59267
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
99 try:
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
100 try:
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
101 result = parse_args(*args, **kwargs)
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
102 for key in list(vars(result)):
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
103 if getattr(result, key) is sys.stdout:
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
104 setattr(result, key, old_stdout)
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
105 if getattr(result, key) is sys.stderr:
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
106 setattr(result, key, old_stderr)
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
107 return result
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
108 except SystemExit:
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
109 code = sys.exc_info()[1].code
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
110 stdout = sys.stdout.getvalue()
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
111 stderr = sys.stderr.getvalue()
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
112 raise ArgumentParserError("SystemExit", stdout, stderr, code)
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
113 finally:
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
114 sys.stdout = old_stdout
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
115 sys.stderr = old_stderr
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
116
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
117
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
118 class ErrorRaisingArgumentParser(argparse.ArgumentParser):
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
119
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
120 def parse_args(self, *args, **kwargs):
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
121 parse_args = super(ErrorRaisingArgumentParser, self).parse_args
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
122 return stderr_to_parser_error(parse_args, *args, **kwargs)
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
123
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
124 def exit(self, *args, **kwargs):
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
125 exit = super(ErrorRaisingArgumentParser, self).exit
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
126 return stderr_to_parser_error(exit, *args, **kwargs)
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 error(self, *args, **kwargs):
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
129 error = super(ErrorRaisingArgumentParser, self).error
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
130 return stderr_to_parser_error(error, *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
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
133 class ParserTesterMetaclass(type):
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
134 """Adds parser tests using the class attributes.
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 Classes of this type should specify the following attributes:
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
137
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
138 argument_signatures -- a list of Sig objects which specify
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
139 the signatures of Argument objects to be created
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
140 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
141 to fail
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
142 successes -- a list of (initial_args, options, remaining_args) tuples
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
143 where initial_args specifies the string args to be parsed,
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
144 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
145 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
146 remaining unparsed arguments
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
147 """
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
148
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
149 def __init__(cls, name, bases, bodydict):
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
150 if name == 'ParserTestCase':
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
151 return
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
152
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
153 # default parser signature is empty
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
154 if not hasattr(cls, 'parser_signature'):
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
155 cls.parser_signature = Sig()
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
156 if not hasattr(cls, 'parser_class'):
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
157 cls.parser_class = ErrorRaisingArgumentParser
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
158
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
159 # ---------------------------------------
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
160 # functions for adding optional arguments
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
161 # ---------------------------------------
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
162 def no_groups(parser, argument_signatures):
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
163 """Add all arguments directly to the parser"""
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
164 for sig in argument_signatures:
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
165 parser.add_argument(*sig.args, **sig.kwargs)
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 def one_group(parser, argument_signatures):
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
168 """Add all arguments under a single group in the parser"""
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
169 group = parser.add_argument_group('foo')
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
170 for sig in argument_signatures:
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
171 group.add_argument(*sig.args, **sig.kwargs)
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
172
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
173 def many_groups(parser, argument_signatures):
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
174 """Add each argument in its own group to the parser"""
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
175 for i, sig in enumerate(argument_signatures):
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
176 group = parser.add_argument_group('foo:%i' % i)
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
177 group.add_argument(*sig.args, **sig.kwargs)
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
178
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
179 # --------------------------
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
180 # functions for parsing args
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
181 # --------------------------
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
182 def listargs(parser, args):
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
183 """Parse the args by passing in a list"""
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
184 return parser.parse_args(args)
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
185
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
186 def sysargs(parser, args):
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
187 """Parse the args by defaulting to sys.argv"""
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
188 old_sys_argv = sys.argv
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
189 sys.argv = [old_sys_argv[0]] + args
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
190 try:
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
191 return parser.parse_args()
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
192 finally:
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
193 sys.argv = old_sys_argv
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
194
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
195 # class that holds the combination of one optional argument
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
196 # addition method and one arg parsing method
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
197 class AddTests(object):
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
198
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
199 def __init__(self, tester_cls, add_arguments, parse_args):
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
200 self._add_arguments = add_arguments
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
201 self._parse_args = parse_args
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 add_arguments_name = self._add_arguments.__name__
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
204 parse_args_name = self._parse_args.__name__
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
205 for test_func in [self.test_failures, self.test_successes]:
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
206 func_name = test_func.__name__
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
207 names = func_name, add_arguments_name, parse_args_name
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
208 test_name = '_'.join(names)
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
209
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
210 def wrapper(self, test_func=test_func):
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
211 test_func(self)
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
212 try:
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
213 wrapper.__name__ = test_name
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
214 except TypeError:
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
215 pass
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
216 setattr(tester_cls, test_name, wrapper)
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 _get_parser(self, tester):
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
219 args = tester.parser_signature.args
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
220 kwargs = tester.parser_signature.kwargs
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
221 parser = tester.parser_class(*args, **kwargs)
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
222 self._add_arguments(parser, tester.argument_signatures)
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
223 return parser
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
224
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
225 def test_failures(self, tester):
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
226 parser = self._get_parser(tester)
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
227 for args_str in tester.failures:
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
228 args = args_str.split()
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
229 raises = tester.assertRaises
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
230 raises(ArgumentParserError, parser.parse_args, args)
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
231
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
232 def test_successes(self, tester):
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
233 parser = self._get_parser(tester)
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
234 for args, expected_ns in tester.successes:
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
235 if isinstance(args, str):
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
236 args = args.split()
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
237 result_ns = self._parse_args(parser, args)
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
238 tester.assertEqual(expected_ns, result_ns)
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 # add tests for each combination of an optionals adding method
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
241 # and an arg parsing method
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
242 for add_arguments in [no_groups, one_group, many_groups]:
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
243 for parse_args in [listargs, sysargs]:
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
244 AddTests(cls, add_arguments, parse_args)
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
245
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
246 bases = TestCase,
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
247 ParserTestCase = ParserTesterMetaclass('ParserTestCase', bases, {})
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
248
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
249 # ===============
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
250 # Optionals tests
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
251 # ===============
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
252
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
253 class TestOptionalsSingleDash(ParserTestCase):
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
254 """Test an Optional with a single-dash option string"""
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
255
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
256 argument_signatures = [Sig('-x')]
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
257 failures = ['-x', 'a', '--foo', '-x --foo', '-x -y']
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
258 successes = [
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
259 ('', NS(x=None)),
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
260 ('-x a', NS(x='a')),
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
261 ('-xa', NS(x='a')),
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
262 ('-x -1', NS(x='-1')),
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
263 ('-x-1', NS(x='-1')),
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
264 ]
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
265
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
266
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
267 class TestOptionalsSingleDashCombined(ParserTestCase):
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
268 """Test an Optional with a single-dash option string"""
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
269
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
270 argument_signatures = [
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
271 Sig('-x', action='store_true'),
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
272 Sig('-yyy', action='store_const', const=42),
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
273 Sig('-z'),
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 failures = ['a', '--foo', '-xa', '-x --foo', '-x -z', '-z -x',
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
276 '-yx', '-yz a', '-yyyx', '-yyyza', '-xyza']
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
277 successes = [
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
278 ('', NS(x=False, yyy=None, z=None)),
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
279 ('-x', NS(x=True, yyy=None, z=None)),
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
280 ('-za', NS(x=False, yyy=None, z='a')),
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
281 ('-z a', NS(x=False, yyy=None, z='a')),
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
282 ('-xza', NS(x=True, yyy=None, z='a')),
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
283 ('-xz a', NS(x=True, yyy=None, z='a')),
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
284 ('-x -za', NS(x=True, yyy=None, z='a')),
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
285 ('-x -z a', NS(x=True, yyy=None, z='a')),
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
286 ('-y', NS(x=False, yyy=42, z=None)),
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
287 ('-yyy', NS(x=False, yyy=42, z=None)),
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
288 ('-x -yyy -za', NS(x=True, yyy=42, z='a')),
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
289 ('-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
290 ]
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
291
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
292
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
293 class TestOptionalsSingleDashLong(ParserTestCase):
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
294 """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
295
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
296 argument_signatures = [Sig('-foo')]
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
297 failures = ['-foo', 'a', '--foo', '-foo --foo', '-foo -y', '-fooa']
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
298 successes = [
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
299 ('', NS(foo=None)),
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
300 ('-foo a', NS(foo='a')),
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
301 ('-foo -1', NS(foo='-1')),
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
302 ('-fo a', NS(foo='a')),
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
303 ('-f a', NS(foo='a')),
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
304 ]
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
305
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
306
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
307 class TestOptionalsSingleDashSubsetAmbiguous(ParserTestCase):
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
308 """Test Optionals where option strings are subsets of each other"""
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
309
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
310 argument_signatures = [Sig('-f'), Sig('-foobar'), Sig('-foorab')]
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
311 failures = ['-f', '-foo', '-fo', '-foo b', '-foob', '-fooba', '-foora']
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
312 successes = [
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
313 ('', NS(f=None, foobar=None, foorab=None)),
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
314 ('-f a', NS(f='a', foobar=None, foorab=None)),
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
315 ('-fa', NS(f='a', foobar=None, foorab=None)),
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
316 ('-foa', NS(f='oa', foobar=None, foorab=None)),
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
317 ('-fooa', NS(f='ooa', foobar=None, foorab=None)),
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
318 ('-foobar a', NS(f=None, foobar='a', foorab=None)),
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
319 ('-foorab a', NS(f=None, foobar=None, foorab='a')),
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
320 ]
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
321
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
322
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
323 class TestOptionalsSingleDashAmbiguous(ParserTestCase):
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
324 """Test Optionals that partially match but are not subsets"""
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
325
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
326 argument_signatures = [Sig('-foobar'), Sig('-foorab')]
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
327 failures = ['-f', '-f a', '-fa', '-foa', '-foo', '-fo', '-foo b']
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
328 successes = [
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
329 ('', NS(foobar=None, foorab=None)),
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
330 ('-foob a', NS(foobar='a', foorab=None)),
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
331 ('-foor a', NS(foobar=None, foorab='a')),
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
332 ('-fooba a', NS(foobar='a', foorab=None)),
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
333 ('-foora a', NS(foobar=None, foorab='a')),
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
334 ('-foobar a', NS(foobar='a', foorab=None)),
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
335 ('-foorab a', NS(foobar=None, foorab='a')),
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
336 ]
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
337
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
338
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
339 class TestOptionalsNumeric(ParserTestCase):
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
340 """Test an Optional with a short opt string"""
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
341
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
342 argument_signatures = [Sig('-1', dest='one')]
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
343 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
344 successes = [
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
345 ('', NS(one=None)),
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
346 ('-1 a', NS(one='a')),
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
347 ('-1a', NS(one='a')),
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
348 ('-1-2', NS(one='-2')),
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
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
351
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
352 class TestOptionalsDoubleDash(ParserTestCase):
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
353 """Test an Optional with a double-dash option string"""
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
354
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
355 argument_signatures = [Sig('--foo')]
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
356 failures = ['--foo', '-f', '-f a', 'a', '--foo -x', '--foo --bar']
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
357 successes = [
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
358 ('', NS(foo=None)),
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
359 ('--foo a', NS(foo='a')),
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
360 ('--foo=a', NS(foo='a')),
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
361 ('--foo -2.5', NS(foo='-2.5')),
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
362 ('--foo=-2.5', NS(foo='-2.5')),
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
363 ]
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
364
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
365
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
366 class TestOptionalsDoubleDashPartialMatch(ParserTestCase):
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
367 """Tests partial matching with a double-dash option string"""
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
368
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
369 argument_signatures = [
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
370 Sig('--badger', action='store_true'),
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
371 Sig('--bat'),
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 failures = ['--bar', '--b', '--ba', '--b=2', '--ba=4', '--badge 5']
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
374 successes = [
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
375 ('', NS(badger=False, bat=None)),
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
376 ('--bat X', NS(badger=False, bat='X')),
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
377 ('--bad', NS(badger=True, bat=None)),
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
378 ('--badg', NS(badger=True, bat=None)),
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
379 ('--badge', NS(badger=True, bat=None)),
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
380 ('--badger', NS(badger=True, bat=None)),
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
381 ]
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
382
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
383
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
384 class TestOptionalsDoubleDashPrefixMatch(ParserTestCase):
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
385 """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
386
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
387 argument_signatures = [
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
388 Sig('--badger', action='store_true'),
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
389 Sig('--ba'),
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 failures = ['--bar', '--b', '--ba', '--b=2', '--badge 5']
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
392 successes = [
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
393 ('', NS(badger=False, ba=None)),
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
394 ('--ba X', NS(badger=False, ba='X')),
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
395 ('--ba=X', NS(badger=False, ba='X')),
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
396 ('--bad', NS(badger=True, ba=None)),
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
397 ('--badg', NS(badger=True, ba=None)),
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
398 ('--badge', NS(badger=True, ba=None)),
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
399 ('--badger', NS(badger=True, ba=None)),
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
400 ]
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
401
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
402
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
403 class TestOptionalsSingleDoubleDash(ParserTestCase):
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
404 """Test an Optional with single- and double-dash option strings"""
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
405
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
406 argument_signatures = [
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
407 Sig('-f', action='store_true'),
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
408 Sig('--bar'),
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
409 Sig('-baz', action='store_const', const=42),
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 failures = ['--bar', '-fbar', '-fbaz', '-bazf', '-b B', 'B']
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
412 successes = [
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
413 ('', NS(f=False, bar=None, baz=None)),
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
414 ('-f', NS(f=True, bar=None, baz=None)),
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
415 ('--ba B', NS(f=False, bar='B', baz=None)),
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
416 ('-f --bar B', NS(f=True, bar='B', baz=None)),
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
417 ('-f -b', NS(f=True, bar=None, baz=42)),
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
418 ('-ba -f', NS(f=True, bar=None, baz=42)),
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
419 ]
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
420
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
421
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
422 class TestOptionalsAlternatePrefixChars(ParserTestCase):
63691
23c089dc5cff Merged revisions 83675 via svnmerge from
R. David Murray <rdmurray@bitdance.com>
parents: 61879
diff changeset
423 """Test an Optional with option strings with custom prefixes"""
59267
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
424
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
425 parser_signature = Sig(prefix_chars='+:/', add_help=False)
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
426 argument_signatures = [
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
427 Sig('+f', action='store_true'),
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
428 Sig('::bar'),
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
429 Sig('/baz', action='store_const', const=42),
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
430 ]
63691
23c089dc5cff Merged revisions 83675 via svnmerge from
R. David Murray <rdmurray@bitdance.com>
parents: 61879
diff changeset
431 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
432 successes = [
23c089dc5cff Merged revisions 83675 via svnmerge from
R. David Murray <rdmurray@bitdance.com>
parents: 61879
diff changeset
433 ('', NS(f=False, bar=None, baz=None)),
23c089dc5cff Merged revisions 83675 via svnmerge from
R. David Murray <rdmurray@bitdance.com>
parents: 61879
diff changeset
434 ('+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
435 ('::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
436 ('+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
437 ('+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
438 ('/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
439 ]
23c089dc5cff Merged revisions 83675 via svnmerge from
R. David Murray <rdmurray@bitdance.com>
parents: 61879
diff changeset
440
23c089dc5cff Merged revisions 83675 via svnmerge from
R. David Murray <rdmurray@bitdance.com>
parents: 61879
diff changeset
441
23c089dc5cff Merged revisions 83675 via svnmerge from
R. David Murray <rdmurray@bitdance.com>
parents: 61879
diff changeset
442 class TestOptionalsAlternatePrefixCharsAddedHelp(ParserTestCase):
23c089dc5cff Merged revisions 83675 via svnmerge from
R. David Murray <rdmurray@bitdance.com>
parents: 61879
diff changeset
443 """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
444 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
445 http://bugs.python.org/issue9444"""
23c089dc5cff Merged revisions 83675 via svnmerge from
R. David Murray <rdmurray@bitdance.com>
parents: 61879
diff changeset
446
23c089dc5cff Merged revisions 83675 via svnmerge from
R. David Murray <rdmurray@bitdance.com>
parents: 61879
diff changeset
447 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
448 argument_signatures = [
23c089dc5cff Merged revisions 83675 via svnmerge from
R. David Murray <rdmurray@bitdance.com>
parents: 61879
diff changeset
449 Sig('+f', action='store_true'),
23c089dc5cff Merged revisions 83675 via svnmerge from
R. David Murray <rdmurray@bitdance.com>
parents: 61879
diff changeset
450 Sig('::bar'),
23c089dc5cff Merged revisions 83675 via svnmerge from
R. David Murray <rdmurray@bitdance.com>
parents: 61879
diff changeset
451 Sig('/baz', action='store_const', const=42),
23c089dc5cff Merged revisions 83675 via svnmerge from
R. David Murray <rdmurray@bitdance.com>
parents: 61879
diff changeset
452 ]
59267
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
453 failures = ['--bar', '-fbar', '-b B', 'B', '-f', '--bar B', '-baz']
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
454 successes = [
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
455 ('', NS(f=False, bar=None, baz=None)),
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
456 ('+f', NS(f=True, bar=None, baz=None)),
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
457 ('::ba B', NS(f=False, bar='B', baz=None)),
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
458 ('+f ::bar B', NS(f=True, bar='B', baz=None)),
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
459 ('+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
460 ('/ba +f', NS(f=True, bar=None, baz=42))
59267
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
461 ]
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
462
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
463 class TestOptionalsShortLong(ParserTestCase):
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
464 """Test a combination of single- and double-dash option strings"""
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
465
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
466 argument_signatures = [
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
467 Sig('-v', '--verbose', '-n', '--noisy', action='store_true'),
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
468 ]
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
469 failures = ['--x --verbose', '-N', 'a', '-v x']
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
470 successes = [
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
471 ('', NS(verbose=False)),
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
472 ('-v', NS(verbose=True)),
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
473 ('--verbose', NS(verbose=True)),
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
474 ('-n', NS(verbose=True)),
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
475 ('--noisy', NS(verbose=True)),
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
476 ]
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
477
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
478
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
479 class TestOptionalsDest(ParserTestCase):
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
480 """Tests various means of setting destination"""
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
481
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
482 argument_signatures = [Sig('--foo-bar'), Sig('--baz', dest='zabbaz')]
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
483 failures = ['a']
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
484 successes = [
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
485 ('--foo-bar f', NS(foo_bar='f', zabbaz=None)),
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
486 ('--baz g', NS(foo_bar=None, zabbaz='g')),
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
487 ('--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
488 ('--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
489 ]
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
490
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
491
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
492 class TestOptionalsDefault(ParserTestCase):
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
493 """Tests specifying a default for an Optional"""
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
494
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
495 argument_signatures = [Sig('-x'), Sig('-y', default=42)]
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
496 failures = ['a']
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
497 successes = [
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
498 ('', NS(x=None, y=42)),
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
499 ('-xx', NS(x='x', y=42)),
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
500 ('-yy', NS(x=None, y='y')),
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
501 ]
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
502
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
503
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
504 class TestOptionalsNargsDefault(ParserTestCase):
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
505 """Tests not specifying the number of args for an Optional"""
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
506
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
507 argument_signatures = [Sig('-x')]
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
508 failures = ['a', '-x']
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
509 successes = [
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
510 ('', NS(x=None)),
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
511 ('-x a', NS(x='a')),
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
512 ]
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
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
515 class TestOptionalsNargs1(ParserTestCase):
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
516 """Tests specifying the 1 arg for an Optional"""
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
517
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
518 argument_signatures = [Sig('-x', nargs=1)]
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
519 failures = ['a', '-x']
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
520 successes = [
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
521 ('', NS(x=None)),
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
522 ('-x a', NS(x=['a'])),
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
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
525
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
526 class TestOptionalsNargs3(ParserTestCase):
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
527 """Tests specifying the 3 args for an Optional"""
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
528
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
529 argument_signatures = [Sig('-x', nargs=3)]
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
530 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
531 successes = [
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
532 ('', NS(x=None)),
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
533 ('-x a b c', NS(x=['a', 'b', 'c'])),
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
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
537 class TestOptionalsNargsOptional(ParserTestCase):
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
538 """Tests specifying an Optional arg for an Optional"""
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
539
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
540 argument_signatures = [
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
541 Sig('-w', nargs='?'),
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
542 Sig('-x', nargs='?', const=42),
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
543 Sig('-y', nargs='?', default='spam'),
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
544 Sig('-z', nargs='?', type=int, const='42', default='84'),
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 failures = ['2']
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
547 successes = [
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
548 ('', NS(w=None, x=None, y='spam', z=84)),
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
549 ('-w', NS(w=None, x=None, y='spam', z=84)),
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
550 ('-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
551 ('-x', NS(w=None, x=42, y='spam', z=84)),
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
552 ('-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
553 ('-y', NS(w=None, x=None, y=None, z=84)),
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
554 ('-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
555 ('-z', NS(w=None, x=None, y='spam', z=42)),
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
556 ('-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
557 ]
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
558
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
559
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
560 class TestOptionalsNargsZeroOrMore(ParserTestCase):
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
561 """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
562
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
563 argument_signatures = [
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
564 Sig('-x', nargs='*'),
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
565 Sig('-y', nargs='*', default='spam'),
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 failures = ['a']
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
568 successes = [
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
569 ('', NS(x=None, y='spam')),
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
570 ('-x', NS(x=[], y='spam')),
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
571 ('-x a', NS(x=['a'], y='spam')),
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
572 ('-x a b', NS(x=['a', 'b'], y='spam')),
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
573 ('-y', NS(x=None, y=[])),
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
574 ('-y a', NS(x=None, y=['a'])),
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
575 ('-y a b', NS(x=None, y=['a', 'b'])),
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
576 ]
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
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
579 class TestOptionalsNargsOneOrMore(ParserTestCase):
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
580 """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
581
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
582 argument_signatures = [
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
583 Sig('-x', nargs='+'),
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
584 Sig('-y', nargs='+', default='spam'),
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
585 ]
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
586 failures = ['a', '-x', '-y', 'a -x', 'a -y b']
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
587 successes = [
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
588 ('', NS(x=None, y='spam')),
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
589 ('-x a', NS(x=['a'], y='spam')),
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
590 ('-x a b', NS(x=['a', 'b'], y='spam')),
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
591 ('-y a', NS(x=None, y=['a'])),
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
592 ('-y a b', NS(x=None, y=['a', 'b'])),
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
593 ]
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
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
596 class TestOptionalsChoices(ParserTestCase):
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
597 """Tests specifying the choices for an Optional"""
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 argument_signatures = [
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
600 Sig('-f', choices='abc'),
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
601 Sig('-g', type=int, choices=range(5))]
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
602 failures = ['a', '-f d', '-fad', '-ga', '-g 6']
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
603 successes = [
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
604 ('', NS(f=None, g=None)),
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
605 ('-f a', NS(f='a', g=None)),
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
606 ('-f c', NS(f='c', g=None)),
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
607 ('-g 0', NS(f=None, g=0)),
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
608 ('-g 03', NS(f=None, g=3)),
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
609 ('-fb -g4', NS(f='b', g=4)),
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
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
612
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
613 class TestOptionalsRequired(ParserTestCase):
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
614 """Tests the an optional action that is required"""
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
615
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
616 argument_signatures = [
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
617 Sig('-x', type=int, required=True),
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
618 ]
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
619 failures = ['a', '']
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
620 successes = [
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
621 ('-x 1', NS(x=1)),
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
622 ('-x42', NS(x=42)),
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
623 ]
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
624
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 class TestOptionalsActionStore(ParserTestCase):
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
627 """Tests the store action for an Optional"""
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
628
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
629 argument_signatures = [Sig('-x', action='store')]
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
630 failures = ['a', 'a -x']
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
631 successes = [
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
632 ('', NS(x=None)),
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
633 ('-xfoo', NS(x='foo')),
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
634 ]
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
635
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
636
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
637 class TestOptionalsActionStoreConst(ParserTestCase):
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
638 """Tests the store_const action for an Optional"""
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
639
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
640 argument_signatures = [Sig('-y', action='store_const', const=object)]
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
641 failures = ['a']
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
642 successes = [
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
643 ('', NS(y=None)),
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
644 ('-y', NS(y=object)),
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
645 ]
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
646
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 class TestOptionalsActionStoreFalse(ParserTestCase):
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
649 """Tests the store_false action for an Optional"""
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 argument_signatures = [Sig('-z', action='store_false')]
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
652 failures = ['a', '-za', '-z a']
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
653 successes = [
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
654 ('', NS(z=True)),
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
655 ('-z', NS(z=False)),
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
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
659 class TestOptionalsActionStoreTrue(ParserTestCase):
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
660 """Tests the store_true action for an Optional"""
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
661
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
662 argument_signatures = [Sig('--apple', action='store_true')]
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
663 failures = ['a', '--apple=b', '--apple b']
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
664 successes = [
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
665 ('', NS(apple=False)),
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
666 ('--apple', NS(apple=True)),
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
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
670 class TestOptionalsActionAppend(ParserTestCase):
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
671 """Tests the append action for an Optional"""
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
672
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
673 argument_signatures = [Sig('--baz', action='append')]
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
674 failures = ['a', '--baz', 'a --baz', '--baz a b']
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
675 successes = [
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
676 ('', NS(baz=None)),
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
677 ('--baz a', NS(baz=['a'])),
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
678 ('--baz a --baz b', NS(baz=['a', 'b'])),
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
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
681
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
682 class TestOptionalsActionAppendWithDefault(ParserTestCase):
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
683 """Tests the append action for an Optional"""
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
684
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
685 argument_signatures = [Sig('--baz', action='append', default=['X'])]
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
686 failures = ['a', '--baz', 'a --baz', '--baz a b']
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
687 successes = [
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
688 ('', NS(baz=['X'])),
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
689 ('--baz a', NS(baz=['X', 'a'])),
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
690 ('--baz a --baz b', NS(baz=['X', 'a', 'b'])),
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
691 ]
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
692
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 class TestOptionalsActionAppendConst(ParserTestCase):
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
695 """Tests the append_const action for an Optional"""
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
696
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
697 argument_signatures = [
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
698 Sig('-b', action='append_const', const=Exception),
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
699 Sig('-c', action='append', dest='b'),
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 failures = ['a', '-c', 'a -c', '-bx', '-b x']
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
702 successes = [
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
703 ('', NS(b=None)),
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
704 ('-b', NS(b=[Exception])),
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
705 ('-b -cx -b -cyz', NS(b=[Exception, 'x', Exception, 'yz'])),
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
706 ]
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
707
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
708
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
709 class TestOptionalsActionAppendConstWithDefault(ParserTestCase):
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
710 """Tests the append_const action for an Optional"""
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 argument_signatures = [
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
713 Sig('-b', action='append_const', const=Exception, default=['X']),
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
714 Sig('-c', action='append', dest='b'),
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
715 ]
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
716 failures = ['a', '-c', 'a -c', '-bx', '-b x']
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
717 successes = [
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
718 ('', NS(b=['X'])),
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
719 ('-b', NS(b=['X', Exception])),
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
720 ('-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
721 ]
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
722
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 class TestOptionalsActionCount(ParserTestCase):
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
725 """Tests the count action for an Optional"""
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
726
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
727 argument_signatures = [Sig('-x', action='count')]
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
728 failures = ['a', '-x a', '-x b', '-x a -x b']
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
729 successes = [
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
730 ('', NS(x=None)),
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
731 ('-x', NS(x=1)),
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
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
734
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
735 # ================
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
736 # Positional tests
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
737 # ================
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 class TestPositionalsNargsNone(ParserTestCase):
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
740 """Test a Positional that doesn't specify nargs"""
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
741
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
742 argument_signatures = [Sig('foo')]
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
743 failures = ['', '-x', 'a b']
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
744 successes = [
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
745 ('a', NS(foo='a')),
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
746 ]
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
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
749 class TestPositionalsNargs1(ParserTestCase):
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
750 """Test a Positional that specifies an nargs of 1"""
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
751
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
752 argument_signatures = [Sig('foo', nargs=1)]
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
753 failures = ['', '-x', 'a b']
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
754 successes = [
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
755 ('a', NS(foo=['a'])),
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
756 ]
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
757
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 class TestPositionalsNargs2(ParserTestCase):
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
760 """Test a Positional that specifies an nargs of 2"""
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
761
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
762 argument_signatures = [Sig('foo', nargs=2)]
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
763 failures = ['', 'a', '-x', 'a b c']
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
764 successes = [
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
765 ('a b', NS(foo=['a', 'b'])),
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
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
769 class TestPositionalsNargsZeroOrMore(ParserTestCase):
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
770 """Test a Positional that specifies unlimited nargs"""
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
771
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
772 argument_signatures = [Sig('foo', nargs='*')]
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
773 failures = ['-x']
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
774 successes = [
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
775 ('', NS(foo=[])),
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
776 ('a', NS(foo=['a'])),
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
777 ('a b', NS(foo=['a', 'b'])),
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 TestPositionalsNargsZeroOrMoreDefault(ParserTestCase):
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
782 """Test a Positional that specifies unlimited nargs and a default"""
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='*', default='bar')]
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
785 failures = ['-x']
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 ('', NS(foo='bar')),
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
788 ('a', NS(foo=['a'])),
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
789 ('a b', NS(foo=['a', 'b'])),
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
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
792
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
793 class TestPositionalsNargsOneOrMore(ParserTestCase):
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
794 """Test a Positional that specifies one or more nargs"""
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
795
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
796 argument_signatures = [Sig('foo', nargs='+')]
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
797 failures = ['', '-x']
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
798 successes = [
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
799 ('a', NS(foo=['a'])),
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
800 ('a b', NS(foo=['a', 'b'])),
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
801 ]
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
802
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 class TestPositionalsNargsOptional(ParserTestCase):
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
805 """Tests an Optional Positional"""
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
806
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
807 argument_signatures = [Sig('foo', nargs='?')]
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
808 failures = ['-x', 'a b']
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
809 successes = [
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
810 ('', NS(foo=None)),
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
811 ('a', NS(foo='a')),
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
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
814
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
815 class TestPositionalsNargsOptionalDefault(ParserTestCase):
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
816 """Tests an Optional Positional with a default value"""
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
817
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
818 argument_signatures = [Sig('foo', nargs='?', default=42)]
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
819 failures = ['-x', 'a b']
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
820 successes = [
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
821 ('', NS(foo=42)),
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
822 ('a', NS(foo='a')),
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
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
826 class TestPositionalsNargsOptionalConvertedDefault(ParserTestCase):
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
827 """Tests an Optional Positional with a default value
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
828 that needs to be converted to the appropriate type.
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
829 """
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
830
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
831 argument_signatures = [
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
832 Sig('foo', nargs='?', type=int, default='42'),
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 failures = ['-x', 'a b', '1 2']
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
835 successes = [
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
836 ('', NS(foo=42)),
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
837 ('1', NS(foo=1)),
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
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
840
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
841 class TestPositionalsNargsNoneNone(ParserTestCase):
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
842 """Test two Positionals that don't specify nargs"""
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
843
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
844 argument_signatures = [Sig('foo'), Sig('bar')]
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
845 failures = ['', '-x', 'a', 'a b c']
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
846 successes = [
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
847 ('a b', NS(foo='a', bar='b')),
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
848 ]
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
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
851 class TestPositionalsNargsNone1(ParserTestCase):
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
852 """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
853
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
854 argument_signatures = [Sig('foo'), Sig('bar', nargs=1)]
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
855 failures = ['', '--foo', 'a', 'a b c']
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
856 successes = [
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
857 ('a b', NS(foo='a', bar=['b'])),
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
858 ]
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
859
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
860
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
861 class TestPositionalsNargs2None(ParserTestCase):
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
862 """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
863
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
864 argument_signatures = [Sig('foo', nargs=2), Sig('bar')]
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
865 failures = ['', '--foo', 'a', 'a b', 'a b c d']
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
866 successes = [
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
867 ('a b c', NS(foo=['a', 'b'], bar='c')),
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
868 ]
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
869
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 class TestPositionalsNargsNoneZeroOrMore(ParserTestCase):
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
872 """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
873
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
874 argument_signatures = [Sig('foo'), Sig('bar', nargs='*')]
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
875 failures = ['', '--foo']
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
876 successes = [
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
877 ('a', NS(foo='a', bar=[])),
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
878 ('a b', NS(foo='a', bar=['b'])),
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
879 ('a b c', NS(foo='a', bar=['b', 'c'])),
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 TestPositionalsNargsNoneOneOrMore(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 one or more"""
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='+')]
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
887 failures = ['', '--foo', 'a']
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 ('a b c', NS(foo='a', bar=['b', 'c'])),
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
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
894 class TestPositionalsNargsNoneOptional(ParserTestCase):
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
895 """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
896
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
897 argument_signatures = [Sig('foo'), Sig('bar', nargs='?')]
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
898 failures = ['', '--foo', 'a b c']
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
899 successes = [
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
900 ('a', NS(foo='a', bar=None)),
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
901 ('a b', NS(foo='a', bar='b')),
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
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
904
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
905 class TestPositionalsNargsZeroOrMoreNone(ParserTestCase):
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
906 """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
907
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
908 argument_signatures = [Sig('foo', nargs='*'), Sig('bar')]
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
909 failures = ['', '--foo']
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
910 successes = [
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
911 ('a', NS(foo=[], bar='a')),
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
912 ('a b', NS(foo=['a'], bar='b')),
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
913 ('a b c', NS(foo=['a', 'b'], bar='c')),
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
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
916
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
917 class TestPositionalsNargsOneOrMoreNone(ParserTestCase):
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
918 """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
919
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
920 argument_signatures = [Sig('foo', nargs='+'), Sig('bar')]
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
921 failures = ['', '--foo', 'a']
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
922 successes = [
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
923 ('a b', NS(foo=['a'], bar='b')),
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
924 ('a b c', NS(foo=['a', 'b'], bar='c')),
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
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
927
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
928 class TestPositionalsNargsOptionalNone(ParserTestCase):
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
929 """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
930
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
931 argument_signatures = [Sig('foo', nargs='?', default=42), Sig('bar')]
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
932 failures = ['', '--foo', 'a b c']
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
933 successes = [
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
934 ('a', NS(foo=42, bar='a')),
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
935 ('a b', NS(foo='a', bar='b')),
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
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
938
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
939 class TestPositionalsNargs2ZeroOrMore(ParserTestCase):
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
940 """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
941
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
942 argument_signatures = [Sig('foo', nargs=2), Sig('bar', nargs='*')]
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
943 failures = ['', '--foo', 'a']
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
944 successes = [
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
945 ('a b', NS(foo=['a', 'b'], bar=[])),
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
946 ('a b c', NS(foo=['a', 'b'], bar=['c'])),
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
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
950 class TestPositionalsNargs2OneOrMore(ParserTestCase):
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
951 """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
952
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
953 argument_signatures = [Sig('foo', nargs=2), Sig('bar', nargs='+')]
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
954 failures = ['', '--foo', 'a', 'a b']
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
955 successes = [
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 TestPositionalsNargs2Optional(ParserTestCase):
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
961 """Test a Positional with 2 nargs followed by one optional"""
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=2), Sig('bar', nargs='?')]
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
964 failures = ['', '--foo', 'a', 'a b c d']
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 b', NS(foo=['a', 'b'], bar=None)),
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
967 ('a b c', NS(foo=['a', 'b'], bar='c')),
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 TestPositionalsNargsZeroOrMore1(ParserTestCase):
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
972 """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
973
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
974 argument_signatures = [Sig('foo', nargs='*'), Sig('bar', nargs=1)]
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
975 failures = ['', '--foo', ]
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', NS(foo=[], bar=['a'])),
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
978 ('a b', NS(foo=['a'], bar=['b'])),
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
979 ('a b c', NS(foo=['a', 'b'], bar=['c'])),
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
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
983 class TestPositionalsNargsOneOrMore1(ParserTestCase):
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
984 """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
985
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
986 argument_signatures = [Sig('foo', nargs='+'), Sig('bar', nargs=1)]
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
987 failures = ['', '--foo', 'a']
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
988 successes = [
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
989 ('a b', NS(foo=['a'], bar=['b'])),
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
990 ('a b c', NS(foo=['a', 'b'], bar=['c'])),
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
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
993
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
994 class TestPositionalsNargsOptional1(ParserTestCase):
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
995 """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
996
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
997 argument_signatures = [Sig('foo', nargs='?'), Sig('bar', nargs=1)]
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
998 failures = ['', '--foo', 'a b c']
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
999 successes = [
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
1000 ('a', NS(foo=None, bar=['a'])),
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
1001 ('a b', NS(foo='a', bar=['b'])),
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
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
1004
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
1005 class TestPositionalsNargsNoneZeroOrMore1(ParserTestCase):
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
1006 """Test three Positionals: no nargs, unlimited nargs and 1 nargs"""
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
1007
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
1008 argument_signatures = [
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
1009 Sig('foo'),
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
1010 Sig('bar', nargs='*'),
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
1011 Sig('baz', nargs=1),
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 failures = ['', '--foo', 'a']
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
1014 successes = [
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
1015 ('a b', NS(foo='a', bar=[], baz=['b'])),
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
1016 ('a b c', NS(foo='a', bar=['b'], baz=['c'])),
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
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
1019
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
1020 class TestPositionalsNargsNoneOneOrMore1(ParserTestCase):
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
1021 """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
1022
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
1023 argument_signatures = [
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
1024 Sig('foo'),
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
1025 Sig('bar', nargs='+'),
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
1026 Sig('baz', nargs=1),
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
1027 ]
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
1028 failures = ['', '--foo', 'a', 'b']
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
1029 successes = [
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
1030 ('a b c', NS(foo='a', bar=['b'], baz=['c'])),
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
1031 ('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
1032 ]
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
1033
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 class TestPositionalsNargsNoneOptional1(ParserTestCase):
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
1036 """Test three Positionals: no nargs, optional narg and 1 nargs"""
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
1037
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
1038 argument_signatures = [
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
1039 Sig('foo'),
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
1040 Sig('bar', nargs='?', default=0.625),
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
1041 Sig('baz', nargs=1),
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
1042 ]
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
1043 failures = ['', '--foo', 'a']
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
1044 successes = [
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
1045 ('a b', NS(foo='a', bar=0.625, baz=['b'])),
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
1046 ('a b c', NS(foo='a', bar='b', baz=['c'])),
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
1047 ]
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
1048
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 class TestPositionalsNargsOptionalOptional(ParserTestCase):
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
1051 """Test two optional nargs"""
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
1052
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
1053 argument_signatures = [
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
1054 Sig('foo', nargs='?'),
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
1055 Sig('bar', nargs='?', default=42),
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
1056 ]
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
1057 failures = ['--foo', 'a b c']
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
1058 successes = [
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
1059 ('', NS(foo=None, bar=42)),
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
1060 ('a', NS(foo='a', bar=42)),
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
1061 ('a b', NS(foo='a', bar='b')),
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
1062 ]
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
1063
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 class TestPositionalsNargsOptionalZeroOrMore(ParserTestCase):
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
1066 """Test an Optional narg followed by unlimited nargs"""
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
1067
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
1068 argument_signatures = [Sig('foo', nargs='?'), Sig('bar', nargs='*')]
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
1069 failures = ['--foo']
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
1070 successes = [
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
1071 ('', NS(foo=None, bar=[])),
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
1072 ('a', NS(foo='a', bar=[])),
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
1073 ('a b', NS(foo='a', bar=['b'])),
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
1074 ('a b c', NS(foo='a', bar=['b', 'c'])),
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
1075 ]
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
1076
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
1077
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
1078 class TestPositionalsNargsOptionalOneOrMore(ParserTestCase):
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
1079 """Test an Optional narg followed by one or more nargs"""
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 argument_signatures = [Sig('foo', nargs='?'), Sig('bar', nargs='+')]
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
1082 failures = ['', '--foo']
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
1083 successes = [
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
1084 ('a', NS(foo=None, bar=['a'])),
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
1085 ('a b', NS(foo='a', bar=['b'])),
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
1086 ('a b c', NS(foo='a', bar=['b', 'c'])),
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
1087 ]
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
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
1090 class TestPositionalsChoicesString(ParserTestCase):
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
1091 """Test a set of single-character choices"""
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
1092
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
1093 argument_signatures = [Sig('spam', choices=set('abcdefg'))]
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
1094 failures = ['', '--foo', 'h', '42', 'ef']
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
1095 successes = [
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
1096 ('a', NS(spam='a')),
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
1097 ('g', NS(spam='g')),
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
1098 ]
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
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
1101 class TestPositionalsChoicesInt(ParserTestCase):
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
1102 """Test a set of integer choices"""
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
1103
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
1104 argument_signatures = [Sig('spam', type=int, choices=range(20))]
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
1105 failures = ['', '--foo', 'h', '42', 'ef']
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
1106 successes = [
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
1107 ('4', NS(spam=4)),
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
1108 ('15', NS(spam=15)),
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
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
1111
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
1112 class TestPositionalsActionAppend(ParserTestCase):
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
1113 """Test the 'append' action"""
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
1114
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
1115 argument_signatures = [
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
1116 Sig('spam', action='append'),
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
1117 Sig('spam', action='append', nargs=2),
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
1118 ]
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
1119 failures = ['', '--foo', 'a', 'a b', 'a b c d']
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
1120 successes = [
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
1121 ('a b c', NS(spam=['a', ['b', 'c']])),
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
1122 ]
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
1123
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 # Combined optionals and positionals tests
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
1126 # ========================================
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
1127
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
1128 class TestOptionalsNumericAndPositionals(ParserTestCase):
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
1129 """Tests negative number args when numeric options are present"""
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 argument_signatures = [
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
1132 Sig('x', nargs='?'),
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
1133 Sig('-4', dest='y', action='store_true'),
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
1134 ]
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
1135 failures = ['-2', '-315']
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
1136 successes = [
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
1137 ('', NS(x=None, y=False)),
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
1138 ('a', NS(x='a', y=False)),
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
1139 ('-4', NS(x=None, y=True)),
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
1140 ('-4 a', NS(x='a', y=True)),
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 TestOptionalsAlmostNumericAndPositionals(ParserTestCase):
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
1145 """Tests negative number args when almost numeric options are present"""
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('x', nargs='?'),
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
1149 Sig('-k4', dest='y', action='store_true'),
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 = ['-k3']
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 ('', NS(x=None, y=False)),
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
1154 ('-2', NS(x='-2', y=False)),
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
1155 ('a', NS(x='a', y=False)),
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
1156 ('-k4', NS(x=None, y=True)),
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
1157 ('-k4 a', NS(x='a', y=True)),
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
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
1161 class TestEmptyAndSpaceContainingArguments(ParserTestCase):
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('-y', '--yyy', dest='y'),
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 = ['-y']
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='', y=None)),
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
1170 (['a badger'], NS(x='a badger', y=None)),
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
1171 (['-a badger'], NS(x='-a badger', y=None)),
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
1172 (['-y', ''], NS(x=None, y='')),
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
1173 (['-y', 'a badger'], NS(x=None, y='a badger')),
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
1174 (['-y', '-a badger'], NS(x=None, y='-a badger')),
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
1175 (['--yyy=a badger'], NS(x=None, y='a badger')),
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
1176 (['--yyy=-a badger'], NS(x=None, y='-a badger')),
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
1177 ]
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
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
1180 class TestPrefixCharacterOnlyArguments(ParserTestCase):
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
1181
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
1182 parser_signature = Sig(prefix_chars='-+')
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
1183 argument_signatures = [
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
1184 Sig('-', dest='x', nargs='?', const='badger'),
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
1185 Sig('+', dest='y', type=int, default=42),
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
1186 Sig('-+-', dest='z', action='store_true'),
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
1187 ]
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
1188 failures = ['-y', '+ -']
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
1189 successes = [
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
1190 ('', NS(x=None, y=42, z=False)),
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
1191 ('-', NS(x='badger', y=42, z=False)),
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
1192 ('- X', NS(x='X', y=42, z=False)),
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
1193 ('+ -3', NS(x=None, y=-3, z=False)),
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
1194 ('-+-', NS(x=None, y=42, z=True)),
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
1195 ('- ===', NS(x='===', y=42, z=False)),
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
1196 ]
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
1197
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 class TestNargsZeroOrMore(ParserTestCase):
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
1200 """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
1201
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
1202 argument_signatures = [Sig('-x', nargs='*'), Sig('y', nargs='*')]
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
1203 failures = []
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
1204 successes = [
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
1205 ('', NS(x=None, y=[])),
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
1206 ('-x', NS(x=[], y=[])),
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
1207 ('-x a', NS(x=['a'], y=[])),
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
1208 ('-x a -- b', NS(x=['a'], y=['b'])),
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
1209 ('a', NS(x=None, y=['a'])),
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
1210 ('a -x', NS(x=[], y=['a'])),
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
1211 ('a -x b', NS(x=['b'], y=['a'])),
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
1212 ]
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
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
1215 class TestNargsRemainder(ParserTestCase):
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
1216 """Tests specifying a positional with nargs=REMAINDER"""
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
1217
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
1218 argument_signatures = [Sig('x'), Sig('y', nargs='...'), Sig('-z')]
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
1219 failures = ['', '-z', '-z Z']
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
1220 successes = [
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
1221 ('X', NS(x='X', y=[], z=None)),
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
1222 ('-z Z X', NS(x='X', y=[], z='Z')),
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
1223 ('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
1224 ('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
1225 ]
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
1226
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
1227
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
1228 class TestOptionLike(ParserTestCase):
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
1229 """Tests options that may or may not be arguments"""
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 argument_signatures = [
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
1232 Sig('-x', type=float),
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
1233 Sig('-3', type=float, dest='y'),
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
1234 Sig('z', nargs='*'),
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
1235 ]
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
1236 failures = ['-x', '-y2.5', '-xa', '-x -a',
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
1237 '-x -3', '-x -3.5', '-3 -3.5',
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
1238 '-x -2.5', '-x -2.5 a', '-3 -.5',
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
1239 'a x -1', '-x -1 a', '-3 -1 a']
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
1240 successes = [
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
1241 ('', NS(x=None, y=None, z=[])),
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
1242 ('-x 2.5', NS(x=2.5, y=None, z=[])),
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
1243 ('-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
1244 ('-3.5', NS(x=None, y=0.5, z=[])),
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
1245 ('-3-.5', NS(x=None, y=-0.5, z=[])),
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
1246 ('-3 .5', NS(x=None, y=0.5, z=[])),
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
1247 ('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
1248 ('a', NS(x=None, y=None, z=['a'])),
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
1249 ('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
1250 ('-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
1251 ('-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
1252 ]
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
1253
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
1254
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
1255 class TestDefaultSuppress(ParserTestCase):
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
1256 """Test actions with suppressed defaults"""
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 argument_signatures = [
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
1259 Sig('foo', nargs='?', default=argparse.SUPPRESS),
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
1260 Sig('bar', nargs='*', default=argparse.SUPPRESS),
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
1261 Sig('--baz', action='store_true', default=argparse.SUPPRESS),
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 failures = ['-x']
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
1264 successes = [
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
1265 ('', NS()),
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
1266 ('a', NS(foo='a')),
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
1267 ('a b', NS(foo='a', bar=['b'])),
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
1268 ('--baz', NS(baz=True)),
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
1269 ('a --baz', NS(foo='a', baz=True)),
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
1270 ('--baz a b', NS(foo='a', bar=['b'], baz=True)),
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
1271 ]
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
1272
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
1273
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
1274 class TestParserDefaultSuppress(ParserTestCase):
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
1275 """Test actions with a parser-level default of SUPPRESS"""
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
1276
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
1277 parser_signature = Sig(argument_default=argparse.SUPPRESS)
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
1278 argument_signatures = [
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
1279 Sig('foo', nargs='?'),
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
1280 Sig('bar', nargs='*'),
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
1281 Sig('--baz', action='store_true'),
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
1282 ]
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
1283 failures = ['-x']
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
1284 successes = [
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
1285 ('', NS()),
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
1286 ('a', NS(foo='a')),
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
1287 ('a b', NS(foo='a', bar=['b'])),
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
1288 ('--baz', NS(baz=True)),
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
1289 ('a --baz', NS(foo='a', baz=True)),
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
1290 ('--baz a b', NS(foo='a', bar=['b'], baz=True)),
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
1291 ]
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
1292
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
1293
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
1294 class TestParserDefault42(ParserTestCase):
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
1295 """Test actions with a parser-level default of 42"""
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
1296
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
1297 parser_signature = Sig(argument_default=42, version='1.0')
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
1298 argument_signatures = [
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
1299 Sig('foo', nargs='?'),
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
1300 Sig('bar', nargs='*'),
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
1301 Sig('--baz', action='store_true'),
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
1302 ]
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
1303 failures = ['-x']
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
1304 successes = [
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
1305 ('', NS(foo=42, bar=42, baz=42)),
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
1306 ('a', NS(foo='a', bar=42, baz=42)),
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
1307 ('a b', NS(foo='a', bar=['b'], baz=42)),
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
1308 ('--baz', NS(foo=42, bar=42, baz=True)),
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
1309 ('a --baz', NS(foo='a', bar=42, baz=True)),
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
1310 ('--baz a b', NS(foo='a', bar=['b'], baz=True)),
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
1311 ]
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
1312
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
1313
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
1314 class TestArgumentsFromFile(TempDirMixin, ParserTestCase):
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
1315 """Test reading arguments from a file"""
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
1316
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
1317 def setUp(self):
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
1318 super(TestArgumentsFromFile, self).setUp()
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
1319 file_texts = [
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
1320 ('hello', 'hello world!\n'),
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
1321 ('recursive', '-a\n'
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
1322 'A\n'
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
1323 '@hello'),
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
1324 ('invalid', '@no-such-path\n'),
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 for path, text in file_texts:
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
1327 file = open(path, 'w')
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
1328 file.write(text)
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
1329 file.close()
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
1330
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
1331 parser_signature = Sig(fromfile_prefix_chars='@')
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
1332 argument_signatures = [
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
1333 Sig('-a'),
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
1334 Sig('x'),
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
1335 Sig('y', nargs='+'),
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
1336 ]
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
1337 failures = ['', '-b', 'X', '@invalid', '@missing']
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
1338 successes = [
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
1339 ('X Y', NS(a=None, x='X', y=['Y'])),
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
1340 ('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
1341 ('@hello X', NS(a=None, x='hello world!', y=['X'])),
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
1342 ('X @hello', NS(a=None, x='X', y=['hello world!'])),
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
1343 ('-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
1344 ('X @recursive Z -a B', NS(a='B', x='X', y=['hello world!', 'Z'])),
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
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
1347
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
1348 class TestArgumentsFromFileConverter(TempDirMixin, ParserTestCase):
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
1349 """Test reading arguments from a file"""
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
1350
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
1351 def setUp(self):
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
1352 super(TestArgumentsFromFileConverter, self).setUp()
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
1353 file_texts = [
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
1354 ('hello', 'hello world!\n'),
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
1355 ]
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
1356 for path, text in file_texts:
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
1357 file = open(path, 'w')
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
1358 file.write(text)
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
1359 file.close()
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
1360
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
1361 class FromFileConverterArgumentParser(ErrorRaisingArgumentParser):
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 def convert_arg_line_to_args(self, arg_line):
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
1364 for arg in arg_line.split():
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
1365 if not arg.strip():
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
1366 continue
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
1367 yield arg
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
1368 parser_class = FromFileConverterArgumentParser
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
1369 parser_signature = Sig(fromfile_prefix_chars='@')
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
1370 argument_signatures = [
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
1371 Sig('y', nargs='+'),
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
1372 ]
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
1373 failures = []
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
1374 successes = [
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
1375 ('@hello X', NS(y=['hello', 'world!', 'X'])),
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
1376 ]
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
1377
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 # Type conversion tests
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
1381 # =====================
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
1382
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
1383 class TestFileTypeRepr(TestCase):
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
1384
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
1385 def test_r(self):
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
1386 type = argparse.FileType('r')
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
1387 self.assertEqual("FileType('r')", repr(type))
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 def test_wb_1(self):
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
1390 type = argparse.FileType('wb', 1)
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
1391 self.assertEqual("FileType('wb', 1)", repr(type))
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
1392
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 RFile(object):
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
1395 seen = {}
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
1396
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
1397 def __init__(self, name):
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
1398 self.name = name
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
1399
59423
0802bc973b32 eliminate py3k warnings in argparse
Benjamin Peterson <benjamin@python.org>
parents: 59284
diff changeset
1400 __hash__ = None
0802bc973b32 eliminate py3k warnings in argparse
Benjamin Peterson <benjamin@python.org>
parents: 59284
diff changeset
1401
59267
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
1402 def __eq__(self, other):
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
1403 if other in self.seen:
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
1404 text = self.seen[other]
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
1405 else:
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
1406 text = self.seen[other] = other.read()
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
1407 other.close()
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
1408 if not isinstance(text, str):
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
1409 text = text.decode('ascii')
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
1410 return self.name == other.name == text
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 class TestFileTypeR(TempDirMixin, ParserTestCase):
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
1414 """Test the FileType option/argument type for reading files"""
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 def setUp(self):
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
1417 super(TestFileTypeR, self).setUp()
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
1418 for file_name in ['foo', 'bar']:
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
1419 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
1420 file.write(file_name)
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
1421 file.close()
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
1422
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
1423 argument_signatures = [
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
1424 Sig('-x', type=argparse.FileType()),
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
1425 Sig('spam', type=argparse.FileType('r')),
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 failures = ['-x', '-x bar']
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
1428 successes = [
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
1429 ('foo', NS(x=None, spam=RFile('foo'))),
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
1430 ('-x foo bar', NS(x=RFile('foo'), spam=RFile('bar'))),
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
1431 ('bar -x foo', NS(x=RFile('foo'), spam=RFile('bar'))),
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
1432 ('-x - -', NS(x=sys.stdin, spam=sys.stdin)),
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
1433 ]
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
1434
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
1435
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
1436 class TestFileTypeRB(TempDirMixin, ParserTestCase):
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
1437 """Test the FileType option/argument type for reading files"""
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
1438
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
1439 def setUp(self):
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
1440 super(TestFileTypeRB, self).setUp()
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
1441 for file_name in ['foo', 'bar']:
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
1442 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
1443 file.write(file_name)
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
1444 file.close()
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 argument_signatures = [
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
1447 Sig('-x', type=argparse.FileType('rb')),
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
1448 Sig('spam', type=argparse.FileType('rb')),
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
1449 ]
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
1450 failures = ['-x', '-x bar']
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
1451 successes = [
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
1452 ('foo', NS(x=None, spam=RFile('foo'))),
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
1453 ('-x foo bar', NS(x=RFile('foo'), spam=RFile('bar'))),
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
1454 ('bar -x foo', NS(x=RFile('foo'), spam=RFile('bar'))),
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
1455 ('-x - -', NS(x=sys.stdin, spam=sys.stdin)),
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
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
1458
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
1459 class WFile(object):
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
1460 seen = set()
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
1461
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
1462 def __init__(self, name):
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
1463 self.name = name
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
1464
59423
0802bc973b32 eliminate py3k warnings in argparse
Benjamin Peterson <benjamin@python.org>
parents: 59284
diff changeset
1465 __hash__ = None
0802bc973b32 eliminate py3k warnings in argparse
Benjamin Peterson <benjamin@python.org>
parents: 59284
diff changeset
1466
59267
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
1467 def __eq__(self, other):
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
1468 if other not in self.seen:
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
1469 text = 'Check that file is writable.'
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
1470 if 'b' in other.mode:
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
1471 text = text.encode('ascii')
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
1472 other.write(text)
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
1473 other.close()
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
1474 self.seen.add(other)
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
1475 return self.name == other.name
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
1476
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
1477
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
1478 class TestFileTypeW(TempDirMixin, ParserTestCase):
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
1479 """Test the FileType option/argument type for writing files"""
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
1480
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
1481 argument_signatures = [
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
1482 Sig('-x', type=argparse.FileType('w')),
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
1483 Sig('spam', type=argparse.FileType('w')),
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
1484 ]
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
1485 failures = ['-x', '-x bar']
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
1486 successes = [
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
1487 ('foo', NS(x=None, spam=WFile('foo'))),
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
1488 ('-x foo bar', NS(x=WFile('foo'), spam=WFile('bar'))),
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
1489 ('bar -x foo', NS(x=WFile('foo'), spam=WFile('bar'))),
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
1490 ('-x - -', NS(x=sys.stdout, spam=sys.stdout)),
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
1491 ]
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
1492
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
1493
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
1494 class TestFileTypeWB(TempDirMixin, ParserTestCase):
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
1495
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
1496 argument_signatures = [
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
1497 Sig('-x', type=argparse.FileType('wb')),
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
1498 Sig('spam', type=argparse.FileType('wb')),
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
1499 ]
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
1500 failures = ['-x', '-x bar']
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
1501 successes = [
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
1502 ('foo', NS(x=None, spam=WFile('foo'))),
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
1503 ('-x foo bar', NS(x=WFile('foo'), spam=WFile('bar'))),
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
1504 ('bar -x foo', NS(x=WFile('foo'), spam=WFile('bar'))),
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
1505 ('-x - -', NS(x=sys.stdout, spam=sys.stdout)),
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
1506 ]
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 class TestTypeCallable(ParserTestCase):
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
1510 """Test some callables as option/argument types"""
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
1511
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
1512 argument_signatures = [
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
1513 Sig('--eggs', type=complex),
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
1514 Sig('spam', type=float),
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
1515 ]
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
1516 failures = ['a', '42j', '--eggs a', '--eggs 2i']
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
1517 successes = [
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
1518 ('--eggs=42 42', NS(eggs=42, spam=42.0)),
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
1519 ('--eggs 2j -- -1.5', NS(eggs=2j, spam=-1.5)),
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
1520 ('1024.675', NS(eggs=None, spam=1024.675)),
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
1521 ]
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
1522
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
1523
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
1524 class TestTypeUserDefined(ParserTestCase):
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
1525 """Test a user-defined option/argument type"""
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
1526
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
1527 class MyType(TestCase):
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
1528
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
1529 def __init__(self, value):
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
1530 self.value = value
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
1531
59423
0802bc973b32 eliminate py3k warnings in argparse
Benjamin Peterson <benjamin@python.org>
parents: 59284
diff changeset
1532 __hash__ = None
0802bc973b32 eliminate py3k warnings in argparse
Benjamin Peterson <benjamin@python.org>
parents: 59284
diff changeset
1533
59267
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
1534 def __eq__(self, other):
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
1535 return (type(self), self.value) == (type(other), other.value)
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
1536
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
1537 argument_signatures = [
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
1538 Sig('-x', type=MyType),
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
1539 Sig('spam', type=MyType),
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
1540 ]
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
1541 failures = []
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
1542 successes = [
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
1543 ('a -x b', NS(x=MyType('b'), spam=MyType('a'))),
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
1544 ('-xf g', NS(x=MyType('f'), spam=MyType('g'))),
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
1545 ]
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
1546
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
1547
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
1548 class TestTypeClassicClass(ParserTestCase):
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
1549 """Test a classic class type"""
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 class C:
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
1552
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
1553 def __init__(self, value):
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
1554 self.value = value
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
1555
59423
0802bc973b32 eliminate py3k warnings in argparse
Benjamin Peterson <benjamin@python.org>
parents: 59284
diff changeset
1556 __hash__ = None
0802bc973b32 eliminate py3k warnings in argparse
Benjamin Peterson <benjamin@python.org>
parents: 59284
diff changeset
1557
59267
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
1558 def __eq__(self, other):
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
1559 return (type(self), self.value) == (type(other), other.value)
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
1560
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
1561 argument_signatures = [
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
1562 Sig('-x', type=C),
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
1563 Sig('spam', type=C),
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 failures = []
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
1566 successes = [
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
1567 ('a -x b', NS(x=C('b'), spam=C('a'))),
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
1568 ('-xf g', NS(x=C('f'), spam=C('g'))),
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
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
1571
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
1572 class TestTypeRegistration(TestCase):
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
1573 """Test a user-defined type by registering it"""
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
1574
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
1575 def test(self):
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
1576
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
1577 def get_my_type(string):
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
1578 return 'my_type{%s}' % string
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 parser = argparse.ArgumentParser()
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
1581 parser.register('type', 'my_type', get_my_type)
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
1582 parser.add_argument('-x', type='my_type')
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
1583 parser.add_argument('y', type='my_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 self.assertEqual(parser.parse_args('1'.split()),
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
1586 NS(x=None, y='my_type{1}'))
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
1587 self.assertEqual(parser.parse_args('-x 1 42'.split()),
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
1588 NS(x='my_type{1}', y='my_type{42}'))
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
1589
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
1590
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
1591 # ============
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
1592 # Action tests
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
1593 # ============
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 class TestActionUserDefined(ParserTestCase):
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
1596 """Test a user-defined option/argument action"""
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
1597
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
1598 class OptionalAction(argparse.Action):
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
1599
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
1600 def __call__(self, parser, namespace, value, option_string=None):
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
1601 try:
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
1602 # check destination and option string
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
1603 assert self.dest == 'spam', 'dest: %s' % self.dest
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
1604 assert option_string == '-s', 'flag: %s' % option_string
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
1605 # when option is before argument, badger=2, and when
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
1606 # option is after argument, badger=<whatever was set>
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
1607 expected_ns = NS(spam=0.25)
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
1608 if value in [0.125, 0.625]:
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
1609 expected_ns.badger = 2
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
1610 elif value in [2.0]:
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
1611 expected_ns.badger = 84
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
1612 else:
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
1613 raise AssertionError('value: %s' % value)
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
1614 assert expected_ns == namespace, ('expected %s, got %s' %
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
1615 (expected_ns, namespace))
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
1616 except AssertionError:
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
1617 e = sys.exc_info()[1]
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
1618 raise ArgumentParserError('opt_action failed: %s' % e)
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
1619 setattr(namespace, 'spam', value)
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
1620
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
1621 class PositionalAction(argparse.Action):
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 def __call__(self, parser, namespace, value, option_string=None):
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
1624 try:
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
1625 assert option_string is None, ('option_string: %s' %
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
1626 option_string)
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
1627 # check destination
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
1628 assert self.dest == 'badger', 'dest: %s' % self.dest
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
1629 # when argument is before option, spam=0.25, and when
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
1630 # option is after argument, spam=<whatever was set>
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
1631 expected_ns = NS(badger=2)
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
1632 if value in [42, 84]:
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
1633 expected_ns.spam = 0.25
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
1634 elif value in [1]:
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
1635 expected_ns.spam = 0.625
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
1636 elif value in [2]:
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
1637 expected_ns.spam = 0.125
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
1638 else:
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
1639 raise AssertionError('value: %s' % value)
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
1640 assert expected_ns == namespace, ('expected %s, got %s' %
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
1641 (expected_ns, namespace))
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
1642 except AssertionError:
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
1643 e = sys.exc_info()[1]
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
1644 raise ArgumentParserError('arg_action failed: %s' % e)
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
1645 setattr(namespace, 'badger', value)
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
1646
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
1647 argument_signatures = [
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
1648 Sig('-s', dest='spam', action=OptionalAction,
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
1649 type=float, default=0.25),
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
1650 Sig('badger', action=PositionalAction,
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
1651 type=int, nargs='?', default=2),
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 failures = []
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
1654 successes = [
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
1655 ('-s0.125', NS(spam=0.125, badger=2)),
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
1656 ('42', NS(spam=0.25, badger=42)),
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
1657 ('-s 0.625 1', NS(spam=0.625, badger=1)),
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
1658 ('84 -s2', NS(spam=2.0, badger=84)),
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
1659 ]
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
1660
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
1661
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
1662 class TestActionRegistration(TestCase):
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
1663 """Test a user-defined action supplied by registering it"""
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
1664
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
1665 class MyAction(argparse.Action):
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
1666
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
1667 def __call__(self, parser, namespace, values, option_string=None):
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
1668 setattr(namespace, self.dest, 'foo[%s]' % values)
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
1669
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
1670 def test(self):
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
1671
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
1672 parser = argparse.ArgumentParser()
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
1673 parser.register('action', 'my_action', self.MyAction)
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
1674 parser.add_argument('badger', action='my_action')
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
1675
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
1676 self.assertEqual(parser.parse_args(['1']), NS(badger='foo[1]'))
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
1677 self.assertEqual(parser.parse_args(['42']), NS(badger='foo[42]'))
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
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 # Subparsers tests
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
1682 # ================
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
1683
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
1684 class TestAddSubparsers(TestCase):
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
1685 """Test the add_subparsers method"""
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
1686
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
1687 def assertArgumentParserError(self, *args, **kwargs):
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
1688 self.assertRaises(ArgumentParserError, *args, **kwargs)
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
1689
63691
23c089dc5cff Merged revisions 83675 via svnmerge from
R. David Murray <rdmurray@bitdance.com>
parents: 61879
diff changeset
1690 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
1691 # 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
1692 if prefix_chars:
23c089dc5cff Merged revisions 83675 via svnmerge from
R. David Murray <rdmurray@bitdance.com>
parents: 61879
diff changeset
1693 parser = ErrorRaisingArgumentParser(
23c089dc5cff Merged revisions 83675 via svnmerge from
R. David Murray <rdmurray@bitdance.com>
parents: 61879
diff changeset
1694 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
1695 parser.add_argument(
23c089dc5cff Merged revisions 83675 via svnmerge from
R. David Murray <rdmurray@bitdance.com>
parents: 61879
diff changeset
1696 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
1697 else:
23c089dc5cff Merged revisions 83675 via svnmerge from
R. David Murray <rdmurray@bitdance.com>
parents: 61879
diff changeset
1698 parser = ErrorRaisingArgumentParser(
23c089dc5cff Merged revisions 83675 via svnmerge from
R. David Murray <rdmurray@bitdance.com>
parents: 61879
diff changeset
1699 prog='PROG', description='main description')
23c089dc5cff Merged revisions 83675 via svnmerge from
R. David Murray <rdmurray@bitdance.com>
parents: 61879
diff changeset
1700 parser.add_argument(
23c089dc5cff Merged revisions 83675 via svnmerge from
R. David Murray <rdmurray@bitdance.com>
parents: 61879
diff changeset
1701 '--foo', action='store_true', help='foo help')
59267
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
1702 parser.add_argument(
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
1703 'bar', type=float, help='bar help')
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 # check that only one subparsers argument can be added
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
1706 subparsers = parser.add_subparsers(help='command help')
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
1707 self.assertArgumentParserError(parser.add_subparsers)
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
1708
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
1709 # add first sub-parser
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
1710 parser1_kwargs = dict(description='1 description')
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
1711 if subparser_help:
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
1712 parser1_kwargs['help'] = '1 help'
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
1713 parser1 = subparsers.add_parser('1', **parser1_kwargs)
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
1714 parser1.add_argument('-w', type=int, help='w help')
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
1715 parser1.add_argument('x', choices='abc', help='x help')
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
1716
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
1717 # add second sub-parser
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
1718 parser2_kwargs = dict(description='2 description')
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
1719 if subparser_help:
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
1720 parser2_kwargs['help'] = '2 help'
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
1721 parser2 = subparsers.add_parser('2', **parser2_kwargs)
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
1722 parser2.add_argument('-y', choices='123', help='y help')
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
1723 parser2.add_argument('z', type=complex, nargs='*', help='z help')
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 # return the main parser
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
1726 return parser
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 setUp(self):
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
1729 self.parser = self._get_parser()
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
1730 self.command_help_parser = self._get_parser(subparser_help=True)
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
1731
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
1732 def test_parse_args_failures(self):
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
1733 # check some failure cases:
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
1734 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
1735 '0.5 1 -y', '0.5 2 -w']:
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
1736 args = args_str.split()
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
1737 self.assertArgumentParserError(self.parser.parse_args, args)
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 def test_parse_args(self):
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
1740 # check some non-failure cases:
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
1741 self.assertEqual(
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
1742 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
1743 NS(foo=False, bar=0.5, w=7, x='b'),
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 self.assertEqual(
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
1746 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
1747 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
1748 )
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
1749 self.assertEqual(
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
1750 self.parser.parse_args('--foo 0.125 1 c'.split()),
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
1751 NS(foo=True, bar=0.125, w=None, x='c'),
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
1752 )
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
1753
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
1754 def test_dest(self):
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
1755 parser = ErrorRaisingArgumentParser()
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
1756 parser.add_argument('--foo', action='store_true')
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
1757 subparsers = parser.add_subparsers(dest='bar')
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
1758 parser1 = subparsers.add_parser('1')
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
1759 parser1.add_argument('baz')
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
1760 self.assertEqual(NS(foo=False, bar='1', baz='2'),
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
1761 parser.parse_args('1 2'.split()))
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 def test_help(self):
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
1764 self.assertEqual(self.parser.format_usage(),
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
1765 'usage: PROG [-h] [--foo] bar {1,2} ...\n')
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
1766 self.assertEqual(self.parser.format_help(), textwrap.dedent('''\
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
1767 usage: PROG [-h] [--foo] bar {1,2} ...
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
1768
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
1769 main description
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
1770
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
1771 positional arguments:
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
1772 bar bar help
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
1773 {1,2} command 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 optional arguments:
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
1776 -h, --help show this help message and exit
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
1777 --foo foo help
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
1778 '''))
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
1779
63691
23c089dc5cff Merged revisions 83675 via svnmerge from
R. David Murray <rdmurray@bitdance.com>
parents: 61879
diff changeset
1780 def test_help_extra_prefix_chars(self):
23c089dc5cff Merged revisions 83675 via svnmerge from
R. David Murray <rdmurray@bitdance.com>
parents: 61879
diff changeset
1781 # 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
1782 parser = self._get_parser(prefix_chars='+:-')
23c089dc5cff Merged revisions 83675 via svnmerge from
R. David Murray <rdmurray@bitdance.com>
parents: 61879
diff changeset
1783 self.assertEqual(parser.format_usage(),
23c089dc5cff Merged revisions 83675 via svnmerge from
R. David Murray <rdmurray@bitdance.com>
parents: 61879
diff changeset
1784 'usage: PROG [-h] [++foo] bar {1,2} ...\n')
23c089dc5cff Merged revisions 83675 via svnmerge from
R. David Murray <rdmurray@bitdance.com>
parents: 61879
diff changeset
1785 self.assertEqual(parser.format_help(), textwrap.dedent('''\
23c089dc5cff Merged revisions 83675 via svnmerge from
R. David Murray <rdmurray@bitdance.com>
parents: 61879
diff changeset
1786 usage: PROG [-h] [++foo] bar {1,2} ...
23c089dc5cff Merged revisions 83675 via svnmerge from
R. David Murray <rdmurray@bitdance.com>
parents: 61879
diff changeset
1787
23c089dc5cff Merged revisions 83675 via svnmerge from
R. David Murray <rdmurray@bitdance.com>
parents: 61879
diff changeset
1788 main description
23c089dc5cff Merged revisions 83675 via svnmerge from
R. David Murray <rdmurray@bitdance.com>
parents: 61879
diff changeset
1789
23c089dc5cff Merged revisions 83675 via svnmerge from
R. David Murray <rdmurray@bitdance.com>
parents: 61879
diff changeset
1790 positional arguments:
23c089dc5cff Merged revisions 83675 via svnmerge from
R. David Murray <rdmurray@bitdance.com>
parents: 61879
diff changeset
1791 bar bar help
23c089dc5cff Merged revisions 83675 via svnmerge from
R. David Murray <rdmurray@bitdance.com>
parents: 61879
diff changeset
1792 {1,2} command help
23c089dc5cff Merged revisions 83675 via svnmerge from
R. David Murray <rdmurray@bitdance.com>
parents: 61879
diff changeset
1793
23c089dc5cff Merged revisions 83675 via svnmerge from
R. David Murray <rdmurray@bitdance.com>
parents: 61879
diff changeset
1794 optional arguments:
23c089dc5cff Merged revisions 83675 via svnmerge from
R. David Murray <rdmurray@bitdance.com>
parents: 61879
diff changeset
1795 -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
1796 ++foo foo help
23c089dc5cff Merged revisions 83675 via svnmerge from
R. David Murray <rdmurray@bitdance.com>
parents: 61879
diff changeset
1797 '''))
23c089dc5cff Merged revisions 83675 via svnmerge from
R. David Murray <rdmurray@bitdance.com>
parents: 61879
diff changeset
1798
23c089dc5cff Merged revisions 83675 via svnmerge from
R. David Murray <rdmurray@bitdance.com>
parents: 61879
diff changeset
1799
23c089dc5cff Merged revisions 83675 via svnmerge from
R. David Murray <rdmurray@bitdance.com>
parents: 61879
diff changeset
1800 def test_help_alternate_prefix_chars(self):
23c089dc5cff Merged revisions 83675 via svnmerge from
R. David Murray <rdmurray@bitdance.com>
parents: 61879
diff changeset
1801 parser = self._get_parser(prefix_chars='+:/')
23c089dc5cff Merged revisions 83675 via svnmerge from
R. David Murray <rdmurray@bitdance.com>
parents: 61879
diff changeset
1802 self.assertEqual(parser.format_usage(),
23c089dc5cff Merged revisions 83675 via svnmerge from
R. David Murray <rdmurray@bitdance.com>
parents: 61879
diff changeset
1803 'usage: PROG [+h] [++foo] bar {1,2} ...\n')
23c089dc5cff Merged revisions 83675 via svnmerge from
R. David Murray <rdmurray@bitdance.com>
parents: 61879
diff changeset
1804 self.assertEqual(parser.format_help(), textwrap.dedent('''\
23c089dc5cff Merged revisions 83675 via svnmerge from
R. David Murray <rdmurray@bitdance.com>
parents: 61879
diff changeset
1805 usage: PROG [+h] [++foo] bar {1,2} ...
23c089dc5cff Merged revisions 83675 via svnmerge from
R. David Murray <rdmurray@bitdance.com>
parents: 61879
diff changeset
1806
23c089dc5cff Merged revisions 83675 via svnmerge from
R. David Murray <rdmurray@bitdance.com>
parents: 61879
diff changeset
1807 main description
23c089dc5cff Merged revisions 83675 via svnmerge from
R. David Murray <rdmurray@bitdance.com>
parents: 61879
diff changeset
1808
23c089dc5cff Merged revisions 83675 via svnmerge from
R. David Murray <rdmurray@bitdance.com>
parents: 61879
diff changeset
1809 positional arguments:
23c089dc5cff Merged revisions 83675 via svnmerge from
R. David Murray <rdmurray@bitdance.com>
parents: 61879
diff changeset
1810 bar bar help
23c089dc5cff Merged revisions 83675 via svnmerge from
R. David Murray <rdmurray@bitdance.com>
parents: 61879
diff changeset
1811 {1,2} command help
23c089dc5cff Merged revisions 83675 via svnmerge from
R. David Murray <rdmurray@bitdance.com>
parents: 61879
diff changeset
1812
23c089dc5cff Merged revisions 83675 via svnmerge from
R. David Murray <rdmurray@bitdance.com>
parents: 61879
diff changeset
1813 optional arguments:
23c089dc5cff Merged revisions 83675 via svnmerge from
R. David Murray <rdmurray@bitdance.com>
parents: 61879
diff changeset
1814 +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
1815 ++foo foo help
23c089dc5cff Merged revisions 83675 via svnmerge from
R. David Murray <rdmurray@bitdance.com>
parents: 61879
diff changeset
1816 '''))
23c089dc5cff Merged revisions 83675 via svnmerge from
R. David Murray <rdmurray@bitdance.com>
parents: 61879
diff changeset
1817
59267
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
1818 def test_parser_command_help(self):
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
1819 self.assertEqual(self.command_help_parser.format_usage(),
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
1820 'usage: PROG [-h] [--foo] bar {1,2} ...\n')
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
1821 self.assertEqual(self.command_help_parser.format_help(),
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
1822 textwrap.dedent('''\
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
1823 usage: PROG [-h] [--foo] bar {1,2} ...
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
1824
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
1825 main description
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
1826
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
1827 positional arguments:
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
1828 bar bar help
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
1829 {1,2} command help
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
1830 1 1 help
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
1831 2 2 help
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
1832
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
1833 optional arguments:
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
1834 -h, --help show this help message and exit
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
1835 --foo foo help
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
1836 '''))
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
1837
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
1838 def test_subparser_title_help(self):
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
1839 parser = ErrorRaisingArgumentParser(prog='PROG',
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
1840 description='main description')
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
1841 parser.add_argument('--foo', action='store_true', help='foo help')
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
1842 parser.add_argument('bar', help='bar help')
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
1843 subparsers = parser.add_subparsers(title='subcommands',
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
1844 description='command help',
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
1845 help='additional text')
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
1846 parser1 = subparsers.add_parser('1')
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
1847 parser2 = subparsers.add_parser('2')
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
1848 self.assertEqual(parser.format_usage(),
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
1849 'usage: PROG [-h] [--foo] bar {1,2} ...\n')
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
1850 self.assertEqual(parser.format_help(), textwrap.dedent('''\
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
1851 usage: PROG [-h] [--foo] bar {1,2} ...
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
1852
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
1853 main description
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
1854
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
1855 positional arguments:
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
1856 bar bar help
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
1857
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
1858 optional arguments:
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
1859 -h, --help show this help message and exit
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
1860 --foo foo help
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 subcommands:
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
1863 command help
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
1864
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
1865 {1,2} additional text
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
1866 '''))
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 def _test_subparser_help(self, args_str, expected_help):
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
1869 try:
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
1870 self.parser.parse_args(args_str.split())
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
1871 except ArgumentParserError:
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
1872 err = sys.exc_info()[1]
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
1873 if err.stdout != expected_help:
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
1874 print(repr(expected_help))
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
1875 print(repr(err.stdout))
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
1876 self.assertEqual(err.stdout, expected_help)
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
1877
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
1878 def test_subparser1_help(self):
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
1879 self._test_subparser_help('5.0 1 -h', textwrap.dedent('''\
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
1880 usage: PROG bar 1 [-h] [-w W] {a,b,c}
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
1881
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
1882 1 description
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
1883
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
1884 positional arguments:
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
1885 {a,b,c} x help
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
1886
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
1887 optional arguments:
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
1888 -h, --help show this help message and exit
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
1889 -w W w help
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
1890 '''))
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
1891
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
1892 def test_subparser2_help(self):
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
1893 self._test_subparser_help('5.0 2 -h', textwrap.dedent('''\
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
1894 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
1895
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
1896 2 description
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
1897
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
1898 positional arguments:
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
1899 z z help
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
1900
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
1901 optional arguments:
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
1902 -h, --help show this help message and exit
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
1903 -y {1,2,3} y help
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
1904 '''))
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
1905
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
1906 # ============
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
1907 # Groups tests
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
1908 # ============
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
1909
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
1910 class TestPositionalsGroups(TestCase):
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
1911 """Tests that order of group positionals matches construction order"""
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
1912
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
1913 def test_nongroup_first(self):
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
1914 parser = ErrorRaisingArgumentParser()
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
1915 parser.add_argument('foo')
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
1916 group = parser.add_argument_group('g')
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
1917 group.add_argument('bar')
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
1918 parser.add_argument('baz')
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
1919 expected = NS(foo='1', bar='2', baz='3')
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
1920 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
1921 self.assertEqual(expected, result)
59267
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
1922
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
1923 def test_group_first(self):
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
1924 parser = ErrorRaisingArgumentParser()
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
1925 group = parser.add_argument_group('xxx')
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
1926 group.add_argument('foo')
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
1927 parser.add_argument('bar')
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
1928 parser.add_argument('baz')
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
1929 expected = NS(foo='1', bar='2', baz='3')
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
1930 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
1931 self.assertEqual(expected, result)
59267
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
1932
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
1933 def test_interleaved_groups(self):
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
1934 parser = ErrorRaisingArgumentParser()
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
1935 group = parser.add_argument_group('xxx')
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
1936 parser.add_argument('foo')
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
1937 group.add_argument('bar')
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
1938 parser.add_argument('baz')
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
1939 group = parser.add_argument_group('yyy')
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
1940 group.add_argument('frell')
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
1941 expected = NS(foo='1', bar='2', baz='3', frell='4')
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
1942 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
1943 self.assertEqual(expected, result)
59267
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
1944
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
1945 # ===================
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
1946 # Parent parser tests
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
1947 # ===================
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 class TestParentParsers(TestCase):
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
1950 """Tests that parsers can be created with parent parsers"""
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 def assertArgumentParserError(self, *args, **kwargs):
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
1953 self.assertRaises(ArgumentParserError, *args, **kwargs)
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
1954
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
1955 def setUp(self):
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
1956 self.wxyz_parent = ErrorRaisingArgumentParser(add_help=False)
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
1957 self.wxyz_parent.add_argument('--w')
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
1958 x_group = self.wxyz_parent.add_argument_group('x')
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
1959 x_group.add_argument('-y')
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
1960 self.wxyz_parent.add_argument('z')
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 self.abcd_parent = ErrorRaisingArgumentParser(add_help=False)
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
1963 self.abcd_parent.add_argument('a')
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
1964 self.abcd_parent.add_argument('-b')
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
1965 c_group = self.abcd_parent.add_argument_group('c')
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
1966 c_group.add_argument('--d')
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
1967
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
1968 self.w_parent = ErrorRaisingArgumentParser(add_help=False)
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
1969 self.w_parent.add_argument('--w')
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
1970
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
1971 self.z_parent = ErrorRaisingArgumentParser(add_help=False)
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
1972 self.z_parent.add_argument('z')
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
1973
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
1974 # parents with mutually exclusive groups
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
1975 self.ab_mutex_parent = ErrorRaisingArgumentParser(add_help=False)
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
1976 group = self.ab_mutex_parent.add_mutually_exclusive_group()
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
1977 group.add_argument('-a', action='store_true')
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
1978 group.add_argument('-b', action='store_true')
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
1979
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
1980 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
1981
59267
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
1982 def test_single_parent(self):
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
1983 parser = ErrorRaisingArgumentParser(parents=[self.wxyz_parent])
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
1984 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
1985 NS(w='3', y='1', z='2'))
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
1986
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
1987 def test_single_parent_mutex(self):
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
1988 self._test_mutex_ab(self.ab_mutex_parent.parse_args)
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
1989 parser = ErrorRaisingArgumentParser(parents=[self.ab_mutex_parent])
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
1990 self._test_mutex_ab(parser.parse_args)
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 def test_single_granparent_mutex(self):
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
1993 parents = [self.ab_mutex_parent]
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
1994 parser = ErrorRaisingArgumentParser(add_help=False, parents=parents)
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
1995 parser = ErrorRaisingArgumentParser(parents=[parser])
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
1996 self._test_mutex_ab(parser.parse_args)
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
1997
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
1998 def _test_mutex_ab(self, parse_args):
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
1999 self.assertEqual(parse_args([]), NS(a=False, b=False))
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
2000 self.assertEqual(parse_args(['-a']), NS(a=True, b=False))
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
2001 self.assertEqual(parse_args(['-b']), NS(a=False, b=True))
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
2002 self.assertArgumentParserError(parse_args, ['-a', '-b'])
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
2003 self.assertArgumentParserError(parse_args, ['-b', '-a'])
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
2004 self.assertArgumentParserError(parse_args, ['-c'])
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
2005 self.assertArgumentParserError(parse_args, ['-a', '-c'])
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
2006 self.assertArgumentParserError(parse_args, ['-b', '-c'])
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
2007
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
2008 def test_multiple_parents(self):
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
2009 parents = [self.abcd_parent, self.wxyz_parent]
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
2010 parser = ErrorRaisingArgumentParser(parents=parents)
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
2011 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
2012 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
2013
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
2014 def test_multiple_parents_mutex(self):
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
2015 parents = [self.ab_mutex_parent, self.wxyz_parent]
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
2016 parser = ErrorRaisingArgumentParser(parents=parents)
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
2017 self.assertEqual(parser.parse_args('-a --w 2 3'.split()),
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
2018 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
2019 self.assertArgumentParserError(
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
2020 parser.parse_args, '-a --w 2 3 -b'.split())
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
2021 self.assertArgumentParserError(
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
2022 parser.parse_args, '-a -b --w 2 3'.split())
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
2023
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
2024 def test_conflicting_parents(self):
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
2025 self.assertRaises(
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
2026 argparse.ArgumentError,
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
2027 argparse.ArgumentParser,
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
2028 parents=[self.w_parent, self.wxyz_parent])
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
2029
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
2030 def test_conflicting_parents_mutex(self):
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
2031 self.assertRaises(
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
2032 argparse.ArgumentError,
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
2033 argparse.ArgumentParser,
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
2034 parents=[self.abcd_parent, self.ab_mutex_parent])
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
2035
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
2036 def test_same_argument_name_parents(self):
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
2037 parents = [self.wxyz_parent, self.z_parent]
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
2038 parser = ErrorRaisingArgumentParser(parents=parents)
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
2039 self.assertEqual(parser.parse_args('1 2'.split()),
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
2040 NS(w=None, y=None, z='2'))
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 def test_subparser_parents(self):
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
2043 parser = ErrorRaisingArgumentParser()
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
2044 subparsers = parser.add_subparsers()
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
2045 abcde_parser = subparsers.add_parser('bar', parents=[self.abcd_parent])
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
2046 abcde_parser.add_argument('e')
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
2047 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
2048 NS(a='3', b='1', d='2', e='4'))
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
2049
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
2050 def test_subparser_parents_mutex(self):
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
2051 parser = ErrorRaisingArgumentParser()
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
2052 subparsers = parser.add_subparsers()
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
2053 parents = [self.ab_mutex_parent]
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
2054 abc_parser = subparsers.add_parser('foo', parents=parents)
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
2055 c_group = abc_parser.add_argument_group('c_group')
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
2056 c_group.add_argument('c')
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
2057 parents = [self.wxyz_parent, self.ab_mutex_parent]
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
2058 wxyzabe_parser = subparsers.add_parser('bar', parents=parents)
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
2059 wxyzabe_parser.add_argument('e')
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
2060 self.assertEqual(parser.parse_args('foo -a 4'.split()),
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
2061 NS(a=True, b=False, c='4'))
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
2062 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
2063 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
2064 self.assertArgumentParserError(
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
2065 parser.parse_args, 'foo -a -b 4'.split())
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
2066 self.assertArgumentParserError(
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
2067 parser.parse_args, 'bar -b -a 4'.split())
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 def test_parent_help(self):
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
2070 parents = [self.abcd_parent, self.wxyz_parent]
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
2071 parser = ErrorRaisingArgumentParser(parents=parents)
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
2072 parser_help = parser.format_help()
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
2073 self.assertEqual(parser_help, textwrap.dedent('''\
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
2074 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
2075
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
2076 positional arguments:
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
2077 a
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
2078 z
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
2079
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
2080 optional arguments:
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
2081 -h, --help show this help message and exit
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
2082 -b B
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
2083 --w W
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
2084
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
2085 c:
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
2086 --d D
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
2087
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
2088 x:
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
2089 -y Y
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
2090 '''.format(self.main_program)))
59267
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
2091
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
2092 def test_groups_parents(self):
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
2093 parent = ErrorRaisingArgumentParser(add_help=False)
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
2094 g = parent.add_argument_group(title='g', description='gd')
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
2095 g.add_argument('-w')
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
2096 g.add_argument('-x')
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
2097 m = parent.add_mutually_exclusive_group()
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
2098 m.add_argument('-y')
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
2099 m.add_argument('-z')
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
2100 parser = ErrorRaisingArgumentParser(parents=[parent])
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
2101
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
2102 self.assertRaises(ArgumentParserError, parser.parse_args,
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
2103 ['-y', 'Y', '-z', 'Z'])
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
2104
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
2105 parser_help = parser.format_help()
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
2106 self.assertEqual(parser_help, textwrap.dedent('''\
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
2107 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
2108
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
2109 optional arguments:
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
2110 -h, --help show this help message and exit
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
2111 -y Y
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
2112 -z Z
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
2113
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
2114 g:
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
2115 gd
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
2116
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
2117 -w W
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
2118 -x X
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
2119 '''.format(self.main_program)))
59267
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
2120
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
2121 # ==============================
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
2122 # Mutually exclusive group tests
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
2123 # ==============================
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 class TestMutuallyExclusiveGroupErrors(TestCase):
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
2126
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
2127 def test_invalid_add_argument_group(self):
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
2128 parser = ErrorRaisingArgumentParser()
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
2129 raises = self.assertRaises
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
2130 raises(TypeError, parser.add_mutually_exclusive_group, title='foo')
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
2131
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
2132 def test_invalid_add_argument(self):
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
2133 parser = ErrorRaisingArgumentParser()
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
2134 group = parser.add_mutually_exclusive_group()
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
2135 add_argument = group.add_argument
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
2136 raises = self.assertRaises
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
2137 raises(ValueError, add_argument, '--foo', required=True)
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
2138 raises(ValueError, add_argument, 'bar')
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
2139 raises(ValueError, add_argument, 'bar', nargs='+')
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
2140 raises(ValueError, add_argument, 'bar', nargs=1)
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
2141 raises(ValueError, add_argument, 'bar', nargs=argparse.PARSER)
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
2142
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
2143
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
2144 class MEMixin(object):
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
2145
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
2146 def test_failures_when_not_required(self):
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
2147 parse_args = self.get_parser(required=False).parse_args
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
2148 error = ArgumentParserError
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
2149 for args_string in self.failures:
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
2150 self.assertRaises(error, parse_args, args_string.split())
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
2151
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
2152 def test_failures_when_required(self):
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
2153 parse_args = self.get_parser(required=True).parse_args
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
2154 error = ArgumentParserError
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
2155 for args_string in self.failures + ['']:
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
2156 self.assertRaises(error, parse_args, args_string.split())
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
2157
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
2158 def test_successes_when_not_required(self):
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
2159 parse_args = self.get_parser(required=False).parse_args
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
2160 successes = self.successes + self.successes_when_not_required
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
2161 for args_string, expected_ns in successes:
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
2162 actual_ns = parse_args(args_string.split())
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
2163 self.assertEqual(actual_ns, expected_ns)
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
2164
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
2165 def test_successes_when_required(self):
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
2166 parse_args = self.get_parser(required=True).parse_args
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
2167 for args_string, expected_ns in self.successes:
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
2168 actual_ns = parse_args(args_string.split())
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
2169 self.assertEqual(actual_ns, expected_ns)
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
2170
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
2171 def test_usage_when_not_required(self):
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
2172 format_usage = self.get_parser(required=False).format_usage
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
2173 expected_usage = self.usage_when_not_required
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
2174 self.assertEqual(format_usage(), textwrap.dedent(expected_usage))
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 def test_usage_when_required(self):
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
2177 format_usage = self.get_parser(required=True).format_usage
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
2178 expected_usage = self.usage_when_required
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
2179 self.assertEqual(format_usage(), textwrap.dedent(expected_usage))
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 def test_help_when_not_required(self):
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
2182 format_help = self.get_parser(required=False).format_help
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
2183 help = self.usage_when_not_required + self.help
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
2184 self.assertEqual(format_help(), textwrap.dedent(help))
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
2185
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
2186 def test_help_when_required(self):
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
2187 format_help = self.get_parser(required=True).format_help
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
2188 help = self.usage_when_required + self.help
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
2189 self.assertEqual(format_help(), textwrap.dedent(help))
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
2190
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
2191
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
2192 class TestMutuallyExclusiveSimple(MEMixin, TestCase):
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
2193
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
2194 def get_parser(self, required=None):
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
2195 parser = ErrorRaisingArgumentParser(prog='PROG')
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
2196 group = parser.add_mutually_exclusive_group(required=required)
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
2197 group.add_argument('--bar', help='bar help')
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
2198 group.add_argument('--baz', nargs='?', const='Z', help='baz help')
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
2199 return parser
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 failures = ['--bar X --baz Y', '--bar X --baz']
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
2202 successes = [
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
2203 ('--bar X', NS(bar='X', baz=None)),
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
2204 ('--bar X --bar Z', NS(bar='Z', baz=None)),
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
2205 ('--baz Y', NS(bar=None, baz='Y')),
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
2206 ('--baz', NS(bar=None, baz='Z')),
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
2207 ]
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
2208 successes_when_not_required = [
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
2209 ('', NS(bar=None, baz=None)),
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
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
2212 usage_when_not_required = '''\
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
2213 usage: PROG [-h] [--bar BAR | --baz [BAZ]]
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
2214 '''
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
2215 usage_when_required = '''\
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
2216 usage: PROG [-h] (--bar BAR | --baz [BAZ])
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 help = '''\
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
2219
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
2220 optional arguments:
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
2221 -h, --help show this help message and exit
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
2222 --bar BAR bar help
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
2223 --baz [BAZ] baz help
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
2224 '''
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
2225
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
2226
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
2227 class TestMutuallyExclusiveLong(MEMixin, TestCase):
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 get_parser(self, required=None):
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
2230 parser = ErrorRaisingArgumentParser(prog='PROG')
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
2231 parser.add_argument('--abcde', help='abcde help')
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
2232 parser.add_argument('--fghij', help='fghij help')
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
2233 group = parser.add_mutually_exclusive_group(required=required)
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
2234 group.add_argument('--klmno', help='klmno help')
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
2235 group.add_argument('--pqrst', help='pqrst help')
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
2236 return parser
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
2237
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
2238 failures = ['--klmno X --pqrst Y']
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
2239 successes = [
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
2240 ('--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
2241 ('--abcde Y --klmno X',
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
2242 NS(abcde='Y', fghij=None, klmno='X', pqrst=None)),
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
2243 ('--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
2244 ('--pqrst X --fghij Y',
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
2245 NS(abcde=None, fghij='Y', klmno=None, pqrst='X')),
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
2246 ]
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
2247 successes_when_not_required = [
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
2248 ('', NS(abcde=None, fghij=None, klmno=None, pqrst=None)),
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
2249 ]
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
2250
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
2251 usage_when_not_required = '''\
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
2252 usage: PROG [-h] [--abcde ABCDE] [--fghij FGHIJ]
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
2253 [--klmno KLMNO | --pqrst PQRST]
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
2254 '''
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
2255 usage_when_required = '''\
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
2256 usage: PROG [-h] [--abcde ABCDE] [--fghij FGHIJ]
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
2257 (--klmno KLMNO | --pqrst PQRST)
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
2258 '''
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
2259 help = '''\
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
2260
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
2261 optional arguments:
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
2262 -h, --help show this help message and exit
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
2263 --abcde ABCDE abcde help
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
2264 --fghij FGHIJ fghij help
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
2265 --klmno KLMNO klmno help
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
2266 --pqrst PQRST pqrst help
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
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
2269
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
2270 class TestMutuallyExclusiveFirstSuppressed(MEMixin, TestCase):
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
2271
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
2272 def get_parser(self, required):
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
2273 parser = ErrorRaisingArgumentParser(prog='PROG')
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
2274 group = parser.add_mutually_exclusive_group(required=required)
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
2275 group.add_argument('-x', help=argparse.SUPPRESS)
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
2276 group.add_argument('-y', action='store_false', help='y help')
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
2277 return parser
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
2278
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
2279 failures = ['-x X -y']
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
2280 successes = [
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
2281 ('-x X', NS(x='X', y=True)),
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
2282 ('-x X -x Y', NS(x='Y', y=True)),
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
2283 ('-y', NS(x=None, y=False)),
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
2284 ]
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
2285 successes_when_not_required = [
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
2286 ('', NS(x=None, y=True)),
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
2287 ]
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
2288
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
2289 usage_when_not_required = '''\
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
2290 usage: PROG [-h] [-y]
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 usage_when_required = '''\
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
2293 usage: PROG [-h] -y
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
2294 '''
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
2295 help = '''\
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 optional arguments:
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
2298 -h, --help show this help message and exit
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
2299 -y y help
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
2300 '''
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
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
2303 class TestMutuallyExclusiveManySuppressed(MEMixin, TestCase):
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
2304
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
2305 def get_parser(self, required):
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
2306 parser = ErrorRaisingArgumentParser(prog='PROG')
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
2307 group = parser.add_mutually_exclusive_group(required=required)
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
2308 add = group.add_argument
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
2309 add('--spam', action='store_true', help=argparse.SUPPRESS)
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
2310 add('--badger', action='store_false', help=argparse.SUPPRESS)
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
2311 add('--bladder', help=argparse.SUPPRESS)
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
2312 return parser
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
2313
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
2314 failures = [
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
2315 '--spam --badger',
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
2316 '--badger --bladder B',
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
2317 '--bladder B --spam',
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
2318 ]
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
2319 successes = [
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
2320 ('--spam', NS(spam=True, badger=True, bladder=None)),
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
2321 ('--badger', NS(spam=False, badger=False, bladder=None)),
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
2322 ('--bladder B', NS(spam=False, badger=True, bladder='B')),
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
2323 ('--spam --spam', NS(spam=True, badger=True, bladder=None)),
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
2324 ]
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
2325 successes_when_not_required = [
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
2326 ('', NS(spam=False, badger=True, bladder=None)),
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
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
2329 usage_when_required = usage_when_not_required = '''\
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
2330 usage: PROG [-h]
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
2331 '''
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
2332 help = '''\
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 optional arguments:
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
2335 -h, --help show this help message and exit
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
2336 '''
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
2337
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
2338
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
2339 class TestMutuallyExclusiveOptionalAndPositional(MEMixin, TestCase):
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 def get_parser(self, required):
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
2342 parser = ErrorRaisingArgumentParser(prog='PROG')
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
2343 group = parser.add_mutually_exclusive_group(required=required)
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
2344 group.add_argument('--foo', action='store_true', help='FOO')
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
2345 group.add_argument('--spam', help='SPAM')
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
2346 group.add_argument('badger', nargs='*', default='X', help='BADGER')
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
2347 return parser
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
2348
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
2349 failures = [
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
2350 '--foo --spam S',
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
2351 '--spam S X',
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
2352 'X --foo',
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
2353 'X Y Z --spam S',
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
2354 '--foo X Y',
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
2355 ]
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
2356 successes = [
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
2357 ('--foo', NS(foo=True, spam=None, badger='X')),
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
2358 ('--spam S', NS(foo=False, spam='S', badger='X')),
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
2359 ('X', NS(foo=False, spam=None, badger=['X'])),
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
2360 ('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
2361 ]
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
2362 successes_when_not_required = [
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
2363 ('', NS(foo=False, spam=None, badger='X')),
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
2364 ]
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 usage_when_not_required = '''\
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
2367 usage: PROG [-h] [--foo | --spam SPAM | badger [badger ...]]
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
2368 '''
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
2369 usage_when_required = '''\
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
2370 usage: PROG [-h] (--foo | --spam SPAM | badger [badger ...])
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
2371 '''
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
2372 help = '''\
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
2373
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
2374 positional arguments:
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
2375 badger BADGER
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 --foo FOO
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
2380 --spam SPAM SPAM
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
2381 '''
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
2382
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 class TestMutuallyExclusiveOptionalsMixed(MEMixin, TestCase):
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 def get_parser(self, required):
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
2387 parser = ErrorRaisingArgumentParser(prog='PROG')
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
2388 parser.add_argument('-x', action='store_true', help='x help')
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
2389 group = parser.add_mutually_exclusive_group(required=required)
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
2390 group.add_argument('-a', action='store_true', help='a help')
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
2391 group.add_argument('-b', action='store_true', help='b help')
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
2392 parser.add_argument('-y', action='store_true', help='y help')
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
2393 group.add_argument('-c', action='store_true', help='c help')
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
2394 return parser
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
2395
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
2396 failures = ['-a -b', '-b -c', '-a -c', '-a -b -c']
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
2397 successes = [
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
2398 ('-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
2399 ('-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
2400 ('-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
2401 ('-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
2402 ('-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
2403 ('-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
2404 ]
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
2405 successes_when_not_required = [
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
2406 ('', 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
2407 ('-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
2408 ('-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
2409 ]
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 usage_when_required = usage_when_not_required = '''\
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
2412 usage: PROG [-h] [-x] [-a] [-b] [-y] [-c]
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
2413 '''
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
2414 help = '''\
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
2415
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
2416 optional arguments:
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
2417 -h, --help show this help message and exit
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
2418 -x x help
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
2419 -a a help
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
2420 -b b help
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
2421 -y y help
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
2422 -c c help
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
2423 '''
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
2424
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
2425
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
2426 class TestMutuallyExclusiveOptionalsAndPositionalsMixed(MEMixin, TestCase):
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
2427
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
2428 def get_parser(self, required):
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
2429 parser = ErrorRaisingArgumentParser(prog='PROG')
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
2430 parser.add_argument('x', help='x help')
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
2431 parser.add_argument('-y', action='store_true', help='y help')
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
2432 group = parser.add_mutually_exclusive_group(required=required)
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
2433 group.add_argument('a', nargs='?', help='a help')
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
2434 group.add_argument('-b', action='store_true', help='b help')
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
2435 group.add_argument('-c', action='store_true', help='c help')
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
2436 return parser
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
2437
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
2438 failures = ['X A -b', '-b -c', '-c X A']
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
2439 successes = [
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
2440 ('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
2441 ('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
2442 ('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
2443 ('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
2444 ('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
2445 ]
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
2446 successes_when_not_required = [
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
2447 ('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
2448 ('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
2449 ]
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
2450
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
2451 usage_when_required = usage_when_not_required = '''\
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
2452 usage: PROG [-h] [-y] [-b] [-c] x [a]
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 help = '''\
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
2455
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
2456 positional arguments:
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
2457 x x help
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
2458 a a help
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
2459
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
2460 optional arguments:
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
2461 -h, --help show this help message and exit
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
2462 -y y help
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
2463 -b b help
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
2464 -c c help
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
2465 '''
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
2466
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
2467 # =================================================
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
2468 # Mutually exclusive group in parent parser tests
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
2469 # =================================================
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
2470
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
2471 class MEPBase(object):
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
2472
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
2473 def get_parser(self, required=None):
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
2474 parent = super(MEPBase, self).get_parser(required=required)
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
2475 parser = ErrorRaisingArgumentParser(
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
2476 prog=parent.prog, add_help=False, parents=[parent])
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
2477 return parser
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
2478
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
2479
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
2480 class TestMutuallyExclusiveGroupErrorsParent(
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
2481 MEPBase, TestMutuallyExclusiveGroupErrors):
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
2482 pass
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
2483
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 class TestMutuallyExclusiveSimpleParent(
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
2486 MEPBase, TestMutuallyExclusiveSimple):
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
2487 pass
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
2488
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 class TestMutuallyExclusiveLongParent(
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
2491 MEPBase, TestMutuallyExclusiveLong):
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
2492 pass
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
2493
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
2494
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
2495 class TestMutuallyExclusiveFirstSuppressedParent(
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
2496 MEPBase, TestMutuallyExclusiveFirstSuppressed):
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
2497 pass
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 TestMutuallyExclusiveManySuppressedParent(
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
2501 MEPBase, TestMutuallyExclusiveManySuppressed):
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
2502 pass
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
2503
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
2504
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
2505 class TestMutuallyExclusiveOptionalAndPositionalParent(
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
2506 MEPBase, TestMutuallyExclusiveOptionalAndPositional):
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
2507 pass
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
2508
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
2509
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
2510 class TestMutuallyExclusiveOptionalsMixedParent(
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
2511 MEPBase, TestMutuallyExclusiveOptionalsMixed):
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
2512 pass
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
2513
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
2514
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
2515 class TestMutuallyExclusiveOptionalsAndPositionalsMixedParent(
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
2516 MEPBase, TestMutuallyExclusiveOptionalsAndPositionalsMixed):
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
2517 pass
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
2518
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
2519 # =================
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
2520 # Set default tests
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
2521 # =================
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
2522
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
2523 class TestSetDefaults(TestCase):
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
2524
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
2525 def test_set_defaults_no_args(self):
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
2526 parser = ErrorRaisingArgumentParser()
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
2527 parser.set_defaults(x='foo')
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
2528 parser.set_defaults(y='bar', z=1)
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
2529 self.assertEqual(NS(x='foo', y='bar', z=1),
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
2530 parser.parse_args([]))
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
2531 self.assertEqual(NS(x='foo', y='bar', z=1),
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
2532 parser.parse_args([], NS()))
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
2533 self.assertEqual(NS(x='baz', y='bar', z=1),
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
2534 parser.parse_args([], NS(x='baz')))
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
2535 self.assertEqual(NS(x='baz', y='bar', z=2),
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
2536 parser.parse_args([], NS(x='baz', z=2)))
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
2537
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
2538 def test_set_defaults_with_args(self):
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
2539 parser = ErrorRaisingArgumentParser()
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
2540 parser.set_defaults(x='foo', y='bar')
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
2541 parser.add_argument('-x', default='xfoox')
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
2542 self.assertEqual(NS(x='xfoox', y='bar'),
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
2543 parser.parse_args([]))
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
2544 self.assertEqual(NS(x='xfoox', y='bar'),
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
2545 parser.parse_args([], NS()))
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
2546 self.assertEqual(NS(x='baz', y='bar'),
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
2547 parser.parse_args([], NS(x='baz')))
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
2548 self.assertEqual(NS(x='1', y='bar'),
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
2549 parser.parse_args('-x 1'.split()))
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
2550 self.assertEqual(NS(x='1', y='bar'),
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
2551 parser.parse_args('-x 1'.split(), NS()))
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
2552 self.assertEqual(NS(x='1', y='bar'),
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
2553 parser.parse_args('-x 1'.split(), NS(x='baz')))
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
2554
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
2555 def test_set_defaults_subparsers(self):
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
2556 parser = ErrorRaisingArgumentParser()
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
2557 parser.set_defaults(x='foo')
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
2558 subparsers = parser.add_subparsers()
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
2559 parser_a = subparsers.add_parser('a')
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
2560 parser_a.set_defaults(y='bar')
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
2561 self.assertEqual(NS(x='foo', y='bar'),
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
2562 parser.parse_args('a'.split()))
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
2563
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
2564 def test_set_defaults_parents(self):
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
2565 parent = ErrorRaisingArgumentParser(add_help=False)
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
2566 parent.set_defaults(x='foo')
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
2567 parser = ErrorRaisingArgumentParser(parents=[parent])
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
2568 self.assertEqual(NS(x='foo'), parser.parse_args([]))
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
2569
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
2570 def test_set_defaults_same_as_add_argument(self):
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
2571 parser = ErrorRaisingArgumentParser()
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
2572 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
2573 parser.add_argument('-w')
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
2574 parser.add_argument('-x', default='XX')
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
2575 parser.add_argument('y', nargs='?')
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
2576 parser.add_argument('z', nargs='?', default='ZZ')
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
2577
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
2578 # defaults set previously
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
2579 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
2580 parser.parse_args([]))
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
2581
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
2582 # reset defaults
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
2583 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
2584 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
2585 parser.parse_args([]))
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
2586
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
2587 def test_set_defaults_same_as_add_argument_group(self):
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
2588 parser = ErrorRaisingArgumentParser()
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
2589 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
2590 group = parser.add_argument_group('foo')
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
2591 group.add_argument('-w')
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
2592 group.add_argument('-x', default='XX')
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
2593 group.add_argument('y', nargs='?')
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
2594 group.add_argument('z', nargs='?', default='ZZ')
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
2595
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
2596
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
2597 # defaults set previously
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
2598 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
2599 parser.parse_args([]))
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
2600
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
2601 # reset defaults
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
2602 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
2603 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
2604 parser.parse_args([]))
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 # Get default tests
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
2608 # =================
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 class TestGetDefault(TestCase):
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 def test_get_default(self):
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
2613 parser = ErrorRaisingArgumentParser()
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
2614 self.assertEqual(None, parser.get_default("foo"))
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
2615 self.assertEqual(None, parser.get_default("bar"))
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
2616
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
2617 parser.add_argument("--foo")
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
2618 self.assertEqual(None, parser.get_default("foo"))
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
2619 self.assertEqual(None, parser.get_default("bar"))
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
2620
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
2621 parser.add_argument("--bar", type=int, default=42)
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
2622 self.assertEqual(None, parser.get_default("foo"))
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
2623 self.assertEqual(42, parser.get_default("bar"))
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
2624
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
2625 parser.set_defaults(foo="badger")
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
2626 self.assertEqual("badger", parser.get_default("foo"))
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
2627 self.assertEqual(42, parser.get_default("bar"))
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 # ==========================
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
2630 # Namespace 'contains' tests
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
2631 # ==========================
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
2632
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
2633 class TestNamespaceContainsSimple(TestCase):
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 def test_empty(self):
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
2636 ns = argparse.Namespace()
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
2637 self.assertEquals('' in ns, False)
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
2638 self.assertEquals('' not in ns, True)
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
2639 self.assertEquals('x' in ns, False)
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 def test_non_empty(self):
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
2642 ns = argparse.Namespace(x=1, y=2)
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
2643 self.assertEquals('x' in ns, True)
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
2644 self.assertEquals('x' not in ns, False)
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
2645 self.assertEquals('y' in ns, True)
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
2646 self.assertEquals('' in ns, False)
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
2647 self.assertEquals('xx' in ns, False)
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
2648 self.assertEquals('z' in ns, False)
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 # Help formatting tests
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
2652 # =====================
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
2653
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
2654 class TestHelpFormattingMetaclass(type):
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 def __init__(cls, name, bases, bodydict):
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
2657 if name == 'HelpTestCase':
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
2658 return
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 class AddTests(object):
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
2661
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
2662 def __init__(self, test_class, func_suffix, std_name):
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
2663 self.func_suffix = func_suffix
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
2664 self.std_name = std_name
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 for test_func in [self.test_format,
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
2667 self.test_print,
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
2668 self.test_print_file]:
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
2669 test_name = '%s_%s' % (test_func.__name__, func_suffix)
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 def test_wrapper(self, test_func=test_func):
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
2672 test_func(self)
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
2673 try:
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
2674 test_wrapper.__name__ = test_name
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
2675 except TypeError:
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
2676 pass
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
2677 setattr(test_class, test_name, test_wrapper)
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 def _get_parser(self, tester):
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
2680 parser = argparse.ArgumentParser(
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
2681 *tester.parser_signature.args,
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
2682 **tester.parser_signature.kwargs)
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
2683 for argument_sig in tester.argument_signatures:
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
2684 parser.add_argument(*argument_sig.args,
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
2685 **argument_sig.kwargs)
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
2686 group_signatures = tester.argument_group_signatures
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
2687 for group_sig, argument_sigs in group_signatures:
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
2688 group = parser.add_argument_group(*group_sig.args,
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
2689 **group_sig.kwargs)
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
2690 for argument_sig in argument_sigs:
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
2691 group.add_argument(*argument_sig.args,
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
2692 **argument_sig.kwargs)
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
2693 return parser
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
2694
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
2695 def _test(self, tester, parser_text):
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
2696 expected_text = getattr(tester, self.func_suffix)
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
2697 expected_text = textwrap.dedent(expected_text)
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
2698 if expected_text != parser_text:
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
2699 print(repr(expected_text))
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
2700 print(repr(parser_text))
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
2701 for char1, char2 in zip(expected_text, parser_text):
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
2702 if char1 != char2:
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
2703 print('first diff: %r %r' % (char1, char2))
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
2704 break
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
2705 tester.assertEqual(expected_text, parser_text)
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
2706
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
2707 def test_format(self, tester):
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
2708 parser = self._get_parser(tester)
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
2709 format = getattr(parser, 'format_%s' % self.func_suffix)
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
2710 self._test(tester, format())
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
2711
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
2712 def test_print(self, tester):
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
2713 parser = self._get_parser(tester)
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
2714 print_ = getattr(parser, 'print_%s' % self.func_suffix)
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
2715 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
2716 setattr(sys, self.std_name, StdIOBuffer())
59267
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
2717 try:
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
2718 print_()
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
2719 parser_text = getattr(sys, self.std_name).getvalue()
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
2720 finally:
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
2721 setattr(sys, self.std_name, old_stream)
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
2722 self._test(tester, parser_text)
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
2723
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
2724 def test_print_file(self, tester):
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
2725 parser = self._get_parser(tester)
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
2726 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
2727 sfile = StdIOBuffer()
59267
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
2728 print_(sfile)
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
2729 parser_text = sfile.getvalue()
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
2730 self._test(tester, parser_text)
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
2731
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
2732 # add tests for {format,print}_{usage,help,version}
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
2733 for func_suffix, std_name in [('usage', 'stdout'),
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
2734 ('help', 'stdout'),
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
2735 ('version', 'stderr')]:
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
2736 AddTests(cls, func_suffix, std_name)
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 bases = TestCase,
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
2739 HelpTestCase = TestHelpFormattingMetaclass('HelpTestCase', bases, {})
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
2740
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
2741
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
2742 class TestHelpBiggerOptionals(HelpTestCase):
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
2743 """Make sure that argument help aligns when options are longer"""
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
2744
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
2745 parser_signature = Sig(prog='PROG', description='DESCRIPTION',
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
2746 epilog='EPILOG', version='0.1')
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
2747 argument_signatures = [
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
2748 Sig('-x', action='store_true', help='X HELP'),
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
2749 Sig('--y', help='Y HELP'),
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
2750 Sig('foo', help='FOO HELP'),
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
2751 Sig('bar', help='BAR HELP'),
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 argument_group_signatures = []
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
2754 usage = '''\
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
2755 usage: PROG [-h] [-v] [-x] [--y Y] foo bar
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 help = usage + '''\
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
2758
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
2759 DESCRIPTION
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
2760
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
2761 positional arguments:
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
2762 foo FOO HELP
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
2763 bar BAR HELP
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 optional arguments:
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
2766 -h, --help show this help message and exit
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
2767 -v, --version show program's version number and exit
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
2768 -x X HELP
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
2769 --y Y Y HELP
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
2770
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
2771 EPILOG
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 version = '''\
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
2774 0.1
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
2775 '''
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
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
2778 class TestHelpBiggerOptionalGroups(HelpTestCase):
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
2779 """Make sure that argument help aligns when options are longer"""
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_signature = Sig(prog='PROG', description='DESCRIPTION',
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
2782 epilog='EPILOG', version='0.1')
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
2783 argument_signatures = [
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
2784 Sig('-x', action='store_true', help='X HELP'),
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
2785 Sig('--y', help='Y HELP'),
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
2786 Sig('foo', help='FOO HELP'),
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
2787 Sig('bar', help='BAR HELP'),
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 argument_group_signatures = [
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
2790 (Sig('GROUP TITLE', description='GROUP DESCRIPTION'), [
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
2791 Sig('baz', help='BAZ HELP'),
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
2792 Sig('-z', nargs='+', help='Z HELP')]),
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
2793 ]
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
2794 usage = '''\
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
2795 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
2796 '''
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
2797 help = usage + '''\
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
2798
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
2799 DESCRIPTION
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
2800
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
2801 positional arguments:
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
2802 foo FOO HELP
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
2803 bar BAR HELP
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
2804
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
2805 optional arguments:
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
2806 -h, --help show this help message and exit
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
2807 -v, --version show program's version number and exit
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
2808 -x X HELP
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
2809 --y Y Y HELP
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
2810
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
2811 GROUP TITLE:
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
2812 GROUP DESCRIPTION
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
2813
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
2814 baz BAZ HELP
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
2815 -z Z [Z ...] Z HELP
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
2816
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
2817 EPILOG
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
2818 '''
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
2819 version = '''\
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
2820 0.1
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
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
2823
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
2824 class TestHelpBiggerPositionals(HelpTestCase):
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
2825 """Make sure that help aligns when arguments are longer"""
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 parser_signature = Sig(usage='USAGE', description='DESCRIPTION')
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
2828 argument_signatures = [
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
2829 Sig('-x', action='store_true', help='X HELP'),
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
2830 Sig('--y', help='Y HELP'),
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
2831 Sig('ekiekiekifekang', help='EKI HELP'),
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
2832 Sig('bar', help='BAR HELP'),
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
2833 ]
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
2834 argument_group_signatures = []
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
2835 usage = '''\
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
2836 usage: USAGE
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
2837 '''
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
2838 help = usage + '''\
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
2839
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
2840 DESCRIPTION
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
2841
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
2842 positional arguments:
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
2843 ekiekiekifekang EKI HELP
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
2844 bar BAR HELP
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
2845
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
2846 optional arguments:
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
2847 -h, --help show this help message and exit
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
2848 -x X HELP
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
2849 --y Y Y HELP
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
2850 '''
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
2851
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
2852 version = ''
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
2853
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
2854
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
2855 class TestHelpReformatting(HelpTestCase):
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
2856 """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
2857
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
2858 parser_signature = Sig(
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
2859 prog='PROG',
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
2860 description=' oddly formatted\n'
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
2861 'description\n'
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
2862 '\n'
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
2863 'that is so long that it should go onto multiple '
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
2864 'lines when wrapped')
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
2865 argument_signatures = [
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
2866 Sig('-x', metavar='XX', help='oddly\n'
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
2867 ' formatted -x help'),
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
2868 Sig('y', metavar='yyy', help='normal y help'),
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
2869 ]
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
2870 argument_group_signatures = [
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
2871 (Sig('title', description='\n'
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
2872 ' oddly formatted group\n'
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
2873 '\n'
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
2874 'description'),
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
2875 [Sig('-a', action='store_true',
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
2876 help=' oddly \n'
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
2877 'formatted -a help \n'
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
2878 ' again, so long that it should be wrapped over '
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
2879 'multiple lines')]),
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
2880 ]
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
2881 usage = '''\
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
2882 usage: PROG [-h] [-x XX] [-a] yyy
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
2883 '''
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
2884 help = usage + '''\
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 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
2887 multiple
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
2888 lines when wrapped
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
2889
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
2890 positional arguments:
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
2891 yyy normal y help
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
2892
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
2893 optional arguments:
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
2894 -h, --help show this help message and exit
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
2895 -x XX oddly formatted -x help
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
2896
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
2897 title:
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
2898 oddly formatted group description
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 -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
2901 be wrapped
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
2902 over multiple lines
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 version = ''
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
2905
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 class TestHelpWrappingShortNames(HelpTestCase):
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
2908 """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
2909
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
2910 parser_signature = Sig(prog='PROG', description= 'D\nD' * 30)
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
2911 argument_signatures = [
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
2912 Sig('-x', metavar='XX', help='XHH HX' * 20),
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
2913 Sig('y', metavar='yyy', help='YH YH' * 20),
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 (Sig('ALPHAS'), [
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
2917 Sig('-a', action='store_true', help='AHHH HHA' * 10)]),
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 usage = '''\
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
2920 usage: PROG [-h] [-x XX] [-a] yyy
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
2921 '''
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
2922 help = usage + '''\
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
2923
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
2924 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
2925 DD DD DD
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
2926 DD DD DD DD D
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
2927
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
2928 positional arguments:
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
2929 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
2930 YHYH YHYH
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
2931 YHYH YHYH YHYH YHYH YHYH YHYH YHYH YH
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 optional arguments:
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
2934 -h, --help show this help message and exit
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
2935 -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
2936 HXXHH HXXHH
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
2937 HXXHH HXXHH HXXHH HXXHH HXXHH HXXHH HXXHH HXXHH HXXHH HX
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 ALPHAS:
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
2940 -a AHHH HHAAHHH HHAAHHH HHAAHHH HHAAHHH HHAAHHH HHAAHHH \
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
2941 HHAAHHH
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
2942 HHAAHHH HHAAHHH HHA
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
2943 '''
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
2944 version = ''
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
2945
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
2946
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
2947 class TestHelpWrappingLongNames(HelpTestCase):
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
2948 """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
2949
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
2950 parser_signature = Sig(usage='USAGE', description= 'D D' * 30,
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
2951 version='V V'*30)
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
2952 argument_signatures = [
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
2953 Sig('-x', metavar='X' * 25, help='XH XH' * 20),
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
2954 Sig('y', metavar='y' * 25, help='YH YH' * 20),
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 argument_group_signatures = [
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
2957 (Sig('ALPHAS'), [
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
2958 Sig('-a', metavar='A' * 25, help='AH AH' * 20),
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
2959 Sig('z', metavar='z' * 25, help='ZH ZH' * 20)]),
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 usage = '''\
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
2962 usage: USAGE
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
2963 '''
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
2964 help = usage + '''\
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
2965
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
2966 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
2967 DD DD DD
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
2968 DD DD DD DD D
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
2969
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
2970 positional arguments:
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
2971 yyyyyyyyyyyyyyyyyyyyyyyyy
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
2972 YH YHYH YHYH YHYH YHYH YHYH YHYH YHYH YHYH \
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
2973 YHYH YHYH
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
2974 YHYH YHYH YHYH YHYH YHYH YHYH YHYH YHYH YHYH YH
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 optional arguments:
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
2977 -h, --help show this help message and exit
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
2978 -v, --version show program's version number and exit
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
2979 -x XXXXXXXXXXXXXXXXXXXXXXXXX
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
2980 XH XHXH XHXH XHXH XHXH XHXH XHXH XHXH XHXH \
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
2981 XHXH XHXH
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
2982 XHXH XHXH XHXH XHXH XHXH XHXH XHXH XHXH XHXH XH
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 ALPHAS:
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
2985 -a AAAAAAAAAAAAAAAAAAAAAAAAA
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
2986 AH AHAH AHAH AHAH AHAH AHAH AHAH AHAH AHAH \
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
2987 AHAH AHAH
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
2988 AHAH AHAH AHAH AHAH AHAH AHAH AHAH AHAH AHAH AH
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
2989 zzzzzzzzzzzzzzzzzzzzzzzzz
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
2990 ZH ZHZH ZHZH ZHZH ZHZH ZHZH ZHZH ZHZH ZHZH \
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
2991 ZHZH ZHZH
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
2992 ZHZH ZHZH ZHZH ZHZH ZHZH ZHZH ZHZH ZHZH ZHZH ZH
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
2993 '''
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
2994 version = '''\
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
2995 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
2996 VV VV VV
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
2997 VV VV VV VV V
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
2998 '''
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
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
3001 class TestHelpUsage(HelpTestCase):
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
3002 """Test basic usage messages"""
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 parser_signature = Sig(prog='PROG')
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
3005 argument_signatures = [
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
3006 Sig('-w', nargs='+', help='w'),
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
3007 Sig('-x', nargs='*', help='x'),
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
3008 Sig('a', help='a'),
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
3009 Sig('b', help='b', nargs=2),
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
3010 Sig('c', help='c', nargs='?'),
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
3011 ]
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
3012 argument_group_signatures = [
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
3013 (Sig('group'), [
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
3014 Sig('-y', nargs='?', help='y'),
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
3015 Sig('-z', nargs=3, help='z'),
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
3016 Sig('d', help='d', nargs='*'),
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
3017 Sig('e', help='e', nargs='+'),
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
3018 ])
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 usage = '''\
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
3021 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
3022 a b b [c] [d [d ...]] e [e ...]
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
3023 '''
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
3024 help = usage + '''\
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
3025
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
3026 positional arguments:
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
3027 a a
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
3028 b b
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
3029 c c
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
3030
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
3031 optional arguments:
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
3032 -h, --help show this help message and exit
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
3033 -w W [W ...] w
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
3034 -x [X [X ...]] x
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
3035
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
3036 group:
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
3037 -y [Y] y
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
3038 -z Z Z Z z
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
3039 d d
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
3040 e e
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
3041 '''
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
3042 version = ''
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
3043
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
3044
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
3045 class TestHelpOnlyUserGroups(HelpTestCase):
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
3046 """Test basic usage messages"""
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 parser_signature = Sig(prog='PROG', add_help=False)
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
3049 argument_signatures = []
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
3050 argument_group_signatures = [
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
3051 (Sig('xxxx'), [
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
3052 Sig('-x', help='x'),
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
3053 Sig('a', help='a'),
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 (Sig('yyyy'), [
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
3056 Sig('b', help='b'),
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
3057 Sig('-y', help='y'),
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 ]
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
3060 usage = '''\
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
3061 usage: PROG [-x X] [-y Y] a b
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
3062 '''
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
3063 help = usage + '''\
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
3064
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
3065 xxxx:
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
3066 -x X x
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
3067 a a
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 yyyy:
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
3070 b b
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
3071 -y Y y
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
3072 '''
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
3073 version = ''
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
3074
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
3075
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
3076 class TestHelpUsageLongProg(HelpTestCase):
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
3077 """Test usage messages where the prog is long"""
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
3078
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
3079 parser_signature = Sig(prog='P' * 60)
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
3080 argument_signatures = [
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
3081 Sig('-w', metavar='W'),
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
3082 Sig('-x', metavar='X'),
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
3083 Sig('a'),
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
3084 Sig('b'),
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 argument_group_signatures = []
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
3087 usage = '''\
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
3088 usage: PPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPP
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
3089 [-h] [-w W] [-x X] a b
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
3090 '''
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
3091 help = usage + '''\
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
3092
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
3093 positional arguments:
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
3094 a
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
3095 b
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
3096
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
3097 optional arguments:
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
3098 -h, --help show this help message and exit
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
3099 -w W
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
3100 -x X
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
3101 '''
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
3102 version = ''
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
3103
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
3104
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
3105 class TestHelpUsageLongProgOptionsWrap(HelpTestCase):
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
3106 """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
3107
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
3108 parser_signature = Sig(prog='P' * 60)
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
3109 argument_signatures = [
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
3110 Sig('-w', metavar='W' * 25),
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
3111 Sig('-x', metavar='X' * 25),
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
3112 Sig('-y', metavar='Y' * 25),
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
3113 Sig('-z', metavar='Z' * 25),
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
3114 Sig('a'),
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
3115 Sig('b'),
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
3116 ]
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
3117 argument_group_signatures = []
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
3118 usage = '''\
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
3119 usage: PPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPP
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
3120 [-h] [-w WWWWWWWWWWWWWWWWWWWWWWWWW] \
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
3121 [-x XXXXXXXXXXXXXXXXXXXXXXXXX]
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
3122 [-y YYYYYYYYYYYYYYYYYYYYYYYYY] [-z ZZZZZZZZZZZZZZZZZZZZZZZZZ]
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
3123 a b
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
3124 '''
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
3125 help = usage + '''\
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
3126
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
3127 positional arguments:
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
3128 a
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
3129 b
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
3130
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
3131 optional arguments:
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
3132 -h, --help show this help message and exit
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
3133 -w WWWWWWWWWWWWWWWWWWWWWWWWW
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
3134 -x XXXXXXXXXXXXXXXXXXXXXXXXX
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
3135 -y YYYYYYYYYYYYYYYYYYYYYYYYY
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
3136 -z ZZZZZZZZZZZZZZZZZZZZZZZZZ
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 version = ''
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
3139
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
3140
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
3141 class TestHelpUsageLongProgPositionalsWrap(HelpTestCase):
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
3142 """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
3143
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
3144 parser_signature = Sig(prog='P' * 60, add_help=False)
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
3145 argument_signatures = [
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
3146 Sig('a' * 25),
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
3147 Sig('b' * 25),
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
3148 Sig('c' * 25),
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
3149 ]
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
3150 argument_group_signatures = []
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
3151 usage = '''\
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
3152 usage: PPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPP
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
3153 aaaaaaaaaaaaaaaaaaaaaaaaa bbbbbbbbbbbbbbbbbbbbbbbbb
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
3154 ccccccccccccccccccccccccc
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 help = usage + '''\
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
3157
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
3158 positional arguments:
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
3159 aaaaaaaaaaaaaaaaaaaaaaaaa
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
3160 bbbbbbbbbbbbbbbbbbbbbbbbb
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
3161 ccccccccccccccccccccccccc
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 version = ''
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
3164
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 class TestHelpUsageOptionalsWrap(HelpTestCase):
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
3167 """Test usage messages where the optionals wrap"""
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
3168
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
3169 parser_signature = Sig(prog='PROG')
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
3170 argument_signatures = [
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
3171 Sig('-w', metavar='W' * 25),
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
3172 Sig('-x', metavar='X' * 25),
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
3173 Sig('-y', metavar='Y' * 25),
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
3174 Sig('-z', metavar='Z' * 25),
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
3175 Sig('a'),
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
3176 Sig('b'),
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
3177 Sig('c'),
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
3178 ]
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
3179 argument_group_signatures = []
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
3180 usage = '''\
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
3181 usage: PROG [-h] [-w WWWWWWWWWWWWWWWWWWWWWWWWW] \
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
3182 [-x XXXXXXXXXXXXXXXXXXXXXXXXX]
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
3183 [-y YYYYYYYYYYYYYYYYYYYYYYYYY] \
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
3184 [-z ZZZZZZZZZZZZZZZZZZZZZZZZZ]
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
3185 a b c
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
3186 '''
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
3187 help = usage + '''\
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
3188
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
3189 positional arguments:
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
3190 a
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
3191 b
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
3192 c
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
3193
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
3194 optional arguments:
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
3195 -h, --help show this help message and exit
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
3196 -w WWWWWWWWWWWWWWWWWWWWWWWWW
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
3197 -x XXXXXXXXXXXXXXXXXXXXXXXXX
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
3198 -y YYYYYYYYYYYYYYYYYYYYYYYYY
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
3199 -z ZZZZZZZZZZZZZZZZZZZZZZZZZ
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
3200 '''
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
3201 version = ''
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
3202
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 class TestHelpUsagePositionalsWrap(HelpTestCase):
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
3205 """Test usage messages where the positionals wrap"""
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 parser_signature = Sig(prog='PROG')
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
3208 argument_signatures = [
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
3209 Sig('-x'),
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
3210 Sig('-y'),
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
3211 Sig('-z'),
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
3212 Sig('a' * 25),
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
3213 Sig('b' * 25),
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
3214 Sig('c' * 25),
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
3215 ]
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
3216 argument_group_signatures = []
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
3217 usage = '''\
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
3218 usage: PROG [-h] [-x X] [-y Y] [-z Z]
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
3219 aaaaaaaaaaaaaaaaaaaaaaaaa bbbbbbbbbbbbbbbbbbbbbbbbb
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
3220 ccccccccccccccccccccccccc
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 help = usage + '''\
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
3223
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
3224 positional arguments:
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
3225 aaaaaaaaaaaaaaaaaaaaaaaaa
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
3226 bbbbbbbbbbbbbbbbbbbbbbbbb
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
3227 ccccccccccccccccccccccccc
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
3228
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
3229 optional arguments:
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
3230 -h, --help show this help message and exit
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
3231 -x X
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
3232 -y Y
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
3233 -z Z
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 TestHelpUsageOptionalsPositionalsWrap(HelpTestCase):
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
3239 """Test usage messages where the optionals and positionals wrap"""
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='PROG')
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('-x', metavar='X' * 25),
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
3244 Sig('-y', metavar='Y' * 25),
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
3245 Sig('-z', metavar='Z' * 25),
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
3246 Sig('a' * 25),
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
3247 Sig('b' * 25),
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
3248 Sig('c' * 25),
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
3249 ]
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
3250 argument_group_signatures = []
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
3251 usage = '''\
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
3252 usage: PROG [-h] [-x XXXXXXXXXXXXXXXXXXXXXXXXX] \
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
3253 [-y YYYYYYYYYYYYYYYYYYYYYYYYY]
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
3254 [-z ZZZZZZZZZZZZZZZZZZZZZZZZZ]
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
3255 aaaaaaaaaaaaaaaaaaaaaaaaa bbbbbbbbbbbbbbbbbbbbbbbbb
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
3256 ccccccccccccccccccccccccc
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
3257 '''
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
3258 help = usage + '''\
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
3259
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
3260 positional arguments:
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
3261 aaaaaaaaaaaaaaaaaaaaaaaaa
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
3262 bbbbbbbbbbbbbbbbbbbbbbbbb
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
3263 ccccccccccccccccccccccccc
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
3264
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
3265 optional arguments:
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
3266 -h, --help show this help message and exit
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
3267 -x XXXXXXXXXXXXXXXXXXXXXXXXX
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
3268 -y YYYYYYYYYYYYYYYYYYYYYYYYY
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
3269 -z ZZZZZZZZZZZZZZZZZZZZZZZZZ
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
3270 '''
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
3271 version = ''
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
3272
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
3273
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
3274 class TestHelpUsageOptionalsOnlyWrap(HelpTestCase):
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
3275 """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
3276
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
3277 parser_signature = Sig(prog='PROG')
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
3278 argument_signatures = [
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
3279 Sig('-x', metavar='X' * 25),
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
3280 Sig('-y', metavar='Y' * 25),
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
3281 Sig('-z', metavar='Z' * 25),
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
3282 ]
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
3283 argument_group_signatures = []
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
3284 usage = '''\
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
3285 usage: PROG [-h] [-x XXXXXXXXXXXXXXXXXXXXXXXXX] \
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
3286 [-y YYYYYYYYYYYYYYYYYYYYYYYYY]
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
3287 [-z ZZZZZZZZZZZZZZZZZZZZZZZZZ]
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 help = usage + '''\
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
3290
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
3291 optional arguments:
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
3292 -h, --help show this help message and exit
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
3293 -x XXXXXXXXXXXXXXXXXXXXXXXXX
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
3294 -y YYYYYYYYYYYYYYYYYYYYYYYYY
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
3295 -z ZZZZZZZZZZZZZZZZZZZZZZZZZ
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
3296 '''
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
3297 version = ''
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
3298
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 class TestHelpUsagePositionalsOnlyWrap(HelpTestCase):
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
3301 """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
3302
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
3303 parser_signature = Sig(prog='PROG', add_help=False)
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
3304 argument_signatures = [
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
3305 Sig('a' * 25),
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
3306 Sig('b' * 25),
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
3307 Sig('c' * 25),
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
3308 ]
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
3309 argument_group_signatures = []
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
3310 usage = '''\
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
3311 usage: PROG aaaaaaaaaaaaaaaaaaaaaaaaa bbbbbbbbbbbbbbbbbbbbbbbbb
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
3312 ccccccccccccccccccccccccc
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
3313 '''
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
3314 help = usage + '''\
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
3315
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
3316 positional arguments:
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
3317 aaaaaaaaaaaaaaaaaaaaaaaaa
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
3318 bbbbbbbbbbbbbbbbbbbbbbbbb
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
3319 ccccccccccccccccccccccccc
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
3320 '''
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
3321 version = ''
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
3322
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
3323
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
3324 class TestHelpVariableExpansion(HelpTestCase):
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
3325 """Test that variables are expanded properly in help messages"""
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 parser_signature = Sig(prog='PROG')
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
3328 argument_signatures = [
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
3329 Sig('-x', type=int,
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
3330 help='x %(prog)s %(default)s %(type)s %%'),
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
3331 Sig('-y', action='store_const', default=42, const='XXX',
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
3332 help='y %(prog)s %(default)s %(const)s'),
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
3333 Sig('--foo', choices='abc',
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
3334 help='foo %(prog)s %(default)s %(choices)s'),
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
3335 Sig('--bar', default='baz', choices=[1, 2], metavar='BBB',
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
3336 help='bar %(prog)s %(default)s %(dest)s'),
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
3337 Sig('spam', help='spam %(prog)s %(default)s'),
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
3338 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
3339 ]
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
3340 argument_group_signatures = [
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
3341 (Sig('group'), [
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
3342 Sig('-a', help='a %(prog)s %(default)s'),
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
3343 Sig('-b', default=-1, help='b %(prog)s %(default)s'),
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
3344 ])
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
3345 ]
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
3346 usage = ('''\
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
3347 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
3348 spam badger
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
3349 ''')
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
3350 help = usage + '''\
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
3351
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
3352 positional arguments:
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
3353 spam spam PROG None
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
3354 badger badger PROG 0.5
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 -x X x PROG None int %
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
3359 -y y PROG 42 XXX
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
3360 --foo {a,b,c} foo PROG None a, b, c
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
3361 --bar BBB bar PROG baz bar
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 group:
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
3364 -a A a PROG None
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
3365 -b B b PROG -1
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
3366 '''
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
3367 version = ''
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
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
3370 class TestHelpVariableExpansionUsageSupplied(HelpTestCase):
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
3371 """Test that variables are expanded properly when usage= is present"""
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
3372
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
3373 parser_signature = Sig(prog='PROG', usage='%(prog)s FOO')
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
3374 argument_signatures = []
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
3375 argument_group_signatures = []
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
3376 usage = ('''\
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
3377 usage: PROG FOO
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
3378 ''')
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
3379 help = usage + '''\
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
3380
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
3381 optional arguments:
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
3382 -h, --help show this help message and exit
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 version = ''
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
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
3387 class TestHelpVariableExpansionNoArguments(HelpTestCase):
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
3388 """Test that variables are expanded properly with no arguments"""
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
3389
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
3390 parser_signature = Sig(prog='PROG', add_help=False)
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
3391 argument_signatures = []
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
3392 argument_group_signatures = []
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
3393 usage = ('''\
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
3394 usage: PROG
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
3395 ''')
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
3396 help = usage
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 TestHelpSuppressUsage(HelpTestCase):
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
3401 """Test that items can be suppressed in usage messages"""
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', usage=argparse.SUPPRESS)
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('--foo', help='foo help'),
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
3406 Sig('spam', help='spam help'),
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
3407 ]
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
3408 argument_group_signatures = []
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
3409 help = '''\
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
3410 positional arguments:
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
3411 spam spam help
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
3412
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
3413 optional arguments:
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
3414 -h, --help show this help message and exit
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
3415 --foo FOO foo help
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
3416 '''
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
3417 usage = ''
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
3418 version = ''
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
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
3421 class TestHelpSuppressOptional(HelpTestCase):
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
3422 """Test that optional arguments can be suppressed in help messages"""
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
3423
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
3424 parser_signature = Sig(prog='PROG', add_help=False)
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
3425 argument_signatures = [
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
3426 Sig('--foo', help=argparse.SUPPRESS),
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
3427 Sig('spam', help='spam help'),
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
3428 ]
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
3429 argument_group_signatures = []
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
3430 usage = '''\
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
3431 usage: PROG spam
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 help = usage + '''\
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 positional arguments:
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
3436 spam spam help
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
3437 '''
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
3438 version = ''
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
3439
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
3440
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
3441 class TestHelpSuppressOptionalGroup(HelpTestCase):
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
3442 """Test that optional groups can be suppressed in help messages"""
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
3443
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
3444 parser_signature = Sig(prog='PROG')
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
3445 argument_signatures = [
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
3446 Sig('--foo', help='foo help'),
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
3447 Sig('spam', help='spam help'),
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
3448 ]
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
3449 argument_group_signatures = [
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
3450 (Sig('group'), [Sig('--bar', help=argparse.SUPPRESS)]),
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
3451 ]
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
3452 usage = '''\
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
3453 usage: PROG [-h] [--foo FOO] spam
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
3454 '''
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
3455 help = usage + '''\
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
3456
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
3457 positional arguments:
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
3458 spam spam help
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
3459
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
3460 optional arguments:
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
3461 -h, --help show this help message and exit
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
3462 --foo FOO foo help
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
3463 '''
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
3464 version = ''
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
3465
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
3466
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
3467 class TestHelpSuppressPositional(HelpTestCase):
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
3468 """Test that positional arguments can be suppressed in help messages"""
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
3469
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
3470 parser_signature = Sig(prog='PROG')
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
3471 argument_signatures = [
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
3472 Sig('--foo', help='foo help'),
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
3473 Sig('spam', help=argparse.SUPPRESS),
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
3474 ]
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
3475 argument_group_signatures = []
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
3476 usage = '''\
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
3477 usage: PROG [-h] [--foo FOO]
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
3478 '''
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
3479 help = usage + '''\
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
3480
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
3481 optional arguments:
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
3482 -h, --help show this help message and exit
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
3483 --foo FOO foo help
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 version = ''
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
3486
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
3487
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
3488 class TestHelpRequiredOptional(HelpTestCase):
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
3489 """Test that required options don't look optional"""
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
3490
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
3491 parser_signature = Sig(prog='PROG')
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
3492 argument_signatures = [
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
3493 Sig('--foo', required=True, help='foo help'),
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
3494 ]
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
3495 argument_group_signatures = []
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
3496 usage = '''\
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
3497 usage: PROG [-h] --foo FOO
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
3498 '''
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
3499 help = usage + '''\
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
3500
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
3501 optional arguments:
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
3502 -h, --help show this help message and exit
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
3503 --foo FOO foo help
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
3504 '''
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
3505 version = ''
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 class TestHelpAlternatePrefixChars(HelpTestCase):
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
3509 """Test that options display with different prefix characters"""
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
3510
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
3511 parser_signature = Sig(prog='PROG', prefix_chars='^;', add_help=False)
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
3512 argument_signatures = [
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
3513 Sig('^^foo', action='store_true', help='foo help'),
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
3514 Sig(';b', ';;bar', help='bar help'),
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
3515 ]
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
3516 argument_group_signatures = []
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
3517 usage = '''\
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
3518 usage: PROG [^^foo] [;b BAR]
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
3519 '''
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
3520 help = usage + '''\
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
3521
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
3522 optional arguments:
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
3523 ^^foo foo help
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
3524 ;b BAR, ;;bar BAR bar help
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
3525 '''
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
3526 version = ''
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
3527
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 class TestHelpNoHelpOptional(HelpTestCase):
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
3530 """Test that the --help argument can be suppressed help messages"""
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 parser_signature = Sig(prog='PROG', add_help=False)
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
3533 argument_signatures = [
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
3534 Sig('--foo', help='foo help'),
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
3535 Sig('spam', help='spam help'),
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
3536 ]
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 FOO] spam
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 positional arguments:
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
3544 spam spam help
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 optional arguments:
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
3547 --foo FOO foo help
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 version = ''
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
3550
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 class TestHelpVersionOptional(HelpTestCase):
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
3553 """Test that the --version argument can be suppressed help messages"""
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
3554
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
3555 parser_signature = Sig(prog='PROG', version='1.0')
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
3556 argument_signatures = [
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
3557 Sig('--foo', help='foo help'),
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
3558 Sig('spam', help='spam help'),
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
3559 ]
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
3560 argument_group_signatures = []
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
3561 usage = '''\
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
3562 usage: PROG [-h] [-v] [--foo FOO] spam
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
3563 '''
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
3564 help = usage + '''\
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
3565
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
3566 positional arguments:
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
3567 spam spam help
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
3568
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
3569 optional arguments:
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
3570 -h, --help show this help message and exit
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
3571 -v, --version show program's version number and exit
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
3572 --foo FOO foo help
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
3573 '''
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
3574 version = '''\
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
3575 1.0
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
3576 '''
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
3577
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 class TestHelpNone(HelpTestCase):
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
3580 """Test that no errors occur if no help is specified"""
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 parser_signature = Sig(prog='PROG')
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
3583 argument_signatures = [
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
3584 Sig('--foo'),
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
3585 Sig('spam'),
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
3586 ]
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
3587 argument_group_signatures = []
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
3588 usage = '''\
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
3589 usage: PROG [-h] [--foo FOO] spam
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 help = usage + '''\
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
3592
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
3593 positional arguments:
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
3594 spam
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
3595
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
3596 optional arguments:
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
3597 -h, --help show this help message and exit
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
3598 --foo FOO
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 TestHelpTupleMetavar(HelpTestCase):
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
3604 """Test specifying metavar as a tuple"""
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('-w', help='w', nargs='+', metavar=('W1', 'W2')),
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
3609 Sig('-x', help='x', nargs='*', metavar=('X1', 'X2')),
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
3610 Sig('-y', help='y', nargs=3, metavar=('Y1', 'Y2', 'Y3')),
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
3611 Sig('-z', help='z', nargs='?', metavar=('Z1', )),
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
3612 ]
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
3613 argument_group_signatures = []
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] [-w W1 [W2 ...]] [-x [X1 [X2 ...]]] [-y Y1 Y2 Y3] \
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
3616 [-z [Z1]]
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
3617 '''
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
3618 help = usage + '''\
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
3619
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
3620 optional arguments:
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
3621 -h, --help show this help message and exit
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
3622 -w W1 [W2 ...] w
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
3623 -x [X1 [X2 ...]] x
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
3624 -y Y1 Y2 Y3 y
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
3625 -z [Z1] z
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
3626 '''
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
3627 version = ''
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
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
3630 class TestHelpRawText(HelpTestCase):
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
3631 """Test the RawTextHelpFormatter"""
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
3632
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
3633 parser_signature = Sig(
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
3634 prog='PROG', formatter_class=argparse.RawTextHelpFormatter,
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
3635 description='Keep the formatting\n'
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
3636 ' exactly as it is written\n'
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
3637 '\n'
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
3638 'here\n')
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
3639
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
3640 argument_signatures = [
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
3641 Sig('--foo', help=' foo help should also\n'
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
3642 'appear as given here'),
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
3643 Sig('spam', help='spam help'),
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
3644 ]
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
3645 argument_group_signatures = [
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
3646 (Sig('title', description=' This text\n'
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
3647 ' should be indented\n'
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
3648 ' exactly like it is here\n'),
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
3649 [Sig('--bar', help='bar help')]),
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
3650 ]
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
3651 usage = '''\
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
3652 usage: PROG [-h] [--foo FOO] [--bar BAR] spam
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
3653 '''
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
3654 help = usage + '''\
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
3655
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
3656 Keep the formatting
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
3657 exactly as it is written
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
3658
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
3659 here
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 positional arguments:
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
3662 spam spam help
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
3663
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
3664 optional arguments:
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
3665 -h, --help show this help message and exit
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
3666 --foo FOO foo help should also
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
3667 appear as given here
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 title:
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
3670 This text
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
3671 should be indented
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
3672 exactly like it is here
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
3673
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
3674 --bar BAR bar help
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
3675 '''
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
3676 version = ''
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
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
3679 class TestHelpRawDescription(HelpTestCase):
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
3680 """Test the RawTextHelpFormatter"""
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 parser_signature = Sig(
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
3683 prog='PROG', formatter_class=argparse.RawDescriptionHelpFormatter,
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
3684 description='Keep the formatting\n'
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
3685 ' exactly as it is written\n'
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
3686 '\n'
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
3687 'here\n')
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
3688
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
3689 argument_signatures = [
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
3690 Sig('--foo', help=' foo help should not\n'
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
3691 ' retain this odd formatting'),
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
3692 Sig('spam', help='spam help'),
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 argument_group_signatures = [
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
3695 (Sig('title', description=' This text\n'
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
3696 ' should be indented\n'
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
3697 ' exactly like it is here\n'),
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
3698 [Sig('--bar', help='bar help')]),
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
3699 ]
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 [-h] [--foo FOO] [--bar BAR] 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 Keep the formatting
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
3706 exactly as it is written
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 here
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
3709
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
3710 positional arguments:
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
3711 spam spam help
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 optional arguments:
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
3714 -h, --help show this help message and exit
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
3715 --foo FOO foo help should not retain this odd formatting
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 title:
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
3718 This text
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
3719 should be indented
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
3720 exactly like it is here
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 --bar BAR bar help
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
3723 '''
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
3724 version = ''
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
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
3727 class TestHelpArgumentDefaults(HelpTestCase):
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
3728 """Test the ArgumentDefaultsHelpFormatter"""
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
3729
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
3730 parser_signature = Sig(
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
3731 prog='PROG', formatter_class=argparse.ArgumentDefaultsHelpFormatter,
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
3732 description='description')
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
3733
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
3734 argument_signatures = [
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
3735 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
3736 Sig('--bar', action='store_true', help='bar help'),
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
3737 Sig('spam', help='spam help'),
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
3738 Sig('badger', nargs='?', default='wooden', help='badger help'),
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 argument_group_signatures = [
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
3741 (Sig('title', description='description'),
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
3742 [Sig('--baz', type=int, default=42, help='baz help')]),
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 usage = '''\
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
3745 usage: PROG [-h] [--foo FOO] [--bar] [--baz BAZ] spam [badger]
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
3746 '''
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
3747 help = usage + '''\
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 description
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
3750
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
3751 positional arguments:
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
3752 spam spam help
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
3753 badger badger help (default: wooden)
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 optional arguments:
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
3756 -h, --help show this help message and exit
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
3757 --foo FOO foo help - oh and by the way, None
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
3758 --bar bar help (default: False)
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
3759
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
3760 title:
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
3761 description
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
3762
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
3763 --baz BAZ baz help (default: 42)
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 version = ''
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
3766
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
3767 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
3768 """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
3769
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
3770 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
3771 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
3772 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
3773 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
3774 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
3775 '''
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
3776 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
3777
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
3778 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
3779
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
3780 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
3781 -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
3782 -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
3783 '''
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
3784 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
3785
59267
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
3786 # =====================================
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
3787 # Optional/Positional constructor tests
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
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
3790 class TestInvalidArgumentConstructors(TestCase):
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
3791 """Test a bunch of invalid Argument constructors"""
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
3792
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
3793 def assertTypeError(self, *args, **kwargs):
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
3794 parser = argparse.ArgumentParser()
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
3795 self.assertRaises(TypeError, parser.add_argument,
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
3796 *args, **kwargs)
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
3797
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
3798 def assertValueError(self, *args, **kwargs):
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
3799 parser = argparse.ArgumentParser()
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
3800 self.assertRaises(ValueError, parser.add_argument,
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
3801 *args, **kwargs)
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
3802
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
3803 def test_invalid_keyword_arguments(self):
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
3804 self.assertTypeError('-x', bar=None)
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
3805 self.assertTypeError('-y', callback='foo')
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
3806 self.assertTypeError('-y', callback_args=())
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
3807 self.assertTypeError('-y', callback_kwargs={})
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
3808
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
3809 def test_missing_destination(self):
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
3810 self.assertTypeError()
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
3811 for action in ['append', 'store']:
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
3812 self.assertTypeError(action=action)
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
3813
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
3814 def test_invalid_option_strings(self):
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
3815 self.assertValueError('--')
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
3816 self.assertValueError('---')
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 def test_invalid_type(self):
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
3819 self.assertValueError('--foo', type='int')
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 def test_invalid_action(self):
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
3822 self.assertValueError('-x', action='foo')
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
3823 self.assertValueError('foo', action='baz')
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
3824 parser = argparse.ArgumentParser()
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
3825 try:
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
3826 parser.add_argument("--foo", action="store-true")
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
3827 except ValueError:
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
3828 e = sys.exc_info()[1]
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
3829 expected = 'unknown action'
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
3830 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
3831 self.assertTrue(expected in str(e), msg)
59267
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
3832
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
3833 def test_multiple_dest(self):
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
3834 parser = argparse.ArgumentParser()
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
3835 parser.add_argument(dest='foo')
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
3836 try:
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
3837 parser.add_argument('bar', dest='baz')
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
3838 except ValueError:
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
3839 e = sys.exc_info()[1]
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
3840 expected = 'dest supplied twice for positional argument'
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
3841 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
3842 self.assertTrue(expected in str(e), msg)
59267
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 def test_no_argument_actions(self):
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
3845 for action in ['store_const', 'store_true', 'store_false',
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
3846 'append_const', 'count']:
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
3847 for attrs in [dict(type=int), dict(nargs='+'),
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
3848 dict(choices='ab')]:
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
3849 self.assertTypeError('-x', action=action, **attrs)
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 def test_no_argument_no_const_actions(self):
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
3852 # options with zero arguments
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
3853 for action in ['store_true', 'store_false', 'count']:
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
3854
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
3855 # const is always disallowed
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
3856 self.assertTypeError('-x', const='foo', action=action)
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
3857
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
3858 # nargs is always disallowed
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
3859 self.assertTypeError('-x', nargs='*', action=action)
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
3860
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
3861 def test_more_than_one_argument_actions(self):
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
3862 for action in ['store', 'append']:
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
3863
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
3864 # nargs=0 is disallowed
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
3865 self.assertValueError('-x', nargs=0, action=action)
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
3866 self.assertValueError('spam', nargs=0, action=action)
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
3867
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
3868 # const is disallowed with non-optional arguments
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
3869 for nargs in [1, '*', '+']:
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
3870 self.assertValueError('-x', const='foo',
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
3871 nargs=nargs, action=action)
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
3872 self.assertValueError('spam', const='foo',
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
3873 nargs=nargs, action=action)
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 def test_required_const_actions(self):
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
3876 for action in ['store_const', 'append_const']:
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
3877
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
3878 # nargs is always disallowed
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
3879 self.assertTypeError('-x', nargs='+', action=action)
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
3880
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
3881 def test_parsers_action_missing_params(self):
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
3882 self.assertTypeError('command', action='parsers')
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
3883 self.assertTypeError('command', action='parsers', prog='PROG')
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
3884 self.assertTypeError('command', action='parsers',
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
3885 parser_class=argparse.ArgumentParser)
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
3886
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
3887 def test_required_positional(self):
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
3888 self.assertTypeError('foo', required=True)
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
3889
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
3890 def test_user_defined_action(self):
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 class Success(Exception):
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
3893 pass
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
3894
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
3895 class Action(object):
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
3896
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
3897 def __init__(self,
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
3898 option_strings,
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
3899 dest,
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
3900 const,
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
3901 default,
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
3902 required=False):
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
3903 if dest == 'spam':
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
3904 if const is Success:
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
3905 if default is Success:
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
3906 raise Success()
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
3907
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
3908 def __call__(self, *args, **kwargs):
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
3909 pass
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 parser = argparse.ArgumentParser()
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
3912 self.assertRaises(Success, parser.add_argument, '--spam',
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
3913 action=Action, default=Success, const=Success)
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
3914 self.assertRaises(Success, parser.add_argument, 'spam',
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
3915 action=Action, default=Success, const=Success)
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 # ================================
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
3918 # Actions returned by add_argument
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
3919 # ================================
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
3920
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
3921 class TestActionsReturned(TestCase):
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
3922
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
3923 def test_dest(self):
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
3924 parser = argparse.ArgumentParser()
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
3925 action = parser.add_argument('--foo')
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
3926 self.assertEqual(action.dest, 'foo')
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
3927 action = parser.add_argument('-b', '--bar')
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
3928 self.assertEqual(action.dest, 'bar')
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
3929 action = parser.add_argument('-x', '-y')
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
3930 self.assertEqual(action.dest, 'x')
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
3931
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
3932 def test_misc(self):
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
3933 parser = argparse.ArgumentParser()
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
3934 action = parser.add_argument('--foo', nargs='?', const=42,
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
3935 default=84, type=int, choices=[1, 2],
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
3936 help='FOO', metavar='BAR', dest='baz')
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
3937 self.assertEqual(action.nargs, '?')
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
3938 self.assertEqual(action.const, 42)
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
3939 self.assertEqual(action.default, 84)
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
3940 self.assertEqual(action.type, int)
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
3941 self.assertEqual(action.choices, [1, 2])
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
3942 self.assertEqual(action.help, 'FOO')
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
3943 self.assertEqual(action.metavar, 'BAR')
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
3944 self.assertEqual(action.dest, 'baz')
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
3945
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
3946
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
3947 # ================================
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
3948 # Argument conflict handling tests
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
3949 # ================================
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
3950
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
3951 class TestConflictHandling(TestCase):
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
3952
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
3953 def test_bad_type(self):
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
3954 self.assertRaises(ValueError, argparse.ArgumentParser,
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
3955 conflict_handler='foo')
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
3956
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
3957 def test_conflict_error(self):
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
3958 parser = argparse.ArgumentParser()
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
3959 parser.add_argument('-x')
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
3960 self.assertRaises(argparse.ArgumentError,
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
3961 parser.add_argument, '-x')
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
3962 parser.add_argument('--spam')
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
3963 self.assertRaises(argparse.ArgumentError,
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
3964 parser.add_argument, '--spam')
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
3965
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
3966 def test_resolve_error(self):
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
3967 get_parser = argparse.ArgumentParser
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
3968 parser = get_parser(prog='PROG', conflict_handler='resolve')
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
3969
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
3970 parser.add_argument('-x', help='OLD X')
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
3971 parser.add_argument('-x', help='NEW X')
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
3972 self.assertEqual(parser.format_help(), textwrap.dedent('''\
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
3973 usage: PROG [-h] [-x X]
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
3974
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
3975 optional arguments:
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
3976 -h, --help show this help message and exit
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
3977 -x X NEW X
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
3978 '''))
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
3979
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
3980 parser.add_argument('--spam', metavar='OLD_SPAM')
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
3981 parser.add_argument('--spam', metavar='NEW_SPAM')
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
3982 self.assertEqual(parser.format_help(), textwrap.dedent('''\
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
3983 usage: PROG [-h] [-x X] [--spam NEW_SPAM]
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
3984
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
3985 optional arguments:
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
3986 -h, --help show this help message and exit
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
3987 -x X NEW X
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
3988 --spam NEW_SPAM
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
3989 '''))
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
3990
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
3991
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
3992 # =============================
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
3993 # Help and Version option tests
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
3994 # =============================
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
3995
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
3996 class TestOptionalsHelpVersionActions(TestCase):
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
3997 """Test the help and version actions"""
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
3998
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
3999 def _get_error(self, func, *args, **kwargs):
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
4000 try:
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
4001 func(*args, **kwargs)
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
4002 except ArgumentParserError:
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
4003 return sys.exc_info()[1]
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
4004 else:
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
4005 self.assertRaises(ArgumentParserError, func, *args, **kwargs)
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
4006
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
4007 def assertPrintHelpExit(self, parser, args_str):
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
4008 self.assertEqual(
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
4009 parser.format_help(),
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
4010 self._get_error(parser.parse_args, args_str.split()).stdout)
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
4011
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
4012 def assertPrintVersionExit(self, parser, args_str):
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
4013 self.assertEqual(
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
4014 parser.format_version(),
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
4015 self._get_error(parser.parse_args, args_str.split()).stderr)
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
4016
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
4017 def assertArgumentParserError(self, parser, *args):
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
4018 self.assertRaises(ArgumentParserError, parser.parse_args, args)
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 def test_version(self):
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
4021 parser = ErrorRaisingArgumentParser(version='1.0')
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
4022 self.assertPrintHelpExit(parser, '-h')
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
4023 self.assertPrintHelpExit(parser, '--help')
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
4024 self.assertPrintVersionExit(parser, '-v')
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
4025 self.assertPrintVersionExit(parser, '--version')
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
4026
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
4027 def test_version_format(self):
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
4028 parser = ErrorRaisingArgumentParser(prog='PPP', version='%(prog)s 3.5')
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
4029 msg = self._get_error(parser.parse_args, ['-v']).stderr
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
4030 self.assertEqual('PPP 3.5\n', msg)
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
4031
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
4032 def test_version_no_help(self):
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
4033 parser = ErrorRaisingArgumentParser(add_help=False, version='1.0')
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
4034 self.assertArgumentParserError(parser, '-h')
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
4035 self.assertArgumentParserError(parser, '--help')
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
4036 self.assertPrintVersionExit(parser, '-v')
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
4037 self.assertPrintVersionExit(parser, '--version')
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
4038
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
4039 def test_version_action(self):
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
4040 parser = ErrorRaisingArgumentParser(prog='XXX')
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
4041 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
4042 msg = self._get_error(parser.parse_args, ['-V']).stderr
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
4043 self.assertEqual('XXX 3.7\n', msg)
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
4044
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
4045 def test_no_help(self):
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
4046 parser = ErrorRaisingArgumentParser(add_help=False)
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
4047 self.assertArgumentParserError(parser, '-h')
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
4048 self.assertArgumentParserError(parser, '--help')
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
4049 self.assertArgumentParserError(parser, '-v')
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
4050 self.assertArgumentParserError(parser, '--version')
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
4051
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
4052 def test_alternate_help_version(self):
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
4053 parser = ErrorRaisingArgumentParser()
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
4054 parser.add_argument('-x', action='help')
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
4055 parser.add_argument('-y', action='version')
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
4056 self.assertPrintHelpExit(parser, '-x')
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
4057 self.assertPrintVersionExit(parser, '-y')
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
4058 self.assertArgumentParserError(parser, '-v')
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
4059 self.assertArgumentParserError(parser, '--version')
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
4060
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
4061 def test_help_version_extra_arguments(self):
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
4062 parser = ErrorRaisingArgumentParser(version='1.0')
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
4063 parser.add_argument('-x', action='store_true')
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
4064 parser.add_argument('y')
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
4065
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
4066 # try all combinations of valid prefixes and suffixes
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
4067 valid_prefixes = ['', '-x', 'foo', '-x bar', 'baz -x']
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
4068 valid_suffixes = valid_prefixes + ['--bad-option', 'foo bar baz']
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
4069 for prefix in valid_prefixes:
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
4070 for suffix in valid_suffixes:
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
4071 format = '%s %%s %s' % (prefix, suffix)
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
4072 self.assertPrintHelpExit(parser, format % '-h')
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
4073 self.assertPrintHelpExit(parser, format % '--help')
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
4074 self.assertPrintVersionExit(parser, format % '-v')
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
4075 self.assertPrintVersionExit(parser, format % '--version')
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
4076
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
4077
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 # str() and repr() tests
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
4080 # ======================
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
4081
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
4082 class TestStrings(TestCase):
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
4083 """Test str() and repr() on Optionals and Positionals"""
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
4084
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
4085 def assertStringEqual(self, obj, result_string):
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
4086 for func in [str, repr]:
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
4087 self.assertEqual(func(obj), result_string)
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
4088
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
4089 def test_optional(self):
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
4090 option = argparse.Action(
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
4091 option_strings=['--foo', '-a', '-b'],
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
4092 dest='b',
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
4093 type='int',
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
4094 nargs='+',
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
4095 default=42,
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
4096 choices=[1, 2, 3],
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
4097 help='HELP',
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
4098 metavar='METAVAR')
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
4099 string = (
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
4100 "Action(option_strings=['--foo', '-a', '-b'], dest='b', "
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
4101 "nargs='+', const=None, default=42, type='int', "
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
4102 "choices=[1, 2, 3], help='HELP', metavar='METAVAR')")
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
4103 self.assertStringEqual(option, string)
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
4104
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
4105 def test_argument(self):
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
4106 argument = argparse.Action(
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
4107 option_strings=[],
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
4108 dest='x',
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
4109 type=float,
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
4110 nargs='?',
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
4111 default=2.5,
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
4112 choices=[0.5, 1.5, 2.5],
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
4113 help='H HH H',
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
4114 metavar='MV MV MV')
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
4115 string = (
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
4116 "Action(option_strings=[], dest='x', nargs='?', "
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
4117 "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
4118 "help='H HH H', metavar='MV MV MV')" % float)
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
4119 self.assertStringEqual(argument, string)
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
4120
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
4121 def test_namespace(self):
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
4122 ns = argparse.Namespace(foo=42, bar='spam')
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
4123 string = "Namespace(bar='spam', foo=42)"
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
4124 self.assertStringEqual(ns, string)
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
4125
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
4126 def test_parser(self):
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
4127 parser = argparse.ArgumentParser(prog='PROG')
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
4128 string = (
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
4129 "ArgumentParser(prog='PROG', usage=None, description=None, "
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
4130 "version=None, formatter_class=%r, conflict_handler='error', "
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
4131 "add_help=True)" % argparse.HelpFormatter)
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
4132 self.assertStringEqual(parser, string)
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
4133
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
4134 # ===============
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
4135 # Namespace tests
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
4136 # ===============
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
4137
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
4138 class TestNamespace(TestCase):
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
4139
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
4140 def test_constructor(self):
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
4141 ns = argparse.Namespace()
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
4142 self.assertRaises(AttributeError, getattr, ns, 'x')
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
4143
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
4144 ns = argparse.Namespace(a=42, b='spam')
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
4145 self.assertEqual(ns.a, 42)
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
4146 self.assertEqual(ns.b, 'spam')
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
4147
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
4148 def test_equality(self):
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
4149 ns1 = argparse.Namespace(a=1, b=2)
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
4150 ns2 = argparse.Namespace(b=2, a=1)
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
4151 ns3 = argparse.Namespace(a=1)
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
4152 ns4 = argparse.Namespace(b=2)
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
4153
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
4154 self.assertEqual(ns1, ns2)
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
4155 self.assertNotEqual(ns1, ns3)
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
4156 self.assertNotEqual(ns1, ns4)
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
4157 self.assertNotEqual(ns2, ns3)
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
4158 self.assertNotEqual(ns2, ns4)
59273
83e7ee185162 convert deprecated fail* methods to assert* variants
Benjamin Peterson <benjamin@python.org>
parents: 59272
diff changeset
4159 self.assertTrue(ns1 != ns3)
83e7ee185162 convert deprecated fail* methods to assert* variants
Benjamin Peterson <benjamin@python.org>
parents: 59272
diff changeset
4160 self.assertTrue(ns1 != ns4)
83e7ee185162 convert deprecated fail* methods to assert* variants
Benjamin Peterson <benjamin@python.org>
parents: 59272
diff changeset
4161 self.assertTrue(ns2 != ns3)
83e7ee185162 convert deprecated fail* methods to assert* variants
Benjamin Peterson <benjamin@python.org>
parents: 59272
diff changeset
4162 self.assertTrue(ns2 != ns4)
59267
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
4163
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
4164
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
4165 # ===================
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
4166 # File encoding tests
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
4167 # ===================
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
4168
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
4169 class TestEncoding(TestCase):
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
4170
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
4171 def _test_module_encoding(self, path):
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
4172 path, _ = os.path.splitext(path)
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
4173 path += ".py"
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
4174 codecs.open(path, 'r', 'utf8').read()
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
4175
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
4176 def test_argparse_module_encoding(self):
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
4177 self._test_module_encoding(argparse.__file__)
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
4178
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
4179 def test_test_argparse_module_encoding(self):
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
4180 self._test_module_encoding(__file__)
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 # ArgumentError 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 TestArgumentError(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_argument_error(self):
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
4189 msg = "my error here"
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
4190 error = argparse.ArgumentError(None, msg)
59273
83e7ee185162 convert deprecated fail* methods to assert* variants
Benjamin Peterson <benjamin@python.org>
parents: 59272
diff changeset
4191 self.assertEqual(str(error), msg)
59267
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
4192
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
4193 # =======================
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
4194 # ArgumentTypeError tests
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
4195 # =======================
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
4196
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
4197 class TestArgumentError(TestCase):
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
4198
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
4199 def test_argument_type_error(self):
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 spam(string):
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
4202 raise argparse.ArgumentTypeError('spam!')
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
4203
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
4204 parser = ErrorRaisingArgumentParser(prog='PROG', add_help=False)
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
4205 parser.add_argument('x', type=spam)
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
4206 try:
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
4207 parser.parse_args(['XXX'])
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
4208 except ArgumentParserError:
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
4209 expected = 'usage: PROG x\nPROG: error: argument x: spam!\n'
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
4210 msg = sys.exc_info()[1].stderr
59273
83e7ee185162 convert deprecated fail* methods to assert* variants
Benjamin Peterson <benjamin@python.org>
parents: 59272
diff changeset
4211 self.assertEqual(expected, msg)
59267
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
4212 else:
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
4213 self.fail()
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 # ======================
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
4216 # parse_known_args tests
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
4217 # ======================
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
4218
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
4219 class TestParseKnownArgs(TestCase):
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
4220
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
4221 def test_optionals(self):
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
4222 parser = argparse.ArgumentParser()
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
4223 parser.add_argument('--foo')
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
4224 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
4225 self.assertEqual(NS(foo='F'), args)
83e7ee185162 convert deprecated fail* methods to assert* variants
Benjamin Peterson <benjamin@python.org>
parents: 59272
diff changeset
4226 self.assertEqual(['--bar', '--baz'], extras)
59267
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 def test_mixed(self):
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
4229 parser = argparse.ArgumentParser()
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
4230 parser.add_argument('-v', nargs='?', const=1, type=int)
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
4231 parser.add_argument('--spam', action='store_false')
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
4232 parser.add_argument('badger')
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 argv = ["B", "C", "--foo", "-v", "3", "4"]
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
4235 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
4236 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
4237 self.assertEqual(["C", "--foo", "4"], extras)
59267
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
4238
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
4239 # ============================
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
4240 # from argparse import * tests
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
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
4243 class TestImportStar(TestCase):
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
4244
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
4245 def test(self):
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
4246 for name in argparse.__all__:
59273
83e7ee185162 convert deprecated fail* methods to assert* variants
Benjamin Peterson <benjamin@python.org>
parents: 59272
diff changeset
4247 self.assertTrue(hasattr(argparse, name))
59267
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
4248
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
4249 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
4250 # 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
4251 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
4252 ('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
4253 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
4254 ('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
4255 DeprecationWarning)):
59271
4b7b6953cd06 prevent warning filter adjustment from altering other tests
Benjamin Peterson <benjamin@python.org>
parents: 59270
diff changeset
4256 test_support.run_unittest(__name__)
59284
f5411125245e plug ref leaks
Benjamin Peterson <benjamin@python.org>
parents: 59281
diff changeset
4257 # Remove global references to avoid looking like we have refleaks.
f5411125245e plug ref leaks
Benjamin Peterson <benjamin@python.org>
parents: 59281
diff changeset
4258 RFile.seen = {}
f5411125245e plug ref leaks
Benjamin Peterson <benjamin@python.org>
parents: 59281
diff changeset
4259 WFile.seen = set()
f5411125245e plug ref leaks
Benjamin Peterson <benjamin@python.org>
parents: 59281
diff changeset
4260
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
4261
59267
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
4262
4ca83c5b8551 set svn:eol-style
Benjamin Peterson <benjamin@python.org>
parents: 59257
diff changeset
4263 if __name__ == '__main__':
59272
137a21fcd385 use test_main() in __main__ section
Benjamin Peterson <benjamin@python.org>
parents: 59271
diff changeset
4264 test_main()