B
    u9aÇ’  ã               @   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ÚshutilZwhichÚ
subprocessZcheck_outputr   Ú
decompress)Údata© r   ú/usr/lib/python3.7/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   Z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__Z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)r1   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¾Ÿ/Ý^@ÚzÚ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   r@   rA   Ú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   )r9   r:   )r<   r+   r	   r   r@   ÚOSErrorrE   )r   rH   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é   )r9   )	r<   r	   r   r@   rA   rE   rF   rG   r(   )r   rH   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 )NrL   )r9   )Ú_compressionÚBUFFER_SIZEÚlenr)   r<   r	   r   r@   rA   rE   rF   rG   r(   )r   Úbuffer_sizerH   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   rG   rE   r(   )r   rH   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 )NrL   )r9   r:   )r<   r+   r	   r   rG   rE   r(   )r   rH   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   r@   rA   rE   rF   rG   )r   rH   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   r?   )r<   r	   r   rE   rG   r(   )r   rH   Ú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 )NrL   )r9   r   r?   )r<   r	   r   rE   rG   r(   )r   rH   rV   rW   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   rG   rE   r(   )r   rH   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ÚassertNotEqualrP   Ú
assertTruer(   Ú
startswithrG   rE   )r   rH   Ú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,   rG   r2   r(   rP   )r   rH   Ú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   r@   rA   Úreadliner&   rG   )r   rH   Ú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 )NrL   )r9   )r<   r	   r   r@   rA   rf   r&   rG   )r   rH   rg   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   r@   rA   Ú	readlinesrG   r&   )r   rH   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 )NrL   )r9   )r<   r	   r   r@   rA   rj   rG   r&   )r   rH   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   rG   ÚlistÚiterr&   )r   rH   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 )NrL   )r9   )r<   r	   r   rG   rm   rn   r&   )r   rH   r   r   r   ÚtestIteratorMultiStreamâ   s    z#BZ2FileTest.testIteratorMultiStreamc             C   s:   |   ¡  t| jƒ}| ¡  |  tt|¡ |  t|j¡ d S )N)r<   r	   r   Úcloser@   rB   Únextrj   )r   rH   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   r@   rA   r8   r(   r1   rG   r   rE   )r   rH   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 )Nrt   r   r?   r   r   )r	   r   r(   r8   r1   rG   r   rE   )r   rH   rc   rW   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 )NrL   )r   rt   r   )	r   r4   r(   r	   r   r8   r1   rG   rE   )r   ZexpectedrH   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 )Nrt   Úar   )r	   r   r@   rA   Ú
writelinesr&   rB   r1   rG   r   rE   r(   )r   rH   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 )Nrt   s   abcÚró   a)r	   r   r8   r@   rJ   ry   )r   rH   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 )Nrt   rx   r   é   )
r	   r   r@   rA   r8   r(   r1   rG   r   rE   )r   rH   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   r@   rA   ÚseekrG   rE   r(   )r   rH   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~   )r9   r€   )
r<   r	   r   r@   rA   r   rP   r(   rG   rE   )r   rH   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   rE   r   rG   r(   )r   rH   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~   )r9   rZ   r   ijÿÿÿr   iÎÿÿÿ)r<   r	   r   rP   r(   rE   r   rG   )r   rH   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   rG   rE   r(   rP   )r   rH   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~   )r9   iüÿÿ)r<   r	   r   r   rG   rE   r(   )r   rH   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   rG   ÚtellrP   r(   rE   )r   rH   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 )NrL   )r9   iðI r   )	r<   r	   r   r   rG   rˆ   rP   r(   rE   )r   rH   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   rG   rˆ   rP   r(   rE   )r   rH   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 )NrL   )r9   iðI r   )	r<   r	   r   r   rG   rˆ   rP   r(   rE   )r   rH   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   rG   rˆ   rE   r(   )r   rH   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~   )r9   ijÿÿÿr   )r<   r	   r   r   rG   rˆ   rE   r(   )r   rH   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<   r1   r   r	   rG   Úfilenorq   r@   rB   )r   ZrawfrH   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 )Nrt   c               S   s   dS )NFr   r   r   r   r   Ú<lambda>˜  r   z*BZ2FileTest.testSeekable.<locals>.<lambda>)
r	   r   r)   r^   ÚseekablerE   rq   r@   rB   ÚassertFalse)r   rH   Ú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 )Nrt   )
r	   r   r)   r^   ÚreadablerE   rq   r@   rB   r“   )r   rH   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 )Nrt   )
r	   r   r)   r“   ÚwritablerE   rq   r@   rB   r^   )r   rH   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)r@   rJ   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Š%tr7   s   Test)r1   r   r8   r	   rj   rG   rm   )r   r   r;   rH   Ú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 )Nr7   s   xxxr   z4__enter__ on a closed file didn't raise an exceptionr   r   z1/0 didn't raise an exception)r	   r   r8   rq   rB   Z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   r?   r7   c                 s    xt dƒD ]} ˆ ˆ ¡ q
W d S )NrL   )rš   r8   )r›   )r   r;   r   r   Úcompñ  s    z'BZ2FileTest.testThreading.<locals>.compc                s   g | ]}t jˆ d ‘qS ))Útarget)Ú	threadingZThread)Ú.0r›   )r¤   r   r   ú
<listcomp>ô  s    z-BZ2FileTest.testThreading.<locals>.<listcomp>)r	   r   rš   r   Zstart_threads)r   ZnthreadsZ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<   rP   r&   r	   r   rE   rG   rr   r(   rf   rj   r@   ÚStopIteration)r   ZlinelenZhalflenrH   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¸  barbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarrt   rx   )r	   r   r8   rG   rE   )r   Zdata1Zdata2rH   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 ASCIIr7   r   )	r   ÚencodeÚUnicodeEncodeErrorZskipTestr	   r8   r)   rG   rE   )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 )Nr7   r   )ÚpathlibZPathr   r	   r8   r)   rG   rE   )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   r4   ÚintZ
assertLessrP   rN   rO   r	   r   rG   rE   r   ÚassertLessEqualZ_bufferÚrawrˆ   )r   ZbombZ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	   r@   rA   rE   rF   rG   r(   r“   Úclosed)r   ÚbiorH   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]   rP   r^   r(   r_   rG   rE   )r   rº   rH   r`   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 )Nrt   )r   r	   r@   rA   r8   r(   rG   r   Úgetvaluer“   r¹   )r   rº   rH   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	   r@   rA   r   rG   rE   r(   )r   rº   rH   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	   rE   r   rG   r(   )r   rº   rH   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   r@   ÚEOFErrorrE   rG   rP   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<   rD   rI   rK   rM   rR   rS   rT   rU   rX   rY   r[   ra   re   rh   ri   rk   rl   ro   rp   rs   ru   rv   rw   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°   r²   r¸   r»   r¼   r¾   r¿   rÀ   rÃ   r   r   r   r   r6   V   sx   
	

	
r6   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
   r@   rA   r4   r(   ÚflushrG   r   )r   Úbz2cr   r   r   r   ÚtestCompressk  s
    zBZ2CompressorTest.testCompressc             C   s.   t ƒ }| d¡}|| ¡ 7 }|  || j¡ d S )Nr   )r
   r4   rÅ   rG   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   r?   r   )r
   r(   r4   rÅ   rG   r   )r   rÆ   rc   r   rW   r   r   r   ÚtestCompressChunks10x  s    z&BZ2CompressorTest.testCompressChunks10rZ   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
   r4   rÅ   r   r   rG   rP   Ú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_PROTOCOLr@   rA   Ú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é*   )r@   rA   r   )r   r   r   r   Útest_Constructor  s    z$BZ2DecompressorTest.test_Constructorc             C   s2   t ƒ }|  t|j¡ | | j¡}|  || j¡ d S )N)r   r@   rA   r   r)   rG   r(   )r   Úbz2drV   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   r?   r   )r   r)   r   rG   r(   )r   rØ   rV   rc   rW   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)   rG   r(   Úunused_data)r   rØ   rÛ   rV   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)   r@   rÂ   )r   rØ   rV   r   r   r   ÚtestEOFError¹  s    z BZ2DecompressorTest.testEOFErrorrZ   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   )ÚrandomZgetrandbitsÚto_bytesr   r4   r   r   r^   )r   rÊ   Z	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Ñ   r@   rA   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 )NrZ   é@   )Ú
max_lengthéÿÿÿÿr   )r   rP   r5   Úappendr   r“   Zneeds_inputrG   r¶   Úeofr'   r-   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 )NrZ   r   )rå   r   r~   éi   é   )r   rG   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   rG   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ï   rL   i,  r   )r   rç   r   r)   rG   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   r@   Ú	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ÚgettotalrefcountrZ   r   r?   )Zdelta)r   Zget_attributeÚsysr   rš   Ú__init__Z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   Z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   r4   r(   rG   r   )r   r   r   r   r   rÇ   ?  s    z#CompressDecompressTest.testCompressc             C   s   t  d¡}|  || j¡ d S )Nr   )r   r4   rG   r*   )r   rV   r   r   r   rÈ   C  s    
z.CompressDecompressTest.testCompressEmptyStringc             C   s   t  | j¡}|  || j¡ d S )N)r   r   r)   rG   r(   )r   rV   r   r   r   rÙ   G  s    z%CompressDecompressTest.testDecompressc             C   s   t  d¡}|  |d¡ d S )Nr   )r   r   rG   )r   rV   r   r   r   ÚtestDecompressEmptyK  s    
z*CompressDecompressTest.testDecompressEmptyc             C   s   t  | j¡}|  |d¡ d S )Nr   )r   r   r*   rG   )r   rV   r   r   r   ÚtestDecompressToEmptyStringO  s    z2CompressDecompressTest.testDecompressToEmptyStringc             C   s   |   ttj| jd d… ¡ d S )Niöÿÿÿ)r@   rB   r   r   r)   )r   r   r   r   ÚtestDecompressIncompleteS  s    z/CompressDecompressTest.testDecompressIncompletec             C   s   |   ttj| j¡ d S )N)r@   rJ   r   r   r+   )r   r   r   r   ÚtestDecompressBadDataV  s    z,CompressDecompressTest.testDecompressBadDatac             C   s&   t  | jd ¡}|  || jd ¡ d S )NrL   )r   r   r)   rG   r(   )r   rV   r   r   r   ÚtestDecompressMultiStreamY  s    z0CompressDecompressTest.testDecompressMultiStreamc             C   s$   t  | j| j ¡}|  || j¡ d S )N)r   r   r)   r+   rG   r(   )r   rV   r   r   r   ÚtestDecompressTrailingJunk]  s    z1CompressDecompressTest.testDecompressTrailingJunkc             C   s,   t  | jd | j ¡}|  || jd ¡ d S )NrL   )r   r   r)   r+   rG   r(   )r   rV   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   r1   )r   ÚargsÚkwargsr   r   r   r1   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)r7   Úxbr  r   Zabr~   )r   r   r1   r8   r(   r   rE   rG   )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)rt   Úxr  r   r{   rx   r~   )r   r   r1   r8   r(   r   rE   rG   )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   r1   r8   r   rE   rG   )r   rV   Ú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   r1   r@   Ú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  )r1   r   r)   rG   rE   r(   r  )r   r;   rV   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)r@   rB   r1   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  r1   r   r8   r   rE   rG   )r   rV   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 )Nr7   s   fooÿbarr  r­   r  )r  r  Zfoobar)r1   r   r8   rG   rE   )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  r1   r   r8   rG   rj   )r   rV   r;   r   r   r   Útest_newlineÕ  s
    zOpenTest.test_newlineN)r"   r#   r$   r%   r1   r  r	  r  r  r  r  r  r  r  r   r   r   r   r  f  s   		r  c               C   s   t  ttttt¡ t  ¡  d S )N)r   Zrun_unittestr6   rÄ   rÕ   rù   r  Zreap_childrenr   r   r   r   Ú	test_mainÞ  s    r  Ú__main__)$Ztestr   Ztest.supportr   r   ZunittestÚior   r   r   rÐ   r.   r±   rà   r   r   r¦   r   rN   rö   Úimport_moduler   r	   r
   r   r   r   ZTestCaser   r6   rÄ   rÕ   rù   r  r  r"   r   r   r   r   Ú<module>   s@   
	4    2 #(x

