o
    GXīhė  ć                   @   sd  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m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r°e )”  dS dS )é    )Śsupport)Ś
bigmemtestŚ_4GN)ŚBytesIOŚDEFAULT_BUFFER_SIZE)Śimport_helper)Śthreading_helper)ŚunlinkŚbz2)ŚBZ2FileŚBZ2CompressorŚBZ2Decompressorc                 C   s4   t d u rtt d”a t rtjdg| dS t | ”S )NZbunzip2)Śinput)Śhas_cmdline_bunzip2ŚboolŚshutilŚwhichŚ
subprocessŚcheck_outputr
   Ś
decompress)Śdata© r   ś7/opt/python-3.10.19/usr/lib/python3.10/test/test_bz2.pyŚext_decompress   s
   
r   c                	   @   sĪ   e 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 ]*Zeed	Ze	e eee	d
 ”7 Z	W d
   n1 sJw   Y  e	dkrU nq+ejeddZdd Zdd Zd
S )ŚBaseTest)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   ŚsetUpR   s   zBaseTest.setUpc                 C   s   t | j d S r    )r	   r#   ©r&   r   r   r   ŚtearDownV   s   zBaseTest.tearDown)Ś__name__Ś
__module__Ś__qualname__Ś
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&    
&’’r   c                   @   sš  e Zd Z	 d|ddZdd Zdd Zd	d
 Zdd Zdd Zdd Z	dd Z
dd Z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=dydz Z>d{S )}ŚBZ2FileTestr   r   c                 C   sL   t | jd}| | j| ” | |” W d    d S 1 sw   Y  d S )NŚwb)r;   r#   Śwriter1   )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   ŚtestBadArgsb   s   zBZ2FileTest.testBadArgsc                 C   s\   |   ”  t| j}|  t|jt ” |  | ” | j” W d    d S 1 s'w   Y  d S r    ©	rF   r   r#   rL   rM   ŚreadŚfloatŚassertEqualr0   ©r&   Śbz2fr   r   r   ŚtestReadm   ó
   "žzBZ2FileTest.testReadc                 C   sN   | j d| jd t| j}|  t|j” W d    d S 1 s w   Y  d S )Nr   ©rC   rD   )rF   r3   r   r#   rL   ŚOSErrorrR   rU   r   r   r   ŚtestReadBadFiles   s   "’zBZ2FileTest.testReadBadFilec                 C   sd   | j dd t| j}|  t|jt ” |  | ” | jd ” W d    d S 1 s+w   Y  d S ©Né   ©rC   rQ   rU   r   r   r   ŚtestReadMultiStreamx   s
   "žzBZ2FileTest.testReadMultiStreamc                 C   s   t j}t| jt _z;| jdd t| j}|  t|j	t
 ” |  | 	” | jd ” W d    n1 s4w   Y  W |t _d S W |t _d S |t _w r\   )Ś_compressionŚBUFFER_SIZEŚlenr1   rF   r   r#   rL   rM   rR   rS   rT   r0   )r&   Zbuffer_sizerV   r   r   r   ŚtestReadMonkeyMultiStream~   s   ž
üz%BZ2FileTest.testReadMonkeyMultiStreamc                 C   sP   | j | jd t| j}|  | ” | j” W d    d S 1 s!w   Y  d S )N)rD   ©rF   r3   r   r#   rT   rR   r0   rU   r   r   r   ŚtestReadTrailingJunk   s   "’z BZ2FileTest.testReadTrailingJunkc                 C   sV   | j d| jd t| j}|  | ” | jd ” W d    d S 1 s$w   Y  d S )Nr]   rY   rd   rU   r   r   r   ŚtestReadMultiStreamTrailingJunk   s   "’z+BZ2FileTest.testReadMultiStreamTrailingJunkc                 C   s\   |   ”  t| j}|  t|jt ” |  | d”d” W d    d S 1 s'w   Y  d S )Nr   r   )rF   r   r#   rL   rM   rR   rS   rT   rU   r   r   r   Ś	testRead0   rX   zBZ2FileTest.testRead0c                 C   sf   |   ”  t| j }d}	 | d”}|sn||7 }q|  || j” W d    d S 1 s,w   Y  d S )Nr   TrI   ©rF   r   r#   rR   rT   r0   ©r&   rV   ŚtextŚstrr   r   r   ŚtestReadChunk10   s   
ü"łzBZ2FileTest.testReadChunk10c                 C   sn   | j dd t| j"}d}	 | d”}|sn||7 }q|  || jd ” W d    d S 1 s0w   Y  d S )Nr]   r^   r   TrI   rh   ri   r   r   r   ŚtestReadChunk10MultiStream¦   s   
ü"łz&BZ2FileTest.testReadChunk10MultiStreamc                 C   sT   |   ”  t| j}|  | d”| jd d ” W d    d S 1 s#w   Y  d S )Néd   )rF   r   r#   rT   rR   r0   rU   r   r   r   ŚtestRead100±   s   "’zBZ2FileTest.testRead100c                 C   st   |   ”  t| j'}| ” }|  t|d” |  | j |”” |  	| 
” | j” W d    d S 1 s3w   Y  d S ©Nr   )rF   r   r#   ŚpeekŚassertNotEqualrb   Ś
assertTruer0   Ś
startswithrT   rR   )r&   rV   Śpdatar   r   r   ŚtestPeek¶   s   "üzBZ2FileTest.testPeekc                 C   sŗ   |   ”  t| jJ}d}t|}|  | |”|” |  || jd | ” t| j| }tt| j}|  | |”|” |  |d | | j| d  ” W d    d S 1 sVw   Y  d S )Né   )rF   r   r#   r4   rT   r<   r0   rb   )r&   rV   ŚnŚbr   r   r   ŚtestReadInto¾   s   ""ųzBZ2FileTest.testReadIntoc                 C   sd   |   ”  t| j}|  t|jd ” | jD ]
}|  | ” |” qW d    d S 1 s+w   Y  d S r    ©rF   r   r#   rL   rM   Śreadliner.   rT   ©r&   rV   Śliner   r   r   ŚtestReadLineŹ   s   
’"žzBZ2FileTest.testReadLinec                 C   sl   | j dd t| j!}|  t|jd ” | jd D ]
}|  | ” |” qW d    d S 1 s/w   Y  d S r\   r{   r}   r   r   r   ŚtestReadLineMultiStreamŃ   s   ’"žz#BZ2FileTest.testReadLineMultiStreamc                 C   sZ   |   ”  t| j}|  t|jd ” |  | ” | j” W d    d S 1 s&w   Y  d S r    ©rF   r   r#   rL   rM   Ś	readlinesrT   r.   rU   r   r   r   ŚtestReadLinesŲ   s
   "žzBZ2FileTest.testReadLinesc                 C   sb   | j dd t| j}|  t|jd ” |  | ” | jd ” W d    d S 1 s*w   Y  d S r\   r   rU   r   r   r   ŚtestReadLinesMultiStreamŽ   s
   "žz$BZ2FileTest.testReadLinesMultiStreamc                 C   sN   |   ”  t| j}|  tt|| j” W d    d S 1 s w   Y  d S r    ©rF   r   r#   rT   ŚlistŚiterr.   rU   r   r   r   ŚtestIteratorä   s   "’zBZ2FileTest.testIteratorc                 C   sV   | j dd t| j}|  tt|| jd ” W d    d S 1 s$w   Y  d S r\   r   rU   r   r   r   ŚtestIteratorMultiStreamé   s   "’z#BZ2FileTest.testIteratorMultiStreamc                 C   s:   |   ”  t| j}| ”  |  tt|” |  t|j” d S r    )rF   r   r#   r%   rL   rN   Śnextr   rU   r   r   r   ŚtestClosedIteratorDeadlockī   s
   
z&BZ2FileTest.testClosedIteratorDeadlockc                 C   s   t | jd}|  t|j” | | j” W d    n1 sw   Y  t| jd}|  t| 	” | j” W d    d S 1 s@w   Y  d S )NŚwr   ©
r   r#   rL   rM   rB   r0   r;   rT   r   rR   ©r&   rV   rE   r   r   r   Ś	testWrite÷   s   ž"’zBZ2FileTest.testWritec                 C   s®   t | jd%}d}	 | j|d |d d  }|sn
| |” |d7 }q
W d    n1 s.w   Y  t| jd}|  t| ” | j” W d    d S 1 sPw   Y  d S )Nr   r   TrI   r   r   )r   r#   r0   rB   r;   rT   r   rR   )r&   rV   rx   rk   rE   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 s!w   Y  t| jd}|  | ” |” W d    d S 1 s@w   Y  d S )Nr]   r   r   r   )	r
   r>   r0   r   r#   rB   r;   rT   rR   )r&   ZexpectedrV   rE   r   r   r   Ś testWriteNonDefaultCompressLevel
  s   ’"’z,BZ2FileTest.testWriteNonDefaultCompressLevelc                 C   s    t | jd}|  t|j” | | j” W d    n1 sw   Y  |  t|jdg” t| jd}|  t	| 
” | j” W d    d S 1 sIw   Y  d S )Nr   Śar   )r   r#   rL   rM   Ś
writelinesr.   rN   r;   rT   r   rR   r0   r   r   r   r   ŚtestWriteLines  s   ž"’zBZ2FileTest.testWriteLinesc                 C   s   t | jd}| d” W d    n1 sw   Y  t | jd}|  t|jd” |  t|jdg” W d    d S 1 s>w   Y  d S )Nr   s   abcrJ   ó   a)r   r#   rB   rL   rZ   r   rU   r   r   r   ŚtestWriteMethodsOnReadOnlyFile  s   ’"žz*BZ2FileTest.testWriteMethodsOnReadOnlyFilec                 C   sŲ   t | jd}|  t|j” | | j” W d    n1 sw   Y  t | jd}|  t|j” | | j” W d    n1 sAw   Y  t| jd}|  t| 	” | jd ” W d    d S 1 sew   Y  d S )Nr   r   r   é   r   r   r   r   r   Ś
testAppend#  s   žž"’zBZ2FileTest.testAppendc                 C   sj   |   ”  t| j"}|  t|j” | d” |  | ” | jdd  ” W d    d S 1 s.w   Y  d S ©Né   )	rF   r   r#   rL   rM   ŚseekrT   rR   r0   rU   r   r   r   ŚtestSeekForward-  s   
"żzBZ2FileTest.testSeekForwardc                 C   sx   | j dd t| j'}|  t|j” | t| jd ” |  | 	” | jdd  ” W d    d S 1 s5w   Y  d S )Nr   r^   r   )
rF   r   r#   rL   rM   r   rb   r0   rT   rR   rU   r   r   r   ŚtestSeekForwardAcrossStreams4  s   "żz(BZ2FileTest.testSeekForwardAcrossStreamsc                 C   sh   |   ”  t| j!}| d” | dd” |  | ” | jdd  ” W d    d S 1 s-w   Y  d S ©Niō  éj’’’r   i^  )rF   r   r#   rR   r   rT   r0   rU   r   r   r   ŚtestSeekBackwards;  s   
"żzBZ2FileTest.testSeekBackwardsc                 C   s   | j dd t| j7}t| jd }|dkr$|t| |”8 }|dks| dd” |  | ” | jdd  | j ” W d    d S 1 sEw   Y  d S )Nr   r^   rn   r   r   r   iĪ’’’)rF   r   r#   rb   r0   rR   r   rT   )r&   rV   Zreadtor   r   r   ŚtestSeekBackwardsAcrossStreamsB  s   ’""ūz*BZ2FileTest.testSeekBackwardsAcrossStreamsc                 C   sh   |   ”  t| j!}| dd” |  | ” | jt| jd d  ” W d    d S 1 s-w   Y  d S )Nr   r   r   )rF   r   r#   r   rT   rR   r0   rb   rU   r   r   r   ŚtestSeekBackwardsFromEndK  s
   &"žz$BZ2FileTest.testSeekBackwardsFromEndc                 C   sf   | j dd t| j}| dd” |  | ” | jd dd  ” W d    d S 1 s,w   Y  d S )Nr   r^   iü’’)rF   r   r#   r   rT   rR   r0   rU   r   r   r   Ś%testSeekBackwardsFromEndAcrossStreamsQ  s
    "žz1BZ2FileTest.testSeekBackwardsFromEndAcrossStreamsc                 C   sh   |   ”  t| j!}| d” |  | ” t| j” |  | ” d” W d    d S 1 s-w   Y  d S ©NéšI r   ©	rF   r   r#   r   rT   Śtellrb   r0   rR   rU   r   r   r   ŚtestSeekPostEndW  s   
"żzBZ2FileTest.testSeekPostEndc                 C   sp   | j dd t| j#}| d” |  | ” t| jd ” |  | ” d” W d    d S 1 s1w   Y  d S ©Nr]   r^   r„   r   r¦   rU   r   r   r   ŚtestSeekPostEndMultiStream^  s   
"żz&BZ2FileTest.testSeekPostEndMultiStreamc                 C   sr   |   ”  t| j&}| d” | d” |  | ” t| j” |  | ” d” W d    d S 1 s2w   Y  d S r¤   r¦   rU   r   r   r   ŚtestSeekPostEndTwicee  s   

"üz BZ2FileTest.testSeekPostEndTwicec                 C   sz   | j dd t| j(}| d” | d” |  | ” t| jd ” |  | ” d” W d    d S 1 s6w   Y  d S r©   r¦   rU   r   r   r   ŚtestSeekPostEndTwiceMultiStreamm  s   

"üz+BZ2FileTest.testSeekPostEndTwiceMultiStreamc                 C   sd   |   ”  t| j}| d” |  | ” d” |  | ” | j” W d    d S 1 s+w   Y  d S )Nr   r   ©rF   r   r#   r   rT   r§   rR   r0   rU   r   r   r   ŚtestSeekPreStartu  s   
"żzBZ2FileTest.testSeekPreStartc                 C   sl   | j dd t| j!}| d” |  | ” d” |  | ” | jd ” W d    d S 1 s/w   Y  d S )Nr   r^   r   r   r­   rU   r   r   r   ŚtestSeekPreStartMultiStream|  s   
"żz'BZ2FileTest.testSeekPreStartMultiStreamc              	   C   sz   |   ”  t| jd"}t|}z|  | ” | ” ” W | ”  n| ”  w W d    n1 s/w   Y  |  t|j” d S )Nr   )	rF   r;   r#   r   rT   Śfilenor%   rL   rN   )r&   ZrawfrV   r   r   r   Ś
testFileno  s   ūzBZ2FileTest.testFilenoc                 C   sģ   t t| j}z|  | ” ” | ”  |  | ” ” W | ”  n| ”  w |  t|j” t t d}z|  	| ” ” W | ”  n| ”  w |  t|j” t| j}dd |_t |}z|  	| ” ” W | ”  n| ”  w |  t|j” d S )Nr   c                   S   s   dS )NFr   r   r   r   r   Ś<lambda>  s    z*BZ2FileTest.testSeekable.<locals>.<lambda>)
r   r   r1   rs   ŚseekablerR   r%   rL   rN   ŚassertFalse)r&   rV   Śsrcr   r   r   ŚtestSeekable  s&   

zBZ2FileTest.testSeekablec                 C   ó   t t| j}z|  | ” ” | ”  |  | ” ” W | ”  n| ”  w |  t|j” t t d}z|  	| ” ” W | ”  n| ”  w |  t|j” d S ©Nr   )
r   r   r1   rs   ŚreadablerR   r%   rL   rN   r“   rU   r   r   r   ŚtestReadable§  ó   zBZ2FileTest.testReadablec                 C   r·   rø   )
r   r   r1   r“   ŚwritablerR   r%   rL   rN   rs   rU   r   r   r   ŚtestWritableø  r»   zBZ2FileTest.testWritablec                 C   s&   |   ”  tdD ]}t| j}~qd S )Ni'  )rF   Śranger   r#   )r&   ŚiŚor   r   r   ŚtestOpenDelÉ  s
   
žzBZ2FileTest.testOpenDelc                 C   ó   |   ttd” d S )Nz/non/existent)rL   rZ   r   r)   r   r   r   ŚtestOpenNonexistentĻ  ó   zBZ2FileTest.testOpenNonexistentc                 C   sĀ   d}t | jd}| |” W d    n1 sw   Y  t| j}| ” }W d    n1 s1w   Y  |  |dg” t| j}t| ” }W d    n1 sSw   Y  |  |dg” d S )Ns,   BZh91AY&SYŁb]        !h3M<]ÉįBCe%trA   s   Test)r;   r#   rB   r   r   rT   r   )r&   r   rE   rV   ŚlinesZxlinesr   r   r   ŚtestReadlinesNoNewlineŅ  s   ’
’’z"BZ2FileTest.testReadlinesNoNewlinec                 C   sš   d }t | jd}| d” W d    n1 sw   Y  t | jd}| ”  z| W d    n1 s5w   Y  W n	 tyD   Y nw |  d” zt | jd}dd  W d    n1 s`w   Y  W n
 typ   Y d S w |  d” d S )NrA   s   xxxr   z4__enter__ on a closed file didn't raise an exceptionr   r   z1/0 didn't raise an exception)r   r#   rB   r%   rN   ZfailŚZeroDivisionError©r&   rE   r   r   r   ŚtestContextProtocolŽ  s0   ’’’

’’zBZ2FileTest.testContextProtocolc              	      s   dd d}t | jd8fdd  fddt|D }t |” W d    n1 s/w   Y  W d    d S W d    d S 1 sGw   Y  d S )	Nó   1i   rI   rA   c                     s   t dD ]}   ” qd S ©Nr]   )r¾   rB   )ræ   )r   rE   r   r   Ścompų  s   ’z'BZ2FileTest.testThreading.<locals>.compc                    s   g | ]}t j d qS ))Śtarget)Ś	threadingŚThread)Ś.0ræ   )rĢ   r   r   Ś
<listcomp>ū  s    z-BZ2FileTest.testThreading.<locals>.<listcomp>)r   r#   r¾   r   Zstart_threads)r&   ZnthreadsŚthreadsr   )rĢ   r   rE   r   ŚtestThreadingó  s   ’ū"ūzBZ2FileTest.testThreadingc                 C   s>  |   ”  t| jd }|d }t| j)}| |” |  t|| jd |d  ” |  | ” | j|d  ” W d    n1 s@w   Y  t| j"}| 	”  |  t|| jd ” |  | 	” | jd ” W d    n1 sow   Y  t| j}| 
”  |  tt|” |  | 
” g ” W d    d S 1 sw   Y  d S )Nr   r   r   )rF   rb   r.   r   r#   rR   rT   r   r0   r|   r   rL   ŚStopIteration)r&   ZlinelenZhalflenrV   r   r   r   ŚtestMixedIterationAndReads’  s$   
żż"żz&BZ2FileTest.testMixedIterationAndReadsc                 C   sø   d}d}t | jd}| |” W d    n1 sw   Y  t | jd}| |” W d    n1 s5w   Y  t | j}|  | ” || ” W d    d S 1 sUw   Y  d S )Nsø  foofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoosø  barbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarr   r   )r   r#   rB   rT   rR   )r&   Zdata1Zdata2rV   r   r   r   ŚtestMultiStreamOrdering  s   ’’"’z#BZ2FileTest.testMultiStreamOrderingc                 C   sę   | j }z| d”}W n ty   |  d” Y nw t|d}| | j” W d    n1 s/w   Y  t|d}|  | ” | j” W d    n1 sMw   Y  t|d}|  | ” | j” W d    d S 1 slw   Y  d S )NŚasciiz%Temporary file name needs to be ASCIIrA   r   )	r#   ŚencodeŚUnicodeEncodeErrorZskipTestr   rB   r1   rT   rR   )r&   Zstr_filenameZbytes_filenamerE   r   r   r   ŚtestOpenBytesFilename  s   ’’’"’z!BZ2FileTest.testOpenBytesFilenamec                 C   s   t  | j”}t|d}| | j” W d    n1 sw   Y  t|d}|  | ” | j” W d    d S 1 s;w   Y  d S )NrA   r   )ŚpathlibŚPathr#   r   rB   r1   rT   rR   )r&   r#   rE   r   r   r   ŚtestOpenPathLikeFilename)  s   ’"’z$BZ2FileTest.testOpenPathLikeFilenamec                 C   sj   	 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
   r>   ŚintZ
assertLessrb   r`   ra   r   r   rT   rR   r   ŚassertLessEqualŚ_bufferŚrawr§   )r&   ZbombŚdecompZ
max_decompr   r   r   ŚtestDecompressLimited0  s   ’z!BZ2FileTest.testDecompressLimitedc              	   C   s   t | j5}t|}|  t|jt ” |  | ” | j” W d    n1 s'w   Y  |  	|j
” W d    d S 1 s=w   Y  d S r    )r   r1   r   rL   rM   rR   rS   rT   r0   r“   Śclosed©r&   ŚbiorV   r   r   r   ŚtestReadBytesIO>  s   
ž"üzBZ2FileTest.testReadBytesIOc              	   C   s¤   t | jC}t|&}| ” }|  t|d” |  | j |”” |  	| 
” | j” W d    n1 s3w   Y  W d    d S W d    d S 1 sKw   Y  d S rp   )r   r1   r   rq   rr   rb   rs   r0   rt   rT   rR   )r&   rč   rV   ru   r   r   r   ŚtestPeekBytesIOE  s   
ü’"’zBZ2FileTest.testPeekBytesIOc              	   C   s   t  <}t|d}|  t|j” | | j” W d    n1 s!w   Y  |  t| ” | j” |  	|j
” W d    d S 1 sBw   Y  d S rø   )r   r   rL   rM   rB   r0   rT   r   Śgetvaluer“   rę   rē   r   r   r   ŚtestWriteBytesIOM  s   ž"ūzBZ2FileTest.testWriteBytesIOc              	   C   s   t | j>}t|!}|  t|j” | d” |  | ” | jdd  ” W d    n1 s.w   Y  W d    d S W d    d S 1 sFw   Y  d S r   )	r   r1   r   rL   rM   r   rT   rR   r0   rē   r   r   r   ŚtestSeekForwardBytesIOU  s   

ż’"’z"BZ2FileTest.testSeekForwardBytesIOc              	   C   s   t | j=}t| }| d” | dd” |  | ” | jdd  ” W d    n1 s-w   Y  W d    d S W d    d S 1 sEw   Y  d S r   )r   r1   r   rR   r   rT   r0   rē   r   r   r   ŚtestSeekBackwardsBytesIO\  s   

ż’"’z$BZ2FileTest.testSeekBackwardsBytesIOc              	   C   sō   | j d d }tt|}|  t|j” W d    n1 sw   Y  tt|}|  | t| j”| j” |  t|jd” W d    n1 sJw   Y  t	dD ]$}tt|d | }|  t|jd” W d    n1 srw   Y  qSd S )Néö’’’r   é   )
r1   r   r   rL   ŚEOFErrorrR   rT   rb   r0   r¾   )r&   Z	truncatedrE   ræ   r   r   r   Śtest_read_truncatedc  s   ’ž’’zBZ2FileTest.test_read_truncatedc                 C   sr   t   dg d¢”}t||j }tt d}|  | |”|” |  | ” |” W d    d S 1 s2w   Y  d S )NŚQ)r   r   rK   é   r]   r   )Śarrayrb   Śitemsizer   r   rT   rB   r§   )r&   ŚqZLENGTHrE   r   r   r   Śtest_issue44439p  s   "žzBZ2FileTest.test_issue44439N)r   r   )?r+   r,   r-   rF   rP   rW   r[   r_   rc   re   rf   rg   rl   rm   ro   rv   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Ż   rå   ré   rź   rģ   rķ   rī   rņ   rų   r   r   r   r   r@   Z   s|    
	

	
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   rL   rM   r>   r0   ŚflushrT   r   ©r&   Śbz2cr   r   r   r   ŚtestCompressz  s
   zBZ2CompressorTest.testCompressc                 C   s.   t  }| d”}|| ” 7 }|  || j” d S ©Nr   )r   r>   rś   rT   r2   rū   r   r   r   ŚtestCompressEmptyString  s   
z)BZ2CompressorTest.testCompressEmptyStringc                 C   sj   t  }d}d}	 | j|d |d d  }|sn|| |”7 }|d7 }q|| ” 7 }|  t|| j” d S )Nr   r   TrI   r   )r   r0   r>   rś   rT   r   )r&   rü   rx   r   rk   r   r   r   ŚtestCompressChunks10  s   ūz&BZ2CompressorTest.testCompressChunks10rn   r   ©ŚsizeZmemusec                 C   sv   t  }d| }z| |”}|| ” 7 }W d }nd }w t |”}z|  t||” |  t| d”d” W d }d S d }w )Nó   xr   )r   r>   rś   r
   r   rT   rb   Śstrip)r&   r  rü   r   Ś
compressedr   r   r   ŚtestCompress4G  s   

z BZ2CompressorTest.testCompress4Gc              	   C   óP   t tjd D ]}|  t” t t |” W d    n1 s w   Y  qd S ©Nr   )r¾   ŚpickleŚHIGHEST_PROTOCOLrL   rM   Śdumpsr   ©r&   Śprotor   r   r   Ś
testPickle¦  ó   ’’zBZ2CompressorTest.testPickleN)r+   r,   r-   rż   r’   r   r   Śskip_if_pgo_taskr   r   r  r  r   r   r   r   rł   y  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   rĀ   )Né*   )rL   rM   r   r)   r   r   r   Śtest_Constructor­  rÄ   z$BZ2DecompressorTest.test_Constructorc                 C   s2   t  }|  t|j” | | j”}|  || j” d S r    )r   rL   rM   r   r1   rT   r0   ©r&   Śbz2drj   r   r   r   ŚtestDecompress°  s   z"BZ2DecompressorTest.testDecompressc                 C   sZ   t  }d}d}	 | j|d |d d  }|sn|| |”7 }|d7 }q|  || j” d S )Nr   r   TrI   r   )r   r1   r   rT   r0   )r&   r  rj   rx   rk   r   r   r   ŚtestDecompressChunks10¶  s   ūz*BZ2DecompressorTest.testDecompressChunks10c                 C   s:   t  }d}| | j| ”}|  || j” |  |j|” d S )Ns   this is unused data)r   r   r1   rT   r0   Śunused_data)r&   r  r  rj   r   r   r   ŚtestDecompressUnusedDataĀ  s
   z,BZ2DecompressorTest.testDecompressUnusedDatac                 C   s6   t  }| | j”}|  t|jd” |  t|jd” d S )Ns   anythingr   )r   r   r1   rL   rń   r  r   r   r   ŚtestEOFErrorÉ  s   z BZ2DecompressorTest.testEOFErrorrn   gffffff
@r  c                 C   sh   d}t  |”}z%||| d  }t |”}t }| |”}|  ||k” W d }d }d }d S d }d }d }w )Ni    r   )ŚrandomŚ	randbytesr
   r>   r   r   rs   )r&   r  Ś	blocksizeŚblockr   r  r  Zdecompressedr   r   r   ŚtestDecompress4GĻ  s   


žz$BZ2DecompressorTest.testDecompress4Gc              	   C   r  r  )r¾   r	  r
  rL   rM   r  r   r  r   r   r   r  ą  r  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	sz| |jd|d” |  t|d |” |j	rcd 
|”}|  || j” |  |jd” d S )Nrn   é@   ©Ś
max_lengthé’’’’r   )r   rb   r?   Śappendr   r“   Śneeds_inputrT   rį   Śeofr/   r5   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 )Nrn   r   r!  r   r   éi   é   ©r   rT   r   r1   r$  r/   r0   ©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]   r0  r   )r   r$  r   r1   rT   r/   r0   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   rL   Ś	Exceptionr   r3   )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Śgettotalrefcountrn   r   rI   )Zdelta)r   Zget_attributeŚsysr   r¾   Ś__init__ZassertAlmostEqual)r&   r6  r'  Zrefs_beforeræ   r   r   r   Śtest_refleaks_in___init__E  s   
z-BZ2DecompressorTest.test_refleaks_in___init__N)r+   r,   r-   r  r  r  r  r  r   r  r   r   r  r  r)  r.  r1  r2  r5  Zrefcount_testr9  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>   r0   rT   r   )r&   r   r   r   r   rż   P  s   z#CompressDecompressTest.testCompressc                 C   s   t  d”}|  || j” d S rž   )r
   r>   rT   r2   ©r&   rj   r   r   r   r’   T  s   
z.CompressDecompressTest.testCompressEmptyStringc                 C   s   t  | j”}|  || j” d S r    ©r
   r   r1   rT   r0   r;  r   r   r   r  X  s   z%CompressDecompressTest.testDecompressc                 C   s   t  d”}|  |d” d S rž   )r
   r   rT   r;  r   r   r   ŚtestDecompressEmpty\  s   
z*CompressDecompressTest.testDecompressEmptyc                 C   s   t  | j”}|  |d” d S rž   )r
   r   r2   rT   r;  r   r   r   ŚtestDecompressToEmptyString`  s   z2CompressDecompressTest.testDecompressToEmptyStringc                 C   s   |   ttj| jd d ” d S )Nrļ   )rL   rN   r
   r   r1   r)   r   r   r   ŚtestDecompressIncompleted  s   z/CompressDecompressTest.testDecompressIncompletec                 C   s   |   ttj| j” d S r    )rL   rZ   r
   r   r3   r)   r   r   r   ŚtestDecompressBadDatag  s   z,CompressDecompressTest.testDecompressBadDatac                 C   s&   t  | jd ”}|  || jd ” d S rĖ   r<  r;  r   r   r   ŚtestDecompressMultiStreamj  s   z0CompressDecompressTest.testDecompressMultiStreamc                 C   s$   t  | j| j ”}|  || j” d S r    ©r
   r   r1   r3   rT   r0   r;  r   r   r   ŚtestDecompressTrailingJunkn  s   z1CompressDecompressTest.testDecompressTrailingJunkc                 C   s,   t  | jd | j ”}|  || jd ” d S rĖ   rB  r;  r   r   r   Ś%testDecompressMultiStreamTrailingJunkr  s   z<CompressDecompressTest.testDecompressMultiStreamTrailingJunkN)r+   r,   r-   rż   r’   r  r=  r>  r?  r@  rA  rC  rD  r   r   r   r   r:  O  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|i |¤S r    )r
   r;   )r&   ŚargsŚkwargsr   r   r   r;   z  s   zOpenTest.openc              	   C   sd  dD ]­}|dkrt | j |  | j|”}| | j” W d    n1 s%w   Y  t| jd}t| ” }|  || j” W d    n1 sHw   Y  |  | jd”}|  | ” | j” W d    n1 shw   Y  |  | jd”}| | j” W d    n1 sw   Y  t| jd}t| ” }|  || jd ” W d    n1 sŖw   Y  qd S )N)rA   ŚxbrH  r   Śabr   ©r	   r#   r;   rB   r0   r   rR   rT   ©r&   ŚmoderE   Ś	file_datar   r   r   Śtest_binary_modes}  s,   
’ž’’žōzOpenTest.test_binary_modesc              	   C   sd  dD ]­}|dkrt | j |  | j|”}| | j” W d    n1 s%w   Y  t| jd}t| ” }|  || j” W d    n1 sHw   Y  |  | jd”}|  | ” | j” W d    n1 shw   Y  |  | jd”}| | j” W d    n1 sw   Y  t| jd}t| ” }|  || jd ” W d    n1 sŖw   Y  qd S )N)r   ŚxrO  r   rJ   r   r   rJ  rK  r   r   r   Śtest_implicit_binary_modes  s,   
’ž’’žōz#OpenTest.test_implicit_binary_modesc              	   C   s  | j  d”}| dtj”}dD ]“}|dkrt| j | j| j|dd}| |” W d    n1 s3w   Y  t| jd}t	| 
”  d”}|  ||” W d    n1 sXw   Y  | j| jddd}|  | 
” |” W d    n1 syw   Y  | j| jddd}| |” W d    n1 sw   Y  t| jd}t	| 
”  d”}|  ||d	 ” W d    n1 s¾w   Y  qd S )
Nr×   Ś
)ŚwtŚxtrS  ©Śencodingr   ŚrtZatr   )r0   ŚdecodeŚreplacer$   Ślinesepr	   r#   r;   rB   r   rR   rT   )r&   rj   Śtext_native_eolrL  rE   rM  r   r   r   Śtest_text_modes   s0   
’ž’’žōzOpenTest.test_text_modesc              
   C   s²   dD ]T}t | j d|v rdnd }| j| j||d}W d    n1 s%w   Y  |  t” |  | j|”}W d    n1 sBw   Y  W d    n1 sQw   Y  qd S )N)rO  rH  rS  Śtśutf-8rT  )r	   r#   r;   rL   ŚFileExistsError)r&   rL  rU  rE   r   r   r   Śtest_x_mode³  s   
’’’ūzOpenTest.test_x_modec                 C   są   |   t| jd”}|  | ” | j” W d    n1 sw   Y  |   t| jd”}|  | ” | j” W d    n1 s?w   Y  | j d”}| j t| jddd}|  | ” |” W d    d S 1 siw   Y  d S )NrJ   r   r×   rV  r]  rT  )r;   r   r1   rT   rR   r0   rW  )r&   rE   rj   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   r]  rT  Śignore)ŚerrorsrQ  )Śnewline)rL   rN   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 s&w   Y  t| jd}t| 	”  d”}|  
||” W d    n1 sKw   Y  | j| jddd}|  
| 	” |” W d    d S 1 smw   Y  d S )Nr×   rQ  rR  z	utf-16-lerT  r   rV  )r0   rW  rX  r$   rY  r;   r#   rB   r   rR   rT   )r&   rj   rZ  rE   rM  r   r   r   Śtest_encodingÓ  s   ’ž"’zOpenTest.test_encodingc                 C   s   |   | jd”}| d” W d    n1 sw   Y  | j | jdddd}|  | ” d” W d    d S 1 s:w   Y  d S )NrA   s   foo’barrV  r×   ra  )rU  rb  Zfoobar)r;   r#   rB   rT   rR   rČ   r   r   r   Śtest_encoding_error_handlerß  s   ’"žz$OpenTest.test_encoding_error_handlerc                 C   s   | j  d”}| j| jdddd}| |” W d    n1 s w   Y  | j| jdddd}|  | ” |g” W d    d S 1 sDw   Y  d S )Nr×   rR  r]  rQ  )rU  rc  rV  ś)r0   rW  r;   r#   rB   rT   r   )r&   rj   rE   r   r   r   Śtest_newlineē  s   ’"’zOpenTest.test_newlineN)r+   r,   r-   r;   rN  rP  r[  r_  r`  rd  re  rf  rh  r   r   r   r   rE  w  s    
	rE  c                   C   s   t  ”  d S r    )r   Śreap_childrenr   r   r   r   ŚtearDownModuleš  s   rj  Ś__main__)*Śtestr   Ztest.supportr   r   rõ   ZunittestŚior   r   r$   r	  r6   r!   rŪ   r  r   r   rĪ   r   r   Ztest.support.os_helperr	   r`   r7  Śimport_moduler
   r   r   r   r   r   ZTestCaser   r@   rł   r  r:  rE  rj  r+   Śmainr   r   r   r   Ś<module>   sL    
	4    #3 $(y’