B
    18™\Ç’  ã               @   s8  d dl mZ d dlmZmZ d dlZd dl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Zd dlZd dlZd dlmZ d dlZd dlZe d¡Zd dlmZmZmZ dadd	„ ZG d
d„ dejƒZG dd„ deƒZG dd„ deƒZG dd„ deƒZG dd„ deƒZ G dd„ deƒZ!dd„ Z"e#dkr4e"ƒ  dS )é    )Úsupport)Ú
bigmemtestÚ_4GN)ÚBytesIOÚDEFAULT_BUFFER_SIZE)ÚunlinkÚbz2)ÚBZ2FileÚBZ2CompressorÚBZ2Decompressorc             C   s8   t d krtt d¡ƒa t r*tjdg| dS t | ¡S d S )NZbunzip2)Úinput)Úhas_cmdline_bunzip2ÚboolÚshutilÚwhichÚ
subprocessÚcheck_outputr   Ú
decompress)Údata© r   úQ/oak/stanford/groups/akundaje/marinovg/programs/Python-3.7.3/Lib/test/test_bz2.pyÚext_decompress   s
    r   c               @   sÞ   e Zd ZdZdddddddd	d
ddddddddddddgZd e¡ZdZdZdZ	dZ
edƒZx^e ej ej e¡d¡¡D ]>Zeedƒ Ze
e eeƒe
d… ¡7 Z
W dQ R X e
dkrzP qzW ejed d!Zd"d#„ Zd$d%„ ZdS )&ÚBaseTestzBase for other testcases.s    root:x:0:0:root:/root:/bin/bash
s   bin:x:1:1:bin:/bin:
s   daemon:x:2:2:daemon:/sbin:
s   adm:x:3:4:adm:/var/adm:
s   lp:x:4:7:lp:/var/spool/lpd:
s    sync:x:5:0:sync:/sbin:/bin/sync
s-   shutdown:x:6:0:shutdown:/sbin:/sbin/shutdown
s!   halt:x:7:0:halt:/sbin:/sbin/halt
s"   mail:x:8:12:mail:/var/spool/mail:
s"   news:x:9:13:news:/var/spool/news:
s#   uucp:x:10:14:uucp:/var/spool/uucp:
s    operator:x:11:0:operator:/root:
s!   games:x:12:100:games:/usr/games:
s,   gopher:x:13:30:gopher:/usr/lib/gopher-data:
s(   ftp:x:14:50:FTP User:/var/ftp:/bin/bash
s#   nobody:x:65534:65534:Nobody:/home:
s.   postfix:x:100:101:postfix:/var/spool/postfix:
s-   niemeyer:x:500:500::/home/niemeyer:/bin/bash
s>   postgres:x:101:102:PostgreSQL Server:/var/lib/pgsql:/bin/bash
s6   mysql:x:102:103:MySQL server:/var/lib/mysql:/bin/bash
s#   www:x:103:104::/var/www:/bin/false
ó    s  BZh91AY&SY.ÈN >_€ @ÿðn ?çÿà0™ª ÀF†Œ#&ƒFš¦Ð¦“MQ§¨€4hh$¤i4ñ4SÒ<QµHÓÔÝÕ‡»ø”¯IáÉø/E pu‰]É»DL
Q	1ß À—¬2O9‰”7d•IªJ¤L#œ¯º¼/—Š#CÈáŒWùâÐÖM§‹Xa<e„tËL³§ÙÍÑË„.¯³««­`n} lh	E,ŽZVH>ˆåÍ9gd6
é›ÕŠ™÷.KŽvû÷xw»ß¡’ñÝ|/";¢ºŸÕ±#A¶ö³oÉÅy\ëOç…š¼¶f8•2Õ×"%‰>V,÷¦zâŸ£ß"ÖE)I©^ÊórÐU’2ò6ì¶í‹ÃUÅ0¤ú^’¬DFŠ—ÖþÝ¸½š£€ankR‹åØ3]©Æ‚fö¹"6l$¸j@ÀŠ°l1..ºkƒls¼ôÁ¾øE¸¨k„Ónú¬Q±%yªv´àzõéÌ¹zn7.Gü]ÉáB@»!8`s   BZh9rE8P    s   this is not a valid bzip2 filer   i   z*.pyÚrbNé   )Úcompresslevelc             C   s   t j| _d S )N)r   ÚTESTFNÚfilename)Úselfr   r   r   ÚsetUpN   s    zBaseTest.setUpc             C   s   t j | j¡rt  | j¡ d S )N)ÚosÚpathÚisfiler   r   )r   r   r   r   ÚtearDownQ   s    zBaseTest.tearDown)Ú__name__Ú
__module__Ú__qualname__Ú__doc__Ú
TEXT_LINESÚjoinÚTEXTÚDATAÚ
EMPTY_DATAÚBAD_DATAZ	test_sizeÚ	bytearrayÚBIG_TEXTÚglobr!   r"   ÚdirnameÚ__file__ÚfnameÚopenZfhÚreadintoÚ
memoryviewr   ÚcompressÚBIG_DATAr    r$   r   r   r   r   r   "   sH   
"$r   c               @   sê  e Zd 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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[„ Z/d\d]„ Z0d^d_„ Z1d`da„ Z2dbdc„ Z3ddde„ Z4dfdg„ Z5dhdi„ Z6djdk„ Z7dldm„ Z8dndo„ Z9dpdq„ Z:drds„ Z;dtdu„ Z<dvdw„ Z=dxdy„ Z>dzS )|ÚBZ2FileTestzTest the BZ2File class.r   r   c          	   C   s6   t | jdƒ }| | j| ¡ | |¡ W d Q R X d S )NÚwb)r5   r   Úwriter,   )r   ÚstreamsÚsuffixÚfr   r   r   ÚcreateTempFileY   s    zBZ2FileTest.createTempFilec             C   sp   |   ttd¡ |   tttjd¡ |   tttjd¡ |   tttjd¡ | j tttjdd | j tttjdd d S )Ngw¾Ÿ/Ý^@ÚzZrxZrbtr   )r   é
   )ÚassertRaisesÚ	TypeErrorr	   Ú
ValueErrorr!   Údevnull)r   r   r   r   ÚtestBadArgs^   s    zBZ2FileTest.testBadArgsc          	   C   sF   |   ¡  t| jƒ*}|  t|jtƒ ¡ |  | ¡ | j¡ W d Q R X d S )N)	r@   r	   r   rC   rD   ÚreadÚfloatÚassertEqualr+   )r   Úbz2fr   r   r   ÚtestReadf   s    zBZ2FileTest.testReadc          	   C   s8   | j d| jd t| jƒ}|  t|j¡ W d Q R X d S )Nr   )r=   r>   )r@   r.   r	   r   rC   ÚOSErrorrH   )r   rK   r   r   r   ÚtestReadBadFilel   s    zBZ2FileTest.testReadBadFilec          	   C   sN   | j dd t| jƒ.}|  t|jtƒ ¡ |  | ¡ | jd ¡ W d Q R X d S )Né   )r=   )	r@   r	   r   rC   rD   rH   rI   rJ   r+   )r   rK   r   r   r   ÚtestReadMultiStreamq   s    zBZ2FileTest.testReadMultiStreamc          	   C   sn   t j}t| jƒt _zN| jdd t| jƒ.}|  t|j	t
ƒ ¡ |  | 	¡ | jd ¡ W d Q R X W d |t _X d S )NrO   )r=   )Ú_compressionÚBUFFER_SIZEÚlenr,   r@   r	   r   rC   rD   rH   rI   rJ   r+   )r   Úbuffer_sizerK   r   r   r   ÚtestReadMonkeyMultiStreamw   s    $z%BZ2FileTest.testReadMonkeyMultiStreamc          	   C   s:   | j | jd t| jƒ}|  | ¡ | j¡ W d Q R X d S )N)r>   )r@   r.   r	   r   rJ   rH   r+   )r   rK   r   r   r   ÚtestReadTrailingJunk„   s    z BZ2FileTest.testReadTrailingJunkc          	   C   s@   | j d| jd t| jƒ}|  | ¡ | jd ¡ W d Q R X d S )NrO   )r=   r>   )r@   r.   r	   r   rJ   rH   r+   )r   rK   r   r   r   ÚtestReadMultiStreamTrailingJunk‰   s    z+BZ2FileTest.testReadMultiStreamTrailingJunkc          	   C   sF   |   ¡  t| jƒ*}|  t|jtƒ ¡ |  | d¡d¡ W d Q R X d S )Nr   r   )r@   r	   r   rC   rD   rH   rI   rJ   )r   rK   r   r   r   Ú	testRead0Ž   s    zBZ2FileTest.testRead0c          	   C   sR   |   ¡  t| jƒ6}d}x| d¡}|s*P ||7 }qW |  || j¡ W d Q R X d S )Nr   rB   )r@   r	   r   rH   rJ   r+   )r   rK   ÚtextÚstrr   r   r   ÚtestReadChunk10”   s    
zBZ2FileTest.testReadChunk10c          	   C   sZ   | j dd t| jƒ:}d}x| d¡}|s.P ||7 }qW |  || jd ¡ W d Q R X d S )NrO   )r=   r   rB   )r@   r	   r   rH   rJ   r+   )r   rK   rY   rZ   r   r   r   ÚtestReadChunk10MultiStreamŸ   s    
z&BZ2FileTest.testReadChunk10MultiStreamc          	   C   s>   |   ¡  t| jƒ"}|  | d¡| jd d… ¡ W d Q R X d S )Néd   )r@   r	   r   rJ   rH   r+   )r   rK   r   r   r   ÚtestRead100ª   s    zBZ2FileTest.testRead100c          	   C   s^   |   ¡  t| jƒB}| ¡ }|  t|ƒd¡ |  | j |¡¡ |  	| 
¡ | j¡ W d Q R X d S )Nr   )r@   r	   r   ÚpeekÚassertNotEqualrS   Ú
assertTruer+   Ú
startswithrJ   rH   )r   rK   Úpdatar   r   r   ÚtestPeek¯   s    zBZ2FileTest.testPeekc          	   C   s¤   |   ¡  t| jƒˆ}d}t|ƒ}|  | |¡|¡ |  || jd |… ¡ t| jƒ| }tt| jƒƒ}|  | |¡|¡ |  |d |… | j| d … ¡ W d Q R X d S )Né€   )r@   r	   r   r/   rJ   r6   r+   rS   )r   rK   ÚnÚbr   r   r   ÚtestReadInto·   s    zBZ2FileTest.testReadIntoc          	   C   sR   |   ¡  t| jƒ6}|  t|jd ¡ x| jD ]}|  | ¡ |¡ q,W W d Q R X d S )N)r@   r	   r   rC   rD   Úreadliner)   rJ   )r   rK   Úliner   r   r   ÚtestReadLineÃ   s
    zBZ2FileTest.testReadLinec          	   C   sZ   | j dd t| jƒ:}|  t|jd ¡ x"| jd D ]}|  | ¡ |¡ q4W W d Q R X d S )NrO   )r=   )r@   r	   r   rC   rD   ri   r)   rJ   )r   rK   rj   r   r   r   ÚtestReadLineMultiStreamÊ   s
    z#BZ2FileTest.testReadLineMultiStreamc          	   C   sD   |   ¡  t| jƒ(}|  t|jd ¡ |  | ¡ | j¡ W d Q R X d S )N)r@   r	   r   rC   rD   Ú	readlinesrJ   r)   )r   rK   r   r   r   ÚtestReadLinesÑ   s    zBZ2FileTest.testReadLinesc          	   C   sL   | j dd t| jƒ,}|  t|jd ¡ |  | ¡ | jd ¡ W d Q R X d S )NrO   )r=   )r@   r	   r   rC   rD   rm   rJ   r)   )r   rK   r   r   r   ÚtestReadLinesMultiStream×   s    z$BZ2FileTest.testReadLinesMultiStreamc          	   C   s8   |   ¡  t| jƒ}|  tt|ƒƒ| j¡ W d Q R X d S )N)r@   r	   r   rJ   ÚlistÚiterr)   )r   rK   r   r   r   ÚtestIteratorÝ   s    zBZ2FileTest.testIteratorc          	   C   s@   | j dd t| jƒ }|  tt|ƒƒ| jd ¡ W d Q R X d S )NrO   )r=   )r@   r	   r   rJ   rp   rq   r)   )r   rK   r   r   r   ÚtestIteratorMultiStreamâ   s    z#BZ2FileTest.testIteratorMultiStreamc             C   s:   |   ¡  t| jƒ}| ¡  |  tt|¡ |  t|j¡ d S )N)r@   r	   r   ÚcloserC   rE   Únextrm   )r   rK   r   r   r   ÚtestClosedIteratorDeadlockç   s
    
z&BZ2FileTest.testClosedIteratorDeadlockc          	   C   sd   t | jdƒ }|  t|j¡ | | j¡ W d Q R X t| jdƒ}|  t| 	¡ ƒ| j¡ W d Q R X d S )NÚwr   )
r	   r   rC   rD   r<   r+   r5   rJ   r   rH   )r   rK   r?   r   r   r   Ú	testWriteð   s
    zBZ2FileTest.testWritec          	   C   s†   t | jdƒB}d}x6| j|d |d d … }|s4P | |¡ |d7 }qW W d Q R X t| jdƒ}|  t| ¡ ƒ| j¡ W d Q R X d S )Nrw   r   rB   r   r   )r	   r   r+   r<   r5   rJ   r   rH   )r   rK   rf   rZ   r?   r   r   r   ÚtestWriteChunks10÷   s    
zBZ2FileTest.testWriteChunks10c          	   C   sd   t j| jdd}t| jddd}| | j¡ W d Q R X t| jdƒ}|  | ¡ |¡ W d Q R X d S )NrO   )r   rw   r   )	r   r8   r+   r	   r   r<   r5   rJ   rH   )r   ÚexpectedrK   r?   r   r   r   Ú testWriteNonDefaultCompressLevel  s
    z,BZ2FileTest.testWriteNonDefaultCompressLevelc          	   C   sv   t | jdƒ }|  t|j¡ | | j¡ W d Q R X |  t|jdg¡ t| jdƒ}|  t	| 
¡ ƒ| j¡ W d Q R X d S )Nrw   Úar   )r	   r   rC   rD   Ú
writelinesr)   rE   r5   rJ   r   rH   r+   )r   rK   r?   r   r   r   ÚtestWriteLines
  s    zBZ2FileTest.testWriteLinesc          	   C   s`   t | jdƒ}| d¡ W d Q R X t | jdƒ(}|  t|jd¡ |  t|jdg¡ W d Q R X d S )Nrw   s   abcÚró   a)r	   r   r<   rC   rM   r}   )r   rK   r   r   r   ÚtestWriteMethodsOnReadOnlyFile  s
    z*BZ2FileTest.testWriteMethodsOnReadOnlyFilec          	   C   sš   t | jdƒ }|  t|j¡ | | j¡ W d Q R X t | jdƒ }|  t|j¡ | | j¡ W d Q R X t| jdƒ }|  t| 	¡ ƒ| jd ¡ W d Q R X d S )Nrw   r|   r   é   )
r	   r   rC   rD   r<   r+   r5   rJ   r   rH   )r   rK   r?   r   r   r   Ú
testAppend  s    zBZ2FileTest.testAppendc          	   C   sT   |   ¡  t| jƒ8}|  t|j¡ | d¡ |  | ¡ | jdd … ¡ W d Q R X d S )Né–   )	r@   r	   r   rC   rD   ÚseekrJ   rH   r+   )r   rK   r   r   r   ÚtestSeekForward&  s
    
zBZ2FileTest.testSeekForwardc          	   C   sb   | j dd t| jƒB}|  t|j¡ | t| jƒd ¡ |  | 	¡ | jdd … ¡ W d Q R X d S )Nr‚   )r=   r„   )
r@   r	   r   rC   rD   r…   rS   r+   rJ   rH   )r   rK   r   r   r   ÚtestSeekForwardAcrossStreams-  s
    z(BZ2FileTest.testSeekForwardAcrossStreamsc          	   C   sR   |   ¡  t| jƒ6}| d¡ | dd¡ |  | ¡ | jdd … ¡ W d Q R X d S )Niô  ijÿÿÿr   i^  )r@   r	   r   rH   r…   rJ   r+   )r   rK   r   r   r   ÚtestSeekBackwards4  s
    
zBZ2FileTest.testSeekBackwardsc          	   C   s€   | j dd t| jƒ`}t| jƒd }x|dkrD|t| |¡ƒ8 }q(W | dd¡ |  | ¡ | jdd … | j ¡ W d Q R X d S )Nr‚   )r=   r]   r   ijÿÿÿr   iÎÿÿÿ)r@   r	   r   rS   r+   rH   r…   rJ   )r   rK   Zreadtor   r   r   ÚtestSeekBackwardsAcrossStreams;  s    
z*BZ2FileTest.testSeekBackwardsAcrossStreamsc          	   C   sR   |   ¡  t| jƒ6}| dd¡ |  | ¡ | jt| jƒd d … ¡ W d Q R X d S )Nijÿÿÿr‚   r„   )r@   r	   r   r…   rJ   rH   r+   rS   )r   rK   r   r   r   ÚtestSeekBackwardsFromEndD  s    z$BZ2FileTest.testSeekBackwardsFromEndc          	   C   sP   | j dd t| jƒ0}| dd¡ |  | ¡ | jd dd … ¡ W d Q R X d S )Nr‚   )r=   iüÿÿ)r@   r	   r   r…   rJ   rH   r+   )r   rK   r   r   r   Ú%testSeekBackwardsFromEndAcrossStreamsJ  s    z1BZ2FileTest.testSeekBackwardsFromEndAcrossStreamsc          	   C   sR   |   ¡  t| jƒ6}| d¡ |  | ¡ t| jƒ¡ |  | ¡ d¡ W d Q R X d S )NiðI r   )	r@   r	   r   r…   rJ   ÚtellrS   r+   rH   )r   rK   r   r   r   ÚtestSeekPostEndP  s
    
zBZ2FileTest.testSeekPostEndc          	   C   sZ   | j dd t| jƒ:}| d¡ |  | ¡ t| jƒd ¡ |  | ¡ d¡ W d Q R X d S )NrO   )r=   iðI r   )	r@   r	   r   r…   rJ   rŒ   rS   r+   rH   )r   rK   r   r   r   ÚtestSeekPostEndMultiStreamW  s
    
z&BZ2FileTest.testSeekPostEndMultiStreamc          	   C   s\   |   ¡  t| jƒ@}| d¡ | d¡ |  | ¡ t| jƒ¡ |  | ¡ d¡ W d Q R X d S )NiðI r   )	r@   r	   r   r…   rJ   rŒ   rS   r+   rH   )r   rK   r   r   r   ÚtestSeekPostEndTwice^  s    

z BZ2FileTest.testSeekPostEndTwicec          	   C   sd   | j dd t| jƒD}| d¡ | d¡ |  | ¡ t| jƒd ¡ |  | ¡ d¡ W d Q R X d S )NrO   )r=   iðI r   )	r@   r	   r   r…   rJ   rŒ   rS   r+   rH   )r   rK   r   r   r   ÚtestSeekPostEndTwiceMultiStreamf  s    

z+BZ2FileTest.testSeekPostEndTwiceMultiStreamc          	   C   sN   |   ¡  t| jƒ2}| d¡ |  | ¡ d¡ |  | ¡ | j¡ W d Q R X d S )Nijÿÿÿr   )r@   r	   r   r…   rJ   rŒ   rH   r+   )r   rK   r   r   r   ÚtestSeekPreStartn  s
    
zBZ2FileTest.testSeekPreStartc          	   C   sV   | j dd t| jƒ6}| d¡ |  | ¡ d¡ |  | ¡ | jd ¡ W d Q R X d S )Nr‚   )r=   ijÿÿÿr   )r@   r	   r   r…   rJ   rŒ   rH   r+   )r   rK   r   r   r   ÚtestSeekPreStartMultiStreamu  s
    
z'BZ2FileTest.testSeekPreStartMultiStreamc          	   C   s^   |   ¡  t| jdƒ2}t|ƒ}z|  | ¡ | ¡ ¡ W d | ¡  X W d Q R X |  t|j¡ d S )Nr   )	r@   r5   r   r	   rJ   Úfilenort   rC   rE   )r   ZrawfrK   r   r   r   Ú
testFileno|  s    zBZ2FileTest.testFilenoc             C   sÔ   t t| jƒƒ}z(|  | ¡ ¡ | ¡  |  | ¡ ¡ W d | ¡  X |  t|j¡ t tƒ dƒ}z|  	| ¡ ¡ W d | ¡  X |  t|j¡ t| jƒ}dd„ |_t |ƒ}z|  	| ¡ ¡ W d | ¡  X |  t|j¡ d S )Nrw   c               S   s   dS )NFr   r   r   r   r   Ú<lambda>˜  r   z*BZ2FileTest.testSeekable.<locals>.<lambda>)
r	   r   r,   ra   ÚseekablerH   rt   rC   rE   ÚassertFalse)r   rK   Úsrcr   r   r   ÚtestSeekable†  s&    




zBZ2FileTest.testSeekablec             C   sŒ   t t| jƒƒ}z(|  | ¡ ¡ | ¡  |  | ¡ ¡ W d | ¡  X |  t|j¡ t tƒ dƒ}z|  	| ¡ ¡ W d | ¡  X |  t|j¡ d S )Nrw   )
r	   r   r,   ra   ÚreadablerH   rt   rC   rE   r—   )r   rK   r   r   r   ÚtestReadable   s    

zBZ2FileTest.testReadablec             C   sŒ   t t| jƒƒ}z(|  | ¡ ¡ | ¡  |  | ¡ ¡ W d | ¡  X |  t|j¡ t tƒ dƒ}z|  	| ¡ ¡ W d | ¡  X |  t|j¡ d S )Nrw   )
r	   r   r,   r—   ÚwritablerH   rt   rC   rE   ra   )r   rK   r   r   r   ÚtestWritable±  s    

zBZ2FileTest.testWritablec             C   s*   |   ¡  xtdƒD ]}t| jƒ}~qW d S )Ni'  )r@   Úranger	   r   )r   ÚiÚor   r   r   ÚtestOpenDelÂ  s    
zBZ2FileTest.testOpenDelc             C   s   |   ttd¡ d S )Nz/non/existent)rC   rM   r	   )r   r   r   r   ÚtestOpenNonexistentÈ  s    zBZ2FileTest.testOpenNonexistentc          	   C   s†   d}t | jdƒ}| |¡ W d Q R X t| jƒ}| ¡ }W d Q R X |  |dg¡ t| jƒ}t| ¡ ƒ}W d Q R X |  |dg¡ d S )Ns,   BZh91AY&SYÙb‰]   €     !šh3M<]ÉáBCeŠ%tr;   s   Test)r5   r   r<   r	   rm   rJ   rp   )r   r   r?   rK   ÚlinesZxlinesr   r   r   ÚtestReadlinesNoNewlineË  s    z"BZ2FileTest.testReadlinesNoNewlinec          	   C   s¶   d }t | jdƒ}| d¡ W d Q R X t | jdƒ}| ¡  y| W d Q R X W n tk
rb   Y nX |  d¡ y$t | jdƒ}dd  W d Q R X W n tk
r¦   Y nX |  d¡ d S )Nr;   s   xxxr   z4__enter__ on a closed file didn't raise an exceptionr   r   z1/0 didn't raise an exception)r	   r   r<   rt   rE   ÚfailÚZeroDivisionError)r   r?   r   r   r   ÚtestContextProtocol×  s"    
zBZ2FileTest.testContextProtocolc          
      sb   dd ‰d}t | jdƒ@‰‡‡fdd„‰ ‡ fdd„t|ƒD ƒ}t |¡ W d Q R X W d Q R X d S )	Nó   1i   rB   r;   c                 s    xt dƒD ]} ˆ ˆ ¡ q
W d S )NrO   )rž   r<   )rŸ   )r   r?   r   r   Úcompñ  s    z'BZ2FileTest.testThreading.<locals>.compc                s   g | ]}t jˆ d ‘qS ))Útarget)Ú	threadingÚThread)Ú.0rŸ   )r©   r   r   ú
<listcomp>ô  s    z-BZ2FileTest.testThreading.<locals>.<listcomp>)r	   r   rž   r   Ústart_threads)r   ZnthreadsÚthreadsr   )r©   r   r?   r   ÚtestThreadingì  s    zBZ2FileTest.testThreadingc          	   C   s   |   ¡  t| jd ƒ}|d }t| jƒH}| |¡ |  t|ƒ| jd |d … ¡ |  | ¡ | j|d … ¡ W d Q R X t| jƒ:}| 	¡  |  t|ƒ| jd ¡ |  | 	¡ | jd ¡ W d Q R X t| jƒ,}| 
¡  |  tt|¡ |  | 
¡ g ¡ W d Q R X d S )Nr   r‚   r   )r@   rS   r)   r	   r   rH   rJ   ru   r+   ri   rm   rC   ÚStopIteration)r   ZlinelenZhalflenrK   r   r   r   ÚtestMixedIterationAndReadsø  s    
$ z&BZ2FileTest.testMixedIterationAndReadsc          	   C   sz   d}d}t | jdƒ}| |¡ W d Q R X t | jdƒ}| |¡ W d Q R X t | jƒ}|  | ¡ || ¡ W d Q R X d S )Ns¸  foofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoos¸  barbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarrw   r|   )r	   r   r<   rJ   rH   )r   Zdata1Zdata2rK   r   r   r   ÚtestMultiStreamOrdering	  s    z#BZ2FileTest.testMultiStreamOrderingc          	   C   sª   | j }y| d¡}W n tk
r2   |  d¡ Y nX t|dƒ}| | j¡ W d Q R X t|dƒ}|  | ¡ | j¡ W d Q R X t|dƒ}|  | ¡ | j¡ W d Q R X d S )NÚasciiz%Temporary file name needs to be ASCIIr;   r   )	r   ÚencodeÚUnicodeEncodeErrorÚskipTestr	   r<   r,   rJ   rH   )r   Zstr_filenameZbytes_filenamer?   r   r   r   ÚtestOpenBytesFilename  s    z!BZ2FileTest.testOpenBytesFilenamec          	   C   sZ   t  | j¡}t|dƒ}| | j¡ W d Q R X t|dƒ}|  | ¡ | j¡ W d Q R X d S )Nr;   r   )ÚpathlibZPathr   r	   r<   r,   rJ   rH   )r   r   r?   r   r   r   ÚtestOpenPathLikeFilename"  s
    z$BZ2FileTest.testOpenPathLikeFilenamec             C   sh   t jdtdƒ dd}|  t|ƒtj¡ tt|ƒƒ}|  	| 
d¡d¡ dt }|  |jj ¡ |d¡ dS )z-Decompressed data buffering should be limitedó    g    €„>Aé	   )r   r   z)Excessive amount of data was decompressedN)r   r8   ÚintÚ
assertLessrS   rQ   rR   r	   r   rJ   rH   r   ÚassertLessEqualÚ_bufferÚrawrŒ   )r   ZbombÚdecompZ
max_decompr   r   r   ÚtestDecompressLimited)  s    z!BZ2FileTest.testDecompressLimitedc          
   C   s^   t | jƒJ}t|ƒ*}|  t|jtƒ ¡ |  | ¡ | j¡ W d Q R X |  	|j
¡ W d Q R X d S )N)r   r,   r	   rC   rD   rH   rI   rJ   r+   r—   Úclosed)r   ÚbiorK   r   r   r   ÚtestReadBytesIO7  s
    
zBZ2FileTest.testReadBytesIOc          
   C   sj   t | jƒV}t|ƒB}| ¡ }|  t|ƒd¡ |  | j |¡¡ |  	| 
¡ | j¡ W d Q R X W d Q R X d S )Nr   )r   r,   r	   r_   r`   rS   ra   r+   rb   rJ   rH   )r   rÆ   rK   rc   r   r   r   ÚtestPeekBytesIO>  s    
zBZ2FileTest.testPeekBytesIOc          
   C   sh   t ƒ X}t|dƒ }|  t|j¡ | | j¡ W d Q R X |  t| ¡ ƒ| j¡ |  	|j
¡ W d Q R X d S )Nrw   )r   r	   rC   rD   r<   r+   rJ   r   Úgetvaluer—   rÅ   )r   rÆ   rK   r   r   r   ÚtestWriteBytesIOF  s    zBZ2FileTest.testWriteBytesIOc          
   C   s`   t | jƒL}t|ƒ8}|  t|j¡ | d¡ |  | ¡ | jdd … ¡ W d Q R X W d Q R X d S )Nr„   )	r   r,   r	   rC   rD   r…   rJ   rH   r+   )r   rÆ   rK   r   r   r   ÚtestSeekForwardBytesION  s
    

z"BZ2FileTest.testSeekForwardBytesIOc          
   C   s^   t | jƒJ}t|ƒ6}| d¡ | dd¡ |  | ¡ | jdd … ¡ W d Q R X W d Q R X d S )Niô  ijÿÿÿr   i^  )r   r,   r	   rH   r…   rJ   r+   )r   rÆ   rK   r   r   r   ÚtestSeekBackwardsBytesIOU  s
    

z$BZ2FileTest.testSeekBackwardsBytesIOc          
   C   s¼   | j d d… }tt|ƒƒ}|  t|j¡ W d Q R X tt|ƒƒ0}|  | t| jƒ¡| j¡ |  t|jd¡ W d Q R X x@t	dƒD ]4}tt|d |… ƒƒ}|  t|jd¡ W d Q R X q€W d S )Niöÿÿÿr   é   )
r,   r	   r   rC   ÚEOFErrorrH   rJ   rS   r+   rž   )r   Z	truncatedr?   rŸ   r   r   r   Útest_read_truncated\  s    zBZ2FileTest.test_read_truncatedN)r   r   )?r%   r&   r'   r(   r@   rG   rL   rN   rP   rU   rV   rW   rX   r[   r\   r^   rd   rh   rk   rl   rn   ro   rr   rs   rv   rx   ry   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Ï   r   r   r   r   r:   V   sx   
	

	
r:   c               @   sD   e Zd Zdd„ Zdd„ Zdd„ Zeed dd	d
d„ ƒZdd„ Z	dS )ÚBZ2CompressorTestc             C   sB   t ƒ }|  t|j¡ | | j¡}|| ¡ 7 }|  t|ƒ| j¡ d S )N)r
   rC   rD   r8   r+   ÚflushrJ   r   )r   Úbz2cr   r   r   r   ÚtestCompressk  s
    zBZ2CompressorTest.testCompressc             C   s.   t ƒ }| d¡}|| ¡ 7 }|  || j¡ d S )Nr   )r
   r8   rÑ   rJ   r-   )r   rÒ   r   r   r   r   ÚtestCompressEmptyStringr  s    
z)BZ2CompressorTest.testCompressEmptyStringc             C   sl   t ƒ }d}d}x:| j|d |d d … }|s0P || |¡7 }|d7 }qW || ¡ 7 }|  t|ƒ| j¡ d S )Nr   r   rB   r   )r
   r+   r8   rÑ   rJ   r   )r   rÒ   rf   r   rZ   r   r   r   ÚtestCompressChunks10x  s    z&BZ2CompressorTest.testCompressChunks10r]   r‚   )ÚsizeÚmemusec             C   sp   t ƒ }d| }z| |¡}|| ¡ 7 }W d d }X t |¡}z*|  t|ƒ|¡ |  t| d¡ƒd¡ W d d }X d S )Nó   xr   )r
   r8   rÑ   r   r   rJ   rS   Ústrip)r   rÖ   rÒ   r   Ú
compressedr   r   r   ÚtestCompress4G…  s    

z BZ2CompressorTest.testCompress4Gc          
   C   s@   x:t tjd ƒD ](}|  t¡ t tƒ |¡ W d Q R X qW d S )Nr   )rž   ÚpickleÚHIGHEST_PROTOCOLrC   rD   Údumpsr
   )r   Úprotor   r   r   Ú
testPickle–  s    zBZ2CompressorTest.testPickleN)
r%   r&   r'   rÓ   rÔ   rÕ   r   r   rÛ   rà   r   r   r   r   rÐ   j  s
   rÐ   c               @   sŠ   e Zd Zdd„ Zdd„ Zdd„ Zdd„ Zd	d
„ Zee	d dd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„ ƒZdS )ÚBZ2DecompressorTestc             C   s   |   ttd¡ d S )Né*   )rC   rD   r   )r   r   r   r   Útest_Constructor  s    z$BZ2DecompressorTest.test_Constructorc             C   s2   t ƒ }|  t|j¡ | | j¡}|  || j¡ d S )N)r   rC   rD   r   r,   rJ   r+   )r   Úbz2drY   r   r   r   ÚtestDecompress   s    z"BZ2DecompressorTest.testDecompressc             C   s\   t ƒ }d}d}x:| j|d |d d … }|s0P || |¡7 }|d7 }qW |  || j¡ d S )Nr   r   rB   r   )r   r,   r   rJ   r+   )r   rä   rY   rf   rZ   r   r   r   ÚtestDecompressChunks10¦  s    z*BZ2DecompressorTest.testDecompressChunks10c             C   s:   t ƒ }d}| | j| ¡}|  || j¡ |  |j|¡ d S )Ns   this is unused data)r   r   r,   rJ   r+   Úunused_data)r   rä   rç   rY   r   r   r   ÚtestDecompressUnusedData²  s
    z,BZ2DecompressorTest.testDecompressUnusedDatac             C   s6   t ƒ }| | j¡}|  t|jd¡ |  t|jd¡ d S )Ns   anythingr   )r   r   r,   rC   rÎ   )r   rä   rY   r   r   r   ÚtestEOFError¹  s    z BZ2DecompressorTest.testEOFErrorr]   gffffff
@)rÖ   r×   c             C   sj   d}t  |d ¡ |d¡}z<||| d  }t |¡}tƒ }| |¡}|  ||k¡ W d d }d }d }X d S )Ni    é   Úlittler   )ÚrandomÚgetrandbitsÚto_bytesr   r8   r   r   ra   )r   rÖ   Ú	blocksizeÚblockr   rÚ   rä   Zdecompressedr   r   r   ÚtestDecompress4G¿  s    

z$BZ2DecompressorTest.testDecompress4Gc          
   C   s@   x:t tjd ƒD ](}|  t¡ t tƒ |¡ W d Q R X qW d S )Nr   )rž   rÜ   rÝ   rC   rD   rÞ   r   )r   rß   r   r   r   rà   Ï  s    zBZ2DecompressorTest.testPicklec             C   s  t ƒ }d}g }t| jƒd }| |j| jd |… |d¡ |  |j¡ |  t|d ƒ|¡ | |jd|d¡ |  |j¡ |  t|d ƒ|¡ | |j| j|d … |d¡ |  t|d ƒ|¡ x2|j	sò| |jd|d¡ |  t|d ƒ|¡ qÂW d 
|¡}|  || j¡ |  |jd¡ d S )Nr]   é@   )Ú
max_lengthéÿÿÿÿr   )r   rS   r9   Úappendr   r—   Úneeds_inputrJ   rÀ   Úeofr*   r0   rç   )r   Úbzdró   ÚoutZlen_r   r   r   ÚtestDecompressorChunksMaxsizeÔ  s(    


z1BZ2DecompressorTest.testDecompressorChunksMaxsizec             C   sŠ   t ƒ }g }|  |j| jd d… ddd¡ | | dd¡¡ | | | jdd… d¡¡ | | | jdd … ¡¡ |  d |¡| j¡ d S )Nr]   r   )ró   r   r‚   éi   é   )r   rJ   r   r,   rõ   r*   r+   )r   rø   rù   r   r   r   Útest_decompressor_inputbuf_1ó  s    z0BZ2DecompressorTest.test_decompressor_inputbuf_1c             C   s¤   t ƒ }g }|  |j| jd d… ddd¡ | | d¡¡ | | | jdd… d¡¡ | | | jdd… d¡¡ | | | jdd … ¡¡ |  d |¡| j¡ d S )NéÈ   r   )ró   r   i  r‚   i,  )r   rJ   r   r,   rõ   r*   r+   )r   rø   rù   r   r   r   Útest_decompressor_inputbuf_2	  s    z0BZ2DecompressorTest.test_decompressor_inputbuf_2c             C   st   t ƒ }g }| | | jd d… d¡¡ | | | jdd… d¡¡ | | | jdd … ¡¡ |  d |¡| j¡ d S )Nrþ   rO   i,  r   )r   rõ   r   r,   rJ   r*   r+   )r   rø   rù   r   r   r   Útest_decompressor_inputbuf_3  s    z0BZ2DecompressorTest.test_decompressor_inputbuf_3c             C   s6   t ƒ }|  t|j| jd ¡ |  t|j| jd ¡ d S )Né   )r   rC   Ú	Exceptionr   r.   )r   rø   r   r   r   Útest_failure.  s    z BZ2DecompressorTest.test_failurec             C   sL   t  td¡}tƒ }|ƒ }xtdƒD ]}| ¡  q"W | j|ƒ | ddd d S )NÚgettotalrefcountr]   r   rB   )Údelta)r   Úget_attributeÚsysr   rž   Ú__init__ÚassertAlmostEqual)r   r  rø   Zrefs_beforerŸ   r   r   r   Útest_refleaks_in___init__4  s    z-BZ2DecompressorTest.test_refleaks_in___init__N)r%   r&   r'   rã   rå   ræ   rè   ré   r   r   rñ   rà   rú   rý   rÿ   r   r  r   Úrefcount_testr
  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 )ÚCompressDecompressTestc             C   s"   t  | j¡}|  t|ƒ| j¡ d S )N)r   r8   r+   rJ   r   )r   r   r   r   r   rÓ   ?  s    z#CompressDecompressTest.testCompressc             C   s   t  d¡}|  || j¡ d S )Nr   )r   r8   rJ   r-   )r   rY   r   r   r   rÔ   C  s    
z.CompressDecompressTest.testCompressEmptyStringc             C   s   t  | j¡}|  || j¡ d S )N)r   r   r,   rJ   r+   )r   rY   r   r   r   rå   G  s    z%CompressDecompressTest.testDecompressc             C   s   t  d¡}|  |d¡ d S )Nr   )r   r   rJ   )r   rY   r   r   r   ÚtestDecompressEmptyK  s    
z*CompressDecompressTest.testDecompressEmptyc             C   s   t  | j¡}|  |d¡ d S )Nr   )r   r   r-   rJ   )r   rY   r   r   r   ÚtestDecompressToEmptyStringO  s    z2CompressDecompressTest.testDecompressToEmptyStringc             C   s   |   ttj| jd d… ¡ d S )Niöÿÿÿ)rC   rE   r   r   r,   )r   r   r   r   ÚtestDecompressIncompleteS  s    z/CompressDecompressTest.testDecompressIncompletec             C   s   |   ttj| j¡ d S )N)rC   rM   r   r   r.   )r   r   r   r   ÚtestDecompressBadDataV  s    z,CompressDecompressTest.testDecompressBadDatac             C   s&   t  | jd ¡}|  || jd ¡ d S )NrO   )r   r   r,   rJ   r+   )r   rY   r   r   r   ÚtestDecompressMultiStreamY  s    z0CompressDecompressTest.testDecompressMultiStreamc             C   s$   t  | j| j ¡}|  || j¡ d S )N)r   r   r,   r.   rJ   r+   )r   rY   r   r   r   ÚtestDecompressTrailingJunk]  s    z1CompressDecompressTest.testDecompressTrailingJunkc             C   s,   t  | jd | j ¡}|  || jd ¡ d S )NrO   )r   r   r,   r.   rJ   r+   )r   rY   r   r   r   Ú%testDecompressMultiStreamTrailingJunka  s    z<CompressDecompressTest.testDecompressMultiStreamTrailingJunkN)r%   r&   r'   rÓ   rÔ   rå   r  r  r  r  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d„ Z
dd„ Zdd„ Zdd„ ZdS )ÚOpenTestzTest the open function.c             O   s   t j||ŽS )N)r   r5   )r   ÚargsÚkwargsr   r   r   r5   i  s    zOpenTest.openc          
   C   s  xþdD ]ö}|dkrt | jƒ |  | j|¡}| | j¡ W d Q R X t| jdƒ }t| ¡ ƒ}|  || j¡ W d Q R X |  | jd¡}|  | ¡ | j¡ W d Q R X |  | jd¡}| | j¡ W d Q R X t| jdƒ$}t| ¡ ƒ}|  || jd ¡ W d Q R X qW d S )N)r;   Úxbr  r   Úabr‚   )r   r   r5   r<   r+   r   rH   rJ   )r   Úmoder?   Ú	file_datar   r   r   Útest_binary_modesl  s    

zOpenTest.test_binary_modesc          
   C   s  xþdD ]ö}|dkrt | jƒ |  | j|¡}| | j¡ W d Q R X t| jdƒ }t| ¡ ƒ}|  || j¡ W d Q R X |  | jd¡}|  | ¡ | j¡ W d Q R X |  | jd¡}| | j¡ W d Q R X t| jdƒ$}t| ¡ ƒ}|  || jd ¡ W d Q R X qW d S )N)rw   Úxr  r   r   r|   r‚   )r   r   r5   r<   r+   r   rH   rJ   )r   r  r?   r  r   r   r   Útest_implicit_binary_modes}  s    

z#OpenTest.test_implicit_binary_modesc          
   C   s"  | j  d¡}| dtj¡}x dD ]ø}|dkr8t| jƒ |  | j|¡}| |¡ W d Q R X t| jdƒ$}t	| 
¡ ƒ d¡}|  ||¡ W d Q R X |  | jd¡}|  | 
¡ |¡ W d Q R X |  | jd¡}| |¡ W d Q R X t| jdƒ(}t	| 
¡ ƒ d¡}|  ||d ¡ W d Q R X q"W d S )	Nrµ   Ú
)ÚwtÚxtr   r   ÚrtZatr‚   )r+   ÚdecodeÚreplacer!   Úlinesepr   r   r5   r<   r   rH   rJ   )r   rY   Útext_native_eolr  r?   r  r   r   r   Útest_text_modes  s"    
zOpenTest.test_text_modesc             C   sf   x`dD ]X}t | jƒ |  | j|¡}W d Q R X |  t¡  |  | j|¡}W d Q R X W d Q R X qW d S )N)r  r  r   )r   r   r5   rC   ÚFileExistsError)r   r  r?   r   r   r   Útest_x_mode¢  s    


zOpenTest.test_x_modec          	   C   sž   |   t| jƒd¡}|  | ¡ | j¡ W d Q R X |   t| jƒd¡}|  | ¡ | j¡ W d Q R X | j d¡}|   t| jƒd¡}|  | ¡ |¡ W d Q R X d S )Nr   r   rµ   r!  )r5   r   r,   rJ   rH   r+   r"  )r   r?   rY   r   r   r   Útest_fileobj«  s    zOpenTest.test_fileobjc             C   st   |   t| j| jd¡ |   t| j| jd¡ | j t| j| jddd | j t| j| jddd | j t| j| jddd	 d S )
NZwbtZxbtr   zutf-8)ÚencodingÚignore)Úerrorsr  )Únewline)rC   rE   r5   r   )r   r   r   r   Útest_bad_params´  s    zOpenTest.test_bad_paramsc          	   C   sª   | j  d¡}| dtj¡}| j| jddd}| |¡ W d Q R X t| jdƒ$}t| 	¡ ƒ d¡}|  
||¡ W d Q R X | j| jddd}|  
| 	¡ |¡ W d Q R X d S )Nrµ   r  r  z	utf-16-le)r*  r   r!  )r+   r"  r#  r!   r$  r5   r   r<   r   rH   rJ   )r   rY   r%  r?   r  r   r   r   Útest_encodingÁ  s    zOpenTest.test_encodingc          	   C   sX   |   | jd¡}| d¡ W d Q R X | j | jdddd}|  | ¡ d¡ W d Q R X d S )Nr;   s   fooÿbarr!  rµ   r+  )r*  r,  Zfoobar)r5   r   r<   rJ   rH   )r   r?   r   r   r   Útest_encoding_error_handlerÍ  s
    z$OpenTest.test_encoding_error_handlerc          	   C   sh   | j  d¡}| j| jddd}| |¡ W d Q R X | j| jddd}|  | ¡ |g¡ W d Q R X d S )Nrµ   r  r  )r-  r!  ú)r+   r"  r5   r   r<   rJ   rm   )r   rY   r?   r   r   r   Útest_newlineÕ  s
    zOpenTest.test_newlineN)r%   r&   r'   r(   r5   r  r  r&  r(  r)  r.  r/  r0  r2  r   r   r   r   r  f  s   		r  c               C   s   t  ttttt¡ t  ¡  d S )N)r   Úrun_unittestr:   rÐ   rá   r  r  Úreap_childrenr   r   r   r   Ú	test_mainÞ  s    r5  Ú__main__)$Útestr   Ztest.supportr   r   ÚunittestÚior   r   r!   rÜ   r1   rº   rì   r   r   r«   r   rQ   r  Úimport_moduler   r	   r
   r   r   r   ÚTestCaser   r:   rÐ   rá   r  r  r5  r%   r   r   r   r   Ú<module>   s@   
	4    2 #(x

