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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rvP qvW ejedd Zd!d"„ Zd#d$„ ZdS )%ÚBaseTests    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__Ú
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   "   sF   
"$r   c               @   sæ  e Zd Zdzd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d/d0„ Zd1d2„ Zd3d4„ Zd5d6„ Zd7d8„ Zd9d:„ Zd;d<„ Zd=d>„ Z d?d@„ Z!dAdB„ Z"dCdD„ Z#dEdF„ Z$dGdH„ Z%dIdJ„ Z&dKdL„ Z'dMdN„ Z(dOdP„ Z)dQdR„ Z*dSdT„ Z+dUdV„ Z,dWdX„ Z-dYdZ„ Z.d[d\„ Z/d]d^„ Z0d_d`„ Z1dadb„ Z2dcdd„ Z3dedf„ Z4dgdh„ Z5didj„ Z6dkdl„ Z7dmdn„ Z8dodp„ Z9dqdr„ Z:dsdt„ Z;dudv„ Z<dwdx„ Z=dyS ){ÚBZ2FileTestr   r   c          	   C   s6   t | jdƒ }| | j| ¡ | |¡ W d Q R X d S )NÚwb)r0   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?   r@   Ú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   )r8   r9   )r;   r*   r	   r   r?   ÚOSErrorrD   )r   rG   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é   )r8   )	r;   r	   r   r?   r@   rD   rE   rF   r'   )r   rG   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 )NrK   )r8   )Ú_compressionÚBUFFER_SIZEÚlenr(   r;   r	   r   r?   r@   rD   rE   rF   r'   )r   Úbuffer_sizerG   r   r   r   ÚtestReadMonkeyMultiStreamw   s    $z%BZ2FileTest.testReadMonkeyMultiStreamc          	   C   s:   | j | jd t| jƒ}|  | ¡ | j¡ W d Q R X d S )N)r9   )r;   r*   r	   r   rF   rD   r'   )r   rG   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 )NrK   )r8   r9   )r;   r*   r	   r   rF   rD   r'   )r   rG   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?   r@   rD   rE   rF   )r   rG   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   rD   rF   r'   )r   rG   Ú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 )NrK   )r8   r   r>   )r;   r	   r   rD   rF   r'   )r   rG   rU   rV   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   rF   rD   r'   )r   rG   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ÚassertNotEqualrO   Ú
assertTruer'   Ú
startswithrF   rD   )r   rG   Ú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+   rF   r1   r'   rO   )r   rG   Ú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?   r@   Úreadliner%   rF   )r   rG   Ú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 )NrK   )r8   )r;   r	   r   r?   r@   re   r%   rF   )r   rG   rf   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?   r@   Ú	readlinesrF   r%   )r   rG   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 )NrK   )r8   )r;   r	   r   r?   r@   ri   rF   r%   )r   rG   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   rF   ÚlistÚiterr%   )r   rG   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 )NrK   )r8   )r;   r	   r   rF   rl   rm   r%   )r   rG   r   r   r   ÚtestIteratorMultiStreamâ   s    z#BZ2FileTest.testIteratorMultiStreamc             C   s:   |   ¡  t| jƒ}| ¡  |  tt|¡ |  t|j¡ d S )N)r;   r	   r   Úcloser?   rA   Únextri   )r   rG   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?   r@   r7   r'   r0   rF   r   rD   )r   rG   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 )Nrs   r   r>   r   r   )r	   r   r'   r7   r0   rF   r   rD   )r   rG   rb   rV   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 )NrK   )r   rs   r   )	r   r3   r'   r	   r   r7   r0   rF   rD   )r   ZexpectedrG   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 )Nrs   Úar   )r	   r   r?   r@   Ú
writelinesr%   rA   r0   rF   r   rD   r'   )r   rG   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 )Nrs   s   abcÚró   a)r	   r   r7   r?   rI   rx   )r   rG   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 )Nrs   rw   r   é   )
r	   r   r?   r@   r7   r'   r0   rF   r   rD   )r   rG   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?   r@   ÚseekrF   rD   r'   )r   rG   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}   )r8   r   )
r;   r	   r   r?   r@   r€   rO   r'   rF   rD   )r   rG   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   rD   r€   rF   r'   )r   rG   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}   )r8   rY   r   ijÿÿÿr   iÎÿÿÿ)r;   r	   r   rO   r'   rD   r€   rF   )r   rG   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€   rF   rD   r'   rO   )r   rG   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}   )r8   iüÿÿ)r;   r	   r   r€   rF   rD   r'   )r   rG   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€   rF   ÚtellrO   r'   rD   )r   rG   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 )NrK   )r8   iðI r   )	r;   r	   r   r€   rF   r‡   rO   r'   rD   )r   rG   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€   rF   r‡   rO   r'   rD   )r   rG   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 )NrK   )r8   iðI r   )	r;   r	   r   r€   rF   r‡   rO   r'   rD   )r   rG   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€   rF   r‡   rD   r'   )r   rG   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}   )r8   ijÿÿÿr   )r;   r	   r   r€   rF   r‡   rD   r'   )r   rG   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;   r0   r   r	   rF   Úfilenorp   r?   rA   )r   ZrawfrG   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 )Nrs   c               S   s   dS )NFr   r   r   r   r   Ú<lambda>˜  r   z*BZ2FileTest.testSeekable.<locals>.<lambda>)
r	   r   r(   r]   ÚseekablerD   rp   r?   rA   ÚassertFalse)r   rG   Ú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 )Nrs   )
r	   r   r(   r]   ÚreadablerD   rp   r?   rA   r’   )r   rG   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 )Nrs   )
r	   r   r(   r’   ÚwritablerD   rp   r?   rA   r]   )r   rG   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?   rI   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Š%tr6   s   Test)r0   r   r7   r	   ri   rF   rl   )r   r   r:   rG   Ú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 )Nr6   s   xxxr   z4__enter__ on a closed file didn't raise an exceptionr   r   z1/0 didn't raise an exception)r	   r   r7   rp   rA   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>   r6   c                 s    xt dƒD ]} ˆ ˆ ¡ q
W d S )NrK   )r™   r7   )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;   rO   r%   r	   r   rD   rF   rq   r'   re   ri   r?   ÚStopIteration)r   ZlinelenZhalflenrG   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¸  barbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarrs   rw   )r	   r   r7   rF   rD   )r   Zdata1Zdata2rG   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 ASCIIr6   r   )	r   ÚencodeÚUnicodeEncodeErrorZskipTestr	   r7   r(   rF   rD   )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 )Nr6   r   )ÚpathlibZPathr   r	   r7   r(   rF   rD   )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 )Nó    g    €„>Aé	   )r   r   z)Excessive amount of data was decompressed)r   r3   ÚintZ
assertLessrO   rM   rN   r	   r   rF   rD   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?   r@   rD   rE   rF   r'   r’   Úclosed)r   ÚbiorG   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\   rO   r]   r'   r^   rF   rD   )r   r¹   rG   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 )Nrs   )r   r	   r?   r@   r7   r'   rF   r   Úgetvaluer’   r¸   )r   r¹   rG   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?   r@   r€   rF   rD   r'   )r   r¹   rG   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	   rD   r€   rF   r'   )r   r¹   rG   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?   ÚEOFErrorrD   rF   rO   r'   r™   )r   Z	truncatedr:   rš   r   r   r   Útest_read_truncated\  s    zBZ2FileTest.test_read_truncatedN)r   r   )>r"   r#   r$   r;   rC   rH   rJ   rL   rQ   rR   rS   rT   rW   rX   rZ   r`   rd   rg   rh   rj   rk   rn   ro   rr   rt   ru   rv   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   r5   V   sv   
	

	
r5   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?   r@   r3   r'   ÚflushrF   r   )r   Úbz2cr   r   r   r   ÚtestCompressk  s
    zBZ2CompressorTest.testCompressc             C   s.   t ƒ }| d¡}|| ¡ 7 }|  || j¡ d S )Nr   )r
   r3   rÄ   rF   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'   r3   rÄ   rF   r   )r   rÅ   rb   r   rV   r   r   r   ÚtestCompressChunks10x  s    z&BZ2CompressorTest.testCompressChunks10rY   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
   r3   rÄ   r   r   rF   rO   Ú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?   r@   Ú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?   r@   r   )r   r   r   r   Útest_Constructor  s    z$BZ2DecompressorTest.test_Constructorc             C   s2   t ƒ }|  t|j¡ | | j¡}|  || j¡ d S )N)r   r?   r@   r   r(   rF   r'   )r   Úbz2drU   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   rF   r'   )r   r×   rU   rb   rV   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(   rF   r'   Úunused_data)r   r×   rÚ   rU   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×   rU   r   r   r   ÚtestEOFError¹  s    z BZ2DecompressorTest.testEOFErrorrY   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   r3   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?   r@   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 )NrY   é@   )Ú
max_lengthéÿÿÿÿr   )r   rO   r4   Úappendr   r’   Zneeds_inputrF   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 )NrY   r   )rä   r   r}   éi   é   )r   rF   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   rF   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î   rK   i,  r   )r   ræ   r   r(   rF   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ÚgettotalrefcountrY   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   r3   r'   rF   r   )r   r   r   r   r   rÆ   ?  s    z#CompressDecompressTest.testCompressc             C   s   t  d¡}|  || j¡ d S )Nr   )r   r3   rF   r)   )r   rU   r   r   r   rÇ   C  s    
z.CompressDecompressTest.testCompressEmptyStringc             C   s   t  | j¡}|  || j¡ d S )N)r   r   r(   rF   r'   )r   rU   r   r   r   rØ   G  s    z%CompressDecompressTest.testDecompressc             C   s   t  d¡}|  |d¡ d S )Nr   )r   r   rF   )r   rU   r   r   r   ÚtestDecompressEmptyK  s    
z*CompressDecompressTest.testDecompressEmptyc             C   s   t  | j¡}|  |d¡ d S )Nr   )r   r   r)   rF   )r   rU   r   r   r   ÚtestDecompressToEmptyStringO  s    z2CompressDecompressTest.testDecompressToEmptyStringc             C   s   |   ttj| jd d… ¡ d S )Niöÿÿÿ)r?   rA   r   r   r(   )r   r   r   r   ÚtestDecompressIncompleteS  s    z/CompressDecompressTest.testDecompressIncompletec             C   s   |   ttj| j¡ d S )N)r?   rI   r   r   r*   )r   r   r   r   ÚtestDecompressBadDataV  s    z,CompressDecompressTest.testDecompressBadDatac             C   s&   t  | jd ¡}|  || jd ¡ d S )NrK   )r   r   r(   rF   r'   )r   rU   r   r   r   ÚtestDecompressMultiStreamY  s    z0CompressDecompressTest.testDecompressMultiStreamc             C   s$   t  | j| j ¡}|  || j¡ d S )N)r   r   r(   r*   rF   r'   )r   rU   r   r   r   ÚtestDecompressTrailingJunk]  s    z1CompressDecompressTest.testDecompressTrailingJunkc             C   s,   t  | jd | j ¡}|  || jd ¡ d S )NrK   )r   r   r(   r*   rF   r'   )r   rU   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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 )ÚOpenTestc             O   s   t j||ŽS )N)r   r0   )r   ÚargsÚkwargsr   r   r   r0   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)r6   Úxbr  r   Zabr}   )r   r   r0   r7   r'   r   rD   rF   )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)rs   Úxr  r   rz   rw   r}   )r   r   r0   r7   r'   r   rD   rF   )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   r0   r7   r   rD   rF   )r   rU   Ú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   r0   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 )Nrz   r   r¬   r  )r0   r   r(   rF   rD   r'   r  )r   r:   rU   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?   rA   r0   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  r0   r   r7   r   rD   rF   )r   rU   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 )Nr6   s   fooÿbarr  r¬   r  )r  r  Zfoobar)r0   r   r7   rF   rD   )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  r0   r   r7   rF   ri   )r   rU   r:   r   r   r   Útest_newlineÕ  s
    zOpenTest.test_newlineN)r"   r#   r$   r0   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_unittestr5   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   rM   rõ   Úimport_moduler   r	   r
   r   r   r   ZTestCaser   r5   rÃ   rÔ   rø   r   r  r"   r   r   r   r   Ú<module>   s@   
	4    2 #(x

