a 4dg@sddlZddlZddlZddlZddlZddlZddlZddlZddlZddl m Z ddl m Z ddlm Z Gddde ZGdddejZGd d d eZGd d d eZGd ddeZGdddeZddZGdddejZGdddeZefZedeiZGdddeZGdddeZGdddeZGdddeZ Gd d!d!eZ!Gd"d#d#eZ"Gd$d%d%eZ#Gd&d'd'eZ$Gd(d)d)eZ%Gd*d+d+eZ&Gd,d-d-eZ'Gd.d/d/eZ(Gd0d1d1eZ)Gd2d3d3eZ*Gd4d5d5eZ+Gd6d7d7eZ,Gd8d9d9eZ-Gd:d;d;eZ.Gdd?d?eZ0Gd@dAdAeZ1GdBdCdCeZ2GdDdEdEeZ3GdFdGdGeZ4GdHdIdIeZ5GdJdKdKeZ6GdLdMdMeZ7GdNdOdOeZ8GdPdQdQeZ9GdRdSdSeZ:GdTdUdUeZ;GdVdWdWeZGd\d]d]eZ?Gd^d_d_eZ@Gd`dadaeZAGdbdcdceZBGdddedeeZCGdfdgdgeZDGdhdidieZEGdjdkdkeZFGdldmdmeZGGdndodoeZHGdpdqdqeZIGdrdsdseZJGdtdudueZKGdvdwdweZLGdxdydyeZMGdzd{d{eZNGd|d}d}eZOGd~ddeZPGdddeZQGdddeZRGdddeZSGdddeZTGdddeZUGdddeZVGdddeZWGdddeZXGdddeZYGdddeZZGdddeZ[GdddeZ\GdddeZ]GdddeZ^GdddeZ_GdddeZ`GdddeZaGdddeZbGdddeZcGdddeZdGdddeZeGdddeZfGdddeZgGdddeZhGdddeZiGdddeZjGdddeZkGdddeZlGdddeZmGdddeZnGdddeZoGdddeeZpGdddeeZqGddÄdeZrGddńdŃZsesdƃZtesdǃZuesdȃZvGddʄdeZwGdd̄deeZxGdd΄deeZyGddЄdeeZzGdd҄deZ{e|e}edӃoe~dkdԡGddքdeeZGdd؄deeZGddڄdeZGdd܄deZGddބdeZGdddeZGdddeZGdddeZGdddeZGdddeZGdddeZGdddeZGdddeZGdddeZGdddeZGdddeZGdddeeZGdddeeZGdddeeZGdddeeZGdddeeZGdddeeZGdddeeZGdddeeZGdddeeZGdddeZGd d d eeZGd d d eeZGd ddeeZGdddeeZGdddeeZGdddeeZGdddeeZGdddeeZGdddeZGdddeZGdddeZGdd d eZefZed!eiZGd"d#d#eZGd$d%d%eZGd&d'd'eZGd(d)d)eZGd*d+d+eZGd,d-d-eZGd.d/d/eZGd0d1d1eZGd2d3d3eZGd4d5d5eZGd6d7d7eZGd8d9d9eZGd:d;d;eZGd<d=d=eZGd>d?d?eZGd@dAdAeZGdBdCdCeZGdDdEdEeZGdFdGdGeZGdHdIdIeZGdJdKdKeZGdLdMdMeZGdNdOdOeZGdPdQdQeZGdRdSdSeZGdTdUdUeZGdVdWdWeZGdXdYdYeZGdZd[d[eZGd\d]d]eZGd^d_d_eZGd`dadaeZGdbdcdceZGdddedeeZGdfdgdgeZGdhdidieZGdjdkdkeZGdldmdmeZGdndodoeZGdpdqdqeZGdrdsdseZGdtdudueZGdvdwdweZGdxdydyeZGdzd{d{eZGd|d}d}eZGd~ddeZGdddeZGdddeZGdddeZGdddeZGdddeZGdddeZGdddeZGdddeZGdddeZGdddeZސddZedkr e߃dS(N)StringIO)support)mockc@s eZdZdS) StdIOBufferN__name__ __module__ __qualname__r r ./usr/local/lib/python3.9/test/test_argparse.pyrsrc@seZdZddZdS)TestCasecCs t}d|d<||jdS)NZ80COLUMNS)rEnvironmentVarGuard addCleanup__exit__selfenvr r r setUpszTestCase.setUpN)rrr rr r r r r sr c@s$eZdZddZddZddZdS) TempDirMixincCs$t|_t|_t|jdSN)tempfilemkdtemptemp_dirosgetcwdold_dirchdirrr r r r!s  zTempDirMixin.setUpcCs^t|jtj|jddD].\}}}|D]}ttj|j|tj q*qt |jddS)NF)topdownT) rrrwalkrchmodpathjoinstatS_IWRITEshutilrmtree)rrootdirsfilesnamer r r tearDown&s  zTempDirMixin.tearDowncCsVtj|j|}t|d}||Wdn1s:0Yt|tjdS)Nw) rr"r#ropenwriter!r$S_IREAD)rfilenameZ file_pathfiler r r create_readonly_file-s (z!TempDirMixin.create_readonly_fileN)rrr rr,r3r r r r rsrc@seZdZddZdS)SigcOs||_||_dSr)argskwargsrr5r6r r r __init__5sz Sig.__init__Nrrr r8r r r r r43sr4c@s$eZdZddZddZddZdS)NScKs|j|dSr)__dict__update)rr6r r r r8<sz NS.__init__cCs4t|j}ddd|D}dt|j|fS)Nz, cSsg|] }d|qS)z%s=%rr ).0tupr r r AzNS.__repr__..z%s(%s))sortedr;itemsr#typer)rZ sorted_itemsZ kwarg_strr r r __repr__?sz NS.__repr__cCst|t|kSr)varsrotherr r r __eq__Dsz NS.__eq__N)rrr r8rDrHr r r r r::sr:c@seZdZdddZdS)ArgumentParserErrorNcCs,t||||||_||_||_||_dSr) Exceptionr8messagestdoutstderr error_code)rrKrLrMrNr r r r8Js zArgumentParserError.__init__)NNNr9r r r r rIHsrIc Osttjtsttjtr&||i|Stj}tj}tt_tt_zzl||i|}tt|D]<}t||tjurt|||t||tjur`t|||q`|WW|t_|t_St yt dj }tj }tj } t d|| |dYn0W|t_|t_n|t_|t_0dS)N SystemExit) isinstancesysrMrrLlistrEgetattrsetattrrPexc_infocodegetvaluerI) parse_argsr5r6Z old_stdoutZ old_stderrresultkeyrWrLrMr r r stderr_to_parser_errorRs>     r\cs4eZdZfddZfddZfddZZS)ErrorRaisingArgumentParsercs"tt|j}t|g|Ri|Sr)superr]rYr\)rr5r6rY __class__r r rYus z%ErrorRaisingArgumentParser.parse_argscs"tt|j}t|g|Ri|Sr)r^r]exitr\)rr5r6rar_r r rays zErrorRaisingArgumentParser.exitcs"tt|j}t|g|Ri|Sr)r^r]errorr\)rr5r6rbr_r r rb}s z ErrorRaisingArgumentParser.error)rrr rYrarb __classcell__r r r_r r]ss  r]c@seZdZdZddZdS)ParserTesterMetaclassa}Adds parser tests using the class attributes. Classes of this type should specify the following attributes: argument_signatures -- a list of Sig objects which specify the signatures of Argument objects to be created failures -- a list of args lists that should cause the parser to fail successes -- a list of (initial_args, options, remaining_args) tuples where initial_args specifies the string args to be parsed, options is a dict that should match the vars() of the options parsed out of initial_args, and remaining_args should be any remaining unparsed arguments c Cs|dkr dSt|dst|_t|ds.t|_dd}dd}dd }d d }d d }Gdddt} |||fD]} ||fD]} | || | q|qpdS)NParserTestCaseparser_signature parser_classcSs"|D]}|j|ji|jqdS)z(Add all arguments directly to the parserN) add_argumentr5r6)parserargument_signaturessigr r r no_groupssz1ParserTesterMetaclass.__init__..no_groupscSs,|d}|D]}|j|ji|jqdS)z4Add all arguments under a single group in the parserfooN)add_argument_grouprhr5r6)rirjgrouprkr r r one_groups z1ParserTesterMetaclass.__init__..one_groupcSs8t|D]*\}}|d|}|j|ji|jqdS)z0Add each argument in its own group to the parserzfoo:%iN) enumeraternrhr5r6)rirjirkror r r many_groupssz3ParserTesterMetaclass.__init__..many_groupscSs ||S)z#Parse the args by passing in a list)rY)rir5r r r listargssz0ParserTesterMetaclass.__init__..listargscSs4tj}|dg|t_z|W|t_S|t_0dS)z(Parse the args by defaulting to sys.argvrN)rRargvrY)rir5Z old_sys_argvr r r sysargssz/ParserTesterMetaclass.__init__..sysargsc@s,eZdZddZddZddZddZd S) z0ParserTesterMetaclass.__init__..AddTestsc Ss||_||_|jj}|jj}|j|jfD]T}|j}|||f}d|} |fdd} z | | _WntynYn0t|| | q(dS)N_cSs ||dSrr r test_funcr r r wrapperszJParserTesterMetaclass.__init__..AddTests.__init__..wrapper)_add_arguments _parse_argsr test_failurestest_successesr# TypeErrorrU) rZ tester_cls add_argumentsrYZadd_arguments_nameZparse_args_namery func_namenames test_namerzr r r r8s     z9ParserTesterMetaclass.__init__..AddTests.__init__cSs2|jj}|jj}|j|i|}|||j|Sr)rfr5r6rgr{rj)rtesterr5r6rir r r _get_parsers z.AddTests._get_parserc SsZ||}|jD]D}|}|jt|d||Wdq1sJ0YqdS)N)msg)rfailuressplit assertRaisesrIrY)rrriargs_strr5r r r r}s   z>ParserTesterMetaclass.__init__..AddTests.test_failurescSsH||}|jD]2\}}t|tr*|}|||}|||qdSr)r successesrQstrrr| assertEqual)rrrir5 expected_nsZ result_nsr r r r~s    z?ParserTesterMetaclass.__init__..AddTests.test_successesN)rrr r8rr}r~r r r r AddTestssr)hasattrr4rfr]rgobject) clsr+basesbodydictrlrprsrtrvrrrYr r r r8s    - zParserTesterMetaclass.__init__N)rrr __doc__r8r r r r rdsrdrec@sbeZdZdZedgZgdZdeddfdeddfd eddfd ed dfd ed dfgZdS) TestOptionalsSingleDash1Test an Optional with a single-dash option string-x)ra--foo-x --fooz-x -yNx-x ar-xaz-x -1-1z-x-1 rrr rr4rjrr:rr r r r rs      rc@seZdZdZedddedddded gZgd Zd ed d d dfdedd d dfded d ddfded d ddfdedd ddfdedd ddfdedd ddfdedd ddfded dd dfded dd dfdeddddfdeddddfg Zd S)TestOptionalsSingleDashCombinedrr store_trueactionz-yyy store_const*rconst-z) rrrrz-x -zz-z -xz-yxz-yz az-yyyxz-yyyzaz-xyzarFN)ryyyzT-zar-z az-xzaz-xz az-x -zaz-x -z a-yz -x -yyy -zaz -x -yyy -z arr r r r rs&  rc@sbeZdZdZedgZgdZdeddfdeddfd ed dfd eddfd eddfgZdS) TestOptionalsSingleDashLongzATest an Optional with a multi-character single-dash option string-foo)rrrz -foo --fooz-foo -y-fooarNrmz-foo arz-foo -1rz-fo a-f arr r r r r"s      rc @seZdZdZedededgZgdZdeddddfd ed dddfd ed dddfd ed dddfdeddddfdedd ddfdeddd dfgZdS)&TestOptionalsSingleDashSubsetAmbiguousz=Test Optionals where option strings are subsets of each other-f-foobar-foorab)rr-fo-foo bz-foobz-foobaz-foorarN)ffoobarfoorabrr-fa-foaZoarZooa -foobar a -foorab arr r r r r0src @seZdZdZededgZgdZdedddfded ddfd edd dfd ed ddfd edd dfd ed ddfdedd dfgZdS) TestOptionalsSingleDashAmbiguousz7Test Optionals that partially match but are not subsetsrr)rrrrrrrrN)rrz-foob arz-foor az-fooba az-foora arrrr r r r r@src@sZeZdZdZedddgZgdZdeddfd ed dfd ed dfd ed dfgZdS)TestOptionalsNumericz(Test an Optional with a short opt stringronedest)rrz-1 --fooz-1 -yz-1 -1z-1 -2rN)rz-1 arz-1az-1-2-2rr r r r rPs    rc@sbeZdZdZedgZgdZdeddfdeddfd eddfd ed dfd ed dfgZdS) TestOptionalsDoubleDashz1Test an Optional with a double-dash option stringr)rrrrz--foo -xz --foo --barrNrz--foo arz--foo=az --foo -2.5z-2.5z --foo=-2.5rr r r r r]s      rc @seZdZdZedddedgZgdZdedd d fd edd d fd edd d fdedd d fdedd d fdedd d fgZd S)#TestOptionalsDoubleDashPartialMatchz7Tests partial matching with a double-dash option string--badgerrrz--bat)--bar--b--ba--b=2z--ba=4 --badge 5rFN)badgerZbatz--bat XX--badT--badg--badgerr r r r rks rc @seZdZdZedddedgZgdZdedd d fd edd d fd edd d fdedd d fdedd d fdedd d fdedd d fgZd S)"TestOptionalsDoubleDashPrefixMatchz?Tests when one double-dash option string is a prefix of anotherrrrr)rrrrrrFN)rZbaz--ba Xrz--ba=XrTrrrr r r r r}s rc @seZdZdZedddededddd gZgd Zd ed d d dfdedd d dfded dd dfdeddd dfdedd ddfdedd ddfgZd S)TestOptionalsSingleDoubleDashzeZdZdZedgZddgZdeddfdeddfgZdS)TestOptionalsNargsDefaultz7Tests not specifying the number of args for an OptionalrrrNrrrr r r r r s    rc@sDeZdZdZedddgZddgZdeddfd edgdfgZdS) TestOptionalsNargs1z&Tests specifying 1 arg for an OptionalrrOnargsrrNrrrr r r r rs  rc@sFeZdZdZedddgZgdZdeddfd egd dfgZdS) TestOptionalsNargs3z'Tests specifying 3 args for an Optionalrr)rrr-x a ba -xa -x brNrz-x a b crbcrr r r r r#s  rc@seZdZdZedddeddddeddd d ed ded d dgZdgZdeddd ddfdeddd ddfdeddd ddfdeddd ddfdeddd ddfdedddddfdedddddfd eddd ddfdeddd ddfg Z dS)TestOptionalsNargsOptionalz0Tests specifying an Optional arg for an Optionalr?rrr)rrrspamrrr42Z84)rrCrr2rNTr-rrrz-w 2z-x 2z-y 2z-z 2 rrr rr4intrjrr:rr r r r r.s"   rc @seZdZdZedddeddddgZdgZd ed dd fdegdd fd edgdd fd eddgdd fded gd fded dgd fded ddgd fgZd S)TestOptionalsNargsZeroOrMore?Tests specifying args for an Optional that accepts zero or morer*rrrrrrNrrrr -y a-y a brr r r r rEs  rc @seZdZdZedddeddddgZgdZd ed dd fd ed gdd fded dgdd fded d gd fded d dgd fgZd S)TestOptionalsNargsOneOrMorez>Tests specifying args for an Optional that accepts one or morer+rrrr)rrrr za -y brNrrrrr rrrr r r r rXs  rc @seZdZdZedddedeeddgZgdZd e d d d fd e d d d fde dd d fde d dd fde d dd fde ddd fgZ d S)TestOptionalsChoicesz,Tests specifying the choices for an Optionalrabcchoicesz-grCr#)rz-f dz-fadz-gaz-g 6rN)rrrrz-f cr z-g 0rz-g 03rz-fb -g4r  rrr rr4rrangerjrr:rr r r r r is r c@sDeZdZdZededdgZddgZdedd fd ed d fgZ d S) TestOptionalsRequiredz)Tests an optional action that is requiredrTrCrequiredrr-x 1rOrz-x42rNrr r r r r)zs   r)c@sBeZdZdZedddgZddgZdedd fd ed d fgZdS) TestOptionalsActionStorez&Tests the store action for an Optionalrstorerrr rNrz-xfoormrr r r r r-s   r-c@sBeZdZdZeddedgZdgZdeddfdeedfgZ dS) TestOptionalsActionStoreConstz,Tests the store_const action for an OptionalrrrrrNr) rrr rr4rrjrr:rr r r r r/s   r/c@sBeZdZdZedddgZgdZdeddfded dfgZd S) TestOptionalsActionStoreFalsez,Tests the store_false action for an Optionalr store_falser)rrrrT)rFNrr r r r r1s   r1c@sBeZdZdZedddgZgdZdeddfded dfgZd S) TestOptionalsActionStoreTruez+Tests the store_true action for an Optionalz--applerr)rz --apple=bz --apple brF)ZappleTNrr r r r r3s   r3c@speZdZdZedejdgZddgZde ddfde d dfd e d dfd e d dfd e d dfgZ ddZ dS)TestBooleanOptionalActionzTests BooleanOptionalActionrrz --foo barz --foo=barrNrT--no-fooFz--foo --no-fooz--no-foo --foocCsZt}|t"}|jddtjdWdn1s:0Y|dt|jdS)NrTrrz*got an unexpected keyword argument 'const') argparseArgumentParserrrrhBooleanOptionalActionassertInr exceptionrricmr r r test_consts 0z$TestBooleanOptionalAction.test_const) rrr rr4r7r9rjrr:rr>r r r r r4s     r4c@sDeZdZdZeddejdgZdgZde ddfde ddfgZ d S) !TestBooleanOptionalActionRequiredz$Tests BooleanOptionalAction requiredrT)r+rrrr5FN) rrr rr4r7r9rjrr:rr r r r r?s  r?c@sTeZdZdZedddgZgdZdeddfd ed gdfd ed d gdfgZdS) TestOptionalsActionAppend'Tests the append action for an Optionalrappendrrra --baz --baz a brNr--baz ar--baz a --baz br rr r r r r@s r@c@s\eZdZdZedddgdgZgdZdedgdfd edd gdfd egd dfgZd S)$TestOptionalsActionAppendWithDefaultrArrBrrrrCrrFrGrrH)rrr Nrr r r r rIsrIc@sfeZdZdZeddededdddgZgd Zd ed d fdeegd fd eededgd fgZ d S)TestOptionalsActionAppendConst-Tests the append_const action for an Optional-b append_constr-crBr rrrrOza -cz-bxz-b xrNr -b -cx -b -cyzryz rrr rr4rJrjrr:rr r r r rKs   rKc @speZdZdZeddedgdedddd gZgd Zd edgd fdedegd fd edededgd fgZ dS))TestOptionalsActionAppendConstWithDefaultrLrMrNr)rrrrOrBr rPrQrrRrSrrTNrUr r r r rVs rVc@sBeZdZdZedddgZgdZdeddfded dfgZdS) TestOptionalsActionCountz&Tests the count action for an Optionalrcountr)rrz-x bz -x a -x brNrrOrr r r r rW s   rWc @sveZdZdZedededddgZddgZd ed d d d fd edd d d fded dd d fdedd dd fgZd S)"TestOptionalsAllowLongAbbreviationz2Allow long options to be abbreviated unambiguouslyrz--foobazz--fooblerrz--foob 5z--foobrNF)rmZfoobazZfooblez--foo 77z --fooba arz--foobl --foo grTrr r r r rYs rYc@speZdZdZeddZededddedgZgd Zd ed dd d fd eddd d fdedddd fgZ d S)%TestOptionalsDisallowLongAbbreviation1Do not allow abbreviations of long options at allF allow_abbrevrz--foodlerrz--foonly)z-foon 3z--foon 3z--foodz--food --foo 2rNrmZfoodleZfoonlyz--foo 33z--foonly 7 --foodle --foo 2rTrZrr r r r r[%s  r[c@sreZdZdZedddZededdded gZgd Zd ed dd d fdeddd d fdedddd fgZ d S)0TestOptionalsDisallowLongAbbreviationPrefixCharszBDisallowing abbreviations works with alternative prefix charactersrFrr^z++fooz++foodlerrz++foonly)z+foon 3z++foon 3z++foodz++food ++foo 2rNr_z++foo 3r`z++foonly 7 ++foodle ++foo 2rTrZrr r r r ra6s  rac @seZdZdZeddZededddgZddgZd ed d d fd ed d d fdedd d fded dd fded dd fdeddd fgZ d S)/TestDisallowLongAbbreviationAllowsShortGroupingr\Fr]z-rrOrXrz-c -rrNrr z-rarz-rccccz-ccrz-cc -raz-ccrccrr r r r rcGs  rcc @seZdZdZedddZededddgZdd gZd ed d d fd edd d fdedd d fded dd fdeddd fdeddd fgZ d S)5TestDisallowLongAbbreviationAllowsShortGroupingPrefixzEShort option grouping works with custom prefix and allow_abbrev=FalserFrbz+rz+crXrz+c +rrNrdz+rarz+rccrfz+ccrz+cc +raz+ccrccrr r r r rgZs  rgc@s2eZdZdZedgZgdZdeddfgZdS)TestPositionalsNargsNonez,Test a Positional that doesn't specify nargsrmrra brrNrr r r r rhqs   rhc@s8eZdZdZedddgZgdZdedgdfgZdS) TestPositionalsNargs1z.Test a Positional that specifies an nargs of 1rmrOrrirrNrr r r r rk{s rkc@s:eZdZdZedddgZgdZdeddgd fgZd S) TestPositionalsNargs2z.Test a Positional that specifies an nargs of 2rmrr)rrra b crjrr rNrr r r r rls rlc@sReZdZdZedddgZdgZdegdfdedgdfd edd gdfgZd S) TestPositionalsNargsZeroOrMorez0Test a Positional that specifies unlimited nargsrmrrrrrrrjr Nrr r r r rns rnc@sTeZdZdZeddddgZdgZdeddfd ed gdfd ed d gdfgZd S) %TestPositionalsNargsZeroOrMoreDefaultz>Test a Positional that specifies unlimited nargs and a defaultrmrrrrrrrrjr Nrr r r r ros roc@sHeZdZdZedddgZddgZdedgdfd edd gdfgZd S) TestPositionalsNargsOneOrMorez2Test a Positional that specifies one or more nargsrmrrrrrrrjr Nrr r r r rps rpc@sBeZdZdZedddgZddgZdedd fd ed d fgZdS) TestPositionalsNargsOptionalzTests an Optional PositionalrmrrrrjrNrrrr r r r rqs   rqc@sDeZdZdZeddddgZddgZdedd fd ed d fgZd S) #TestPositionalsNargsOptionalDefaultz1Tests an Optional Positional with a default valuermrrrrrjrrrNrr r r r rrs   rrc@sFeZdZdZeddeddgZgdZdedd fd ed d fgZ d S) ,TestPositionalsNargsOptionalConvertedDefaultznTests an Optional Positional with a default value that needs to be converted to the appropriate type. rmrr)rrCr)rrj1 2rrr1rONrr r r r rss  rsc@s:eZdZdZededgZgdZdedddfgZd S) TestPositionalsNargsNoneNonez-Test two Positionals that don't specify nargsrmr)rrrrmrjrr rmrNrr r r r rvs rvc@s@eZdZdZededddgZgdZdedd gd fgZd S) TestPositionalsNargsNone1z6Test a Positional with no nargs followed by one with 1rmrrOr)rrrrmrjrr rwNrr r r r rxs rxc@sBeZdZdZedddedgZgdZdedd gd d fgZd S) TestPositionalsNargs2Nonez8Test a Positional with 2 nargs followed by one with nonermrrrrrrrja b c drmrr r rwNrr r r r rys ryc@s`eZdZdZededddgZddgZdedgd fd edd gd fd edd d gd fgZdS)"TestPositionalsNargsNoneZeroOrMorez>Test a Positional with no nargs followed by one with unlimitedrmrrrrrrrwrjr rmr Nrr r r r r|sr|c@sReZdZdZededddgZgdZdedd gd fd edd d gd fgZd S)!TestPositionalsNargsNoneOneOrMorez@Test a Positional with no nargs followed by one with one or morermrrrrrrrjrr rwrmr Nrr r r r r}s r}c@sLeZdZdZededddgZgdZdeddd fd edd d fgZdS) TestPositionalsNargsNoneOptionalz@Test a Positional with no nargs followed by one with an OptionalrmrrrrrrmrNrwrjr rr r r r r s rc@s`eZdZdZedddedgZddgZdegdd fd edgd d fd edd gd d fgZdS)"TestPositionalsNargsZeroOrMoreNonez@Test a Positional with unlimited nargs followed by one with nonermrrrrrrrwrjr rmr Nrr r r r rsrc@sReZdZdZedddedgZgdZdedgd d fd edd gd d fgZd S)!TestPositionalsNargsOneOrMoreNonezBTest a Positional with one or more nargs followed by one with nonermrrrr~rjrr rwrmr Nrr r r r r#s rc@sNeZdZdZeddddedgZgdZdeddd fd edd d fgZd S) TestPositionalsNargsOptionalNonezBTest a Positional with an Optional nargs followed by one with nonermrrrrrrrwrjr Nrr r r r r.s rc@sZeZdZdZedddedddgZgdZded d ggd fd ed d gd gd fgZdS)TestPositionalsNargs2ZeroOrMorez=Test a Positional with 2 nargs followed by one with unlimitedrmrrrrr~rjrr rwrmr Nrr r r r r9s rc@sHeZdZdZedddedddgZgdZded d gd gd fgZd S)TestPositionalsNargs2OneOrMorez?Test a Positional with 2 nargs followed by one with one or morermrrrr)rrrrjrmrr r rwNrr r r r rDs rc@sXeZdZdZedddedddgZgdZded d gd d fd ed d gdd fgZd S)TestPositionalsNargs2Optionalz7Test a Positional with 2 nargs followed by one optionalrmrrrr)rrrr{rjrr Nrwrmr rr r r r rNs rc@sjeZdZdZedddedddgZddgZd egd gd fd ed gd gd fd ed d gdgd fgZdS)TestPositionalsNargsZeroOrMore1z=Test a Positional with unlimited nargs followed by one with 1rmrrrrOrrrrwrjr rmr Nrr r r r rYsrc@sZeZdZdZedddedddgZgdZded gd gd fd ed d gd gd fgZdS)TestPositionalsNargsOneOrMore1z?Test a Positional with one or more nargs followed by one with 1rmrrrrOr~rjrr rwrmr Nrr r r r res rc@sTeZdZdZedddedddgZgdZded dgd fd edd gd fgZd S) TestPositionalsNargsOptional1z?Test a Positional with an Optional nargs followed by one with 1rmrrrrOrrNrwrjr rr r r r rps rc@s`eZdZdZededddedddgZgdZd ed gd gd fd ed d gdgd fgZdS)#TestPositionalsNargsNoneZeroOrMore1z=Test three Positionals: no nargs, unlimited nargs and 1 nargsrmrrrrrOr~rjrr rmrrrmr Nrr r r r r{s  rc@sdeZdZdZededddedddgZgdZd ed d gd gd fded d d gdgd fgZdS)"TestPositionalsNargsNoneOneOrMore1z?Test three Positionals: no nargs, one or more nargs and 1 nargsrmrrrrrO)rrrr rmrr r rr{dNrr r r r rs  rc@s`eZdZdZededdddeddd gZgd Zd ed dd gdfded d dgdfgZdS)!TestPositionalsNargsNoneOptional1z;Test three Positionals: no nargs, optional narg and 1 nargsrmrr?rrrOrr~rjrr rrmr Nrr r r r rs  rc@s`eZdZdZedddeddddgZdd gZd ed dd fd ed dd fded dd fgZd S)$TestPositionalsNargsOptionalOptionalzTest two optional nargsrmrrrrrrrmrNrwrrjr rr r r r rs  rc@speZdZdZedddedddgZdgZded gd fd ed gd fd ed d gd fded d dgd fgZd S)&TestPositionalsNargsOptionalZeroOrMorez1Test an Optional narg followed by unlimited nargsrmrrrrrrNrwrrjr rmr rr r r r rsrc@sfeZdZdZedddedddgZddgZd ed d gd fd ed d gd fded d dgd fgZd S)%TestPositionalsNargsOptionalOneOrMorez3Test an Optional narg followed by one or more nargsrmrrrrrrrNrwrjr rmr rr r r r rsrc@sFeZdZdZededdgZgdZdeddfdeddfgZ d S) TestPositionalsChoicesStringz&Test a set of single-character choicesrZabcdefgr"rrrrZefrrrN) rrr rr4setrjrr:rr r r r rs   rc@sHeZdZdZedeeddgZgdZde ddfd e d dfgZ d S) TestPositionalsChoicesIntzTest a set of integer choicesrr%r4r&r15Nr'r r r r rs   rc@sJeZdZdZedddeddddgZgdZded d d ggd fgZd S)TestPositionalsActionAppendzTest the 'append' actionrrBrr)rrrzrmrr r rNrr r r r rs  rc@sneZdZdZedddeddddgZd d gZd ed d dfdedd dfded ddfdedddfgZd S)"TestOptionalsNumericAndPositionalsz;Tests negative number args when numeric options are presentrrrz-4rrrrrz-315rNFrrTz-4 arr r r r rs  rc @szeZdZdZedddeddddgZd gZd ed d d fdedd d fdedd d fded dd fdeddd fgZd S)(TestOptionalsAlmostNumericAndPositionalszBTests negative number args when almost numeric options are presentrrrz-k4rrrz-k3rNFrrrTz-k4 arr r r r rs  rc @seZdZedddeddddgZdgZdgedd d fd ged d d fd ged d d fddged dd fdd ged d d fdd ged d d fd ged d d fdged d d fgZd S)$TestEmptyAndSpaceContainingArgumentsrrrrz--yyyrrrNrza badgerz -a badgerz--yyy=a badgerz--yyy=-a badger)rrr r4rjrr:rr r r r rs  rc @seZdZeddZedddddedd ed d ed d ddgZddgZdedd ddfdedd ddfdedd ddfdeddddfd edd ddfdedd ddfgZ dS) TestPrefixCharacterOnlyArgumentsz-+r-rrr)rrrrrr)rrCrz-+-rrrrz+ -rNFrz- Xrz+ -3Tz- ===z===) rrr r4rfrrjrr:rr r r r r*s  rc @seZdZdZedddedddgZgZdedgdfdeggdfd ed ggdfd ed gd gdfd edd gdfd egd gdfded gd gdfgZdS)TestNargsZeroOrMorerrrrrrNrrrz -x a -- br r r rr r r r r=src @s~eZdZdZededddedgZgdZdedgd d fd edgd d fd edgdd d fdedddgd d fgZd S)TestNargsRemainderz2Tests specifying a positional with nargs=REMAINDERrr...rr)rrz-z ZrNrz-z Z XZ X A B -z Z)Arrrz X Y --fooYrrr r r r rMsrc@seZdZdZededededdeddd gZgd Zd ed d gd fdedd gd fdedd dgd fded dgd fded dgd fded dgd fded ddgd fded d dgd fdedd dgd fdedd dgd fded ddgd fg Z d S)TestOptionLikez.Tests options that may or may not be argumentsrrCz-3r)rCrrrr) rz-y2.5rz-x -az-x -3z-x -3.5z-3 -3.5z-x -2.5z -x -2.5 az-3 -.5za x -1z-x -1 az-3 -1 arNrz-x 2.5@z-x 2.5 arz-3.5?z-3-.5gz-3 .5za -3.5za -x 1g?z-x 1 az-3 1 a) rrr rr4floatrjrr:rr r r r rZs$   rc @seZdZdZeddejdeddejdeddejd gZd gZd e fd e d d fde d dgdfde ddfde d ddfde d dgddfgZ dS)TestDefaultSuppressz%Test actions with suppressed defaultsrmrrrrrrrJrrrrrjr rwTrFrDrmrrErN) rrr rr4r7SUPPRESSrjrr:rr r r r rus  rc @seZdZdZeejdZedddedddedd d gZd gZ d e fd e d dfde d dgdfde ddfde d ddfde d dgddfgZ dS)TestParserDefaultSuppressz4Test actions with a parser-level default of SUPPRESSargument_defaultrmrrrrrrrrrrrrjr rwTrFrDrrErN) rrr rr4r7rrfrjrr:rr r r r rs      rc @seZdZdZeddZeddddedd d ed d d ed ddgZdgZdedddddfdedddddfdeddgdddfd edddddfdedddddfdeddgdddfgZ dS)TestParserDefault42z.Test actions with a parser-level default of 42rr --versionversion1.0rrrmrrrrrrrrr)rmrrrrrjr TrDrENrr r r r rs     rc seZdZdZfddZeddZedededd d gZgd Zd e d ddgdfde ddddgdfde d ddgdfde d ddgdfde ddddgdfde ddddgdfgde dddgdfgZ Z S)TestArgumentsFromFile"Test reading arguments from a filec s\tt|gd}|D]<\}}t|d}||Wdq1sL0YqdS)N)helloz hello world! ) recursivez -a A @hello)invalidz@no-such-path r-)r^rrr.r/rZ file_textsr"textr2r_r r rs   zTestArgumentsFromFile.setUp@fromfile_prefix_chars-arrrr)rrMrz@invalidz@missingzX YNrr)rrrz X -a A Y Zrr@hello Xz hello world!zX @helloz-a B @recursive Y ZzX @recursive Z -a Br)rrrrr) rrr rrr4rfrjrr:rrcr r r_r rs   rcsdeZdZdZfddZGdddeZeZeddZ edd d gZ gZ d e gd d fgZ ZS)TestArgumentsFromFileConverterrc sZtt|dg}|D]<\}}t|d}||Wdq1sJ0YqdS)Nrr-)r^rrr.r/rr_r r rs   z$TestArgumentsFromFileConverter.setUpc@seZdZddZdS)z>TestArgumentsFromFileConverter.FromFileConverterArgumentParserccs"|D]}|sq|VqdSr)rstrip)rarg_lineargr r r convert_arg_line_to_argss zWTestArgumentsFromFileConverter.FromFileConverterArgumentParser.convert_arg_line_to_argsN)rrr rr r r r FromFileConverterArgumentParsersrrrrrrr)rzworld!rr0)rrr rrr]rrgr4rfrjrr:rrcr r r_r rs   rc@s4eZdZddZddZddZddZd d Zd S) TestFileTypeReprcCstd}|dt|dS)Nrez FileType('r')r7FileTyperreprrrCr r r test_rs zTestFileTypeRepr.test_rcCs tdd}|dt|dS)NwbrOzFileType('wb', 1)rrr r r test_wb_1s zTestFileTypeRepr.test_wb_1cCs"tjddd}|dt|dS)Nrelatin_1encodingz!FileType('r', encoding='latin_1')rrr r r test_r_latinszTestFileTypeRepr.test_r_latincCs$tjdddd}|dt|dS)Nr-big5ignore)rerrorsz/FileType('w', encoding='big5', errors='ignore')rrr r r test_w_big5_ignoresz#TestFileTypeRepr.test_w_big5_ignorecCs$tjdddd}|dt|dS)NrerOreplacerz"FileType('r', 1, errors='replace')rrr r r test_r_1_replacesz!TestFileTypeRepr.test_r_1_replaceN)rrr rrrrrr r r r rs rc@seZdZddZddZdS)StdStreamComparercCs ||_dSr)attr)rrr r r r8 szStdStreamComparer.__init__cCs|tt|jkSr)rTrRrrFr r r rHszStdStreamComparer.__eq__Nrrr r8rHr r r r r srstdinrLrMc@s eZdZiZddZddZdS)RFilecCs ||_dSrr+rr+r r r r8szRFile.__init__cCs`||jvr|j|}n|}|j|<|t|tsD|d}|j|jkoZ|kSS)Nascii)seenreadcloserQrdecoder+rrGrr r r rHs    z RFile.__eq__N)rrr rr8rHr r r r rsrc seZdZdZfddZededededdgZgdZ d e d e d d fd e e d e d d fde e d e d d fde e e d fde d e dd fgZ ZS) TestFileTypeR8Test the FileType option/argument type for reading filesc sftt|dD]D}ttj|j|d}||Wdq1sL0Yq| ddS)Nrwr-readonly) r^rrr.rr"r#rr/r3r file_namer2r_r r r+s *zTestFileTypeR.setUprrrre)rrznon-existent-file.txtrmNrr -x foo barr bar -x foo-x - -rrrr rrr4r7rrjrr:req_stdinrrcr r r_r r(s rcsPeZdZdZfddZededddgZdgZ d e e d d fgZ Z S) TestFileTypeDefaultsz.get_my_typerCZmy_typerrrruz my_type{1}rz-x 1 42z my_type{42})r7r8registerrhrrYrr:)rr!rir r r rs  zTestTypeRegistration.testNrr r r r rsrc@seZdZdZGdddejZGdddejZeddee dd ed ee d d d gZ gZ de dd dfde dddfde dddfde dddfgZdS)TestActionUserDefinedz*Test a user-defined option/argument actionc@seZdZdddZdS)z$TestActionUserDefined.OptionalActionNcCsvz:tdd}|dvrd|_n|dvr,d|_n td|Wn*tydtd}td |Yn0t|d |dS) N?r)?rr)@r value: %srOzopt_action failed: %sr)r:rAssertionErrorrRrVrIrUrri namespacer option_stringrer r r __call__s    z-TestActionUserDefined.OptionalAction.__call__)Nrrr r-r r r r OptionalActionsr/c@seZdZdddZdS)z&TestActionUserDefined.PositionalActionNcCszJtdd}|dvrd|_n,|dvr,d|_n|dvrr?rEz--non-breakingr2uRhelp message containing non-breaking spaces shall not wrap at non-breaking spacesrCuB usage: PROG [-h] [--non-breaking] main description optional arguments: -h, --help show this help message and exit --non-breaking help message containing non-breaking spaces shall not wrap at non-breaking spaces )r]rhrrurvrwr6r r r test_help_non_breaking_spaces8sz/TestAddSubparsers.test_help_non_breaking_spacescCs6|jdd}||d||tddS)Nrrz)usage: PROG [+h] [++foo] bar {1,2,3} ... aJ usage: PROG [+h] [++foo] bar {1,2,3} ... main description positional arguments: bar bar help {1,2,3} command help optional arguments: +h, ++help show this help message and exit ++foo foo help ryr6r r r test_help_alternate_prefix_charsJs   z2TestAddSubparsers.test_help_alternate_prefix_charscCs.||jd||jtddS)Nrsa usage: PROG [-h] [--foo] bar {1,2,3} ... main description positional arguments: bar bar help {1,2,3} command help 1 1 help 2 2 help 3 3 help optional arguments: -h, --help show this help message and exit --foo foo help )rr[rtrurvrwrr r r test_parser_command_help\s   z*TestAddSubparsers.test_parser_command_helpcCsxtddd}|jdddd|jdd d |jd d d d}|d}|d}||d||tddS)Nr>r?rErrrBrCrrFrD subcommandsrKzadditional text)rJrArDrurz'usage: PROG [-h] [--foo] bar {1,2} ... a usage: PROG [-h] [--foo] bar {1,2} ... main description positional arguments: bar bar help optional arguments: -h, --help show this help message and exit --foo foo help subcommands: command help {1,2} additional text ) r]rhrTrVrrtrurvrw)rrirXrYrZr r r test_subparser_title_helpqs   z+TestAddSubparsers.test_subparser_title_helpcCsN|t }|j|Wdn1s00Y|||jjdSr)rrIrirYrrr;rL)rrZ expected_helpr=r r r _test_subparser_helps .z&TestAddSubparsers._test_subparser_helpcCs|dtddS)Nz5.0 1 -ha usage: PROG bar 1 [-h] [-w W] {a,b,c} 1 description positional arguments: {a,b,c} x help optional arguments: -h, --help show this help message and exit -w W w help rrvrwrr r r test_subparser1_helpsz&TestAddSubparsers.test_subparser1_helpcCs|dtddS)Nz5.0 2 -ha usage: PROG bar 2 [-h] [-y {1,2,3}] [z ...] 2 description positional arguments: z z help optional arguments: -h, --help show this help message and exit -y {1,2,3} y help rrr r r test_subparser2_helpsz&TestAddSubparsers.test_subparser2_helpc Cs\|jdd}||dtdddddgf||dtdddddgfdS) NTrMz 0.5 1alias1 bFrr r_z 0.5 1alias2 b)rrrcrr:r6r r r test_alias_invocations   z'TestAddSubparsers.test_alias_invocationcCs"|jdd}||jddS)NTrz 0.5 1alias3 b)rr=rYrr6r r r test_error_alias_invocations z-TestAddSubparsers.test_error_alias_invocationcCs.|jddd}d|_||tddS)NT)rMrWa usage: PROG [-h] [--foo] bar COMMAND ... main description positional arguments: bar bar help optional arguments: -h, --help show this help message and exit --foo foo help commands: COMMAND 1 (1alias1, 1alias2) 1 help 2 2 help 3 3 help )rZmaxDiffrrurvrwr6r r r test_alias_helpsz!TestAddSubparsers.test_alias_help)FNF)rrr rr=rrr\rbrdrerirkrmrqrrrxrzr{r|r}rrrrrrrrcr r r_r r;ts6 7   r;c@s(eZdZdZddZddZddZdS) TestPositionalsGroupsz@Tests that order of group positionals matches construction ordercCsZt}|d|d}|d|dtdddd}|d }|||dS) Nrmrrrrurr`r1 2 3)r]rhrnr:rYrrrriroexpectedrZr r r test_nongroup_firsts    z)TestPositionalsGroups.test_nongroup_firstcCsZt}|d}|d|d|dtdddd}|d }|||dS) Nxxxrmrrrurr`rrr]rnrhr:rYrrrr r r test_group_firsts    z&TestPositionalsGroups.test_group_firstcCspt}|d}|d|d|d|d}|dtddd d d }|d }|||dS) Nrrmrrrfrellrurr`r)rmrrrz1 2 3 4rrr r r test_interleaved_groupss      z-TestPositionalsGroups.test_interleaved_groupsN)rrr rrrrr r r r rs  rcseZdZdZddZfddZddZdd Zd d Zd d Z ddZ ddZ ddZ ddZ ddZddZddZddZddZZS) TestParentParsersz5Tests that parsers can be created with parent parserscOs|jtg|Ri|dSrr<r7r r r r= sz+TestParentParsers.assertArgumentParserErrorcsttdd|_|jd|jd}|d|jdtdd|_|jd|jd|jd }|d tdd|_|jdtdd|_|jdtdd|_ |j }|jd d d |jdd d t j tjd|_dS)NFrz--wrrrrrMr z--drrrr)r^rr] wxyz_parentrhrn abcd_parentw_parentz_parentab_mutex_parentadd_mutually_exclusive_grouprr"basenamerRru main_program)rZx_groupc_groupror_r r r s(                 zTestParentParsers.setUpcCs2t|jgd}||dtdddddS)Nparentsz -y 1 2 --w 3r`rurr-rr)r]rrrYrr:r6r r r test_single_parent$ s z$TestParentParsers.test_single_parentcCs,||jjt|jgd}||jdSNr)_test_mutex_abrrYr]r6r r r test_single_parent_mutex) sz*TestParentParsers.test_single_parent_mutexcCs0|jg}td|d}t|gd}||jdS)NF)rrr)rr]rrYrrrir r r test_single_granparent_mutex. s  z.TestParentParsers.test_single_granparent_mutexcCs||gtddd||dgtddd||dgtddd||ddg||ddg||dg||ddg||ddgdS)NFrr rTrMrO)rr:r=)rrYr r r r4 sz TestParentParsers._test_mutex_abc Cs@|j|jg}t|d}||dtddddddddS)Nrz--d 1 --w 2 3 4r`rurr)rr rr-rr)rrr]rrYrr:rr r r test_multiple_parents> s   z'TestParentParsers.test_multiple_parentsc Csb|j|jg}t|d}||dtdddddd||jd||jd dS) Nrz -a --w 2 3TFrr`)rr r-rrz -a --w 2 3 -bz -a -b --w 2 3)rrr]rrYrr:r=rr r r test_multiple_parents_mutexD s    z-TestParentParsers.test_multiple_parents_mutexcCs |jtjtj|j|jgddSr)rr7 ArgumentErrorr8rrrr r r test_conflicting_parentsN s  z*TestParentParsers.test_conflicting_parentscCs |jtjtj|j|jgddSr)rr7rr8rrrr r r test_conflicting_parents_mutexT s  z0TestParentParsers.test_conflicting_parents_mutexcCs:|j|jg}t|d}||dtdddddS)Nrrtrr)rrr]rrYrr:rr r r test_same_argument_name_parentsZ s    z1TestParentParsers.test_same_argument_name_parentsc CsPt}|}|jd|jgd}|d||dtddddd dS) Nrrr,zbar -b 1 --d 2 3 4r`rurr)rr rr,) r]rTrVrrhrrYrr:)rrirXZ abcde_parserr r r test_subparser_parents` s z(TestParentParsers.test_subparser_parentsc Cst}|}|jg}|jd|d}|d}|d|j|jg}|jd|d}|d||d t dd d d ||d t d dd ddd d| |jd | |jd dS)Nrmrrr rr,zfoo -a 4TFrr zbar -b --w 2 3 4rr`)rr r-rrr,z foo -a -b 4z bar -b -a 4) r]rTrrVrnrhrrrYrr:r=)rrirXrZ abc_parserrZwxyzabe_parserr r r test_subparser_parents_mutexh s*       z.TestParentParsers.test_subparser_parents_mutexc CsJ|j|jg}t|d}|}|j}||td||rr@rrrrr2z--soupz--nutsz usage: PROG [-h] [--foo | --bar] [--soup | --nuts] optional arguments: -h, --help show this help message and exit --foo --bar --soup --nuts )r]rrhrrurvrw)rriZgroup1group2rr r r rx s  z*TestMutuallyExclusiveGroupErrors.test_helpN)rrr rrrxr r r r r s rc@sLeZdZddZddZddZddZd d Zd d Zd dZ ddZ dS)MEMixincCs4|jddj}t}|jD]}||||qdSNFr get_parserrYrIrrrrrYrb args_stringr r r test_failures_when_not_required s z'MEMixin.test_failures_when_not_requiredcCs:|jddj}t}|jdgD]}||||qdS)NTrrrrr r r test_failures_when_required sz#MEMixin.test_failures_when_requiredcCsD|jddj}|j|j}|D] \}}||}|||qdSr)rrYrsuccesses_when_not_requiredrr)rrYrrr actual_nsr r r test_successes_when_not_required s    z(MEMixin.test_successes_when_not_requiredcCs:|jddj}|jD] \}}||}|||qdSNTr)rrYrrr)rrYrrrr r r test_successes_when_required s z$MEMixin.test_successes_when_requiredcCs,|jddj}|j}||t|dSr)rrtusage_when_not_requiredrrvrwrrtZexpected_usager r r test_usage_when_not_required sz$MEMixin.test_usage_when_not_requiredcCs,|jddj}|j}||t|dSr)rrtusage_when_requiredrrvrwrr r r test_usage_when_required sz MEMixin.test_usage_when_requiredcCs2|jddj}|j|j}||t|dSr)rrurrDrrvrwrrurDr r r test_help_when_not_required s z#MEMixin.test_help_when_not_requiredcCs2|jddj}|j|j}||t|dSr)rrurrDrrvrwrr r r test_help_when_required s zMEMixin.test_help_when_requiredN) rrr rrrrrrrrr r r r r src@sxeZdZdddZddgZdedddfd ed ddfd edd dfd edd dfgZdedddfgZdZdZ dZ dS)TestMutuallyExclusiveSimpleNcCs:tdd}|j|d}|jddd|jddd d d |S) Nr>rrrrFr~rrrbaz help)rrrDr]rrhrr+riror r r r s   z&TestMutuallyExclusiveSimple.get_parser--bar X --baz Yz --bar X --baz--bar Xrrrz--bar X --bar Zr--baz Yrrrz; usage: PROG [-h] [--bar BAR | --baz [BAZ]] z; usage: PROG [-h] (--bar BAR | --baz [BAZ]) z optional arguments: -h, --help show this help message and exit --bar BAR bar help --baz [BAZ] baz help )N rrr rrr:rrrrrDr r r r r s rc @seZdZdddZdgZdedddddfded ddddfd edddddfd edd dddfgZd edddddfgZd ZdZ dZ dS)TestMutuallyExclusiveLongNcCsRtdd}|jddd|jddd|j|d}|jd d d|jd d d|S) Nr>rz--abcdez abcde helpr~z--fghijz fghij helprz--klmnoz klmno helpz--pqrstz pqrst helpr]rhrrr r r r0 s  z$TestMutuallyExclusiveLong.get_parserz--klmno X --pqrst Yz --klmno Xr)ZabcdeZfghijZklmnoZpqrstz--abcde Y --klmno Xrz --pqrst Xz--pqrst X --fghij Yrzi usage: PROG [-h] [--abcde ABCDE] [--fghij FGHIJ] [--klmno KLMNO | --pqrst PQRST] zi usage: PROG [-h] [--abcde ABCDE] [--fghij FGHIJ] (--klmno KLMNO | --pqrst PQRST) z optional arguments: -h, --help show this help message and exit --abcde ABCDE abcde help --fghij FGHIJ fghij help --klmno KLMNO klmno help --pqrst PQRST pqrst help )Nrr r r r r. s   rc@sfeZdZddZdgZdedddfded ddfd ed d dfgZd ed ddfgZdZdZ dZ d S)$TestMutuallyExclusiveFirstSuppressedcCs:tdd}|j|d}|jdtjd|jdddd |S) Nr>rrrr~rr2rPrCr]rrhr7rrr r r r[ s   z/TestMutuallyExclusiveFirstSuppressed.get_parserz-x X -yz-x XrTrz -x X -x YrrNFrz& usage: PROG [-h] [-y] z$ usage: PROG [-h] -y zx optional arguments: -h, --help show this help message and exit -y y help rr r r r rY src @seZdZddZgdZdeddddfded d ddfd ed dd dfd eddddfgZd ed dddfgZdZZ dZ dS)#TestMutuallyExclusiveManySuppressedcCsNtdd}|j|d}|j}|ddtjd|ddtjd|d tjd |S) Nr>rr--spamrrCrr2z --bladderr~r)rr+rirorr r r r| s  z.TestMutuallyExclusiveManySuppressed.get_parser)z--spam --badgerz--badger --bladder Bz--bladder B --spamrTN)rrZbladderrFz --bladder Brz --spam --spamrz! usage: PROG [-h] [ optional arguments: -h, --help show this help message and exit rrr rrr:rrrrrDr r r r rz s rc @seZdZddZgdZdeddddfd ed d ddfded ddgdfd ed dgd dfgZded dddfgZdZdZ dZ dS)*TestMutuallyExclusiveOptionalAndPositionalcCsJtdd}|j|d}|jdddd|jdd d |jd d d dd|S)Nr>rrrrFOOrCrSPAMr~rrrBADGERrrrDrrr r r r s   z5TestMutuallyExclusiveOptionalAndPositional.get_parser)z--foo --spam Sz --spam S XzX --foozX Y Z --spam Sz --foo X YrTNr)rmrrz--spam SFSzX Y Z)rrrrzD usage: PROG [-h] [--foo | --spam SPAM | badger ...] zD usage: PROG [-h] (--foo | --spam SPAM | badger ...) z positional arguments: badger BADGER optional arguments: -h, --help show this help message and exit --foo FOO --spam SPAM SPAM rr r r r r src @seZdZddZgdZdeddddddfdeddddddfd eddddddfd eddddddfd eddddddfd eddddddfgZd eddddddfdeddddddfdeddddddfgZdZZ dZ dS)#TestMutuallyExclusiveOptionalsMixedcCsjtdd}|jdddd|j|d}|jddd d|jd dd d|jd dd d|jdddd|S)Nr>rrrrNrCrra helprMb helprrPrOc helprrr r r r s  z.TestMutuallyExclusiveOptionalsMixed.get_parser)z-a -b-b -cz-a -cz-a -b -crTFrr r rrrMrOz-a -xz-y -bz-x -y -crrrz: usage: PROG [-h] [-x] [-a] [-b] [-y] [-c] z optional arguments: -h, --help show this help message and exit -x x help -a a help -b b help -y y help -c c help Nrr r r r r s  rc@s\eZdZdddZddgZdedddfd edd dfgZd edddfgZd Zd Z dZ dS)TestMutuallyExclusiveInGroupNcCsDtdd}|jddd}|j|d}|jddd |jd d d |S) Nr>rz Titled groupzGroup descriptionrrrrFr~rr)r]rnrrh)rr+riZ titled_group mutex_groupr r r r s  z'TestMutuallyExclusiveInGroup.get_parserrz--baz X --bar Yrrrrrrz9 usage: PROG [-h] [--bar BAR | --baz BAZ] z9 usage: PROG [-h] (--bar BAR | --baz BAZ) z optional arguments: -h, --help show this help message and exit Titled group: Group description --bar BAR bar help --baz BAZ baz help )Nrr r r r r s rc @seZdZddZgdZdeddddddfd ed d ddddfd ed dd dddfd eddddd dfded d ddd dfgZded dddddfded dddd dfgZdZZ dZ d S)1TestMutuallyExclusiveOptionalsAndPositionalsMixedcCshtdd}|jddd|jdddd |j|d }|jd d d d|jdddd |jdddd |S)Nr>rrrNr~rrrPrCrrrrrSrMrrOrrrr r r r s  zrrrrMrOz-dz-err)rr+rirorZgroup3r r r rH s          z&TestMutuallyExclusiveNested.get_parserzO usage: PROG [-h] [-a A | -b B | [-c C | -d D | [-e E | -f F]]] zO usage: PROG [-h] (-a A | -b B | (-c C | -d D | (-e E | -f F))) z optional arguments: -h, --help show this help message and exit -a A -b B -c C -d D -e E -f F N) rrr rrrrDrrrrr r r r rF s  rcseZdZdfdd ZZS)MEPBaseNcs(tt|j|d}t|jd|gd}|S)NrF)r@rr)r^rrr]r@)rr+rrir_r r rt s  zMEPBase.get_parser)N)rrr rrcr r r_r rr src@s eZdZdS)&TestMutuallyExclusiveGroupErrorsParentNrr r r r r{ src@s eZdZdS)!TestMutuallyExclusiveSimpleParentNrr r r r r src@s eZdZdS)TestMutuallyExclusiveLongParentNrr r r r r src@s eZdZdS)*TestMutuallyExclusiveFirstSuppressedParentNrr r r r r src@s eZdZdS))TestMutuallyExclusiveManySuppressedParentNrr r r r r src@s eZdZdS)0TestMutuallyExclusiveOptionalAndPositionalParentNrr r r r r src@s eZdZdS))TestMutuallyExclusiveOptionalsMixedParentNrr r r r r src@s eZdZdS)7TestMutuallyExclusiveOptionalsAndPositionalsMixedParentNrr r r r r src@sDeZdZddZddZddZddZd d Zd d Zd dZ dS)TestSetDefaultsc Cst}|jdd|jddd|tdddd|g|tdddd|gt|tdddd|gtdd|tdddd|gtddd dS) NrmrrrO)rrrrr)rrr] set_defaultsrr:rYr6r r r test_set_defaults_no_args s  z)TestSetDefaults.test_set_defaults_no_argsc Cst}|jddd|jddd|tddd|g|tddd|gt|tddd|gtdd|td dd|d |td dd|d t|td dd|d tdddS) NrmrrrZxfooxrrrrur,)r]rrhrr:rYrr6r r r test_set_defaults_with_args s*  z+TestSetDefaults.test_set_defaults_with_argscCsRt}|jdd|}|d}|jdd|tddd|ddS)Nrmrrrr0r)r]rrTrVrr:rYr)rrirXZparser_ar r r test_set_defaults_subparsers s    z,TestSetDefaults.test_set_defaults_subparserscCs>tdd}|jddt|gd}|tdd|gdS)NFrrmrrr)rrrir r r test_set_defaults_parents s   z)TestSetDefaults.test_set_defaults_parentscCsLt}|d}|jdd|jdd|tdd|dgdS)NrrOrr)r7r8rTrVrrr:rY)rriZxparserr r r )test_set_defaults_on_parent_and_subparser s   z9TestSetDefaults.test_set_defaults_on_parent_and_subparsercCst}|jddddd|d|jddd |jd d d |jd d dd|tddddd|g|jddddd|tddddd|gdS)NWrrrrrrXXrrrrrZZrWWYY)r]rrhrr:rYr6r r r &test_set_defaults_same_as_add_argument s z6TestSetDefaults.test_set_defaults_same_as_add_argumentcCst}|jddddd|d}|d|jdd d |jd d d |jdd dd|tdd ddd|g|jddddd|tddddd|gdS)Nrrrrrrmrrr rrrrrr rr r )r]rrnrhrr:rYrriror r r ,test_set_defaults_same_as_add_argument_group s  z.AddTestsc Ssj||_||_|j|j|jfD]H}d|j|f}|fdd}z ||_WntyVYn0t|||qdS)Nz%s_%scSs ||dSrr rxr r r test_wrapper? szUTestHelpFormattingMetaclass.__init__..AddTests.__init__..test_wrapper) func_suffixstd_name test_format test_printtest_print_filerrrU)rZ test_classrrryrrr r r r86 s   z?TestHelpFormattingMetaclass.__init__..AddTests.__init__c Sstj|jji|jj}t|dgD]}|j|ji|jq$t|dg}|D]:\}}|j|ji|j}|D]}|j|ji|jqnqNt|dg}|r|} |D]} | j | ji| jq|S)Nrjargument_group_signaturessubparsers_signatures) r7r8rfr5r6rTrhrnrTrV) rrriZ argument_sigZ group_sigsZ group_sigZ argument_sigsroZsubparsers_sigsrXZ subparser_sigr r r rG s4        zBTestHelpFormattingMetaclass.__init__..AddTests._get_parsercSs&t||j}t|}|||dSr)rTrrvrwr)rr parser_textZ expected_textr r r _test] s  z.AddTests._testcSs,||}t|d|j}|||dS)Nz format_%s)rrTrr&)rrrirr r r r b s zBTestHelpFormattingMetaclass.__init__..AddTests.test_formatc Ss||}t|d|j}tt|j}tt|jtz(|tt|j}Wtt|j|ntt|j|0|||dSNzprint_%s) rrTrrRrrUrrXr&)rrriprint_Z old_streamr%r r r r!g s   zATestHelpFormattingMetaclass.__init__..AddTests.test_printcSs@||}t|d|j}t}|||}|||dSr')rrTrrrXr&)rrrir(Zsfiler%r r r r"s s  zFTestHelpFormattingMetaclass.__init__..AddTests.test_print_fileN) rrr r8rr&r r!r"r r r r r4 s  r))usagerL)rDrL)r)rr+rrrrrr r r r80 s H z$TestHelpFormattingMetaclass.__init__Nr9r r r r r. srrc@sneZdZdZeddddZedddd d ed d d dedddedddedddgZgZdZedZ dZ dS)TestHelpBiggerOptionals;Make sure that argument help aligns when options are longerr> DESCRIPTIONEPILOGr@rAepilogrrr0.1rrrX HELPrC--yY HELPr~rmFOO HELPrBAR HELPz; usage: PROG [-h] [-v] [-x] [--y Y] foo bar ab DESCRIPTION positional arguments: foo FOO HELP bar BAR HELP optional arguments: -h, --help show this help message and exit -v, --version show program's version number and exit -x X HELP --y Y Y HELP EPILOG  0.1 N rrr rr4rfrjr#r)rDrr r r r r* s    r*c@s<eZdZdZddZejZejZejZdZ e dZ ej Z dS)TestShortColumnszTest extremely small number of columns. TestCase prevents "COLUMNS" from being too small in the tests themselves, but we don't want any exceptions thrown in such cases. Only ugly representation. cCs$t}|dd||jdS)Nr r)rrrrrrr r r r s zTestShortColumns.setUpz usage: PROG [-h] [-v] [-x] [--y Y] foo bar a DESCRIPTION positional arguments: foo FOO HELP bar BAR HELP optional arguments: -h, --help show this help message and exit -v, --version show program's version number and exit -x X HELP --y Y Y HELP EPILOG N) rrr rrr*rfrjr#r)rDrr r r r r8 s r8c@seZdZdZeddddZedddd d ed d d dedddedddedddgZedddedddeddddgfgZdZed Z d!Z d"S)#TestHelpBiggerOptionalGroupsr+r>r,r-r.rrrr0rrrr1rCr2r3r~rmr4rr5z GROUP TITLEzGROUP DESCRIPTIONrLrzBAZ HELPrrzZ HELPrSzN usage: PROG [-h] [-v] [-x] [--y Y] [-z Z [Z ...]] foo bar baz a DESCRIPTION positional arguments: foo FOO HELP bar BAR HELP optional arguments: -h, --help show this help message and exit -v, --version show program's version number and exit -x X HELP --y Y Y HELP GROUP TITLE: GROUP DESCRIPTION baz BAZ HELP -z Z [Z ...] Z HELP EPILOG r6Nr7r r r r r9 s$       r9c@s^eZdZdZedddZedddded d d ed d d eddd gZgZdZedZ dZ dS)TestHelpBiggerPositionalsz4Make sure that help aligns when arguments are longerUSAGEr,r)rArrr1rCr2r3r~ZekiekiekifekangzEKI HELPrr5 usage: USAGE a  DESCRIPTION positional arguments: ekiekiekifekang EKI HELP bar BAR HELP optional arguments: -h, --help show this help message and exit -x X HELP --y Y Y HELP rNr7r r r r r: s     r:c@sfeZdZdZedddZedddded d d dgZed d deddddgfgZdZedZ dZ dS)TestHelpReformatting>Make sure that text after short names starts on the first liner>ze oddly formatted description that is so long that it should go onto multiple lines when wrappedrErr zoddly formatted -x helprHrDrrz normal y helprJz' oddly formatted group descriptionrLrrz` oddly formatted -a help again, so long that it should be wrapped over multiple linesrC2 usage: PROG [-h] [-x XX] [-a] yyy a oddly formatted description that is so long that it should go onto multiple lines when wrapped positional arguments: yyy normal y help optional arguments: -h, --help show this help message and exit -x XX oddly formatted -x help title: oddly formatted group description -a oddly formatted -a help again, so long that it should be wrapped over multiple lines rNr7r r r r r>- s"    r>c@sbeZdZdZedddZedddded d d dgZed ed dddgfgZdZedZ dZ dS)TestHelpWrappingShortNamesr?r>zZD DD DD DD DD DD DD DD DD DD DD DD DD DD DD DD DD DD DD DD DD DD DD DD DD DD DD DD DD DD DrErr zxXHH HXXHH HXXHH HXXHH HXXHH HXXHH HXXHH HXXHH HXXHH HXXHH HXXHH HXXHH HXXHH HXXHH HXXHH HXXHH HXXHH HXXHH HXXHH HXXHH HXr@rrdYH YHYH YHYH YHYH YHYH YHYH YHYH YHYH YHYH YHYH YHYH YHYH YHYH YHYH YHYH YHYH YHYH YHYH YHYH YHYH YHALPHASrrzPAHHH HHAAHHH HHAAHHH HHAAHHH HHAAHHH HHAAHHH HHAAHHH HHAAHHH HHAAHHH HHAAHHH HHArCrAa D DD DD DD DD DD DD DD DD DD DD DD DD DD DD DD DD DD DD DD DD DD DD DD DD DD DD DD DD DD D positional arguments: yyy YH YHYH YHYH YHYH YHYH YHYH YHYH YHYH YHYH YHYH YHYH YHYH YHYH YHYH YHYH YHYH YHYH YHYH YHYH YHYH YH optional arguments: -h, --help show this help message and exit -x XX XHH HXXHH HXXHH HXXHH HXXHH HXXHH HXXHH HXXHH HXXHH HXXHH HXXHH HXXHH HXXHH HXXHH HXXHH HXXHH HXXHH HXXHH HXXHH HXXHH HX ALPHAS: -a AHHH HHAAHHH HHAAHHH HHAAHHH HHAAHHH HHAAHHH HHAAHHH HHAAHHH HHAAHHH HHAAHHH HHA rNr7r r r r rBa s    rBc@s|eZdZdZedddZeddddd ed d d d edddd gZededddd edddd gfgZdZedZ dZ dS)TestHelpWrappingLongNameszrrrr-rSrrrrr~r r)rDrr rrzWhether to foo)rDrrzWhether to barT)rDrrrz--foobarz--barfoorrorrrrrrr,a usage: PROG [-h] [-w W [W ...]] [-x [X ...]] [--foo | --no-foo] [--bar | --no-bar] [-f | --foobar | --no-foobar | --barfoo | --no-barfoo] [-y [Y]] [-z Z Z Z] a b b [c] [d ...] e [e ...] ao positional arguments: a a b b c c optional arguments: -h, --help show this help message and exit -w W [W ...] w -x [X ...] x --foo, --no-foo Whether to foo --bar, --no-bar Whether to bar (default: True) -f, --foobar, --no-foobar, --barfoo, --no-barfoo group: -y [Y] y -z Z Z Z z d d e e rN) rrr rr4rfr7r9rjr#r)rDrr r r r rG s.           rGc@speZdZdZedddZgZededdded d dgfed ed d ded d dgfgZdZedZ dZ dS)TestHelpOnlyUserGroupsrHr>Fr@rZxxxxrrr~rZyyyyr rrz. usage: PROG [-x X] [-y Y] a b zn xxxx: -x X x a a yyyy: b b -y Y y rNr7r r r r rI s       rIc@sReZdZdZeddZedddeddded ed gZgZd Zed Z d Z dS)TestHelpUsageLongProgz*Test usage messages where the prog is longrrrOrMrrFrrPrrQrr r z usage: PROG [-h] [-w WWWWWWWWWWWWWWWWWWWWWWWWW] [-x XXXXXXXXXXXXXXXXXXXXXXXXX] [-y YYYYYYYYYYYYYYYYYYYYYYYYY] [-z ZZZZZZZZZZZZZZZZZZZZZZZZZ] a b c aD positional arguments: a b c optional arguments: -h, --help show this help message and exit -w WWWWWWWWWWWWWWWWWWWWWWWWW -x XXXXXXXXXXXXXXXXXXXXXXXXX -y YYYYYYYYYYYYYYYYYYYYYYYYY -z ZZZZZZZZZZZZZZZZZZZZZZZZZ rNr7r r r r rWns      rWc@sVeZdZdZeddZedededededed gZgZd Zed Z d Z d S)TestHelpUsagePositionalsWrapz.Test usage messages where the positionals wrapr>rrrrrSrTrUz usage: PROG [-h] [-x X] [-y Y] [-z Z] aaaaaaaaaaaaaaaaaaaaaaaaa bbbbbbbbbbbbbbbbbbbbbbbbb ccccccccccccccccccccccccc a positional arguments: aaaaaaaaaaaaaaaaaaaaaaaaa bbbbbbbbbbbbbbbbbbbbbbbbb ccccccccccccccccccccccccc optional arguments: -h, --help show this help message and exit -x X -y Y -z Z rNr7r r r r rXs  rXc@sbeZdZdZeddZedddeddded d ded ed ed gZgZdZedZ dZ dS)%TestHelpUsageOptionalsPositionalsWrapzrrrFrMrrPrrQrSrTrUa usage: PROG [-h] [-x XXXXXXXXXXXXXXXXXXXXXXXXX] [-y YYYYYYYYYYYYYYYYYYYYYYYYY] [-z ZZZZZZZZZZZZZZZZZZZZZZZZZ] aaaaaaaaaaaaaaaaaaaaaaaaa bbbbbbbbbbbbbbbbbbbbbbbbb ccccccccccccccccccccccccc ae positional arguments: aaaaaaaaaaaaaaaaaaaaaaaaa bbbbbbbbbbbbbbbbbbbbbbbbb ccccccccccccccccccccccccc optional arguments: -h, --help show this help message and exit -x XXXXXXXXXXXXXXXXXXXXXXXXX -y YYYYYYYYYYYYYYYYYYYYYYYYY -z ZZZZZZZZZZZZZZZZZZZZZZZZZ rNr7r r r r rYs     rYc@sPeZdZdZeddZedddeddded d dgZgZd Zed Z d Z dS)TestHelpUsageOptionalsOnlyWrapz@Test usage messages where there are only optionals and they wrapr>rrrFrMrrPrrQz usage: PROG [-h] [-x XXXXXXXXXXXXXXXXXXXXXXXXX] [-y YYYYYYYYYYYYYYYYYYYYYYYYY] [-z ZZZZZZZZZZZZZZZZZZZZZZZZZ] z optional arguments: -h, --help show this help message and exit -x XXXXXXXXXXXXXXXXXXXXXXXXX -y YYYYYYYYYYYYYYYYYYYYYYYYY -z ZZZZZZZZZZZZZZZZZZZZZZZZZ rNr7r r r r rZs    rZc@sFeZdZdZedddZedededgZgZdZed Z d Z d S) TestHelpUsagePositionalsOnlyWrapzBTest usage messages where there are only positionals and they wrapr>FrJrSrTrUz~ usage: PROG aaaaaaaaaaaaaaaaaaaaaaaaa bbbbbbbbbbbbbbbbbbbbbbbbb ccccccccccccccccccccccccc rVrNr7r r r r r[s r[c @seZdZdZeddZededdeddd d d d ed dddeddddgdddedddeddddgZeded d!ded"d#d$dgfgZd%Z e d&Z d'Z d(S))TestHelpVariableExpansionz:Test that variables are expanded properly in help messagesr>rrz"x %(prog)s %(default)s %(type)s %%rGrrrXXXz y %(prog)s %(default)s %(const)s)rrrrDrr!z$foo %(prog)s %(default)s %(choices)srOrrrOrZBBBz!bar %(prog)s %(default)s %(dest)s)rr#rHrDrzspam %(prog)s %(default)sr~rrzbadger %(prog)s %(default)s)rrDrorza %(prog)s %(default)srMrzb %(prog)s %(default)szw usage: PROG [-h] [-x X] [-y] [--foo {a,b,c}] [--bar BBB] [-a A] [-b B] spam badger a positional arguments: spam spam PROG None badger badger PROG 0.5 optional arguments: -h, --help show this help message and exit -x X x PROG None int % -y y PROG 42 XXX --foo {a,b,c} foo PROG None a, b, c --bar BBB bar PROG baz bar group: -a A a PROG None -b B b PROG -1 rN) rrr rr4rfrrjr#r)rDrr r r r r\ s2       r\c@s4eZdZdZedddZgZgZdZedZ dZ dS) &TestHelpVariableExpansionUsageSuppliedz@Test that variables are expanded properly when usage= is presentr>z %(prog)s FOOr@r)z usage: PROG FOO rrNr7r r r r r^:s r^c@s0eZdZdZedddZgZgZdZeZ dZ dS)$TestHelpVariableExpansionNoArgumentsz;Test that variables are expanded properly with no argumentsr>FrJz usage: PROG rNr7r r r r r`Ks r`c@sFeZdZdZedejdZedddedddgZgZ d Z d Z d Z d S) TestHelpSuppressUsagez3Test that items can be suppressed in usage messagesr>r_rrBr~r spam helpz positional arguments: spam spam help optional arguments: -h, --help show this help message and exit --foo FOO foo help rN) rrr rr4r7rrfrjr#rDr)rr r r r raXs  rac@sJeZdZdZedddZedejdedddgZgZ d Z e d Z d Z d S) TestHelpSuppressOptionalz?Test that optional arguments can be suppressed in help messagesr>FrJrr~rrbz! usage: PROG spam zA positional arguments: spam spam help rN rrr rr4rfr7rrjr#r)rDrr r r r rcms   rcc@s\eZdZdZeddZedddedddgZed ed ejdgfgZ d Z e d Z d Z dS)TestHelpSuppressOptionalGroupzrrrBr~rrbror2 usage: PROG [-h] [--foo FOO] spam positional arguments: spam spam help optional arguments: -h, --help show this help message and exit --foo FOO foo help rN) rrr rr4rfrjr7rr#r)rDrr r r r res    rec@sHeZdZdZeddZedddedejdgZgZ dZ e d Z d Z d S) TestHelpSuppressPositionalzATest that positional arguments can be suppressed in help messagesr>rrrBr~rz- usage: PROG [-h] [--foo FOO] z optional arguments: -h, --help show this help message and exit --foo FOO foo help rNrdr r r r rhs   rhc@s>eZdZdZeddZeddddgZgZdZed Z d Z d S) TestHelpRequiredOptionalz.Test that required options don't look optionalr>rrTrB)r+rDz+ usage: PROG [-h] --foo FOO rirNr7r r r r rjs  rjc@sNeZdZdZeddddZedddd ed d d d gZgZdZedZ dZ dS)TestHelpAlternatePrefixCharsz:Test that options display with different prefix charactersr>z^;F)r@rrz^^foorrBrCz;bz;;barrFr~z- usage: PROG [^^foo] [;b BAR] zq optional arguments: ^^foo foo help ;b BAR, ;;bar BAR bar help rNr7r r r r rks  rkc@sHeZdZdZedddZedddedd dgZgZd Zed Z d Z d S)TestHelpNoHelpOptionalz=Test that the --help argument can be suppressed help messagesr>FrJrrBr~rrbz- usage: PROG [--foo FOO] spam z positional arguments: spam spam help optional arguments: --foo FOO foo help rNr7r r r r rls   rlc@s>eZdZdZeddZededgZgZdZedZ dZ d S) TestHelpNonez1Test that no errors occur if no help is specifiedr>rrrrfz positional arguments: spam optional arguments: -h, --help show this help message and exit --foo FOO rNr7r r r r rms  rmc @sjeZdZdZeddZeddddded d d d ded ddddedddddgZgZdZedZ dZ dS)TestHelpTupleMetavarz"Test specifying metavar as a tupler>rrr-r)ZW1ZW2)rDrrHrrr)ZX1ZX2rrr)ZY1ZY2ZY3rrr)ZZ1z] usage: PROG [-h] [-w W1 [W2 ...]] [-x [X1 [X2 ...]]] [-y Y1 Y2 Y3] [-z [Z1]] z optional arguments: -h, --help show this help message and exit -w W1 [W2 ...] w -x [X1 [X2 ...]] x -y Y1 Y2 Y3 y -z [Z1] z rNr7r r r r rns  rnc@sdeZdZdZedejddZedddedd dgZed d d ed ddgfgZ dZ e dZ dZ dS)TestHelpRawTextTest the RawTextHelpFormatterr>7Keep the formatting exactly as it is written here r@formatter_classrArz- foo help should also appear as given herer~rrbrJ? This text should be indented exactly like it is here rLrrF> usage: PROG [-h] [--foo FOO] [--bar BAR] spam a Keep the formatting exactly as it is written here positional arguments: spam spam help optional arguments: -h, --help show this help message and exit --foo FOO foo help should also appear as given here title: This text should be indented exactly like it is here --bar BAR bar help rN) rrr rr4r7RawTextHelpFormatterrfrjr#r)rDrr r r r ro#s    roc@sdeZdZdZedejddZedddedd dgZed d d ed ddgfgZ dZ e dZ dZ dS)TestHelpRawDescriptionrpr>rqrrrz4 foo help should not retain this odd formattingr~rrbrJrtrLrrFrua Keep the formatting exactly as it is written here positional arguments: spam spam help optional arguments: -h, --help show this help message and exit --foo FOO foo help should not retain this odd formatting title: This text should be indented exactly like it is here --bar BAR bar help rN) rrr rr4r7RawDescriptionHelpFormatterrfrjr#r)rDrr r r r rwTs    rwc @seZdZdZedejddZedddedd d d ed d dedddddgZedddede dddgfgZ dZ e dZ dZ dS)TestHelpArgumentDefaultsz&Test the ArgumentDefaultsHelpFormatterr>rArrrz)foo help - oh and by the way, %(default)sr~rrrFrCrrbrrZwoodenz badger helprrJrLrrr)rCrrDzO usage: PROG [-h] [--foo FOO] [--bar] [--baz BAZ] spam [badger] a description positional arguments: spam spam help badger badger help (default: wooden) optional arguments: -h, --help show this help message and exit --foo FOO foo help - oh and by the way, None --bar bar help (default: False) title: description --baz BAZ baz help (default: 42) rN)rrr rr4r7ArgumentDefaultsHelpFormatterrfrjrr#r)rDrr r r r rys"    ryc@sBeZdZdZedddZeddddd gZgZd Zed Z d Z d S)TestHelpVersionActionz,Test the default help for the version actionr>rArE-Vrrz3.6rz& usage: PROG [-h] [-V] z description optional arguments: -h, --help show this help message and exit -V, --version show program's version number and exit rNr7r r r r r{s r{c@sTeZdZdZeddZeddddejded d d ed d d gZgZ dZ e dZ dS)TestHelpVersionActionSuppresszCTest that the --version argument can be suppressed in help messagesr>rrrrr)rrrDrrBr~rrbrfrgN) rrr rr4rfr7rrjr#r)rDr r r r r}s    r}c@sLeZdZdZedddZeddddd gZd d d DZd ZedZ dZ dS)TestHelpSubparsersOrdering5Test ordering of subcommands in help matches the coder>display some subcommandsrErrrr0rcCsg|]}t|dqS)rr4)r=r+r r r r?sz%TestHelpSubparsersOrdering.)rr r rr,6 usage: PROG [-h] [-v] {a,b,c,d,e} ... z display some subcommands positional arguments: {a,b,c,d,e} optional arguments: -h, --help show this help message and exit -v, --version show program's version number and exit r6N) rrr rr4rfrjr$r)rDrr r r r r~s r~c@sPeZdZdZedddZeddddd gZd Zd d eDZd Z e dZ dZ dS)"TestHelpSubparsersWithHelpOrderingrr>rrErrrr0r))rza subcommand help)r zb subcommand help)r zc subcommand help)rzd subcommand help)r,ze subcommand helpcCsg|]\}}t||dqS))r+rDr)r=r+rDr r r r?sz-TestHelpSubparsersWithHelpOrdering.ra display some subcommands positional arguments: {a,b,c,d,e} a a subcommand help b b subcommand help c c subcommand help d d subcommand help e e subcommand help optional arguments: -h, --help show this help message and exit -v, --version show program's version number and exit r6N) rrr rr4rfrjZsubcommand_datar$r)rDrr r r r rsrc@s\eZdZddZeddejdZededededed e d d gZ gZ d Z e d Z dZdS)TestHelpMetavarTypeFormattercCs|Srr rr r r custom_type#sz(TestHelpMetavarTypeFormatter.custom_typer>rA)r@rArsrrrMrOz SOME FLOAT)rCrHzF usage: PROG [-h] [-b custom_type] [-c SOME FLOAT] int z description positional arguments: int optional arguments: -h, --help show this help message and exit -b custom_type -c SOME FLOAT rN)rrr rr4r7MetavarTypeHelpFormatterrfrrrjr#r)rDrr r r r r!s    rc@seZdZdZddZddZddZdd Zd d Zd d Z ddZ ddZ ddZ ddZ ddZddZddZddZddZd S)!TestInvalidArgumentConstructorsz-Test a bunch of invalid Argument constructorscOs(t}|jt|jg|Ri|dSr)r7r8rrrhrr5r6rir r r assertTypeErrorEs  z/TestInvalidArgumentConstructors.assertTypeErrorcOs(t}|jt|jg|Ri|dSr)r7r8rrrhrr r r assertValueErrorJs  z0TestInvalidArgumentConstructors.assertValueErrorcCs<|jddd|jddd|jddd|jdiddS) Nr)rrrm)callbackr )Z callback_args)Zcallback_kwargsrrr r r test_invalid_keyword_argumentsOsz>TestInvalidArgumentConstructors.test_invalid_keyword_argumentscCs"|dD]}|j|dq dS)N)rBr.rrrrr r r test_missing_destinationUsz8TestInvalidArgumentConstructors.test_missing_destinationcCs|d|ddS)Nraz---rrr r r test_invalid_option_stringsZs z;TestInvalidArgumentConstructors.test_invalid_option_stringscCs$|jddd|jdttfddS)Nrrr)rrrrr r r test_invalid_type^sz1TestInvalidArgumentConstructors.test_invalid_typecCs|jddd|jddd|jdddt}|t}|jdddWdn1s`0Y|dt|jdS) Nrrmrrrr.rBz store-truezunknown action) rr7r8rrrhr:rr;r<r r r test_invalid_actionbs ,z3TestInvalidArgumentConstructors.test_invalid_actioncCsbt}|jdd|t}|jdddWdn1sB0Y|dt|jdS)Nrmrrrz+dest supplied twice for positional argument)r7r8rhrrr:rr;r<r r r test_multiple_destks  ,z2TestInvalidArgumentConstructors.test_multiple_destcCsDdD]:}ttdtddtddfD]}|jd d|i|q$qdS) N)rrr2rNrXrrrabr"rr)r)rUrr)rrattrsr r r test_no_argument_actionsss z8TestInvalidArgumentConstructors.test_no_argument_actionscCs.dD]$}|jdd|d|jdd|dqdS)N)rr2rXrrmr6rrrrrr r r !test_no_argument_no_const_actionszszATestInvalidArgumentConstructors.test_no_argument_no_const_actionscCs\dD]R}|jdd|d|jdd|ddD](}|jdd||d|jdd||dq,qdS) Nrrrrr)rOrrrm)rrrr)rrrr r r #test_more_than_one_argument_actionsszCTestInvalidArgumentConstructors.test_more_than_one_argument_actionscCsdD]}|jdd|dqdS)N)rrNrrrrrr r r test_required_const_actionssz;TestInvalidArgumentConstructors.test_required_const_actionscCs4|jddd|jdddd|jddtjddS)Nrgparsersrr>)rr@)rrg)rr7r8rr r r "test_parsers_action_missing_paramss zBTestInvalidArgumentConstructors.test_parsers_action_missing_paramscCs|jddddS)NrmTrrrr r r test_required_positionalsz8TestInvalidArgumentConstructors.test_required_positionalcs`GdddtGfdddt}t}|j|jd|d|j|jd|ddS)Nc@s eZdZdS)zITestInvalidArgumentConstructors.test_user_defined_action..SuccessNrr r r r Successsrcs"eZdZdfdd ZddZdS)zHTestInvalidArgumentConstructors.test_user_defined_action..ActionFcs"|dkr|ur|urdS)Nrr )roption_stringsrrrr+rr r r8szQTestInvalidArgumentConstructors.test_user_defined_action..Action.__init__c_sdSrr r7r r r r-szQTestInvalidArgumentConstructors.test_user_defined_action..Action.__call__N)F)rrr r8r-r rr r r2s r2r)rrrr)rJrr7r8rrh)rr2rir rr test_user_defined_actions  z8TestInvalidArgumentConstructors.test_user_defined_actionN)rrr rrrrrrrrrrrrrrrrr r r r rBs   rc@seZdZddZddZdS)TestActionsReturnedcCsXt}|d}||jd|dd}||jd|dd}||jddS) NrrmrMrrrrr)r7r8rhrrrrirr r r res   zTestActionsReturned.test_destc Cst}|jddddtddgddd d }||jd||jd||jd||jt||j ddg||j d||j d||j d dS) NrrrrrOrrZBARr)rrrrCr#rDrHr) r7r8rhrrrrrrCr#rDrHrrr r r test_miscs  zTestActionsReturned.test_miscN)rrr rerr r r r rs rc@s$eZdZddZddZddZdS)TestConflictHandlingcCs|jttjdddS)Nrm)conflict_handler)rrr7r8rr r r test_bad_types z"TestConflictHandling.test_bad_typecCsDt}|d|tj|jd|d|tj|jddS)Nrr)r7r8rhrrr6r r r test_conflict_errors  z(TestConflictHandling.test_conflict_errorcCsztj}|ddd}|jddd|jddd||td|jd d d |jd d d ||td dS)Nr>resolve)r@rrzOLD Xr~zNEW Xz usage: PROG [-h] [-x X] optional arguments: -h, --help show this help message and exit -x X NEW X rZOLD_SPAMrMZNEW_SPAMz usage: PROG [-h] [-x X] [--spam NEW_SPAM] optional arguments: -h, --help show this help message and exit -x X NEW X --spam NEW_SPAM )r7r8rhrrurvrw)rrrir r r test_resolve_errors z'TestConflictHandling.test_resolve_errorN)rrr rrrr r r r rs rc@sXeZdZdZddZddZddZdd Zd d Zd d Z ddZ ddZ ddZ dS)TestOptionalsHelpVersionActionsz!Test the help and version actionscCsP|t}||Wdn1s.0Y|||jjdSr)rrIrYrrrur;rL)rrirr=r r r assertPrintHelpExits ,z3TestOptionalsHelpVersionActions.assertPrintHelpExitcGs|t|j|dSr)rrIrYrrir5r r r r=sz9TestOptionalsHelpVersionActions.assertArgumentParserErrorcCsDt}|jddddd||d||d|tt|ddS) Nrrrrrrrformat_versionr]rhrrAttributeErrorrTr6r r r test_versions   z,TestOptionalsHelpVersionActions.test_versioncCsftdd}|jddddd|t}|dgWdn1sH0Y|d|jjdS) NZPPPrrrrz %(prog)s 3.5rzPPP 3.5 r]rhrrIrYrr;rLr<r r r test_version_formats   *z3TestOptionalsHelpVersionActions.test_version_formatcCsHtdd}|jddddd||d||d |tt|d dS) NFrrrrrrrrr)r]rhr=rrrTr6r r r test_version_no_help$s    z4TestOptionalsHelpVersionActions.test_version_no_helpcCsdtdd}|jdddd|t}|dgWdn1sF0Y|d|jjdS)Nr]rr|rz %(prog)s 3.7rzXXX 3.7 rr<r r r test_version_action+s   *z3TestOptionalsHelpVersionActions.test_version_actioncCs>tdd}||d||d||d||ddS)NFrrrrr)r]r=r6r r r test_no_help2s     z,TestOptionalsHelpVersionActions.test_no_helpcCsZt}|jddd|jddd||d||d||d|tt|ddS) NrrDrrrrrr)r]rhrr=rrrTr6r r r test_alternate_help_version9s   z;TestOptionalsHelpVersionActions.test_alternate_help_versioncCst}|jdddd|jddd|dgd }|d d g}|D]J}|D]}d ||f}qN|||d |||d|tt|dqFdS)Nrrrrrrrr)rrrmz-x barzbaz -xz --bad-optionz foo bar bazz %s %%s %srrrr)rriZvalid_prefixesZvalid_suffixesprefixsuffixrr r r !test_help_version_extra_argumentsBs  zATestOptionalsHelpVersionActions.test_help_version_extra_argumentsN) rrr rrr=rrrrrrrr r r r r s rc@sPeZdZdZddZddZddZdd Zd d Zd d Z ddZ ddZ dS) TestStringsz3Test str() and repr() on Optionals and PositionalscCs"ttfD]}||||qdSr)rrr)robjZ result_stringfuncr r r assertStringEqualZs zTestStrings.assertStringEqualc Cs6tjgdddddgdddd }d }|||dS) N)rrrMr rrrrOrrZHELPZMETAVARrrrCrrr#rDrHzAction(option_strings=['--foo', '-a', '-b'], dest='b', nargs='+', const=None, default=42, type='int', choices=[1, 2, 3], help='HELP', metavar='METAVAR'))r7r2r)roptionr r r r test_optional^s zTestStrings.test_optionalc Cs6tjgdtddgdddd}dt}|||dS) Nrrr)rg?rzH HH HzMV MV MVrzAction(option_strings=[], dest='x', nargs='?', const=None, default=2.5, type=%r, choices=[0.5, 1.5, 2.5], help='H HH H', metavar='MV MV MV'))r7r2rr)rargumentr r r r test_argumentns zTestStrings.test_argumentcCs"tjddd}d}|||dS)NrrrwzNamespace(foo=42, bar='spam')r7rrrrr r r r test_namespace~szTestStrings.test_namespacecCs(tjfiddi}d}|||dS)N"quotezNamespace(**{'"': 'quote'})rrr r r 'test_namespace_starkwargs_notidentifiersz3TestStrings.test_namespace_starkwargs_notidentifiercCs,tjfddiddi}d}|||dS)NrrOrrz Namespace(a=1, **{'"': 'quote'})rrr r r 2test_namespace_kwargs_and_starkwargs_notidentifiersz>TestStrings.test_namespace_kwargs_and_starkwargs_notidentifiercCs(tjfiddi}d}|||dS)NZvalidTzNamespace(valid=True)rrr r r $test_namespace_starkwargs_identifiersz0TestStrings.test_namespace_starkwargs_identifiercCs&tjdd}dtj}|||dS)Nr>rzvArgumentParser(prog='PROG', usage=None, description=None, formatter_class=%r, conflict_handler='error', add_help=True))r7r8 HelpFormatterr)rrir r r r test_parsers  zTestStrings.test_parserN) rrr rrrrrrrrrr r r r rWsrc@s$eZdZddZddZddZdS) TestNamespacecCsFt}|tt|dtjddd}||jd||jddS)Nrrrr)r7rrrrTrrr rr r r test_constructors zTestNamespace.test_constructorcCstjddd}tjddd}tjdd}tjdd}||||||||||||||||||k|||k|||k|||kdS)NrOrr)r r)rrR)r7rrZassertNotEqual assertTrue)rZns1Zns2Zns3Zns4r r r test_equalitys       zTestNamespace.test_equalitycCs6tjddd}||dt||dtdS)NrOrr)r7rZassertIsrHNotImplemented__ne__rr r r $test_equality_returns_notimplementedsz2TestNamespace.test_equality_returns_notimplementedN)rrr rrrr r r r rsrc@s$eZdZddZddZddZdS) TestEncodingcCsRtj|\}}|d7}t|ddd}|Wdn1sD0YdS)Nz.pyrezutf-8r)rr"splitextr.r)rr"rwrr r r _test_module_encodingsz"TestEncoding._test_module_encodingcCs|tjdSr)rr7__file__rr r r test_argparse_module_encodingsz*TestEncoding.test_argparse_module_encodingcCs|tdSr)rrrr r r "test_test_argparse_module_encodingsz/TestEncoding.test_test_argparse_module_encodingN)rrr rrrr r r r rsrc@seZdZddZdS)TestArgumentErrorcCs$d}td|}|t||dS)Nz my error here)r7rrr)rrrbr r r test_argument_errors z%TestArgumentError.test_argument_errorN)rrr rr r r r rsrc@seZdZddZdS)TestArgumentTypeErrorcCsldd}tddd}|jd|d|t}|dgWdn1sN0Y|d |jjdS) NcSstddS)Nspam!)r7ArgumentTypeErrorrr r r rsz.spamr>FrJrrr]z-usage: PROG x PROG: error: argument x: spam! )r]rhrrIrYrr;rM)rrrir=r r r test_argument_type_errors  *z.TestArgumentTypeError.test_argument_type_errorN)rrr rr r r r rsrc@s$eZdZddZddZddZdS)TestMessageContentErrorcCsltddd}|jdtd|jdtdd|jd td d |t}|gWdn1sd0Yt|j}||d||d ||d |t}|d gWdn1s0Yt|j}| |d||d ||d |t}|d dgWdn1s00Yt|j}| |d| |d ||d dS)Nr>rr_req_posr-req_optTr*Zneed_oner)rCrreq_optZ myXargumentz -req_opt=1) r]rhrrrrIrYr; assertRegexrrrir=rr r r %test_missing_argument_name_in_messages,  (     *     .   z=TestMessageContentError.test_missing_argument_name_in_messagecCstddd}|jdtd|jdtdd|jd td dd |t}|gWdn1sf0Yt|j}| |d| |d | |d |t}|dgWdn1s0Yt|j}| |d| |d | |d dS)Nr>rr_rrz --req_optTr*z --opt_optr)rCrrrZopt_optz --req_opt=1) r]rhrrboolrrIrYr;rrrr r r %test_optional_optional_not_in_message s$   (     *   z=TestMessageContentError.test_optional_optional_not_in_messagecCstddd}|d|jdddd|t}|gWdn1sP0Yt|j}||d||ddS) Nr>rr_rZoptional_positionalrrr) r]rhrrIrYrr;rrrr r r 'test_optional_positional_not_in_message s   (  z?TestMessageContentError.test_optional_positional_not_in_messageN)rrr rrrr r r r rsrc@seZdZddZdS)TestTypeFunctionCallOnlyOncecsHfdd}t}|jd|dd|d}tdd|dS) Ncs|ddS)Nr foo_convertedr)Zstring_to_convertrr r r2s zLTestTypeFunctionCallOnlyOnce.test_type_function_call_only_once..spamrrrz --foo spam!rr)r7r8rhrYrrr:rrrir5r rr !test_type_function_call_only_once1s  z>TestTypeFunctionCallOnlyOnce.test_type_function_call_only_onceN)rrr rr r r r r/src@s,eZdZddZddZddZddZd S) TestTypeFunctionCalledOnDefaultcsDfdd}t}|jd|dd|g}tdd|dS)Ncs|ddS)NrrrZint_to_convertrr r rBs z]TestTypeFunctionCalledOnDefault.test_type_function_call_with_non_string_default..spamrrrrr7r8rhrYrr:rr rr /test_type_function_call_with_non_string_defaultAs   zOTestTypeFunctionCalledOnDefault.test_type_function_call_with_non_string_defaultcCs@dd}t}|jd|dd|g}|tdd|dS)NcSsdS)Nrr rr r r rMszYTestTypeFunctionCalledOnDefault.test_type_function_call_with_string_default..spamr0rrrrrr r r +test_type_function_call_with_string_defaultLs  zKTestTypeFunctionCalledOnDefault.test_type_function_call_with_string_defaultcCs@dd}t}|jd|dd|g}|tdd|dS)NcSs|dS)Nrr )Zstr_to_convertr r r r8WszYTestTypeFunctionCalledOnDefault.test_no_double_type_conversion_of_default..extend--testrrz**)rr)rr8rir5r r r )test_no_double_type_conversion_of_defaultVs  zITestTypeFunctionCalledOnDefault.test_no_double_type_conversion_of_defaultcCs8t}|jddtgdd|g}||jgdS)NrrrB)rrCrr)r7r8rhrrYrrrr r r test_issue_15906bs   z0TestTypeFunctionCalledOnDefault.test_issue_15906N)rrr rrrrr r r r r?s   rc@s<eZdZddZddZddZddZd d Zd d Zd S)TestParseKnownArgscCst}|ddS)Nr r7r8rYr6r r r test_arguments_tuplersz'TestParseKnownArgs.test_arguments_tuplecCst}|gdSrrr6r r r test_arguments_listvsz&TestParseKnownArgs.test_arguments_listcCs t}|d|ddS)Nrrr7r8rhrYr6r r r test_arguments_tuple_positionalzs z2TestParseKnownArgs.test_arguments_tuple_positionalcCs"t}|d|dgdS)Nrrr6r r r test_arguments_list_positionals z1TestParseKnownArgs.test_arguments_list_positionalcCsJt}|d|d\}}|tdd||ddg|dS)Nrz--foo F --bar --bazFrrr)r7r8rhrcrrr:)rrir5extrasr r r test_optionalss  z!TestParseKnownArgs.test_optionalscCsrt}|jdddtd|jddd|dgd }||\}}|td d d d ||gd|dS)NrrrO)rrrCrr2rr)rrrrr`rrTr)vrr)rrr)r7r8rhrrcrr:)rrirur5rr r r test_mixeds zTestParseKnownArgs.test_mixedN) rrr rrrrrrr r r r rps rc@s,eZdZddZddZddZddZd S) TestIntermixedArgscCstjdd}|jddd|jdddd }|d |jd d td d}||}|tdd dgdd|||\}}|tdd dgd||gd|d}| |\}}|tdd ddgd||gd|| |j ||j ddS)Nr>rrrmrrrTrlcmdrestr)rrCzcmd --foo x 1 --bar y 2 3rrr)rr rmr rurr`z!cmd --foo x 1 --error 2 --bar y 3rO)z--errorrr`) r7r8rhrrparse_intermixed_argsrr:rcparse_known_intermixed_argsror)r+)rrirrur5rr r r test_basics"    zTestIntermixedArgs.test_basiccCs~tdd}|d|d|jdddd}|t}||Wdn1s^0Y|t|jd dS) Nr>rrrrrrrz\.\.\.) r]rhrrrr rrr;)rrirur=r r r test_remainders    (z!TestIntermixedArgs.test_remaindercCstdd}|jdd}|jdddd|jd d d |jd d ddd|d}|tddgddd||t|jd||j ddS)Nr>rTrrrrrCrrr~rrrrrz 1 --foo 2rur)rrmrrt) r]rrhr rrr:rrIr+)rriror5r r r test_exclusives  z!TestIntermixedArgs.test_exclusivecCshtdd}|jdd}|jdddd|jd d d |jd d ddd|t|jg||jddS)Nr>rTrrrrrCrrr~rrrrr)r]rrhrrr rr+rr r r test_exclusive_incompatibles  z.TestIntermixedArgs.test_exclusive_incompatibleN)rrr rrrrr r r r rs  rc@seZdZddZdS)!TestIntermixedMessageContentErrorcCstddd}|jdtd|jdtdd|t}|gWdn1sT0Yt|j}||d||d |t}| gWdn1s0Yt|j}| |d||d dS) Nr>rr_rrrTr*r) r]rhrrrrIrYr;rr ZassertNotRegexrr r r rs  (    (  zGTestIntermixedMessageContentError.test_missing_argument_name_in_messageN)rrr rr r r r rsrc@seZdZdZddZddZddZdd Zd d Zd d Z ddZ ddZ ddZ ddZ ddZddZddZddZddZd d!Zd"d#Zd$d%Zd&d'Zd(d)Zd*d+Zd,d-Zd.d/Zd0d1Zd2d3Zd4d5Zd6d7Zd8d9Zd:d;Z dd?Z"d@dAZ#dBdCZ$dDdEZ%dFdGZ&dHdIZ'dJdKZ(dLdMZ)dNdOZ*dPdQZ+dRdSZ,dTdUZ-dVdWZ.dXdYZ/dZd[Z0d\d]Z1d^d_Z2d`S)aTestAddArgumentMetavarz,length of metavar tuple does not match nargscCst}|jd||ddS)NrrrH)r7r8rh)rrrHrir r r do_test_no_exceptionsz+TestAddArgumentMetavar.do_test_no_exceptioncCs\t}|t }|jd||dWdn1s80Y||jjd|jdS)Nrrr) r7r8rrrhrr;r5EXPECTED_MESSAGE)rrrHrir=r r r do_test_exceptions .z(TestAddArgumentMetavar.do_test_exceptioncCs|jddddS)Nrurrrr r r test_nargs_None_metavar_stringsz5TestAddArgumentMetavar.test_nargs_None_metavar_stringcCs|jdtddS)Nrrtuplerr r r test_nargs_None_metavar_length0sz6TestAddArgumentMetavar.test_nargs_None_metavar_length0cCs|jddddS)Nrurrrr r r test_nargs_None_metavar_length1sz6TestAddArgumentMetavar.test_nargs_None_metavar_length1cCs|jddddS)Nrurrrrr r r test_nargs_None_metavar_length2 sz6TestAddArgumentMetavar.test_nargs_None_metavar_length2cCs|jddddS)Nr rr rr r r test_nargs_None_metavar_length3 sz6TestAddArgumentMetavar.test_nargs_None_metavar_length3cCs|jddddS)Nrrurrrr r r "test_nargs_optional_metavar_stringsz9TestAddArgumentMetavar.test_nargs_optional_metavar_stringcCs|jdtddS)Nrrrrr r r #test_nargs_optional_metavar_length0sz:TestAddArgumentMetavar.test_nargs_optional_metavar_length0cCs|jddddS)Nrrrrrr r r #test_nargs_optional_metavar_length1sz:TestAddArgumentMetavar.test_nargs_optional_metavar_length1cCs|jddddS)Nrrrr rr r r #test_nargs_optional_metavar_length2sz:TestAddArgumentMetavar.test_nargs_optional_metavar_length2cCs|jddddS)Nrr rr rr r r #test_nargs_optional_metavar_length3sz:TestAddArgumentMetavar.test_nargs_optional_metavar_length3cCs|jddddS)Nrrurrrr r r $test_nargs_zeroormore_metavar_string#sz;TestAddArgumentMetavar.test_nargs_zeroormore_metavar_stringcCs|jdtddS)Nrrrrr r r %test_nargs_zeroormore_metavar_length0&szr?r@rArBrCrDrErFrGrHrIrJrKr r r r rs`rc@s4eZdZdZdZddZddZddZd d Zd S) TestInvalidNargszinvalid nargs valueznargs for store actions must be != 0; if you have nothing to store, actions such as store true or store const may be more appropriatecCsZt}|t}|jd|dWdn1s60Y||jjd|jdSNrrr) r7r8rrrhrr;r5EXPECTED_RANGE_MESSAGErrrir=r r r do_test_range_exceptions ,z(TestInvalidNargs.do_test_range_exceptioncCsZt}|t}|jd|dWdn1s60Y||jjd|jdSrM) r7r8rrrhrr;r5EXPECTED_INVALID_MESSAGErOr r r do_test_invalid_exceptions ,z*TestInvalidNargs.do_test_invalid_exceptioncCs|jdd|jdddS)NrrZabcd)rRrr r r test_nargs_alphabetics z&TestInvalidNargs.test_nargs_alphabeticcCs|jdddS)Nrr)rPrr r r test_nargs_zerosz TestInvalidNargs.test_nargs_zeroN) rrr rQrNrPrRrSrTr r r r rLs rLc@seZdZddZddZdS)TestImportStarcCs tjD]}|tt|qdSr)r7__all__rrrr r r rs zTestImportStar.testcCs0ddttD}|t|ttjdS)NcSs0g|](\}}|ds|dkst|s|qS)rwngettext) startswithinspectZismodule)r=r+rr r r r?s zJTestImportStar.test_all_exports_everything_but_modules..)rEr7rBrrArV)rrBr r r 'test_all_exports_everything_but_moduless z6TestImportStar.test_all_exports_everything_but_modulesN)rrr rrZr r r r rUsrUcs$eZdZfddZddZZS)TestWrappingMetavarcs,ttd|_d}|jjd|ddS)NZ9this_is_spammy_prog_with_a_long_name_sorry_about_the_namezz--proxyrM)r^rr]rirh)rrHr_r r rs  zTestWrappingMetavar.setUpcCs |j}||tddS)Na( usage: this_is_spammy_prog_with_a_long_name_sorry_about_the_name [-h] [--proxy ] optional arguments: -h, --help show this help message and exit --proxy )rirurrvrw)r help_textr r r test_help_with_metavars z*TestWrappingMetavar.test_help_with_metavar)rrr rr]rcr r r_r r[s r[c@s$eZdZddZddZddZdS)TestExitOnErrorcCs$tjdd|_|jjddtddS)NF) exit_on_errorz --integersN)rHrC)r7r8rirhrrr r r rszTestExitOnError.setUpcCs(|jd}||tjdddS)Nz --integers 4r&)Zintegers)rirYrrr7rrr r r !test_exit_on_error_with_good_argssz1TestExitOnError.test_exit_on_error_with_good_argscCs@|tj |jdWdn1s20YdS)Nz --integers a)rr7rrirYrrr r r test_exit_on_error_with_bad_argssz0TestExitOnError.test_exit_on_error_with_bad_argsN)rrr rrarbr r r r r^sr^cCsttit_tt_dSr)rZ run_unittestrrrrrr r r r test_mains rc__main__)rYrr&r$rRrvrZunittestr7iorrrrrr rrr4r:rJrIr\r8r]rCrdrrerrrrrrrrrrrrrrrrrrrrrrr r)r-r/r1r3r4r?r@rIrKrVrWrYr[rarcrgrhrkrlrnrorprqrrrsrvrxryr|r}rrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrZ eq_stderrrrrrrZskipIfrrrrrr rrrrr#r3r7r;rrrrrrrrrrrrrrrrrrrrrrrrrrrr*r8r9r:r>rBrErGrIrKrNrRrWrXrYrZr[r\r^r`rarcrerhrjrkrlrmrnrorwryr{r}r~rrrrrrrrrrrrrrrrrrrLrUr[r^rcrr r r r s     !q                                            ""C i'4&0#+!$-*(), ^R$7/4(66$&"$. 10(+!~-LG% =1*?)