a ze@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ސddZedkredS(N)StringIO)support)mockc@s eZdZdS) StdIOBufferN__name__ __module__ __qualname__r r F/opt/bitninja-python-dojo/embedded/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:cseZdZdZddZd:ddZfdd 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/Zd0d1Zd2d3Zd4d5Zd6d7Zd8d9ZZS);TestAddSubparserszTest 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_defaultcCsnt}|jdd}|d|d|t}|dWdn1sP0Y||jjddS)NTr+rmrr z8error: the following arguments are required: {foo,bar} $ r]rWrYrrIrY assertRegexr;rMrrir[excinfor r r -test_required_subparsers_no_destination_error s    (z?TestAddSubparsers.test_required_subparsers_no_destination_errorcCsnt}|jdd}|d|d|t}|dWdn1sP0Y||jjddS)NTrurmrrFzPerror: argument {foo,bar}: invalid choice: 'baz' \(choose from 'foo', 'bar'\)\n$rvrxr r r 3test_wrong_argument_subparsers_no_destination_errors    (zETestAddSubparsers.test_wrong_argument_subparsers_no_destination_errorcCs8t}|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_help,s 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 rrr~rrrr9r 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]rhrrrrr9r r r test_help_non_breaking_spacesPsz/TestAddSubparsers.test_help_non_breaking_spacescCsftddd}|jddd||tdtddd}|jdgdd ||td dS) NrArBrHrmz rGz usage: PROG [-h] foo main description positional arguments: foo optional arguments: -h, --help show this help message and exit z %(choices)srRz usage: PROG [-h] {} main description positional arguments: {} optional arguments: -h, --help show this help message and exit rr9r r r test_help_blankbs  z!TestAddSubparsers.test_help_blankcCs6|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 rr9r r r test_help_alternate_prefix_charss   z2TestAddSubparsers.test_help_alternate_prefix_charscCs.||jd||jtddS)Nr}a 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^r~rrrrr r r test_parser_command_helps   z*TestAddSubparsers.test_parser_command_helpcCsxtddd}|jdddd|jdd d |jd d d d}|d}|d}||d||tddS)NrArBrHrrrErFrrIr 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]rhrWrYrr~rrr)rrir[r\r]r r r test_subparser_title_helps   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 rrrrr 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 )rZmaxDiffrrrrr9r r r test_alias_helpsz!TestAddSubparsers.test_alias_help)FNF) rrr rr@rrr_rergrhrlrnrprtrzr{r|rrrrrrrrrrrrrrcr r r_r r>ts< 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_first s    z)TestPositionalsGroups.test_nongroup_firstcCsZt}|d}|d|d|dtdddd}|d }|||dS) Nxxxrmrrrurr`rrr]rnrhr:rYrrrr r r test_group_first& s    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_groups0 s      z-TestPositionalsGroups.test_interleaved_groupsN)rrr rrrrr r r r r s  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@C 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 rF s(                 zTestParentParsers.setUpcCs2t|jgd}||dtdddddS)Nparentsz -y 1 2 --w 3r`rurr-rr)r]rrrYrr:r9r r r test_single_parentb s z$TestParentParsers.test_single_parentcCs,||jjt|jgd}||jdSNr)_test_mutex_abrrYr]r9r r r test_single_parent_mutexg sz*TestParentParsers.test_single_parent_mutexcCs0|jg}td|d}t|gd}||jdS)NF)rrr)rr]rrYrrrir r r test_single_granparent_mutexl s  z.TestParentParsers.test_single_granparent_mutexcCs||gtddd||dgtddd||dgtddd||ddg||ddg||dg||ddg||ddgdS)NFrr rTrMrO)rr:r@)rrYr r r rr 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_mutex s    z-TestParentParsers.test_multiple_parents_mutexcCs |jtjtj|j|jgddSr)rr7 ArgumentErrorr8rrrr r r test_conflicting_parents s  z*TestParentParsers.test_conflicting_parentscCs |jtjtj|j|jgddSr)rr7rr8rrrr r r test_conflicting_parents_mutex s  z0TestParentParsers.test_conflicting_parents_mutexcCs:|j|jg}t|d}||dtdddddS)Nrrtrr)rrr]rrYrr:rr r r test_same_argument_name_parents 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_mutex s*       z.TestParentParsers.test_subparser_parents_mutexc CsJ|j|jg}t|d}|}|j}||td||r s z#MEMixin.test_help_when_not_requiredcCs2|jddj}|j|j}||t|dSr)rrrrGrrrrr r r test_help_when_requiredC 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) NrArrurrIrrrrbaz help)rrrGr]rrhrr+riror r r rK 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:rrrrrGr r r r rI s rc @seZdZdddZdgZdedddddfded ddddfd edddddfd edd dddfgZd edddddfgZd ZdZ dZ dS)TestMutuallyExclusiveLongNcCsRtdd}|jddd|jddd|j|d}|jd d d|jd d d|S) NrArz--abcdez abcde helprz--fghijz fghij helpruz--klmnoz klmno helpz--pqrstz pqrst helpr]rhrrr r r rn 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 rl s   rc@sfeZdZddZdgZdedddfded ddfd ed d dfgZd ed ddfgZdZdZ dZ d S)$TestMutuallyExclusiveFirstSuppressedcCs:tdd}|j|d}|jdtjd|jdddd |S) NrArrurrrr2rSrFr]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 r src @seZdZddZgdZdeddddfded d ddfd ed dd dfd eddddfgZd ed dddfgZdZZ dZ dS)#TestMutuallyExclusiveManySuppressedcCsNtdd}|j|d}|j}|ddtjd|ddtjd|d tjd |S) NrArru--spamrrFrr2z --bladderrr)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:rrrrrGr r r r r s rc @seZdZddZgdZdeddddfd ed d ddfded ddgdfd ed dgd dfgZded dddfgZdZdZ dZ dS)*TestMutuallyExclusiveOptionalAndPositionalcCsJtdd}|j|d}|jdddd|jdd d |jd d d dd|S)NrArrurrFOOrFrSPAMrrrrBADGERrrrGrrr 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)NrArrrrQrFrura helprMb helprrSrOc 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) NrArz Titled groupzGroup descriptionrrurrIrrr)r]rnrrh)rr+riZ titled_group mutex_groupr r r r5 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 r3 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)NrArrrQrrrrSrFrurrrrVrMrrOrrrr r r r] s  ztdd}|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)r7r8rWrYr rr: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]r rhrr: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)Nrrrrrrmrrrrrrrrrrrr)r]r rnrhrr: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 r8t 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 r s4        zBTestHelpFormattingMetaclass.__init__..AddTests._get_parsercSs&t||j}t|}|||dSr)rTr)rrr)rr parser_textZ expected_textr r r _test s  z.AddTests._testcSs,||}t|d|j}|||dS)Nz format_%s)rrTr)r1)rrrirr r r r+ 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*rUrrXr1)rrriprint_Z old_streamr0r r r r, s   zATestHelpFormattingMetaclass.__init__..AddTests.test_printcSs@||}t|d|j}t}|||}|||dSr2)rrTr)rrXr1)rrrir3Zsfiler0r r r r- s  zFTestHelpFormattingMetaclass.__init__..AddTests.test_print_fileN) rrr r8rr1r+r,r-r r r r rr s  r))usagerL)rGrL)r)rr+rrrr)r*r r r r8n s H z$TestHelpFormattingMetaclass.__init__Nr9r r r r r&l sr&r'c@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.r4rGrr r r r r5 s    r5c@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 rrr5rfrjr.r4rGrr r r r rC s rCc@seZdZdZeddddZedddd d ed d d dedddedddedddgZedddedddeddddgfgZdZed Z d!Z d"S)#TestHelpBiggerOptionalGroupsr6rAr7r8r9rrrr;rrrr<rFr=r>rrmr?rr@z 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 rANrBr r r r rD s$       rDc@s^eZdZdZedddZedddded d d ed d d eddd gZgZdZedZ dZ dS)TestHelpBiggerPositionalsz4Make sure that help aligns when arguments are longerUSAGEr7r4rDrrr<rFr=r>rZekiekiekifekangzEKI HELPrr@ 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 rNrBr r r r rEL s     rEc@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 wrappedrHrrzoddly 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 rNrBr r r r rIk s"    rIc@sbeZdZdZedddZedddded d d dgZed ed dddgfgZdZedZ dZ dS)TestHelpWrappingShortNamesrJrAzZD 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 DrHrrzxXHH HXXHH HXXHH HXXHH HXXHH HXXHH HXXHH HXXHH HXXHH HXXHH HXXHH HXXHH HXXHH HXXHH HXXHH HXXHH HXXHH HXXHH HXXHH HXXHH HXrKrrdYH 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 HHArFrLa 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 rNrBr r r r rM s    rMc@s|eZdZdZedddZeddddd ed d d d edddd gZededddd edddd gfgZdZedZ dZ dS)TestHelpWrappingLongNameszeZdZdZeddZeddddgZgZdZed Z d Z d S) TestHelpRequiredOptionalz.Test that required options don't look optionalrArrTrE)r+rGz+ usage: PROG [-h] --foo FOO rtrNrBr r r r rus  ruc@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 rNrBr r r r rvs  rvc@sHeZdZdZedddZedddedd dgZgZd Zed Z d Z d S)TestHelpNoHelpOptionalz=Test that the --help argument can be suppressed help messagesrAFrUrrErrrmz- usage: PROG [--foo FOO] spam z positional arguments: spam spam help optional arguments: --foo FOO foo help rNrBr r r r rws   rwc@s>eZdZdZeddZededgZgZdZedZ dZ d S) TestHelpNonez1Test that no errors occur if no help is specifiedrArrrrqz positional arguments: spam optional arguments: -h, --help show this help message and exit --foo FOO rNrBr r r r rx.s  rxc @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 rNrBr r r r ryFs  ryc@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 hererrrmrM? 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.r4rGrr r r r rzas    rzc@sdeZdZdZedejddZedddedd dgZed d d ed ddgfgZ dZ e dZ dZ dS)TestHelpRawDescriptionr{rAr|r}rz4 foo help should not retain this odd formattingrrrmrMrrOrrIra 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.r4rGrr r r r rs    rc @seZdZdZedejddZedddedd d d ed ejd ddeddddedddedddddgZ edddede dddgfgZ d Z e d!Z d"Zd#S)$TestHelpArgumentDefaultsz&Test the ArgumentDefaultsHelpFormatterrArDr}rz)foo help - oh and by the way, %(default)srrrrIrFz--tazzWhether to taz itT)rrGrz--quuxz Set the quuxr)rGrrrmrrZwoodenz badger helprrMrOrr)rCrrGz usage: PROG [-h] [--foo FOO] [--bar] [--taz | --no-taz] [--quux QUUX] [--baz BAZ] spam [badger] a1 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) --taz, --no-taz Whether to taz it (default: True) --quux QUUX Set the quux (default: 42) title: description --baz BAZ baz help (default: 42) rN)rrr rr4r7ArgumentDefaultsHelpFormatterrfr9rjrr.r4rGrr r r r rs*     rc@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 rNrBr r r r rs rc@sTeZdZdZeddZeddddejded d d ed d d gZgZ dZ e dZ dS)TestHelpVersionActionSuppresszCTest that the --version argument can be suppressed in help messagesrArrrrr)rrrGrrErrrmrqrrN) rrr rr4rfr7rrjr.r4rGr r r r rs    rc@sLeZdZdZedddZeddddd gZd d d DZd ZedZ dZ dS)TestHelpSubparsersOrdering5Test ordering of subcommands in help matches the coderAdisplay some subcommandsrHrrrr;rcCsg|]}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 rAN) rrr rr4rfrjr/r4rGrr r r r rs rc@sPeZdZdZedddZeddddd gZd Zd d eDZd Z e dZ dZ dS)"TestHelpSubparsersWithHelpOrderingrrArrHrrrr;r))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?Hsz-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 rAN) rrr rr4rfrjZsubcommand_datar/r4rGrr r r r r;src@s\eZdZddZeddejdZededededed e d d gZ gZ d Z e d Z dZdS)TestHelpMetavarTypeFormattercCs|Srr rr r r custom_typehsz(TestHelpMetavarTypeFormatter.custom_typerArD)rCrDr~rrrMrOz 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.r4rGrr r r r rfs    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 assertTypeErrors  z/TestInvalidArgumentConstructors.assertTypeErrorcOs(t}|jt|jg|Ri|dSr)r7r8rrrhrr r r assertValueErrors  z0TestInvalidArgumentConstructors.assertValueErrorcCs<|jddd|jddd|jddd|jdiddS) Nr)rrrm)callbackr )Z callback_args)Zcallback_kwargsrrr r r test_invalid_keyword_argumentssz>TestInvalidArgumentConstructors.test_invalid_keyword_argumentscCs"|dD]}|j|dq dS)N)rBr.rrrrr r r test_missing_destinationsz8TestInvalidArgumentConstructors.test_missing_destinationcCs|d|ddS)Nrdz---rrr r r test_invalid_option_stringss z;TestInvalidArgumentConstructors.test_invalid_option_stringscCs$|jddd|jdttfddS)Nrrr)rrrrr r r test_invalid_typesz1TestInvalidArgumentConstructors.test_invalid_typecCs|jddd|jddd|jdddt}|t}|jdddWdn1s`0Y|dt|jdS) Nrrmrrrr.rBz store-truezunknown action) rr7r8rrrhr:rr;r<r r r test_invalid_actions ,z3TestInvalidArgumentConstructors.test_invalid_actioncCsbt}|jdd|t}|jdddWdn1sB0Y|dt|jdS)Nrmrrrz+dest supplied twice for positional argument)r7r8rhrrr:rr;r<r r r test_multiple_dests  ,z2TestInvalidArgumentConstructors.test_multiple_destcCsDdD]:}ttdtddtddfD]}|jd d|i|q$qdS) N)rrr2rNrXrrrabr"rr)r)rXrr)rrattrsr r r test_no_argument_actionss z8TestInvalidArgumentConstructors.test_no_argument_actionscCs.dD]$}|jdd|d|jdd|dqdS)N)rr2rXrrmr6rrrrrr r r !test_no_argument_no_const_actionsszATestInvalidArgumentConstructors.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)NrmTrurrr 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 rs   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_type%s z"TestConflictHandling.test_bad_typecCsDt}|d|tj|jd|d|tj|jddS)Nrr)r7r8rhrrr9r r r test_conflict_error)s  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_SPAMrXZNEW_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 )r7r8rhrrrr)rrrir r r test_resolve_error2s z'TestConflictHandling.test_resolve_errorN)rrr rrrr r r r r#s rc@sXeZdZdZddZddZddZdd Zd d Zd d Z ddZ ddZ ddZ dS)TestOptionalsHelpVersionActionsz!Test the help and version actionscCsP|t}||Wdn1s.0Y|||jjdSr)rrIrYrrrr;rL)rrirr=r r r assertPrintHelpExitSs ,z3TestOptionalsHelpVersionActions.assertPrintHelpExitcGs|t|j|dSr)rrIrYrrir5r r r r@Xsz9TestOptionalsHelpVersionActions.assertArgumentParserErrorcCsDt}|jddddd||d||d|tt|ddS) Nrrrrrrrformat_versionr]rhrrAttributeErrorrTr9r r r test_version[s   z,TestOptionalsHelpVersionActions.test_versioncCsftdd}|jddddd|t}|dgWdn1sH0Y|d|jjdS) NZPPPrrrrz %(prog)s 3.5rzPPP 3.5 r]rhrrIrYrr;rLr<r r r test_version_formatbs   *z3TestOptionalsHelpVersionActions.test_version_formatcCsHtdd}|jddddd||d||d |tt|d dS) NFrrrrrrrrr)r]rhr@rrrTr9r r r test_version_no_helpis    z4TestOptionalsHelpVersionActions.test_version_no_helpcCsdtdd}|jdddd|t}|dgWdn1sF0Y|d|jjdS)Nrhrrrz %(prog)s 3.7rzXXX 3.7 rr<r r r test_version_actionps   *z3TestOptionalsHelpVersionActions.test_version_actioncCs>tdd}||d||d||d||ddS)NFrrrrr)r]r@r9r r r test_no_helpws     z,TestOptionalsHelpVersionActions.test_no_helpcCsZt}|jddd|jddd||d||d||d|tt|ddS) NrrGrrrrrr)r]rhrr@rrrTr9r r r test_alternate_help_version~s   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_argumentss  zATestOptionalsHelpVersionActions.test_help_version_extra_argumentsN) rrr rrr@rrrrrrrr r r r rPs 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 assertStringEquals 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_optionals 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_arguments zTestStrings.test_argumentcCs"tjddd}d}|||dS)NrrrwzNamespace(foo=42, bar='spam')r7rrrr"r r r r test_namespaceszTestStrings.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 rsrc@s$eZdZddZddZddZdS) TestNamespacecCsFt}|tt|dtjddd}||jd||jddS)Nrrrr)r7rrrrTrrr r!r 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__r!r 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_encoding sz"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 r)sz.spamrAFrUrrrhz-usage: PROG x PROG: error: argument x: spam! )r]rhrrIrYrr;rM)rrrir=r r r test_argument_type_error's  *z.TestArgumentTypeError.test_argument_type_errorN)rrr rr r r r r%src@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)NrArrjreq_posr-req_optTr*Zneed_oner)rCrreq_optZ myXargumentz -req_opt=1) r]rhrrrrIrYr;rwr rrir=rr r r %test_missing_argument_name_in_message9s,  (     *     .   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)NrArrjrrz --req_optTr*z --opt_optr)rCrrrZopt_optz --req_opt=1) r]rhrrboolrrIrYr;rwr rr r r %test_optional_optional_not_in_messageRs$   (     *   z=TestMessageContentError.test_optional_optional_not_in_messagecCstddd}|d|jdddd|t}|gWdn1sP0Yt|j}||d||ddS) NrArrjrZoptional_positionalrrr) r]rhrrIrYrr;rwr rr r r 'test_optional_positional_not_in_messagees   (  z?TestMessageContentError.test_optional_positional_not_in_messageN)rrr rrrr r r r r7src@seZdZddZdS)TestTypeFunctionCallOnlyOncecsHfdd}t}|jd|dd|d}tdd|dS) Ncs|ddS)Nr foo_convertedr)Zstring_to_convertrr r rws zLTestTypeFunctionCallOnlyOnce.test_type_function_call_only_once..spamrrrz --foo spam!rr)r7r8rhrYrrr:rrrir5r rr !test_type_function_call_only_oncevs  z>TestTypeFunctionCallOnlyOnce.test_type_function_call_only_onceN)rrr rr r r r rtsrc@s,eZdZddZddZddZddZd S) TestTypeFunctionCalledOnDefaultcsDfdd}t}|jd|dd|g}tdd|dS)Ncs|ddS)NrrrZint_to_convertrr r rs z]TestTypeFunctionCalledOnDefault.test_type_function_call_with_non_string_default..spamrrrrr7r8rhrYrr:rr rr /test_type_function_call_with_non_string_defaults   zOTestTypeFunctionCalledOnDefault.test_type_function_call_with_non_string_defaultcCs@dd}t}|jd|dd|g}|tdd|dS)NcSsdS)Nrr rr r r rszYTestTypeFunctionCalledOnDefault.test_type_function_call_with_string_default..spamr0rrrrrr r r +test_type_function_call_with_string_defaults  zKTestTypeFunctionCalledOnDefault.test_type_function_call_with_string_defaultcCs@dd}t}|jd|dd|g}|tdd|dS)NcSs|dS)Nrr )Zstr_to_convertr r r r;szYTestTypeFunctionCalledOnDefault.test_no_double_type_conversion_of_default..extend--testrrz**)rr)rr;rir5r r r )test_no_double_type_conversion_of_defaults  zITestTypeFunctionCalledOnDefault.test_no_double_type_conversion_of_defaultcCs8t}|jddtgdd|g}||jgdS)NrrrB)rrCrr)r7r8rhrrYrrrr r r test_issue_15906s   z0TestTypeFunctionCalledOnDefault.test_issue_15906N)rrr rrrrr r r r rs   rc@s<eZdZddZddZddZddZd d Zd d Zd S)TestParseKnownArgscCst}|ddS)Nr r7r8rYr9r r r test_arguments_tuplesz'TestParseKnownArgs.test_arguments_tuplecCst}|gdSrrr9r r r test_arguments_listsz&TestParseKnownArgs.test_arguments_listcCs t}|d|ddS)Nrrr7r8rhrYr9r r r test_arguments_tuple_positionals z2TestParseKnownArgs.test_arguments_tuple_positionalcCs"t}|d|dgdS)Nrr r9r 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 rr r r rrr r r r rs 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)rrrmrrurr`z!cmd --foo x 1 --error 2 --bar y 3rO)z--errorrr`) r7r8rhrrparse_intermixed_argsrr:rfparse_known_intermixed_argsrrr4r+)rrirrur5rr r r test_basics"    zTestIntermixedArgs.test_basiccCs~tdd}|d|d|jdddd}|t}||Wdn1s^0Y|t|jd dS) NrArrrrrrrz\.\.\.) r]rhrrrrrwrr;)rrirur=r r r test_remainders    (z!TestIntermixedArgs.test_remaindercCstdd}|jdd}|jdddd|jd d d |jd d ddd|d}|tddgddd||t|jd||j ddS)NrArTrurrrrFrrrrrrrrz 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)NrArTrurrrrFrrrrrrrr)r]rrhrrrrr+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) NrArrjrrrTr*r) r]rhrrrrIrYr;rwrZassertNotRegexrr r r r!s  (    (  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_exception:sz+TestAddArgumentMetavar.do_test_no_exceptioncCs\t}|t }|jd||dWdn1s80Y||jjd|jdS)Nrrr) r7r8rrrhrr;r5EXPECTED_MESSAGE)rrrKrir=r r r do_test_exception>s .z(TestAddArgumentMetavar.do_test_exceptioncCs|jddddS)Nrurrrr r r test_nargs_None_metavar_stringFsz5TestAddArgumentMetavar.test_nargs_None_metavar_stringcCs|jdtddS)Nrr!tuplerr r r test_nargs_None_metavar_length0Isz6TestAddArgumentMetavar.test_nargs_None_metavar_length0cCs|jddddS)Nrurr"rr r r test_nargs_None_metavar_length1Lsz6TestAddArgumentMetavar.test_nargs_None_metavar_length1cCs|jddddS)Nrurrr!rr r r test_nargs_None_metavar_length2Osz6TestAddArgumentMetavar.test_nargs_None_metavar_length2cCs|jddddS)Nrrr*rr r r test_nargs_None_metavar_length3Rsz6TestAddArgumentMetavar.test_nargs_None_metavar_length3cCs|jddddS)Nrrurr"rr r r "test_nargs_optional_metavar_stringWsz9TestAddArgumentMetavar.test_nargs_optional_metavar_stringcCs|jdtddS)Nrrr$rr r r #test_nargs_optional_metavar_length0Zsz:TestAddArgumentMetavar.test_nargs_optional_metavar_length0cCs|jddddS)Nrr'rr"rr r r #test_nargs_optional_metavar_length1]sz:TestAddArgumentMetavar.test_nargs_optional_metavar_length1cCs|jddddS)Nrr)rr*rr r r #test_nargs_optional_metavar_length2`sz:TestAddArgumentMetavar.test_nargs_optional_metavar_length2cCs|jddddS)Nrrrr*rr r r #test_nargs_optional_metavar_length3csz:TestAddArgumentMetavar.test_nargs_optional_metavar_length3cCs|jddddS)Nrrurr"rr r r $test_nargs_zeroormore_metavar_stringhsz;TestAddArgumentMetavar.test_nargs_zeroormore_metavar_stringcCs|jdtddS)Nrrr$rr r r %test_nargs_zeroormore_metavar_length0kszr?r@rBrCrDrErFrGrHrIrJrKrLrMrNrOrPrQrRrSrTrUr r r r r6s`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|jdSrW) r7r8rrrhrr;r5EXPECTED_INVALID_MESSAGErYr r r do_test_invalid_exceptions ,z*TestInvalidNargs.do_test_invalid_exceptioncCs|jdd|jdddS)NrrZabcd)r\rr r r test_nargs_alphabetics z&TestInvalidNargs.test_nargs_alphabeticcCs|jdddS)Nrr)rZrr r r test_nargs_zerosz TestInvalidNargs.test_nargs_zeroN) rrr r[rXrZr\r]r^r r r r rVs rVc@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..)rEr7rBrrAr`)rrBr r r 'test_all_exports_everything_but_moduless z6TestImportStar.test_all_exports_everything_but_modulesN)rrr rrdr r r r r_sr_cs$eZdZfddZddZZS)TestWrappingMetavarcs,ttd|_d}|jjd|ddS)NZ9this_is_spammy_prog_with_a_long_name_sorry_about_the_namezz--proxyrX)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 )rirrrr)r help_textr r r test_help_with_metavars z*TestWrappingMetavar.test_help_with_metavar)rrr rrgrcr r r_r res rec@s$eZdZddZddZddZdS)TestExitOnErrorcCs$tjdd|_|jjddtddS)NF) exit_on_errorz --integersN)rKrC)r7r8rirhrrr r r r(szTestExitOnError.setUpcCs(|jd}||tjdddS)Nz --integers 4r&)Zintegers)rirYrrr7rr!r r r !test_exit_on_error_with_good_args,sz1TestExitOnError.test_exit_on_error_with_good_argscCs@|tj |jdWdn1s20YdS)Nz --integers a)rr7rrirYrrr r r test_exit_on_error_with_bad_args0sz0TestExitOnError.test_exit_on_error_with_bad_argsN)rrr rrkrlr r r r rh&srhcCsit_tt_dSr)rrrrr r r r tearDownModule5srm__main__)rcrr&r$rRrrZunittestr7iorrrrrr rrr4r:rJrIr\r8r]rCrdrrerrrrrrrrrrrrrrrrrrrrrrr r)r-r/r1r3r4r?r@rIrKrVrWrYr[rarcrgrhrkrlrnrorprqrrrsrvrxryr|r}rrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrZ eq_stderrrrrrrZskipIfrrrrrr rrrrr#r6r:r>rrrrrrrrrrrrrrrrrrrrr r r rrr&r'r5rCrDrErIrMrPrRrTrVrYr]rbrcrdrerfrgrirkrlrnrprsrurvrwrxryrzrrrrrrrrrrrrrrrrrrrrrrrrVr_rerhrmrmainr r r r s     !q                                            ""C ('4&0#+!$-*(), ^R$7/4(66$&"$. 10/+!~-LG% =1*?)