@@ -5224,6 +5224,191 @@ def test_nargs_3_metavar_length3(self):
5224
5224
self .do_test_no_exception (nargs = 3 , metavar = ("1" , "2" , "3" ))
5225
5225
5226
5226
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
+
5227
5412
class TestInvalidNargs (TestCase ):
5228
5413
5229
5414
EXPECTED_INVALID_MESSAGE = "invalid nargs value"
@@ -5296,6 +5481,32 @@ def test_help_with_metavar(self):
5296
5481
''' ))
5297
5482
5298
5483
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 = '\t tab' )
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
+
5299
5510
class TestExitOnError (TestCase ):
5300
5511
5301
5512
def setUp (self ):
0 commit comments