a
    äze³x  ã                   @   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m	Z	m
Z
 d dlmZ d dlmZmZ d dlmZmZ e d¡ZdZdZej ej¡d	 ZG d
d„ dejƒZG dd„ dejƒZG dd„ deƒZG dd„ deƒZ dd„ Z!G dd„ dejƒZ"e#dkre $¡  dS )é    N)ÚPIPEÚPopen)Úsupport)Ú_4GÚ
bigmemtest)Úassert_python_okÚassert_python_failureÚgzipsy     int length=DEFAULTALLOC, err = Z_OK;
  PyObject *RetVal;
  int flushmode = Z_FINISH;
  unsigned long start_total_out;

sŽ   /* zlibmodule.c -- gzip-compatible data compression */
/* See http://www.gzip.org/zlib/
/* See http://www.winimage.com/zLibDll for Windows */
z-gzdirc                   @   s$   e Zd Zdd„ Zdd„ Zdd„ ZdS )ÚUnseekableIOc                 C   s   dS )NF© ©Úselfr   r   ú$/usr/lib/python3.9/test/test_gzip.pyÚseekable$   s    zUnseekableIO.seekablec                 C   s
   t j‚d S ©N©ÚioÚUnsupportedOperationr   r   r   r   Útell'   s    zUnseekableIO.tellc                 G   s
   t j‚d S r   r   )r   Úargsr   r   r   Úseek*   s    zUnseekableIO.seekN)Ú__name__Ú
__module__Ú__qualname__r   r   r   r   r   r   r   r
   #   s   r
   c                   @   s"   e Zd ZejZdd„ Zdd„ ZdS )ÚBaseTestc                 C   s   t  | j¡ d S r   ©r   ÚunlinkÚfilenamer   r   r   r   ÚsetUp1   s    zBaseTest.setUpc                 C   s   t  | j¡ d S r   r   r   r   r   r   ÚtearDown4   s    zBaseTest.tearDownN)r   r   r   r   ÚTESTFNr   r   r   r   r   r   r   r   .   s   r   c                   @   sz  e Zd Z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ee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d0d1„ Zd2d3„ Zd4d5„ Zd6d7„ Zd8d9„ Zd:d;„ Z d<d=„ Z!d>d?„ Z"d@dA„ Z#dBdC„ Z$dDdE„ Z%dFdG„ Z&dHdI„ Z'dJdK„ Z(dLdM„ Z)dNdO„ Z*dPdQ„ Z+dRdS„ Z,dTdU„ Z-dVdW„ Z.dXdY„ Z/dZd[„ Z0d\S )^ÚTestGzipÚbc                 C   sš   t |ƒ}t | jd| ¡}| |¡}W d   ƒ n1 s:0    Y  |  |t|ƒ¡ t | jd| ¡ }|  | ¡ |¡ W d   ƒ n1 sŒ0    Y  d S )NÚwÚr)Úbytesr	   ÚGzipFiler   ÚwriteÚassertEqualÚlenÚread)r   ÚdataÚmodeZb_dataÚfÚlr   r   r   Úwrite_and_read_back9   s    (zTestGzip.write_and_read_backc                 C   sx   t  | jd¡N}| td ¡ | ¡  | ¡  ttdƒrFt 	| ¡ ¡ | 
¡  W d   ƒ n1 sb0    Y  | 
¡  d S )NÚwbé2   Úfsync)r	   r&   r   r'   Údata1ÚflushÚfilenoÚhasattrÚosr2   Úclose©r   r-   r   r   r   Ú
test_writeA   s    
&zTestGzip.test_writec                 C   sÞ   t  | j¡}t |d¡}| td ¡ W d   ƒ n1 s<0    Y  |  |jt	¡ t |d¡}| t¡ W d   ƒ n1 s€0    Y  t |¡}| 
¡ }W d   ƒ n1 s²0    Y  |  |td ¡ |  |jt	¡ d S )Nr#   r1   Úaé3   )ÚpathlibÚPathr   r	   r&   r'   r3   ZassertIsInstanceÚnameÚstrr*   r(   )r   r   r-   Údr   r   r   Ú"test_write_read_with_pathlike_fileO   s    ,(&z+TestGzip.test_write_read_with_pathlike_filec                 C   sB   |   ttd ƒ¡ tttdƒƒƒ}|jdg d¢d}|   |¡ d S )Nr1   é   ÚB)é   rE   é   )Úshape)r/   Ú
memoryviewr3   r%   ÚrangeÚcast)r   Úmr+   r   r   r   Útest_write_memoryview^   s    zTestGzip.test_write_memoryviewc                 C   s   |   ttd ƒ¡ d S )Nr1   )r/   Ú	bytearrayr3   r   r   r   r   Útest_write_bytearrayd   s    zTestGzip.test_write_bytearrayc                 C   s   |   t dtd ¡¡ d S )NÚIé(   )r/   Úarrayr3   r   r   r   r   Útest_write_arrayg   s    zTestGzip.test_write_arrayc              	   C   sâ   t  | jd¡‚}|  t¡ | d¡ W d   ƒ n1 s:0    Y  |  t¡ | g ¡ W d   ƒ n1 sn0    Y  | t¡ W d   ƒ n1 s–0    Y  t  | jd¡ }|  | ¡ t¡ W d   ƒ n1 sÔ0    Y  d S )Nr0   Ú Úrb)	r	   r&   r   ÚassertRaisesÚ	TypeErrorr'   r3   r(   r*   r9   r   r   r   Útest_write_incompatible_typej   s    (((z%TestGzip.test_write_incompatible_typec                 C   sR   |   ¡  t | jd¡}| ¡ }W d   ƒ n1 s40    Y  |  |td ¡ d S )Nr$   r1   )r:   r	   r&   r   r*   r(   r3   ©r   r-   rA   r   r   r   Ú	test_readw   s    &zTestGzip.test_readc                 C   sŽ   |   ¡  g }d}t | jd¡F}| ¡ }|s.qV| |¡ |t|ƒ7 }|  | ¡ |¡ q W d   ƒ n1 sj0    Y  |  d 	|¡t
d ¡ d S )Nr   r$   ó    r1   )r:   r	   r&   r   Úread1Úappendr)   r(   r   Újoinr3   )r   ZblocksÚnreadr-   rA   r   r   r   Ú
test_read1~   s    
0zTestGzip.test_read1é   )ÚsizeZmemusec                 C   s8   t jtdd}t jt |¡dd}|  | |¡t¡ d S )Nr`   ©ÚcompresslevelrT   ©Úfileobjr,   )r	   Úcompressr3   r&   r   ÚBytesIOr(   r*   )r   ra   Ú
compressedr-   r   r   r   Útest_read_large   s    zTestGzip.test_read_largec                 C   sx  |   ¡  t | jd¡}|j}|  |j¡ | ¡  |  |j¡ |  	t
¡ | d¡ W d   ƒ n1 sf0    Y  |  	t
¡ | d¡ W d   ƒ n1 sš0    Y  |  	t
¡ | ¡  W d   ƒ n1 sÌ0    Y  t | jd¡}|j}|  |j¡ | ¡  |  |j¡ |  	t
¡ | d¡ W d   ƒ n1 s60    Y  |  	t
¡ | ¡  W d   ƒ n1 sj0    Y  d S )Nr$   r`   r   r#   rZ   )r:   r	   r&   r   re   ÚassertFalseÚclosedr8   Ú
assertTruerU   Ú
ValueErrorr*   r   r   r'   r4   )r   r-   re   r   r   r   Útest_io_on_closed_object•   s*    ((&*z!TestGzip.test_io_on_closed_objectc                 C   s–   |   ¡  t | jd¡}| td ¡ W d   ƒ n1 s:0    Y  t | jd¡}| ¡ }W d   ƒ n1 sp0    Y  |  |td td  ¡ d S )NÚabé   rT   r1   )	r:   r	   r&   r   r'   Údata2r*   r(   r3   rX   r   r   r   Útest_append±   s    ,&zTestGzip.test_appendc              	   C   sà   t  | jdd¡}| d¡ W d   ƒ n1 s00    Y  tddƒD ]>}t  | jdd¡}| d¡ W d   ƒ qD1 sx0    Y  qDt  | jd¡.}d}| d	¡}||7 }|s˜q²q˜W d   ƒ n1 sÆ0    Y  |  |d
¡ d S )Nr0   é	   ó   ar   éÈ   ro   rT   rZ   i    sÉ   aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa)r	   r&   r   r'   rI   r*   r(   )r   r-   ÚiZzgfileÚcontentsZztxtr   r   r   Útest_many_append»   s    (*
&zTestGzip.test_many_appendc                 C   sº   t  | jd¡}| td ¡ W d   ƒ n1 s20    Y  t  | jd¡$}|  | ¡ td ¡ W d   ƒ n1 st0    Y  |  t¡ t  | jd¡ W d   ƒ n1 s¬0    Y  d S )NÚxbr1   rT   )	r	   r&   r   r'   r3   r(   r*   rU   ÚFileExistsErrorr9   r   r   r   Útest_exclusive_writeÎ   s    ,2zTestGzip.test_exclusive_writec              	   C   sŠ   |   ¡  t | jd¡H}t |¡}dd„ |D ƒ}W d   ƒ n1 sF0    Y  W d   ƒ n1 sd0    Y  |  |dtjdd ¡ d S )NrT   c                 S   s   g | ]}|‘qS r   r   )Ú.0Úliner   r   r   Ú
<listcomp>Ý   rZ   z1TestGzip.test_buffered_reader.<locals>.<listcomp>r1   T©Úkeepends)	r:   r	   r&   r   r   ÚBufferedReaderr(   r3   Ú
splitlines)r   r-   r$   Úlinesr   r   r   Útest_buffered_readerÖ   s
    JzTestGzip.test_buffered_readerc                 C   sv   |   ¡  t | jd¡L}d}| |¡}|s4|dkr4qT|  t|ƒ|k¡ |d d }qW d   ƒ n1 sh0    Y  d S )NrT   r   r`   r1   )r:   r	   r&   r   Úreadlinerl   r)   )r   r-   Zline_lengthÚLr   r   r   Útest_readlineá   s    
zTestGzip.test_readlinec                 C   s†   |   ¡  t | jd¡}| ¡ }W d   ƒ n1 s40    Y  t | jd¡&}| d¡}|g krNqdqNW d   ƒ n1 sx0    Y  d S )NrT   é–   )r:   r	   r&   r   Ú	readlines)r   r-   r†   r   r   r   Útest_readlinesí   s    &
zTestGzip.test_readlinesc                 C   s¤   |   ¡  t | j¡|}| ¡ }| ¡ }|s,q‚| ¡ }| |¡ t|ƒdkrPd}nt|ƒ}| |¡}|  	|d |… |¡ | |¡ qW d   ƒ n1 s–0    Y  d S )Né
   )
r:   r	   r&   r   r   r…   r   r)   r*   r(   )r   r-   ZoldposZline1ZnewposÚamountZline2r   r   r   Útest_seek_readù   s    

zTestGzip.test_seek_readc                 C   sn   |   ¡  t | j¡2}| d¡ |jddd | d¡}W d   ƒ n1 sL0    Y  |  |tdd… ¡ d S )Nr‹   r`   )Úwhenceé   é   )r:   r	   r&   r   r*   r   r(   r3   )r   r-   Úyr   r   r   Útest_seek_whence  s    
(zTestGzip.test_seek_whencec                 C   sX   t  | jd¡6}tdddƒD ]}| |¡ | d¡ qW d   ƒ n1 sJ0    Y  d S )Nr#   r   rC   é   s   GZ
)r	   r&   r   rI   r   r'   )r   r-   Úposr   r   r   Útest_seek_write  s    
zTestGzip.test_seek_writec                 C   s”   |   ¡  t | jd¡ }|  |jjd¡ W d   ƒ n1 s<0    Y  t | j¡ t | jd¡ }|  |jjd¡ W d   ƒ n1 s†0    Y  d S )Nr$   rT   Úxry   )	r:   r	   r&   r   r(   Z	myfileobjr,   r   r   r9   r   r   r   Ú	test_mode  s    .zTestGzip.test_modec              	   C   s\   dD ]R}t  | j|¡0}|  t|dƒ¡ |  |j| j¡ W d   ƒ q1 sL0    Y  qd S )N)r0   rT   r?   )r	   r&   r   rl   r6   r(   r?   )r   r,   r-   r   r   r   Útest_1647484%  s    zTestGzip.test_1647484c                 C   s^   |   ¡  t | jd¡4}|  t|jdƒ¡ |  |jj| j¡ W d   ƒ n1 sP0    Y  d S )NrT   r?   )	r:   r	   r&   r   rl   r6   re   r(   r?   r9   r   r   r   Útest_paddedfile_getattr+  s    z TestGzip.test_paddedfile_getattrc                 C   s®   d}t j| jd|d}| t¡ W d   ƒ n1 s60    Y  t  | j¡N}|  t|dƒ¡ |  |j¡ | 	¡ }|  
|t¡ |  
|j|¡ W d   ƒ n1 s 0    Y  d S )NéÍ[r#   ©Úmtimerœ   )r	   r&   r   r'   r3   rl   r6   ZassertIsNonerœ   r*   r(   )r   rœ   ÚfWriteÚfReadZdataReadr   r   r   Ú
test_mtime1  s    (zTestGzip.test_mtimec              	   C   sž  d}t j| jd|d}| t¡ W d   ƒ n1 s60    Y  t| jdƒ:}| d¡}|  |d¡ | d¡}|  |d¡ z| j d	¡d
 }d}W n t	y®   d}d
}Y n0 | d¡}|  ||¡ | d¡}	|  |	t
 d|¡¡ | d¡}
|  |
d¡ | d¡}|  |d¡ | t|ƒ¡}|  ||¡ | t | j¡jd ¡ | d¡}|  |d¡ | d¡}|  |t
 dttƒ¡¡ W d   ƒ n1 s0    Y  d S )Nrš   r#   r›   rT   é   ó   ‹r`   ó   zLatin-1ó    rZ   rF   z<ió   ó   ÿrE   s   ¯×dƒ)r	   r&   r   r'   r3   Úopenr*   r(   ÚencodeÚUnicodeEncodeErrorÚstructÚpackr)   r   r7   ÚstatÚst_size)r   rœ   r   rž   ZidBytesZcmByteZexpectednameZexpectedflagsZ	flagsByteZ
mtimeBytesÚxflByteZosByteZ	nameBytesZ
crc32BytesZ
isizeBytesr   r   r   Útest_metadata<  s:    (








zTestGzip.test_metadatac                 C   s   t j| _|  ¡  d S r   )r   ZTESTFN_ASCIIr   r®   r   r   r   r   Útest_metadata_ascii_nameo  s    z!TestGzip.test_metadata_ascii_namec           	   
   C   sÖ   g d¢}d}|D ]À\}}}|   |¡œ tj| jd|d}| | t¡ W d   ƒ n1 s\0    Y  t| jdƒ0}| |¡ | d¡}|  	||¡ W d   ƒ n1 s¨0    Y  W d   ƒ q1 sÆ0    Y  qd S )N))Úfastr`   ó   )Zbestrs   r¤   )Ztradeoffé   r£   rE   r#   rb   rT   r`   )
ÚsubTestr	   r&   r   r'   r3   r¦   r   r*   r(   )	r   ZcasesZ	xflOffsetr?   ÚlevelZexpectedXflByter   rž   r­   r   r   r   Útest_compresslevel_metadatas  s    (

z$TestGzip.test_compresslevel_metadatac                 C   sð   t  | jd¡}| d¡ W d   ƒ n1 s.0    Y  t  | jd¡}| ¡  z(| W d   ƒ n1 sj0    Y  W n tyˆ   Y n0 |  d¡ z:t  | jd¡}dd  W d   ƒ n1 sÂ0    Y  W n tyà   Y n0 |  d¡ d S )Nr0   s   xxxrT   z4__enter__ on a closed file didn't raise an exceptionr`   r   z1/0 didn't raise an exception)r	   r&   r   r'   r8   rm   ZfailÚZeroDivisionErrorr9   r   r   r   Útest_with_open‡  s     ("
*zTestGzip.test_with_openc                 C   s¾   t  | jd¡}| td ¡ W d   ƒ n1 s20    Y  t| jdƒ}| d¡ W d   ƒ n1 sh0    Y  t  | jd¡*}| ¡ }|  |td d¡ W d   ƒ n1 s°0    Y  d S )Nr0   r1   ro   s2                                                     rT   zIncorrect data in file)r	   r&   r   r'   r3   r¦   r*   r(   rX   r   r   r   Útest_zero_padded_fileœ  s    ,(zTestGzip.test_zero_padded_filec                 C   s   |   ttjtƒ¡ d S r   )rl   Ú
issubclassr	   ÚBadGzipFileÚOSErrorr   r   r   r   Útest_gzip_BadGzipFile_exception¨  s    z(TestGzip.test_gzip_BadGzipFile_exceptionc                 C   s|   t | jdƒ}| td ¡ W d   ƒ n1 s00    Y  t | jd¡ }|  tj|j¡ W d   ƒ n1 sn0    Y  d S )Nr0   r1   r$   )	r¦   r   r'   r3   r	   r&   rU   rº   r‰   )r   Úfiler   r   r   Útest_bad_gzip_file«  s    ,zTestGzip.test_bad_gzip_filec                 C   s˜   t d }tƒ }tj|dd}| |¡ W d   ƒ n1 s<0    Y  | ¡ }t|ƒ}tj|dd }|  | ¡ |¡ W d   ƒ n1 sŠ0    Y  d S )Nr1   r0   rd   rT   )r3   r
   r	   r&   r'   Úgetvaluer(   r*   )r   ÚuncompressedÚbufr-   rh   r   r   r   Útest_non_seekable_file±  s    (zTestGzip.test_non_seekable_filec                 C   sê   t d }t | jd¡}| |¡ W d   ƒ n1 s60    Y  dd„ }t | jd¡€}d|_d}|ƒ D ]<}| |¡}|dkr‚ q¦|  | t	|ƒ¡|¡ |t	|ƒ7 }qh|  | d	¡d¡ |  |t	|ƒ¡ W d   ƒ n1 sÜ0    Y  d S )
Nru   r0   c                  s   s   t dddƒD ]
} | V  qq d S )Né   r1   r‹   )rI   )Únr   r   r   ÚsizesÀ  s    z!TestGzip.test_peek.<locals>.sizesrT   é!   r   rZ   éd   )
r3   r	   r&   r   r'   Zmax_read_chunkÚpeekr(   r*   r)   )r   rÀ   r-   rÅ   r^   rÄ   Úsr   r   r   Ú	test_peek»  s    (

zTestGzip.test_peekc              	   C   sŽ   t d  d¡jdd}|  ¡  t | jd¡N}tj|dd }|  	| 
¡ |¡ W d   ƒ n1 sb0    Y  W d   ƒ n1 s€0    Y  d S )Nr1   ÚasciiTr   r$   ©Úencoding)r3   Údecoder‚   r:   r	   r&   r   r   ÚTextIOWrapperr(   r‰   )r   rƒ   r-   Útr   r   r   Útest_textio_readlinesÑ  s
    zTestGzip.test_textio_readlinesc              	   C   st   t  | jt jt jB ¡}t  |d¡>}tj|dd}W d   ƒ n1 sH0    Y  W d   ƒ n1 sf0    Y  d S )Nr0   r#   rd   )r7   r¦   r   ÚO_WRONLYÚO_CREATÚfdopenr	   r&   )r   Úfdr-   Úgr   r   r   Útest_fileobj_from_fdopenÙ  s    z!TestGzip.test_fileobj_from_fdopenc              
   C   s°  t  | jd¡ ¡  t| jdƒD}t j|dd }|  |jt j¡ W d   ƒ n1 sV0    Y  t j|dd }|  |jt j¡ W d   ƒ n1 s”0    Y  t j|dd }|  |jt j¡ W d   ƒ n1 sÒ0    Y  t j|dd }|  |jt j¡ W d   ƒ n1 s0    Y  |  	t
¡ t j|dd W d   ƒ n1 sL0    Y  W d   ƒ n1 sl0    Y  d	D ]r}t| j|ƒN}t j|d
 }|  |jt j¡ W d   ƒ n1 sÀ0    Y  W d   ƒ n1 sà0    Y  qzdD ]¸}d|v rt | j¡ t| j|ƒ~}|  t¡ t j|d
}W d   ƒ n1 sH0    Y  |  |  |jt j¡ W d   ƒ n1 s~0    Y  W d   ƒ n1 sž0    Y  qòd S )Nr0   úr+br$   rd   r#   r;   r–   Úz)rT   rØ   ©re   )r0   ro   ry   )r	   r&   r   r8   r¦   r(   r,   ZREADZWRITErU   rm   r   r   ZassertWarnsÚFutureWarning)r   r-   rÖ   r,   r   r   r   Útest_fileobj_modeá  s0    ...0NT
,zTestGzip.test_fileobj_modec                 C   sð   | j }z| d¡}W n ty0   |  d¡ Y n0 t |d¡}| td ¡ W d   ƒ n1 sb0    Y  t |d¡$}|  | 	¡ td ¡ W d   ƒ n1 s¢0    Y  t |d¡$}|  | 	¡ td ¡ W d   ƒ n1 sâ0    Y  d S )NrË   z%Temporary file name needs to be ASCIIr0   r1   rT   )
r   r§   r¨   ZskipTestr	   r&   r'   r3   r(   r*   )r   Zstr_filenameZbytes_filenamer-   r   r   r   Útest_bytes_filenameû  s    ,2zTestGzip.test_bytes_filenamec                 C   st   t jdtdƒ dd}|  t|ƒtj¡ t |¡}t j|d}|  	| 
d¡d¡ dtj }|  |jj ¡ |d¡ d S )Nr£   g    €„>Ars   rb   rÚ   r`   z)Excessive amount of data was decompressed)r	   rf   ÚintZ
assertLessr)   r   ÚDEFAULT_BUFFER_SIZErg   r&   r(   r*   ZassertLessEqualÚ_bufferÚrawr   )r   ZbombÚdecompZ
max_decompr   r   r   Útest_decompress_limited	  s    

ÿz TestGzip.test_decompress_limitedc              
   C   s‚   t tfD ]t}dD ]j}tj|g|¢R Ž }|  t|ƒt¡ tjt 	|¡dd }|  | 
¡ |¡ W d   ƒ q1 sp0    Y  qqd S )N©r   )r`   )r²   )rs   rT   rd   )r3   rq   r	   rf   r(   Útyper%   r&   r   rg   r*   )r   r+   r   Údatacr-   r   r   r   Útest_compress  s    zTestGzip.test_compressc                 C   sÂ   d}t tfD ]°}dD ]¦}| j||d„ tj|g|¢R d|iŽ}|  t|ƒt¡ tjt	 
|¡dd(}| d¡ |  |j|¡ W d   ƒ n1 s’0    Y  W d   ƒ q1 s°0    Y  qqd S )Nrš   rä   )r+   r   rœ   rT   rd   r`   )r3   rq   r³   r	   rf   r(   rå   r%   r&   r   rg   r*   rœ   )r   rœ   r+   r   ræ   r-   r   r   r   Útest_compress_mtime  s    
zTestGzip.test_compress_mtimec              	   C   s„   t tfD ]v}t ¡ }tj|dd}| |¡ W d   ƒ n1 sB0    Y  |  t | 	¡ ¡|¡ t 
|¡}|  t |¡|¡ qd S )Nr0   rd   )r3   rq   r   rg   r	   r&   r'   r(   Ú
decompressr¿   rf   )r   r+   rÁ   r-   ræ   r   r   r   Útest_decompress*  s    (
zTestGzip.test_decompressc              	   C   s  t d }t |¡d d… }tjt |¡d}|  t|j¡ W d   ƒ n1 sP0    Y  tjt |¡d6}|  	| t
|ƒ¡|¡ |  t|jd¡ W d   ƒ n1 s¨0    Y  tddƒD ]P}tjt |d |… ¡d }|  t|jd¡ W d   ƒ q¼1 s0    Y  q¼d S )Nr1   iøÿÿÿrÚ   r`   r    r‹   )r3   r	   rf   r&   r   rg   rU   ÚEOFErrorr*   r(   r)   rI   )r   r+   Z	truncatedr-   rv   r   r   r   Útest_read_truncated4  s    ,.zTestGzip.test_read_truncatedc                 C   sJ   d}t jt |¡d }|  | ¡ d¡ W d   ƒ n1 s<0    Y  d S )Ns   ‹²cQÿ ExtraI-. 2ÑMx   rÚ   s   Test)r	   r&   r   rg   r(   r*   )r   Zgzdatar-   r   r   r   Útest_read_with_extraB  s    zTestGzip.test_read_with_extrac                 C   sx   t  | jd¡}| t¡ W d   ƒ n1 s.0    Y  t  | jd¡}|jjj ¡  W d   ƒ n1 sj0    Y  d S )Nr0   rT   )	r	   r¦   r   r'   r3   rà   rá   Ú_fpZprependr9   r   r   r   Útest_prepend_errorJ  s    (zTestGzip.test_prepend_errorN)r"   )1r   r   r   r/   r:   rB   rL   rN   rR   rW   rY   r_   r   r   ri   rn   rr   rx   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ç   rè   rê   rì   rí   rï   r   r   r   r   r!   8   sZ   




3

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 )ÚTestOpenc                 C   s  t d }t | jd¡}| |¡ W d   ƒ n1 s60    Y  t| jdƒ*}t | ¡ ¡}|  ||¡ W d   ƒ n1 s|0    Y  t | jd¡ }|  | ¡ |¡ W d   ƒ n1 sº0    Y  t | jd¡}| |¡ W d   ƒ n1 sò0    Y  t| jdƒ.}t | ¡ ¡}|  ||d ¡ W d   ƒ n1 s>0    Y  |  t	¡ t | jd¡ W d   ƒ n1 sx0    Y  t
 | j¡ t | jd¡}| |¡ W d   ƒ n1 s¾0    Y  t| jdƒ*}t | ¡ ¡}|  ||¡ W d   ƒ n1 s0    Y  d S )Nr1   r0   rT   ro   r    ry   ©r3   r	   r¦   r   r'   ré   r*   r(   rU   rz   r   r   ©r   rÀ   r-   Ú	file_datar   r   r   Útest_binary_modesR  s*    (*.(0.*zTestOpen.test_binary_modesc                 C   s¾   t  | j¡}t |d¡}| td ¡ W d   ƒ n1 s<0    Y  t |d¡}| t¡ W d   ƒ n1 sr0    Y  t |¡$}|  | ¡ td ¡ W d   ƒ n1 s°0    Y  d S )Nr0   r1   ro   r<   )	r=   r>   r   r	   r¦   r'   r3   r(   r*   )r   r   r-   r   r   r   Útest_pathlike_filem  s    ,(zTestOpen.test_pathlike_filec                 C   s  t d }t | jd¡}| |¡ W d   ƒ n1 s60    Y  t| jdƒ*}t | ¡ ¡}|  ||¡ W d   ƒ n1 s|0    Y  t | jd¡ }|  | ¡ |¡ W d   ƒ n1 sº0    Y  t | jd¡}| |¡ W d   ƒ n1 sò0    Y  t| jdƒ.}t | ¡ ¡}|  ||d ¡ W d   ƒ n1 s>0    Y  |  t	¡ t | jd¡ W d   ƒ n1 sx0    Y  t
 | j¡ t | jd¡}| |¡ W d   ƒ n1 s¾0    Y  t| jdƒ*}t | ¡ ¡}|  ||¡ W d   ƒ n1 s0    Y  d S )Nr1   r#   rT   r$   r;   r    r–   rñ   rò   r   r   r   Útest_implicit_binary_modesv  s*    (*.(0.*z#TestOpen.test_implicit_binary_modesc                 C   sn  t  d¡d }| dtj¡}t | jd¡}| |¡ W d   ƒ n1 sJ0    Y  t| jdƒ0}t 	| 
¡ ¡ d¡}|  ||¡ W d   ƒ n1 s–0    Y  t | jd¡ }|  | 
¡ |¡ W d   ƒ n1 sÔ0    Y  t | jd¡}| |¡ W d   ƒ n1 s0    Y  t| jdƒ4}t 	| 
¡ ¡ d¡}|  ||d ¡ W d   ƒ n1 s`0    Y  d S )	NrË   r1   Ú
ÚwtrT   ÚrtZatr    ©r3   rÎ   Úreplacer7   Úlinesepr	   r¦   r   r'   ré   r*   r(   ©r   rÀ   Zuncompressed_rawr-   ró   r   r   r   Útest_text_modes’  s    (*.*zTestOpen.test_text_modesc                 C   sæ   t d }| d¡}t |¡}t t |¡d¡ }|  | ¡ |¡ W d   ƒ n1 sT0    Y  t t |¡d¡ }|  | ¡ |¡ W d   ƒ n1 s–0    Y  t t |¡d¡ }|  | ¡ |¡ W d   ƒ n1 sØ0    Y  d S )Nr1   rË   r$   rT   rù   )	r3   rÎ   r	   rf   r¦   r   rg   r(   r*   )r   Zuncompressed_bytesZuncompressed_strrh   r-   r   r   r   Útest_fileobj¢  s    

..zTestOpen.test_fileobjc                 C   s`  |   t¡ t d¡ W d   ƒ n1 s*0    Y  |   t¡ t | jd¡ W d   ƒ n1 sb0    Y  |   t¡ t | jd¡ W d   ƒ n1 sš0    Y  |   t¡" tj| jddd W d   ƒ n1 sÖ0    Y  |   t¡" tj| jddd W d   ƒ n1 s0    Y  |   t¡" tj| jdd	d
 W d   ƒ n1 sR0    Y  d S )Ngw¾Ÿ/Ý^@ZwbtZxbtrT   zutf-8rÌ   Úignore)Úerrorsr÷   ©Únewline)rU   rV   r	   r¦   rm   r   r   r   r   r   Útest_bad_params­  s    (,,02zTestOpen.test_bad_paramsc                 C   sê   t  d¡d }| dtj¡}tj| jddd}| |¡ W d   ƒ n1 sN0    Y  t| jdƒ0}t 	| 
¡ ¡ d¡}|  ||¡ W d   ƒ n1 sš0    Y  tj| jddd }|  | 
¡ |¡ W d   ƒ n1 sÜ0    Y  d S )	NrË   r1   r÷   rø   zutf-16rÌ   rT   rù   rú   rý   r   r   r   Útest_encoding¼  s    (*zTestOpen.test_encodingc                 C   s€   t  | jd¡}| d¡ W d   ƒ n1 s.0    Y  t j| jdddd }|  | ¡ d¡ W d   ƒ n1 sr0    Y  d S )Nr0   s   fooÿbarrù   rË   r   )rÍ   r  Zfoobar)r	   r¦   r   r'   r(   r*   r9   r   r   r   Útest_encoding_error_handlerÈ  s
    (z$TestOpen.test_encoding_error_handlerc                 C   s’   t  d¡d }tj| jddd}| |¡ W d   ƒ n1 s@0    Y  tj| jddd"}|  | ¡ |g¡ W d   ƒ n1 s„0    Y  d S )NrË   r1   rø   r÷   r  rù   ú)r3   rÎ   r	   r¦   r   r'   r(   r‰   )r   rÀ   r-   r   r   r   Útest_newlineÐ  s
    (zTestOpen.test_newlineN)r   r   r   rô   rõ   rö   rþ   rÿ   r  r  r  r  r   r   r   r   rð   Q  s   	rð   c                    s   ‡ fdd„}|S )Nc                    s   t  ˆ ¡‡‡ fdd„ƒ}|S )Nc               	      s6   t  ˆ ¡ zˆ| i |¤ŽW t ˆ ¡ S t ˆ ¡ 0 d S r   )r7   Úmakedirsr   Úrmtree)r   Úkwargs)Ú	directoryÚfunctionr   r   ÚwrapperÛ  s    

þz?create_and_remove_directory.<locals>.decorator.<locals>.wrapper)Ú	functoolsÚwraps)r  r  ©r  )r  r   Ú	decoratorÚ  s    z.create_and_remove_directory.<locals>.decoratorr   )r  r  r   r  r   Úcreate_and_remove_directoryÙ  s    	r  c                   @   sp   e Zd ZdZdd„ Zeeƒdd„ ƒZdd„ Zeeƒdd	„ ƒZ	eeƒd
d„ ƒZ
eeƒdd„ ƒZdd„ Zdd„ ZdS )ÚTestCommandLines   This is a simple test with gzipc              	   C   sÐ   t  ¡ š}tj|dd}| | j¡ W d   ƒ n1 s:0    Y  tjdddf}t|t	t	t	d"}| 
| ¡ ¡\}}W d   ƒ n1 sŠ0    Y  W d   ƒ n1 s¨0    Y  |  |d¡ |  || j¡ d S )Nr0   rd   ú-mr	   ú-d©ÚstdinÚstdoutÚstderrrZ   )r   rg   r	   r&   r'   r+   ÚsysÚ
executabler   r   Úcommunicater¿   r(   )r   Zbytes_ioZ	gzip_filer   ÚprocÚoutÚerrr   r   r   Útest_decompress_stdin_stdouté  s    
*Nz,TestCommandLine.test_decompress_stdin_stdoutc                 C   sî   t j td¡}|  t j |¡¡ tj|dd}| | j	¡ W d   ƒ n1 sP0    Y  t
ddd|ƒ\}}}tt j td¡dƒ"}|  | ¡ | j	¡ W d   ƒ n1 sª0    Y  |  t j |¡¡ |  |d	¡ |  |d
¡ |  |d
¡ d S )Nztestgzip.gzr0   )r,   r  r	   r  ÚtestgziprT   r   rZ   )r7   Úpathr]   ÚTEMPDIRrj   Úexistsr	   r¦   r'   r+   r   r(   r*   rl   )r   ÚgzipnameÚfpÚrcr  r   Zgunzipedr   r   r   Útest_decompress_infile_outfileõ  s    *0z.TestCommandLine.test_decompress_infile_outfilec                 C   s@   t ddddƒ\}}}|  d| ¡ ¡ |  |d¡ |  |d¡ d S )Nr  r	   r  zthisisatest.outs.   filename doesn't end in .gz: 'thisisatest.out'r`   rZ   )r   r(   Ústrip©r   r(  r  r   r   r   r   Ú$test_decompress_infile_outfile_error  s    z4TestCommandLine.test_decompress_infile_outfile_errorc                 C   sp   t jddf}t|tttd }| | j¡\}}W d   ƒ n1 sB0    Y  |  |d¡ |  |d d… d¡ d S )Nr  r	   r  rZ   r    r¡   )r  r  r   r   r  r+   r(   )r   r   r  r  r   r   r   r   Útest_compress_stdin_outfile  s
    .z+TestCommandLine.test_compress_stdin_outfilec                 C   sž   t j td¡}|d }|  t j |¡¡ t|dƒ}| | j¡ W d   ƒ n1 sT0    Y  t	dd|ƒ\}}}|  
t j |¡¡ |  |d¡ |  |d¡ d S )Nr"  ú.gzr0   r  r	   rZ   )r7   r#  r]   r$  rj   r%  r¦   r'   r+   r   rl   r(   )r   Úlocal_testgzipr&  r'  r(  r  r   r   r   r   Ú$test_compress_infile_outfile_default  s    *z4TestCommandLine.test_compress_infile_outfile_defaultc              
   C   sò   dD ]è}| j |dÈ tj td¡}|d }|  tj |¡¡ t|dƒ}| | j	¡ W d   ƒ n1 sj0    Y  t
dd||ƒ\}}}|  tj |¡¡ |  |d¡ |  |d¡ t |¡ |  tj |¡¡ W d   ƒ q1 sâ0    Y  qd S )	N)ú--fastú--best)Úcompress_levelr"  r.  r0   r  r	   rZ   )r³   r7   r#  r]   r$  rj   r%  r¦   r'   r+   r   rl   r(   Úremove)r   r3  r/  r&  r'  r(  r  r   r   r   r   Útest_compress_infile_outfile$  s    *
z,TestCommandLine.test_compress_infile_outfilec                 C   s0   t ddddƒ\}}}|  d|¡ |  |d¡ d S )Nr  r	   r1  r2  s8   error: argument --best: not allowed with argument --fastrZ   ©r   ZassertInr(   r+  r   r   r   Ú%test_compress_fast_best_are_exclusive7  s    z5TestCommandLine.test_compress_fast_best_are_exclusivec                 C   s0   t ddddƒ\}}}|  d|¡ |  |d¡ d S )Nr  r	   r1  r  sA   error: argument -d/--decompress: not allowed with argument --fastrZ   r6  r+  r   r   r   Ú-test_decompress_cannot_have_flags_compression<  s    z=TestCommandLine.test_decompress_cannot_have_flags_compressionN)r   r   r   r+   r!  r  r$  r)  r,  r-  r0  r5  r7  r8  r   r   r   r   r  æ  s   



r  Ú__main__)%rQ   r  r   r7   r=   r©   r  ZunittestÚ
subprocessr   r   Útestr   Ztest.supportr   r   Ztest.support.script_helperr   r   Úimport_moduler	   r3   rq   r#  Úabspathr    r$  rg   r
   ZTestCaser   r!   rð   r  r  r   Úmainr   r   r   r   Ú<module>   s8   

     	\
