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.OptionalActionNcCsz~|jdksJd|j|dks.Jd|tdd}|dvrHd|_n|d vrXd |_n td |||ks|Jd ||fWn*tytd }td|Yn0t|d|dS)Nrdest: %s-szflag: %s?r)?rr)@r value: %sexpected %s, got %srOzopt_action failed: %s)rr:rAssertionErrorrRrVrIrUrri namespacer option_stringrer r r __call__s       z-TestActionUserDefined.OptionalAction.__call__)Nrrr r0r r r r OptionalActionsr2c@seZdZdddZdS)z&TestActionUserDefined.PositionalActionNcCsz|dusJd||jdks.Jd|jtdd}|dvrHd|_n,|dvrXd |_n|d vrhd |_n td |||ksJd ||fWn*tytd}td|Yn0t|d|dS)Nzoption_string: %srr$rr)rrr&)rOr)rr'r)r*rOzarg_action failed: %s)rr:rr+rRrVrIrUr,r r r r0.s(       z/TestActionUserDefined.PositionalAction.__call__)Nr1r r r r PositionalAction,sr4r%rr&)rrrCrrrr)rrCrrz-s0.125r')rrrrz -s 0.625 1rrOz84 -s2r(rN)rrr rr7Actionr2r4r4rrrjrr:rr r r r r#s r#c@s*eZdZdZGdddejZddZdS)TestActionRegistrationz5Test a user-defined action supplied by registering itc@seZdZdddZdS)zTestActionRegistration.MyActionNcCst||jd|dS)Nzfoo[%s])rUr)rrir-valuesr.r r r r0Zsz(TestActionRegistration.MyAction.__call__)Nr1r r r r MyActionXsr8cCs^t}|dd|j|jddd||dgtdd||dgtd ddS) NrZ my_actionrrruzfoo[1]r3rzfoo[42])r7r8r"r8rhrrYr:rrir r r r]s zTestActionRegistration.testN)rrr rr7r5r8rr r r r r6Usr6c@s6eZdZedddedgZdZdegddfgZd S) TestActionExtendrextendr)rrrCr z--foo f1 --foo f2 f3 f4)f1f2Zf3Zf4rN) rrr r4rrjrr:rr r r r r:gs r:cseZdZdZddZd4ddZfdd Zd d Zd d ZddZ ddZ ddZ ddZ ddZ ddZddZddZddZd d!Zd"d#Zd$d%Zd&d'Zd(d)Zd*d+Zd,d-Zd.d/Zd0d1Zd2d3ZZS)5TestAddSubparserszTest the add_subparsers methodcOs|jtg|Ri|dSrrrIr7r r r assertArgumentParserErrorwsz+TestAddSubparsers.assertArgumentParserErrorFNc Cs|r0tdd|d}|j|dddddd ntddd }|jd ddd |jd td dddi}|rzd|d<d|d<nd|d<|jfi|}||jtdd}|rd|d<|rddg|d<|jd7i|}|jdtdd|jd d!d"d#td$d} |r d%| d<|jd8i| } | jd'd(d)d#| jd*td+d,d-td.d} |rVd/| d<|jd9i| } | jd1td2d| jd3d4d5d6|S):NPROGmain description)prog descriptionrrrrmrfoo helprhelprCrDrrbar helprCrGr+FZCOMMANDmetavarcommandstitle command helprGz 1 descriptionrDz1 helpZ1alias1Z1alias2aliasesrurzw helprr!x helpr#rGz 2 descriptionz2 helprrZ123y helprrzz help)rCrrGz 3 descriptionz3 helpr`tzt helpurzu helprrG)ru)r)r`) r]rhradd_subparsersr@dict add_parserrr) rsubparser_helprrPriZsubparsers_kwargs subparsersZparser1_kwargsparser1Zparser2_kwargsparser2Zparser3_kwargsZparser3r r r rzsX      zTestAddSubparsers._get_parsercs&t||_|jdd|_dS)NT)rZ)r^rrricommand_help_parserrr_r r rs  zTestAddSubparsers.setUpcCs&dD]}|}||jj|qdS)N)rrza az0.5 az0.5 1z0.5 1 -yz0.5 2 -w)rr@rirY)rrr5r r r test_parse_args_failuressz*TestAddSubparsers.test_parse_args_failuresc Cs||jdtddddd||jdtdd d d d gd ||jdtddddd||jdtdddgdddS)N 0.5 1 b -w 7Frr rmrr-rz0.25 --foo 2 -y 2 3j -- -1jTr&ry@y)rmrrrz--foo 0.125 1 cr'r z-1.5 3 11 -- a --foo 7 -- br )rrrZ--r )rmrrTrU)rrirYrr:rr r r test_parse_argss z!TestAddSubparsers.test_parse_argsc Cs||jdtdddddgf||jdtddddddgf||jd tddddddgf||jd tdddddd d gf||jd tdddddgdfdS)Nr`Frrar rbz0.5 -p 1 b -w 7z-pz0.5 1 b -w 7 -pz0.5 1 b -q -rs -w 7z-qz-rsz0.5 -W 1 b -X Y -w 7 Z)z-Wz-Xrr)rriparse_known_argsrr:rr r r test_parse_known_argss(z'TestAddSubparsers.test_parse_known_argscCsXt}|jddd|jdd}|d}|d|tddd d |d dS) NrrrrrrurFrrrt)r]rhrWrYrr:rYr)rrir[r\r r r test_dests    zTestAddSubparsers.test_destcCs,|dg}||jd||jddS)Nrunr )rYrcommandr@)rriretr r r _test_required_subparserss z+TestAddSubparsers._test_required_subparserscCs0t}|jdd}d|_|d||dS)NrjrTri)r]rWr+rYrlrrir[r r r &test_required_subparsers_via_attributes   z8TestAddSubparsers.test_required_subparsers_via_attributecCs,t}|jddd}|d||dS)NrjTrr+ri)r]rWrYrlrmr r r "test_required_subparsers_via_kwargs z4TestAddSubparsers.test_required_subparsers_via_kwargcCs6t}|jdd}|d|d}||jdS)Nrjrrir r]rWrYrY assertIsNonerjrrir[rkr r r test_required_subparsers_defaults    z2TestAddSubparsers.test_required_subparsers_defaultcCs8t}|jddd}|d|d}||jdS)NrjFrorir rqrsr r r test_optional_subparsers s   z*TestAddSubparsers.test_optional_subparserscCs.||jd||jtddS)N)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 )rri format_usage format_helptextwrapdedentrr r r test_helps zTestAddSubparsers.test_helpcCs6|jdd}||d||tddS)Nz+:-rz)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 rrrwrxryrzr9r r r test_help_extra_prefix_chars%s   z.TestAddSubparsers.test_help_extra_prefix_charscCs6tddd}|jdddd||tddS) NrArBrHz--non-breakingr2uRhelp message containing non-breaking spaces shall not wrap at non-breaking spacesrFuB 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]rhrrxryrzr9r 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 r|r9r r r test_help_alternate_prefix_charsJs   z2TestAddSubparsers.test_help_alternate_prefix_charscCs.||jd||jtddS)Nrva 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^rwrxryrzrr r r test_parser_command_help\s   z*TestAddSubparsers.test_parser_command_helpcCsxtddd}|jdddd|jdd d |jd d d d}|d}|d}||d||tddS)NrArBrHrrrErFrrIrG subcommandsrNzadditional text)rMrDrGrurz'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]rhrWrYrrwrxryrz)rrir[r\r]r 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 rryrzrr 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) NTrPz 0.5 1alias1 bFrr rbz 0.5 1alias2 b)rrrfrr:r9r r r test_alias_invocations   z'TestAddSubparsers.test_alias_invocationcCs"|jdd}||jddS)NTrz 0.5 1alias3 b)rr@rYrr9r r r test_error_alias_invocations z-TestAddSubparsers.test_error_alias_invocationcCs.|jddd}d|_||tddS)NT)rPrZa 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 )rZmaxDiffrrxryrzr9r r r test_alias_helpsz!TestAddSubparsers.test_alias_help)FNF)rrr rr@rrr_rergrhrlrnrprtrur{r}r~rrrrrrrrrrcr 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:r9r r r test_single_parent$ s z$TestParentParsers.test_single_parentcCs,||jjt|jgd}||jdSNr)_test_mutex_abrrYr]r9r 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]rWrYrrhrrYrr:)rrir[Z 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]rWrrYrnrhrrrYrr:r@)rrir[rZ abc_parserrZwxyzabe_parserr r r test_subparser_parents_mutexh s*       z.TestParentParsers.test_subparser_parents_mutexc CsJ|j|jg}t|d}|}|j}||td||rtdd}|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)r7r8rWrYrrr: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:rYr9r 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)Nr rrrrrmrrr rrrrrr rrr)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_classr!r"ryrr r 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) r7r8rfr5r6rTrhrnrWrY) rrriZ argument_sigZ group_sigsZ group_sigZ argument_sigsroZsubparsers_sigsr[Z subparser_sigr r r rG s4        zBTestHelpFormattingMetaclass.__init__..AddTests._get_parsercSs&t||j}t|}|||dSr)rTr!ryrzr)rr parser_textZ expected_textr r r _test] s  z.AddTests._testcSs,||}t|d|j}|||dS)Nz format_%s)rrTr!r))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) rrTr!rRr"rUrrXr))rrriprint_Z old_streamr(r r r r$g s   zATestHelpFormattingMetaclass.__init__..AddTests.test_printcSs@||}t|d|j}t}|||}|||dSr*)rrTr!rrXr))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)rGrL)r)rr+rrrr!r"r 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 longerrA DESCRIPTIONEPILOGrCrDepilogrrr0.1rrrX HELPrF--yY HELPrrmFOO 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,rGrr 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,rGrr r r r r; s r;c@seZdZdZeddddZedddd d ed d d dedddedddedddgZedddedddeddddgfgZdZed Z d!Z d"S)#TestHelpBiggerOptionalGroupsr.rAr/r0r1rrrr3rrrr4rFr5r6rrmr7rr8z GROUP TITLEzGROUP DESCRIPTIONrOrzBAZ HELPrrzZ HELPrVzN 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 r9Nr:r r r r r< s$       r<c@s^eZdZdZedddZedddded d d ed d d eddd gZgZdZedZ dZ dS)TestHelpBiggerPositionalsz4Make sure that help aligns when arguments are longerUSAGEr/r,rDrrr4rFr5r6rZekiekiekifekangzEKI HELPrr8 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 rNr:r 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 linerAze oddly formatted description that is so long that it should go onto multiple lines when wrappedrHrr zoddly formatted -x helprKrGrrz normal y helprMz' oddly formatted group descriptionrOrrz` oddly formatted -a help again, so long that it should be wrapped over multiple linesrF2 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 rNr:r r r r rA- s"    rAc@sbeZdZdZedddZedddded d d dgZed ed dddgfgZdZedZ dZ dS)TestHelpWrappingShortNamesrBrAzZD 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 DrHrr zxXHH HXXHH HXXHH HXXHH HXXHH HXXHH HXXHH HXXHH HXXHH HXXHH HXXHH HXXHH HXXHH HXXHH HXXHH HXXHH HXXHH HXXHH HXXHH HXXHH HXrCrrdYH 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 HHArFrDa 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 rNr:r r r r rEa s    rEc@s|eZdZdZedddZeddddd ed d d d edddd gZededddd edddd gfgZdZedZ dZ dS)TestHelpWrappingLongNameszzZD 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 Dr?rrrzZV VV VV VV VV VV VV VV VV VV VV VV VV VV VV VV VV VV VV VV VV VV VV VV VV VV VV VV VV VV VrrXXXXXXXXXXXXXXXXXXXXXXXXXzdXH XHXH XHXH XHXH XHXH XHXH XHXH XHXH XHXH XHXH XHXH XHXH XHXH XHXH XHXH XHXH XHXH XHXH XHXH XHXH XHrCrZyyyyyyyyyyyyyyyyyyyyyyyyyrFrGrZAAAAAAAAAAAAAAAAAAAAAAAAAzdAH AHAH AHAH AHAH AHAH AHAH AHAH AHAH AHAH AHAH AHAH AHAH AHAH AHAH AHAH AHAH AHAH AHAH AHAH AHAH AHrZzzzzzzzzzzzzzzzzzzzzzzzzzzdZH ZHZH ZHZH ZHZH ZHZH ZHZH ZHZH ZHZH ZHZH ZHZH ZHZH ZHZH ZHZH ZHZH ZHZH ZHZH ZHZH ZHZH ZHZH ZHZH ZHr@ar 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: yyyyyyyyyyyyyyyyyyyyyyyyy 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 -v, --version show program's version number and exit -x XXXXXXXXXXXXXXXXXXXXXXXXX XH XHXH XHXH XHXH XHXH XHXH XHXH XHXH XHXH XHXH XHXH XHXH XHXH XHXH XHXH XHXH XHXH XHXH XHXH XHXH XH ALPHAS: -a AAAAAAAAAAAAAAAAAAAAAAAAA AH AHAH AHAH AHAH AHAH AHAH AHAH AHAH AHAH AHAH AHAH AHAH AHAH AHAH AHAH AHAH AHAH AHAH AHAH AHAH AH zzzzzzzzzzzzzzzzzzzzzzzzz ZH ZHZH ZHZH ZHZH ZHZH ZHZH ZHZH ZHZH ZHZH ZHZH ZHZH ZHZH ZHZH ZHZH ZHZH ZHZH ZHZH ZHZH ZHZH ZHZH ZH zs V VV VV VV VV VV VV VV VV VV VV VV VV VV VV VV VV VV VV VV VV VV VV VV VV VV VV VV VV VV V Nr:r r r r rH s     rHc @seZdZdZeddZeddddedd d ded d d ed d ddeddddeddejdedddejdedddejdgZededddded d!d"ded#d#d ded$d$ddgfgZ d%Z e d&Z d'Z d(S)) TestHelpUsageTest basic usage messagesrArrrr-rVrrrrrr r)rGrr rrzWhether to foo)rGrrzWhether to barT)rGrrrz--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,rGrr r r r rJ s.           rJc@speZdZdZedddZgZededdded d dgfed ed d ded d dgfgZdZedZ dZ dS)TestHelpOnlyUserGroupsrKrAFrCrZxxxxrrrrZyyyyr rrz. usage: PROG [-x X] [-y Y] a b zn xxxx: -x X x a a yyyy: b b -y Y y rNr:r r r r rL s       rLc@sReZdZdZeddZedddeddded ed gZgZd Zed Z d Z dS)TestHelpUsageLongProgz*Test usage messages where the prog is longeZdZdZeddZeddddgZgZdZed Z d Z d S) TestHelpRequiredOptionalz.Test that required options don't look optionalrArrTrE)r+rGz+ usage: PROG [-h] --foo FOO rlrNr:r r r r rms  rmc@sNeZdZdZeddddZedddd ed d d d gZgZdZedZ dZ dS)TestHelpAlternatePrefixCharsz:Test that options display with different prefix charactersrAz^;F)rCrrz^^foorrErFz;bz;;barrIrz- usage: PROG [^^foo] [;b BAR] zq optional arguments: ^^foo foo help ;b BAR, ;;bar BAR bar help rNr:r r r r rns  rnc@sHeZdZdZedddZedddedd dgZgZd Zed Z d Z d S)TestHelpNoHelpOptionalz=Test that the --help argument can be suppressed help messagesrAFrMrrErrrez- usage: PROG [--foo FOO] spam z positional arguments: spam spam help optional arguments: --foo FOO foo help rNr:r r r r ros   roc@s>eZdZdZeddZededgZgZdZedZ dZ d S) TestHelpNonez1Test that no errors occur if no help is specifiedrArrrriz positional arguments: spam optional arguments: -h, --help show this help message and exit --foo FOO rNr:r r r r rps  rpc @sjeZdZdZeddZeddddded d d d ded ddddedddddgZgZdZedZ dZ dS)TestHelpTupleMetavarz"Test specifying metavar as a tuplerArrr-r)ZW1ZW2)rGrrKrrr)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 rNr:r r r r rqs  rqc@sdeZdZdZedejddZedddedd dgZed d d ed ddgfgZ dZ e dZ dZ dS)TestHelpRawTextTest the RawTextHelpFormatterrA7Keep the formatting exactly as it is written here rCformatter_classrDrz- foo help should also appear as given hererrrerM? This text should be indented exactly like it is here rOrrI> 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,rGrr r r r rr#s    rrc@sdeZdZdZedejddZedddedd dgZed d d ed ddgfgZ dZ e dZ dZ dS)TestHelpRawDescriptionrsrArtrurz4 foo help should not retain this odd formattingrrrerMrwrOrrIrxa 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,rGrr r r r rzTs    rzc @seZdZdZedejddZedddedd d d ed d dedddddgZedddede dddgfgZ dZ e dZ dZ dS)TestHelpArgumentDefaultsz&Test the ArgumentDefaultsHelpFormatterrArDrurz)foo help - oh and by the way, %(default)srrrrIrFrrerrZwoodenz badger helprrMrOrrr)rCrrGzO 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,rGrr r r r r|s"    r|c@sBeZdZdZedddZeddddd gZgZd Zed Z d Z d S)TestHelpVersionActionz,Test the default help for the version actionrArDrH-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 rNr:r 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 messagesrArrrrr)rrrGrrErrrerirjN) rrr rr4rfr7rrjr&r,rGr r r r rs    rc@sLeZdZdZedddZeddddd gZd d d DZd ZedZ dZ dS)TestHelpSubparsersOrdering5Test ordering of subcommands in help matches the coderAdisplay some subcommandsrHrrrr3rcCsg|]}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 r9N) rrr rr4rfrjr'r,rGrr r r r rs rc@sPeZdZdZedddZeddddd gZd Zd d eDZd Z e dZ dZ dS)"TestHelpSubparsersWithHelpOrderingrrArrHrrrr3r))rza subcommand help)r zb subcommand help)r zc subcommand help)rzd subcommand help)r/ze subcommand helpcCsg|]\}}t||dqS))r+rGr)r=r+rGr 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 r9N) rrr rr4rfrjZsubcommand_datar'r,rGrr 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_typerArD)rCrDrvrrrMrOz SOME FLOAT)rCrKzF 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,rGrr 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)Nrdz---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)rXrr)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)NrjparsersrrA)rrC)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 r0szQTestInvalidArgumentConstructors.test_user_defined_action..Action.__call__N)F)rrr r8r0r rr r r5s r5r)rrrr)rJrr7r8rrh)rr5rir 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 rhs   zTestActionsReturned.test_destc Cst}|jddddtddgddd d }||jd||jd||jd||jt||j ddg||j d||j d||j d dS) NrrrrrOrrZBARr)rrrrCr#rGrKr) r7r8rhrrrrrrCr#rGrKrrr r r test_miscs  zTestActionsReturned.test_miscN)rrr rhrr 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)r7r8rhrrr9r r r test_conflict_errors  z(TestConflictHandling.test_conflict_errorcCsztj}|ddd}|jddd|jddd||td|jd d d |jd d d ||td dS)NrAresolve)rCrrzOLD XrzNEW Xz usage: PROG [-h] [-x X] optional arguments: -h, --help show this help message and exit -x X NEW X rZOLD_SPAMrPZNEW_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 )r7r8rhrrxryrz)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)rrIrYrrrxr;rL)rrirr=r r r assertPrintHelpExits ,z3TestOptionalsHelpVersionActions.assertPrintHelpExitcGs|t|j|dSr)rrIrYrrir5r r r r@sz9TestOptionalsHelpVersionActions.assertArgumentParserErrorcCsDt}|jddddd||d||d|tt|ddS) Nrrrrrrrformat_versionr]rhrrAttributeErrorrTr9r 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@rrrTr9r r r test_version_no_help$s    z4TestOptionalsHelpVersionActions.test_version_no_helpcCsdtdd}|jdddd|t}|dgWdn1sF0Y|d|jjdS)Nr`rrrz %(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@r9r r r test_no_help2s     z,TestOptionalsHelpVersionActions.test_no_helpcCsZt}|jddd|jddd||d||d||d|tt|ddS) NrrGrrrrrr)r]rhrr@rrrTr9r 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#rGrKzAction(option_strings=['--foo', '-a', '-b'], dest='b', nargs='+', const=None, default=42, type='int', choices=[1, 2, 3], help='HELP', metavar='METAVAR'))r7r5r)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'))r7r5rr)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)NrArzvArgumentParser(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.spamrAFrMrrr`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)NrArrbreq_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)NrArrbrrz --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) NrArrbrZoptional_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 r;WszYTestTypeFunctionCalledOnDefault.test_no_double_type_conversion_of_default..extend--testrrz**)rr)rr;rir5r 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 r7r8rYr9r r r test_arguments_tuplersz'TestParseKnownArgs.test_arguments_tuplecCst}|gdSrrr9r r r test_arguments_listvsz&TestParseKnownArgs.test_arguments_listcCs t}|d|ddS)Nrrr7r8rhrYr9r r r test_arguments_tuple_positionalzs z2TestParseKnownArgs.test_arguments_tuple_positionalcCs"t}|d|dgdS)Nrrr9r r r test_arguments_list_positionals z1TestParseKnownArgs.test_arguments_list_positionalcCsJt}|d|d\}}|tdd||ddg|dS)Nrz--foo F --bar --bazFrrr)r7r8rhrfrrr:)rrir5extrasr r r test_optionalss  z!TestParseKnownArgs.test_optionalscCsrt}|jdddtd|jddd|dgd }||\}}|td d d d ||gd|dS)NrrrO)rrrCrr2rr)rrrrr`rrTr)vrr)rrr)r7r8rhrrfrr:)rrirur5rr r r test_mixeds zTestParseKnownArgs.test_mixedN) rrr rrrrrr r 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)NrArrrmrrrTrocmdrestr)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:rfparse_known_intermixed_argsrrr,r+)rrirrur5rr r r test_basics"    zTestIntermixedArgs.test_basiccCs~tdd}|d|d|jdddd}|t}||Wdn1s^0Y|t|jd dS) NrArrrrrrrz\.\.\.) r]rhrrrrrrr;)rrirur=r r r test_remainders    (z!TestIntermixedArgs.test_remaindercCstdd}|jdd}|jdddd|jd d d |jd d ddd|d}|tddgddd||t|jd||j ddS)NrArTrrrrrFrrrrrrrrz 1 --foo 2rur)rrmrrt) r]rrhrrrr:rrIr+)rriror5r r r test_exclusives  z!TestIntermixedArgs.test_exclusivecCshtdd}|jdd}|jdddd|jd d d |jd d ddd|t|jg||jddS)NrArTrrrrrFrrrrrrrr)r]rrhrrrrr+rr r r test_exclusive_incompatibles  z.TestIntermixedArgs.test_exclusive_incompatibleN)rrr rrrrr r r r r s  r c@seZdZddZdS)!TestIntermixedMessageContentErrorcCstddd}|jdtd|jdtdd|t}|gWdn1sT0Yt|j}||d||d |t}| gWdn1s0Yt|j}| |d||d dS) NrArrbrrrTr*r) r]rhrrrrIrYr;rrZassertNotRegexrr 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)NrrrK)r7r8rh)rrrKrir r r do_test_no_exceptionsz+TestAddArgumentMetavar.do_test_no_exceptioncCs\t}|t }|jd||dWdn1s80Y||jjd|jdS)Nrrr) r7r8rrrhrr;r5EXPECTED_MESSAGE)rrrKrir=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)Nrrr#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)Nrr rrrr r r #test_nargs_optional_metavar_length1sz:TestAddArgumentMetavar.test_nargs_optional_metavar_length1cCs|jddddS)Nrr"rr#rr r r #test_nargs_optional_metavar_length2sz:TestAddArgumentMetavar.test_nargs_optional_metavar_length2cCs|jddddS)Nrrrr#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@rArBrCrDrErFrGrHrIrJrKrLrMrNr 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|jdSrP) r7r8rrrhrr;r5EXPECTED_INVALID_MESSAGErRr r r do_test_invalid_exceptions ,z*TestInvalidNargs.do_test_invalid_exceptioncCs|jdd|jdddS)NrrZabcd)rUrr r r test_nargs_alphabetics z&TestInvalidNargs.test_nargs_alphabeticcCs|jdddS)Nrr)rSrr r r test_nargs_zerosz TestInvalidNargs.test_nargs_zeroN) rrr rTrQrSrUrVrWr r r r rOs rOc@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..)rEr7rBrrArY)rrBr r r 'test_all_exports_everything_but_moduless z6TestImportStar.test_all_exports_everything_but_modulesN)rrr rr]r r r r rXsrXcs$eZdZfddZddZZS)TestWrappingMetavarcs,ttd|_d}|jjd|ddS)NZ9this_is_spammy_prog_with_a_long_name_sorry_about_the_namezz--proxyrP)r^rr]rirh)rrKr_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 )rirxrryrz)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)rKrC)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 rrdrer r r r rasracCsttit_tt_dSr)rZ run_unittestrrrrrr r r r test_mains rf__main__)r\rr&r$rRryrZunittestr7iorrrrrr rrr4r:rJrIr\r8r]rCrdrrerrrrrrrrrrrrrrrrrrrrrrr r)r-r/r1r3r4r?r@rIrKrVrWrYr[rarcrgrhrkrlrnrorprqrrrsrvrxryr|r}rrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrZ eq_stderrrrrrrZskipIfrrrrrr rrrrr#r6r:r>rrrrrrrrrrrrrrrrrrrrrrrrrrrr-r;r<r=rArErHrJrLrNrQrUrZr[r\r]r^r_rarcrdrfrhrkrmrnrorprqrrrzr|r~rrrrrrrrrrrrrrrrrr rrrOrXr^rarfrr r r r s     !q                                            ""C i'4&0#+!$-*(), ^R$7/4(66$&"$. 10(+!~-LG% =1*?)