a
    äze1u  ć                   @   sŖ  d dl Z d dlZd dlZd dl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mZmZmZm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mZmZ zd dlZW n eyŹ   dZY n0 dZeeddZdZd	d
 Zdd Z e ” Z!eee!e"eZ#dZ$dZ%dZ&ej' (d”Z)ej' (d”Z*ej+ ,e$d ”Z-dZ.G dd dej/Z0G dd de0Z1e
 2” G dd de1Z3G dd dej/Z4dd Z5e6dkr¦e 7”  dS )é    N)Śsupport)ŚZipFileŚZipInfoŚ
ZIP_STOREDŚZIP_DEFLATED)Ś
extract_tbŚextract_stackŚprint_tbzHdef get_name():
    return __name__
def get_file():
    return __file__
ś<???>Śexecz def do_raise(): raise TypeError
c                 C   s6   t  | ”}tjjt ddt|d@ |d@ ” | }|S )Nz<iLLr   ģ   ’’ )ŚmarshalŚdumpsŚ	importlibŚutilŚMAGIC_NUMBERŚstructŚpackŚint)ŚcoŚmtimeŚsizeŚdataŚpyc© r   ś)/usr/lib/python3.9/test/test_zipimport.pyŚmake_pyc#   s    
’’žr   c                 C   s   |   tjd”S )NŚ.)ŚreplaceŚosŚsep)Śpathr   r   r   Śmodule_path_to_dotted_name*   s    r"   ZziptestmoduleZziptestpackageZziptestpackage2Z	junk95142zjunk95142.zipś.pyś.pycc                   @   s   e Zd Zdd Zdd ZdS )ŚImportHooksBaseTestCasec                 C   sH   t jd d  | _t jd d  | _t jd d  | _t j ”  t ” | _d S ©N)	Śsysr!   Ś	meta_pathŚ
path_hooksŚpath_importer_cacheŚclearr   Zmodules_setupŚmodules_before©Śselfr   r   r   ŚsetUp=   s
    
zImportHooksBaseTestCase.setUpc                 C   sJ   | j tj d d < | jtjd d < | jtjd d < tj ”  tj| j  d S r&   )	r!   r'   r(   r)   r*   r+   r   Zmodules_cleanupr,   r-   r   r   r   ŚtearDownD   s
    
z ImportHooksBaseTestCase.tearDownN)Ś__name__Ś
__module__Ś__qualname__r/   r0   r   r   r   r   r%   ;   s   r%   c                   @   s  e Zd ZeZdd ZefddZefddZ	dd Z
d	d
 Zdd Zdd Zdd Zdd Zej d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/d0 Z d1d2 Z!d3d4 Z"d5d6 Z#d7d8 Z$d9d: Z%d;d< Z&d=d> Z'd?d@ Z(dAdB Z)dCdD Z*dEdF Z+dGdH Z,dIdJ Z-e .e/j0dKu dL”dMdN Z1dOdP Z2dQdR Z3dSdT Z4dUdV Z5dKS )WŚUncompressedZipImportTestCasec                 C   s    t  ”  tj ”  t | ” d S r&   )Ś	linecacheŚ
clearcacheŚ	zipimportŚ_zip_directory_cacher+   r%   r/   r-   r   r   r   r/   P   s    
z#UncompressedZipImportTestCase.setUpc           	   	   C   s²   |   tj|” | ” D ]\}\}}tj ||”}|d tjkrVtj |”s¬t 	|” qtj 
|”}tj |”sxt 	|” t|d}| |” W d    q1 s¢0    Y  qd S )Né’’’’Śwb)Ś
addCleanupr   ŚrmtreeŚitemsr   r!   Śjoinr    ŚisdirŚmakedirsŚdirnameŚopenŚwrite)	r.   ŚfilesZdirNameŚnamer   r   r!   ZdnameŚfpr   r   r   ŚmakeTreeW   s    
z&UncompressedZipImportTestCase.makeTreec                 K   s  |   tj|” t|dd}| ” D ]0\}\}}t|t |”}| j|_	| 
||” q"| dd ”}	|	d urn|	|_W d    n1 s0    Y  | dd ”}
|
d urt|d}| ” }W d    n1 sŹ0    Y  t|d$}| |
” | |” W d    n1 s
0    Y  d S )NŚwŚcommentŚstuffŚrbr:   )r;   r   Śunlinkr   r=   r   ŚtimeŚ	localtimeŚcompressionŚcompress_typeŚwritestrŚgetrI   rB   ŚreadrC   )r.   rD   ZzipNameŚkwŚzrE   r   r   ŚzinforI   rJ   Śfr   r   r   ŚmakeZiph   s     $
&
z%UncompressedZipImportTestCase.makeZipc                 O   sz   | j |fi |¤ tj dt” t d |””}| d”}|d urJ|| |rv| 	” }|  
|tjjtg|¢R  | ” d S )Nr   r   Ścall)rX   r'   r!   ŚinsertŚTEMP_ZIPr   Śimport_moduler>   rR   Zget_fileŚassertEqualr   )r.   Zexpected_extrD   ŚmodulesrT   ŚmodrY   Śfiler   r   r   ŚdoTest   s    
’’z$UncompressedZipImportTestCase.doTestc                 C   s   dt jv r|  d” dt jv r&t jd= dttfi}z|  d|d” W n& tyj   | jt	krf|  
d” Y n0 | jtkr|  
d” d S )NŚzlibzzlib is a builtin modulezzlib.pyr#   z&expected test to not raise ImportErrorz"expected test to raise ImportError)r'   Śbuiltin_module_namesZskipTestr^   ŚNOWŚtest_srcra   ŚImportErrorrO   r   Śfailr   ©r.   rD   r   r   r   ŚtestAFakeZlib   s    




z+UncompressedZipImportTestCase.testAFakeZlibc                 C   s"   t d ttfi}|  d|t ” d S ©Nr#   ©ŚTESTMODrd   re   ra   rh   r   r   r   ŚtestPy°   s    z$UncompressedZipImportTestCase.testPyc                 C   s"   t t ttfi}|  t|t ” d S r&   )rl   Śpyc_extrd   Śtest_pycra   rh   r   r   r   ŚtestPyc“   s    z%UncompressedZipImportTestCase.testPycc                 C   s.   t d ttft t ttfi}|  t|t ” d S rj   )rl   rd   re   rn   ro   ra   rh   r   r   r   ŚtestBothø   s    ’z&UncompressedZipImportTestCase.testBothc                    sj   d}t j |”}t j t|dd|d”}td tdftd td |fi} fd	d
} jd |t|d d S )Nó   state = 'old'ś???r   Fr#   śstate = 'new'r$   é   c                    s      | jd” d S )NŚold©r]   Śstate©r_   r-   r   r   ŚcheckĒ   s    zFUncompressedZipImportTestCase.testUncheckedHashBasedPyc.<locals>.check©rY   ©	r   r   Śsource_hashŚ_bootstrap_externalŚ_code_to_hash_pycŚcompilerl   rd   ra   ©r.   Śsourcer}   ŚbytecoderD   rz   r   r-   r   ŚtestUncheckedHashBasedPyc½   s    
ż’z7UncompressedZipImportTestCase.testUncheckedHashBasedPycz_imp.check_hash_based_pycsŚalwaysc                    sj   d}t j |”}t j t|dd|d”}td tdftd td |fi} fd	d
} jd |t|d d S )Nrr   rs   r   Fr#   rt   r$   ru   c                    s      | jd” d S )NŚnewrw   ry   r-   r   r   rz   Ö   s    zOUncompressedZipImportTestCase.test_checked_hash_based_change_pyc.<locals>.checkr{   r|   r   r   r-   r   Ś"test_checked_hash_based_change_pycĖ   s    
ż’z@UncompressedZipImportTestCase.test_checked_hash_based_change_pycc                 C   s"   t d tdfi}|  d |t ” d S )Nr#   Ś )rl   rd   ra   rh   r   r   r   ŚtestEmptyPyŚ   s    z)UncompressedZipImportTestCase.testEmptyPyc                 C   sF   t t}|d  dN  < td ttftt t|fi}|  d|t” d S )Nr   é   r#   ©Ś	bytearrayro   rl   rd   re   rn   ra   ©r.   Zbadmagic_pycrD   r   r   r   ŚtestBadMagicŽ   s    ’z*UncompressedZipImportTestCase.testBadMagicc                 C   s\   t t}|d  dN  < tt t|fi}z|  d|t” W n tyL   Y n0 |  d” d S )Nr   r   r#   z)expected ImportError; import from bad pyc)r   ro   rl   rn   rd   ra   rf   rg   r   r   r   r   ŚtestBadMagic2ę   s    z+UncompressedZipImportTestCase.testBadMagic2c                 C   sF   t t}|d  dN  < td ttftt t|fi}|  d|t” d S )Né   é   r#   r   )r.   Zbadtime_pycrD   r   r   r   ŚtestBadMTimeņ   s    ’z*UncompressedZipImportTestCase.testBadMTimec                 C   s>   t tdtt}td ttftt t|fi}|  d|t” d S )Nr   r#   )r   Śtest_coŚlenre   rl   rd   rn   ra   )r.   Ztwenty_thirty_eight_pycrD   r   r   r   Śtest2038MTimeū   s
    ’z+UncompressedZipImportTestCase.test2038MTimec                 C   sB   t tj }|d t ttf|t t ttfi}|  t|t t” d S ©NŚ__init__)ŚTESTPACKr   r    rn   rd   ro   rl   ra   )r.   ŚpackdirrD   r   r   r   ŚtestPackage  s
    
’z)UncompressedZipImportTestCase.testPackagec                 C   sb   t tj }|t tj }|d t ttf|d t ttf|t t ttfi}|  t|t tt” d S r   )	r   r   r    Ś	TESTPACK2rn   rd   ro   rl   ra   ©r.   r   Śpackdir2rD   r   r   r   ŚtestSubPackage	  s    
žz,UncompressedZipImportTestCase.testSubPackagec                 C   sR   t tj }|t tj }|tdf|tdf|t t ttfi}|  t|t tt” d S ©Nr   )	r   r   r    r   rd   rl   rn   ro   ra   r   r   r   r   ŚtestSubNamespacePackage  s    
žz5UncompressedZipImportTestCase.testSubNamespacePackagec                 C   sR  t tj }|t tj }|t  d tj }|tdf|t t ttf|tdf|tdf|t t ttf|t d t ttf|t t ttfi}|tdf|t d t ttf|tdf|t d t ttf|t t ttfi}tj 	d”}|  
||” t}|  ||” tj d|” tj d|” t t ”}|  dt|j” |j\}	}
|  tj t”|	 tj”d ” |  d|
 tj”d ” t | tjd”d d	 ”}|  d
t|j” t|jd  dtj ”d
 }|  |d d	 |” t d t tf””}|  d|j tj”d ” t d t td f””}|  tj t”|j tj”d ” d t tf”}t |”}|  dt|j” |j\}	}
|  tj t”|	 tj”d ” |  d|
 tj”d ” t d |tf””}|  tj t”|j tj”d ” t d |td f””}|  tj t”|j tj”d ” t d |td f””}|  d|j tj”d ” d S )NŚ3r   Ś2ś	path1.zipr   r   éž’’’r   r9   é   éż’’’éü’’’)r   r   r    r   rd   rl   rn   ro   r!   ŚabspathrX   ŚTEMP_DIRrG   r'   rZ   r   r\   r]   r   Ś__path__ŚbasenameŚsplitr   Ślistr>   Ś__file__)r.   r   r   Śpackdir3Śfiles1Śfiles2Śzip1Śzip2r_   Śp1Śp2ŚmpathŚsubpkgr   r   r   ŚtestMixedNamespacePackage  sl    
śü

 ’

 ’’z7UncompressedZipImportTestCase.testMixedNamespacePackagec                 C   s2  t tj }|t tj }|t  d tj }|tdf|t t ttf|tdf|tdf|t t ttf|t d t ttf|t t ttfi}tj 	d”}|  
||” |tdf|t d t ttf|tdf|t d t ttf|t t ttfi}tj 	d”}|  
||” tj d|” tj d|” t t ”}|  dt|j” |j\}	}
|  d|	 tj”d ” |  d|
 tj”d ” t | tjd	”d d
 ”}|  dt|j” t|jd  dtj ”d }|  |d d
 |” t d	 t tf””}|  d|j tj”d ” t d	 t td f””}|  d|j tj”d ” d	 t tf”}t |”}|  dt|j” |j\}	}
|  d|	 tj”d ” |  d|
 tj”d ” t d	 |tf””}|  d|j tj”d ” t d	 |td f””}|  d|j tj”d ” t d	 |td f””}|  d|j tj”d ” d S )Nr”   r   r£   r¢   z	path2.zipr   r   r¤   r   r9   r„   r¦   r§   )r   r   r    r   rd   rl   rn   ro   r!   rØ   rX   r'   rZ   r   r\   r]   r   rŖ   r¬   r   r­   r>   r®   )r.   r   r   rÆ   r°   r²   r±   r³   r_   r“   rµ   r¶   r·   r   r   r   ŚtestNamespacePackagek  s`    
śü



z2UncompressedZipImportTestCase.testNamespacePackagec              	   C   s  t tj }|t tj }|d t ttf|d t ttf|t t ttfdt ttfi}|  t	j
t” ttdP}| ” D ]6\}\}}t|t |”}| j|_d|_| ||” qzW d    n1 sĘ0    Y  t t”}	|  |	jt” |  |	 t ”d” |	 d”}
|  |
” |  |
tj” |  |
 d”” |
 d”}|  |
 d”|j ” |	 t ”}|  |	 t ”|j ” t! "t ”j#d }tj$ %tt ”}|  ||” |  |	 |d ”d” |  |	 |t ”d” |  |	 |t ”d” |t }t&|}t! "|”}|  '|t(j)v ” |  |	 *t ”d ” |  |	 *|”d ” |  |	 |”|j ” |j+}|  | *|”d ” |  | |”|j ” t ttj t  ”}|  |jt” |  |j,t tj ” d S )Nr   ZspamrH   s   spamTr   F)-r   r   r    r   rn   rd   ro   rl   r;   r   rL   r[   r   r=   r   rM   rN   rO   rP   rI   rQ   r7   Śzipimporterr]   ŚarchiveŚ
is_packageŚfind_moduleŚassertIsNotNoneŚassertIsInstanceŚassertFalseŚload_moduleŚget_filenamer®   r   r\   rŖ   r!   r>   r"   Ś
assertTruer'   r^   Ś
get_sourceŚ
__loader__Śprefix)r.   r   r   rD   rU   rE   r   r   rV   ŚziZfind_modŚload_modr_   Zexisting_pack_pathZexpected_path_pathŚmod_pathŚmod_nameŚloaderŚzi2r   r   r   ŚtestZipImporterMethods“  sX    
ż,





z4UncompressedZipImportTestCase.testZipImporterMethodsc                 C   sP  t tj }|t tj }|d t ttf|t t ttfi}|  t	j
t” ttdP}| ” D ]6\}\}}t|t |”}| j|_d|_| ||” q^W d    n1 sŖ0    Y  t ttj | ”}	|  |	jt” |  |	j|” |  |	 t”d” |	 t”}
|  |	 t”|
j” |  |	 ttj d ”d” |  |	 ttj t ”d” ttj | t }t |”}| t”}|  |” |   |tj” |  !| t”” | t”}|  | t”|j” ttj t }t"|}t# $|”}
|  %|t&j'v ” |  |	 (t”d ” |  |	 (|”d ” |  |	 |”|
j” |
j)}|  | (|”d ” |  | |”|
j” d S )Nr   rH   s   eggsTF)*r   r   r    r   rn   rd   ro   rl   r;   r   rL   r[   r   r=   r   rM   rN   rO   rP   rI   rQ   r7   rŗ   r]   r»   rĘ   r¼   rĮ   rĀ   r®   r½   r¾   ræ   rĄ   r"   r   r\   rĆ   r'   r^   rÄ   rÅ   )r.   r   r   rD   rU   rE   r   r   rV   rĒ   r_   Zpkg_pathrĢ   Zfind_mod_dottedrČ   rÉ   rŹ   rĖ   r   r   r   Ś$testZipImporterMethodsInSubDirectoryģ  sX    
’,
’’



’
zBUncompressedZipImportTestCase.testZipImporterMethodsInSubDirectoryc                 C   s   |   tjt” ttd>}| j|_d}tdd tdD }| ||” W d    n1 s\0    Y  t	 
t”}|  || |”” |  dt|” d S )NrH   ztestdata.datc                 s   s   | ]
}|V  qd S r&   r   )Ś.0Śxr   r   r   Ś	<genexpr>"  ó    z<UncompressedZipImportTestCase.testGetData.<locals>.<genexpr>é   zzipimporter object)r;   r   rL   r[   r   rO   ŚbytesŚrangerQ   r7   rŗ   r]   Śget_dataZassertInŚrepr)r.   rU   rE   r   rĒ   r   r   r   ŚtestGetData  s    *
z)UncompressedZipImportTestCase.testGetDatac                 C   sF   d}t t|ddtt|}tt t|fdtdfi}|  t|t” d S )Nz³if 1:  # indent hack
        def get_file():
            return __file__
        if __loader__.get_data("some.data") != b"some data":
            raise AssertionError("bad data")
r
   r   z	some.dataz	some data)r   r   rd   r   rl   rn   ra   )r.   Śsrcr   rD   r   r   r   ŚtestImporterAttr)  s    ’z.UncompressedZipImportTestCase.testImporterAttrc                 C   s\   d}t d t|fi}|  |” tj dt” t t ”}|  	| 
d”d” |  t|j
d” d S )Nz[if 1:  # indent hack
        def test(val):
            assert(val)
            return val
r#   r   r„   F)rl   rd   rX   r'   r!   rZ   r[   r   r\   r]   ŚtestŚassertRaisesŚAssertionError)r.   rŁ   rD   r_   r   r   r   ŚtestDefaultOptimizationLevel4  s    

z:UncompressedZipImportTestCase.testDefaultOptimizationLevelc                 C   s&   t d ttfi}| jd|t dd d S )Nr#   s6  Some StuffSome StuffSome StuffSome StuffSome StuffSome StuffSome StuffSome StuffSome StuffSome StuffSome StuffSome StuffSome StuffSome StuffSome StuffSome StuffSome StuffSome StuffSome StuffSome StuffSome StuffSome StuffSome StuffSome StuffSome StuffSome StuffSome StuffSome StuffSome StuffSome StuffSome Stuff)rJ   rk   rh   r   r   r   ŚtestImport_WithStuffA  s    
’z2UncompressedZipImportTestCase.testImport_WithStuffc                 C   s   |   t |”t” d S r&   )r]   ŚinspectZ	getsourcere   )r.   Śmoduler   r   r   ŚassertModuleSourceH  s    z0UncompressedZipImportTestCase.assertModuleSourcec                 C   s(   t d ttfi}| jd|t | jd d S ©Nr#   r{   )rl   rd   re   ra   rā   rh   r   r   r   ŚtestGetSourceK  s    z+UncompressedZipImportTestCase.testGetSourcec                 C   sL   t ttddttt}td ttftt t|fi}| jt|t| jd d S )Nr
   r   r#   r{   )	r   r   re   rd   r   rl   rn   ra   rā   )r.   r   rD   r   r   r   ŚtestGetCompiledSourceO  s
    ’z3UncompressedZipImportTestCase.testGetCompiledSourcec                 C   s.   t d ttfdtdfi}| jd|t |d d S )Nr#   śxyz.txtz>>> log.append(True)
r{   rk   )r.   ŚcallbackrD   r   r   r   Ś
runDoctestU  s    ’z(UncompressedZipImportTestCase.runDoctestc                 C   sL   g }t jd  }t _zt jd|dt d W |t _n|t _0 |  |dg” d S ©Nrę   T)ŚpackageZmodule_relativeZglobs)ŚdoctestZmasterZtestfileŚlocalsr]   )r.   rį   ŚlogZ
old_masterr   r   r   ŚdoDoctestFileZ  s    žz+UncompressedZipImportTestCase.doDoctestFilec                 C   s   |   | j” d S r&   )rč   rī   r-   r   r   r   ŚtestDoctestFilef  s    z-UncompressedZipImportTestCase.testDoctestFilec                 C   s.   g }t jd|dt d ”  |  |dg” d S ré   )rė   ZDocFileTestrģ   Śrunr]   )r.   rį   rķ   r   r   r   ŚdoDoctestSuitei  s    ž
z,UncompressedZipImportTestCase.doDoctestSuitec                 C   s   |   | j” d S r&   )rč   rń   r-   r   r   r   ŚtestDoctestSuiteq  s    z.UncompressedZipImportTestCase.testDoctestSuitec           	   
   C   s¼   z|  ”  W n¢ ty® } z|jj}t|dd \}}}}|  |t ” ” t|j	dd \}}}}|  |t ” ” t
 ” }t|d| |  | ”  t”” W Y d }~nd }~0 0 tdd S )Nr„   r   zThis ought to be impossible)Zdo_raiseŚ	ExceptionŚ__traceback__Śtb_nextr   r]   Ś	raise_srcŚstripr   Śtb_frameŚioŚStringIOr	   rĆ   ŚgetvalueŚendswithrŻ   )	r.   rį   ŚeŚtbrW   ŚlnoŚnŚlineŚsr   r   r   ŚdoTracebackt  s    *z)UncompressedZipImportTestCase.doTracebackc                 C   s(   t d ttfi}| jd |t | jd d S rć   )rl   rd   rö   ra   r  rh   r   r   r   ŚtestTraceback  s    z+UncompressedZipImportTestCase.testTracebackNzneed an unencodable filenamec                 C   s~   t jd }|  t j|” t|d8}ttd t t	”}| j
|_| |t” W d    n1 s`0    Y  t |” t” d S ©Nz.ziprH   r#   )r   ŚTESTFN_UNENCODABLEr;   rL   r   r   rl   rM   rN   rd   rO   rP   rQ   re   r7   rŗ   rĮ   ©r.   ŚfilenamerU   rV   r   r   r   ŚtestUnencodable  s    
*z-UncompressedZipImportTestCase.testUnencodablec                 C   s  t jd }|  t j|” t|d8}ttd t t	”}| j
|_| |t” W d    n1 s`0    Y  t |” t t |”” |  t”$ t tt |”” W d    n1 sø0    Y  |  t”$ t tt |”” W d    n1 sö0    Y  d S r  )r   ZTESTFNr;   rL   r   r   rl   rM   rN   rd   rO   rP   rQ   re   r7   rŗ   r   ŚfsencoderÜ   Ś	TypeErrorr   Ś
memoryviewr  r   r   r   ŚtestBytesPath  s    
*
2z+UncompressedZipImportTestCase.testBytesPathc                 C   s&   t d ttfi}| jd|t dd d S )Nr#   s   comment©rI   rk   rh   r   r   r   ŚtestComment¤  s    z)UncompressedZipImportTestCase.testCommentc                 C   s(   t d ttfi}| jd|t ddd d S )Nr#   s@  cruftcruftcruftcruftcruftcruftcruftcruftcruftcruftcruftcruftcruftcruftcruftcruftcruftcruftcruftcruftcruftcruftcruftcruftcruftcruftcruftcruftcruftcruftcruftcruftcruftcruftcruftcruftcruftcruftcruftcruftcruftcruftcruftcruftcruftcruftcruftcruftcruftcruftcruftcruftcruftcruftcruftcruftcruftcruftcruftcruftcruftcruftcruftcrufts   hi)rJ   rI   rk   rh   r   r   r   ŚtestBeginningCruftAndCommentØ  s    z:UncompressedZipImportTestCase.testBeginningCruftAndCommentc                 C   s*   t d ttfi}| jd|t dd d d S )Nr#   ó   ci’’  r  rk   rh   r   r   r   ŚtestLargestPossibleComment¬  s    z8UncompressedZipImportTestCase.testLargestPossibleComment)6r1   r2   r3   r   rO   r/   r©   rG   r[   rX   ra   ri   rm   rp   rq   r   ŚunittestZmockZpatchr   r   r   r   r   r   r   r   r    rø   r¹   rĶ   rĪ   rŲ   rŚ   rŽ   rß   rā   rä   rå   rč   rī   rļ   rń   rņ   r  r  ZskipIfr   r  r	  r  r  r  r  r   r   r   r   r4   L   s\    
	
MI81’
	r4   c                   @   s   e Zd ZeZdS )ŚCompressedZipImportTestCaseN)r1   r2   r3   r   rO   r   r   r   r   r  ±  s   r  c                   @   sT   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S )ŚBadFileZipImportTestCasec                 C   s   |   tjtj|” d S r&   )rÜ   r7   ŚZipImportErrorrŗ   )r.   r  r   r   r   ŚassertZipFailure·  s    ’z)BadFileZipImportTestCase.assertZipFailurec                 C   s   |   d” d S )NZAdfjdkFJKDFJjdklfjs©r  r-   r   r   r   Ś
testNoFile»  s    z#BadFileZipImportTestCase.testNoFilec                 C   s   |   d” d S r   r  r-   r   r   r   ŚtestEmptyFilename¾  s    z*BadFileZipImportTestCase.testEmptyFilenamec                 C   sB   |   ttjd ” | j ttjtd d |   ttjtt t”” d S )N)Zkwd)rÜ   r  r7   rŗ   rl   r­   r   r
  r-   r   r   r   ŚtestBadArgsĮ  s
    
’z$BadFileZipImportTestCase.testBadArgsc                 C   s   |   dd ” d S )NŚAič  r  r-   r   r   r   ŚtestFilenameTooLongĒ  s    z,BadFileZipImportTestCase.testFilenameTooLongc                 C   s"   t  t” t  t” |  t” d S r&   )r   rL   rl   Zcreate_empty_filer  r-   r   r   r   ŚtestEmptyFileŹ  s    

z&BadFileZipImportTestCase.testEmptyFilec              
   C   s   t  t” t ttjd”}zZt |” |  tj	”}t 
t” W d    n1 sR0    Y  W t td” t  t” nt td” t  t” 0 d S )Nr   i¶  )r   rL   rl   r   rB   ŚO_CREATŚcloserÜ   r7   r  rŗ   Śchmod)r.   ŚfdŚcmr   r   r   ŚtestFileUnreadableĻ  s    

*’z+BadFileZipImportTestCase.testFileUnreadablec                 C   s4   t  t” ttd}| d” | ”  |  t” d S )Nśw+Zaaaaaaaaaaaaaaaaaaaaaa)r   rL   rl   rB   rC   r   r  )r.   rF   r   r   r   ŚtestNotZipFileŻ  s
    


z'BadFileZipImportTestCase.testNotZipFilec                 C   s*  t  t” ttd}| t dd”” | d” | ”  t 	t”}zÖ|  
t|jd ” |  
t|jd ” |  
t|jd ” |  
t|jd ” |  
t|jd ” |  
t|jd ” tj}|  | d”d ” |  
||jd” |  
||jd” |  
t|jd” |  
||jd” |  
||jd” W tj ”  ntj ”  0 d S )Nr%  z=IiPKZaaaaaaaaaaaaaaaaaaŚabc)r   rL   rl   rB   rC   r   r   r   r7   rŗ   rÜ   r  r½   rĮ   r¼   Śget_coderÖ   rÄ   r  r]   ŚOSErrorr8   r+   )r.   rF   rU   Śerrorr   r   r   Ś_testBogusZipFileå  s*    



z*BadFileZipImportTestCase._testBogusZipFileN)r1   r2   r3   r  r  r  r  r  r  r$  r&  r+  r   r   r   r   r  ¶  s   r  c                   C   s   t  t” d S r&   )r   rL   rl   r   r   r   r   ŚtearDownModule  s    r,  Ś__main__)8r'   r   r   r   Śimportlib.utilr   rM   r  Zunittest.mockrŪ   r   Śzipfiler   r   r   r   r7   r5   rė   rą   rł   Ś	tracebackr   r   r	   rb   rf   re   r   r   rö   r   r"   rd   r   ro   rl   r   r   r!   rØ   r©   r[   r   Ścache_from_sourceZpyc_filern   ZTestCaser%   r4   Zrequires_zlibr  r  r,  r1   Śmainr   r   r   r   Ś<module>   s\   
    iK
