o
    g                     @   s  d dl mZ edZedZedZedZddl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ZddlZG d	d
 d
Zejeed\ZZG dd dZejeeeed\ZZG dd dZejeed\ZZG dd dZejeed\ZZG dd dZ eje ed\Z!Z"G dd dZ#eje#ed\Z$Z%G dd dZ&eje&eeed\Z'Z(G dd dZ)eje)ed\Z*Z+G dd dZ,eje,ed\Z-Z.G dd dej/Z)e0dkre1  dS 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   s&   | j d}| | j|| j  d S )Nutf-8sourceencodeassertEqualr   decode_source)selfsource_bytes r   S/Users/admin/.pyenv/versions/3.10.0/lib/python3.10/test/test_importlib/test_util.pytest_ut8_default   s   z'DecodeSourceBytesTests.test_ut8_defaultc                 C   s,   d| j  }|d}| | j|| d S )Nz# coding=latin-1
zlatin-1r   r   r	   r   r   r   r   test_specified_encoding   s   

z.DecodeSourceBytesTests.test_specified_encodingc                 C   sB   d | j| jg}|d}| | j|d | j| jg d S )Nz
r   
)joinr	   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   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   sZ   G dd d}| j d| }| t | j|}W d    d S 1 s&w   Y  d S )Nc                   @      e Zd Zdd ZdS )z9ModuleFromSpecTests.test_no_create_module.<locals>.Loaderc                 S      d S Nr   r   moduler   r   r   exec_module1      zEModuleFromSpecTests.test_no_create_module.<locals>.Loader.exec_moduleN)r   r   r   r    r   r   r   r   Loader0       r"   test)	machinery
ModuleSpecassertRaisesImportErrorr   module_from_specr   r"   specr   r   r   r   test_no_create_module/   s
   "z)ModuleFromSpecTests.test_no_create_modulec                 C   sR   G dd d| j j}| jd| }| j|}| |tj | 	|j
|j d S )Nc                   @   r   )zCModuleFromSpecTests.test_create_module_returns_None.<locals>.Loaderc                 S   r   r   r   )r   r+   r   r   r   create_module9   r!   zQModuleFromSpecTests.test_create_module_returns_None.<locals>.Loader.create_moduleNr   r   r   r-   r   r   r   r   r"   8   r#   r"   r$   )abcr"   r%   r&   r   r)   assertIsInstancetypes
ModuleTyper   r   namer*   r   r   r   test_create_module_returns_None7   s
   z3ModuleFromSpecTests.test_create_module_returns_Nonec                    sj   dG dd dt j G  fddd| jj}| jd| }| 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   CustomModuleB   s    r5   c                       s   e Zd Z fddZdS )z6ModuleFromSpecTests.test_create_module.<locals>.Loaderc                    s    |j }|_|S r   )r3   r   r   r+   r   r5   r3   r   r   r-   E   s   
zDModuleFromSpecTests.test_create_module.<locals>.Loader.create_moduleNr.   r   r7   r   r   r"   D   s    r"   r$   )r1   r2   r/   r"   r%   r&   r   r)   r0   r   r   r*   r   r7   r   test_create_module@   s   z&ModuleFromSpecTests.test_create_modulec                 C   0   | j dt }| j|}| |j|j d S Nr$   )r%   r&   objectr   r)   r   r   r3   r6   r   r   r   test___name__N      z!ModuleFromSpecTests.test___name__c                 C   s.   | j dt }| j|}| |j| d S r:   )r%   r&   r;   r   r)   r   __spec__r6   r   r   r   test___spec__S   s   z!ModuleFromSpecTests.test___spec__c                 C   s2   t  }| jd|}| j|}| |j| d S r:   )r;   r%   r&   r   r)   assertIs
__loader__)r   loaderr+   r   r   r   r   test___loader__X   s   z#ModuleFromSpecTests.test___loader__c                 C   r9   )Nztest.pkg)r%   r&   r;   r   r)   r   __package__parentr6   r   r   r   test___package__^   r=   z$ModuleFromSpecTests.test___package__c                 C   s4   | j jdt dd}| j|}| |j|j d S )Nr$   T)
is_package)r%   r&   r;   r   r)   r   __path__submodule_search_locationsr6   r   r   r   test___path__c   s   z!ModuleFromSpecTests.test___path__c                 C   s:   | j jdt dd}d|_| j|}| |j|j d S )Nr$   	some/path)originT)	r%   r&   r;   has_locationr   r)   r   __file__rL   r6   r   r   r   test___file__h   s   z!ModuleFromSpecTests.test___file__c                 C   s<   | j dt }d|_d|_| j|}| |j|j d S )Nr$   rK   T)	r%   r&   r;   cachedrM   r   r)   r   
__cached__r6   r   r   r   test___cached__n   s
   z#ModuleFromSpecTests.test___cached__N)r   r   r   r,   r4   r8   r<   r?   rC   rF   rJ   rO   rR   r   r   r   r   r   -   s    	r   )r/   r%   r   c                   @   sj   e 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 )ModuleForLoaderTestsc                 C   sD   t   t dt | j|W  d    S 1 sw   Y  d S )Nignore)warningscatch_warningssimplefilterDeprecationWarningr   module_for_loader)clsfuncr   r   r   rY      s   

$z&ModuleForLoaderTests.module_for_loaderc              	   C   s   t  4 t dt | t | jdd }W d    n1 s#w   Y  W d    d S W d    d S 1 s;w   Y  d S )Nerrorc                 S   s   | S r   r   )xr   r   r   <lambda>       z3ModuleForLoaderTests.test_warning.<locals>.<lambda>)rU   rV   rW   rX   r'   r   rY   )r   r[   r   r   r   test_warning   s   
"z!ModuleForLoaderTests.test_warningc                 C   s   |  dd }|| |S )Nc                 S      |S r   r   r   r   r   r   r^      r_   z4ModuleForLoaderTests.return_module.<locals>.<lambda>)rY   )r   r3   fxnr   r   r   return_module   s   
z"ModuleForLoaderTests.return_modulec                 C   s8   dd }|  |}z|| | W d S  ty   Y d S w )Nc                 S      t r   )r(   r   r   r   r   to_wrap   r!   z5ModuleForLoaderTests.raise_exception.<locals>.to_wrap)rY   r(   )r   r3   re   rb   r   r   r   raise_exception   s   
z$ModuleForLoaderTests.raise_exceptionc                 C   sf   d}t | | |}| |tj W d    n1 sw   Y  | |tj | 	|j
| d S Na.b.c)r   uncacherc   assertInsysmodulesr0   r1   r2   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 d}d|_d|_t|- |tj|< | }||} 	|tj|   
|j|  
|j| W d    d S 1 sKw   Y  d S )Nc                       s"   e Zd Zdd Z jdd ZdS )z4ModuleForLoaderTests.test_reload.<locals>.FakeLoaderc                 S      dS )NTr   r   r3   r   r   r   rG      r!   z?ModuleForLoaderTests.test_reload.<locals>.FakeLoader.is_packagec                 S   ra   r   r   r   r   r   r   load_module      z@ModuleForLoaderTests.test_reload.<locals>.FakeLoader.load_moduleN)r   r   r   rG   rY   rq   r   r   r   r   
FakeLoader   s    rt   rh   *   )r1   r2   rA   rD   r   ri   rk   rl   rq   r@   r   )r   rt   r3   r   rB   Zreturned_moduler   rs   r   test_reload   s   


"z ModuleForLoaderTests.test_reloadc                 C   sL   d}t | | | | |tj W d    d S 1 sw   Y  d S rg   )r   ri   rf   assertNotInrk   rl   rp   r   r   r   test_new_module_failure   s
   
"z,ModuleForLoaderTests.test_new_module_failurec                 C   sd   d}t |}t| |tj|< | | | |tj|  W d    d S 1 s+w   Y  d S rg   )r1   r2   r   ri   rk   rl   rf   r@   r   r3   r   r   r   r   test_reload_failure   s   


"z(ModuleForLoaderTests.test_reload_failurec                 C   s6   dd }|  |}| |j|j | |j|j d S )Nc                 S   r   r   r   r   r   r   r   rb      r_   z6ModuleForLoaderTests.test_decorator_attrs.<locals>.fxn)rY   r   r   r   r   rb   wrappedr   r   r   test_decorator_attrs   s   
z)ModuleForLoaderTests.test_decorator_attrsc                 C   sx   G dd dt j}d}||}t| | | |tj|< | |}| || W d    d S 1 s5w   Y  d S )Nc                   @   r   )z;ModuleForLoaderTests.test_false_module.<locals>.FalseModulec                 S   ro   )NFr   rs   r   r   r   __bool__   r_   zDModuleForLoaderTests.test_false_module.<locals>.FalseModule.__bool__Nr   r   r   r~   r   r   r   r   FalseModule   r#   r   mod)	r1   r2   r   ri   ZassertFalserk   rl   rc   r@   )r   r   r3   r   Zgivenr   r   r   test_false_module   s   


"z&ModuleForLoaderTests.test_false_modulec                    s   G  fddd}d}t |& |d}||} |j|  |j|  |jd W d    n1 s9w   Y  d}t |' |d}||} |j|  |j|  |j| W d    d S 1 sow   Y  d 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 r   Z_pkg)r   rG   r   r   r   __init__      
zEModuleForLoaderTests.test_attributes_set.<locals>.FakeLoader.__init__c                 S      | j S r   r   rp   r   r   r   rG      s   zGModuleForLoaderTests.test_attributes_set.<locals>.FakeLoader.is_packagec                 S   ra   r   r   r   r   r   r   rq      rr   zHModuleForLoaderTests.test_attributes_set.<locals>.FakeLoader.load_moduleN)r   r   r   r   rG   rY   rq   r   rs   r   r   rt      s
    rt   pkg.modFpkgzpkg.subT)r   ri   rq   r   r   r@   rA   rD   )r   rt   r3   rB   r   r   rs   r   test_attributes_set   s"   	

"z(ModuleForLoaderTests.test_attributes_setN)r   r   r   classmethodrY   r`   rc   rf   rn   rv   rx   rz   r}   r   r   r   r   r   r   rS   {   s    
	
	rS   c                   @   sF   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S )SetPackageTestsc                    sv   	  fdd}| j |}t  tdt |  W d    n1 s%w   Y  | t d | | j	 d S )Nc                      s    S r   r   r   r   r   r   r^     r_   z(SetPackageTests.verify.<locals>.<lambda>rT   rD   )
r   set_packagerU   rV   rW   rX   
assertTruehasattrr   rD   )r   r   expectrb   r|   r   r   r   verify  s   
zSetPackageTests.verifyc                 C       t d}d |_| |d d S )Nr    r1   r2   rD   r   r   r   r   r   test_top_level  s   
zSetPackageTests.test_top_levelc                 C   s(   t d}dg|_d |_| |d d S )Nr   z<path>)r1   r2   rH   rD   r   r   r   r   r   test_package  s   
zSetPackageTests.test_packagec                 C   r   )Nr   r   r   r   r   r   r   test_submodule  s   
zSetPackageTests.test_submodulec                 C   s.   t d}t|drt|d | |d d S )Nr   rD   r   )r1   r2   r   delattrr   r   r   r   r   test_setting_if_missing!  s   


z'SetPackageTests.test_setting_if_missingc                 C   s*   dD ]}t d}||_| || qd S )N)TFr   r   )r   valuer   r   r   r   test_leaving_alone(  s
   
z"SetPackageTests.test_leaving_alonec                 C   sl   dd }t   t dt | j|}W d    n1 sw   Y  | |j|j | |j|j d S )Nc                 S   r   r   r   r   r   r   r   rb   0  r_   z1SetPackageTests.test_decorator_attrs.<locals>.fxnrT   )	rU   rV   rW   rX   r   r   r   r   r   r{   r   r   r   r}   /  s   
z$SetPackageTests.test_decorator_attrsN)
r   r   r   r   r   r   r   r   r   r}   r   r   r   r   r      s    r   c                   @   s2   e Zd Z	 edd Zdd Zdd Zdd Zd	S )
SetLoaderTestsc                    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   r   r   r   r   r   r   r   rq   E  s   z;SetLoaderTests.DummyLoader.<locals>.DummyLoader.load_moduleN)r   r   r   r   
set_loaderrq   r   rs   r   r   DummyLoaderD  s    r   )	__class__r   )r   r   r   rs   r   r   A  s   zSetLoaderTests.DummyLoaderc                 C   s   |   }td|_z|j`W n	 ty   Y nw t  tdt	 | 
||dj W d    d S 1 s9w   Y  d S NblahrT   )r   r1   r2   r   rA   AttributeErrorrU   rV   rW   rX   r   rq   r   rB   r   r   r   test_no_attributeK  s   

"z SetLoaderTests.test_no_attributec                 C   sj   |   }td|_d |j_t  tdt | 	||
dj W d    d S 1 s.w   Y  d S r   r   r1   r2   r   rA   rU   rV   rW   rX   r   rq   r   r   r   r   test_attribute_is_NoneV     
"z%SetLoaderTests.test_attribute_is_Nonec                 C   sj   |   }td|_d|j_t  tdt | 	d|
dj W d    d S 1 s.w   Y  d S )Nr   ru   rT   r   r   r   r   r   test_not_reset^  r   zSetLoaderTests.test_not_resetN)r   r   r   propertyr   r   r   r   r   r   r   r   r   =  s    
	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S )ResolveNameTestsc                 C   s   |  d| jdd  d S )Nbaconr   r   resolve_namers   r   r   r   test_absolutep     zResolveNameTests.test_absolutec                 C   s   |  d| jdd d S )Nr   spamr   rs   r   r   r   test_absolute_within_packaget  r   z-ResolveNameTests.test_absolute_within_packagec                 C   >   |  t | jdd W d    d S 1 sw   Y  d S )N.baconr   r'   r(   r   r   rs   r   r   r   test_no_packagex     "z ResolveNameTests.test_no_packagec                 C      |  d| jdd d S )Nzspam.eggs.baconr   	spam.eggsr   rs   r   r   r   test_in_package}     z ResolveNameTests.test_in_packagec                 C   r   )Nz
spam.bacon..baconr   r   rs   r   r   r   test_other_package  r   z#ResolveNameTests.test_other_packagec                 C   r   )Nr   r   r   rs   r   r   r   test_escape  r   zResolveNameTests.test_escapeN)	r   r   r   r   r   r   r   r   r   r   r   r   r   r   l  s    r   c                   @   sz   e Zd ZG 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dd Zdd Zdd ZdS )FindSpecTestsc                   @   s   e Zd ZedddZdS )zFindSpecTests.FakeMetaFinderNc                 C   s
   | ||fS r   r   )r3   pathtargetr   r   r   	find_spec  r   z&FindSpecTests.FakeMetaFinder.find_spec)NN)r   r   r   staticmethodr   r   r   r   r   FakeMetaFinder  s    r   c                 C   s~   d}t |. t|}d}| j||}||_||_|tj	|< | j 
|}| || W d    d S 1 s8w   Y  d S Nsome_modz	a loader!)r   ri   r1   r2   r%   r&   rA   r>   rk   rl   r   r   r   r3   r   rB   r+   foundr   r   r   test_sys_modules  s   

"zFindSpecTests.test_sys_modulesc                 C   s|   d}t |- t|}|`d}| j||}||_|tj	|< | j 
|}| || W d    d S 1 s7w   Y  d S r   )r   ri   r1   r2   rA   r%   r&   r>   rk   rl   r   r   r   r   r   r   #test_sys_modules_without___loader__  s   

"z1FindSpecTests.test_sys_modules_without___loader__c              	   C   s   d}t |9 t|}d |_|tj|< | t | j 	| W d    n1 s+w   Y  W d    d S W d    d S 1 sCw   Y  d S Nr   )
r   ri   r1   r2   r>   rk   rl   r'   
ValueErrorr   ry   r   r   r   test_sys_modules_spec_is_None  s   

"z+FindSpecTests.test_sys_modules_spec_is_Nonec                 C   st   d}t |) t|}| j|d }||_|tj|< | j 	|}| 
|| W d    d S 1 s3w   Y  d S r   )r   ri   r1   r2   r%   r&   r>   rk   rl   r   r   )r   r3   r   r+   r   r   r   r   test_sys_modules_loader_is_None  s   

"z-FindSpecTests.test_sys_modules_loader_is_Nonec              	   C   s   d}t |D t|}z|`W n	 ty   Y nw |tj|< | t	 | j 
| W d    n1 s6w   Y  W d    d S W d    d S 1 sNw   Y  d S r   )r   ri   r1   r2   r>   r   rk   rl   r'   r   r   ry   r   r   r    test_sys_modules_spec_is_not_set  s   

"z.FindSpecTests.test_sys_modules_spec_is_not_setc              	   C   s   d}t |6 t j| jgd | |d d f| j | W d    n1 s(w   Y  W d    d S W d    d S 1 s@w   Y  d S )Nr   )	meta_path)r   ri   Zimport_stater   r   r   rp   r   r   r   test_success  s   
"zFindSpecTests.test_successc                 C   s   |  | jd d S )NZnevergoingtofindthismodule)ZassertIsNoner   r   rs   r   r   r   test_nothing  s   zFindSpecTests.test_nothingc                 C   s   d}d}t j|dd<}t |||\}}| j |}| |d  | |ttj | 	|ttj | j |}| 
|| W d    d S 1 sJw   Y  d S Nr   hamTr   r   temp_module	submoduler   assertIsNotrj   sortedrk   rl   rw   r   r   r3   subnamepkg_dirfullname_r+   
spec_againr   r   r   test_find_submodule  s   "z!FindSpecTests.test_find_submodulec                 C   s   d}d}t j|ddB}| j| t |||\}}| j |}| |d  | |tt	j
 | |tt	j
 | j |}| || W d    d S 1 sPw   Y  d S r   )r   r   initimport_moduler   r   r   rj   r   rk   rl   rw   r   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A}t |||\}}d| }| j ||}| |d  | |ttj | 	|ttj | j |}| 
|| W d    d S 1 sOw   Y  d S Nr   r   Tr   .r   )	r   r3   r   r   r   r   relnamer+   r   r   r   r   test_find_relative_module  s   "z'FindSpecTests.test_find_relative_modulec              	   C   s   d}d}t j|ddC}t |||\}}d| }| t | j | W d    n1 s/w   Y  | |ttj	 | |ttj	 W d    d S 1 sQw   Y  d S r   )
r   r   r   r'   r(   r   rw   r   rk   rl   )r   r3   r   r   r   r   r   r   r   r   )test_find_relative_module_missing_package  s   "z7FindSpecTests.test_find_relative_module_missing_packagec                 C   <   |  t | jd W d    d S 1 sw   Y  d S )Nzmodule.name)r'   ModuleNotFoundErrorr   r   rs   r   r   r   test_find_submodule_in_module  s   "z+FindSpecTests.test_find_submodule_in_moduleN)r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r     s    	
r   )r   r   r%   c                   @   s   e Zd Zdd Zdd ZdS )MagicNumberTestsc                 C   s   |  t| jjd d S )N   )r   lenr   MAGIC_NUMBERrs   r   r   r   test_length     zMagicNumberTests.test_lengthc                 C   s   |  | jjd d S )Ns   
)r   r   r   endswithrs   r   r   r   test_incorporates_rn!  r   z%MagicNumberTests.test_incorporates_rnN)r   r   r   r   r   r   r   r   r   r     s    r   c                   @   s  e Zd Z	 ejjZeejjdu 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ejdkoFejdkddd Zeejjdu ddd Zeejjdu 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/d0 Z!d1d2 Z"eejjdu dd3d4 Z#eejjdu dd5d6 Z$eejjdu dd7d8 Z%eejjdu dd9d: Z&eejjdu dd;d< Z'dS )=PEP3147TestsNz1requires sys.implementation.cache_tag not be Nonec              	   C   sJ   t jdddd}t jddddd| j}| | jj|dd| d S 	Nfoobarbazqux.py__pycache__
qux.{}.pycr   optimizationosr   r   formattagr   r   cache_from_sourcer   r   r   r   r   r   test_cache_from_source1  s   
z#PEP3147Tests.test_cache_from_sourcec              	   C   s|   t tjdd , | t | jd W d    n1 sw   Y  W d    d S W d    d S 1 s7w   Y  d S )N	cache_tagzwhatever.py)r   	swap_attrrk   implementationr'   NotImplementedErrorr   r  rs   r   r   r   #test_cache_from_source_no_cache_tag<  s   "z0PEP3147Tests.test_cache_from_source_no_cache_tagc                 C   sB   t jdd}t jddd| j}| | jj|dd| d S )Nzfoo.barfiler   z
file{}.pycr   r   r   r  r   r   r   test_cache_from_source_no_dotB  s   

z*PEP3147Tests.test_cache_from_source_no_dotc              	   C   s@  t jdddd}t / td | | j|d| jj|dd | | j|d	| jj|d
d W d    n1 s?w   Y  t N td | 	t
 | j|d W d    n1 sew   Y  | 	t
 | j|d	 W d    n1 sw   Y  W d    d S W d    d S 1 sw   Y  d S )Nr   r   r   r   rT   Fr   r   Tr   r\   )r   r   r   rU   rV   rW   r   r   r  r'   rX   r   r   r   r   r   %test_cache_from_source_debug_overrideJ  s*   



"z2PEP3147Tests.test_cache_from_source_debug_overridec                 C   6   d}t jdd| j}| | jj|dd| d S Nfoo.pyr   z
foo.{}.pycr   r   r   r  r   r   r   test_cache_from_source_cwd[  s
   z'PEP3147Tests.test_cache_from_source_cwdc              	   C   s   t jddd}G dd d}t V td | | j|g | jj|dd | | j|d	g| jj|d
d | 	t
 | jd|  W d    n1 sTw   Y  W d    d S W d    d S 1 slw   Y  d S )Nr   r   zbaz.pyc                   @   r   )z=PEP3147Tests.test_cache_from_source_override.<locals>.Bearishc                 S   rd   r   )RuntimeErrorrs   r   r   r   r~   h  r_   zFPEP3147Tests.test_cache_from_source_override.<locals>.Bearish.__bool__Nr   r   r   r   r   Bearishg  r#   r  rT   r   r      r   z/foo/bar/baz.py)r   r   r   rU   rV   rW   r   r   r  r'   r  )r   r   r  r   r   r   test_cache_from_source_overridea  s    

"z,PEP3147Tests.test_cache_from_source_overridec                 C   r  r  r   r  r   r   r   0test_cache_from_source_optimization_empty_strings  s
   z=PEP3147Tests.test_cache_from_source_optimization_empty_stringc                 C   s|   d}t jj}tjdd| j}|dkr|d }n|dkr&|d| }n
d|}| | | 	| j
j|d d	| d S )
Nr  r   foo.{}r   .pyc   .opt-{}.pycz){!r} is a non-standard optimization levelr   )rk   flagsoptimizer   r   r   r   r  ZskipTestr   r   r  )r   r   Zoptimization_levelalmost_expectr   msgr   r   r   (test_cache_from_source_optimization_Nonez  s   


z5PEP3147Tests.test_cache_from_source_optimization_Nonec                 C   s   d}t jt j }tjdd| j}| jj	||d}| 
||d|  | 
| jj	|dd|d  | t | jj	|dd W d    d S 1 sMw   Y  d S )	Nr  r   r  r   r  ru   z.opt-42.pyczpath/is/bad)stringascii_lettersdigitsr   r   r   r   r  r   r  r   r'   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   s   t  4 t d | t | jjdddd W d    n1 s#w   Y  W d    d S W d    d S 1 s;w   Y  d S )NrT   r  Fr   r   )rU   rV   rW   r'   	TypeErrorr   r  rs   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   s$   |  | jjdddd| j d S )Nz\foo\bar\baz/qux.pyr   r   z#\foo\bar\baz\__pycache__\qux.{}.pyc)r   r   r  r   r  rs   r   r   r   )test_sep_altsep_and_sep_cache_from_source  s   
z6PEP3147Tests.test_sep_altsep_and_sep_cache_from_sourcec              	   C   sH   t dddd}tjddddd| j}| | jj	|dd| d S r   )
pathlibPurePathr   r   r   r   r  r   r   r  r  r   r   r   $test_cache_from_source_path_like_arg  s   
z1PEP3147Tests.test_cache_from_source_path_like_argz4requires sys.implementation.cache_tag to not be Nonec              	   C   sF   t jddddd| j}t jdddd}| | j|| d S Nr   r   r   r   r   r   r   r   r   r   r  r   r   source_from_cacher  r   r   r   test_source_from_cache  s
   
z#PEP3147Tests.test_source_from_cachec              	   C   s   t jddd}ttjdd , | t | j	
| W d    n1 s'w   Y  W d    d S W d    d S 1 s?w   Y  d S )Nr   r   zwhatever.pycr  )r   r   r   r   r  rk   r  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      |  t| jjd d S )Nz/foo/bar/bazqux.pycr'   r   r   r.  rs   r   r   r   test_source_from_cache_bad_path  s   
z,PEP3147Tests.test_source_from_cache_bad_pathc                 C   r1  )Nzfoo.cpython-32.pycr2  rs   r   r   r   test_source_from_cache_no_slash     
z,PEP3147Tests.test_source_from_cache_no_slashc                 C   r1  )Nz__pycache__/foo.pycr2  rs   r   r   r   #test_source_from_cache_too_few_dots  r5  z0PEP3147Tests.test_source_from_cache_too_few_dotsc                 C   r   )Nz(__pycache__/foo.cpython-32.opt-1.foo.pycr2  rs   r   r   r   $test_source_from_cache_too_many_dots  s
   "z1PEP3147Tests.test_source_from_cache_too_many_dotsc                 C   r1  )Nz"__pycache__/foo.cpython-32.foo.pycr2  rs   r   r   r   test_source_from_cache_not_opt     z+PEP3147Tests.test_source_from_cache_not_optc                 C   r1  )Nz/foo/bar/foo.cpython-32.foo.pycr2  rs   r   r   r   $test_source_from_cache_no__pycache__  r9  z1PEP3147Tests.test_source_from_cache_no__pycache__c                 C   s.   t jdd| j}| | j|d d S )Nr   zfoo.{}.opt-1.pycr  r-  r  r   r   r   )test_source_from_cache_optimized_bytecode  s   z6PEP3147Tests.test_source_from_cache_optimized_bytecodec                 C   sR   t jdd| j}| t | j| W d    d S 1 s"w   Y  d S )Nr   zfoo.{}.opt-.pyc)	r   r   r   r   r  r'   r   r   r.  r  r   r   r   +test_source_from_cache_missing_optimization  s   "z8PEP3147Tests.test_source_from_cache_missing_optimizationc              	   C   sD   t ddddd| j}tjdddd}| | j	|| d S r,  )
r)  r*  r   r  r   r   r   r   r   r.  r  r   r   r   $test_source_from_cache_path_like_arg  s
   
z1PEP3147Tests.test_source_from_cache_path_like_argc                    s&  t jt jjddt jt jjddt jt jjddt jj g}d t jdkr9d  fdd	|D }|d
dg7 }|D ]U}| j|dE  t jt jjdddd }t j|dddd| j}t	| | 
| jj|dd| W d    n1 s|w   Y  W d    q;1 sw   Y  q;d S )Ntmpbytecodeu   ☃ztrailing-slashr   ntzC:c                    s   g | ]}  | qS r   r   ).0prefixdriver   r   
<listcomp>  s    zOPEP3147Tests.test_cache_from_source_respects_pycache_prefix.<locals>.<listcomp>z
\\?\C:\fooz\\localhost\c$\bar)r   r   r   r   r   r   r   )r   r   r   sepr3   ZsubTestr   r  r   temporary_pycache_prefixr   r  )r   Zpycache_prefixespycache_prefixr   r   r   rC  r   .test_cache_from_source_respects_pycache_prefix  s:   


z;PEP3147Tests.test_cache_from_source_respects_pycache_prefixc              
   C   s   t jt jjdd}t jdddd}t jt  d t jj }t j|t jt  |dddd| j d	}t	| | 
| jj|d
d| W d    d S 1 sUw   Y  d S )Nr>  r?  r   r   r   r   r   qux.r  r   r   )r   r   r   rF  
splitdrivegetcwdrelpathr  r   rG  r   r  )r   rH  r   rootr   r   r   r   7test_cache_from_source_respects_pycache_prefix_relative  s   "zDPEP3147Tests.test_cache_from_source_respects_pycache_prefix_relativec              	   C   s   t jt jjdd}t j|dddd| j d}t jt jjdddd}t| | | j|| W d    d S 1 s@w   Y  d S )	Nr>  r?  r   r   r   rJ  r  r   	r   r   r   rF  r  r   rG  r   r.  r   rH  r   r   r   r   r   ,test_source_from_cache_inside_pycache_prefix'  s   "z9PEP3147Tests.test_source_from_cache_inside_pycache_prefixc              	   C   s   t jt jjdd}t jddddd| j d}t jdddd	}t| | | j|| W d    d S 1 s=w   Y  d S )
Nr>  r?  r   r   r   r   rJ  r  r   rP  rQ  r   r   r   -test_source_from_cache_outside_pycache_prefix4  s   "z:PEP3147Tests.test_source_from_cache_outside_pycache_prefix)(r   r   r   rk   r  r  r  unittestZskipIfr  r	  r  r  r  r  r  r  r#  r%  
skipUnlessr   rF  altsepr(  r+  r/  r0  r3  r4  r6  r7  r8  r:  r;  r<  r=  rI  rO  rR  rS  r   r   r   r   r   +  sr    
	






r   c                   @   s*   e Zd Z	 eejjdv ddd ZdS )r   )	candidatefinalz8only applies to candidate or final python release levelsc                 C   s2   d}t tjjd d d}d}| ||| d S )Nio  r  littlea  To avoid breaking backwards compatibility with cached bytecode files that can't be automatically regenerated by the current user, candidate and final releases require the current  importlib.util.MAGIC_NUMBER to match the expected magic number in this test. Set the expected magic number in this test to the current MAGIC_NUMBER to continue with the release.

Changing the MAGIC_NUMBER for a maintenance release requires discussion in python-dev and notification of community stakeholders.)int
from_bytesr   r   r   r   )r   ZEXPECTED_MAGIC_NUMBERactualr  r   r   r   test_magic_numberK  s
   z"MagicNumberTests.test_magic_numberN)	r   r   r   rT  rU  rk   version_inforeleaselevelr]  r   r   r   r   r   G  s    
__main__)2r   r   Zimport_importlibr/   r   r%   Zimportlib_utilimportlib.utilr   r   r)  r   rk   r$   r   r1   rT  Zunittest.mockrU   r   Z	test_bothZFrozen_DecodeSourceBytesTestsZSource_DecodeSourceBytesTestsr   ZFrozen_ModuleFromSpecTestsZSource_ModuleFromSpecTestsrS   ZFrozen_ModuleForLoaderTestsZSource_ModuleForLoaderTestsr   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_PEP3147TestsZTestCaser   mainr   r   r   r   <module>   s~    




J <,# 
  )