ÿØÿàJFIFÿþ ÿÛC       ÿÛC ÿÀÿÄÿÄ"#QrÿÄÿÄ&1!A"2qQaáÿÚ ?Øy,æ/3JæÝ¹È߲؋5êXw²±ÉyˆR”¾I0ó2—PI¾IÌÚiMö¯–þrìN&"KgX:Šíµ•nTJnLK„…@!‰-ý ùúmë;ºgµŒ&ó±hw’¯Õ@”Ü— 9ñ-ë.²1<yà‚¹ïQÐU„ہ?.’¦èûbß±©Ö«Âw*VŒ) `$‰bØÔŸ’ëXÖ-ËTÜíGÚ3ð«g Ÿ§¯—Jx„–’U/ÂÅv_s(Hÿ@TñJÑãõçn­‚!ÈgfbÓc­:él[ðQe 9ÀPLbÃãCµm[5¿ç'ªjglå‡Ûí_§Úõl-;"PkÞÞÁQâ¼_Ñ^¢SŸx?"¸¦ùY騐ÒOÈ q’`~~ÚtËU¹CڒêV  I1Áß_ÿÙ FSc@sdZeZddlZddlZddlmZddlmZm Z yddl m Z m Z Wn'e k rddlm Z m Z nXejeZdefdYZdS(s This plugin adds a test id (like #1) to each test name output. After you've run once to generate test ids, you can re-run individual tests by activating the plugin and passing the ids (with or without the # prefix) instead of test names. For example, if your normal test run looks like:: % nosetests -v tests.test_a ... ok tests.test_b ... ok tests.test_c ... ok When adding ``--with-id`` you'll see:: % nosetests -v --with-id #1 tests.test_a ... ok #2 tests.test_b ... ok #3 tests.test_c ... ok Then you can re-run individual tests by supplying just an id number:: % nosetests -v --with-id 2 #2 tests.test_b ... ok You can also pass multiple id numbers:: % nosetests -v --with-id 2 3 #2 tests.test_b ... ok #3 tests.test_c ... ok Since most shells consider '#' a special character, you can leave it out when specifying a test id. Note that when run without the -v switch, no special output is displayed, but the ids file is still written. Looping over failed tests ------------------------- This plugin also adds a mode that will direct the test runner to record failed tests. Subsequent test runs will then run only the tests that failed last time. Activate this mode with the ``--failed`` switch:: % nosetests -v --failed #1 test.test_a ... ok #2 test.test_b ... ERROR #3 test.test_c ... FAILED #4 test.test_d ... ok On the second run, only tests #2 and #3 will run:: % nosetests -v --failed #2 test.test_b ... ERROR #3 test.test_c ... FAILED As you correct errors and tests pass, they'll drop out of subsequent runs. First:: % nosetests -v --failed #2 test.test_b ... ok #3 test.test_c ... FAILED Second:: % nosetests -v --failed #3 test.test_c ... FAILED When all tests pass, the full set will run on the next invocation. First:: % nosetests -v --failed #3 test.test_c ... ok Second:: % nosetests -v --failed #1 test.test_a ... ok #2 test.test_b ... ok #3 test.test_c ... ok #4 test.test_d ... ok .. note :: If you expect to use ``--failed`` regularly, it's a good idea to always run using the ``--with-id`` option. This will ensure that an id file is always created, allowing you to add ``--failed`` to the command line as soon as you have failing tests. Otherwise, your first run using ``--failed`` will (perhaps surprisingly) run *all* tests, because there won't be an id file containing the record of failed tests from your previous run. iN(tPlugin(tsrctset(tdumptloadtTestIdcBseZdZdZd ZeZeZ dZ dZ dZ d dZ dZdZdZd Zd Zd ZRS( s Activate to add a test id (like #1) to each test name output. Activate with --failed to rerun failing tests only. tidc Csgtj||||jddddddddd d d |jd dd dddtd ddS(s&Register commandline options. s --id-filetactiontstoretdestt testIdFiletdefaults.noseidstmetavartFILEthelpsfStore test ids found in test runs in this file. Default is the file .noseids in the working directory.s--failedt store_truetfaileds/Run the tests that failed in the last test run.N(Rtoptionst add_optiontFalse(tselftparsertenv((sD/opt/alt/python27/lib/python2.7/site-packages/nose/plugins/testid.pyRxs  cCstj||||jr>t|_t|_tjdntj j |j |_ tj j |j stj j|j|j |_ nd|_i|_i|_g|_g|_i|_|jdk|_dS(sConfigure plugin. sLooping on failed testsiiN(Rt configureRtTruetenabledt loopOnFailedtlogtdebugtostpatht expanduserR tidfiletisabstjoint workingDirRtidsttestst source_namest_seent verbosityt _write_hashes(RRtconf((sD/opt/alt/python27/lib/python2.7/site-packages/nose/plugins/testid.pyRs   !      cCs|jrg|_n|jr]tttt|jjt|jj}n |j }t |j d}t i|d6|jd6|j d6||jtjd||j|j dS(s&Save new ids file, if needed. twbR$RR&s#Saved test ids: %s, failed %s to %sN(t wasSuccessfulRt collectingtdicttlisttzipR%tvaluestkeysR$topenR RR&tcloseRR(RtresultR$tfh((sD/opt/alt/python27/lib/python2.7/site-packages/nose/plugins/testid.pytfinalizes   <     c Cstjd||yt|jd}t|}d|krj|d|_|d|_|d|_n||_g|_||_|jrt|jd|_ t t t t |jj t |jj|_n d|_ tjd|j|j|j|j|j|jWn$tk rHtjd|jnX|jry|jryt|_|j}g|_ng}g}g}xF|D]>}|j|} | |kr|j| q|j|qW|rXt|} t|j} tjd | | g|D]} | | kr| ^q}|rF|jj|n|sa|}qan t|_tjd |||d ||p|fS( sTranslate ids in the list of requested names into their test addresses, if they are found in my dict of tests. s ltfn %s %strbR$RR&is8Loaded test ids %s tests %s failed %s sources %s from %ssIO error reading %ssold: %s new: %ss&translated: %s new sources %s names %sN(RRR3R RR$RR&tmaxRR.R/R0R1R2R%R4tIOErrorRRR-ttrtappendRtextendtNone( RtnamestmoduleR6tdatat translatedt new_sourcet really_newtnamettranstnew_settold_setts((sD/opt/alt/python27/lib/python2.7/site-packages/nose/plugins/testid.pytloadTestsFromNamess`        ?              cCs^tjd||\}}}|dk r:t|}n|}|dk rZd||fS|S(Ns Make name %ss%s:%s(RRR>R(RtaddrtfilenameR@tcallthead((sD/opt/alt/python27/lib/python2.7/site-packages/nose/plugins/testid.pytmakeNames  cCs ||_dS(sBGet handle on output stream so the plugin can print id #s N(tstream(RRP((sD/opt/alt/python27/lib/python2.7/site-packages/nose/plugins/testid.pytsetOutputStreamscCs|j}tjd|||jk||jkr||jkrV|jdn%|jd|j|d|j|R RR-RRRRR7RJRORQRVR[R;RS(((sD/opt/alt/python27/lib/python2.7/site-packages/nose/plugins/testid.pyRns    C   (RdRt__test__tloggingRt nose.pluginsRt nose.utilRRtcPickleRRt ImportErrortpicklet getLoggerRbRR(((sD/opt/alt/python27/lib/python2.7/site-packages/nose/plugins/testid.pyt^s