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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 sKw   Y  e
dkrV nq,ejeddZdd Zdd ZdS )ŚBaseTestzBase for other testcases.)s    root:x:0:0:root:/root:/bin/bash
s   bin:x:1:1:bin:/bin:
s   daemon:x:2:2:daemon:/sbin:
s   adm:x:3:4:adm:/var/adm:
s   lp:x:4:7:lp:/var/spool/lpd:
s    sync:x:5:0:sync:/sbin:/bin/sync
s-   shutdown:x:6:0:shutdown:/sbin:/sbin/shutdown
s!   halt:x:7:0:halt:/sbin:/sbin/halt
s"   mail:x:8:12:mail:/var/spool/mail:
s"   news:x:9:13:news:/var/spool/news:
s#   uucp:x:10:14:uucp:/var/spool/uucp:
s    operator:x:11:0:operator:/root:
s!   games:x:12:100:games:/usr/games:
s,   gopher:x:13:30:gopher:/usr/lib/gopher-data:
s(   ftp:x:14:50:FTP User:/var/ftp:/bin/bash
s#   nobody:x:65534:65534:Nobody:/home:
s.   postfix:x:100:101:postfix:/var/spool/postfix:
s-   niemeyer:x:500:500::/home/niemeyer:/bin/bash
s>   postgres:x:101:102:PostgreSQL Server:/var/lib/pgsql:/bin/bash
s6   mysql:x:102:103:MySQL server:/var/lib/mysql:/bin/bash
s#   www:x:103:104::/var/www:/bin/false
ó    s  BZh91AY&SY.ČN >_ @’šn ?ē’ą0Ŗ ĄF#&F¦Š¦MQ§Ø4hh$¤i4ń4SŅ<QµHÓŌŻÕ»ųÆIįÉų/E pu]É»DL
Q	1ß Ą¬2O97dIŖJ¤L#Æŗ¼/#CČįWłāŠÖM§Xa<etĖL³§ŁĶŃĖ.Æ³««­`n} lh	E,ZVH>åĶ9gd6
éÕ÷.Kvū÷xw»ß”ńŻ|/";¢ŗÕ±#A¶ö³oÉÅy\ėOē¼¶f82Õ×"%>V,÷¦zā£ß"ÖE)I©^ŹórŠU2ņ6ģ¶ķĆUÅ0¤ś^¬DFÖžŻø½£ankRåŲ3]©Ęfö¹"6l$øj@Ą°l1..ŗkls¼ōĮ¾ųEøØkÓnś¬Q±%yŖv“ązõéĢ¹zn7.Gü]ÉįB@»!8`s   BZh9rE8P    s   this is not a valid bzip2 filer   i   z*.pyŚrbNé   ©Ścompresslevelc                 C   s   t  ” \}| _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__Ś__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&    
&’’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   sL   t | jd}| | j| ” | |” W d    d S 1 sw   Y  d S )NŚwb)r<   r#   Śwriter2   )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    ©	rG   r   r#   rM   rN   ŚreadŚfloatŚassertEqualr1   ©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   ©rD   rE   )rG   r4   r   r#   rM   ŚOSErrorrS   rV   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é   ©rD   rR   rV   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Ślenr2   rG   r   r#   rM   rN   rS   rT   rU   r1   )r&   Zbuffer_sizerW   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)rE   ©rG   r4   r   r#   rU   rS   r1   rV   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^   rZ   re   rV   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   )rG   r   r#   rM   rN   rS   rT   rU   rV   r   r   r   Ś	testRead0   rY   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   TrJ   ©rG   r   r#   rS   rU   r1   ©r&   rW   Ś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   TrJ   ri   rj   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   )rG   r   r#   rU   rS   r1   rV   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   )rG   r   r#   ŚpeekŚassertNotEqualrc   Ś
assertTruer1   Ś
startswithrU   rS   )r&   rW   Ś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é   )rG   r   r#   r5   rU   r=   r1   rc   )r&   rW   Ś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    ©rG   r   r#   rM   rN   Śreadliner/   rU   ©r&   rW   Ś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    ©rG   r   r#   rM   rN   Ś	readlinesrU   r/   rV   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   rV   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    ©rG   r   r#   rU   ŚlistŚiterr/   rV   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   rV   r   r   r   ŚtestIteratorMultiStreamé   s   "’z#BZ2FileTest.testIteratorMultiStreamc                 C   s:   |   ”  t| j}| ”  |  tt|” |  t|j” d S r    )rG   r   r#   r%   rM   rO   Śnextr   rV   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#   rM   rN   rC   r1   r<   rU   r   rS   ©r&   rW   rF   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   TrJ   r   r   )r   r#   r1   rC   r<   rU   r   rS   )r&   rW   ry   rl   rF   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?   r1   r   r#   rC   r<   rU   rS   )r&   ZexpectedrW   rF   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#   rM   rN   Ś
writelinesr/   rO   r<   rU   r   rS   r1   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   abcrK   ó   a)r   r#   rC   rM   r[   r   rV   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é   )	rG   r   r#   rM   rN   ŚseekrU   rS   r1   rV   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   )
rG   r   r#   rM   rN   r   rc   r1   rU   rS   rV   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^  )rG   r   r#   rS   r   rU   r1   rV   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_   ro   r   r    r   iĪ’’’)rG   r   r#   rc   r1   rS   r   rU   )r&   rW   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   )rG   r   r#   r   rU   rS   r1   rc   rV   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ü’’)rG   r   r#   r   rU   rS   r1   rV   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   ©	rG   r   r#   r   rU   Śtellrc   r1   rS   rV   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§   rV   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§   rV   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§   rV   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   ©rG   r   r#   r   rU   rØ   rS   r1   rV   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®   rV   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   )	rG   r<   r#   r   rU   Śfilenor%   rM   rO   )r&   ZrawfrW   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   r2   rt   ŚseekablerS   r%   rM   rO   ŚassertFalse)r&   rW   Ś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   r2   rt   ŚreadablerS   r%   rM   rO   rµ   rV   r   r   r   ŚtestReadable§  ó   zBZ2FileTest.testReadablec                 C   rø   r¹   )
r   r   r2   rµ   ŚwritablerS   r%   rM   rO   rt   rV   r   r   r   ŚtestWritableø  r¼   zBZ2FileTest.testWritablec                 C   s&   |   ”  tdD ]}t| j}~qd S )Ni'  )rG   Śranger   r#   )r&   ŚiŚor   r   r   ŚtestOpenDelÉ  s
   
žzBZ2FileTest.testOpenDelc                 C   ó   |   ttd” d S )Nz/non/existent)rM   r[   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%trB   s   Test)r<   r#   rC   r   r   rU   r   )r&   r   rF   rW   Ś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 )NrB   s   xxxr   z4__enter__ on a closed file didn't raise an exceptionr   r   z1/0 didn't raise an exception)r   r#   rC   r%   rO   ZfailŚZeroDivisionError©r&   rF   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   rJ   rB   c                     s   t dD ]}   ” qd S ©Nr^   )ræ   rC   )rĄ   )r   rF   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   rF   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   )rG   rc   r/   r   r#   rS   rU   r   r1   r}   r   rM   ŚStopIteration)r&   ZlinelenZhalflenrW   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#   rC   rU   rS   )r&   Zdata1Zdata2rW   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 ASCIIrB   r   )	r#   ŚencodeŚUnicodeEncodeErrorZskipTestr   rC   r2   rU   rS   )r&   Zstr_filenameZbytes_filenamerF   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 )NrB   r   )ŚpathlibŚPathr#   r   rC   r2   rU   rS   )r&   r#   rF   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
assertLessrc   ra   rb   r   r   rU   rS   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   r2   r   rM   rN   rS   rT   rU   r1   rµ   Śclosed©r&   ŚbiorW   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 rq   )r   r2   r   rr   rs   rc   rt   r1   ru   rU   rS   )r&   ré   rW   rv   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   rM   rN   rC   r1   rU   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   r2   r   rM   rN   r   rU   rS   r1   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   r2   r   rS   r   rU   r1   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   é   )
r2   r   r   rM   ŚEOFErrorrS   rU   rc   r1   ræ   )r&   Z	truncatedrF   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   rL   é   r^   r   )Śarrayrc   Śitemsizer   r   rU   rC   rØ   )r&   ŚqZLENGTHrF   r   r   r   Śtest_issue44439p  s   "žzBZ2FileTest.test_issue44439N)r   r   )@r+   r,   r-   r.   rG   rQ   rX   r\   r`   rd   rf   rg   rh   rm   rn   rp   rw   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   rA   Z   s|    
	

	
rA   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   rM   rN   r?   r1   ŚflushrU   r   ©r&   Śbz2cr   r   r   r   ŚtestCompressz  s
   zBZ2CompressorTest.testCompressc                 C   s.   t  }| d”}|| ” 7 }|  || j” d S ©Nr   )r   r?   rū   rU   r3   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   TrJ   r   )r   r1   r?   rū   rU   r   )r&   rż   ry   r   rl   r   r   r   ŚtestCompressChunks10  s   ūz&BZ2CompressorTest.testCompressChunks10ro   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   rU   rc   Ś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_PROTOCOLrM   rN   Ś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é*   )rM   rN   r   r)   r   r   r   Śtest_Constructor­  rÅ   z$BZ2DecompressorTest.test_Constructorc                 C   s2   t  }|  t|j” | | j”}|  || j” d S r    )r   rM   rN   r   r2   rU   r1   ©r&   Śbz2drk   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   TrJ   r   )r   r2   r   rU   r1   )r&   r  rk   ry   rl   r   r   r   ŚtestDecompressChunks10¶  s   ūz*BZ2DecompressorTest.testDecompressChunks10c                 C   s:   t  }d}| | j| ”}|  || j” |  |j|” d S )Ns   this is unused data)r   r   r2   rU   r1   Śunused_data)r&   r  r  rk   r   r   r   ŚtestDecompressUnusedDataĀ  s
   z,BZ2DecompressorTest.testDecompressUnusedDatac                 C   s6   t  }| | j”}|  t|jd” |  t|jd” d S )Ns   anythingr   )r   r   r2   rM   rņ   r  r   r   r   ŚtestEOFErrorÉ  s   z BZ2DecompressorTest.testEOFErrorro   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   rt   )r&   r  Ś	blocksizeŚblockr   r  r  Zdecompressedr   r   r   ŚtestDecompress4GĻ  s   


žz$BZ2DecompressorTest.testDecompress4Gc              	   C   r  r	  )ræ   r
  r  rM   rN   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 )Nro   é@   ©Ś
max_lengthé’’’’r   )r   rc   r@   Śappendr   rµ   Śneeds_inputrU   rā   Śeofr0   r6   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 )Nro   r   r"  r   r   éi   é   ©r   rU   r   r2   r%  r0   r1   ©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 )Nr0  r^   r1  r   )r   r%  r   r2   rU   r0   r1   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   rM   Ś	Exceptionr   r4   )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Śgettotalrefcountro   r   rJ   )Zdelta)r   Zget_attributeŚsysr   ræ   Ś__init__ZassertAlmostEqual)r&   r7  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/  r2  r3  r6  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 r    )r
   r?   r1   rU   r   )r&   r   r   r   r   rž   P  s   z#CompressDecompressTest.testCompressc                 C   s   t  d”}|  || j” d S r’   )r
   r?   rU   r3   ©r&   rk   r   r   r   r   T  s   
z.CompressDecompressTest.testCompressEmptyStringc                 C   s   t  | j”}|  || j” d S r    ©r
   r   r2   rU   r1   r<  r   r   r   r  X  s   z%CompressDecompressTest.testDecompressc                 C   s   t  d”}|  |d” d S r’   )r
   r   rU   r<  r   r   r   ŚtestDecompressEmpty\  s   
z*CompressDecompressTest.testDecompressEmptyc                 C   s   t  | j”}|  |d” d S r’   )r
   r   r3   rU   r<  r   r   r   ŚtestDecompressToEmptyString`  s   z2CompressDecompressTest.testDecompressToEmptyStringc                 C   s   |   ttj| jd d ” d S )Nrš   )rM   rO   r
   r   r2   r)   r   r   r   ŚtestDecompressIncompleted  s   z/CompressDecompressTest.testDecompressIncompletec                 C   s   |   ttj| j” d S r    )rM   r[   r
   r   r4   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   r2   r4   rU   r1   r<  r   r   r   ŚtestDecompressTrailingJunkn  s   z1CompressDecompressTest.testDecompressTrailingJunkc                 C   s,   t  | jd | j ”}|  || jd ” d S rĢ   rC  r<  r   r   r   Ś%testDecompressMultiStreamTrailingJunkr  s   z<CompressDecompressTest.testDecompressMultiStreamTrailingJunkN)r+   r,   r-   rž   r   r  r>  r?  r@  rA  rB  rD  rE  r   r   r   r   r;  O  s    r;  c                   @   s`   e Zd ZdZdd Zdd Zdd Zdd	 Zd
d Zdd Z	dd Z
dd Zdd Zdd ZdS )ŚOpenTestzTest the open function.c                 O   s   t j|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)rB   ŚxbrI  r   Śabr   ©r	   r#   r<   rC   r1   r   rS   rU   ©r&   ŚmoderF   Ś	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   ŚxrP  r   rK   r   r   rK  rL  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ŚxtrT  ©Śencodingr   ŚrtZatr   )r1   ŚdecodeŚreplacer$   Ślinesepr	   r#   r<   rC   r   rS   rU   )r&   rk   Śtext_native_eolrM  rF   rN  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)rP  rI  rT  Śtśutf-8rU  )r	   r#   r<   rM   ŚFileExistsError)r&   rM  rV  rF   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 )NrK   r   rŲ   rW  r^  rU  )r<   r   r2   rU   rS   r1   rX  )r&   rF   rk   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^  rU  Śignore)ŚerrorsrR  )Śnewline)rM   rO   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Ų   rR  rS  z	utf-16-lerU  r   rW  )r1   rX  rY  r$   rZ  r<   r#   rC   r   rS   rU   )r&   rk   r[  rF   rN  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 )NrB   s   foo’barrW  rŲ   rb  )rV  rc  Zfoobar)r<   r#   rC   rU   rS   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Ų   rS  r^  rR  )rV  rd  rW  ś)r1   rX  r<   r#   rC   rU   r   )r&   rk   rF   r   r   r   Śtest_newlineē  s   ’"’zOpenTest.test_newlineN)r+   r,   r-   r.   r<   rO  rQ  r\  r`  ra  re  rf  rg  ri  r   r   r   r   rF  w  s    
	rF  c                   C   s   t  ”  d S r    )r   Śreap_childrenr   r   r   r   ŚtearDownModuleš  s   rk  Ś__main__)*Śtestr   Ztest.supportr   r   rö   ZunittestŚior   r   r$   r
  r7   r!   rÜ   r  r   r   rĻ   r   r   Ztest.support.os_helperr	   ra   r8  Śimport_moduler
   r   r   r   r   r   ZTestCaser   rA   rś   r  r;  rF  rk  r+   Śmainr   r   r   r   Ś<module>   sL    
	4    #3 $(y’