
!dV                 @   sD  d  Z  d d l Z d d l Z d d l Z d d l Z d d l m Z d d l Z d d l Z d d l m	 Z	 d d l
 m Z d d l m Z d d l m Z d% Z d d   Z d d   Z d d   Z d d   Z d d   Z d d   Z d d   Z d d   Z d d   Z d d   Z d d    Z d! d"   Z d# d$   Z d S)&z
Basic wheel tests.
    N)resource_filename)	egg2wheel)	WheelFile)ZipFile)rmtreecomplex-distsimple.distheaders.distc              C   sm   t  j d d  }  xT t D]L } xC d D]; } y  t t j j |  | |   Wq& t k
 r` Yq& Xq& Wq Wd S)z$Delete eggs/wheels created by tests.z
wheel.test builddistN)zbuildzdist)pkg_resourcesr   test_distributionsr   ospathjoinOSError)baser   subdir r   6/tmp/pip-build-0jahl3lb/wheel/wheel/test/test_basic.pyteardown_module   s     r   c               C   s   t    t   d  S)N)build_wheel	build_eggr   r   r   r   setup_module    s    r   c              C   s   x t  D] }  t j j t j  } t j d |   } t j |  z5 d d g t _	 t
 t t d  j   d d   Wd t j |  Xq Wd S)z%Build wheels from test distributions.z
wheel.testr
   bdist_wheelzsetup.pyexecN)r   r   r   abspathcurdirr   r   chdirsysargvr   compileopenread)r   pwddistdirr   r   r   r   $   s    &r   c              C   s   x t  D] }  t j j t j  } t j d |   } t j |  z5 d d g t _	 t
 t t d  j   d d   Wd t j |  Xq Wd S)z#Build eggs from test distributions.z
wheel.testr
   	bdist_eggzsetup.pyr   N)r   r   r   r   r   r   r   r   r    r!   r   r"   r#   r$   )r   r%   r&   r   r   r   r   0   s    &r   c               C   s   t  j j d j s t  d S)z$Make sure pkg_resources can find us.wheelN)r   working_setby_keyversionAssertionErrorr   r   r   r   test_findable<   s    r-   c              C   sc   t  t j d d   }  xD |  D]< } | j   } | s= q n  t j j |  s t |   q Wd S)zMake sure egg_info_re matches.r(   zeggnames.txtN)r#   r   r   stripr   Zegg_info_rematchr,   )Z	egg_namesliner   r   r   test_egg_re@   s    r1   c              C   s}   t  d  }  t |  j  d d g k s- t  |  j d k sB t  t  d  } | j j   } | d d	 k sy t |   d
 S)z#Test compatibilty tags are working.z(package-1.0.0-cp32.cp33-noabi-noarch.whlcp32noabinoarchcp33   z'package-1.0.0-1st-cp33-noabi-noarch.whlr   Z1stN)r2   r3   noarch)r5   r3   r7   )r   listZcompatibility_tagsr,   arityparsed_filename	groupdict)ZwfZwf2Zwf2_infor   r   r   test_compatibility_tagsI   s    r<   c              C   st   t  j d d  }  x[ t D]S } t j j |  | d  } d d   t j |  D } t j j	 | | d d q Wd  S)Nz
wheel.testr
   r   c             S   s%   g  |  ] } | j  d   r |  q S)z.egg)endswith).0er   r   r   
<listcomp>X   s   	 z$test_convert_egg.<locals>.<listcomp>verboseF)
r   r   r   r   r   r   listdirr(   toolconvert)r   r   r&   eggsr   r   r   test_convert_eggT   s
    rF   c              C   s   xx t  D]p }  t j d t j j |  d   } xF d d   t j |  D D]( } t j j	 t j j | |  |  qK Wq Wd S)zj
    Make sure 'wheel unpack' works.
    This also verifies the integrity of our testing wheel files.
    z
wheel.testr   c             s   s$   |  ] } | j  d   r | Vq d S)z.whlN)r=   )r>   wr   r   r   	<genexpr>c   s    ztest_unpack.<locals>.<genexpr>N)
r   r   r   r   r   r   rB   r(   rC   unpack)r   r&   Z	wheelfiler   r   r   test_unpack[   s
    	#rJ   c              C   s   d }  t  j d |   } x t j |  D]y \ } } } xg | D]_ } | j d  r> t t j j | |   } x, | j   D] } d | j	 k s{ t
  q{ Wq> q> Wq( Wd S)z0Make sure entry point scripts are not generated.zcomplex-distz
wheel.testz.whlz.data/scripts/N)r   r   r   walkr=   r   r   r   infolistfilenamer,   )r   basedirdirnamesubdirs	filenamesrM   whlentryr   r   r   test_no_scriptsf   s    rT   c              C   s:  d d l  }  d d   } | t d d   } d } x d D] } t j d |  } x t j |  D] \ } } } x | D] }	 |	 j d	  rx t t j j | |	   }
 xg |
 j	   D]V } | j
 j d
  r t j |
 j |  j d   } |  j | |  | d 7} q q Wqx qx Wqb Wq: W| d k s6t d   d S)z>Make sure pydist.json exists and validates against our schema.r   Nc             S   s%   t  j t |  d  j   j d   S)Nrbzutf-8)jsonloadsr#   r$   decode)rM   r   r   r   	open_jsonw   s    ztest_pydist.<locals>.open_jsonz
wheel.testzpydist-schema.jsonsimple.distcomplex-distz.whlz/metadata.jsonzutf-8   zNo metadata.json found)rZ   r[   )
jsonschemar   r   r   rK   r=   r   r   r   rL   rM   rV   rW   r$   rX   validater,   )r]   rY   Zpymeta_schemavalidr   rN   rO   rP   rQ   rM   rR   rS   Zpymetar   r   r   test_pydistq   s"    	! r`   c              C   sq   xj t  d  D]\ }  d |  } t j j |  } | j d  sE t  t j j |  } | | k s t  q Wd S)zTest functions in util.py.
      *   =N)ranger(   utilurlsafe_b64encoder=   r,   urlsafe_b64decode)ibeforeencodedafterr   r   r   	test_util   s    
rl   c        	         s   d d   }  d d d d d d g } d d   | D } d d g } d d d d g } d d d d  g } xr | | | f D]a     f d d   } x | D] } | | _  q Wt |  } t | j  d   d k sw t  qw Wd S)!z!Test the wheel ranking algorithm.c             S   s,   |  d j  j   } | d | d | d f S)Nr\   pyverabiplat)r:   r;   )resinfor   r   r   get_tags   s    z test_pick_best.<locals>.get_tagspy27r3   r4   py26cp27
linux_i686cp26linux_x86_64c             S   s    g  |  ] } t  d  |   q S)ztestpkg-1.0-%s-%s-%s.whl)r   )r>   tr   r   r   r@      s   	z"test_pick_best.<locals>.<listcomp>c                  s
   t     S)N)r8   r   )suppr   r   <lambda>   s    z test_pick_best.<locals>.<lambda>r   N)rt   noabinoarch)ru   r}   r~   )rv   r}   
linux_i686)rx   r}   r   )rv   r}   linux_x86_64)rx   r}   r   )rv   r}   r   )rt   r}   r~   )rv   r}   r   )rt   r}   r~   )rx   r}   r   )ru   r}   r~   )rx   r}   r   )ru   r}   r~   )rv   r}   r   )rt   r}   r~   )contextmaxr8   tagsr,   )	rs   Z	cand_tagsZcand_wheels	supportedZ
supported2Z
supported3r   r(   bestr   )r{   r   test_pick_best   s&    		
r   )r   r   r	   )__doc__r   r   rV   r    r   Z
wheel.utilr(   Z
wheel.toolr   Zwheel.installr   zipfiler   shutilr   r   r   r   r   r   r-   r1   r<   rF   rJ   rT   r`   rl   r   r   r   r   r   <module>   s2   
	
