@@ -2837,16 +2837,22 @@ def _get_parser(self, tester):
28372837 parser = argparse .ArgumentParser (
28382838 * tester .parser_signature .args ,
28392839 ** tester .parser_signature .kwargs )
2840- for argument_sig in tester . argument_signatures :
2840+ for argument_sig in getattr ( tester , ' argument_signatures' , []) :
28412841 parser .add_argument (* argument_sig .args ,
28422842 ** argument_sig .kwargs )
2843- group_signatures = tester . argument_group_signatures
2844- for group_sig , argument_sigs in group_signatures :
2843+ group_sigs = getattr ( tester , ' argument_group_signatures' , [])
2844+ for group_sig , argument_sigs in group_sigs :
28452845 group = parser .add_argument_group (* group_sig .args ,
28462846 ** group_sig .kwargs )
28472847 for argument_sig in argument_sigs :
28482848 group .add_argument (* argument_sig .args ,
28492849 ** argument_sig .kwargs )
2850+ subparsers_sigs = getattr (tester , 'subparsers_signatures' , [])
2851+ if subparsers_sigs :
2852+ subparsers = parser .add_subparsers ()
2853+ for subparser_sig in subparsers_sigs :
2854+ subparsers .add_parser (* subparser_sig .args ,
2855+ ** subparser_sig .kwargs )
28502856 return parser
28512857
28522858 def _test (self , tester , parser_text ):
@@ -3940,6 +3946,77 @@ class TestHelpVersionAction(HelpTestCase):
39403946 '''
39413947 version = ''
39423948
3949+ class TestHelpSubparsersOrdering (HelpTestCase ):
3950+ """Test ordering of subcommands in help matches the code"""
3951+ parser_signature = Sig (prog = 'PROG' ,
3952+ description = 'display some subcommands' ,
3953+ version = '0.1' )
3954+
3955+ subparsers_signatures = [Sig (name = name )
3956+ for name in ('a' , 'b' , 'c' , 'd' , 'e' )]
3957+
3958+ usage = '''\
3959+ usage: PROG [-h] [-v] {a,b,c,d,e} ...
3960+ '''
3961+
3962+ help = usage + '''\
3963+
3964+ display some subcommands
3965+
3966+ positional arguments:
3967+ {a,b,c,d,e}
3968+
3969+ optional arguments:
3970+ -h, --help show this help message and exit
3971+ -v, --version show program's version number and exit
3972+ '''
3973+
3974+ version = '''\
3975+ 0.1
3976+ '''
3977+
3978+ class TestHelpSubparsersWithHelpOrdering (HelpTestCase ):
3979+ """Test ordering of subcommands in help matches the code"""
3980+ parser_signature = Sig (prog = 'PROG' ,
3981+ description = 'display some subcommands' ,
3982+ version = '0.1' )
3983+
3984+ subcommand_data = (('a' , 'a subcommand help' ),
3985+ ('b' , 'b subcommand help' ),
3986+ ('c' , 'c subcommand help' ),
3987+ ('d' , 'd subcommand help' ),
3988+ ('e' , 'e subcommand help' ),
3989+ )
3990+
3991+ subparsers_signatures = [Sig (name = name , help = help )
3992+ for name , help in subcommand_data ]
3993+
3994+ usage = '''\
3995+ usage: PROG [-h] [-v] {a,b,c,d,e} ...
3996+ '''
3997+
3998+ help = usage + '''\
3999+
4000+ display some subcommands
4001+
4002+ positional arguments:
4003+ {a,b,c,d,e}
4004+ a a subcommand help
4005+ b b subcommand help
4006+ c c subcommand help
4007+ d d subcommand help
4008+ e e subcommand help
4009+
4010+ optional arguments:
4011+ -h, --help show this help message and exit
4012+ -v, --version show program's version number and exit
4013+ '''
4014+
4015+ version = '''\
4016+ 0.1
4017+ '''
4018+
4019+
39434020# =====================================
39444021# Optional/Positional constructor tests
39454022# =====================================
0 commit comments