asda?‰PNG  IHDR ? f ??C1 sRGB ??é gAMA ±? üa pHYs ? ??o¨d GIDATx^íüL”÷e÷Y?a?("Bh?_ò???¢§?q5k?*:t0A-o??¥]VkJ¢M??f?±8\k2íll£1]q?ù???T a bYh@sddlZddlZddlZddlZddlZddlZddlZddlZddlZddl Z ddl Z ddl m Z ddl m Z GdddejZGddde jZGdd d eZGd d d eZGd d d eZGdddeZddZGddde jZGdddeZefZedeiZGdddeZGdddeZGdddeZ GdddeZ!Gdd 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)Gd/d0d0eZ*Gd1d2d2eZ+Gd3d4d4eZ,Gd5d6d6eZ-Gd7d8d8eZ.Gd9d:d:eZ/Gd;d<dd>eZ1Gd?d@d@eZ2GdAdBdBeZ3GdCdDdDeZ4GdEdFdFeZ5GdGdHdHeZ6GdIdJdJeZ7GdKdLdLeZ8GdMdNdNeZ9GdOdPdPeZ:GdQdRdReZ;GdSdTdTeZGdYdZdZeZ?Gd[d\d\eZ@Gd]d^d^eZAGd_d`d`eZBGdadbdbeZCGdcddddeZDGdedfdfeZEGdgdhdheZFGdidjdjeZGGdkdldleZHGdmdndneZIGdodpdpeZJGdqdrdreZKGdsdtdteZLGdudvdveZMGdwdxdxeZNGdydzdzeZOGd{d|d|eZPGd}d~d~eZQGdddeZRGdddeZSGdddeZTGdddeZUGdddeZVGdddeZWGdddeZXGdddeZYGdddeZZGdddeZ[GdddeZ\GdddeZ]GdddeZ^GdddeZ_GdddeZ`GdddeZaGdddeZbGdddeZcGdddeZdGdddeZeGdddeZfGdddeZgGdddeZhGdddeZiGdddeZjGdddeZkGdddeZlGdddeZmGdddeZnGdddeZoGdddeZpGdddeeZqGdddeeZrGdd„deZseZteZuGddĄdăZvevdŃZwevdƃZxevdǃZyevdȃZzevdɃZ{evdʃZ|Gdd̄deZ}Gdd΄deeZ~GddЄdeeZGdd҄deeZGddԄdeZe eedՃo.edkd֡Gdd؄deeZe eedՃo`edkd֡GddڄdeeZe eedՃoedkd֡Gdd܄deeZe eedՃoedkd֡GddބdeZGdddeZGdddeZGdddeZGdddeZGdddeZGdddeZGdddeZGdddeZGdddeZGdddeZGdddeZGdddeZGdddeZGdddeZGdddeeZGdddeeZGdddeeZGdddeeZGdddeeZGdddeeZGdddeeZGd d d eeZGd d d eeZGd ddeZGdddeeZGdddeeZGdddeeZGdddeeZGdddeeZGdddeeZGdddeeZGdddeeZGdd d eZGd!d"d"eZGd#d$d$eZGd%d&d&eZefZed'eiZGd(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~ddeZGdddeZGdddeZGdddeZGdddeZGdddeZGdddeZGdddeZGdddeZGdddeZGdddeZGdddeZGdddeZGdddeZddZedkre dS(N)support)mockcs*eZdZdZdfdd ZddZZS) StdIOBufferzReplacement for writable io.StringIO that behaves more like real file Unlike StringIO, provides a buffer attribute that holds the underlying binary data, allowing it to replace sys.stdout/sys.stderr in more contexts.  cs,|d}tjtt|d|ddS)Nutf-8)newline)encodesuper__init__ioBufferedWriterBytesIO)selfZ initial_valuer __class__./usr/local/lib/python3.9/test/test_argparse.pyr s zStdIOBuffer.__init__cCs||jjdS)Nr)flushbufferrawgetvaluedecoderrrrr szStdIOBuffer.getvalue)rr)__name__ __module__ __qualname____doc__r r __classcell__rrrrrsrc@seZdZddZdS)TestCasecCs t}d|d<||jdS)NZ80COLUMNS)rEnvironmentVarGuard addCleanup__exit__renvrrrsetUp'szTestCase.setUpN)rrrr&rrrrr%src@s,eZdZddZddZddZddZd S) TempDirMixincCs$t|_t|_t|jdSN)tempfilemkdtemptemp_dirosgetcwdold_dirchdirrrrrr&2s  zTempDirMixin.setUpcCs^t|jtj|jddD].\}}}|D]}ttj|j|tj q*qt |jddS)NF)topdownT) r,r/r.walkr+chmodpathjoinstatS_IWRITEshutilrmtree)rrootdirsfilesnamerrrtearDown7s  zTempDirMixin.tearDowncCsHtj|j|}t|d}||Wdn1s:0Y|S)Nw)r,r3r4r+openwrite)rfilenameZ file_pathfilerrrcreate_writable_file>s (z!TempDirMixin.create_writable_filecCst||tjdSr()r,r2rCr5S_IREAD)rrArrrcreate_readonly_fileDsz!TempDirMixin.create_readonly_fileN)rrrr&r=rCrErrrrr'0sr'c@seZdZddZdS)SigcOs||_||_dSr()argskwargsrrGrHrrrr Isz Sig.__init__Nrrrr rrrrrFGsrFc@s$eZdZddZddZddZdS)NScKs|j|dSr()__dict__update)rrHrrrr Psz NS.__init__cCs4t|j}ddd|D}dt|j|fS)Nz, cSsg|] }d|qS)z%s=%rr).0tuprrr UzNS.__repr__..z%s(%s))sortedrLitemsr4typer)rZ sorted_itemsZ kwarg_strrrr__repr__Ssz NS.__repr__cCst|t|kSr()varsrotherrrr__eq__Xsz NS.__eq__N)rrrr rUrYrrrrrKNsrKc@seZdZdddZdS)ArgumentParserErrorNcCs,t||||||_||_||_||_dSr() Exceptionr messagestdoutstderr error_code)rr\r]r^r_rrrr ^s zArgumentParserError.__init__)NNNrJrrrrrZ\srZc Osjttjtsttjtr&||i|Stj}tj}tt_tt_zz||i|}tt|D]}t||}|tjurt|||qb|tjj urt||t|dt qb|tjurt|||qb|tjj urbt||t|dt qb|WW|t_|t_St yF}z6|j } tj} tj} td| | | dWYd}~n d}~00W|t_|t_n|t_|t_0dS)Nr SystemExit) isinstancesysr^rr]listrVgetattrsetattrrBIN_STDOUT_SENTINELBIN_STDERR_SENTINELr`coderrZ) parse_argsrGrHZ old_stdoutZ old_stderrresultkeyattrerhr]r^rrrstderr_to_parser_errorfsH       rncs4eZdZfddZfddZfddZZS)ErrorRaisingArgumentParsercs"tt|j}t|g|Ri|Sr()r rorirn)rrGrHrirrrris z%ErrorRaisingArgumentParser.parse_argscs"tt|j}t|g|Ri|Sr()r roexitrn)rrGrHrprrrrps zErrorRaisingArgumentParser.exitcs"tt|j}t|g|Ri|Sr()r roerrorrn)rrGrHrqrrrrqs z ErrorRaisingArgumentParser.error)rrrrirprqrrrrrros  roc@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_argumentrGrH)parserargument_signaturessigrrr no_groupssz1ParserTesterMetaclass.__init__..no_groupscSs,|d}|D]}|j|ji|jqdS)z4Add all arguments under a single group in the parserfooN)add_argument_grouprvrGrH)rwrxgroupryrrr one_groups z1ParserTesterMetaclass.__init__..one_groupcSs8t|D]*\}}|d|}|j|ji|jqdS)z0Add each argument in its own group to the parserzfoo:%iN) enumerater|rvrGrH)rwrxiryr}rrr many_groupssz3ParserTesterMetaclass.__init__..many_groupscSs ||S)z#Parse the args by passing in a list)ri)rwrGrrrlistargssz0ParserTesterMetaclass.__init__..listargscSs4tj}|dg|t_z|W|t_S|t_0dS)z(Parse the args by defaulting to sys.argvrN)rbargvri)rwrGZ old_sys_argvrrrsysargssz/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 ||dSr(rr test_funcrrrwrapperszJParserTesterMetaclass.__init__..AddTests.__init__..wrapper)_add_arguments _parse_argsr test_failurestest_successesr4 TypeErrorre) rZ tester_cls add_argumentsriZadd_arguments_nameZparse_args_namer func_namenames test_namerrrrr s     z9ParserTesterMetaclass.__init__..AddTests.__init__cSs2|jj}|jj}|j|i|}|||j|Sr()rtrGrHrurrx)rtesterrGrHrwrrr _get_parsers z.AddTests._get_parserc SsZ||}|jD]D}|}|jt|d||Wdq1sJ0YqdS)N)msg)rfailuressplit assertRaisesrZri)rrrwargs_strrGrrrrs   z>ParserTesterMetaclass.__init__..AddTests.test_failurescSsH||}|jD]2\}}t|tr*|}|||}|||qdSr()r successesrastrrr assertEqual)rrrwrG expected_nsZ result_nsrrrrs    z?ParserTesterMetaclass.__init__..AddTests.test_successesN)rrrr rrrrrrrAddTestssr)hasattrrFrtroruobject) clsr<basesbodydictrzr~rrrrrrirrrr s    - zParserTesterMetaclass.__init__N)rrrrr rrrrrrsrrrsc@sbeZdZdZedgZgdZdeddfdeddfd eddfd ed dfd ed dfgZdS) TestOptionalsSingleDash1Test an Optional with a single-dash option string-x)ra--foo-x --fooz-x -yrNx-x ar-xaz-x -1-1z-x-1 rrrrrFrxrrKrrrrrrs      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 arrrrrr!s&  rc@sbeZdZdZedgZgdZdeddfdeddfd ed dfd eddfd eddfgZdS) TestOptionalsSingleDashLongzATest an Optional with a multi-character single-dash option string-foo)rrrz -foo --fooz-foo -y-fooarNr{z-foo arz-foo -1rz-fo a-f arrrrrr;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 arrrrrrIsrc @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 arrrrrrrrYsrc@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-2rrrrrris    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.5rrrrrrvs      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--badgerrrrrrs 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=XrTrrrrrrrrs 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 OptionalrrrNrrrrrrrr&s    rc@sDeZdZdZedddgZddgZdeddfd edgdfgZdS) TestOptionalsNargs1z&Tests specifying 1 arg for an OptionalrnargsrrNrrrrrrrr1s  rc@sFeZdZdZedddgZgdZdeddfd egd dfgZdS) TestOptionalsNargs3z'Tests specifying 3 args for an Optionalrr)rrr-x a ba -xa -x brNrz-x a b crbcrrrrrr<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)rrrspamrr r42Z84)rrTrr 2rNTr>rrrz-w 2z-x 2z-y 2z-z 2 rrrrrFintrxrrKrrrrrrGs"   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*rrrrrrNr rrr-y a-y a brrrrrr&^s  r&c @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)rrrrza -y brNr rrrrr)r*rrrrrr+qs  r+c @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-grTr0)rz-f dz-fadz-gaz-g 6rN)rrrrz-f crz-g 0rz-g 03rz-fb -g4r rrrrrFr%rangerxrrKrrrrrr-s r-c@sDeZdZdZededdgZddgZdedd fd ed d fgZ d S) TestOptionalsRequiredz)Tests an optional action that is requiredrTrTrequiredrr-x 1rrz-x42rNr$rrrrr6s   r6c@sBeZdZdZedddgZddgZdedd fd ed d fgZdS) TestOptionalsActionStorez&Tests the store action for an OptionalrstorerrrrNrz-xfoor{rrrrrr:s   r:c@sBeZdZdZeddedgZdgZdeddfdeedfgZ dS) TestOptionalsActionStoreConstz,Tests the store_const action for an OptionalrrrrrNr) rrrrrFrrxrrKrrrrrr<s   r<c@sBeZdZdZedddgZgdZdeddfded dfgZd S) TestOptionalsActionStoreFalsez,Tests the store_false action for an Optionalr store_falser)rrrrT)rFNrrrrrr>s   r>c@sBeZdZdZedddgZgdZdeddfded dfgZd S) TestOptionalsActionStoreTruez+Tests the store_true action for an Optionalz--applerr)rz --apple=bz --apple brF)ZappleTNrrrrrr@s   r@c@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') argparseArgumentParserrrrvBooleanOptionalActionassertInr exceptionrrwcmrrr test_consts 0z$TestBooleanOptionalAction.test_const) rrrrrFrDrFrxrrKrrKrrrrrAs     rAc@sDeZdZdZeddejdgZdgZde ddfde ddfgZ d S) !TestBooleanOptionalActionRequiredz$Tests BooleanOptionalAction requiredrT)r8rrrrBFN) rrrrrFrDrFrxrrKrrrrrrLs  rLc@sTeZdZdZedddgZgdZdeddfd ed gdfd ed d gdfgZdS) TestOptionalsActionAppend'Tests the append action for an Optionalrappendrrra --baz --baz a brNr--baz ar--baz a --baz brrrrrrrMs rMc@s\eZdZdZedddgdgZgdZdedgdfd edd gdfd egd dfgZd S)$TestOptionalsActionAppendWithDefaultrNrrOrrr rPrrSrTrrU)rrrNrrrrrrVsrVc@sfeZdZdZeddededdddgZgd Zd ed d fdeegd fd eededgd fgZ d S)TestOptionalsActionAppendConst-Tests the append_const action for an Optional-b append_constr-crOrrrrr\za -cz-bxz-b xrNr-b -cx -b -cyzryz rrrrrFr[rxrrKrrrrrrXs   rXc @speZdZdZeddedgdedddd gZgd Zd edgd fdedegd fd edededgd fgZ dS))TestOptionalsActionAppendConstWithDefaultrYrZr[r)rrr r\rOrr]r^rr_r`rraNrbrrrrrcs rcc@sBeZdZdZedddgZgdZdeddfded dfgZdS) TestOptionalsActionCountz&Tests the count action for an Optionalrcountr)rrz-x bz -x a -x brNrrrrrrrrd"s   rdc @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)r{ZfoobazZfooblez--foo 77z --fooba arz--foobl --foo grTrrrrrrf-s rfc@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 2rNr{ZfoodleZfoonlyz--foo 33z--foonly 7 --foodle --foo 2r Trgrrrrrrh>s  rhc@sreZdZdZedddZededdded gZgd Zd ed dd d fdeddd d fdedddd fgZ d S)0TestOptionalsDisallowLongAbbreviationPrefixCharszBDisallowing abbreviations works with alternative prefix charactersr,Frrkz++fooz++foodlerrz++foonly)z+foon 3z++foon 3z++foodz++food ++foo 2rNrlz++foo 3rmz++foonly 7 ++foodle ++foo 2r TrgrrrrrrnOs  rnc @seZdZdZeddZededddgZddgZd ed d d fd ed d d fdedd d fded dd fded dd fdeddd fgZ d S)/TestDisallowLongAbbreviationAllowsShortGroupingriFrjz-rr\rerz-c -rrNrrz-rarz-rccccz-ccr#z-cc -raz-ccrccrrrrrrp`s  rpc @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=Falser,Froz+rz+crerz+c +rrNrqz+rarz+rccrsz+ccr#z+cc +raz+ccrccrrrrrrtss  rtc@s2eZdZdZedgZgdZdeddfgZdS)TestPositionalsNargsNonez,Test a Positional that doesn't specify nargsr{rra brrNrrrrrrus   ruc@s8eZdZdZedddgZgdZdedgdfgZdS) TestPositionalsNargs1z.Test a Positional that specifies an nargs of 1r{rrrvrrNrrrrrrxs rxc@s:eZdZdZedddgZgdZdeddgd fgZd S) TestPositionalsNargs2z.Test a Positional that specifies an nargs of 2r{r#r)rrra b crwrrrNrrrrrrys ryc@sReZdZdZedddgZdgZdegdfdedgdfd edd gdfgZd S) TestPositionalsNargsZeroOrMorez0Test a Positional that specifies unlimited nargsr{r(rrrrrrwrNrrrrrr{s r{c@sTeZdZdZeddddgZdgZdeddfd ed gdfd ed d gdfgZd S) %TestPositionalsNargsZeroOrMoreDefaultz>Test a Positional that specifies unlimited nargs and a defaultr{r(rrrrrrrwrNrrrrrr|s r|c@sHeZdZdZedddgZddgZdedgdfd edd gdfgZd S) TestPositionalsNargsOneOrMorez2Test a Positional that specifies one or more nargsr{r,rrrrrrwrNrrrrrr}s r}c@sBeZdZdZedddgZddgZdedd fd ed d fgZdS) TestPositionalsNargsOptionalzTests an Optional Positionalr{rrrrwrNrrrrrrrr~s   r~c@sDeZdZdZeddddgZddgZdedd fd ed d fgZd S) #TestPositionalsNargsOptionalDefaultz1Tests an Optional Positional with a default valuer{rrrrrwrrrNrrrrrrs   rc@sFeZdZdZeddeddgZgdZdedd fd ed d fgZ d S) ,TestPositionalsNargsOptionalConvertedDefaultznTests an Optional Positional with a default value that needs to be converted to the appropriate type. r{rr)rrTr )rrw1 2rrr1rNr$rrrrrs  rc@s:eZdZdZededgZgdZdedddfgZd S) TestPositionalsNargsNoneNonez-Test two Positionals that don't specify nargsr{r)rrrrzrwrrr{rNrrrrrrs rc@s@eZdZdZededddgZgdZdedd gd fgZd S) TestPositionalsNargsNone1z6Test a Positional with no nargs followed by one with 1r{rrr)rrrrzrwrrrNrrrrrrs rc@sBeZdZdZedddedgZgdZdedd gd d fgZd S) TestPositionalsNargs2Nonez8Test a Positional with 2 nargs followed by one with noner{r#rrrrrrwa b c drzrrrrNrrrrrrs rc@s`eZdZdZededddgZddgZdedgd fd edd gd fd edd d gd fgZdS)"TestPositionalsNargsNoneZeroOrMorez>Test a Positional with no nargs followed by one with unlimitedr{rr(rrrrrrwrrzrNrrrrrrsrc@sReZdZdZededddgZgdZdedd gd fd edd d gd fgZd S)!TestPositionalsNargsNoneOneOrMorez@Test a Positional with no nargs followed by one with one or morer{rr,rrrrrwrrrrzrNrrrrrrs rc@sLeZdZdZededddgZgdZdeddd fd edd d fgZdS) TestPositionalsNargsNoneOptionalz@Test a Positional with no nargs followed by one with an Optionalr{rrrrrrzrNrrwrrrrrrr%s rc@s`eZdZdZedddedgZddgZdegdd fd edgd d fd edd gd d fgZdS)"TestPositionalsNargsZeroOrMoreNonez@Test a Positional with unlimited nargs followed by one with noner{r(rrrrrrrwrrzrNrrrrrr0src@sReZdZdZedddedgZgdZdedgd d fd edd gd d fgZd S)!TestPositionalsNargsOneOrMoreNonezBTest a Positional with one or more nargs followed by one with noner{r,rrrrwrrrrzrNrrrrrr<s rc@sNeZdZdZeddddedgZgdZdeddd fd edd d fgZd S) TestPositionalsNargsOptionalNonezBTest a Positional with an Optional nargs followed by one with noner{rrrrrrrrwrNrrrrrrGs rc@sZeZdZdZedddedddgZgdZded d ggd fd ed d gd gd fgZdS)TestPositionalsNargs2ZeroOrMorez=Test a Positional with 2 nargs followed by one with unlimitedr{r#rrr(rrwrrrrzrNrrrrrrRs rc@sHeZdZdZedddedddgZgdZded d gd gd fgZd S)TestPositionalsNargs2OneOrMorez?Test a Positional with 2 nargs followed by one with one or morer{r#rrr,)rrrrwrzrrrrNrrrrrr]s rc@sXeZdZdZedddedddgZgdZded d gd d fd ed d gdd fgZd S)TestPositionalsNargs2Optionalz7Test a Positional with 2 nargs followed by one optionalr{r#rrr)rrrrrwrrNrrzrrrrrrrgs rc@sjeZdZdZedddedddgZddgZd egd gd fd ed gd gd fd ed d gdgd fgZdS)TestPositionalsNargsZeroOrMore1z=Test a Positional with unlimited nargs followed by one with 1r{r(rrrrrrrrwrrzrNrrrrrrrsrc@sZeZdZdZedddedddgZgdZded gd gd fd ed d gd gd fgZdS)TestPositionalsNargsOneOrMore1z?Test a Positional with one or more nargs followed by one with 1r{r,rrrrrwrrrrzrNrrrrrr~s rc@sTeZdZdZedddedddgZgdZded dgd fd edd gd fgZd S) TestPositionalsNargsOptional1z?Test a Positional with an Optional nargs followed by one with 1r{rrrrrrNrrwrrrrrrrs rc@s`eZdZdZededddedddgZgdZd ed gd gd fd ed d gdgd fgZdS)#TestPositionalsNargsNoneZeroOrMore1z=Test three Positionals: no nargs, unlimited nargs and 1 nargsr{rr(rrrrrwrrr{rrrzrNrrrrrrs  rc@sdeZdZdZededddedddgZgdZd ed d gd gd fded d d gdgd fgZdS)"TestPositionalsNargsNoneOneOrMore1z?Test three Positionals: no nargs, one or more nargs and 1 nargsr{rr,rrr)rrrrrzrrrrrdNrrrrrrs  rc@s`eZdZdZededdddeddd gZgd Zd ed dd gdfded d dgdfgZdS)!TestPositionalsNargsNoneOptional1z;Test three Positionals: no nargs, optional narg and 1 nargsr{rr?rrrrrrwrrrrzrNrrrrrrs  rc@s`eZdZdZedddeddddgZdd gZd ed dd fd ed dd fded dd fgZd S)$TestPositionalsNargsOptionalOptionalzTest two optional nargsr{rrrrrrrzrNrrrwrrrrrrrs  rc@speZdZdZedddedddgZdgZded gd fd ed gd fd ed d gd fded d dgd fgZd S)&TestPositionalsNargsOptionalZeroOrMorez1Test an Optional narg followed by unlimited nargsr{rrrr(rrNrrrwrrzrrrrrrrsrc@sfeZdZdZedddedddgZddgZd ed d gd fd ed d gd fded d dgd fgZd S)%TestPositionalsNargsOptionalOneOrMorez3Test an Optional narg followed by one or more nargsr{rrrr,rrrNrrwrrzrrrrrrrsrc@sFeZdZdZededdgZgdZdeddfdeddfgZ d S) TestPositionalsChoicesStringz&Test a set of single-character choicesrZabcdefgr/rrrrZefrrrN) rrrrrFsetrxrrKrrrrrrs   rc@sHeZdZdZedeeddgZgdZde ddfd e d dfgZ d S) TestPositionalsChoicesIntzTest a set of integer choicesrr2r4r3r15Nr4rrrrrs   rc@sJeZdZdZedddeddddgZgdZded d d ggd fgZd S)TestPositionalsActionAppendzTest the 'append' actionrrOrr#)rrrrzrrrrNrrrrrrs  rc@sneZdZdZedddeddddgZd d gZd ed d dfdedd dfded ddfdedddfgZd S)"TestOptionalsNumericAndPositionalsz;Tests negative number args when numeric options are presentrrrz-4rrrrrz-315rNFr rTz-4 arrrrrrs  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-k3rNFr rrTz-k4 arrrrrrs  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--yyyrrrNr za badgerz -a badgerz--yyy=a badgerz--yyy=-a badger)rrrrFrxrrKrrrrrr0s  rc @seZdZeddZedddddedd ed d ed d ddgZddgZdedd ddfdedd ddfdedd ddfdeddddfd edd ddfdedd ddfgZ dS) TestPrefixCharacterOnlyArgumentsz-+r-rrr)rrrr,rr)rrTr z-+-rrrrz+ -rNFrz- Xrz+ -3Tz- ===z===) rrrrFrtr%rxrrKrrrrrrCs  rc @seZdZdZedddedddgZgZdedgdfdeggdfd ed ggdfd ed gd gdfd edd gdfd egd gdfded gd gdfgZdS)TestNargsZeroOrMorer'rr(rrrNr rrz -x a -- brrrrrrrrrVsrc @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 --fooYrrrrrrrfsrc@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 argumentsrrTz-3r)rTrrr(r) 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) rrrrrFfloatrxrrKrrrrrrss$   rc @seZdZdZeddejdeddejdeddejd gZd gZd e fd e d d fde d dgdfde ddfde d ddfde d dgddfgZ dS)TestDefaultSuppressz%Test actions with suppressed defaultsr{rrrr(rrrWrrrrrwrrTrSrQr{rrRrN) rrrrrFrDSUPPRESSrxrrKrrrrrrs  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_defaultr{rrrr(rrrrrrrrwrrTrSrQrrRrN) rrrrrFrDrrtrxrrKrrrrrrs      rc @seZdZdZeddZeddddedd d ed d d ed ddgZdgZdedddddfdedddddfdeddgdddfd edddddfdedddddfdeddgdddfgZ dS)TestParserDefault42z.Test actions with a parser-level default of 42rr --versionversion1.0rrr{rrrr(rrrrr)r{rrrrrwrTrQrRNrrrrrrs     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 rr&r?r@rZ file_textsr3textrBrrrr&s   zTestArgumentsFromFile.setUp@fromfile_prefix_chars-arrr,r)rrZrz@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) rrrrr&rFrtrxrrKrrrrrrrs   rcsdeZdZdZfddZGdddeZeZeddZ edd d gZ gZ d e gd d fgZ ZS)TestArgumentsFromFileConverterrc sZtt|dg}|D]<\}}t|d}||Wdq1sJ0YqdS)Nrr>)r rr&r?r@rrrrr&s   z$TestArgumentsFromFileConverter.setUpc@seZdZddZdS)z>TestArgumentsFromFileConverter.FromFileConverterArgumentParserccs"|D]}|sq|VqdSr()rstrip)rarg_lineargrrrconvert_arg_line_to_argss zWTestArgumentsFromFileConverter.FromFileConverterArgumentParser.convert_arg_line_to_argsN)rrrrrrrrFromFileConverterArgumentParsersrrrrr,rr)rzworld!rr=)rrrrr&rorrurFrtrxrrKrrrrrrrs   rc@s4eZdZddZddZddZddZd d Zd S) TestFileTypeReprcCstd}|dt|dS)Nrrz FileType('r')rDFileTyperreprrrTrrrtest_rs zTestFileTypeRepr.test_rcCs tdd}|dt|dS)NwbrzFileType('wb', 1)rrrrr test_wb_1s zTestFileTypeRepr.test_wb_1cCs"tjddd}|dt|dS)Nrrlatin_1encodingz!FileType('r', encoding='latin_1')rrrrr test_r_latinszTestFileTypeRepr.test_r_latincCs$tjdddd}|dt|dS)Nr>big5ignore)rerrorsz/FileType('w', encoding='big5', errors='ignore')rrrrrtest_w_big5_ignoresz#TestFileTypeRepr.test_w_big5_ignorecCs$tjdddd}|dt|dS)Nrrrreplacerz"FileType('r', 1, errors='replace')rrrrrtest_r_1_replace!sz!TestFileTypeRepr.test_r_1_replaceN)rrrrrrrrrrrrrs rc@seZdZddZddZdS)StdStreamComparercCs8t||_|dkrt|_n|dkr,t|_nt|_dS)N stdout.buffer stderr.buffer)operator attrgetterrdrf backupattrrgr)rrlrrrr +s  zStdStreamComparer.__init__cCs2z||tkWSty,||jkYS0dSr()rdrbAttributeErrorrrWrrrrY9s zStdStreamComparer.__eq__Nrrrr rYrrrrr*srstdinr]r^z stdin.bufferrrc@s eZdZiZddZddZdS)RFilecCs ||_dSr(r<rr<rrrr KszRFile.__init__cCs`||jvr|j|}n|}|j|<|t|tsD|d}|j|jkoZ|kSS)Nascii)seenreadcloserarrr<rrXrrrrrYNs    z RFile.__eq__N)rrrrr rYrrrrrHsrc 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)Nrr>readonly) r rr&r?r,r3r4r+r@rEr file_namerBrrrr&\s *zTestFileTypeR.setUprrrrr)rrznon-existent-file.txtr{Nrr -x foo barr bar -x foo-x - -r)rrrrr&rFrDrrxrrKreq_stdinrrrrrrrYs rcsPeZdZdZfddZededddgZdgZ d e e d d fgZ Z S) TestFileTypeDefaultsz) r r r&r?r,r3r4r+r@r)rrBrrrr&rs zTestFileTypeDefaults.setUpr\rrz no-file.txtrTr rz-c goodr )r)rrrrr&rFrDrrxrrKrrrrrrrr ps  r cseZdZdZfddZededdededdgZddgZ d e d e d d fd e e d e d d fde e d e d d fde e e d fgZ ZS)TestFileTypeRBrc s\tt|dD]D}ttj|j|d}||Wdq1sL0YqdS)Nrr>) r r r&r?r,r3r4r+r@rrrrr&szTestFileTypeRB.setUprrbrrrr{Nrrrrr)rrrrr&rFrDrrxrrKr eq_bstdinrrrrrrr s r c@s"eZdZeZddZddZdS)WFilecCs ||_dSr(rrrrrr szWFile.__init__cCsL||jvr@d}d|jvr"|d}||||j||j|jkS)NzCheck that file is writable.rr)rmoder r@raddr<rrrrrYs     z WFile.__eq__N)rrrrrr rYrrrrrsrgeteuidznon-root user requiredc seZdZdZfddZededdededdgZgdZ d e d e d d fd e d e d d fd e e d e dd fde e d e dd fde e e d fgZ ZS) TestFileTypeWz8Test the FileType option/argument type for writing filescs"t|d|ddSNrwritabler r&rErCrrrrr&s  zTestFileTypeW.setUprr>rr)rrrr{Nrrrrrrrrrrr&rFrDrrxrrKr eq_stdoutrrrrrrrs rcsteZdZdZfddZededdededdgZgdZ d e e d e d d fd e e e d fgZ ZS) TestFileTypeXzATest the FileType option/argument type for writing new files onlycs"t|d|ddSrrrrrrr&s  zTestFileTypeX.setUprrrr)rrrrrr{rrrrrrrrrs rc@seZdZdZededdededdgZddgZde de dd fd e e de d d fd e e de d d fd e e e d fgZ dS)TestFileTypeWBz?Test the FileType option/argument type for writing binary filesrrrrrr{Nrrrrr) rrrrrFrDrrxrrKr eq_bstdoutrrrrrrsrc@s\eZdZdZededdededdgZdee de dd fd ee e d fgZ d S) TestFileTypeXBzHTest the FileType option/argument type for writing new binary files onlyrxbrrrr{rrrN) rrrrrFrDrrxrKrrrrrrrrsrc@seZdZdZddZdS)TestFileTypeOpenArgsz0Test that open (the builtin) is correctly calledc Cstj}|ddf|dddf|ddddf|d d d d f|dd dddfg}td8}|D]"\}}|d|jdg|Rq\Wdn1s0YdS)Nr)rNNr>r)r>rNNrr)r>r Nrrrr)rr rNrl1strict)r>rr!r"z builtins.openr{)rDrrZpatchZassert_called_with)rZFTZcasesmrTrGrrrtest_open_argss    z#TestFileTypeOpenArgs.test_open_argsN)rrrrr$rrrrrsrc@seZdZdZddZdS)!TestFileTypeMissingInitializationzx Test that add_argument throws an error if FileType class object was passed instead of instance of FileType cCs`t}|t }|jdtjdWdn1s80Y|dtjft|jdS)Nrrz<%r is a FileType class object, instance of it must be passed) rDrEr ValueErrorrvrrrrHrIrrrtest s .z&TestFileTypeMissingInitialization.testNrrrrr'rrrrr%sr%c@s^eZdZdZededededgZgdZde ddd fd e d d d fd e ddd fgZ dS)TestTypeCallablez,Test some callables as option/argument typesz--eggsrr)rZ42jz--eggs az --eggs 2iz --eggs=42 42rgE@)eggsrz--eggs 2j -- -1.5y@z1024.675Ng3333@) rrrrrFcomplexrrxrrKrrrrrr)s  r)c@sleZdZdZGdddeZededededgZgZde eded d fd e ed ed d fgZ dS)TestTypeUserDefinedz(Test a user-defined option/argument typec@seZdZddZddZdS)zTestTypeUserDefined.MyTypecCs ||_dSr(valuerr/rrrr -sz#TestTypeUserDefined.MyType.__init__cCst||jft||jfkSr(rTr/rWrrrrY0sz!TestTypeUserDefined.MyType.__eq__NrrrrrMyType+sr2rrrrrrr-xf grrN) rrrrrr2rFrxrrKrrrrrr-(s  r-c@sjeZdZdZGdddZededededgZgZdeeded d fd eed ed d fgZ dS)TestTypeClassicClasszTest a classic class typec@seZdZddZddZdS)zTestTypeClassicClass.CcCs ||_dSr(r.r0rrrr CszTestTypeClassicClass.C.__init__cCst||jft||jfkSr(r1rWrrrrYFszTestTypeClassicClass.C.__eq__NrrrrrCAsr5rrrrrrrr3rrN) rrrrr5rFrxrrKrrrrrr4>s  r4c@seZdZdZddZdS)TestTypeRegistrationz*Test a user-defined type by registering itcCszdd}t}|dd||jddd|jddd||dtdd d ||d td d d dS) NcSsd|S)Nz my_type{%s}rstringrrr get_my_typeYsz.TestTypeRegistration.test..get_my_typerTZmy_typerrrrz my_type{1}r z-x 1 42z my_type{42})rDrEregisterrvrrirrK)rr9rwrrrr'Ws  zTestTypeRegistration.testNr(rrrrr6Tsr6c@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.OptionalActionNc Csz~|jdksJd|j|dks.Jd|tdd}|dvrHd|_n|d vrXd |_n td |||ks|Jd ||fWn0ty}ztd |WYd}~n d}~00t|d|dS)Nrdest: %s-szflag: %s?r)?rr#)@r! value: %sexpected %s, got %szopt_action failed: %s)rrKrAssertionErrorrZrerrw namespacer/ option_stringrrmrrr__call__ps    "z-TestActionUserDefined.OptionalAction.__call__)NrrrrGrrrrOptionalActionnsrIc@seZdZdddZdS)z&TestActionUserDefined.PositionalActionNc Csz|dusJd||jdks.Jd|jtdd}|dvrHd|_n,|dvrXd |_n|d vrhd |_n td |||ksJd ||fWn0ty}ztd|WYd}~n d}~00t|d|dS)Nzoption_string: %srr<r#r)rr!r>)rr)r#r?rArBzarg_action failed: %s)rrKrrCrZrerDrrrrGs&     "z/TestActionUserDefined.PositionalAction.__call__)NrHrrrrPositionalActionsrKr=rr>)rrrTr rrr#)rrTrr z-s0.125r?)rrrrz -s 0.625 1rrz84 -s2r@r!N)rrrrrDActionrIrKrFrr%rxrrKrrrrrr;ks r;c@s*eZdZdZGdddejZddZdS)TestActionRegistrationz5Test a user-defined action supplied by registering itc@seZdZdddZdS)zTestActionRegistration.MyActionNcCst||jd|dS)Nzfoo[%s])rer)rrwrEvaluesrFrrrrGsz(TestActionRegistration.MyAction.__call__)NrHrrrrMyActionsrOcCs^t}|dd|j|jddd||dgtdd||dgtd ddS) NrZ my_actionrrrzfoo[1]rJrzfoo[42])rDrEr:rOrvrrirKrrwrrrr's zTestActionRegistration.testN)rrrrrDrLrOr'rrrrrMsrMc@s6eZdZedddedgZdZdegddfgZd S) TestActionExtendrextendr,)rrrTrz--foo f1 --foo f2 f3 f4)f1f2Zf3Zf4rN) rrrrFrrxrrKrrrrrrQs rQcseZdZdZddZd: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|dSr(rrZrIrrrassertArgumentParserErrorsz+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 descriptionrrr#r{rfoo helprhelprZr[rrbar helprTr^r8FZCOMMANDmetavarcommandstitle command helpr^z 1 descriptionr[z1 helpZ1alias1Z1alias2aliasesrrzw helprr.x helpr0r^z 2 descriptionz2 helpr rZ123y helprr(zz help)rTrr^z 3 descriptionz3 helprmtzt helpurzu helprr^)r)r )rm) rorvradd_subparsersrWdict add_parserr%r,) rsubparser_helprrgrwZsubparsers_kwargs subparsersZparser1_kwargsparser1Zparser2_kwargsparser2Zparser3_kwargsZparser3rrrrsX      zTestAddSubparsers._get_parsercs&t||_|jdd|_dS)NT)rq)r r&rrwcommand_help_parserrrrrr&s  zTestAddSubparsers.setUpcCs&dD]}|}||jj|qdS)N)rrza az0.5 az0.5 1z0.5 1 -yz0.5 2 -w)rrWrwri)rrrGrrrtest_parse_args_failures sz*TestAddSubparsers.test_parse_args_failuresc Cs||jdtddddd||jdtdd d d d gd ||jdtddddd||jdtdddgdddS)N 0.5 1 b -w 7Frrr{rr>rz0.25 --foo 2 -y 2 3j -- -1jTr>r y@y)r{rrrz--foo 0.125 1 cr?rz-1.5 3 11 -- a --foo 7 -- br+ )rrrg--r)r{rrkrl)rrwrirrKrrrrtest_parse_argss z!TestAddSubparsers.test_parse_argsc Cs||jdtdddddgf||jdtddddddgf||jd tddddddgf||jd tdddddd d gf||jd tdddddgdfdS)NrwFrrxrryz0.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)rrwparse_known_argsrrKrrrrtest_parse_known_args's(z'TestAddSubparsers.test_parse_known_argscCsXt}|jddd|jdd}|d}|d|tddd d |d dS) NrrrrrrrFr rr)rorvrnrprrKrir)rrwrrrsrrr test_dest=s    zTestAddSubparsers.test_destcCs,|dg}||jd||jddS)Nrunr)rircommandrW)rrwretrrr_test_required_subparsersFs z+TestAddSubparsers._test_required_subparserscCs0t}|jdd}d|_|d||dS)NrrTr)rornr8rprrrwrrrrr&test_required_subparsers_via_attributeNs   z8TestAddSubparsers.test_required_subparsers_via_attributecCs,t}|jddd}|d||dS)NrTrr8r)rornrprrrrr"test_required_subparsers_via_kwargUs z4TestAddSubparsers.test_required_subparsers_via_kwargcCs6t}|jdd}|d|d}||jdS)Nrrrrrornrpri assertIsNonerrrwrrrrrr test_required_subparsers_default[s    z2TestAddSubparsers.test_required_subparsers_defaultcCsnt}|jdd}|d|d|t}|dWdn1sP0Y||jjddS)NTr8r{rrz8error: the following arguments are required: {foo,bar} $ rornrprrZri assertRegexrHr^rrwrrexcinforrr-test_required_subparsers_no_destination_errorcs    (z?TestAddSubparsers.test_required_subparsers_no_destination_errorcCsnt}|jdd}|d|d|t}|dWdn1sP0Y||jjddS)NTrr{rrSzPerror: argument {foo,bar}: invalid choice: 'baz' \(choose from 'foo', 'bar'\)\n$rrrrr3test_wrong_argument_subparsers_no_destination_erroros    (zETestAddSubparsers.test_wrong_argument_subparsers_no_destination_errorcCs8t}|jddd}|d|d}||jdS)NrFrrrrrrrrtest_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 )rrw format_usage format_helptextwrapdedentrrrr 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 rrrrrrrPrrrtest_help_extra_prefix_charss   z.TestAddSubparsers.test_help_extra_prefix_charscCs6tddd}|jdddd||tddS) NrXrYr_z--non-breakingr?uRhelp message containing non-breaking spaces shall not wrap at non-breaking spacesr]uB 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 rorvrrrrrPrrrtest_help_non_breaking_spacessz/TestAddSubparsers.test_help_non_breaking_spacescCsftddd}|jddd||tdtddd}|jdgdd ||td dS) NrXrYr_r{z r^z usage: PROG [-h] foo main description positional arguments: foo optional arguments: -h, --help show this help message and exit z %(choices)sriz usage: PROG [-h] {} main description positional arguments: {} optional arguments: -h, --help show this help message and exit rrPrrrtest_help_blanks  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 rrPrrr test_help_alternate_prefix_charss   z2TestAddSubparsers.test_help_alternate_prefix_charscCs.||jd||jtddS)Nra 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 )rrurrrrrrrrtest_parser_command_helps   z*TestAddSubparsers.test_parser_command_helpcCsxtddd}|jdddd|jdd d |jd d d d}|d}|d}||d||tddS)NrXrYr_rrr\r]rr`r subcommandsrezadditional text)rdr[r^rr z'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 ) rorvrnrprrrrr)rrwrrrsrtrrrtest_subparser_title_help s   z+TestAddSubparsers.test_subparser_title_helpcCsN|t }|j|Wdn1s00Y|||jjdSr()rrZrwrirrrHr])rrZ expected_helprJrrr_test_subparser_help$ s .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 rrrrrrrtest_subparser1_help) sz&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 rrrrrtest_subparser2_help7 sz&TestAddSubparsers.test_subparser2_helpc Cs\|jdd}||dtdddddgf||dtdddddgfdS) NTrgz 0.5 1alias1 bFrrryz 0.5 1alias2 b)rrr}rrKrPrrrtest_alias_invocationE s   z'TestAddSubparsers.test_alias_invocationcCs"|jdd}||jddS)NTrz 0.5 1alias3 b)rrWrirrPrrrtest_error_alias_invocationP s z-TestAddSubparsers.test_error_alias_invocationcCs.|jddd}d|_||tddS)NT)rgrqa 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 )rZmaxDiffrrrrrPrrrtest_alias_helpU sz!TestAddSubparsers.test_alias_help)FNF) rrrrrWrr&rvr|r~rrrrrrrrrrrrrrrrrrrrrrrrrrrUs< 7    & rUc@s(eZdZdZddZddZddZdS) TestPositionalsGroupsz@Tests that order of group positionals matches construction ordercCsZt}|d|d}|d|dtdddd}|d }|||dS) Nr{rrrrr rmr1 2 3)rorvr|rKrirrrrwr}expectedrjrrrtest_nongroup_firsts s    z)TestPositionalsGroups.test_nongroup_firstcCsZt}|d}|d|d|dtdddd}|d }|||dS) Nxxxr{rrrr rmrrror|rvrKrirrrrrrtest_group_first} s    z&TestPositionalsGroups.test_group_firstcCspt}|d}|d|d|d|d}|dtddd d d }|d }|||dS) Nrr{rrrfrellrr rmr)r{rrrz1 2 3 4rrrrrtest_interleaved_groups s      z-TestPositionalsGroups.test_interleaved_groupsN)rrrrrrrrrrrrp s  rcseZdZdZddZfddZddZdd Zd d Zd d Z ddZ ddZ ddZ ddZ ddZddZddZddZddZZS) TestParentParsersz5Tests that parsers can be created with parent parserscOs|jtg|Ri|dSr(rVrIrrrrW 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--wrrrrrZrz--drrrr)r r&ro wxyz_parentrvr| abcd_parentw_parentz_parentab_mutex_parentadd_mutually_exclusive_groupr,r3basenamerbr main_program)rZx_groupc_groupr}rrrr& s(                 zTestParentParsers.setUpcCs2t|jgd}||dtdddddS)Nparentsz -y 1 2 --w 3rmrr r>rr)rorrrirrKrPrrrtest_single_parent s z$TestParentParsers.test_single_parentcCs,||jjt|jgd}||jdSNr)_test_mutex_abrrirorPrrrtest_single_parent_mutex sz*TestParentParsers.test_single_parent_mutexcCs0|jg}td|d}t|gd}||jdS)NF)rrr)rrorrirrrwrrrtest_single_granparent_mutex s  z.TestParentParsers.test_single_granparent_mutexcCs||gtddd||dgtddd||dgtddd||ddg||ddg||dg||ddg||ddgdS)NFrrrTrZr\)rrKrW)rrirrrr sz TestParentParsers._test_mutex_abc Cs@|j|jg}t|d}||dtddddddddS)Nrz--d 1 --w 2 3 4rmrr r)rrrr>rr)rrrorrirrKrrrrtest_multiple_parents s   z'TestParentParsers.test_multiple_parentsc Csb|j|jg}t|d}||dtdddddd||jd||jd dS) Nrz -a --w 2 3TFr rm)rrr>rrz -a --w 2 3 -bz -a -b --w 2 3)rrrorrirrKrWrrrrtest_multiple_parents_mutex s    z-TestParentParsers.test_multiple_parents_mutexcCs |jtjtj|j|jgddSr)rrD ArgumentErrorrErrrrrrtest_conflicting_parents s  z*TestParentParsers.test_conflicting_parentscCs |jtjtj|j|jgddSr)rrDrrErrrrrrtest_conflicting_parents_mutex s  z0TestParentParsers.test_conflicting_parents_mutexcCs:|j|jg}t|d}||dtdddddS)Nrrr r)rrrorrirrKrrrrtest_same_argument_name_parents s    z1TestParentParsers.test_same_argument_name_parentsc CsPt}|}|jd|jgd}|d||dtddddd dS) Nrrrmzbar -b 1 --d 2 3 4rmrr r)rrrrm) rornrprrvrrirrK)rrwrrZ abcde_parserrrrtest_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)Nr{rrrrrmzfoo -a 4TFrrzbar -b --w 2 3 4r rm)rrr>rrrmz foo -a -b 4z bar -b -a 4) rornrrpr|rvrrrirrKrW)rrwrrrZ abc_parserrZwxyzabe_parserrrrtest_subparser_parents_mutex s*       z.TestParentParsers.test_subparser_parents_mutexc CsJ|j|jg}t|d}|}|j}||td||rtdd}|jddt|gd}|tdd|gdS)NFrr{rrr&)rrrwrrrtest_set_defaults_parentsk s   z)TestSetDefaults.test_set_defaults_parentscCsLt}|d}|jdd|jdd|tdd|dgdS)Nrrrr#)rDrErnrpr'rrKri)rrwZxparserrrr)test_set_defaults_on_parent_and_subparserq s   z9TestSetDefaults.test_set_defaults_on_parent_and_subparsercCst}|jddddd|d|jddd |jd d d |jd d dd|tddddd|g|jddddd|tddddd|gdS)NWrrrr"rrXXr rrrrZZrWWYY)ror'rvrrKrirPrrr&test_set_defaults_same_as_add_argumentx 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-rrrr"r{rrr.r rrrrr/rr0r1)ror'r|rvrrKrirrrr,test_set_defaults_same_as_add_argument_group s  zrrrrr7 sr7c@seZdZddZdS)TestHelpFormattingMetaclasscCs:|dkr dSGdddt}dD]\}}||||q dS)N HelpTestCasec@s<eZdZddZddZddZddZd d Zd d Zd S)z6TestHelpFormattingMetaclass.__init__..AddTestsc Ssj||_||_|j|j|jfD]H}d|j|f}|fdd}z ||_WntyVYn0t|||qdS)Nz%s_%scSs ||dSr(rrrrr test_wrapper szUTestHelpFormattingMetaclass.__init__..AddTests.__init__..test_wrapper) func_suffixstd_name test_format test_printtest_print_filerrre)rZ test_classrBrCrrrArrrr 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)Nrxargument_group_signaturessubparsers_signatures) rDrErtrGrHrdrvr|rnrp) rrrwZ argument_sigZ group_sigsZ group_sigZ argument_sigsr}Zsubparsers_sigsrrZ subparser_sigrrrr s4        zBTestHelpFormattingMetaclass.__init__..AddTests._get_parsercSs&t||j}t|}|||dSr()rdrBrrr)rr parser_textZ expected_textrrr_test s  z.AddTests._testcSs,||}t|d|j}|||dS)Nz format_%s)rrdrBrJ)rrrwrrrrrD s zBTestHelpFormattingMetaclass.__init__..AddTests.test_formatc Ss||}t|d|j}tt|j}tt|jtz(|tt|j}Wtt|j|ntt|j|0|||dSNzprint_%s) rrdrBrbrCrerrrJ)rrrwprint_Z old_streamrIrrrrE s   zATestHelpFormattingMetaclass.__init__..AddTests.test_printcSs@||}t|d|j}t}|||}|||dSrK)rrdrBrrrJ)rrrwrLZsfilerIrrrrF s  zFTestHelpFormattingMetaclass.__init__..AddTests.test_print_fileN) rrrr rrJrDrErFrrrrr s  r))usager])r^r])r)rr<rrrrBrCrrrr s H z$TestHelpFormattingMetaclass.__init__NrJrrrrr? sr?r@c@sneZdZdZeddddZedddd d ed d d dedddedddedddgZgZdZedZ dZ dS)TestHelpBiggerOptionals;Make sure that argument help aligns when options are longerrX DESCRIPTIONEPILOGrZr[epilogrrr0.1rrrX HELPr]--yY HELPrr{FOO 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 rrrrrFrtrxrGrMr^rrrrrrN s    rNc@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)rr!rr"r#r$rrrr&J 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) rrrrr&rNrtrxrGrMr^rrrrrr\D s r\c@seZdZdZeddddZedddd d ed d d dedddedddedddgZedddedddeddddgfgZdZed Z d!Z d"S)#TestHelpBiggerOptionalGroupsrOrXrPrQrRrrrrTrrrrUr]rVrWrr{rXrrYz GROUP TITLEzGROUP DESCRIPTIONrfrzBAZ HELPrr,zZ HELPrmzN 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 rZNr[rrrrr]{ s$       r]c@s^eZdZdZedddZedddded d d ed d d eddd gZgZdZedZ dZ dS)TestHelpBiggerPositionalsz4Make sure that help aligns when arguments are longerUSAGErPrMr[rrrUr]rVrWrZekiekiekifekangzEKI HELPrrY 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[rrrrr^ s     r^c@sfeZdZdZedddZedddded d d dgZed d deddddgfgZdZedZ dZ dS)TestHelpReformatting>Make sure that text after short names starts on the first linerXze oddly formatted description that is so long that it should go onto multiple lines when wrappedr_rr.zoddly formatted -x helprbr^rrz normal y helprdz' oddly formatted group descriptionrfrrz` oddly formatted -a help again, so long that it should be wrapped over multiple linesr]2 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[rrrrrb s"    rbc@sbeZdZdZedddZedddded d d dgZed ed dddgfgZdZedZ dZ dS)TestHelpWrappingShortNamesrcrXzZD 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_rr.zxXHH HXXHH HXXHH HXXHH HXXHH HXXHH HXXHH HXXHH HXXHH HXXHH HXXHH HXXHH HXXHH HXXHH HXXHH HXXHH HXXHH HXXHH HXXHH HXXHH HXrdrrdYH 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 HHAr]rea 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[rrrrrf s    rfc@s|eZdZdZedddZeddddd ed d d d edddd gZededddd edddd gfgZdZedZ dZ dS)TestHelpWrappingLongNameszrmrr(rrrrr#)r^rrrrzWhether to foo)r^rrzWhether to barT)r^r rrz--foobarz--barfoorz--bazzzBazz!)rr r^r}rrrrrrrma/ usage: PROG [-h] [-w W [W ...]] [-x [X ...]] [--foo | --no-foo] [--bar | --no-bar] [-f | --foobar | --no-foobar | --barfoo | --no-barfoo] [--bazz | --no-bazz] [-y [Y]] [-z Z Z Z] a b b [c] [d ...] e [e ...] a 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 --bazz, --no-bazz Bazz! group: -y [Y] y -z Z Z Z z d d e e rN)rrrrrFrtrDrFrrxrGrMr^rrrrrrk[s4          rkc@speZdZdZedddZgZededdded d dgfed ed d ded d dgfgZdZedZ dZ dS)TestHelpOnlyUserGroupsrlrXFrZrZxxxxrrrrZyyyyrrrz. usage: PROG [-x X] [-y Y] a b zn xxxx: -x X x a a yyyy: b b -y Y y rNr[rrrrrms       rmc@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 optionalrXrrTr\)r8r^z+ usage: PROG [-h] --foo FOO rrNr[rrrrrOs  rc@sNeZdZdZeddddZedddd ed d d d gZgZdZedZ dZ dS)TestHelpAlternatePrefixCharsz:Test that options display with different prefix charactersrXz^;F)rZrrz^^foorr\r]z;bz;;barr`rz- usage: PROG [^^foo] [;b BAR] zq optional arguments: ^^foo foo help ;b BAR, ;;bar BAR bar help rNr[rrrrrcs  rc@sHeZdZdZedddZedddedd dgZgZd Zed Z d Z d S)TestHelpNoHelpOptionalz=Test that the --help argument can be suppressed help messagesrXFrnrr\rrrz- usage: PROG [--foo FOO] spam z positional arguments: spam spam help optional arguments: --foo FOO foo help rNr[rrrrrxs   rc@s>eZdZdZeddZededgZgZdZedZ dZ d S) TestHelpNonez1Test that no errors occur if no help is specifiedrXrrrrz positional arguments: spam optional arguments: -h, --help show this help message and exit --foo FOO rNr[rrrrrs  rc @sjeZdZdZeddZeddddded d d d ded ddddedddddgZgZdZedZ dZ dS)TestHelpTupleMetavarz"Test specifying metavar as a tuplerXrrr>r,)ZW1ZW2)r^rrbrrr()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[rrrrrs  rc@sdeZdZdZedejddZedddedd dgZed d d ed ddgfgZ dZ e dZ dZ dS)TestHelpRawTextTest the RawTextHelpFormatterrX7Keep the formatting exactly as it is written here rZformatter_classr[rz- foo help should also appear as given hererrrrd? This text should be indented exactly like it is here rfrr`> 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) rrrrrFrDRawTextHelpFormatterrtrxrGrMr^rrrrrrs    rc@sdeZdZdZedejddZedddedd dgZed d d ed ddgfgZ dZ e dZ dZ dS)TestHelpRawDescriptionrrXrrrz4 foo help should not retain this odd formattingrrrrdrrfrr`ra 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) rrrrrFrDRawDescriptionHelpFormatterrtrxrGrMr^rrrrrrs    rc @seZdZdZedejddZedddedd d d ed ejd ddeddddedddedddddgZ edddede dddgfgZ d Z e d!Z d"Zd#S)$TestHelpArgumentDefaultsz&Test the ArgumentDefaultsHelpFormatterrXr[rrz)foo help - oh and by the way, %(default)srrrr`r]z--tazzWhether to taz itT)rr^r z--quuxz Set the quuxr)r^r rrrrZwoodenz badger helprrdrfrr)rTr r^z 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)rrrrrFrDArgumentDefaultsHelpFormatterrtrFrxr%rGrMr^rrrrrr#s*     rc@sBeZdZdZedddZeddddd gZgZd Zed Z d Z d S)TestHelpVersionActionz,Test the default help for the version actionrXr[r_-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[rrrrrRs rc@sTeZdZdZeddZeddddejded d d ed d d gZgZ dZ e dZ dS)TestHelpVersionActionSuppresszCTest that the --version argument can be suppressed in help messagesrXrrrrr)rrr^rr\rrrrrN) rrrrrFrtrDrrxrGrMr^rrrrrfs    rc@sLeZdZdZedddZeddddd gZd d d DZd ZedZ dZ dS)TestHelpSubparsersOrdering5Test ordering of subcommands in help matches the coderXdisplay some subcommandsr_rrrrTrcCsg|]}t|dqS)rrF)rNr<rrrrPsz%TestHelpSubparsersOrdering.)rrrrrm6 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 rZN) rrrrrFrtrxrHrMr^rrrrrrs rc@sPeZdZdZedddZeddddd gZd Zd d eDZd Z e dZ dZ dS)"TestHelpSubparsersWithHelpOrderingrrXrr_rrrrTr))rza subcommand help)rzb subcommand help)rzc subcommand help)rzd subcommand help)rmze subcommand helpcCsg|]\}}t||dqS))r<r^r)rNr<r^rrrrPsz-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 rZN) rrrrrFrtrxZsubcommand_datarHrMr^rrrrrrsrc@s\eZdZddZeddejdZededededed e d d gZ gZ d Z e d Z dZdS)TestHelpMetavarTypeFormattercCs|Sr(rr7rrr custom_typesz(TestHelpMetavarTypeFormatter.custom_typerXr[)rZr[rrrrZr\z SOME FLOAT)rTrbzF 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)rrrrrFrDMetavarTypeHelpFormatterrtr%rrxrGrMr^rrrrrrs    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()rDrErrrvrrGrHrwrrrassertTypeErrors  z/TestInvalidArgumentConstructors.assertTypeErrorcOs(t}|jt|jg|Ri|dSr()rDrErr&rvrrrrassertValueErrors  z0TestInvalidArgumentConstructors.assertValueErrorcCs<|jddd|jddd|jddd|jdiddS) Nr)rrr{)callbackr)Z callback_args)Zcallback_kwargsrrrrrtest_invalid_keyword_argumentssz>TestInvalidArgumentConstructors.test_invalid_keyword_argumentscCs"|dD]}|j|dq dS)N)rOr;rrrrrrrtest_missing_destinationsz8TestInvalidArgumentConstructors.test_missing_destinationcCs|d|ddS)Nr{z---rrrrrtest_invalid_option_stringss z;TestInvalidArgumentConstructors.test_invalid_option_stringscCs$|jddd|jdttfddS)Nrr%r)rr%rrrrrtest_invalid_typesz1TestInvalidArgumentConstructors.test_invalid_typecCs|jddd|jddd|jdddt}|t}|jdddWdn1s`0Y|dt|jdS) Nrr{rrrr;rOz store-truezunknown action) rrDrErr&rvrGrrHrIrrrtest_invalid_actions ,z3TestInvalidArgumentConstructors.test_invalid_actioncCsbt}|jdd|t}|jdddWdn1sB0Y|dt|jdS)Nr{rrrz+dest supplied twice for positional argument)rDrErvrr&rGrrHrIrrrtest_multiple_dests  ,z2TestInvalidArgumentConstructors.test_multiple_destcCsDdD]:}ttdtddtddfD]}|jd d|i|q$qdS) N)rrr?r[rerr,rabr/rr)r)ror%r)rrattrsrrrtest_no_argument_actionss z8TestInvalidArgumentConstructors.test_no_argument_actionscCs.dD]$}|jdd|d|jdd|dqdS)N)rr?rerr{rCr(rrrrrrr!test_no_argument_no_const_actions szATestInvalidArgumentConstructors.test_no_argument_no_const_actionscCs\dD]R}|jdd|d|jdd|ddD](}|jdd||d|jdd||dq,qdS) Nrrrrr)rr(r,r{)rrrr)rrrrrr#test_more_than_one_argument_actions*szCTestInvalidArgumentConstructors.test_more_than_one_argument_actionscCsdD]}|jdd|dqdS)N)rr[rr,rrrrrrtest_required_const_actions8sz;TestInvalidArgumentConstructors.test_required_const_actionscCs4|jddd|jdddd|jddtjddS)NrparsersrrX)rrZ)rru)rrDrErrrr"test_parsers_action_missing_params>s zBTestInvalidArgumentConstructors.test_parsers_action_missing_paramscCs|jddddS)Nr{Trrrrrrtest_required_positionalDsz8TestInvalidArgumentConstructors.test_required_positionalcs`GdddtGfdddt}t}|j|jd|d|j|jd|ddS)Nc@s eZdZdS)zITestInvalidArgumentConstructors.test_user_defined_action..SuccessNrrrrrSuccessIsrcs"eZdZdfdd ZddZdS)zHTestInvalidArgumentConstructors.test_user_defined_action..ActionFcs"|dkr|ur|urdS)Nrr)roption_stringsrrr r8rrrr NszQTestInvalidArgumentConstructors.test_user_defined_action..Action.__init__c_sdSr(rrIrrrrGYszQTestInvalidArgumentConstructors.test_user_defined_action..Action.__call__N)F)rrrr rGrrrrrLLs rLr)rr rr)r[rrDrErrv)rrLrwrrrtest_user_defined_actionGs  z8TestInvalidArgumentConstructors.test_user_defined_actionN)rrrrrrrrrrrrrrrrrrrrrrrrs   rc@seZdZddZddZdS)TestActionsReturnedcCsXt}|d}||jd|dd}||jd|dd}||jddS) Nrr{rZrrrrr)rDrErvrrrrwrrrrrhs   zTestActionsReturned.test_destc Cst}|jddddtddgddd d }||jd||jd||jd||jt||j ddg||j d||j d||j d dS) Nrrrr!rr#r ZBARr)rrr rTr0r^rbr) rDrErvr%rrrr rTr0r^rbrrrrr test_miscqs  zTestActionsReturned.test_miscN)rrrrrrrrrrfs rc@s$eZdZddZddZddZdS)TestConflictHandlingcCs|jttjdddS)Nr{)conflict_handler)rr&rDrErrrr test_bad_types z"TestConflictHandling.test_bad_typecCsDt}|d|tj|jd|d|tj|jddS)Nrr)rDrErvrrrPrrrtest_conflict_errors  z(TestConflictHandling.test_conflict_errorcCsztj}|ddd}|jddd|jddd||td|jd d d |jd d d ||td dS)NrXresolve)rZrrzOLD XrzNEW Xz usage: PROG [-h] [-x X] optional arguments: -h, --help show this help message and exit -x X NEW X rZOLD_SPAMrqZNEW_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 )rDrErvrrrr)rrrwrrrtest_resolve_errors z'TestConflictHandling.test_resolve_errorN)rrrrrrrrrrrs rc@sXeZdZdZddZddZddZdd Zd d Zd d Z ddZ ddZ ddZ dS)TestOptionalsHelpVersionActionsz!Test the help and version actionscCsP|t}||Wdn1s.0Y|||jjdSr()rrZrirrrrHr])rrwrrJrrrassertPrintHelpExits ,z3TestOptionalsHelpVersionActions.assertPrintHelpExitcGs|t|j|dSr()rrZrirrwrGrrrrWsz9TestOptionalsHelpVersionActions.assertArgumentParserErrorcCsDt}|jddddd||d||d|tt|ddS) Nrrrrrrrformat_versionrorvrrrrdrPrrr test_versions   z,TestOptionalsHelpVersionActions.test_versioncCsftdd}|jddddd|t}|dgWdn1sH0Y|d|jjdS) NZPPPrrrrz %(prog)s 3.5rzPPP 3.5 rorvrrZrirrHr]rIrrrtest_version_formats   *z3TestOptionalsHelpVersionActions.test_version_formatcCsHtdd}|jddddd||d||d |tt|d dS) NFrrrrrrrrr)rorvrWrrrdrPrrrtest_version_no_helps    z4TestOptionalsHelpVersionActions.test_version_no_helpcCsdtdd}|jdddd|t}|dgWdn1sF0Y|d|jjdS)Nrrrrz %(prog)s 3.7rzXXX 3.7 rrIrrrtest_version_actions   *z3TestOptionalsHelpVersionActions.test_version_actioncCs>tdd}||d||d||d||ddS)NFrrrrr)rorWrPrrr test_no_helps     z,TestOptionalsHelpVersionActions.test_no_helpcCsZt}|jddd|jddd||d||d||d|tt|ddS) Nrr^rrrrrr)rorvrrWrrrdrPrrrtest_alternate_help_versions   z;TestOptionalsHelpVersionActions.test_alternate_help_versioncCst}|jdddd|jddd|dgd }|d d g}|D]J}|D]}d ||f}qN|||d |||d|tt|dqFdS)Nrrrrrrrr)rrr{z-x barzbaz -xz --bad-optionz foo bar bazz %s %%s %srrrr)rrwZvalid_prefixesZvalid_suffixesprefixsuffixrrrr!test_help_version_extra_argumentss  zATestOptionalsHelpVersionActions.test_help_version_extra_argumentsN) rrrrrrWrrrrrrrrrrrrs rc@sPeZdZdZddZddZddZdd Zd d Zd d Z ddZ ddZ dS) TestStringsz3Test str() and repr() on Optionals and PositionalscCs"ttfD]}||||qdSr()rrr)robjZ result_stringfuncrrrassertStringEquals zTestStrings.assertStringEqualc Cs8tjgdddddgdddd d }d }|||dS) N)rrrZrr%r,rrr#rFZHELPZMETAVAR rrrTrr r0r8r^rbzAction(option_strings=['--foo', '-a', '-b'], dest='b', nargs='+', const=None, default=42, type='int', choices=[1, 2, 3], required=False, help='HELP', metavar='METAVAR'))rDrLr)roptionr8rrr test_optionals zTestStrings.test_optionalc Cs8tjgdtddgddddd }d t}|||dS) Nrrr)rg?rTzH HH HzMV MV MVrzAction(option_strings=[], dest='x', nargs='?', const=None, default=2.5, type=%r, choices=[0.5, 1.5, 2.5], required=True, help='H HH H', metavar='MV MV MV'))rDrLrr)rargumentr8rrr test_arguments  zTestStrings.test_argumentcCs"tjddd}d}|||dS)NrrrzNamespace(foo=42, bar='spam')rDr8rrr;r8rrrtest_namespace&szTestStrings.test_namespacecCs(tjfiddi}d}|||dS)N"quotezNamespace(**{'"': 'quote'})rrrrr'test_namespace_starkwargs_notidentifier+sz3TestStrings.test_namespace_starkwargs_notidentifiercCs,tjfddiddi}d}|||dS)Nrrrrz Namespace(a=1, **{'"': 'quote'})rrrrr2test_namespace_kwargs_and_starkwargs_notidentifier0sz>TestStrings.test_namespace_kwargs_and_starkwargs_notidentifiercCs(tjfiddi}d}|||dS)NZvalidTzNamespace(valid=True)rrrrr$test_namespace_starkwargs_identifier5sz0TestStrings.test_namespace_starkwargs_identifiercCs&tjdd}dtj}|||dS)NrXrzvArgumentParser(prog='PROG', usage=None, description=None, formatter_class=%r, conflict_handler='error', add_help=True))rDrE HelpFormatterr)rrwr8rrr test_parser:s  zTestStrings.test_parserN) rrrrrrrrrrrrrrrrrsrc@s$eZdZddZddZddZdS) TestNamespacecCsFt}|tt|dtjddd}||jd||jddS)Nrrrr)rDr8rrrdrrrr:rrrtest_constructorHs zTestNamespace.test_constructorcCstjddd}tjddd}tjdd}tjdd}||||||||||||||||||k|||k|||k|||kdS)Nrr#r)rr)rr_)rDr8rZassertNotEqual assertTrue)rZns1Zns2Zns3Zns4rrr test_equalityPs       zTestNamespace.test_equalitycCs6tjddd}||dt||dtdS)Nrr#r)rDr8ZassertIsrYNotImplemented__ne__r:rrr$test_equality_returns_notimplemented`sz2TestNamespace.test_equality_returns_notimplementedN)rrrrrrrrrrrFsrc@s$eZdZddZddZddZdS) TestEncodingcCsRtj|\}}|d7}t|ddd}|Wdn1sD0YdS)Nz.pyrrrr)r,r3splitextr?r)rr3rrrrr_test_module_encodingmsz"TestEncoding._test_module_encodingcCs|tjdSr()rrD__file__rrrrtest_argparse_module_encodingssz*TestEncoding.test_argparse_module_encodingcCs|tdSr()rrrrrr"test_test_argparse_module_encodingvsz/TestEncoding.test_test_argparse_module_encodingN)rrrrrrrrrrrksrc@seZdZddZdS)TestArgumentErrorcCs$d}td|}|t||dS)Nz my error here)rDrrr)rrrqrrrtest_argument_errors z%TestArgumentError.test_argument_errorN)rrrrrrrrr}src@seZdZddZdS)TestArgumentTypeErrorcCsldd}tddd}|jd|d|t}|dgWdn1sN0Y|d |jjdS) NcSstddS)Nspam!)rDArgumentTypeErrorr7rrrrsz.spamrXFrnrrrz-usage: PROG x PROG: error: argument x: spam! )rorvrrZrirrHr^)rrrwrJrrrtest_argument_type_errors  *z.TestArgumentTypeError.test_argument_type_errorN)rrrrrrrrrsrc@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)NrXrrreq_posr-req_optTr7Zneed_oner,)rTrreq_optZ myXargumentz -req_opt=1) rorvrr%rrZrirHrr9rrwrJrrrr%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)NrXrrrrz --req_optTr7z --opt_optr)rTrr r Zopt_optz --req_opt=1) rorvrr%boolrrZrirHrr9r rrr%test_optional_optional_not_in_messages$   (     *   z=TestMessageContentError.test_optional_optional_not_in_messagecCstddd}|d|jdddd|t}|gWdn1sP0Yt|j}||d||ddS) NrXrrrZoptional_positionalrr*r) rorvrrZrirrHrr9r rrr'test_optional_positional_not_in_messages   (  z?TestMessageContentError.test_optional_positional_not_in_messageN)rrrr rrrrrrrsrc@seZdZddZdS)TestTypeFunctionCallOnlyOncecsHfdd}t}|jd|dd|d}tdd|dS) Ncs|ddS)Nr foo_convertedr)Zstring_to_convertrrrrs zLTestTypeFunctionCallOnlyOnce.test_type_function_call_only_once..spamrrr z --foo spam!rr)rDrErvrirrrKrrrwrGrrr!test_type_function_call_only_onces  z>TestTypeFunctionCallOnlyOnce.test_type_function_call_only_onceN)rrrrrrrrrsrc@s,eZdZddZddZddZddZd S) TestTypeFunctionCalledOnDefaultcsDfdd}t}|jd|dd|g}tdd|dS)Ncs|ddS)NrrrZint_to_convertrrrrs z]TestTypeFunctionCalledOnDefault.test_type_function_call_with_non_string_default..spamrrr rrDrErvrirrKrrrr/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)NrrrrrrrszYTestTypeFunctionCalledOnDefault.test_type_function_call_with_string_default..spamr0r rrrrrrr+test_type_function_call_with_string_defaults  zKTestTypeFunctionCalledOnDefault.test_type_function_call_with_string_defaultcCs@dd}t}|jd|dd|g}|tdd|dS)NcSs|dS)Nr(r)Zstr_to_convertrrrrRszYTestTypeFunctionCalledOnDefault.test_no_double_type_conversion_of_default..extend--testr(r z**)r'r)rrRrwrGrrr)test_no_double_type_conversion_of_defaults  zITestTypeFunctionCalledOnDefault.test_no_double_type_conversion_of_defaultcCs8t}|jddtgdd|g}||jgdS)Nrr'rO)rrTr r)rDrErvrrirr'rrrrtest_issue_15906 s   z0TestTypeFunctionCalledOnDefault.test_issue_15906N)rrrrrrrrrrrrs   rc@s<eZdZddZddZddZddZd d Zd d Zd S)TestParseKnownArgscCst}|ddS)NrrDrErirPrrrtest_arguments_tuplesz'TestParseKnownArgs.test_arguments_tuplecCst}|gdSr(rrPrrrtest_arguments_listsz&TestParseKnownArgs.test_arguments_listcCs t}|d|ddS)NrrrDrErvrirPrrrtest_arguments_tuple_positional"s z2TestParseKnownArgs.test_arguments_tuple_positionalcCs"t}|d|dgdS)Nrr"rPrrrtest_arguments_list_positional's z1TestParseKnownArgs.test_arguments_list_positionalcCsJt}|d|d\}}|tdd||ddg|dS)Nrz--foo F --bar --bazFrrr)rDrErvr}rrrK)rrwrGextrasrrrtest_optionals,s  z!TestParseKnownArgs.test_optionalscCsrt}|jdddtd|jddd|dgd }||\}}|td d d d ||gd|dS)Nrrr)rrrTrr?rr)rr5rrrmrrTr)vrr)r5rr)rDrErvr%r}rrK)rrwrrGr&rrr test_mixed3s zTestParseKnownArgs.test_mixedN) rrrr r!r#r$r'r)rrrrrs rc@s,eZdZddZddZddZddZd S) TestIntermixedArgscCstjdd}|jddd|jdddd }|d |jd d td d}||}|tdd dgdd|||\}}|tdd dgd||gd|d}| |\}}|tdd ddgd||gd|| |j ||j ddS)NrXrrr{rrrTrcmdrestr()rrTzcmd --foo x 1 --bar y 2 3rrr)rr+r{r,rr rmz!cmd --foo x 1 --error 2 --bar y 3r)z--errorr rm) rDrErvr%rparse_intermixed_argsrrKr}parse_known_intermixed_argsrrMr8)rrwrrrGr&rrr test_basicCs"    zTestIntermixedArgs.test_basiccCs~tdd}|d|d|jdddd}|t}||Wdn1s^0Y|t|jd dS) NrXrrrrrrrz\.\.\.) rorvrrrr.rrrH)rrwrrJrrrtest_remainder^s    (z!TestIntermixedArgs.test_remaindercCstdd}|jdd}|jdddd|jd d d |jd d ddd|d}|tddgddd||t|jd||j ddS)NrXrTrrrr r]rr rrr(rrrz 1 --foo 2rr )rr{rr) rorrvr.rrrKrrZr8)rrwr}rGrrrtest_exclusiveks  z!TestIntermixedArgs.test_exclusivecCshtdd}|jdd}|jdddd|jd d d |jd d ddd|t|jg||jddS)NrXrTrrrr r]rr rrr(rrr)rorrvrrr.rr8rrrrtest_exclusive_incompatiblews  z.TestIntermixedArgs.test_exclusive_incompatibleN)rrrr0r1r2r3rrrrr*Bs  r*c@seZdZddZdS)!TestIntermixedMessageContentErrorcCstddd}|jdtd|jdtdd|t}|gWdn1sT0Yt|j}||d||d |t}| gWdn1s0Yt|j}| |d||d dS) NrXrrrrr Tr7r ) rorvrr%rrZrirHrr.ZassertNotRegexr rrrr s  (    (  zGTestIntermixedMessageContentError.test_missing_argument_name_in_messageN)rrrr rrrrr4sr4c@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)Nrrrb)rDrErv)rrrbrwrrrdo_test_no_exceptionsz+TestAddArgumentMetavar.do_test_no_exceptioncCs\t}|t }|jd||dWdn1s80Y||jjd|jdS)Nrr6r) rDrErr&rvrrHrGEXPECTED_MESSAGE)rrrbrwrJrrrdo_test_exceptions .z(TestAddArgumentMetavar.do_test_exceptioncCs|jddddS)Nrr6r7rrrrtest_nargs_None_metavar_stringsz5TestAddArgumentMetavar.test_nargs_None_metavar_stringcCs|jdtddS)Nr6r9tuplerrrrtest_nargs_None_metavar_length0sz6TestAddArgumentMetavar.test_nargs_None_metavar_length0cCs|jddddS)Nrr6r:rrrrtest_nargs_None_metavar_length1sz6TestAddArgumentMetavar.test_nargs_None_metavar_length1cCs|jddddS)Nrr r6r9rrrrtest_nargs_None_metavar_length2sz6TestAddArgumentMetavar.test_nargs_None_metavar_length2cCs|jddddS)Nr-r6rBrrrrtest_nargs_None_metavar_length3sz6TestAddArgumentMetavar.test_nargs_None_metavar_length3cCs|jddddS)Nrrr6r:rrrr"test_nargs_optional_metavar_stringsz9TestAddArgumentMetavar.test_nargs_optional_metavar_stringcCs|jdtddS)Nrr6r<rrrr#test_nargs_optional_metavar_length0sz:TestAddArgumentMetavar.test_nargs_optional_metavar_length0cCs|jddddS)Nrr?r6r:rrrr#test_nargs_optional_metavar_length1sz:TestAddArgumentMetavar.test_nargs_optional_metavar_length1cCs|jddddS)NrrAr6rBrrrr#test_nargs_optional_metavar_length2sz:TestAddArgumentMetavar.test_nargs_optional_metavar_length2cCs|jddddS)Nrr-r6rBrrrr#test_nargs_optional_metavar_length3sz:TestAddArgumentMetavar.test_nargs_optional_metavar_length3cCs|jddddS)Nr(rr6r:rrrr$test_nargs_zeroormore_metavar_stringsz;TestAddArgumentMetavar.test_nargs_zeroormore_metavar_stringcCs|jdtddS)Nr(r6r<rrrr%test_nargs_zeroormore_metavar_length0szr@rCrDrErFrGrHrIrJrKrLrMrNrOrPrQrRrSrTrUrVrWrXrZr[r\r]r^r_r`rarbrcrdrerfrgrhrirjrkrlrmrrrrr5s`r5c@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) rDrErr&rvrrHrGEXPECTED_RANGE_MESSAGErrrwrJrrrdo_test_range_exceptionHs ,z(TestInvalidNargs.do_test_range_exceptioncCsZt}|t}|jd|dWdn1s60Y||jjd|jdSro) rDrErr&rvrrHrGEXPECTED_INVALID_MESSAGErqrrrdo_test_invalid_exceptionNs ,z*TestInvalidNargs.do_test_invalid_exceptioncCs|jdd|jdddS)NrrZabcd)rtrrrrtest_nargs_alphabeticVs z&TestInvalidNargs.test_nargs_alphabeticcCs|jdddS)Nrr)rrrrrrtest_nargs_zeroZsz TestInvalidNargs.test_nargs_zeroN) rrrrsrprrrtrurvrrrrrnAs rnc@seZdZddZddZdS)TestImportStarcCs tjD]}|tt|qdSr()rD__all__rrrrrrr'cs zTestImportStar.testcCs0ddttD}|t|ttjdS)NcSs0g|](\}}|ds|dkst|s|qS)rngettext) startswithinspectZismodule)rNr<r/rrrrPhs zJTestImportStar.test_all_exports_everything_but_modules..)rVrDrSrrRrx)rrSrrr'test_all_exports_everything_but_modulesgs z6TestImportStar.test_all_exports_everything_but_modulesN)rrrr'r|rrrrrwasrwcs$eZdZfddZddZZS)TestWrappingMetavarcs,ttd|_d}|jjd|ddS)NZ9this_is_spammy_prog_with_a_long_name_sorry_about_the_namezz--proxyrq)r r&rorwrv)rrbrrrr&ss  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 )rwrrrr)r help_textrrrtest_help_with_metavar}s z*TestWrappingMetavar.test_help_with_metavar)rrrr&rrrrrrr}qs r}c@s$eZdZddZddZddZdS)TestExitOnErrorcCs$tjdd|_|jjddtddS)NF) exit_on_errorz --integersN)rbrT)rDrErwrvr%rrrrr&szTestExitOnError.setUpcCs(|jd}||tjdddS)Nz --integers 4r3)Zintegers)rwrirrrDr8r:rrr!test_exit_on_error_with_good_argssz1TestExitOnError.test_exit_on_error_with_good_argscCs@|tj |jdWdn1s20YdS)Nz --integers a)rrDrrwrirrrrr test_exit_on_error_with_bad_argssz0TestExitOnError.test_exit_on_error_with_bad_argsN)rrrr&rrrrrrrsrcCsit_tt_dSr()rrrrrrrrtearDownModulesr__main__)r{r rr,r7r5rbrr)ZunittestrDr'rr TextIOWrapperrrrr'rFrKr[rZrnrErorTrrrrsrrrrrrrrrrrrrrrr rrrrr&r+r-r6r:r<r>r@rArLrMrVrXrcrdrfrhrnrprtrurxryr{r|r}r~rrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrfrgrr rZ eq_stderrrrZ eq_bstderrrrr r rZskipIfrrrrrrrr%r)r-r4r6r;rMrQrUrrrrrrrrr rrrrrrrrr r!r"r#r$r%r4r7r?r@rNr\r]r^rbrfrirkrmrorrrvr{r|r}r~rrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrr*r4r5rnrwr}rrrmainrrrrs    &q                                            "" A ('4-0#+!$-*(), ^R$7/4(69$&"$. 10/+!~-LI% =1*?)