B t `Iã @s6dddddddgZddlmZdd lZdd lZdd lZdd lZdd lZdd lZd Z ej Z dd l m Z m Z mZe r¢e d d dddg¡ejZejZejZejZejZdd lZejZejZejZyddlmZWnek rèdd„ZYnXdd„Zdd„Zd dd„Zd!dd„Zd"dd„Z dd„Z!Gdd„dej"ƒZ"d S)#ÚTestCaseÚ TestResultÚ TestSuiteÚTextTestRunnerÚmainÚnottestÚcategoryé)ÚgetfileNT)Ú iteritemsÚ itervaluesÚPY2ÚskipÚskipIfÚ skipUnlessÚexpectedFailureÚSkipTest)rcCs d|_|S)z6Decorator to mark a function or method as *not* a testF)Z__test__)Úfunc©rú6/tmp/pip-unpacked-wheel-cqckmaqz/pyutilib/th/pyunit.pyr4scCsnt|ƒ ¡ ¡}| d¡s$| d¡r>t|dƒ}|dd…}nd}|rf|ddkrfd|}|dd…}||fS)Nz=0z=1éÿÿÿÿéþÿÿÿérz!~-)ÚstrÚlowerÚstripÚendswithÚint)Ú_catÚ_valrrrÚ_category_to_tuple9s  rcs<i‰x&|D]}t|ƒ\}}|s q |ˆ|<q W‡fdd„}|S)NcsXt|dƒrät|jkrätˆƒdˆkr&dndkr\x.t|jƒD] \}}t|||ƒˆ ||¡q8Wi}x2tˆƒD]&\}}||jkr„|||<t|||ƒqjW|râxºt|j ƒD]:}t|dƒr¤x*t|ƒD]\}}||j kr¼t|||ƒq¼Wq¤Wnptˆƒdˆkrödndkr$x$ttjƒD]\}}t|||ƒq Wx"tˆƒD]\}}t|||ƒq.Wt|dˆƒ|S)NÚ__mro__ÚfragilerrÚ _categories) Úhasattrrr Úlenr Úunspecified_categoriesÚsetattrÚ setdefaultr Ú__dict__r")rÚcÚvZdefault_updatesZfcn)r"rrÚ_idTs.     zcategory.._id)r)ÚargsÚkwargsÚcatrrr+r)r"rrEs    Fc Cs(|r&|dkr| d¡n| t|ƒ¡|dkrHtj tj t|jƒ¡¡}t ¡} t  |¡t j  d|¡z¢ddl } | j  |¡| j j|ddd| j  ¡| d¡rº|j||||dnN| d¡rØ|j||||dn0| d ¡rö|j||||dn|j||||d Wdt  | ¡t j |¡XdS) NTzA forced test skiprz.py)Ú clear_cachez.json)Ú toleranceÚexactz.ymlz.xml)Úfilterr0)ÚskipTestrÚosÚpathÚdirnameÚabspathr Ú __class__ÚgetcwdÚchdirÚsysÚinsertÚ pyutilib.miscÚmiscZsetup_redirectZ import_fileZreset_redirectrÚassertMatchesJsonBaselineÚassertMatchesYamlBaselineÚassertMatchesXmlBaselineÚassertFileEqualsBaselineÚremove) ÚselfÚcwdÚmoduleÚoutfileÚbaseliner2r0r1Ú forceskipÚoldpwdÚpyutilibrrrÚ_run_import_baseline_testss6         rLc  CsÒ| r&| dkr| d¡n| t| ƒ¡|dkrHtj tj t|jƒ¡¡}t ¡} t  |¡t |ƒt t fkrpd} n d} |  ¡}z:t|dƒ} tj|| | tjd} |  ¡|  ¡|dk r0t|dƒ} |  d¡|  d¡|  d|¡|  d |¡|  d |¡|  |d ¡|  ¡t |tjtjBtjB¡| d ¡rP|j||||d nR| d¡rp|j||||d n2| d¡r|j||||d n|j||||d|dk r¶t |¡Wd|  ¡t  | ¡XdS)NTzA forced test skipFÚw)ÚshellÚstdoutÚstderrz #!/bin/sh z# Baseline test command z# cwd %s z# outfile %s z# baseline %s Ú z.json)r0r1z.ymlz.xml)r2r0) r3rr4r5r6r7r r8r9r:ÚtypeÚlistÚtuplerÚopenÚ subprocessÚPopenÚSTDOUTÚwaitÚcloseÚwriteÚchmodÚstatÚS_IREADÚS_IWRITEÚS_IEXECrr?r@rArBrC)rDrEÚcmdrGrHr2Úcmdfiler0r1rIrJZuseShellZOUTPUTÚprocrrrÚ_run_cmd_baseline_testŸsV            rdcCsB||ƒ}|j|d|||dx|dd…D]}t |¡q,WdS)Nr)r2r0r)rBr4rC)rDÚfnÚnamerHr2r0ÚfilesÚfilerrrÚ_run_fn_baseline_testÝs ricCs>|dkr|||ƒ}n ||||ƒ}|dk r:|dkr:| |¡dS)NÚ)Úfail)rDrerfÚsuiteZ explanationrrrÚ _run_fn_testës   rmc @seZdZiZdZdZdZdZdZdZ dddddœZ e rFe j jZe j jZd'dd„Zedd „ƒZed d „ƒZd(d d„Zedd„ƒZdd„Zd)dd„Zd*dd„Zd+dd„Zd,dd„Zd-dd„Zd.dd „Zed/d!d"„ƒZ e!e ƒZ ed0d#d$„ƒZ"e!e"ƒZ"ed1d%d&„ƒZ#e!e#ƒZ#d S)2rrrT)ÚsmokeÚnightlyÚ expensiver!ÚrunTestcCstj ||¡dS)N)ÚunittestrÚ__init__)rDÚ methodNamerrrrs szTestCase.__init__cCstdd„| ¡DƒƒS)Ncss&|]}tdd„| d¡DƒƒVqdS)css|]}t|ƒVqdS)N)r)Ú.0rrrrú sz6TestCase.parse_categories...ú,N)rTÚsplit)ruZ_setrrrrvsz,TestCase.parse_categories..)rTrx)Zcategory_stringrrrÚparse_categoriesszTestCase.parse_categoriescCsd dd„|Dƒ¡S)Nú css"|]}d dd„|Dƒ¡VqdS)rwcss|]}d|VqdS)z%s=%sNr)ruÚyrrrrvsz:TestCase.categories_to_string...N)Újoin)ruÚxrrrrvsz0TestCase.categories_to_string..)r|)Ú categoriesrrrÚcategories_to_stringszTestCase.categories_to_stringNcCs|j||fS)N)Ú_options)rDrfrlrrrÚ get_optionsszTestCase.get_optionscCs t|ddƒ}|dk r|||<dS)zªA method for recording data associated with a test. This method is only meaningful when running this TestCase with 'nose', using the TestData plugin. ZtestdataN)Úgetattr)rDrfÚvalueÚtmprrrÚrecordTestDatas zTestCase.recordTestDatacCsdS)Nr)rDrrrÚshortDescription&szTestCase.shortDescriptionçFcCsvy.ddl}|jj||||d|r,t |¡WnBtk rpt ¡d}| d|d|dt |ƒ¡YnXdS)Nr)r0r1rz6XML testfile does not match the baseline: testfile=z baseline=rQ) r=r>Zcompare_xml_filesr4rCÚ Exceptionr;Úexc_inforkr)rDÚtestfilerHÚdeleter0r1rKÚerrrrrrA*s z!TestCase.assertMatchesXmlBaselinecCsvy.ddl}|jj||||d|r,t |¡WnBtk rpt ¡d}| d|d|dt |ƒ¡YnXdS)Nr)r0r1rz7YAML testfile does not match the baseline: testfile=z baseline=rQ) r=r>Zcompare_yaml_filesr4rCrˆr;r‰rkr)rDrŠrHr‹r0r1rKrŒrrrr@<s z"TestCase.assertMatchesYamlBaselinecCsvy.ddl}|jj||||d|r,t |¡WnBtk rpt ¡d}| d|d|dt |ƒ¡YnXdS)Nr)r0r1rz7JSON testfile does not match the baseline: testfile=z baseline=rQ) r=r>Zcompare_json_filesr4rCrˆr;r‰rkr)rDrŠrHr‹r0r1rKrŒrrrr?Ns z"TestCase.assertMatchesJsonBaselinec Cshddl}|jj||||d\}}} |s6|r`t |¡n*| dt|ƒd|d|d| ¡||gS)Nr)r2r0z%Unexpected output difference at line z: testfile=z baseline=z Diffs: )r=r>Z compare_filer4rCrkr) rDrŠrHr2r‹r0rKÚflagÚlinenoZdiffsrrrrB`s &z!TestCase.assertFileEqualsBaselinecCsDddl}|j ||¡}|s*|r@t |¡n| d|d|¡|S)Nrz*Unexpected output difference: testfile=z baseline=)r=r>Zcompare_large_filer4rCrk)rDrŠrHr‹rKrrrrÚassertFileEqualsLargeBaseliners z&TestCase.assertFileEqualsLargeBaselinecCs:t ||¡}|r |r6t |¡n| d|d|¡|S)Nz*Unexpected output difference: testfile=z baseline=)ÚfilecmpÚcmpr4rCrk)rDrŠrHr‹ZtheSamerrrÚassertFileEqualsBinaryFile}s  z#TestCase.assertFileEqualsBinaryFilecCs¸|dkrtdƒdS|dkr(tdƒdS| dd¡}| dd¡}| dd¡}|||fdd„}d t|ƒ|_d |jd t|jƒdt|jƒd |_t|d ||ƒ||j||f<dS) Nz6ERROR: must specify the 'fn' option to define the testz8ERROR: must specify the 'name' option to define the testú/Ú_ú\Ú.cSst||||ƒS)N)rm)rDÚc1Úc2Úc3rrrÚ’óz&TestCase.add_fn_test..Útest_zfunction test: z (ú))ÚprintÚreplacerÚ__name__Ú __module__Ú__doc__r&r€)ÚclsrfrlreÚoptionsr„rrrrÚ add_fn_test‡s   ,zTestCase.add_fn_testc  Csn|dkr|dkrtdƒdS|dkr0tdƒdS|dkrHtj |d¡}| dd¡} |  dd¡} |  dd¡} | dkr²tj |¡\} }d|krªtj | | d¡dd ¡} n|d } |dkrà||tj | ¡||||| | f d d „}n|||||| fd d „}d | |_d|jdt |j ƒdt |jƒd|_ |dkrZ|dk rZ|j dtj |¡7_ t |d | |ƒdS)Nz^ERROR: must specify either the 'cmd' or 'fn' option to define how the output file is generatedz!ERROR: must specify the test namez.txtr“r”r•r–rz.outc Sst|||||||||| d S)N) rErarGrHr2rbr0r1rI)rd) rDr—r˜r™Úc4Úc5Úc6Zc7Zc8Zc9rrrršÀr›z,TestCase.add_baseline_test..c Sst|||||||dS)N)rerfrHr2r0rI)ri)rDr—r˜r™r¦r§r¨rrrršÂr›rœzbaseline test: z (rz Command archived in ) ržr4r5r7rŸrxr|Ú rpartitionr rr¡r¢r&)r£rfrarerHr2rErbr0rGr1rIr„r6ÚbasenamerrrrÚadd_baseline_test›s4    & ,zTestCase.add_baseline_testc Csö|dkr|dkrtdƒdS|dkr(|}|dkr.rœz import test: ) ržrŸr4r5rxr|r©r r¢r&) r£rFrfrErHr2r0rGr„r6rªrrrrÚadd_import_testÌs.      zTestCase.add_import_test)rq)N)Tr‡F)Tr‡F)Tr‡F)NTN)T)T)NNNN) NNNNNNNNNFF)NNNNNNN)$r r¡Ú __qualname__r€Z pyutilib_thrnrorpr!Z_default_categoriesr%r rrrZassertRaisesRegexpÚassertRaisesRegexZassertRegexpMatchesÚ assertRegexrsÚ staticmethodryrrrr…r†rAr@r?rBrr’r¥Ú classmethodr«r¬rrrrrôsp           # )NNNNNNFF) NNNNNNNFF)NNNNN)#Ú__all__Úinspectr r]r4r;rÚrerrZusing_unittest2rÚsixr r r Úextendr rrrrrVrrrZ nose.toolsrÚ ImportErrorrrrLrdrirmrrrrrÚ sj    / % 6