a
    äzeÊ“  ã                   @   sJ  d dl mZ d dlmZmZ d dl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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rFe &¡  dS )é    )Úsupport)Ú
bigmemtestÚ_4GN)ÚBytesIOÚDEFAULT_BUFFER_SIZE)ÚunlinkÚbz2)ÚBZ2FileÚBZ2CompressorÚBZ2Decompressorc                 C   s8   t d u 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   ú#/usr/lib/python3.9/test/test_bz2.pyÚext_decompress   s
    r   c                	   @   sÐ   e Zd ZdZg d¢Zd e¡ZdZdZdZ	dZ
edƒZe ej e ej e¡¡d	¡¡D ]TZeed
ƒ*Ze
e eeƒe
d… ¡7 Z
W d  ƒ n1 s–0    Y  e
dkrX q®qXe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  ¡ \}| _t |¡ d S ©N)ÚtempfileÚmkstempÚfilenameÚosÚclose)ÚselfÚfdr   r   r   ÚsetUpP   s    zBaseTest.setUpc                 C   s   t | jƒ d S r   )r   r!   ©r$   r   r   r   ÚtearDownT   s    zBaseTest.tearDown)Ú__name__Ú
__module__Ú__qualname__Ú__doc__Ú
TEXT_LINESÚjoinÚTEXTÚDATAÚ
EMPTY_DATAÚBAD_DATAZ	test_sizeÚ	bytearrayÚBIG_TEXTÚglobr"   ÚpathÚescapeÚdirnameÚ__file__ZfnameÚopenZfhÚreadintoÚ
memoryviewr   ÚcompressÚBIG_DATAr&   r(   r   r   r   r   r   $   s    
&8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>dzd{„ Z?d|S )~ÚBZ2FileTestzTest the BZ2File class.r   r   c                 C   sJ   t | jdƒ*}| | j| ¡ | |¡ W d   ƒ n1 s<0    Y  d S )NÚwb)r:   r!   Úwriter0   )r$   ÚstreamsÚsuffixÚfr   r   r   ÚcreateTempFile[   s    zBZ2FileTest.createTempFilec                 C   s„   |   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 |   tttjdd	¡ d S )
Ngw¾Ÿ/Ý^@ÚzÚrxZrbtr   r   é
   Úré   )ÚassertRaisesÚ	TypeErrorr	   Ú
ValueErrorr"   Údevnullr'   r   r   r   ÚtestBadArgs`   s    zBZ2FileTest.testBadArgsc                 C   sZ   |   ¡  t| jƒ4}|  t|jtƒ ¡ |  | ¡ | j¡ W d   ƒ n1 sL0    Y  d S r   ©	rE   r	   r!   rK   rL   ÚreadÚfloatÚassertEqualr/   ©r$   Úbz2fr   r   r   ÚtestReadk   s    zBZ2FileTest.testReadc                 C   sL   | j d| jd t| jƒ}|  t|j¡ W d   ƒ n1 s>0    Y  d S )Nr   ©rB   rC   )rE   r2   r	   r!   rK   ÚOSErrorrQ   rT   r   r   r   ÚtestReadBadFileq   s    zBZ2FileTest.testReadBadFilec                 C   sb   | j dd t| jƒ8}|  t|jtƒ ¡ |  | ¡ | jd ¡ W d   ƒ n1 sT0    Y  d S ©Né   ©rB   rP   rT   r   r   r   ÚtestReadMultiStreamv   s    zBZ2FileTest.testReadMultiStreamc                 C   sˆ   t j}t| jƒt _zh| jdd t| jƒ8}|  t|j	t
ƒ ¡ |  | 	¡ | jd ¡ W d   ƒ n1 sh0    Y  W |t _n|t _0 d S rZ   )Ú_compressionÚBUFFER_SIZEÚlenr0   rE   r	   r!   rK   rL   rQ   rR   rS   r/   )r$   Zbuffer_sizerU   r   r   r   ÚtestReadMonkeyMultiStream|   s    6z%BZ2FileTest.testReadMonkeyMultiStreamc                 C   sN   | j | jd t| jƒ"}|  | ¡ | j¡ W d   ƒ n1 s@0    Y  d S )N)rC   ©rE   r2   r	   r!   rS   rQ   r/   rT   r   r   r   ÚtestReadTrailingJunk‰   s    z BZ2FileTest.testReadTrailingJunkc                 C   sT   | j d| jd t| jƒ&}|  | ¡ | jd ¡ W d   ƒ n1 sF0    Y  d S )Nr[   rW   rb   rT   r   r   r   ÚtestReadMultiStreamTrailingJunkŽ   s    z+BZ2FileTest.testReadMultiStreamTrailingJunkc                 C   sZ   |   ¡  t| jƒ4}|  t|jtƒ ¡ |  | d¡d¡ W d   ƒ n1 sL0    Y  d S )Nr   r   )rE   r	   r!   rK   rL   rQ   rR   rS   rT   r   r   r   Ú	testRead0“   s    zBZ2FileTest.testRead0c                 C   sb   |   ¡  t| jƒ<}d}| d¡}|s(q2||7 }q|  || j¡ W d   ƒ n1 sT0    Y  d S )Nr   rH   ©rE   r	   r!   rQ   rS   r/   ©r$   rU   ÚtextÚstrr   r   r   ÚtestReadChunk10™   s    

zBZ2FileTest.testReadChunk10c                 C   sj   | j dd t| jƒ@}d}| d¡}|s,q6||7 }q|  || jd ¡ W d   ƒ n1 s\0    Y  d S )Nr[   r\   r   rH   rf   rg   r   r   r   ÚtestReadChunk10MultiStream¤   s    

z&BZ2FileTest.testReadChunk10MultiStreamc                 C   sR   |   ¡  t| jƒ,}|  | d¡| jd d… ¡ W d   ƒ n1 sD0    Y  d S )Néd   )rE   r	   r!   rS   rQ   r/   rT   r   r   r   ÚtestRead100¯   s    zBZ2FileTest.testRead100c                 C   sr   |   ¡  t| jƒL}| ¡ }|  t|ƒd¡ |  | j |¡¡ |  	| 
¡ | j¡ W d   ƒ n1 sd0    Y  d S ©Nr   )rE   r	   r!   ÚpeekÚassertNotEqualr`   Ú
assertTruer/   Ú
startswithrS   rQ   )r$   rU   Ú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   ƒ n1 sª0    Y  d S )Né€   )rE   r	   r!   r3   rS   r;   r/   r`   )r$   rU   ÚnÚbr   r   r   ÚtestReadInto¼   s    zBZ2FileTest.testReadIntoc                 C   sb   |   ¡  t| jƒ<}|  t|jd ¡ | jD ]}|  | ¡ |¡ q*W d   ƒ n1 sT0    Y  d S r   ©rE   r	   r!   rK   rL   Úreadliner-   rS   ©r$   rU   Úliner   r   r   ÚtestReadLineÈ   s
    
zBZ2FileTest.testReadLinec                 C   sj   | j dd t| jƒ@}|  t|jd ¡ | jd D ]}|  | ¡ |¡ q2W d   ƒ n1 s\0    Y  d S rZ   ry   r{   r   r   r   ÚtestReadLineMultiStreamÏ   s
    z#BZ2FileTest.testReadLineMultiStreamc                 C   sX   |   ¡  t| jƒ2}|  t|jd ¡ |  | ¡ | j¡ W d   ƒ n1 sJ0    Y  d S r   ©rE   r	   r!   rK   rL   Ú	readlinesrS   r-   rT   r   r   r   ÚtestReadLinesÖ   s    zBZ2FileTest.testReadLinesc                 C   s`   | j dd t| jƒ6}|  t|jd ¡ |  | ¡ | jd ¡ W d   ƒ n1 sR0    Y  d S rZ   r   rT   r   r   r   ÚtestReadLinesMultiStreamÜ   s    z$BZ2FileTest.testReadLinesMultiStreamc                 C   sL   |   ¡  t| jƒ&}|  tt|ƒƒ| j¡ W d   ƒ n1 s>0    Y  d S r   ©rE   r	   r!   rS   ÚlistÚiterr-   rT   r   r   r   ÚtestIteratorâ   s    zBZ2FileTest.testIteratorc                 C   sT   | j dd t| jƒ*}|  tt|ƒƒ| jd ¡ W d   ƒ n1 sF0    Y  d S rZ   rƒ   rT   r   r   r   ÚtestIteratorMultiStreamç   s    z#BZ2FileTest.testIteratorMultiStreamc                 C   s:   |   ¡  t| jƒ}| ¡  |  tt|¡ |  t|j¡ d S r   )rE   r	   r!   r#   rK   rM   Únextr€   rT   r   r   r   ÚtestClosedIteratorDeadlockì   s
    
z&BZ2FileTest.testClosedIteratorDeadlockc                 C   sŒ   t | jdƒ*}|  t|j¡ | | j¡ W d   ƒ n1 s<0    Y  t| jdƒ&}|  t| 	¡ ƒ| j¡ W d   ƒ n1 s~0    Y  d S )NÚwr   ©
r	   r!   rK   rL   rA   r/   r:   rS   r   rQ   ©r$   rU   rD   r   r   r   Ú	testWriteõ   s
    *zBZ2FileTest.testWritec                 C   sª   t | jdƒH}d}| j|d |d d … }|s2qF| |¡ |d7 }qW d   ƒ n1 sZ0    Y  t| jdƒ&}|  t| ¡ ƒ| j¡ W d   ƒ n1 sœ0    Y  d S )NrŠ   r   rH   r   r   )r	   r!   r/   rA   r:   rS   r   rQ   )r$   rU   rv   ri   rD   r   r   r   ÚtestWriteChunks10ü   s    
(zBZ2FileTest.testWriteChunks10c                 C   sŒ   t j| jdd}t| jddd}| | j¡ W d   ƒ n1 sB0    Y  t| jdƒ }|  | ¡ |¡ W d   ƒ n1 s~0    Y  d S )Nr[   r   rŠ   r   )	r   r=   r/   r	   r!   rA   r:   rS   rQ   )r$   ZexpectedrU   rD   r   r   r   Ú testWriteNonDefaultCompressLevel  s
    *z,BZ2FileTest.testWriteNonDefaultCompressLevelc                 C   sž   t | jdƒ*}|  t|j¡ | | j¡ W d   ƒ n1 s<0    Y  |  t|jdg¡ t| jdƒ&}|  t	| 
¡ ƒ| j¡ W d   ƒ n1 s0    Y  d S )NrŠ   Úar   )r	   r!   rK   rL   Ú
writelinesr-   rM   r:   rS   r   rQ   r/   rŒ   r   r   r   ÚtestWriteLines  s    *zBZ2FileTest.testWriteLinesc                 C   sˆ   t | jdƒ}| d¡ W d   ƒ n1 s,0    Y  t | jdƒ2}|  t|jd¡ |  t|jdg¡ W d   ƒ n1 sz0    Y  d S )NrŠ   s   abcrI   ó   a)r	   r!   rA   rK   rX   r‘   rT   r   r   r   ÚtestWriteMethodsOnReadOnlyFile  s
    (z*BZ2FileTest.testWriteMethodsOnReadOnlyFilec                 C   sÖ   t | jdƒ*}|  t|j¡ | | j¡ W d   ƒ n1 s<0    Y  t | jdƒ*}|  t|j¡ | | j¡ W d   ƒ n1 s‚0    Y  t| jdƒ*}|  t| 	¡ ƒ| jd ¡ W d   ƒ n1 sÈ0    Y  d S )NrŠ   r   r   é   r‹   rŒ   r   r   r   Ú
testAppend!  s    **zBZ2FileTest.testAppendc                 C   sh   |   ¡  t| jƒB}|  t|j¡ | d¡ |  | ¡ | jdd … ¡ W d   ƒ n1 sZ0    Y  d S ©Né–   )	rE   r	   r!   rK   rL   ÚseekrS   rQ   r/   rT   r   r   r   ÚtestSeekForward+  s
    
zBZ2FileTest.testSeekForwardc                 C   sv   | j dd t| jƒL}|  t|j¡ | t| jƒd ¡ |  | 	¡ | jdd … ¡ W d   ƒ n1 sh0    Y  d S )Nr•   r\   r˜   )
rE   r	   r!   rK   rL   r™   r`   r/   rS   rQ   rT   r   r   r   ÚtestSeekForwardAcrossStreams2  s
    z(BZ2FileTest.testSeekForwardAcrossStreamsc                 C   sf   |   ¡  t| jƒ@}| d¡ | dd¡ |  | ¡ | jdd … ¡ W d   ƒ n1 sX0    Y  d S ©Niô  éjÿÿÿr   i^  )rE   r	   r!   rQ   r™   rS   r/   rT   r   r   r   ÚtestSeekBackwards9  s
    
zBZ2FileTest.testSeekBackwardsc                 C   s   | j dd t| jƒf}t| jƒd }|dkrB|t| |¡ƒ8 }q&| dd¡ |  | ¡ | jdd … | j ¡ W d   ƒ n1 s‚0    Y  d S )Nr•   r\   rl   r   r   r   iÎÿÿÿ)rE   r	   r!   r`   r/   rQ   r™   rS   )r$   rU   Zreadtor   r   r   ÚtestSeekBackwardsAcrossStreams@  s    z*BZ2FileTest.testSeekBackwardsAcrossStreamsc                 C   sf   |   ¡  t| jƒ@}| dd¡ |  | ¡ | jt| jƒd d … ¡ W d   ƒ n1 sX0    Y  d S )Nr   r•   r˜   )rE   r	   r!   r™   rS   rQ   r/   r`   rT   r   r   r   ÚtestSeekBackwardsFromEndI  s    z$BZ2FileTest.testSeekBackwardsFromEndc                 C   sd   | j dd t| jƒ:}| dd¡ |  | ¡ | jd dd … ¡ W d   ƒ n1 sV0    Y  d S )Nr•   r\   iüÿÿ)rE   r	   r!   r™   rS   rQ   r/   rT   r   r   r   Ú%testSeekBackwardsFromEndAcrossStreamsO  s    z1BZ2FileTest.testSeekBackwardsFromEndAcrossStreamsc                 C   sf   |   ¡  t| jƒ@}| d¡ |  | ¡ t| jƒ¡ |  | ¡ d¡ W d   ƒ n1 sX0    Y  d S ©NéðI r   ©	rE   r	   r!   r™   rS   Útellr`   r/   rQ   rT   r   r   r   ÚtestSeekPostEndU  s
    
zBZ2FileTest.testSeekPostEndc                 C   sn   | j dd t| jƒD}| d¡ |  | ¡ t| jƒd ¡ |  | ¡ d¡ W d   ƒ n1 s`0    Y  d S ©Nr[   r\   r£   r   r¤   rT   r   r   r   ÚtestSeekPostEndMultiStream\  s
    
z&BZ2FileTest.testSeekPostEndMultiStreamc                 C   sp   |   ¡  t| jƒJ}| d¡ | d¡ |  | ¡ t| jƒ¡ |  | ¡ d¡ W d   ƒ n1 sb0    Y  d S r¢   r¤   rT   r   r   r   ÚtestSeekPostEndTwicec  s    

z BZ2FileTest.testSeekPostEndTwicec                 C   sx   | j dd t| jƒN}| d¡ | d¡ |  | ¡ t| jƒd ¡ |  | ¡ d¡ W d   ƒ n1 sj0    Y  d S r§   r¤   rT   r   r   r   ÚtestSeekPostEndTwiceMultiStreamk  s    

z+BZ2FileTest.testSeekPostEndTwiceMultiStreamc                 C   sb   |   ¡  t| jƒ<}| d¡ |  | ¡ d¡ |  | ¡ | j¡ W d   ƒ n1 sT0    Y  d S )Nr   r   ©rE   r	   r!   r™   rS   r¥   rQ   r/   rT   r   r   r   ÚtestSeekPreStarts  s
    
zBZ2FileTest.testSeekPreStartc                 C   sj   | j dd t| jƒ@}| d¡ |  | ¡ d¡ |  | ¡ | jd ¡ W d   ƒ n1 s\0    Y  d S )Nr•   r\   r   r   r«   rT   r   r   r   ÚtestSeekPreStartMultiStreamz  s
    
z'BZ2FileTest.testSeekPreStartMultiStreamc              	   C   sz   |   ¡  t| jdƒD}t|ƒ}z |  | ¡ | ¡ ¡ W | ¡  n
| ¡  0 W d   ƒ n1 s^0    Y  |  t|j¡ d S )Nr   )	rE   r:   r!   r	   rS   Úfilenor#   rK   rM   )r$   ZrawfrU   r   r   r   Ú
testFileno  s    2zBZ2FileTest.testFilenoc                 C   sì   t t| jƒƒ}z0|  | ¡ ¡ | ¡  |  | ¡ ¡ W | ¡  n
| ¡  0 |  t|j¡ t tƒ dƒ}z|  	| ¡ ¡ W | ¡  n
| ¡  0 |  t|j¡ t| jƒ}dd„ |_t |ƒ}z|  	| ¡ ¡ W | ¡  n
| ¡  0 |  t|j¡ d S )NrŠ   c                   S   s   dS )NFr   r   r   r   r   Ú<lambda>  r   z*BZ2FileTest.testSeekable.<locals>.<lambda>)
r	   r   r0   rq   ÚseekablerQ   r#   rK   rM   ÚassertFalse)r$   rU   Úsrcr   r   r   ÚtestSeekable‹  s&    

zBZ2FileTest.testSeekablec                 C   sœ   t t| jƒƒ}z0|  | ¡ ¡ | ¡  |  | ¡ ¡ W | ¡  n
| ¡  0 |  t|j¡ t tƒ dƒ}z|  	| ¡ ¡ W | ¡  n
| ¡  0 |  t|j¡ d S ©NrŠ   )
r	   r   r0   rq   ÚreadablerQ   r#   rK   rM   r²   rT   r   r   r   ÚtestReadable¥  s    zBZ2FileTest.testReadablec                 C   sœ   t t| jƒƒ}z0|  | ¡ ¡ | ¡  |  | ¡ ¡ W | ¡  n
| ¡  0 |  t|j¡ t tƒ dƒ}z|  	| ¡ ¡ W | ¡  n
| ¡  0 |  t|j¡ d S rµ   )
r	   r   r0   r²   ÚwritablerQ   r#   rK   rM   rq   rT   r   r   r   ÚtestWritable¶  s    zBZ2FileTest.testWritablec                 C   s&   |   ¡  tdƒD ]}t| jƒ}~qd S )Ni'  )rE   Úranger	   r!   )r$   ÚiÚor   r   r   ÚtestOpenDelÇ  s    
zBZ2FileTest.testOpenDelc                 C   s   |   ttd¡ d S )Nz/non/existent)rK   rX   r	   r'   r   r   r   ÚtestOpenNonexistentÍ  s    zBZ2FileTest.testOpenNonexistentc                 C   sÂ   d}t | jdƒ}| |¡ W d   ƒ n1 s00    Y  t| jƒ}| ¡ }W d   ƒ n1 sb0    Y  |  |dg¡ t| jƒ}t| ¡ ƒ}W d   ƒ n1 s¦0    Y  |  |dg¡ d S )Ns,   BZh91AY&SYÙb‰]   €     !šh3M<]ÉáBCeŠ%tr@   s   Test)r:   r!   rA   r	   r€   rS   r„   )r$   r   rD   rU   ÚlinesZxlinesr   r   r   ÚtestReadlinesNoNewlineÐ  s    (&*z"BZ2FileTest.testReadlinesNoNewlinec                 C   sî   d }t | jdƒ}| d¡ W d   ƒ n1 s00    Y  t | jdƒ}| ¡  z(| W d   ƒ n1 sj0    Y  W n tyˆ   Y n0 |  d¡ z8t | jdƒ}dd  W d   ƒ n1 sÀ0    Y  W n tyÞ   Y n0 |  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!   rA   r#   rM   ZfailÚZeroDivisionError©r$   rD   r   r   r   ÚtestContextProtocolÜ  s"    ("
*zBZ2FileTest.testContextProtocolc              	      sŠ   dd ‰d}t | jdƒ^‰‡‡fdd„‰ ‡ fdd„t|ƒD ƒ}t |¡ W d   ƒ n1 s^0    Y  W d   ƒ n1 s|0    Y  d S )	Nó   1i   rH   r@   c                     s   t dƒD ]} ˆ ˆ ¡ qd S ©Nr[   )rº   rA   )r»   )r   rD   r   r   Úcompö  s    z'BZ2FileTest.testThreading.<locals>.compc                    s   g | ]}t jˆ d ‘qS ))Útarget)Ú	threadingÚThread)Ú.0r»   )rÆ   r   r   Ú
<listcomp>ù  r   z-BZ2FileTest.testThreading.<locals>.<listcomp>)r	   r!   rº   r   Zstart_threads)r$   ZnthreadsÚthreadsr   )rÆ   r   rD   r   ÚtestThreadingñ  s    zBZ2FileTest.testThreadingc                 C   s>  |   ¡  t| jd ƒ}|d }t| jƒR}| |¡ |  t|ƒ| jd |d … ¡ |  | ¡ | j|d … ¡ W d   ƒ n1 s€0    Y  t| jƒD}| 	¡  |  t|ƒ| jd ¡ |  | 	¡ | jd ¡ W d   ƒ n1 sÞ0    Y  t| jƒ6}| 
¡  |  tt|¡ |  | 
¡ g ¡ W d   ƒ n1 s00    Y  d S )Nr   r•   r   )rE   r`   r-   r	   r!   rQ   rS   rˆ   r/   rz   r€   rK   ÚStopIteration)r$   ZlinelenZhalflenrU   r   r   r   ÚtestMixedIterationAndReadsý  s    
84z&BZ2FileTest.testMixedIterationAndReadsc                 C   s¶   d}d}t | jdƒ}| |¡ W d   ƒ n1 s40    Y  t | jdƒ}| |¡ W d   ƒ n1 sj0    Y  t | jƒ$}|  | ¡ || ¡ W d   ƒ n1 s¨0    Y  d S )Ns¸  foofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoos¸  barbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarrŠ   r   )r	   r!   rA   rS   rQ   )r$   Zdata1Zdata2rU   r   r   r   ÚtestMultiStreamOrdering  s    ((z#BZ2FileTest.testMultiStreamOrderingc                 C   sä   | j }z| d¡}W n ty0   |  d¡ Y n0 t|dƒ}| | j¡ W d   ƒ n1 s^0    Y  t|dƒ"}|  | ¡ | j¡ W d   ƒ n1 sš0    Y  t|dƒ"}|  | ¡ | j¡ W d   ƒ n1 sÖ0    Y  d S )NÚasciiz%Temporary file name needs to be ASCIIr@   r   )	r!   ÚencodeÚUnicodeEncodeErrorZskipTestr	   rA   r0   rS   rQ   )r$   Zstr_filenameZbytes_filenamerD   r   r   r   ÚtestOpenBytesFilename  s    *0z!BZ2FileTest.testOpenBytesFilenamec                 C   s‚   t  | j¡}t|dƒ}| | j¡ W d   ƒ n1 s80    Y  t|dƒ"}|  | ¡ | j¡ W d   ƒ n1 st0    Y  d S )Nr@   r   )ÚpathlibÚPathr!   r	   rA   r0   rS   rQ   )r$   r!   rD   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   r=   ÚintZ
assertLessr`   r^   r_   r	   r   rS   rQ   r   ÚassertLessEqualÚ_bufferÚrawr¥   )r$   ZbombÚdecompZ
max_decompr   r   r   ÚtestDecompressLimited.  s    ÿz!BZ2FileTest.testDecompressLimitedc              	   C   s†   t | jƒh}t|ƒ4}|  t|jtƒ ¡ |  | ¡ | j¡ W d   ƒ n1 sN0    Y  |  	|j
¡ W d   ƒ n1 sx0    Y  d S r   )r   r0   r	   rK   rL   rQ   rR   rS   r/   r²   Úclosed©r$   ÚbiorU   r   r   r   ÚtestReadBytesIO<  s
    
0zBZ2FileTest.testReadBytesIOc              	   C   s’   t | jƒt}t|ƒL}| ¡ }|  t|ƒd¡ |  | j |¡¡ |  	| 
¡ | j¡ W d   ƒ n1 sf0    Y  W d   ƒ n1 s„0    Y  d S rn   )r   r0   r	   ro   rp   r`   rq   r/   rr   rS   rQ   )r$   râ   rU   rs   r   r   r   ÚtestPeekBytesIOC  s    
zBZ2FileTest.testPeekBytesIOc              	   C   s   t ƒ v}t|dƒ*}|  t|j¡ | | j¡ W d   ƒ n1 sB0    Y  |  t| ¡ ƒ| j¡ |  	|j
¡ W d   ƒ n1 s‚0    Y  d S rµ   )r   r	   rK   rL   rA   r/   rS   r   Úgetvaluer²   rà   rá   r   r   r   ÚtestWriteBytesIOK  s    *zBZ2FileTest.testWriteBytesIOc              	   C   sˆ   t | jƒj}t|ƒB}|  t|j¡ | d¡ |  | ¡ | jdd … ¡ W d   ƒ n1 s\0    Y  W d   ƒ n1 sz0    Y  d S r—   )	r   r0   r	   rK   rL   r™   rS   rQ   r/   rá   r   r   r   ÚtestSeekForwardBytesIOS  s
    

z"BZ2FileTest.testSeekForwardBytesIOc              	   C   s†   t | jƒh}t|ƒ@}| d¡ | dd¡ |  | ¡ | jdd … ¡ W d   ƒ n1 sZ0    Y  W d   ƒ n1 sx0    Y  d S rœ   )r   r0   r	   rQ   r™   rS   r/   rá   r   r   r   ÚtestSeekBackwardsBytesIOZ  s
    

z$BZ2FileTest.testSeekBackwardsBytesIOc              	   C   sô   | j d d… }tt|ƒƒ}|  t|j¡ W d   ƒ n1 s>0    Y  tt|ƒƒ:}|  | t| jƒ¡| j¡ |  t|jd¡ W d   ƒ n1 s”0    Y  t	dƒD ]H}tt|d |… ƒƒ }|  t|jd¡ W d   ƒ q¦1 sä0    Y  q¦d S )Néöÿÿÿr   é   )
r0   r	   r   rK   ÚEOFErrorrQ   rS   r`   r/   rº   )r$   Z	truncatedrD   r»   r   r   r   Útest_read_truncateda  s    ,.zBZ2FileTest.test_read_truncatedc                 C   sp   t   dg d¢¡}t|ƒ|j }ttƒ dƒ2}|  | |¡|¡ |  | ¡ |¡ W d   ƒ n1 sb0    Y  d S )NÚQ)r   r•   rJ   é   r[   rŠ   )Úarrayr`   Úitemsizer	   r   rS   rA   r¥   )r$   ÚqZLENGTHrD   r   r   r   Útest_issue44439n  s
    zBZ2FileTest.test_issue44439N)r   r   )@r)   r*   r+   r,   rE   rO   rV   rY   r]   ra   rc   rd   re   rj   rk   rm   rt   rx   r}   r~   r   r‚   r†   r‡   r‰   r   rŽ   r   r’   r”   r–   rš   r›   rž   rŸ   r    r¡   r¦   r¨   r©   rª   r¬   r­   r¯   r´   r·   r¹   r½   r¾   rÀ   rÃ   rÍ   rÏ   rÐ   rÔ   r×   rß   rã   rä   ræ   rç   rè   rì   rò   r   r   r   r   r?   X   sz   
	

	
r?   c                   @   sJ   e Zd Zdd„ Zdd„ Zdd„ Zej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 r   )r
   rK   rL   r=   r/   ÚflushrS   r   ©r$   Úbz2cr   r   r   r   ÚtestCompressx  s
    zBZ2CompressorTest.testCompressc                 C   s.   t ƒ }| d¡}|| ¡ 7 }|  || j¡ d S ©Nr   )r
   r=   rô   rS   r1   rõ   r   r   r   ÚtestCompressEmptyString  s    
z)BZ2CompressorTest.testCompressEmptyStringc                 C   sh   t ƒ }d}d}| j|d |d d … }|s.qF|| |¡7 }|d7 }q|| ¡ 7 }|  t|ƒ| j¡ d S )Nr   r   rH   r   )r
   r/   r=   rô   rS   r   )r$   rö   rv   r   ri   r   r   r   ÚtestCompressChunks10…  s    
z&BZ2CompressorTest.testCompressChunks10rl   r•   ©ÚsizeZmemusec                 C   sx   t ƒ }d| }z| |¡}|| ¡ 7 }W d }nd }0 t |¡}z.|  t|ƒ|¡ |  t| d¡ƒd¡ W d }nd }0 d S )Nó   xr   )r
   r=   rô   r   r   rS   r`   Ústrip)r$   rü   rö   r   Ú
compressedr   r   r   ÚtestCompress4G’  s    

z BZ2CompressorTest.testCompress4Gc              	   C   sP   t tjd ƒD ]<}|  t¡ t tƒ |¡ W d   ƒ q1 s@0    Y  qd S ©Nr   )rº   ÚpickleÚHIGHEST_PROTOCOLrK   rL   Údumpsr
   ©r$   Úprotor   r   r   Ú
testPickle¤  s    zBZ2CompressorTest.testPickleN)r)   r*   r+   r÷   rù   rú   r   Úskip_if_pgo_taskr   r   r   r  r   r   r   r   ró   w  s   ró   c                   @   s   e Zd Zdd„ Zdd„ Zdd„ Zdd„ Zd	d
„ Zej	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é*   )rK   rL   r   r'   r   r   r   Útest_Constructor«  s    z$BZ2DecompressorTest.test_Constructorc                 C   s2   t ƒ }|  t|j¡ | | j¡}|  || j¡ d S r   )r   rK   rL   r   r0   rS   r/   ©r$   Úbz2drh   r   r   r   ÚtestDecompress®  s    z"BZ2DecompressorTest.testDecompressc                 C   sX   t ƒ }d}d}| j|d |d d … }|s.qF|| |¡7 }|d7 }q|  || j¡ d S )Nr   r   rH   r   )r   r0   r   rS   r/   )r$   r  rh   rv   ri   r   r   r   ÚtestDecompressChunks10´  s    
z*BZ2DecompressorTest.testDecompressChunks10c                 C   s:   t ƒ }d}| | j| ¡}|  || j¡ |  |j|¡ d S )Ns   this is unused data)r   r   r0   rS   r/   Úunused_data)r$   r  r  rh   r   r   r   ÚtestDecompressUnusedDataÀ  s
    z,BZ2DecompressorTest.testDecompressUnusedDatac                 C   s6   t ƒ }| | j¡}|  t|jd¡ |  t|jd¡ d S )Ns   anythingr   )r   r   r0   rK   rë   r  r   r   r   ÚtestEOFErrorÇ  s    z BZ2DecompressorTest.testEOFErrorrl   gffffff
@rû   c                 C   sj   d}t  |¡}zH||| d  }t |¡}tƒ }| |¡}|  ||k¡ W d }d }d }nd }d }d }0 d S )Ni    r   )ÚrandomÚ	randbytesr   r=   r   r   rq   )r$   rü   Ú	blocksizeÚblockr   rÿ   r  Zdecompressedr   r   r   ÚtestDecompress4GÍ  s    


þz$BZ2DecompressorTest.testDecompress4Gc              	   C   sP   t tjd ƒD ]<}|  t¡ t tƒ |¡ W d   ƒ q1 s@0    Y  qd S r  )rº   r  r  rK   rL   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 ƒ|¡ |j	sð| |jd|d¡ |  t|d ƒ|¡ qÀd 
|¡}|  || j¡ |  |jd¡ d S )Nrl   é@   ©Ú
max_lengthéÿÿÿÿr   )r   r`   r>   Úappendr   r²   Úneeds_inputrS   rÛ   Úeofr.   r4   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 )Nrl   r   r  r   r•   éi   é   ©r   rS   r   r0   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•   é,  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'  r[   r(  r   )r   r  r   r0   rS   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   rK   Ú	Exceptionr   r2   )r$   r  r   r   r   Útest_failure=  s    z BZ2DecompressorTest.test_failurec                 C   sH   t  td¡}tƒ }|ƒ }tdƒD ]}| ¡  q | j|ƒ | ddd d S )NÚgettotalrefcountrl   r   rH   )Zdelta)r   Zget_attributeÚsysr   rº   Ú__init__ZassertAlmostEqual)r$   r.  r  Zrefs_beforer»   r   r   r   Útest_refleaks_in___init__C  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*  r-  Zrefcount_testr1  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 r   )r   r=   r/   rS   r   )r$   r   r   r   r   r÷   N  s    z#CompressDecompressTest.testCompressc                 C   s   t  d¡}|  || j¡ d S rø   )r   r=   rS   r1   ©r$   rh   r   r   r   rù   R  s    
z.CompressDecompressTest.testCompressEmptyStringc                 C   s   t  | j¡}|  || j¡ d S r   ©r   r   r0   rS   r/   r3  r   r   r   r  V  s    z%CompressDecompressTest.testDecompressc                 C   s   t  d¡}|  |d¡ d S rø   )r   r   rS   r3  r   r   r   ÚtestDecompressEmptyZ  s    
z*CompressDecompressTest.testDecompressEmptyc                 C   s   t  | j¡}|  |d¡ d S rø   )r   r   r1   rS   r3  r   r   r   ÚtestDecompressToEmptyString^  s    z2CompressDecompressTest.testDecompressToEmptyStringc                 C   s   |   ttj| jd d… ¡ d S )Nré   )rK   rM   r   r   r0   r'   r   r   r   ÚtestDecompressIncompleteb  s    z/CompressDecompressTest.testDecompressIncompletec                 C   s   |   ttj| j¡ d S r   )rK   rX   r   r   r2   r'   r   r   r   ÚtestDecompressBadDatae  s    z,CompressDecompressTest.testDecompressBadDatac                 C   s&   t  | jd ¡}|  || jd ¡ d S rÅ   r4  r3  r   r   r   ÚtestDecompressMultiStreamh  s    z0CompressDecompressTest.testDecompressMultiStreamc                 C   s$   t  | j| j ¡}|  || j¡ d S r   ©r   r   r0   r2   rS   r/   r3  r   r   r   ÚtestDecompressTrailingJunkl  s    z1CompressDecompressTest.testDecompressTrailingJunkc                 C   s,   t  | jd | j ¡}|  || jd ¡ d S rÅ   r:  r3  r   r   r   Ú%testDecompressMultiStreamTrailingJunkp  s    z<CompressDecompressTest.testDecompressMultiStreamTrailingJunkN)r)   r*   r+   r÷   rù   r  r5  r6  r7  r8  r9  r;  r<  r   r   r   r   r2  M  s   r2  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|i |¤ŽS r   )r   r:   )r$   ÚargsÚkwargsr   r   r   r:   x  s    zOpenTest.openc              	   C   sj  dD ]^}|dkrt | jƒ |  | j|¡}| | j¡ W d   ƒ n1 sL0    Y  t| jdƒ*}t| ¡ ƒ}|  || j¡ W d   ƒ n1 s’0    Y  |  | jd¡"}|  | ¡ | j¡ W d   ƒ n1 sÒ0    Y  |  | jd¡}| | j¡ W d   ƒ n1 s0    Y  t| jdƒ.}t| ¡ ƒ}|  || jd ¡ W d   ƒ q1 sZ0    Y  qd S )N)r@   Úxbr@  r   Úabr•   ©r   r!   r:   rA   r/   r   rQ   rS   ©r$   ÚmoderD   Ú	file_datar   r   r   Útest_binary_modes{  s    

*,0,zOpenTest.test_binary_modesc              	   C   sj  dD ]^}|dkrt | jƒ |  | j|¡}| | j¡ W d   ƒ n1 sL0    Y  t| jdƒ*}t| ¡ ƒ}|  || j¡ W d   ƒ n1 s’0    Y  |  | jd¡"}|  | ¡ | j¡ W d   ƒ n1 sÒ0    Y  |  | jd¡}| | j¡ W d   ƒ n1 s0    Y  t| jdƒ.}t| ¡ ƒ}|  || jd ¡ W d   ƒ q1 sZ0    Y  qd S )N)rŠ   ÚxrG  r   rI   r   r•   rB  rC  r   r   r   Útest_implicit_binary_modesŒ  s    

*,0,z#OpenTest.test_implicit_binary_modesc              	   C   s†  | j  d¡}| dtj¡}dD ]`}|dkr6t| jƒ |  | j|¡}| |¡ W d   ƒ n1 sd0    Y  t| jdƒ.}t	| 
¡ ƒ d¡}|  ||¡ W d   ƒ n1 s®0    Y  |  | jd¡ }|  | 
¡ |¡ W d   ƒ n1 sì0    Y  |  | jd¡}| |¡ W d   ƒ n1 s&0    Y  t| jdƒ2}t	| 
¡ ƒ d¡}|  ||d ¡ W d   ƒ q1 sv0    Y  qd S )	NrÑ   Ú
)ÚwtÚxtrK  r   ÚrtZatr•   )r/   ÚdecodeÚreplacer"   Úlinesepr   r!   r:   rA   r   rQ   rS   )r$   rh   Útext_native_eolrD  rD   rE  r   r   r   Útest_text_modesž  s"    

(*.*zOpenTest.test_text_modesc              
   C   sž   dD ]”}t | jƒ |  | j|¡}W d   ƒ n1 s60    Y  |  t¡> |  | j|¡}W d   ƒ n1 sp0    Y  W d   ƒ q1 sŽ0    Y  qd S )N)rG  r@  rK  )r   r!   r:   rK   ÚFileExistsError)r$   rD  rD   r   r   r   Útest_x_mode±  s    
zOpenTest.test_x_modec                 C   sÚ   |   t| jƒd¡"}|  | ¡ | j¡ W d   ƒ n1 s:0    Y  |   t| jƒd¡"}|  | ¡ | j¡ W d   ƒ n1 s~0    Y  | j d¡}|   t| jƒd¡ }|  | ¡ |¡ W d   ƒ n1 sÌ0    Y  d S )NrI   r   rÑ   rL  )r:   r   r0   rS   rQ   r/   rM  )r$   rD   rh   r   r   r   Útest_fileobjº  s    00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)ÚerrorsrI  ©Únewline)rK   rM   r:   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   ƒ n1 sL0    Y  t| jdƒ.}t| 	¡ ƒ d¡}|  
||¡ W d   ƒ n1 s–0    Y  | j| jddd }|  
| 	¡ |¡ W d   ƒ n1 sØ0    Y  d S )NrÑ   rI  rJ  z	utf-16-lerU  r   rL  )r/   rM  rN  r"   rO  r:   r!   rA   r   rQ   rS   )r$   rh   rP  rD   rE  r   r   r   Útest_encodingÐ  s    (*zOpenTest.test_encodingc                 C   s€   |   | jd¡}| d¡ W d   ƒ n1 s.0    Y  | j | jdddd }|  | ¡ d¡ W d   ƒ n1 sr0    Y  d S )Nr@   s   fooÿbarrL  rÑ   rW  )rV  rX  Zfoobar)r:   r!   rA   rS   rQ   rÂ   r   r   r   Útest_encoding_error_handlerÜ  s
    (z$OpenTest.test_encoding_error_handlerc                 C   s   | j  d¡}| j| jddd}| |¡ W d   ƒ n1 s>0    Y  | j| jddd"}|  | ¡ |g¡ W d   ƒ n1 s‚0    Y  d S )NrÑ   rJ  rI  rY  rL  ú)r/   rM  r:   r!   rA   rS   r€   )r$   rh   rD   r   r   r   Útest_newlineä  s
    (zOpenTest.test_newlineN)r)   r*   r+   r,   r:   rF  rH  rQ  rS  rT  r[  r\  r]  r_  r   r   r   r   r=  u  s   		r=  c                   C   s   t  ¡  d S r   )r   Úreap_childrenr   r   r   r   ÚtearDownModuleí  s    ra  Ú__main__)'Útestr   Ztest.supportr   r   rï   ZunittestÚior   r   r"   r  r5   r   rÕ   r  r   r   rÈ   r   r^   r/  Úimport_moduler   r	   r
   r   r   r   ZTestCaser   r?   ró   r	  r2  r=  ra  r)   Úmainr   r   r   r   Ú<module>   sD   
	4    #3 $(x
