
W(p                 @   st  d  d l  m Z e j d  Z e j d  Z e j d  Z e j d  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 Z Gd	 d
   d
  Z e j e d e \ Z Z Gd d   d  Z e j e d e d e d e \ Z Z Gd d   d  Z e j e d e \ Z Z Gd d   d  Z e j e d e \ Z Z Gd d   d  Z e j e d e \ Z Z Gd d   d  Z e j e d e \ Z  Z! Gd d   d  Z" e j e" d e d e d e \ Z# Z$ Gd d   d  Z% e j e% d e \ Z& Z' Gd d   d  Z( e j e( d e \ Z) Z* e+ d k rpe j,   d S)    )utilzimportlib.abc	importlibzimportlib.machineryzimportlib.util    N)supportc               @   s:   e  Z d  Z d Z d d   Z d d   Z d d   Z d S)	DecodeSourceBytesTestsu   string ='ü'c             C   s5   |  j  j d  } |  j |  j j |  |  j   d  S)Nzutf-8)sourceencodeassertEqualr   decode_source)selfsource_bytes r   >/afs/.cs/s/python-3.5.2/amd64_ubu14/lib/python3.5/test_util.pytest_ut8_default   s    z'DecodeSourceBytesTests.test_ut8_defaultc             C   sW   d |  j  } | j d  } | | j d  k s7 t  |  j |  j j |  |  d  S)Nz# coding=latin-1
zlatin-1zutf-8)r   r   AssertionErrorr	   r   r
   )r   r   r   r   r   r   test_specified_encoding   s    z.DecodeSourceBytesTests.test_specified_encodingc             C   s_   d j  |  j |  j g  } | j d  } |  j |  j j |  d j  |  j |  j g   d  S)Nz
zutf-8
)joinr   r   r	   r   r
   )r   r   r   r   r   r   test_universal_newlines   s    z.DecodeSourceBytesTests.test_universal_newlinesN)__name__
__module____qualname__r   r   r   r   r   r   r   r   r      s   r   r   c               @   s   e  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 S)ModuleFromSpecTestsc             C   s   Gd d   d  } |  j  j d |    } t j d d  & } t j d  |  j j |  } Wd  QRX|  j d t |   |  j	 t
 | d j t   |  j d	 t | d j   |  j | t j  |  j | j | j  d  S)
Nc               @   s   e  Z d  Z d d   Z d S)z9ModuleFromSpecTests.test_no_create_module.<locals>.Loaderc             S   s   d  S)Nr   )r   moduler   r   r   exec_module.   s    zEModuleFromSpecTests.test_no_create_module.<locals>.Loader.exec_moduleN)r   r   r   r   r   r   r   r   Loader-   s   r   testrecordTalwaysr   r   create_module)	machinery
ModuleSpecwarningscatch_warningssimplefilterr   module_from_specr	   len
assertTrue
issubclasscategoryDeprecationWarningassertInstrmessageassertIsInstancetypes
ModuleTyper   name)r   r   specwr   r   r   r   test_no_create_module,   s    z)ModuleFromSpecTests.test_no_create_modulec             C   ss   Gd d   d |  j  j  } |  j j d |    } |  j j |  } |  j | t j  |  j	 | j
 | j  d  S)Nc               @   s   e  Z d  Z d d   Z d S)zCModuleFromSpecTests.test_create_module_returns_None.<locals>.Loaderc             S   s   d  S)Nr   )r   r2   r   r   r   r   <   s    zQModuleFromSpecTests.test_create_module_returns_None.<locals>.Loader.create_moduleN)r   r   r   r   r   r   r   r   r   ;   s   r   r   )abcr   r    r!   r   r%   r.   r/   r0   r	   r   r1   )r   r   r2   r   r   r   r   test_create_module_returns_None:   s
    z3ModuleFromSpecTests.test_create_module_returns_Nonec                s   d  Gd d   d t  j    G   f d d   d |  j j  } |  j j d |    } |  j j |  } |  j |    |  j	 | j
   d  S)Nzalready setc               @   s   e  Z d  Z d S)z<ModuleFromSpecTests.test_create_module.<locals>.CustomModuleN)r   r   r   r   r   r   r   CustomModuleE   s   r7   c                   s%   e  Z d  Z    f d d   Z d S)z6ModuleFromSpecTests.test_create_module.<locals>.Loaderc                s     | j   }  | _ | S)N)r1   r   )r   r2   r   )r7   r1   r   r   r   H   s    	zDModuleFromSpecTests.test_create_module.<locals>.Loader.create_moduleN)r   r   r   r   r   )r7   r1   r   r   r   G   s   r   r   )r/   r0   r5   r   r    r!   r   r%   r.   r	   r   )r   r   r2   r   r   )r7   r1   r   test_create_moduleC   s    %z&ModuleFromSpecTests.test_create_modulec             C   sD   |  j  j d t    } |  j j |  } |  j | j | j  d  S)Nr   )r    r!   objectr   r%   r	   r   r1   )r   r2   r   r   r   r   test___name__Q   s    z!ModuleFromSpecTests.test___name__c             C   sA   |  j  j d t    } |  j j |  } |  j | j |  d  S)Nr   )r    r!   r9   r   r%   r	   __spec__)r   r2   r   r   r   r   test___spec__V   s    z!ModuleFromSpecTests.test___spec__c             C   sG   t    } |  j j d |  } |  j j |  } |  j | j |  d  S)Nr   )r9   r    r!   r   r%   assertIs
__loader__)r   loaderr2   r   r   r   r   test___loader__[   s    	z#ModuleFromSpecTests.test___loader__c             C   sD   |  j  j d t    } |  j j |  } |  j | j | j  d  S)Nztest.pkg)r    r!   r9   r   r%   r	   __package__parent)r   r2   r   r   r   r   test___package__a   s    z$ModuleFromSpecTests.test___package__c             C   sJ   |  j  j d t   d d } |  j j |  } |  j | j | j  d  S)Nr   
is_packageT)r    r!   r9   r   r%   r	   __path__submodule_search_locations)r   r2   r   r   r   r   test___path__f   s    z!ModuleFromSpecTests.test___path__c             C   sS   |  j  j d t   d d } d | _ |  j j |  } |  j | j | j  d  S)Nr   originz	some/pathT)	r    r!   r9   has_locationr   r%   r	   __file__rH   )r   r2   r   r   r   r   test___file__k   s    	z!ModuleFromSpecTests.test___file__c             C   sV   |  j  j d t    } d | _ d | _ |  j j |  } |  j | j | j  d  S)Nr   z	some/pathT)	r    r!   r9   cachedrI   r   r%   r	   
__cached__)r   r2   r   r   r   r   test___cached__q   s
    		z#ModuleFromSpecTests.test___cached__N)r   r   r   r4   r6   r8   r:   r<   r@   rC   rG   rK   rN   r   r   r   r   r   *   s   	r   r5   r    c               @   s   e  Z d  Z d Z e 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)ModuleForLoaderTestsz+Tests for importlib.util.module_for_loader.c          
   C   s8   t  j   % t  j d t  |  j j |  SWd  QRXd  S)Nignore)r"   r#   r$   r*   r   module_for_loader)clsfuncr   r   r   rQ      s    z&ModuleForLoaderTests.module_for_loaderc             C   sW   t  j   D t  j d t  |  j t   |  j j d d    } Wd  QRXWd  QRXd  S)Nerrorc             S   s   |  S)Nr   )xr   r   r   <lambda>   s    z3ModuleForLoaderTests.test_warning.<locals>.<lambda>)r"   r#   r$   r*   assertRaisesr   rQ   )r   rS   r   r   r   test_warning   s    z!ModuleForLoaderTests.test_warningc             C   s"   |  j  d d    } | |  |  S)Nc             S   s   | S)Nr   )r   r   r   r   r   rV      s    z4ModuleForLoaderTests.return_module.<locals>.<lambda>)rQ   )r   r1   fxnr   r   r   return_module   s    z"ModuleForLoaderTests.return_modulec             C   sE   d d   } |  j  |  } y | |  |  Wn t k
 r@ Yn Xd  S)Nc             S   s
   t   d  S)N)ImportError)r   r   r   r   r   to_wrap   s    z5ModuleForLoaderTests.raise_exception.<locals>.to_wrap)rQ   r[   )r   r1   r\   rY   r   r   r   raise_exception   s    z$ModuleForLoaderTests.raise_exceptionc          
   C   si   d } t  j |  ' |  j |  } |  j | t j  Wd  QRX|  j | t j  |  j	 | j
 |  d  S)Nza.b.c)r   uncacherZ   r+   sysmodulesr.   r/   r0   r	   r   )r   module_namer   r   r   r   test_new_module   s    z$ModuleForLoaderTests.test_new_modulec                s   G  f d d   d  } d } t  j d  } d | _ d | _ t j |  g | t j | <|   } | j |  }   j	 | t j |    j
 | j |    j
 | j |  Wd  QRXd  S)Nc                   s1   e  Z d  Z d d   Z   j d d    Z d S)z4ModuleForLoaderTests.test_reload.<locals>.FakeLoaderc             S   s   d S)NTr   )r   r1   r   r   r   rD      s    z?ModuleForLoaderTests.test_reload.<locals>.FakeLoader.is_packagec             S   s   | S)Nr   )r   r   r   r   r   load_module   s    z@ModuleForLoaderTests.test_reload.<locals>.FakeLoader.load_moduleN)r   r   r   rD   rQ   rc   r   )r   r   r   
FakeLoader   s   rd   za.b.c*   )r/   r0   r>   rA   r   r^   r_   r`   rc   r=   r	   )r   rd   r1   r   r?   Zreturned_moduler   )r   r   test_reload   s    			z ModuleForLoaderTests.test_reloadc          
   C   sA   d } t  j |  % |  j |  |  j | t j  Wd  QRXd  S)Nza.b.c)r   r^   r]   assertNotInr_   r`   )r   r1   r   r   r   test_new_module_failure   s    z,ModuleForLoaderTests.test_new_module_failurec             C   sa   d } t  j |  } t j |  6 | t j | <|  j |  |  j | t j |  Wd  QRXd  S)Nza.b.c)r/   r0   r   r^   r_   r`   r]   r=   )r   r1   r   r   r   r   test_reload_failure   s    z(ModuleForLoaderTests.test_reload_failurec             C   sK   d d   } |  j  |  } |  j | j | j  |  j | j | j  d  S)Nc             S   s   d  S)Nr   )r   r   r   r   r   rY      s    z6ModuleForLoaderTests.test_decorator_attrs.<locals>.fxn)rQ   r	   r   r   )r   rY   wrappedr   r   r   test_decorator_attrs   s    z)ModuleForLoaderTests.test_decorator_attrsc          
   C   s   Gd d   d t  j  } d } | |  } t j |  > |  j |  | t j | <|  j |  } |  j | |  Wd  QRXd  S)Nc               @   s   e  Z d  Z d d   Z d S)z;ModuleForLoaderTests.test_false_module.<locals>.FalseModulec             S   s   d S)NFr   )r   r   r   r   __bool__   s    zDModuleForLoaderTests.test_false_module.<locals>.FalseModule.__bool__N)r   r   r   rl   r   r   r   r   FalseModule   s   rm   mod)	r/   r0   r   r^   ZassertFalser_   r`   rZ   r=   )r   rm   r1   r   Zgivenr   r   r   test_false_module   s    z&ModuleForLoaderTests.test_false_modulec                s   G  f d d   d  } d } t  j |  Y | d  } | j |  }   j | j |    j | j |    j | j d  Wd  QRXd } t  j |  Y | d  } | j |  }   j | j |    j | j |    j | j |  Wd  QRXd  S)Nc                   s=   e  Z d  Z d d   Z d d   Z   j d d    Z d S)z<ModuleForLoaderTests.test_attributes_set.<locals>.FakeLoaderc             S   s   | |  _  d  S)N)_pkg)r   rD   r   r   r   __init__   s    zEModuleForLoaderTests.test_attributes_set.<locals>.FakeLoader.__init__c             S   s   |  j  S)N)rp   )r   r1   r   r   r   rD      s    zGModuleForLoaderTests.test_attributes_set.<locals>.FakeLoader.is_packagec             S   s   | S)Nr   )r   r   r   r   r   rc      s    zHModuleForLoaderTests.test_attributes_set.<locals>.FakeLoader.load_moduleN)r   r   r   rq   rD   rQ   rc   r   )r   r   r   rd      s   rd   zpkg.modFpkgzpkg.subT)r   r^   rc   r	   r   r=   r>   rA   )r   rd   r1   r?   r   r   )r   r   test_attributes_set   s    	z(ModuleForLoaderTests.test_attributes_setN)r   r   r   __doc__classmethodrQ   rX   rZ   r]   rb   rf   rh   ri   rk   ro   rs   r   r   r   r   rO   ~   s   	
	rO   c               @   sj   e  Z d  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 S)SetPackageTestsz%Tests for importlib.util.set_package.c                s|     f d d   } |  j  j |  } t j    t j d t  |   Wd QRX|  j t   d   |  j |   j	  d S)zcVerify the module has the expected value for __package__ after
        passing through set_package.c                  s     S)Nr   r   )r   r   r   rV     s    z(SetPackageTests.verify.<locals>.<lambda>rP   NrA   )
r   set_packager"   r#   r$   r*   r'   hasattrr	   rA   )r   r   expectrY   rj   r   )r   r   verify  s    zSetPackageTests.verifyc             C   s,   t  j d  } d  | _ |  j | d  d  S)Nr    )r/   r0   rA   rz   )r   r   r   r   r   test_top_level  s    	zSetPackageTests.test_top_levelc             C   s8   t  j d  } d g | _ d  | _ |  j | d  d  S)Nrr   z<path>)r/   r0   rE   rA   rz   )r   r   r   r   r   test_package  s    	zSetPackageTests.test_packagec             C   s,   t  j d  } d  | _ |  j | d  d  S)Nzpkg.modrr   )r/   r0   rA   rz   )r   r   r   r   r   test_submodule  s    	zSetPackageTests.test_submodulec             C   s?   t  j d  } t | d  r+ t | d  |  j | d  d  S)Nrn   rA   r{   )r/   r0   rx   delattrrz   )r   r   r   r   r   test_setting_if_missing$  s    z'SetPackageTests.test_setting_if_missingc             C   s=   x6 d D]. } t  j d  } | | _ |  j | |  q Wd  S)NTFrn   )TF)r/   r0   rA   rz   )r   valuer   r   r   r   test_leaving_alone+  s    	z"SetPackageTests.test_leaving_alonec          
   C   sr   d d   } t  j   ' t  j d t  |  j j |  } Wd  QRX|  j | j | j  |  j | j | j  d  S)Nc             S   s   d  S)Nr   )r   r   r   r   rY   3  s    z1SetPackageTests.test_decorator_attrs.<locals>.fxnrP   )	r"   r#   r$   r*   r   rw   r	   r   r   )r   rY   rj   r   r   r   rk   2  s    z$SetPackageTests.test_decorator_attrsN)r   r   r   rt   rz   r|   r}   r~   r   r   rk   r   r   r   r   rv     s   rv   c               @   sL   e  Z d  Z d Z e d d    Z d d   Z d d   Z d d	   Z d
 S)SetLoaderTestsz"Tests importlib.util.set_loader().c                s)   G  f d d   d  } |   j  _ | S)Nc                   s(   e  Z d  Z   j j d d    Z d S)z/SetLoaderTests.DummyLoader.<locals>.DummyLoaderc             S   s   |  j  S)N)r   )r   r   r   r   r   rc   H  s    z;SetLoaderTests.DummyLoader.<locals>.DummyLoader.load_moduleN)r   r   r   r   
set_loaderrc   r   )r   r   r   DummyLoaderG  s   r   )	__class__r   )r   r   r   )r   r   r   D  s    zSetLoaderTests.DummyLoaderc             C   s   |  j    } t j d  | _ y | j ` Wn t k
 r? Yn Xt j   1 t j d t	  |  j
 | | j d  j  Wd  QRXd  S)NblahrP   )r   r/   r0   r   r>   AttributeErrorr"   r#   r$   r*   r	   rc   )r   r?   r   r   r   test_no_attributeN  s    z SetLoaderTests.test_no_attributec             C   sn   |  j    } t j d  | _ d  | j _ t j   1 t j d t  |  j	 | | j
 d  j  Wd  QRXd  S)Nr   rP   )r   r/   r0   r   r>   r"   r#   r$   r*   r	   rc   )r   r?   r   r   r   test_attribute_is_NoneY  s    z%SetLoaderTests.test_attribute_is_Nonec             C   sn   |  j    } t j d  | _ d | j _ t j   1 t j d t  |  j	 d | j
 d  j  Wd  QRXd  S)Nr   re   rP   )r   r/   r0   r   r>   r"   r#   r$   r*   r	   rc   )r   r?   r   r   r   test_not_reseta  s    zSetLoaderTests.test_not_resetN)	r   r   r   rt   propertyr   r   r   r   r   r   r   r   r   @  s
   
r   c               @   s^   e  Z d  Z d Z d d   Z d d   Z d d   Z d d	   Z d
 d   Z d d   Z	 d S)ResolveNameTestsz$Tests importlib.util.resolve_name().c             C   s#   |  j  d |  j j d d    d  S)Nbacon)r	   r   resolve_name)r   r   r   r   test_absolutes  s    zResolveNameTests.test_absolutec             C   s#   |  j  d |  j j d d   d  S)Nr   spam)r	   r   r   )r   r   r   r   test_aboslute_within_packagew  s    z-ResolveNameTests.test_aboslute_within_packagec          
   C   s.   |  j  t   |  j j d d  Wd  QRXd  S)Nz.baconr{   )rW   
ValueErrorr   r   )r   r   r   r   test_no_package{  s    z ResolveNameTests.test_no_packagec             C   s#   |  j  d |  j j d d   d  S)Nzspam.eggs.baconz.baconz	spam.eggs)r	   r   r   )r   r   r   r   test_in_package  s    	z ResolveNameTests.test_in_packagec             C   s#   |  j  d |  j j d d   d  S)Nz
spam.baconz..baconz	spam.eggs)r	   r   r   )r   r   r   r   test_other_package  s    	z#ResolveNameTests.test_other_packagec          
   C   s.   |  j  t   |  j j d d  Wd  QRXd  S)Nz..baconr   )rW   r   r   r   )r   r   r   r   test_escape  s    zResolveNameTests.test_escapeN)
r   r   r   rt   r   r   r   r   r   r   r   r   r   r   r   o  s   r   c               @   s   e  Z d  Z Gd 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)FindSpecTestsc               @   s(   e  Z d  Z e d d d d   Z d S)zFindSpecTests.FakeMetaFinderNc             C   s   |  | | f S)Nr   )r1   pathtargetr   r   r   	find_spec  s    z&FindSpecTests.FakeMetaFinder.find_spec)r   r   r   staticmethodr   r   r   r   r   FakeMetaFinder  s   r   c          
   C   s   d } t  j |  p t j |  } d } |  j j | |  } | | _ | | _ | t j	 | <|  j  j
 |  } |  j | |  Wd  QRXd  S)Nsome_modz	a loader!)r   r^   r/   r0   r    r!   r>   r;   r_   r`   r   r	   )r   r1   r   r?   r2   foundr   r   r   test_sys_modules  s    		zFindSpecTests.test_sys_modulesc          
   C   s   d } t  j |  m t j |  } | ` d } |  j j | |  } | | _ | t j	 | <|  j  j
 |  } |  j | |  Wd  QRXd  S)Nr   z	a loader!)r   r^   r/   r0   r>   r    r!   r;   r_   r`   r   r	   )r   r1   r   r?   r2   r   r   r   r   #test_sys_modules_without___loader__  s    	z1FindSpecTests.test_sys_modules_without___loader__c             C   sm   d } t  j |  Q t j |  } d  | _ | t j | <|  j t   |  j  j	 |  Wd  QRXWd  QRXd  S)Nr   )
r   r^   r/   r0   r;   r_   r`   rW   r   r   )r   r1   r   r   r   r   test_sys_modules_spec_is_None  s    	z+FindSpecTests.test_sys_modules_spec_is_Nonec          
   C   s}   d } t  j |  a t j |  } |  j j | d   } | | _ | t j | <|  j  j	 |  } |  j
 | |  Wd  QRXd  S)Nr   )r   r^   r/   r0   r    r!   r;   r_   r`   r   r	   )r   r1   r   r2   r   r   r   r   test_sys_modules_loader_is_None  s    	z-FindSpecTests.test_sys_modules_loader_is_Nonec             C   s   d } t  j |  g t j |  } y
 | ` Wn t k
 rC Yn X| t j | <|  j t	   |  j  j
 |  Wd  QRXWd  QRXd  S)Nr   )r   r^   r/   r0   r;   r   r_   r`   rW   r   r   )r   r1   r   r   r   r    test_sys_modules_spec_is_not_set  s    
z.FindSpecTests.test_sys_modules_spec_is_not_setc             C   sf   d } t  j |  J t  j d |  j g  * |  j | d  d  f |  j  j |   Wd  QRXWd  QRXd  S)Nr   	meta_path)r   r^   Zimport_stater   r	   r   )r   r1   r   r   r   test_success  s
    zFindSpecTests.test_successc             C   s   |  j  |  j j d   d  S)NZnevergoingtofindthismodule)ZassertIsNoner   r   )r   r   r   r   test_nothing  s    zFindSpecTests.test_nothingc             C   s   d } d } t  j | d d  } t  j | | |  \ } } |  j  j |  } |  j | d   |  j | t t j   |  j	 | t t j   |  j  j |  } |  j
 | |  Wd  QRXd  S)Nr   hamrr   T)r   temp_module	submoduler   assertIsNotr+   sortedr_   r`   rg   r	   )r   r1   subnamepkg_dirfullname_r2   
spec_againr   r   r   test_find_submodule  s    z!FindSpecTests.test_find_submodulec             C   s   d } d } t  j | d d  } |  j j |  t  j | | |  \ } } |  j  j |  } |  j | d   |  j | t t	 j
   |  j | t t	 j
   |  j  j |  } |  j | |  Wd  QRXd  S)Nr   r   rr   T)r   r   initimport_moduler   r   r   r+   r   r_   r`   rg   r	   )r   r1   r   r   r   r   r2   r   r   r   r   +test_find_submodule_parent_already_imported  s    z9FindSpecTests.test_find_submodule_parent_already_importedc       	      C   s   d } d } t  j | d d  } t  j | | |  \ } } d | } |  j  j | |  } |  j | d   |  j | t t j   |  j	 | t t j   |  j  j |  } |  j
 | |  Wd  QRXd  S)Nr   r   rr   T.)r   r   r   r   r   r+   r   r_   r`   rg   r	   )	r   r1   r   r   r   r   relnamer2   r   r   r   r   test_find_relative_module  s    
z'FindSpecTests.test_find_relative_modulec             C   s   d } d } t  j | d d  } t  j | | |  \ } } d | } |  j t   |  j  j |  Wd  QRX|  j | t t j	   |  j | t t j	   Wd  QRXd  S)Nr   r   rr   Tr   )
r   r   r   rW   r   r   rg   r   r_   r`   )r   r1   r   r   r   r   r   r   r   r   )test_find_relative_module_missing_package  s    
z7FindSpecTests.test_find_relative_module_missing_packageN)r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r     s   	
r   r   c               @   s(   e  Z d  Z d d   Z d d   Z d S)MagicNumberTestsc             C   s    |  j  t |  j j  d  d  S)N   )r	   r&   r   MAGIC_NUMBER)r   r   r   r   test_length  s    zMagicNumberTests.test_lengthc             C   s    |  j  |  j j j d   d  S)Ns   
)r'   r   r   endswith)r   r   r   r   test_incorporates_rn  s    z%MagicNumberTests.test_incorporates_rnN)r   r   r   r   r   r   r   r   r   r     s   r   c               @   s  e  Z d  Z d Z e j j Z e j	 e j j d k	 d  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 e j	 e j d k o e j d k d  d d    Z e j	 e j j d k	 d  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  d0 d1   Z! d S)2PEP3147TestszMTests of PEP 3147-related functions: cache_from_source and source_from_cache.Nz1requires sys.implementation.cache_tag not be Nonec             C   sk   t  j j d d d d  } t  j j d d d d d j |  j   } |  j |  j j | d d |  d  S)	Nfoobarbazzqux.py__pycache__z
qux.{}.pycoptimizationr{   )osr   r   formattagr	   r   cache_from_source)r   r   ry   r   r   r   test_cache_from_source.  s
    z#PEP3147Tests.test_cache_from_sourcec             C   sK   t  j t j d d   , |  j t   |  j j d  Wd  QRXWd  QRXd  S)N	cache_tagzwhatever.py)r   	swap_attrr_   implementationrW   NotImplementedErrorr   r   )r   r   r   r   #test_cache_from_source_no_cache_tag9  s    z0PEP3147Tests.test_cache_from_source_no_cache_tagc             C   s_   t  j j d d  } t  j j d d d j |  j   } |  j |  j j | d d |  d  S)Nzfoo.barfiler   z
file{}.pycr   r{   )r   r   r   r   r   r	   r   r   )r   r   ry   r   r   r   test_cache_from_source_no_dot?  s
    z*PEP3147Tests.test_cache_from_source_no_dotc             C   s  t  j j d d d d  } t j   t t j d  |  j |  j j | d  |  j j | d d  |  j |  j j | d	  |  j j | d d
  Wd  QRXt j   f t j d  |  j	 t
   |  j j | d  Wd  QRX|  j	 t
   |  j j | d	  Wd  QRXWd  QRXd  S)Nr   r   r   zqux.pyrP   Fr   r   Tr{   rT   )r   r   r   r"   r#   r$   r	   r   r   rW   r*   )r   r   r   r   r   %test_cache_from_source_debug_overrideG  s     z2PEP3147Tests.test_cache_from_source_debug_overridec             C   sM   d } t  j j d d j |  j   } |  j |  j j | d d |  d  S)Nzfoo.pyr   z
foo.{}.pycr   r{   )r   r   r   r   r   r	   r   r   )r   r   ry   r   r   r   test_cache_from_source_cwdX  s    !z'PEP3147Tests.test_cache_from_source_cwdc             C   s   t  j j d d d  } Gd d   d  } t j    t j d  |  j |  j j | g   |  j j | d d  |  j |  j j | d	 g  |  j j | d d
  |  j	 t
   |  j j d |    Wd  QRXWd  QRXd  S)Nr   r   zbaz.pyc               @   s   e  Z d  Z d d   Z d S)z=PEP3147Tests.test_cache_from_source_override.<locals>.Bearishc             S   s
   t   d  S)N)RuntimeError)r   r   r   r   rl   e  s    zFPEP3147Tests.test_cache_from_source_override.<locals>.Bearish.__bool__N)r   r   r   rl   r   r   r   r   Bearishd  s   r   rP   r   r      r{   z/foo/bar/baz.py)r   r   r   r"   r#   r$   r	   r   r   rW   r   )r   r   r   r   r   r   test_cache_from_source_override^  s    z,PEP3147Tests.test_cache_from_source_overridec             C   sM   d } t  j j d d j |  j   } |  j |  j j | d d |  d  S)Nzfoo.pyr   z
foo.{}.pycr   r{   )r   r   r   r   r   r	   r   r   )r   r   ry   r   r   r   0test_cache_from_source_optimization_empty_stringp  s    !z=PEP3147Tests.test_cache_from_source_optimization_empty_stringc             C   s   d } t  j j } t j j d d j |  j   } | d k rL | d } n> | d k rn | d j |  } n d j |  } |  j |  |  j	 |  j
 j | d	 d  |  d  S)
Nzfoo.pyr   zfoo.{}r   z.pyc   z.opt-{}.pycz){!r} is a non-standard optimization levelr   )r_   flagsoptimizer   r   r   r   r   ZskipTestr	   r   r   )r   r   Zoptimization_levelalmost_expectry   msgr   r   r   (test_cache_from_source_optimization_Nonew  s    !z5PEP3147Tests.test_cache_from_source_optimization_Nonec             C   s   d } t  j t  j } t j j d d j |  j   } |  j j	 | d | } |  j
 | | d j |   |  j
 |  j j	 | d d | d  |  j t   |  j j	 | d d Wd  QRXd  S)	Nzfoo.pyr   zfoo.{}r   z.opt-{}.pycre   z.opt-42.pyczpath/is/bad)stringascii_lettersdigitsr   r   r   r   r   r   r   r	   rW   r   )r   r   Zvalid_charactersr   Zgotr   r   r   'test_cache_from_source_optimization_set  s    !	z4PEP3147Tests.test_cache_from_source_optimization_setc             C   sU   t  j   B t  j d  |  j t   |  j j d d d d Wd  QRXWd  QRXd  S)NrP   zfoo.pyFr   r{   )r"   r#   r$   rW   	TypeErrorr   r   )r   r   r   r   ;test_cache_from_source_debug_override_optimization_both_set  s    zHPEP3147Tests.test_cache_from_source_debug_override_optimization_both_set\/z/test meaningful only where os.altsep is definedc             C   s2   |  j  |  j j d d d d j |  j   d  S)Nz\foo\bar\baz/qux.pyr   r{   z#\foo\bar\baz\__pycache__\qux.{}.pyc)r	   r   r   r   r   )r   r   r   r   )test_sep_altsep_and_sep_cache_from_source  s    z6PEP3147Tests.test_sep_altsep_and_sep_cache_from_sourcez4requires sys.implementation.cache_tag to not be Nonec             C   se   t  j j d d d d d j |  j   } t  j j d d d d  } |  j |  j j |  |  d  S)Nr   r   r   r   z
qux.{}.pyczqux.py)r   r   r   r   r   r	   r   source_from_cache)r   r   ry   r   r   r   test_source_from_cache  s    z#PEP3147Tests.test_source_from_cachec             C   sc   t  j j d d d  } t j t j d d   , |  j t   |  j	 j
 |  Wd  QRXWd  QRXd  S)Nr   r   zwhatever.pycr   )r   r   r   r   r   r_   r   rW   r   r   r   )r   r   r   r   r   #test_source_from_cache_no_cache_tag  s    z0PEP3147Tests.test_source_from_cache_no_cache_tagc             C   s   |  j  t |  j j d  d  S)Nz/foo/bar/bazqux.pyc)rW   r   r   r   )r   r   r   r   test_source_from_cache_bad_path  s    z,PEP3147Tests.test_source_from_cache_bad_pathc             C   s   |  j  t |  j j d  d  S)Nzfoo.cpython-32.pyc)rW   r   r   r   )r   r   r   r   test_source_from_cache_no_slash  s    z,PEP3147Tests.test_source_from_cache_no_slashc             C   s   |  j  t |  j j d  d  S)Nz__pycache__/foo.pyc)rW   r   r   r   )r   r   r   r   #test_source_from_cache_too_few_dots  s    z0PEP3147Tests.test_source_from_cache_too_few_dotsc          	   C   s+   |  j  t   |  j j d  Wd  QRXd  S)Nz(__pycache__/foo.cpython-32.opt-1.foo.pyc)rW   r   r   r   )r   r   r   r   $test_source_from_cache_too_many_dots  s    	z1PEP3147Tests.test_source_from_cache_too_many_dotsc             C   s   |  j  t |  j j d  d  S)Nz"__pycache__/foo.cpython-32.foo.pyc)rW   r   r   r   )r   r   r   r   test_source_from_cache_not_opt  s    z+PEP3147Tests.test_source_from_cache_not_optc             C   s   |  j  t |  j j d  d  S)Nz/foo/bar/foo.cpython-32.foo.pyc)rW   r   r   r   )r   r   r   r   $test_source_from_cache_no__pycache__  s    z1PEP3147Tests.test_source_from_cache_no__pycache__c             C   sA   t  j j d d j |  j   } |  j |  j j |  d  d  S)Nr   zfoo.{}.opt-1.pyczfoo.py)r   r   r   r   r   r	   r   r   )r   r   r   r   r   )test_source_from_cache_optimized_bytecode  s    !z6PEP3147Tests.test_source_from_cache_optimized_bytecodec          	   C   sL   t  j j d d j |  j   } |  j t   |  j j |  Wd  QRXd  S)Nr   zfoo.{}.opt-.pyc)	r   r   r   r   r   rW   r   r   r   )r   r   r   r   r   +test_source_from_cache_missing_optimization  s    !z8PEP3147Tests.test_source_from_cache_missing_optimization)"r   r   r   rt   r_   r   r   r   unittestZ
skipUnlessr   r   r   r   r   r   r   r   r   r   r   sepaltsepr   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   (  s4   
!
r   __main__)-r{   r   Zimport_importlibr5   r   r    Zimportlib_utilr   r   r_   r   r   r/   r   r"   r   Z	test_bothZFrozen_DecodeSourceBytesTestsZSource_DecodeSourceBytesTestsr   ZFrozen_ModuleFromSpecTestsZSource_ModuleFromSpecTestsrO   ZFrozen_ModuleForLoaderTestsZSource_ModuleForLoaderTestsrv   ZFrozen_SetPackageTestsZSource_SetPackageTestsr   ZFrozen_SetLoaderTestsZSource_SetLoaderTestsr   ZFrozen_ResolveNameTestsZSource_ResolveNameTestsr   ZFrozen_FindSpecTestsZSource_FindSpecTestsr   ZFrozen_MagicNumberTestsZSource_MagicNumberTestsr   ZFrozen_PEP3147TestsZSource_PEP3147Testsr   mainr   r   r   r   <module>   sB   P<,#