@@ -5469,11 +5469,60 @@ def custom_type(string):
54695469    version  =  '' 
54705470
54715471
5472- class  TestHelpUsageLongSubparserCommand (TestCase ):
5473-     """Test that subparser commands are formatted correctly in help""" 
5472+ class  TestHelpCustomHelpFormatter (TestCase ):
54745473    maxDiff  =  None 
54755474
5476-     def  test_parent_help (self ):
5475+     def  test_custom_formatter_function (self ):
5476+         def  custom_formatter (prog ):
5477+             return  argparse .RawTextHelpFormatter (prog , indent_increment = 5 )
5478+ 
5479+         parser  =  argparse .ArgumentParser (
5480+                 prog = 'PROG' ,
5481+                 prefix_chars = '-+' ,
5482+                 formatter_class = custom_formatter 
5483+         )
5484+         parser .add_argument ('+f' , '++foo' , help = "foo help" )
5485+         parser .add_argument ('spam' , help = "spam help" )
5486+ 
5487+         parser_help  =  parser .format_help ()
5488+         self .assertEqual (parser_help , textwrap .dedent ('''\  
5489+              usage: PROG [-h] [+f FOO] spam
5490+ 
5491+             positional arguments: 
5492+                  spam           spam help 
5493+ 
5494+             options: 
5495+                  -h, --help     show this help message and exit 
5496+                  +f, ++foo FOO  foo help 
5497+         ''' ))
5498+ 
5499+     def  test_custom_formatter_class (self ):
5500+         class  CustomFormatter (argparse .RawTextHelpFormatter ):
5501+             def  __init__ (self , prog ):
5502+                 super ().__init__ (prog , indent_increment = 5 )
5503+ 
5504+         parser  =  argparse .ArgumentParser (
5505+                 prog = 'PROG' ,
5506+                 prefix_chars = '-+' ,
5507+                 formatter_class = CustomFormatter 
5508+         )
5509+         parser .add_argument ('+f' , '++foo' , help = "foo help" )
5510+         parser .add_argument ('spam' , help = "spam help" )
5511+ 
5512+         parser_help  =  parser .format_help ()
5513+         self .assertEqual (parser_help , textwrap .dedent ('''\  
5514+              usage: PROG [-h] [+f FOO] spam
5515+ 
5516+             positional arguments: 
5517+                  spam           spam help 
5518+ 
5519+             options: 
5520+                  -h, --help     show this help message and exit 
5521+                  +f, ++foo FOO  foo help 
5522+         ''' ))
5523+ 
5524+     def  test_usage_long_subparser_command (self ):
5525+         """Test that subparser commands are formatted correctly in help""" 
54775526        def  custom_formatter (prog ):
54785527            return  argparse .RawTextHelpFormatter (prog , max_help_position = 50 )
54795528
@@ -7053,6 +7102,7 @@ def test_translations(self):
70537102
70547103
70557104class  TestColorized (TestCase ):
7105+     maxDiff  =  None 
70567106
70577107    def  setUp (self ):
70587108        super ().setUp ()
@@ -7211,6 +7261,79 @@ def test_argparse_color_usage(self):
72117261            ),
72127262        )
72137263
7264+     def  test_custom_formatter_function (self ):
7265+         def  custom_formatter (prog ):
7266+             return  argparse .RawTextHelpFormatter (prog , indent_increment = 5 )
7267+ 
7268+         parser  =  argparse .ArgumentParser (
7269+             prog = "PROG" ,
7270+             prefix_chars = "-+" ,
7271+             formatter_class = custom_formatter ,
7272+             color = True ,
7273+         )
7274+         parser .add_argument ('+f' , '++foo' , help = "foo help" )
7275+         parser .add_argument ('spam' , help = "spam help" )
7276+ 
7277+         prog  =  self .theme .prog 
7278+         heading  =  self .theme .heading 
7279+         short  =  self .theme .summary_short_option 
7280+         label  =  self .theme .summary_label 
7281+         pos  =  self .theme .summary_action 
7282+         long_b  =  self .theme .long_option 
7283+         short_b  =  self .theme .short_option 
7284+         label_b  =  self .theme .label 
7285+         pos_b  =  self .theme .action 
7286+         reset  =  self .theme .reset 
7287+ 
7288+         parser_help  =  parser .format_help ()
7289+         self .assertEqual (parser_help , textwrap .dedent (f'''\  
7290+              { heading }  usage: { reset } { prog }  PROG{ reset }   [{ short }  -h{ reset }  ] [{ short }  +f { label }  FOO{ reset }  ] { pos }  spam{ reset } 
7291+ 
7292+             { heading }  positional arguments:{ reset }  
7293+                  { pos_b }  spam{ reset }                 spam help 
7294+ 
7295+             { heading }  options:{ reset }  
7296+                  { short_b }  -h{ reset }  , { long_b }  --help{ reset }           show this help message and exit 
7297+                  { short_b }  +f{ reset }  , { long_b }  ++foo{ reset }   { label_b }  FOO{ reset }        foo help 
7298+         ''' ))
7299+ 
7300+     def  test_custom_formatter_class (self ):
7301+         class  CustomFormatter (argparse .RawTextHelpFormatter ):
7302+             def  __init__ (self , prog ):
7303+                 super ().__init__ (prog , indent_increment = 5 )
7304+ 
7305+         parser  =  argparse .ArgumentParser (
7306+             prog = "PROG" ,
7307+             prefix_chars = "-+" ,
7308+             formatter_class = CustomFormatter ,
7309+             color = True ,
7310+         )
7311+         parser .add_argument ('+f' , '++foo' , help = "foo help" )
7312+         parser .add_argument ('spam' , help = "spam help" )
7313+ 
7314+         prog  =  self .theme .prog 
7315+         heading  =  self .theme .heading 
7316+         short  =  self .theme .summary_short_option 
7317+         label  =  self .theme .summary_label 
7318+         pos  =  self .theme .summary_action 
7319+         long_b  =  self .theme .long_option 
7320+         short_b  =  self .theme .short_option 
7321+         label_b  =  self .theme .label 
7322+         pos_b  =  self .theme .action 
7323+         reset  =  self .theme .reset 
7324+ 
7325+         parser_help  =  parser .format_help ()
7326+         self .assertEqual (parser_help , textwrap .dedent (f'''\  
7327+              { heading }  usage: { reset } { prog }  PROG{ reset }   [{ short }  -h{ reset }  ] [{ short }  +f { label }  FOO{ reset }  ] { pos }  spam{ reset } 
7328+ 
7329+             { heading }  positional arguments:{ reset }  
7330+                  { pos_b }  spam{ reset }                 spam help 
7331+ 
7332+             { heading }  options:{ reset }  
7333+                  { short_b }  -h{ reset }  , { long_b }  --help{ reset }           show this help message and exit 
7334+                  { short_b }  +f{ reset }  , { long_b }  ++foo{ reset }   { label_b }  FOO{ reset }        foo help 
7335+         ''' ))
7336+ 
72147337
72157338def  tearDownModule ():
72167339    # Remove global references to avoid looking like we have refleaks. 
0 commit comments