B
    u9aä  ã               @   s    d dl mZ e dd¡ 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 ed ZdZG d	d
„ d
ejƒZG dd„ dejƒZedkrœe ¡  dS )é    )ÚsupportZextralargefilez>test requires loads of disk-space bytes and a long time to runN)ÚTemporaryFile)ÚTESTFNÚrequires_zlibÚ2é<   c               @   s8   e Zd Zdd„ Zdd„ Zdd„ Zedd„ ƒZd	d
„ ZdS )ÚTestsWithSourceFilec             C   sF   dd„ t dƒD ƒ}d |¡ d¡| _ttdƒ}| | j¡ | ¡  d S )Nc             s   s   | ]}d | V  qdS )zTest of zipfile line %d.N© )Ú.0Úir	   r	   ú$/usr/lib/python3.7/test_zipfile64.pyú	<genexpr>   s    z,TestsWithSourceFile.setUp.<locals>.<genexpr>i@B Ú
ÚasciiÚwb)ÚrangeÚjoinÚencodeÚdataÚopenr   ÚwriteÚclose)ÚselfZline_genÚfpr	   r	   r   ÚsetUp   s
    
zTestsWithSourceFile.setUpc             C   s  t  |d|¡}dt| jƒ }t ¡ t }xZt|ƒD ]N}| d| | j¡ |t ¡ kr2t ¡ t }t	d||f t
jd t
j ¡  q2W | ¡  t  |d|¡}x`t|ƒD ]T}|  | d| ¡| j¡ |t ¡ kr¤t ¡ t }t	d||f t
jd t
j ¡  q¤W | ¡  d S )NÚwl        ztestfn%dz/  zipTest still writing %d of %d, be patient...)ÚfileÚrz/  zipTest still reading %d of %d, be patient...)ÚzipfileÚZipFileÚlenr   ÚtimeZ	monotonicÚ_PRINT_WORKING_MSG_INTERVALr   ÚwritestrÚprintÚsysÚ
__stdout__Úflushr   ÚassertEqualÚread)r   ÚfZcompressionZzipfpZ	filecountZ	next_timeZnumr	   r	   r   ÚzipTest&   s,    zTestsWithSourceFile.zipTestc          	   C   s>   t ƒ  }|  |tj¡ |  |j¡ W d Q R X |  ttj¡ d S )N)r   r+   r   Z
ZIP_STOREDÚassertFalseÚclosedÚTESTFN2)r   r*   r	   r	   r   Ú
testStoredG   s    zTestsWithSourceFile.testStoredc          	   C   s>   t ƒ  }|  |tj¡ |  |j¡ W d Q R X |  ttj¡ d S )N)r   r+   r   ZZIP_DEFLATEDr,   r-   r.   )r   r*   r	   r	   r   ÚtestDeflatedO   s    z TestsWithSourceFile.testDeflatedc             C   s,   x&t tfD ]}tj |¡r
t |¡ q
W d S )N)r   r.   ÚosÚpathÚexistsÚremove)r   Zfnamer	   r	   r   ÚtearDownX   s    zTestsWithSourceFile.tearDownN)	Ú__name__Ú
__module__Ú__qualname__r   r+   r/   r   r0   r5   r	   r	   r	   r   r      s
   
!	r   c               @   s$   e Zd Zdd„ Zdd„ Zdd„ ZdS )Ú
OtherTestsc             C   sÐ   t jtddd}d|_d}x,t|ƒD ] }| d| d|d d	  ¡ q$W |  t| ¡ ƒ|¡ | 	¡  t jtd
d}|  t| ¡ ƒ|¡ x<t|ƒD ]0}| 
d| ¡ d¡}|  |d|d d	  ¡ qW | 	¡  d S )Nr   T)ÚmodeÚ
allowZip64éd   i € zfoo%08dz%dé   é9   r   )r:   r   )r   r   r   Údebugr   r#   r(   r    Únamelistr   r)   Údecode)r   ÚzipfÚnumfilesr   Úzipf2Úcontentr	   r	   r   ÚtestMoreThan64kFiles_   s     zOtherTests.testMoreThan64kFilesc          	   C   sø  t jtddd}d|_d}x,t|ƒD ] }| d| d|d d	  ¡ q$W |  t| ¡ ƒ|¡ |  	t j
¡ | d| d
¡ W d Q R X |  t| ¡ ƒ|¡ | ¡  t jtddd}d|_|  t| ¡ ƒ|¡ |  	t j
¡ | d| d
¡ W d Q R X |  t| ¡ ƒ|¡ | ¡  t jtddd}d|_|  t| ¡ ƒ|¡ d}x0t||ƒD ]"}| d| d|d d	  ¡ qHW |  t| ¡ ƒ|¡ | ¡  t jtdd}|  t| ¡ ƒ|¡ x>t|ƒD ]2}| d| ¡ d¡}|  |d|d d	  ¡ q¶W | ¡  d S )Nr   F)r:   r;   r<   iÿÿ  zfoo%08dz%dr=   r>   ó    ÚaTi € r   )r:   r   )r   r   r   r?   r   r#   r(   r    r@   ZassertRaisesZLargeZipFiler   r)   rA   )r   rB   rC   r   Z	numfiles2rD   rE   r	   r	   r   ÚtestMoreThan64kFilesAppendq   s>     "z%OtherTests.testMoreThan64kFilesAppendc             C   s   t  t¡ t  t¡ d S )N)r   Úunlinkr   r.   )r   r	   r	   r   r5   •   s    
zOtherTests.tearDownN)r6   r7   r8   rF   rI   r5   r	   r	   r	   r   r9   ^   s   $r9   Ú__main__)Ztestr   Zrequiresr   r1   Zunittestr!   r%   Ztempfiler   Ztest.supportr   r   r.   r"   ZTestCaser   r9   r6   Úmainr	   r	   r	   r   Ú<module>   s   C;