8000 added unit tests for now allowable metavar characters including nearl… · python/cpython@fcf7d42 · GitHub
[go: up one dir, main page]

Skip to content

Commit fcf7d42

Browse files
Franklin, SamuelFranklin, Samuel
authored andcommitted
added unit tests for now allowable metavar characters including nearly all Unicode whitespace characters. Thank you Ashwin Ramaswami for the recommendation.
1 parent 8f79a6e commit fcf7d42

File tree

1 file changed

+211
-0
lines changed

1 file changed

+211
-0
lines changed

Lib/test/test_argparse.py

Lines changed: 211 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -5224,6 +5224,191 @@ def test_nargs_3_metavar_length3(self):
52245224
self.do_test_no_exception(nargs=3, metavar=("1", "2", "3"))
52255225

52265226

5227+
class TestAddArgumentMetavarWrapNoException(TestCase):
5228+
"""Check that certain special character wrap with no exceptions
5229+
Based off TestAddArgumentMetavar"""
5230+
5231+
def do_test_no_exception(self, metavar):
5232+
parser = argparse.ArgumentParser(prog='PROG' * 19) # force wrapping
5233+
parser.add_argument("--foo", metavar=metavar)
5234+
5235+
def test_metavar_nil(self):
5236+
self.do_test_no_exception(metavar='')
5237+
5238+
def test_metavar_space(self):
5239+
self.do_test_no_exception(metavar=' ')
5240+
5241+
def test_metavar_Line_Feed(self):
5242+
self.do_test_no_exception(metavar='\n')
5243+
5244+
def test_metavar_Tab(self):
5245+
self.do_test_no_exception(metavar='\t')
5246+
5247+
def test_metavar_Carriage_Return(self):
5248+
self.do_test_no_exception(metavar='\r')
5249+
5250+
def test_metavar_Carriage_Return_and_Line_Feed(self):
5251+
self.do_test_no_exception(metavar='\r\n')
5252+
5253+
# The rest would be unlikely in practice but should not fail
5254+
5255+
def test_metavar_vLine_Tabulation(self):
5256+
self.do_test_no_exception(metavar='\v')
5257+
5258+
def test_metavar_x0b_Line_Tabulation(self):
5259+
self.do_test_no_exception(metavar='\x0b')
5260+
5261+
def test_metavar_f_Form_Feed(self):
5262+
self.do_test_no_exception(metavar='\f')
5263+
5264+
def test_metavar_x0c_Form_Feed(self):
5265+
self.do_test_no_exception(metavar='\x0c')
5266+
5267+
def test_metavar_File_Separator(self):
5268+
self.do_test_no_exception(metavar='\x1c')
5269+
5270+
def test_metavar_Group_Separator(self):
5271+
self.do_test_no_exception(metavar='\x1d')
5272+
5273+
def test_metavar_Record_Separator(self):
5274+
self.do_test_no_exception(metavar='\x1e')
5275+
5276+
def test_metavar_C1_Control_Code(self):
5277+
self.do_test_no_exception(metavar='\x85')
5278+
5279+
def test_metavar_Line_Separator(self):
5280+
self.do_test_no_exception(metavar='\u2028')
5281+
5282+
def test_metavar_Paragraph_Separator(self):
5283+
self.do_test_no_exception(metavar='\u2029')
5284+
5285+
def test_metavar_backslash(self):
5286+
self.do_test_no_exception(metavar='\\')
5287+
5288+
def test_metavar_single_quote(self):
5289+
self.do_test_no_exception(metavar='\'')
5290+
5291+
def test_metavar_double_quote(self):
5292+
self.do_test_no_exception(metavar='\"')
5293+
5294+
def test_metavar_ASCII_bell(self):
5295+
self.do_test_no_exception(metavar='\a')
5296+
5297+
def test_metavar_ASCII_backspace(self):
5298+
self.do_test_no_exception(metavar='\b')
5299+
5300+
# Unicode whitespaces per wikipedia.org/wiki/Whitespace_character
5301+
5302+
def test_metavar_unicode_horizontal_tab(self):
5303+
self.do_test_no_exception(metavar='\u0009')
5304+
5305+
def test_metavar_unicode_line_feed(self):
5306+
self.do_test_no_exception(metavar='\u000A')
5307+
5308+
def test_metavar_unicode_vertical_tab(self):
5309+
self.do_test_no_exception(metavar='\u000B')
5310+
5311+
def test_metavar_unicode_form_feed(self):
5312+
self.do_test_no_exception(metavar='\u000C')
5313+
5314+
def test_metavar_unicode_carriage_return(self):
5315+
self.do_test_no_exception(metavar='\u000D')
5316+
5317+
def test_metavar_unicode_space(self):
5318+
self.do_test_no_exception(metavar='\u0020')
5319+
5320+
def test_metavar_unicode_next_line(self):
5321+
self.do_test_no_exception(metavar='\u0085')
5322+
5323+
def test_metavar_unicode_non_breaking_space(self):
5324+
self.do_test_no_exception(metavar='\u00A0')
5325+
5326+
def test_metavar_unicode_ogham_space_mark(self):
5327+
self.do_test_no_exception(metavar='\u1680')
5328+
5329+
def test_metavar_unicode_en_quad(self):
5330+
self.do_test_no_exception(metavar='\u2000')
5331+
5332+
def test_metavar_unicode_em_quad(self):
5333+
self.do_test_no_exception(metavar='\u2001')
5334+
5335+
def test_metavar_unicode_en_space(self):
5336+
self.do_test_no_exception(metavar='\u2002')
5337+
5338+
def test_metavar_unicode_em_space(self):
5339+
self.do_test_no_exception(metavar='\u2003')
5340+
5341+
def test_metavar_unicode_three_per_em_space(self):
5342+
self.do_test_no_exception(metavar='\u2004')
5343+
5344+
def test_metavar_unicode_four_per_em_space(self):
5345+
self.do_test_no_exception(metavar='\u2005')
5346+
5347+
def test_metavar_unicode_six_per_em_space(self):
5348+
self.do_test_no_exception(metavar='\u2006')
5349+
5350+
def test_metavar_unicode_figure_space(self):
5351+
self.do_test_no_exception(metavar='\u2007')
5352+
5353+
def test_metavar_unicode_puctuation_space(self):
5354+
self.do_test_no_exception(metavar='\u2008')
5355+
5356+
def test_metavar_unicode_thin_space(self):
5357+
self.do_test_no_exception(metavar='\u2009')
5358+
5359+
def test_metavar_unicode_hair_space(self):
5360+
self.do_test_no_exception(metavar='\u200A')
5361+
5362+
def test_metavar_unicode_line_separator(self):
5363+
self.do_test_no_exception(metavar='\u2028')
5364+
5365+
def test_metavar_unicode_paragraph_separator(self):
5366+
self.do_test_no_exception(metavar='\u2029')
5367+
5368+
def test_metavar_unicode_narrow_no_break_space(self):
5369+
self.do_test_no_exception(metavar='\u202F')
5370+
5371+
def test_metavar_unicode_medium_mathematical_space(self):
5372+
self.do_test_no_exception(metavar='\u205F')
5373+
5374+
def test_metavar_unicode_ideographic_sp 10000 ace(self):
5375+
self.do_test_no_exception(metavar='\u3000')
5376+
5377+
def test_metavar_unicode_mongolian_vowel_separator(self):
5378+
self.do_test_no_exception(metavar='\u180E')
5379+
5380+
def test_metavar_unicode_zero_width_space(self):
5381+
self.do_test_no_exception(metavar='\u200B')
5382+
5383+
def test_metavar_unicode_zero_width_non_joiner(self):
5384+
self.do_test_no_exception(metavar='\u200C')
5385+
5386+
def test_metavar_unicode_zero_width_joiner(self):
5387+
self.do_test_no_exception(metavar='\u200D')
5388+
5389+
def test_metavar_unicode_word_joiner(self):
5390+
self.do_test_no_exception(metavar='\u2060')
5391+
5392+
def test_metavar_unicode_zero_width_non_breaking_space(self):
5393+
self.do_test_no_exception(metavar='\uFEFF')
5394+
5395+
# visible 'whitespace' characters, mainly with typesetting usages.
5396+
def test_metavar_unicode_middle_dot(self):
5397+
self.do_test_no_exception(metavar='\u00B7')
5398+
5399+
def test_metavar_unicode_shouldered_open_box(self):
5400+
self.do_test_no_exception(metavar='\u237D')
5401+
5402+
def test_metavar_unicode_symbol_for_space(self):
5403+
self.do_test_no_exception(metavar='\u2420')
5404+
5405+
def test_metavar_unicode_blank_symbol(self):
5406+
self.do_test_no_exception(metavar='\u2422')
5407+
5408+
def test_metavar_unicode_open_box(self):
5409+
self.do_test_no_exception(metavar='\u2423')
5410+
5411+
52275412
class TestInvalidNargs(TestCase):
52285413

52295414
EXPECTED_INVALID_MESSAGE = "invalid nargs value"
@@ -5296,6 +5481,32 @@ def test_help_with_metavar(self):
52965481
'''))
52975482

52985483

5484+
class TestHelpUsageWrapAllowsNilAndTab(HelpTestCase):
5485+
"""Usage message should wrap successfully when metavar='' or literal tab
5486+
Other whitespace characters may behave differently on different systems,
5487+
but should not cause an assertion error."""
5488+
5489+
parser_signature = Sig(prog='PROG' * 19)
5490+
argument_signatures = [
5491+
Sig('--nil', metavar=''),
5492+
Sig('--Tab', metavar='\ttab')
5493+
]
5494+
argument_group_signatures = []
5495+
usage = '''\
5496+
usage: PROGPROGPROGPROGPROGPROGPROGPROGPROGPROGPROGPROGPROGPROGPROGPROGPROGPROGPROG
5497+
[-h] [--nil] [--Tab tab]
5498+
'''
5499+
help = usage + '''\
5500+
5501+
optional arguments:
5502+
-h, --help show this help message and exit
5503+
--nil \
5504+
5505+
--Tab tab
5506+
'''
5507+
version = ''
5508+
5509+
52995510
class TestExitOnError(TestCase):
53005511

53015512
def setUp(self):

0 commit comments

Comments
 (0)
0