Y@sDdZddlZddlZddlZddlZddlmZddlZddlZddlm Z ddl m Z ddl m Z ddlmZd%Zd d Zd dZddZddZddZddZddZddZddZddZdd Zd!d"Zd#d$ZdS)&z Basic wheel tests. N)resource_filename) egg2wheel) WheelFile)ZipFile)rmtree complex-dist simple.dist headers.distc Csmtjdd}xTtD]L}xCdD];}y ttjj|||Wq&tk r`Yq&Xq&WqWdS)z$Delete eggs/wheels created by tests.z wheel.testbuilddistN)zbuildzdist) pkg_resourcesrtest_distributionsrospathjoinOSError)baser subdirr6/tmp/pip-build-3puug3g5/wheel/wheel/test/test_basic.pyteardown_modules    rcCsttdS)N) build_wheel build_eggrrrr setup_module src CsxtD]}tjjtj}tjd|}tj|z5ddgt_ t t t dj ddWdtj|XqWdS)z%Build wheels from test distributions.z wheel.testr bdist_wheelzsetup.pyexecN)rrrabspathcurdirr rchdirsysargvrcompileopenread)r pwddistdirrrrr$s  &rc CsxtD]}tjjtj}tjd|}tj|z5ddgt_ t t t dj ddWdtj|XqWdS)z#Build eggs from test distributions.z wheel.testr Z bdist_eggzsetup.pyrN)rrrrrr rrr r!rr"r#r$)r r%r&rrrr0s  &rcCstjjdjstdS)z$Make sure pkg_resources can find us.wheelN)r working_setby_keyversionAssertionErrorrrrr test_findable<sr,cCs`ttjdd}xA|D]9}|j}|s:qtjj|st|qWdS)zMake sure egg_info_re matches.r'z eggnames.txtN)r#r rstriprZ egg_info_rematchr+)Z egg_nameslinerrr test_egg_re@s   r0cCs}td}t|jd d gks-t|jdksBttd}|jj}|dd ksyt|d S) z#Test compatibilty tags are working.z(package-1.0.0-cp32.cp33-noabi-noarch.whlcp32noabinoarchcp33z'package-1.0.0-1st-cp33-noabi-noarch.whlr Z1stN)r1r2noarch)r4r2r6)rlistZcompatibility_tagsr+arityparsed_filename groupdict)ZwfZwf2Zwf2_inforrrtest_compatibility_tagsIs   r;cCsttjdd}x[tD]S}tjj||d}ddtj|D}tjj ||ddqWdS)Nz wheel.testr r cSs%g|]}|jdr|qS)z.egg)endswith).0errr Xs z$test_convert_egg..verboseF) r rrrrrlistdirr'toolconvert)rr r&eggsrrrtest_convert_eggTs  rEcCsxxtD]p}tjdtjj|d}xFddtj|DD](}tjj tjj|||qKWqWdS)zj Make sure 'wheel unpack' works. This also verifies the integrity of our testing wheel files. z wheel.testr css$|]}|jdr|VqdS)z.whlN)r<)r=wrrr csztest_unpack..N) rr rrrrrAr'rBunpack)r r&Z wheelfilerrr test_unpack[s   #rIcCsd}tjd|}xtj|D]v\}}}xd|D]\}|jdr>ttjj||}x)|jD]}d|j ks{t q{Wq>Wq(WdS)z0Make sure entry point scripts are not generated.z complex-distz wheel.testz.whlz.data/scripts/N) r rrwalkr<rrrinfolistfilenamer+)r basedirdirnamesubdirs filenamesrLwhlentryrrrtest_no_scriptsfs rSc Cs4ddl}dd}|tdd}d}xdD]}tjd|}xtj|D]\}}}x|D]} | jd rxttjj|| } xa| j D]S} | j jd rt j | j | jd } |j| ||d 7}qWqxWqbWq:W|dks0td dS)z>Make sure pydist.json exists and validates against our schema.rNcSs%tjt|djjdS)Nrbzutf-8)jsonloadsr#r$decode)rLrrr open_jsonwsztest_pydist..open_jsonz wheel.testzpydist-schema.json simple.dist complex-distz.whlz/metadata.jsonzutf-8zNo metadata.json found)rYrZ) jsonschemarr rrJr<rrrrKrLrUrVr$rWvalidater+) r\rXZ pymeta_schemaZvalidr rMrNrOrPrLrQrRZpymetarrr test_pydistqs"      !r^cCsqxjtdD]\}d|}tjj|}|jd sEttjj|}||ks tq WdS)zTest functions in util.py. *=N)ranger'utilurlsafe_b64encoder<r+urlsafe_b64decode)iZbeforeencodedafterrrr test_utils  ric sdd}ddddddg}d d |D}ddg}ddddg}dddd g}xr|||fD]afd d}x|D]}||_qWt|}t|jddkswtqwWdS)!z!Test the wheel ranking algorithm.cSs,|djj}|d|d|dfS)Nr[pyverabiplat)r9r:)resinforrrget_tagssz test_pick_best..get_tagspy27r2r3py26cp27 linux_i686cp26 linux_x86_64cSs g|]}td|qS)ztestpkg-1.0-%s-%s-%s.whl)r)r=trrrr?s z"test_pick_best..cs tS)N)r7r)supprrsz test_pick_best..rN)rqnoabinoarch)rrrzr{)rsrz linux_i686)rurzr|)rsrz linux_x86_64)rurzr})rsrzr|)rqrzr{)rsrzr|)rqrzr{)rurzr|)rrrzr{)rurzr|)rrrzr{)rsrzr|)rqrzr{)contextmaxr7tagsr+) rpZ cand_tagsZ cand_wheels supportedZ supported2Z supported3r~r'bestr)rxrtest_pick_bests&          r)rrr )__doc__rr rUr rZ wheel.utilr'Z wheel.toolrZ wheel.installrzipfilershutilrrrrrrr,r0r;rErIrSr^rirrrrrs2