a
    äze£š ã                   @   sv  d 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
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mZ ddlmZmZ ddlmZ ddlmZmZmZ ddlmZmZ ddlZddl Z ddl!Z"zddl#Z#W n e$y   dd	„ Z%Y n0 d
d	„ Z%G dd„ de#j&ƒZ'e(e	dƒp:e	j)j*Z+dd„ Z,G dd„ dƒZ-G dd„ de-e j.ƒZ/G dd„ de-e"j.ƒZ0G dd„ de-ƒZ1G dd„ de1e j.ƒZ2G dd„ de1e"j.ƒZ3G dd„ de1ƒZ4G dd„ de4e j.ƒZ5G d d!„ d!e4e"j.ƒZ6G d"d#„ d#e1ƒZ7G d$d%„ d%e7e j.ƒZ8G d&d'„ d'e7e"j.ƒZ9G d(d)„ d)e1ƒZ:G d*d+„ d+e:e j.ƒZ;G d,d-„ d-e:e"j.ƒZ<G d.d/„ d/ƒZ=G d0d1„ d1e=e j>ƒZ?G d2d3„ d3e=e"j>ƒZ@G d4d5„ d5ƒZAG d6d7„ d7eAe j>ƒZBG d8d9„ d9eAe"j>ƒZCG d:d;„ d;ƒZDG d<d=„ d=eDe j.ƒZEG d>d?„ d?eDe"j.ƒZFG d@dA„ dAejGƒZHG dBdC„ dCeHƒZIG dDdE„ dEeHƒZJejKG dFdG„ dGejGƒƒZLG dHdI„ dIƒZMG dJdK„ dKƒZNG dLdM„ dMejGeMƒZOG dNdO„ dOeOeNƒZPG dPdQ„ dQeOƒZQG dRdS„ dSejGeMƒZRG dTdU„ dUeReNƒZSG dVdW„ dWeRƒZTG dXdY„ dYejGƒZUG dZd[„ d[eUƒZVG d\d]„ d]eUƒZWG d^d_„ d_eOeRƒZXG d`da„ daeXeNƒZYG dbdc„ dceXƒZZG ddde„ deej[ƒZ\e ]e\j^¡ G dfdg„ dgejGƒZ_G dhdi„ diejGƒZ`G djdk„ dke j>ƒZadldm„ ZbG dndo„ doe`ƒZcG dpdq„ dqe`ƒZdG drds„ dsejGƒZeG dtdu„ dueeƒZfG dvdw„ dweeƒZgG dxdy„ dyejGƒZhG dzd{„ d{ehƒZiG d|d}„ d}ehƒZje kejld~kd¡G d€d„ dejGƒƒZmG d‚dƒ„ dƒemƒZnG d„d…„ d…emƒZod†d‡„ Zpeqdˆkrre r¡  dS )‰zUnit tests for the io module.é    N)ÚdequeÚUserList)ÚcycleÚcount)Úsupport)Úassert_python_okÚassert_python_failureÚrun_python_until_end)ÚFakePathÚskip_if_sanitizerc                  O   s   t   dt| i |¤Ž¡S )NÚb)ÚarrayÚbytes)ÚposÚkw© r   ú"/usr/lib/python3.9/test/test_io.pyÚ	byteslike3   s    r   c                  O   s>   t | i |¤Ž}tƒ }t |t|ƒ¡ |t|ƒ d¡dd…< |S )z?Create a bytes-like object having no string or sequence methodsÚBN)r   ÚEmptyStructÚctypesZresizeÚlenÚ
memoryviewÚcast)r   r   ÚdataÚobjr   r   r   r   6   s
    c                   @   s   e Zd ZdS )r   N©Ú__name__Ú
__module__Ú__qualname__r   r   r   r   r   =   s   r   Zgettotalrefcountc                  C   s8   t tddd} | jW  d  ƒ S 1 s*0    Y  dS )z(Get the default TextIOWrapper chunk sizeÚrúlatin-1©ÚencodingN)ÚopenÚ__file__Ú_CHUNK_SIZE©Úfr   r   r   Ú_default_chunk_sizeE   s    r)   c                   @   sd   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d„ZdS )ÚMockRawIOWithoutReadzmA RawIO implementation without read(), so as to exercise the default
    RawIO.read() which calls readinto().r   c                 C   s    t |ƒ| _g | _d| _d| _d S ©Nr   )ÚlistÚ_read_stackÚ_write_stackÚ_readsÚ_extraneous_reads)ÚselfZ
read_stackr   r   r   Ú__init__O   s    
zMockRawIOWithoutRead.__init__c                 C   s   | j  t|ƒ¡ t|ƒS ©N)r.   Úappendr   r   ©r1   r   r   r   r   ÚwriteU   s    zMockRawIOWithoutRead.writec                 C   s   dS ©NTr   ©r1   r   r   r   ÚwritableY   s    zMockRawIOWithoutRead.writablec                 C   s   dS ©Né*   r   r8   r   r   r   Úfileno\   s    zMockRawIOWithoutRead.filenoc                 C   s   dS r7   r   r8   r   r   r   Úreadable_   s    zMockRawIOWithoutRead.readablec                 C   s   dS r7   r   r8   r   r   r   Úseekableb   s    zMockRawIOWithoutRead.seekablec                 C   s   dS r+   r   ©r1   r   Úwhencer   r   r   Úseeke   s    zMockRawIOWithoutRead.seekc                 C   s   dS r+   r   r8   r   r   r   Útellh   s    zMockRawIOWithoutRead.tellc                 C   s¶   |  j d7  _ t|ƒ}z| jd }W n" tyF   |  jd7  _Y dS 0 |d u r\| jd= d S t|ƒ}t|ƒ|krˆ| jd= ||d |…< |S |d |… |d d …< ||d … | jd< |S d S ©Né   r   )r/   r   r-   Ú
IndexErrorr0   )r1   ÚbufZmax_lenr   Únr   r   r   Úreadintok   s$    zMockRawIOWithoutRead.readintoNc                 C   s   |S r3   r   )r1   r   r   r   r   Útruncate€   s    zMockRawIOWithoutRead.truncate)r   )N)r   r   r   Ú__doc__r2   r6   r9   r<   r=   r>   rA   rB   rH   rI   r   r   r   r   r*   K   s   
r*   c                   @   s   e Zd ZdS )ÚCMockRawIOWithoutReadNr   r   r   r   r   rK   ƒ   s   rK   c                   @   s   e Zd ZdS )ÚPyMockRawIOWithoutReadNr   r   r   r   r   rL   †   s   rL   c                   @   s   e Zd Zddd„ZdS )Ú	MockRawIONc                 C   s>   |  j d7  _ z| j d¡W S    |  jd7  _Y dS 0 d S )NrD   r   ó    )r/   r-   Úpopr0   ©r1   rG   r   r   r   ÚreadŒ   s    zMockRawIO.read)N©r   r   r   rQ   r   r   r   r   rM   Š   s   rM   c                   @   s   e Zd ZdS )Ú
CMockRawIONr   r   r   r   r   rS   ”   s   rS   c                   @   s   e Zd ZdS )ÚPyMockRawIONr   r   r   r   r   rT   —   s   rT   c                       sF   e Zd Z‡ fdd„Zd‡ fdd„	Zdd„ Zdd	„ Z‡ fd
d„Z‡  ZS )ÚMisbehavedRawIOc                    s   t ƒ  |¡d S ©Né   )Úsuperr6   r5   ©Ú	__class__r   r   r6   œ   s    zMisbehavedRawIO.writeNc                    s   t ƒ  |¡d S rV   )rX   rQ   rP   rY   r   r   rQ   Ÿ   s    zMisbehavedRawIO.readc                 C   s   dS )Ni…ÿÿÿr   r?   r   r   r   rA   ¢   s    zMisbehavedRawIO.seekc                 C   s   dS )Ni8þÿÿr   r8   r   r   r   rB   ¥   s    zMisbehavedRawIO.tellc                    s   t ƒ  |¡ t|ƒd S )Né   )rX   rH   r   )r1   rF   rY   r   r   rH   ¨   s    zMisbehavedRawIO.readinto)N)	r   r   r   r6   rQ   rA   rB   rH   Ú__classcell__r   r   rY   r   rU   ›   s
   rU   c                   @   s   e Zd ZdS )ÚCMisbehavedRawIONr   r   r   r   r   r]   ¬   s   r]   c                   @   s   e Zd ZdS )ÚPyMisbehavedRawIONr   r   r   r   r   r^   ¯   s   r^   c                       s$   e Zd Z‡ fdd„Zdd„ Z‡  ZS )ÚSlowFlushRawIOc                    s   t ƒ  ¡  t ¡ | _d S r3   )rX   r2   Ú	threadingÚEventÚin_flushr8   rY   r   r   r2   ´   s    
zSlowFlushRawIO.__init__c                 C   s   | j  ¡  t d¡ d S )Ng      Ð?)rb   ÚsetÚtimeÚsleepr8   r   r   r   Úflush¸   s    
zSlowFlushRawIO.flush)r   r   r   r2   rf   r\   r   r   rY   r   r_   ³   s   r_   c                   @   s   e Zd ZdS )ÚCSlowFlushRawIONr   r   r   r   r   rg   ¼   s   rg   c                   @   s   e Zd ZdS )ÚPySlowFlushRawIONr   r   r   r   r   rh   ¿   s   rh   c                   @   s   e Zd ZdZdd„ ZdS )ÚCloseFailureIOr   c                 C   s   | j sd| _ t‚d S ©NrD   ©ÚclosedÚOSErrorr8   r   r   r   ÚcloseÆ   s    zCloseFailureIO.closeN)r   r   r   rl   rn   r   r   r   r   ri   Ã   s   ri   c                   @   s   e Zd ZdS )ÚCCloseFailureIONr   r   r   r   r   ro   Ë   s   ro   c                   @   s   e Zd ZdS )ÚPyCloseFailureIONr   r   r   r   r   rp   Î   s   rp   c                       s6   e Zd Z‡ fdd„Zd‡ fdd„	Z‡ fdd„Z‡  ZS )	Ú
MockFileIOc                    s   g | _ tƒ  |¡ d S r3   )Úread_historyrX   r2   ©r1   r   rY   r   r   r2   Ô   s    zMockFileIO.__init__Nc                    s,   t ƒ  |¡}| j |d u rd nt|ƒ¡ |S r3   )rX   rQ   rr   r4   r   )r1   rG   ÚresrY   r   r   rQ   Ø   s    zMockFileIO.readc                    s   t ƒ  |¡}| j |¡ |S r3   )rX   rH   rr   r4   )r1   r   rt   rY   r   r   rH   Ý   s    zMockFileIO.readinto)N)r   r   r   r2   rQ   rH   r\   r   r   rY   r   rq   Ò   s   rq   c                   @   s   e Zd ZdS )ÚCMockFileIONr   r   r   r   r   ru   â   s   ru   c                   @   s   e Zd ZdS )ÚPyMockFileIONr   r   r   r   r   rv   å   s   rv   c                   @   s,   e Zd Zdd„ Zdd„ Zdd„ Zdd„ Zd	S )
ÚMockUnseekableIOc                 C   s   dS ©NFr   r8   r   r   r   r>   ê   s    zMockUnseekableIO.seekablec                 G   s   |   d¡‚d S ©Nznot seekable©ÚUnsupportedOperation©r1   Úargsr   r   r   rA   í   s    zMockUnseekableIO.seekc                 G   s   |   d¡‚d S ry   rz   r|   r   r   r   rB   ð   s    zMockUnseekableIO.tellc                 G   s   |   d¡‚d S ry   rz   r|   r   r   r   rI   ó   s    zMockUnseekableIO.truncateN)r   r   r   r>   rA   rB   rI   r   r   r   r   rw   é   s   rw   c                   @   s   e Zd ZejZdS )ÚCMockUnseekableION)r   r   r   Úior{   r   r   r   r   r~   ö   s   r~   c                   @   s   e Zd ZejZdS )ÚPyMockUnseekableION)r   r   r   Úpyior{   r   r   r   r   r€   ù   s   r€   c                   @   sN   e Zd Zdd„ Zdd„ Zdd„ Zdd„ Zd	d
„ Zddd„Zdd„ Z	dd„ Z
dS )ÚMockNonBlockWriterIOc                 C   s   g | _ d | _d S r3   )r.   Ú_blocker_charr8   r   r   r   r2   ÿ   s    zMockNonBlockWriterIO.__init__c                 C   s   d  | j¡}g | jd d …< |S )NrN   )Újoinr.   )r1   Úsr   r   r   Úpop_written  s    z MockNonBlockWriterIO.pop_writtenc                 C   s
   || _ dS )z'Block when a given char is encountered.N)rƒ   )r1   Úcharr   r   r   Úblock_on  s    zMockNonBlockWriterIO.block_onc                 C   s   dS r7   r   r8   r   r   r   r=     s    zMockNonBlockWriterIO.readablec                 C   s   dS r7   r   r8   r   r   r   r>     s    zMockNonBlockWriterIO.seekabler   c                 C   s   dS r+   r   r?   r   r   r   rA     s    zMockNonBlockWriterIO.seekc                 C   s   dS r7   r   r8   r   r   r   r9     s    zMockNonBlockWriterIO.writablec                 C   st   t |ƒ}d}| jr`z| | j¡}W n ty4   Y n,0 |dkrV| j |d |… ¡ |S d | _d S | j |¡ t|ƒS )Néÿÿÿÿr   )r   rƒ   ÚindexÚ
ValueErrorr.   r4   r   )r1   r   rG   r   r   r   r6     s    zMockNonBlockWriterIO.writeN)r   )r   r   r   r2   r†   rˆ   r=   r>   rA   r9   r6   r   r   r   r   r‚   ý   s   
r‚   c                   @   s   e Zd ZejZdS )ÚCMockNonBlockWriterION)r   r   r   r   ÚBlockingIOErrorr   r   r   r   rŒ   -  s   rŒ   c                   @   s   e Zd ZejZdS )ÚPyMockNonBlockWriterION)r   r   r   r   r   r   r   r   r   rŽ   0  s   rŽ   c                   @   sŠ  e Zd Zdd„ Zdd„ Zdd„ Zdbd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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\„ Z0d]d^„ Z1d_d`„ Z2daS )cÚIOTestc                 C   s   t  t j¡ d S r3   ©r   ÚunlinkÚTESTFNr8   r   r   r   ÚsetUp6  s    zIOTest.setUpc                 C   s   t  t j¡ d S r3   r   r8   r   r   r   ÚtearDown9  s    zIOTest.tearDownc                 C   sD  |   | d¡d¡ | d¡ |   | ¡ d¡ | d¡ |   | d¡d¡ |   | d¡d¡ |   | d¡d¡ |   | ¡ d¡ |   | dd¡d¡ |   | ¡ d¡ tdƒ}|   | |¡d	¡ d
|d d …< |   | d¡d¡ |   | d¡d¡ |   | dd¡d¡ |   | ¡ d¡ |   | d¡d¡ |   | ¡ d¡ |  t|jd¡ d S )Ns   blah.r[   r   s   Hello.é   r‰   rD   s	    world


é	   s	   *********ó   hrW   é   é   ç        )ÚassertEqualr6   rI   rB   rA   Ú	bytearrayÚassertRaisesÚ	TypeError)r1   r(   Úbufferr   r   r   Ú	write_ops<  s(    

zIOTest.write_opsFc                 C   sÞ  |  d¡}|  |d¡ t|ƒ}|  | |¡d¡ |  t|ƒd¡ tdƒ}|  | |¡d¡ |  t|ƒd¡ |  |d d… d¡ |  | d¡d¡ |  |  d¡d¡ |  |  d	¡d
¡ |  | tdƒ¡d¡ |  | dd¡d¡ |  |  d¡d¡ |  |  d¡d
¡ |  | tƒ ¡d¡ |  | dd	¡d¡ |  |  d¡d¡ |  | ¡ d¡ |  	t
|jd¡ |rÚ| d¡ |  |  ¡ d¡ | d¡ |  |  ¡ d¡ |  |  ¡ d
¡ | d¡ tdƒ}|  | |¡d¡ |  t|ƒd¡ d S )Nr[   s   hellos    worlrW   ó   d
r   é   ó   hello world
rD   rN   ó   xiúÿÿÿr•   s   worldé
   rš   s   world
)rQ   r›   r   rH   r   rœ   r   rA   rB   r   rž   Ú	readinto1)r1   r(   Zbufferedr   r   r   r   Úread_opsT  s>    



zIOTest.read_opsl        c              	   C   sP  z|   | | j¡| j¡ W n  ttfy:   |  d¡ Y n0 |   | ¡ | j¡ |   | d¡d¡ |   | ¡ | jd ¡ |   | dd¡| jd ¡ |   | ¡ | jd ¡ |   | ¡ | jd ¡ |   | dd¡| jd ¡ |   | | jd ¡| jd ¡ |   | ¡ | jd ¡ |   | dd¡| jd ¡ |   | dd¡| j¡ |   | 	d¡d¡ d S )	Nzno largefile supportó   xxxé   r‰   rD   rW   r   r¤   )
r›   rA   ÚLARGEÚOverflowErrorr‹   ÚskipTestrB   r6   rI   rQ   ©r1   r(   r   r   r   Úlarge_file_opsw  s     zIOTest.large_file_opsc              	   C   sÌ  | j }dD ]N}|  tj|¡,}|  ||j¡ |  ||j¡ W d   ƒ q
1 sN0    Y  q
| jtjddd,}|  ||j¡ |  ||j¡ W d   ƒ n1 sž0    Y  | jtjddd2}|  ||jd¡ |  ||jdg¡ W d   ƒ n1 sò0    Y  |  tjd¡2}|  ||jd¡ |  ||jdg¡ W d   ƒ n1 sD0    Y  |  tjd¡Z}|  ||jd	¡ |  ||jd
g¡ |  ||j	d| j
¡ |  ||j	d| j¡ W d   ƒ n1 s¾0    Y  d S )N)ÚwÚwbr°   r   ©Ú	bufferingÚrbs   blahs   blah
r    Zblahzblah
rD   r‰   )r{   r$   r   r’   r   rQ   Úreadliner6   Ú
writelinesrA   ÚSEEK_CURÚSEEK_END)r1   ÚexcÚmodeÚfpr   r   r   Útest_invalid_operations‹  s&    .,02zIOTest.test_invalid_operationsc                    s¸  ‡ fdd„}‡ fdd„}‡ fdd„}‡ fdd„}‡ fd	d
„}‡ fdd„}‡ fdd„}‡ fdd„}|df|df|df|df|df|df|df|dfˆ j dfˆ jdff
}	|	D ]\}
}ˆ  |
¡â |
ƒ ¸}d|v }ˆ  | ¡ |¡ d|v }ˆ  | ¡ |¡ t|ˆ jƒrd}n$t|ˆ jˆ j	fƒr(d}n
ˆ  
d¡ d|v rF| ¡  nˆ  t|j¡ |rn| d¡ | ¡  nˆ  t|jd¡ ˆ  t|j¡ |rž| |¡ nˆ  t|j|¡ tj d¡rä|
||fv räW d   ƒ W d   ƒ q¨d|v }ˆ  | ¡ |¡ |r| ¡  | d¡ nˆ  t|j¡ ˆ  t|jd¡ |rT|rT| ¡  | d¡ nˆ  t|j¡ ˆ  t|jd¡ W d   ƒ n1 sˆ0    Y  W d   ƒ q¨1 s¨0    Y  q¨d S )Nc                     s"   t  ¡ \} }t  |¡ ˆ  | d¡S )Nr    )ÚosÚpipern   ÚFileIO)r    r¯   r8   r   r   Úpipe_reader¨  s    
z3IOTest.test_optional_abilities.<locals>.pipe_readerc                     sN   t  ¡ \} }ˆ  t j| ¡ tjt j| dfd}| ¡  ˆ  |j¡ ˆ  	|d¡S )Néd   ©Útargetr}   r¯   )
r¼   r½   Ú
addCleanuprn   r`   ÚThreadrQ   Ústartr„   r¾   )r    r¯   Úthreadr8   r   r   Úpipe_writer­  s    z3IOTest.test_optional_abilities.<locals>.pipe_writerc                      s   ˆ   ˆ  ¡ ¡S r3   )ÚBufferedReaderrw   r   r8   r   r   Úbuffered_reader¶  s    z7IOTest.test_optional_abilities.<locals>.buffered_readerc                      s   ˆ   ˆ  ¡ ¡S r3   )ÚBufferedWriterrw   r   r8   r   r   Úbuffered_writer¹  s    z7IOTest.test_optional_abilities.<locals>.buffered_writerc                      s   ˆ   ˆ  ¡ ¡S r3   )ÚBufferedRandomÚBytesIOr   r8   r   r   Úbuffered_random¼  s    z7IOTest.test_optional_abilities.<locals>.buffered_randomc                      s   ˆ   ˆ  ¡ ˆ  ¡ ¡S r3   )ÚBufferedRWPairrw   r   r8   r   r   Úbuffered_rw_pair¿  s    
ÿz8IOTest.test_optional_abilities.<locals>.buffered_rw_pairc                     s$   G ‡ fdd„dˆ j ƒ} ˆ  | ƒ d¡S )Nc                       s   e Zd Z” jjZ” jjZdS )zMIOTest.test_optional_abilities.<locals>.text_reader.<locals>.UnseekableReaderN)r   r   r   ÚBufferedIOBaser9   r6   r   r8   r   r   ÚUnseekableReaderÄ  s   rÒ   Úascii©rw   ÚTextIOWrapper)rÒ   r8   r   r   Útext_readerÃ  s    z3IOTest.test_optional_abilities.<locals>.text_readerc                     s$   G ‡ fdd„dˆ j ƒ} ˆ  | ƒ d¡S )Nc                       s   e Zd Z” jjZ” jjZdS )zMIOTest.test_optional_abilities.<locals>.text_writer.<locals>.UnseekableWriterN)r   r   r   rÑ   r=   rQ   r   r8   r   r   ÚUnseekableWriterÊ  s   r×   rÓ   rÔ   )r×   r8   r   r   Útext_writerÉ  s    z3IOTest.test_optional_abilities.<locals>.text_writerÚfrÚfwr    r¯   ZrwsÚrwÚ3ó   3zUnknown base classr(   rD   Úwinr…   r   )rÍ   ÚStringIOÚsubTestr›   r=   r9   Ú
isinstanceÚ
TextIOBaserÑ   Ú	RawIOBaseÚfailr<   r   rm   rQ   r6   ÚsysÚplatformÚ
startswithr>   rB   rA   rI   )r1   r¿   rÇ   rÉ   rË   rÎ   rÐ   rÖ   rØ   ÚtestsÚtestZ	abilitiesr   r=   r9   r   r>   r   r8   r   Útest_optional_abilities¢  sh    	û




ÿzIOTest.test_optional_abilitiesc                 C   sj   d}|   t| j|d¡ t|dƒ}t ¡ . t dt¡ |   t| j|d¡ W d   ƒ n1 s\0    Y  d S )Nzfoo barr¯   rÓ   Úignore)r   r‹   r$   r   ÚwarningsÚcatch_warningsÚsimplefilterÚDeprecationWarning)r1   Zfn_with_NULZbytes_fnr   r   r   Útest_open_handles_NUL_chars
  s    

z"IOTest.test_open_handles_NUL_charsc                 C   sÜ   | j tjdddJ}|  | ¡ d¡ |  | ¡ d¡ |  | ¡ d¡ |  |¡ W d   ƒ n1 sb0    Y  | j tjdddJ}|  | ¡ d¡ |  | ¡ d¡ |  | ¡ d¡ |  |¡ W d   ƒ n1 sÎ0    Y  d S )Nr°   r   r±   FTr³   ©	r$   r   r’   r›   r=   r9   r>   r    r§   r­   r   r   r   Útest_raw_file_io  s    (zIOTest.test_raw_file_ioc                 C   sÖ   |   tjd¡J}|  | ¡ d¡ |  | ¡ d¡ |  | ¡ d¡ |  |¡ W d   ƒ n1 s^0    Y  |   tjd¡L}|  | ¡ d¡ |  | ¡ d¡ |  | ¡ d¡ |  |d¡ W d   ƒ n1 sÈ0    Y  d S )Nr°   FTr³   rñ   r­   r   r   r   Útest_buffered_file_io  s    (zIOTest.test_buffered_file_ioc                 C   s"  |   tjd¡}| d¡ W d   ƒ n1 s.0    Y  |   tjd¡ˆ}|  | ¡ d¡ |  | d¡d¡ |  | d¡d¡ |  | d	¡d
¡ |  | ¡ d¡ |  | d ¡d¡ |  t|jd¡ W d   ƒ n1 sÔ0    Y  |   tjd¡ }|  t|jd¡ W d   ƒ n1 s0    Y  d S )Nr°   s"   abc
def
xyzzy
foo bar
another liner³   ó   abc
r¥   ó   def
rW   ó   xyé   s   zzy
s   foo bar
s   another lineg333333@r    )r$   r   r’   r6   r›   r´   r   rž   r­   r   r   r   Útest_readline+  s    (.zIOTest.test_readlinec                 C   s*   G dd„ d| j ƒ}|  ttft|ƒ ¡ d S )Nc                   @   s   e Zd Zdd„ ZdS )z+IOTest.test_readline_nonsizeable.<locals>.Rc                 S   s   d S r3   r   r8   r   r   r   r´   =  s    z4IOTest.test_readline_nonsizeable.<locals>.R.readlineN)r   r   r   r´   r   r   r   r   ÚR<  s   rù   )ÚIOBaser   rž   ÚStopIterationÚnext©r1   rù   r   r   r   Útest_readline_nonsizeable9  s    z IOTest.test_readline_nonsizeablec                 C   s(   G dd„ d| j ƒ}|  t|ƒ jd¡ d S )Nc                   @   s   e Zd Zdd„ ZdS )z'IOTest.test_next_nonsizeable.<locals>.Rc                 S   s   d S r3   r   r8   r   r   r   Ú__next__E  s    z0IOTest.test_next_nonsizeable.<locals>.R.__next__N)r   r   r   rÿ   r   r   r   r   rù   D  s   rù   rD   )rú   r   rž   Ú	readlinesrý   r   r   r   Útest_next_nonsizeableA  s    zIOTest.test_next_nonsizeablec                 C   s@   |   ¡ }|  |¡ | ¡ }|  |d¡ |   |¡}|  |d¡ d S )Nr£   T)rÍ   r    Úgetvaluer›   r§   )r1   r(   r   r   r   r   Útest_raw_bytes_ioI  s    

zIOTest.test_raw_bytes_ioc                 C   s¤   t jd d… dkst jdkr.t dd| j ¡ |  tjdd¡}|  |¡ W d   ƒ n1 s^0    Y  |  tjd¡}|  |¡ W d   ƒ n1 s–0    Y  d S )Nr©   rÞ   ÚdarwinZ	largefilez-test requires %s bytes and a long time to runúw+br   )rå   ræ   r   Zrequiresrª   r$   r’   r®   r­   r   r   r   Útest_large_file_opsQ  s    þ(zIOTest.test_large_file_opsc              	   C   sÆ   dD ]¼}d }|   tjd|¡}| d¡ W d   ƒ n1 s<0    Y  |  |jd¡ d }z<|   tjd|¡}dd  W d   ƒ n1 sˆ0    Y  W n  ty´   |  |jd¡ Y q0 |  d¡ qd S )N)r   rÀ   r°   r¨   TrD   r   z1/0 didn't raise an exception)r$   r   r’   r6   r›   rl   ÚZeroDivisionErrorrä   )r1   Úbufsizer(   r   r   r   Útest_with_open^  s    (*zIOTest.test_with_openc                 C   sú   |   tjd¡}| d¡ W d   ƒ n1 s.0    Y  | j tjddd }|  | ¡ d¡ W d   ƒ n1 sp0    Y  |   tjd¡ }|  | ¡ d¡ W d   ƒ n1 s®0    Y  |   tjd¡ }|  | ¡ d¡ W d   ƒ n1 sì0    Y  d S )Nr°   r¨   Úabr   r±   r©   Úa)r$   r   r’   r6   r›   rB   ÚassertGreaterr­   r   r   r   Útest_append_mode_telln  s    (..zIOTest.test_append_mode_tellc              	      sº   g ‰ G ‡ fdd„d| j ƒ}t dtf¡~ |tjdƒ}| d¡ ~t ¡  |  ˆ g d¢¡ |  tjd¡ }|  | 	¡ d¡ W d   ƒ n1 sŽ0    Y  W d   ƒ n1 s¬0    Y  d S )Nc                       s:   e Zd Z‡ ‡fdd„Z‡ ‡fdd„Z‡ ‡fdd„Z‡  ZS )z(IOTest.test_destructor.<locals>.MyFileIOc                    s4   ˆ  d¡ ztƒ j}W n ty(   Y n0 |ƒ  d S rj   ©r4   rX   Ú__del__ÚAttributeErrorr­   ©rZ   Úrecordr   r   r  {  s    
z0IOTest.test_destructor.<locals>.MyFileIO.__del__c                    s   ˆ  d¡ tƒ  ¡  d S rV   ©r4   rX   rn   r8   r  r   r   rn   ƒ  s    
z.IOTest.test_destructor.<locals>.MyFileIO.closec                    s   ˆ  d¡ tƒ  ¡  d S ©Nr©   ©r4   rX   rf   r8   r  r   r   rf   †  s    
z.IOTest.test_destructor.<locals>.MyFileIO.flush©r   r   r   r  rn   rf   r\   r   ©r  rY   r   ÚMyFileIOz  s   r  Ú r°   r¨   ©rD   rW   r©   r³   )
r¾   r   Úcheck_warningsÚResourceWarningr’   r6   Ú
gc_collectr›   r$   rQ   )r1   r  r(   r   r  r   Útest_destructorx  s    
zIOTest.test_destructorc                    s<   g ‰ G ‡ fdd„d|ƒ}|ƒ }~t  ¡  |  ˆ g d¢¡ d S )Nc                       sB   e Zd Zdd„ Z‡ ‡fdd„Z‡ ‡fdd„Z‡ ‡fdd„Z‡  ZS )	z+IOTest._check_base_destructor.<locals>.MyIOc                 S   s   d| _ d| _d| _d S )NrD   rW   r©   )Úon_delÚon_closeÚon_flushr8   r   r   r   r2   •  s    z4IOTest._check_base_destructor.<locals>.MyIO.__init__c                    s6   ˆ  | j¡ ztƒ j}W n ty*   Y n0 |ƒ  d S r3   )r4   r  rX   r  r  r­   r  r   r   r    s    z3IOTest._check_base_destructor.<locals>.MyIO.__del__c                    s   ˆ  | j¡ tƒ  ¡  d S r3   )r4   r   rX   rn   r8   r  r   r   rn   ¥  s    z1IOTest._check_base_destructor.<locals>.MyIO.closec                    s   ˆ  | j¡ tƒ  ¡  d S r3   )r4   r!  rX   rf   r8   r  r   r   rf   ¨  s    z1IOTest._check_base_destructor.<locals>.MyIO.flush)r   r   r   r2   r  rn   rf   r\   r   r  rY   r   ÚMyIO”  s   r"  r  )r   r  r›   )r1   Úbaser"  r(   r   r  r   Ú_check_base_destructor’  s    zIOTest._check_base_destructorc                 C   s   |   | j¡ d S r3   )r$  rú   r8   r   r   r   Útest_IOBase_destructor°  s    zIOTest.test_IOBase_destructorc                 C   s   |   | j¡ d S r3   )r$  rã   r8   r   r   r   Útest_RawIOBase_destructor³  s    z IOTest.test_RawIOBase_destructorc                 C   s   |   | j¡ d S r3   )r$  rÑ   r8   r   r   r   Útest_BufferedIOBase_destructor¶  s    z%IOTest.test_BufferedIOBase_destructorc                 C   s   |   | j¡ d S r3   )r$  râ   r8   r   r   r   Útest_TextIOBase_destructor¹  s    z!IOTest.test_TextIOBase_destructorc                 C   sz   |   tjd¡}| d¡ W d   ƒ n1 s.0    Y  |   tjd¡ }|  | ¡ d¡ W d   ƒ n1 sl0    Y  d S )Nr°   r¨   r³   ©r$   r   r’   r6   r›   rQ   r­   r   r   r   Útest_close_flushes¼  s    (zIOTest.test_close_flushesc                    sŠ   t   dtdƒ¡‰ tˆ  ¡ ƒ‰‡ ‡‡fdd„}|ˆ ¡ ƒ |ˆ tjd¡ƒ |ˆ ˆ 	¡ ¡ƒ |ˆ 
ˆ 	¡ ¡ƒ |ˆ ˆ 	¡ ˆ 	¡ ¡ƒ d S )NÚir¥   c                    sF   | . ˆ  |  ˆ ¡ˆ¡ |  ˆ f¡ W d   ƒ n1 s80    Y  d S r3   )r›   r6   rµ   r'   ©r  rG   r1   r   r   ÚcheckÅ  s    z'IOTest.test_array_writes.<locals>.checkr¯   )r   Úranger   ÚtobytesrÍ   r¾   r   r’   rÊ   rM   rÌ   rÏ   )r1   r-  r   r,  r   Útest_array_writesÂ  s    zIOTest.test_array_writesc                 C   s   | j t| jtjddd d S )Nr¯   F©Úclosefd©r   r‹   r$   r   r’   r8   r   r   r   Útest_closefdÏ  s    ÿzIOTest.test_closefdc                 C   s&  |   tjd¡}| d¡ W d   ƒ n1 s.0    Y  |   tjd¡T}| j | ¡ ddd}|  | ¡ d¡ | d¡ | ¡  |  	t
|j¡ W d   ƒ n1 s 0    Y  |   tjd¡X}| j | ¡ ddd}|  | ¡ d d… d	¡ | ¡  |  	t
|jtd
ƒ¡ W d   ƒ n1 s0    Y  d S )Nr¯   úegg
r    Fr1  r   r³   r©   s   eggrD   )r$   r   r’   r6   r<   r›   rQ   rA   rn   r   r‹   rH   rœ   ©r1   r(   Úfiler   r   r   Útest_read_closedÓ  s    (
,zIOTest.test_read_closedc                 C   s   | j t| jtjddd d S )Nr    Fr1  r3  r8   r   r   r   Útest_no_closefd_with_filenameâ  s    z$IOTest.test_no_closefd_with_filenamec                 C   s¢   |   tjd¡}| d¡ W d   ƒ n1 s.0    Y  |   tjd¡H}|  |jjjd¡ | j | ¡ ddd}|  |jjjd¡ W d   ƒ n1 s”0    Y  d S )Nr°   s   egg
r    TFr1  )	r$   r   r’   r6   r›   rŸ   Úrawr2  r<   r6  r   r   r   Útest_closefd_attræ  s    (zIOTest.test_closefd_attrc                 C   s°   t  dtf¡B |  t jd¡}| d¡ ||_t |¡}~t  	¡  W d   ƒ n1 sV0    Y  |  
|ƒ |¡ |  t jd¡ }|  | ¡ d¡ W d   ƒ n1 s¢0    Y  d S )Nr  r°   s   abcxxxr³   )r   r  r  r¾   r’   r6   r(   ÚweakrefÚrefr  ÚassertIsNoner$   r›   rQ   )r1   r(   Úwrr   r   r   Útest_garbage_collectionî  s    

&zIOTest.test_garbage_collectionc                 C   s   d}t j |¡s |  d |¡¡ tjdkr4|  d¡ tjtj	k rJ|  d¡ | j
|ddd}|  t|j¡ W d   ƒ n1 s~0    Y  |  
|d¡}|  t|j¡ W d   ƒ n1 s¸0    Y  |  
|d	¡}|  t|j¡ W d   ƒ n1 sò0    Y  d S )
Nz	/dev/zeroz{0} does not existéÿÿÿz+test can only run in a 32-bit address spacez&test requires at least 2 GiB of memoryr³   r   r±   r    )r¼   ÚpathÚexistsr¬   Úformatrå   Úmaxsizer   Zreal_max_memuseZ_2Gr$   r   r«   rQ   )r1   Zzeror(   r   r   r   Útest_unbounded_fileü  s    


,,zIOTest.test_unbounded_filec                    sh   | j |i |¤Ž‰g ‰ ‡ ‡fdd„}|ˆ_|  tˆj¡ |  ˆj¡ |  ˆ ¡ |  ˆ d ¡ dd„ ˆ_d S )Nc                      s   ˆj gˆ d d …< tƒ ‚d S r3   rk   r   ©rl   r(   r   r   Ú	bad_flush  s    z4IOTest.check_flush_error_on_close.<locals>.bad_flushr   c                   S   s   d S r3   r   r   r   r   r   Ú<lambda>  rN   z3IOTest.check_flush_error_on_close.<locals>.<lambda>)r$   rf   r   rm   rn   Ú
assertTruerl   ÚassertFalse)r1   r}   ÚkwargsrH  r   rG  r   Úcheck_flush_error_on_close  s    
z!IOTest.check_flush_error_on_closec                 C   s.  | j tjddd t tjtjtjB ¡}| j |ddd t tjtjtjB ¡}| j |dddd t |¡ |   tjd¡ t tjtjtjB ¡}|   |d¡ t tjtjtjB ¡}| j |ddd t |¡ |   tjd¡ t tjtjtjB ¡}|   |d¡ t tjtjtjB ¡}| j |ddd t |¡ d S )Nr°   r   r±   F)r²   r2  r1  r¯   )rM  r   r’   r¼   r$   ÚO_WRONLYÚO_CREATrn   )r1   Úfdr   r   r   Útest_flush_error_on_close  s$    

z IOTest.test_flush_error_on_closec                 C   s<   | j tjddd}| ¡  | ¡  | ¡  |  t|j¡ d S )Nr°   r   r±   )r$   r   r’   rn   r   r‹   rf   r­   r   r   r   Útest_multi_close3  s
    zIOTest.test_multi_closec                 C   sž   |   d¡}|  | d¡d¡ |  | d¡d¡ |  | d¡d¡ |  | d¡d ¡ |  | d¡d¡ |  | d¡d¡ |  | d¡d ¡ |  | d¡d¡ d S )	N)ó   abcó   dNó   efgNrW   ó   abó   crT  ó   efó   grN   )r*   r›   rQ   ©r1   Úrawior   r   r   Útest_RawIOBase_read:  s    
zIOTest.test_RawIOBase_readc                 C   s@   |   ¡ |  ¡ |  ¡ |  ¡ |  ¡ f}|D ]}|  t|dƒ¡ q&d S )NÚ__dict__)rú   rã   râ   rß   rÍ   rJ  Úhasattr)r1   ré   r   r   r   r   Útest_types_have_dictG  s    ûzIOTest.test_types_have_dictc                    s˜   |   tjd¡}| d¡ W d   ƒ n1 s.0    Y  t  tjtj¡‰ ‡ fdd„}| j dd|d }|  | ¡ d¡ W d   ƒ n1 sŠ0    Y  d S )Nr¯   r5  c                    s   ˆ S r3   r   )rB  Úflags©rP  r   r   ÚopenerV  s    z"IOTest.test_opener.<locals>.openerúnon-existentr    ©rb  )r$   r   r’   r6   r¼   ÚO_RDONLYr›   rQ   )r1   r(   rb  r   ra  r   Útest_openerR  s    (zIOTest.test_openerc                 C   sV   dd„ }|   t¡}tdd|d W d   ƒ n1 s60    Y  |  t|jƒd¡ d S )Nc                 S   s   dS )Nr‰   r   ©Zfnamer`  r   r   r   Ú	badopener]  s    z4IOTest.test_bad_opener_negative_1.<locals>.badopenerrc  r    rd  zopener returned -1©r   r‹   r$   r›   ÚstrÚ	exception©r1   rh  Úcmr   r   r   Útest_bad_opener_negative_1[  s    ,z!IOTest.test_bad_opener_negative_1c                 C   sV   dd„ }|   t¡}tdd|d W d   ƒ n1 s60    Y  |  t|jƒd¡ d S )Nc                 S   s   dS )Néþÿÿÿr   rg  r   r   r   rh  e  s    z8IOTest.test_bad_opener_other_negative.<locals>.badopenerrc  r    rd  zopener returned -2ri  rl  r   r   r   Útest_bad_opener_other_negativec  s    ,z%IOTest.test_bad_opener_other_negativec              	   C   s˜   |   td¡x}|   td¡L}| j| ¡ dd}|j| ¡ dd | ¡  | ¡  | ¡  W d   ƒ n1 sl0    Y  W d   ƒ n1 sŠ0    Y  d S )Nr³   Fr1  )r$   r%   r¾   r<   r2   r´   rn   )r1   Úf1Úf2Zfileior   r   r   Útest_fileio_closefdk  s    
ÿzIOTest.test_fileio_closefdc              	   C   sj   t  | ¡L |  t¡" | jt jddd W d   ƒ n1 s>0    Y  W d   ƒ n1 s\0    Y  d S )Nr¯   r   r±   ©r   Úcheck_no_resource_warningr   r‹   r$   r’   r8   r   r   r   Útest_nonbuffered_textiow  s    zIOTest.test_nonbuffered_textioc              	   C   sj   t  | ¡L |  t¡" | jt jddd W d   ƒ n1 s>0    Y  W d   ƒ n1 s\0    Y  d S )Nr¯   Úinvalid©Únewlinert  r8   r   r   r   Útest_invalid_newline|  s    zIOTest.test_invalid_newlinec              	   C   s~   G dd„ d| j ƒ}|ƒ }dD ]\}|  |¡> tdƒ}|  t||ƒ|ƒd¡ |  t|ƒd¡ W d   ƒ q1 sn0    Y  qd S )Nc                   @   s   e Zd Zdd„ ZeZdS )z3IOTest.test_buffered_readinto_mixin.<locals>.Streamc                 S   s   dS )Nó   12345r   ©r1   Úsizer   r   r   rQ   „  s    z8IOTest.test_buffered_readinto_mixin.<locals>.Stream.readN)r   r   r   rQ   Úread1r   r   r   r   ÚStreamƒ  s   r  ©rH   r¦   r[   r{  )rÑ   rà   r   r›   Úgetattrr   )r1   r  ÚstreamÚmethodrŸ   r   r   r   Útest_buffered_readinto_mixin  s    z#IOTest.test_buffered_readinto_mixinc              	      s`  ‡ fdd„}|t tjƒƒ |t t tj¡ƒƒ ˆ  tjd¡R}t | ¡ ƒ}ˆ  t¡ ˆ  |d¡ W d   ƒ n1 sv0    Y  W d   ƒ n1 s”0    Y  t d ƒ}ˆ  t¡ ˆ  |d¡ W d   ƒ n1 sÒ0    Y  t t	ƒ}ˆ  t	¡ ˆ  |d¡ W d   ƒ n1 s0    Y  ˆ  
td¡" ˆ  t tjƒd¡ W d   ƒ n1 sR0    Y  d S )Nc                    sv   ˆ   | d¡}| d¡ W d   ƒ n1 s,0    Y  ˆ   | d¡ }ˆ  | ¡ d¡ W d   ƒ n1 sh0    Y  d S )Nr¯   r5  r    )r$   r6   r›   rQ   )rB  r(   r8   r   r   Úcheck_path_succeeds  s    (z7IOTest.test_fspath_support.<locals>.check_path_succeedsr¯   zread/write/append modeZrwxa)r
   r   r’   r¼   Úfsencoder$   r<   r   rž   ÚFloatingPointErrorÚassertRaisesRegexr‹   )r1   r…  r(   Zbad_pathr   r8   r   Útest_fspath_supportŽ  s    H*,zIOTest.test_fspath_supportc                 C   s8   |   d¡}|  | ¡ d¡ |   d¡}|  | ¡ d¡ d S ©N©rS  rT  rU  ó   abcdefg)r*   r›   rQ   ÚreadallrZ  r   r   r   Útest_RawIOBase_readallª  s    

zIOTest.test_RawIOBase_readallc              	   C   sö   G dd„ d| j ƒ}d}d}|D ]Ò}|  |¡´ |\}}}}|tt|ƒƒƒ}	t|f| ƒ}
t|	|ƒ}|  ||
ƒ|¡ |  t|
ƒ|¡ |  |
d |… t|ƒ¡ |f||  }|  |
|d … |¡ |  t|	j	ƒ|| ¡ W d   ƒ q1 sæ0    Y  qd S )Nc                   @   s$   e Zd Zdd„ Zdd„ Zdd„ ZdS )z3IOTest.test_BufferedIOBase_readinto.<locals>.Readerc                 S   s
   || _ d S r3   ©Úavail)r1   r  r   r   r   r2   ¶  s    z<IOTest.test_BufferedIOBase_readinto.<locals>.Reader.__init__c                 S   s"   | j d |… }| j |d … | _ |S r3   r  )r1   r}  Úresultr   r   r   rQ   ¸  s    z8IOTest.test_BufferedIOBase_readinto.<locals>.Reader.readc                 S   s   |   t|dƒ¡S )z$Returns no more than 5 bytes at oncer[   )rQ   Úminr|  r   r   r   r~  ¼  s    z9IOTest.test_BufferedIOBase_readinto.<locals>.Reader.read1N)r   r   r   r2   rQ   r~  r   r   r   r   ÚReaderµ  s   r“  )
)rH   r¥   r[   r[   )rH   r¥   r•   r•   )rH   r[   r•   r[   )rH   r•   é   r•   )rH   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assertSequenceEqualr  )r1   r“  rè   ZUNUSED_BYTEré   rƒ  r  Zrequestr‘  ÚreaderrŸ   Zunusedr   r   r   Útest_BufferedIOBase_readinto²  s    

z#IOTest.test_BufferedIOBase_readintoc                 C   s4   G dd„ d| j ƒ}|ƒ }|  t|j¡ dd„ |_d S )Nc                   @   s   e Zd Zdd„ Zdd„ ZdS )z#IOTest.test_close_assert.<locals>.Rc                 S   s   d S r3   r   )r1   ÚnameÚvaluer   r   r   Ú__setattr__Ý  s    z/IOTest.test_close_assert.<locals>.R.__setattr__c                 S   s
   t ƒ ‚d S r3   ©rm   r8   r   r   r   rf   ß  s    z)IOTest.test_close_assert.<locals>.R.flushN)r   r   r   rš  rf   r   r   r   r   rù   Ü  s   rù   c                 S   s   d S r3   r   r8   r   r   r   rI  æ  rN   z*IOTest.test_close_assert.<locals>.<lambda>)rú   r   rm   rn   rf   )r1   rù   r(   r   r   r   Útest_close_assertÛ  s    zIOTest.test_close_assertN)F)3r   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*  r0  r4  r8  r9  r;  r@  rF  rM  rQ  rR  r\  r_  rf  rn  rp  rs  rv  rz  r„  r‰  rŽ  r—  rœ  r   r   r   r   r   4  s`   
!h	
	)r   c                   @   s   e Zd Zdd„ ZdS )ÚCIOTestc                 C   sL   G dd„ d| j ƒ}|ƒ  |ƒ }||_t |¡}~~t ¡  |  |ƒ |¡ d S )Nc                   @   s   e Zd Zdd„ ZdS )z*CIOTest.test_IOBase_finalize.<locals>.MyIOc                 S   s   d S r3   r   r8   r   r   r   rn   ð  s    z0CIOTest.test_IOBase_finalize.<locals>.MyIO.closeN©r   r   r   rn   r   r   r   r   r"  ï  s   r"  )rú   r   r<  r=  r   r  r>  )r1   r"  r   r?  r   r   r   Útest_IOBase_finalizeë  s    
zCIOTest.test_IOBase_finalizeN)r   r   r   rŸ  r   r   r   r   r  é  s   r  c                   @   s   e Zd ZdS )ÚPyIOTestNr   r   r   r   r   r   ý  s   r   c                   @   s   e Zd Zdd„ Zdd„ ZdS )ÚAPIMismatchTestc                 C   s*   t jtjtjdd}| j|tƒ dd dS )z:Test that pyio RawIOBase class has all c RawIOBase methods)Ú__weakref__)rë   z6Python RawIOBase does not have all C RawIOBase methods©ÚmsgN)r   Údetect_api_mismatchr   rã   r   r›   rc   ©r1   Zmismatchr   r   r   Útest_RawIOBase_io_in_pyio_match  s    ÿz/APIMismatchTest.test_RawIOBase_io_in_pyio_matchc                 C   s&   t  tjtj¡}| j|tƒ dd dS )z:Test that c RawIOBase class has all pyio RawIOBase methodsz6C RawIOBase does not have all Python RawIOBase methodsr£  N)r   r¥  r   rã   r   r›   rc   r¦  r   r   r   Útest_RawIOBase_pyio_in_io_match
  s    z/APIMismatchTest.test_RawIOBase_pyio_in_io_matchN)r   r   r   r§  r¨  r   r   r   r   r¡    s   r¡  c                   @   s|   e Zd Zdd„ Zdd„ Zdd„ Zdd„ Zd	d
„ Zdd„ Zdd„ Z	dd„ Z
dd„ Zdd„ Zdd„ Zdd„ Zdd„ Zdd„ ZdS )ÚCommonBufferedTestsc                 C   s<   |   ¡ }|  |¡}|  | ¡ |¡ |  t|j¡ t|ƒ d S r3   )rM   ÚtpÚassertIsÚdetachr   r‹   Úrepr©r1   r:  rF   r   r   r   Útest_detach  s
    
zCommonBufferedTests.test_detachc                 C   s&   |   ¡ }|  |¡}|  d| ¡ ¡ d S r:   )rM   rª  r›   r<   ©r1   r[  Úbufior   r   r   Útest_fileno  s    
zCommonBufferedTests.test_filenoc                 C   s:   |   ¡ }|  |¡}|  t|jdd¡ |  t|jdd¡ d S )Nr   r‰   r–   )rM   rª  r   r‹   rA   r°  r   r   r   Útest_invalid_args!  s    
z%CommonBufferedTests.test_invalid_argsc                    sL   | j }g ‰ G ‡ fdd„d|ƒ}|  ¡ }||ƒ}~t ¡  |  ˆ g d¢¡ d S )Nc                       s:   e Zd Z‡ ‡fdd„Z‡ ‡fdd„Z‡ ‡fdd„Z‡  ZS )zBCommonBufferedTests.test_override_destructor.<locals>.MyBufferedIOc                    s4   ˆ  d¡ ztƒ j}W n ty(   Y n0 |ƒ  d S rj   r  r­   r  r   r   r  ,  s    
zJCommonBufferedTests.test_override_destructor.<locals>.MyBufferedIO.__del__c                    s   ˆ  d¡ tƒ  ¡  d S rV   r  r8   r  r   r   rn   4  s    
zHCommonBufferedTests.test_override_destructor.<locals>.MyBufferedIO.closec                    s   ˆ  d¡ tƒ  ¡  d S r  r  r8   r  r   r   rf   7  s    
zHCommonBufferedTests.test_override_destructor.<locals>.MyBufferedIO.flushr  r   r  rY   r   ÚMyBufferedIO+  s   r´  r  )rª  rM   r   r  r›   )r1   rª  r´  r[  r±  r   r  r   Útest_override_destructor(  s    z,CommonBufferedTests.test_override_destructorc                    s4   |   ¡ }|  |¡‰ ‡ fdd„}|ƒ  |  t|¡ d S )Nc                      s(   ˆ  W d   ƒ n1 s0    Y  d S r3   r   r   ©r±  r   r   Ú_withD  s    z7CommonBufferedTests.test_context_manager.<locals>._with)rM   rª  r   r‹   )r1   r[  r·  r   r¶  r   Útest_context_manager@  s
    
z(CommonBufferedTests.test_context_managerc              	   C   s–   |   ¡ }t ¡ r}|  t¡ |  |¡j W d   ƒ n1 s>0    Y  tsZ|  |j	¡ n|j	d urt|  
|j	jt¡ W d   ƒ n1 sˆ0    Y  d S r3   )ri   r   Úcatch_unraisable_exceptionr   r  rª  ÚxyzzyÚIOBASE_EMITS_UNRAISABLEr>  Ú
unraisabler›   Úexc_typerm   ©r1   r[  rm  r   r   r   Útest_error_through_destructorL  s    
*
z1CommonBufferedTests.test_error_through_destructorc                 C   sr   |   ¡ }|  |¡}d| jj| jjf }|  t|ƒd| ¡ d|_|  t|ƒd| ¡ d|_|  t|ƒd| ¡ d S )Nz	(%s\.)?%sz<%s>Údummyz<%s name='dummy'>ó   dummyz<%s name=b'dummy'>)rM   rª  r   r   ÚassertRegexr­  r˜  )r1   r:  r   Zclsnamer   r   r   Ú	test_reprY  s    
zCommonBufferedTests.test_reprc              	   C   sd   |   ¡ }|  |¡}t |d|¡0 zt|ƒ W n ty@   Y n0 W d   ƒ n1 sV0    Y  d S ©Nr˜  )rM   rª  r   Ú	swap_attrr­  ÚRuntimeError©r1   r:  r   r   r   r   Útest_recursive_reprc  s    
z'CommonBufferedTests.test_recursive_reprc                    s†   |   ¡ ‰g ‰‡ ‡‡fdd„}|ˆ_|  ˆ¡‰ |  tˆ j¡ |  ˆ j¡ |  ˆj¡ |  ˆ¡ |  ˆd ¡ |  ˆd ¡ dd„ ˆ_d S )Nc                      s   ˆ j ˆj gˆd d …< tƒ ‚d S r3   rk   r   ©r   rl   r:  r   r   rH  r  s    z@CommonBufferedTests.test_flush_error_on_close.<locals>.bad_flushr   rD   c                   S   s   d S r3   r   r   r   r   r   rI  }  rN   z?CommonBufferedTests.test_flush_error_on_close.<locals>.<lambda>)	rM   rf   rª  r   rm   rn   rJ  rl   rK  ©r1   rH  r   rÉ  r   rQ  m  s    

z-CommonBufferedTests.test_flush_error_on_closec                 C   s¶   |   ¡ }dd„ }dd„ }||_|  |¡}||_|  t¡}| ¡  W d   ƒ n1 sV0    Y  |  |jjd¡ |  	|jj
t¡ |  |jj
jd¡ |  |j¡ dd„ |_d	d„ |_d S )
Nc                   S   s   t dƒ‚d S ©Nrf   r›  r   r   r   r   rH    s    z@CommonBufferedTests.test_close_error_on_close.<locals>.bad_flushc                   S   s   t dƒ‚d S ©Nrn   r›  r   r   r   r   Ú	bad_closeƒ  s    z@CommonBufferedTests.test_close_error_on_close.<locals>.bad_close©rn   ©rf   c                   S   s   d S r3   r   r   r   r   r   rI    rN   z?CommonBufferedTests.test_close_error_on_close.<locals>.<lambda>c                   S   s   d S r3   r   r   r   r   r   rI  ‘  rN   )rM   rn   rª  rf   r   rm   r›   rk  r}   ÚassertIsInstanceÚ__context__rK  rl   ©r1   r:  rH  rÍ  r   Úerrr   r   r   Útest_close_error_on_close  s    
&
z-CommonBufferedTests.test_close_error_on_closec                 C   sº   |   ¡ }dd„ }dd„ }||_|  |¡}||_|  t¡}| ¡  W d   ƒ n1 sV0    Y  |  dt|jƒ¡ |  	|jj
t¡ |  dt|jj
ƒ¡ |  |j¡ dd„ |_d	d„ |_d S )
Nc                   S   s   t ‚d S r3   ©Únon_existing_flushr   r   r   r   rH  –  s    zNCommonBufferedTests.test_nonnormalized_close_error_on_close.<locals>.bad_flushc                   S   s   t ‚d S r3   ©Únon_existing_closer   r   r   r   rÍ  ˜  s    zNCommonBufferedTests.test_nonnormalized_close_error_on_close.<locals>.bad_closerØ  rÖ  c                   S   s   d S r3   r   r   r   r   r   rI  ¥  rN   zMCommonBufferedTests.test_nonnormalized_close_error_on_close.<locals>.<lambda>c                   S   s   d S r3   r   r   r   r   r   rI  ¦  rN   )rM   rn   rª  rf   r   Ú	NameErrorÚassertInrj  rk  rÐ  rÑ  rK  rl   rÒ  r   r   r   Ú'test_nonnormalized_close_error_on_close“  s    
&
z;CommonBufferedTests.test_nonnormalized_close_error_on_closec                 C   s<   |   ¡ }|  |¡}| ¡  | ¡  | ¡  |  t|j¡ d S r3   )rM   rª  rn   r   r‹   rf   rÇ  r   r   r   rR  ¨  s    
z$CommonBufferedTests.test_multi_closec                 C   s6   |   |  d¡¡}|  | j|j¡ |  | j|jd¡ d S )Nó
   AAAAAAAAAAr   )rª  rw   r   r{   rB   rA   ©r1   r±  r   r   r   Útest_unseekable°  s    z#CommonBufferedTests.test_unseekablec                 C   sN   |   ¡ }|  |¡}|   ¡ }|  t¡ ||_W d   ƒ n1 s@0    Y  d S r3   )rM   rª  r   r  r:  )r1   r:  rF   Úxr   r   r   Útest_readonly_attributesµ  s
    
z,CommonBufferedTests.test_readonly_attributesN)r   r   r   r¯  r²  r³  rµ  r¸  r¿  rÃ  rÈ  rQ  rÔ  rÛ  rR  rÞ  rà  r   r   r   r   r©    s   

r©  c                   @   s(   e Zd Zejdd„ ƒZejdd„ ƒZdS )Ú
SizeofTestc                 C   s\   d}d}|   ¡ }| j||d}t |¡| }|   ¡ }| j||d}|  t |¡|| ¡ d S )Né   é    ©Úbuffer_size)rM   rª  rå   Ú	getsizeofr›   )r1   Zbufsize1Zbufsize2r[  r±  r}  r   r   r   Útest_sizeof¿  s    zSizeofTest.test_sizeofc                 C   sF   d}|   ¡ }| j||d}t |¡| }| ¡  |  t |¡|¡ d S )Nrâ  rä  )rM   rª  rå   ræ  rn   r›   )r1   r  r[  r±  r}  r   r   r   Útest_buffer_freeingÊ  s    zSizeofTest.test_buffer_freeingN)r   r   r   r   Úcpython_onlyrç  rè  r   r   r   r   rá  ½  s   

rá  c                   @   sº   e Zd ZdZdd„ Zdd„ Zdd„ Zdd	„ Zd
d„ Zdd„ Z	dd„ Z
dd„ Zdd„ Zdd„ Zdd„ Zdd„ Zdd„ Zdd„ Ze d¡dd „ ƒZd!d"„ Zd#d$„ Zd%d&„ Zd'd(„ Zd)d*„ Zd+S ),ÚBufferedReaderTestr³   c                 C   s²   |   dg¡}|  |¡}| |¡ |j|dd |j|dd |  d| ¡ ¡ | jt|j|dd | jt|j|dd | jt|j|dd |   dg¡}| |¡ |  d| ¡ ¡ d S )NrS  é   rä  é   r   éðÿÿÿr‰   )rM   rª  r2   r›   rQ   r   r‹   r°  r   r   r   Útest_constructorÖ  s    


z#BufferedReaderTest.test_constructorc                 C   sX   | j  | j ¡}~| j  | j ¡}|  ttfd|jd¡ | |  ¡ ¡ |  | d¡d¡ d S ©Núuninitialized|has no attributer   rN   )	rª  Ú__new__rˆ  r‹   r  rQ   r2   rM   r›   rÝ  r   r   r   Útest_uninitializedä  s    
þz%BufferedReaderTest.test_uninitializedc                 C   sD   dD ]*}|   d¡}|  |¡}|  d| |¡¡ q|  t|jd¡ d S )N)Nr”  r‹  rŒ  ro  )rM   rª  r›   rQ   r   r‹   )r1   Úargr[  r±  r   r   r   Ú	test_readî  s
    

zBufferedReaderTest.test_readc                 C   sÜ   |   d¡}|  |¡}|  d| d¡¡ |  d| d¡¡ |  |jd¡ |  d| d¡¡ |  d| d¡¡ |  |jd¡ |  d	| d¡¡ |  |jd
¡ |  d| d¡¡ |  |jd¡ |  d| d¡¡ |  |jd¡ d S )Nr‹  ó   arD   ó   brN   r   rW  rÀ   rT  rW   rU  r©   r÷   ©rM   rª  r›   rQ   r~  r/   r°  r   r   r   Ú
test_read1ö  s    

zBufferedReaderTest.test_read1c                 C   sˆ   |   d¡}|  |¡}|  d| d¡¡ |  d| ¡ ¡ |  d| ¡ ¡ |  d| d¡¡ |  |jd¡ |  d	| ¡ ¡ |  |jd
¡ d S )Nr‹  rõ  rD   s   bcrT  rU  r‰   r©   rN   r÷   r÷  r°  r   r   r   Útest_read1_arbitrary  s    

z'BufferedReaderTest.test_read1_arbitraryc                 C   s  |   d¡}|  |¡}tdƒ}|  | |¡d¡ |  |d¡ |  | |¡d¡ |  |d¡ |  | |¡d¡ |  |d¡ |  | |¡d¡ |  |d¡ |  | |¡d¡ |  |d¡ |   d	¡}|  |¡}|  | |¡d¡ |  |d¡ |  | |¡d¡ |  |d
¡ d S )Nr‹  rW   rV  ó   cdrX  rD   s   gfr   )rS  Ns   cb)rM   rª  rœ   r›   rH   )r1   r[  r±  r   r   r   r   Útest_readinto  s&    



z BufferedReaderTest.test_readintoc                 C   s4  d}|   d¡}| j||d}tdƒ}|  | d¡d¡ |  |jd¡ |  | |¡d¡ |  |d¡ |  |jd¡ |  | |¡d¡ |  |d d… d	¡ |  |jd¡ |  | |¡d¡ |  |d
¡ |  |jd¡ td| ƒ}|  | d¡d¡ |  |jd¡ |  | |¡d¡ |  |d d… d¡ |  |jd¡ d S )Nr¥   )rS  ó   deó   fghs   jklrä  rW   r©   rS  rD   rV  rW  rü  rý  r•   s   fghjklr÷   )rM   rª  rœ   r›   Úpeekr/   r¦   )r1   rå  r[  r±  r   r   r   r   Útest_readinto1&  s*    
z!BufferedReaderTest.test_readinto1c                 C   sª   d}d}|   |f¡}| j||d}t dd¡}| |¡}|  |t|ƒ¡ t|ƒ d¡}|  |t|ƒ¡ |  	|d |… |d |… ¡ |  	||d … dt||d … ƒ ¡ d S ©Né<   s   aaaaaaaaaaaaaaaaaaaaaaaaaarä  r+  s    xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxr   r¤   )
rM   rª  r   rH   r  r   r   r   Ú
assertLessr›   ©r1   rå  r   r[  r±  r   rG   Zbmr   r   r   Útest_readinto_array=  s    
z&BufferedReaderTest.test_readinto_arrayc                 C   sª   d}d}|   |f¡}| j||d}t dd¡}| |¡}|  |t|ƒ¡ t|ƒ d¡}|  |t|ƒ¡ |  	|d |… |d |… ¡ |  	||d … dt||d … ƒ ¡ d S r   )
rM   rª  r   r¦   r  r   r   r   r  r›   r  r   r   r   Útest_readinto1_arrayR  s    
z'BufferedReaderTest.test_readinto1_arrayc                    sV   ‡ fdd„}ˆ   |ƒ  ¡ g d¢¡ ˆ   |ƒ  d¡ddg¡ ˆ   |ƒ  d ¡g d¢¡ d S )Nc                     s   ˆ   d¡} ˆ  | ¡S )N©rô   r¡   rX  )rM   rª  )r[  r8   r   r   r±  h  s    
z0BufferedReaderTest.test_readlines.<locals>.bufior  r[   rô   r¡   ©r›   r   rÝ  r   r8   r   Útest_readlinesg  s    z!BufferedReaderTest.test_readlinesc              	   C   s¬   d}t |ƒ}dg d¢|dggdg d¢|ggdg d¢g d¢gg}|D ]d\}}}|  |¡}| j||d	}d}	|D ]*}
|  | |
¡||	|	|
 … ¡ |	|
7 }	ql|  |j|¡ qBd S )
Nó	   abcdefghirÀ   )r©   rD   r÷   é   r   )r©   r©   r©   r÷   )rD   rW   r÷   rW   )r÷   r÷   rD   rä  )r   rq   rª  r›   rQ   rr   )r1   r   Zdlenrè   r  Zbuf_read_sizesZraw_read_sizesr[  r±  r   Únbytesr   r   r   Útest_bufferingo  s    ý

z!BufferedReaderTest.test_bufferingc                 C   s¤   |   d¡}|  |¡}|  d| d¡¡ |  d| d¡¡ |  d| ¡ ¡ |  d| d¡¡ |  | ¡ ¡ |  d| ¡ ¡ |   d¡}|  d	| ¡ ¡ |  | ¡ ¡ d S )
N)rS  rT  NrU  NNNó   abcdr•   ó   erD   s   fgrN   )rõ  NNrõ  )rM   rª  r›   rQ   rþ  r>  r  r°  r   r   r   Útest_read_non_blockingƒ  s    


z)BufferedReaderTest.test_read_non_blockingc                 C   s*   |   d¡}|  |¡}|  d| d¡¡ d S )Nr‹  rŒ  i(#  ©rM   rª  r›   rQ   r°  r   r   r   Útest_read_past_eof’  s    

z%BufferedReaderTest.test_read_past_eofc                 C   s(   |   d¡}|  |¡}|  d| ¡ ¡ d S rŠ  r  r°  r   r   r   Útest_read_all˜  s    

z BufferedReaderTest.test_read_allÚcpuc              	      sv  z`d}t tdƒƒ| }t |¡ tt|ƒƒ}|  tjd¡‰ˆ 	|¡ W d   ƒ n1 s\0    Y  | jtj| j
ddÈ}|  |d¡‰ g ‰g ‰‡ ‡‡fdd„‰‡fd	d
„tdƒD ƒ}t |¡ t d¡ W d   ƒ n1 sà0    Y  |  ˆdˆ ¡ d ˆ¡}tdƒD ]&}tt|gƒƒ}|  | |¡|¡ qW d   ƒ n1 sJ0    Y  W t tj¡ nt tj¡ 0 d S )Néè  é   r°   r   r±   r
  c               
      sh   z2t ddgƒD ] } ˆ  | ¡}|s$ q0ˆ |¡ qW n0 tyb } zˆ |¡ ‚ W Y d }~n
d }~0 0 d S )NrD   é   )r   rQ   r4   Ú	Exception)rG   r…   Úe)r±  ÚerrorsÚresultsr   r   r(   ®  s    

z*BufferedReaderTest.test_threads.<locals>.fc                    s   g | ]}t jˆ d ‘qS ©©rÂ   ©r`   rÄ   ©Ú.0rß  r'   r   r   Ú
<listcomp>º  rN   z3BufferedReaderTest.test_threads.<locals>.<listcomp>r¢   ç{®Gáz”?ú(the following exceptions were caught: %rrN   )r,   r.  ÚrandomÚshuffler   rœ   r$   r   r’   r6   Ú	read_moderª  Ústart_threadsrd   re   rK  r„   r›   r   r‘   )r1   ÚNÚlr…   r:  Úthreadsr+  Úcr   )r±  r  r(   r  r   Útest_threadsž  s.    
((ÿ
8zBufferedReaderTest.test_threadsc                 C   sb   |   |  d¡¡}|  | j|j¡ |  | j|jd¡ | d¡ |  | j|jd¡ |  | j|j¡ d S )NrÜ  r   rD   )rª  rw   r   r{   rB   rA   rQ   rÝ  r   r   r   rÞ  Æ  s    
z"BufferedReaderTest.test_unseekablec                 C   s@   |   d¡}|  |¡}|  t|jd¡ |  t|j¡ dd„ |_d S )Nr‹  r   c                   S   s   d S r3   r   r   r   r   r   rI  Õ  rN   z7BufferedReaderTest.test_misbehaved_io.<locals>.<lambda>)rU   rª  r   rm   rA   rB   rn   r°  r   r   r   Útest_misbehaved_ioÎ  s
    

z%BufferedReaderTest.test_misbehaved_ioc              	   C   sÆ   d}d|d ||d |d fD ]¢}|   d| g¡}|  ||¡}|  | |¡d| ¡ |  |jdd ||j¡¡ |   d|d  dg¡}|  ||¡}|  | |¡d| ¡ |  |jdd ||j¡¡ qd S )Nrì  rW   rD   r¤   r   zfailed for {}: {} != 0)rM   rª  r›   rQ   r0   rD  )r1   r  rG   r[  r±  r   r   r   Útest_no_extraneous_read×  s    
ÿ
ÿz*BufferedReaderTest.test_no_extraneous_readc                 C   sD   t  t  d¡¡}| d¡ | ¡  |  t|j¡ |  t|jd¡ d S )Nó   12rD   )	r   rÈ   rÍ   rQ   rn   r   r‹   rþ  r~  r5   r   r   r   Útest_read_on_closedë  s
    
z&BufferedReaderTest.test_read_on_closedc                 C   sH   |   d¡}|  |¡}|  | ¡ ¡ |  | j|j¡ |  | j|jd¡ d S )NrS  r   )rq   rª  rK  r9   r   r{   rI   r°  r   r   r   Útest_truncate_on_read_onlyó  s
    

z-BufferedReaderTest.test_truncate_on_read_onlyN)r   r   r   r%  rî  rò  rô  rø  rù  rû  rÿ  r  r  r  r  r  r  r  r   Úrequires_resourcer+  rÞ  r,  r-  r/  r0  r   r   r   r   rê  Ó  s,   

'	rê  c                   @   sH   e Zd ZejZedddddd„ ƒZdd„ Zdd	„ Z	d
d„ Z
dd„ ZdS )ÚCBufferedReaderTestTúLsanitizer defaults to crashing instead of returning NULL for malloc failure.©ZmemoryÚaddressÚreasonc                 C   sD   t  | ¡ tjdkr@|  ¡ }|  |¡}|  ttt	f|j
|tj¡ d S ©NrA  )rê  rî  rå   rE  rM   rª  r   r«   ÚMemoryErrorr‹   r2   r°  r   r   r   rî  þ  s    



ÿz$CBufferedReaderTest.test_constructorc                 C   s€   |   dg¡}|  |¡}| jt|j|dd |  t|j¡ | jt|j|dd |  t|j¡ | jt|j|dd |  t|j¡ d S )NrS  r   rä  rí  r‰   )rM   rª  r   r‹   r2   rQ   r°  r   r   r   Útest_initialization
  s    
z'CBufferedReaderTest.test_initializationc                 C   s(   |   d¡}|  |¡}|  t|jd¡ d S )Nr‹  r¥   )rU   rª  r   rm   rQ   r°  r   r   r   Útest_misbehaved_io_read  s    

z+CBufferedReaderTest.test_misbehaved_io_readc                 C   s‚   |   tjtj¡ t dtf¡B |  tjd¡}|  |¡}||_t	 
|¡}~t ¡  W d   ƒ n1 sf0    Y  |  |ƒ |¡ d S )Nr  r  )rÃ   r   r‘   r’   r  r  r¾   rª  r(   r<  r=  r  r>  ©r1   r[  r(   r?  r   r   r   r@    s    

&z+CBufferedReaderTest.test_garbage_collectionc                 C   sD   |   td¡$ |  t ¡ ddd¡ W d   ƒ n1 s60    Y  d S )NrÈ   rë  ©rˆ  rž   rª  r   rÍ   r8   r   r   r   Útest_args_error(  s    z#CBufferedReaderTest.test_args_errorN)r   r   r   r   rÈ   rª  r   rî  r9  r:  r@  r=  r   r   r   r   r2  û  s   


r2  c                   @   s   e Zd ZejZdS )ÚPyBufferedReaderTestN)r   r   r   r   rÈ   rª  r   r   r   r   r>  .  s   r>  c                   @   sÚ   e Zd ZdZdd„ Zdd„ Zdd„ Zdd	„ Zd
d„ Zdd„ Z	dd„ Z
dd„ Zdd„ Zdd„ Zd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e d(¡d)d*„ ƒZd+d,„ Zd-d.„ Zd/d0„ Zd1d2„ Zd3S )4ÚBufferedWriterTestr°   c                 C   sÊ   |   ¡ }|  |¡}| |¡ |j|dd |j|dd |  d| d¡¡ | ¡  | jt|j|dd | jt|j|dd | jt|j|dd | |¡ |  d| d	¡¡ | ¡  |  d
 |j	¡d¡ d S )Nrë  rä  rì  r©   rS  r   rí  r‰   ó   ghirN   s   abcghi)
rM   rª  r2   r›   r6   rf   r   r‹   r„   r.   r°  r   r   r   rî  5  s    


z#BufferedWriterTest.test_constructorc                 C   sX   | j  | j ¡}~| j  | j ¡}|  ttfd|jd¡ | |  ¡ ¡ |  | d¡d¡ d S )Nrð  rN   r   )	rª  rñ  rˆ  r‹   r  r6   r2   rM   r›   rÝ  r   r   r   rò  E  s    
þz%BufferedWriterTest.test_uninitializedc                 C   sD   |   ¡ }|  |¡}| d¡ |  |j¡ | ¡  |  |jdg¡ d S )Ns   howdy!)rM   rª  r6   rK  r.   r¬  r›   r®  r   r   r   Útest_detach_flushO  s    

z$BufferedWriterTest.test_detach_flushc                 C   sh   |   ¡ }|  |d¡}| d¡ |  |j¡ tdƒ}| |¡ d|d d …< | ¡  |  d |j¡d¡ d S )Nr
  rS  ó   defó   ***rN   ó   abcdef)	rM   rª  r6   rK  r.   rœ   rf   r›   r„   )r1   Úwriterr±  rŸ   r   r   r   Ú
test_writeW  s    

zBufferedWriterTest.test_writec                 C   sn   |   ¡ }|  |d¡}d}tdt|ƒdƒD ]}| |||d … ¡ q(d |j¡}|  | |d d… ¡|¡ d S )Nr
  s   abcdefghijklmnopr   r©   rN   iøÿÿÿ)	rM   rª  r.  r   r6   r„   r.   rJ  rç   )r1   rE  r±  ÚcontentsrG   Zflushedr   r   r   Útest_write_overflowc  s    z&BufferedWriterTest.test_write_overflowc           	      C   s¨   t tdƒƒd }d}|  ¡ }|  |d¡}dd„ }|ƒ }|t|ƒk rˆtt|ƒt|ƒ| ƒ}|  | |||| … ¡|¡ ||ƒ ||7 }q6| 	¡  |  |d 
|j¡¡ d S )Nr  r  r   r˜   c                  s   s&   t dƒD ]} tdƒD ]
}| V  qqd S )NrD   é   )r   r.  )r}  r+  r   r   r   Ú	gen_sizesu  s    z2BufferedWriterTest.check_writes.<locals>.gen_sizesrN   )r   r.  rM   rª  r   r’  rü   r›   r6   rf   r„   r.   )	r1   Zintermediate_funcrG  rG   rE  r±  rJ  Úsizesr}  r   r   r   Úcheck_writesn  s    
zBufferedWriterTest.check_writesc                 C   s   |   dd„ ¡ d S )Nc                 S   s   d S r3   r   r¶  r   r   r   rI  ƒ  rN   z0BufferedWriterTest.test_writes.<locals>.<lambda>©rL  r8   r   r   r   Útest_writes‚  s    zBufferedWriterTest.test_writesc                 C   s   |   dd„ ¡ d S )Nc                 S   s   |   ¡ S r3   rÏ  r¶  r   r   r   rI  †  rN   z<BufferedWriterTest.test_writes_and_flushes.<locals>.<lambda>rM  r8   r   r   r   Útest_writes_and_flushes…  s    z*BufferedWriterTest.test_writes_and_flushesc                 C   s(   dd„ }|   |¡ dd„ }|   |¡ d S )Nc                 S   s8   |   ¡ }|  |d d¡ |  |d d¡ |  |d¡ d S rC   )rB   rA   ©r±  r   r   r   r   Ú_seekabs‰  s    z:BufferedWriterTest.test_writes_and_seeks.<locals>._seekabsc                 S   s4   |   dd¡}|   dd¡ |   dd¡ |   |d¡ d S )Nr   rD   r‰   )rA   rP  r   r   r   Ú_seekrel  s    z:BufferedWriterTest.test_writes_and_seeks.<locals>._seekrelrM  )r1   rQ  rR  r   r   r   Útest_writes_and_seeksˆ  s    
z(BufferedWriterTest.test_writes_and_seeksc                 C   s   |   dd„ ¡ d S )Nc                 S   s   |   |  ¡ ¡S r3   )rI   rB   r¶  r   r   r   rI  —  rN   z>BufferedWriterTest.test_writes_and_truncates.<locals>.<lambda>rM  r8   r   r   r   Útest_writes_and_truncates–  s    z,BufferedWriterTest.test_writes_and_truncatesc              
   C   sð   |   ¡ }|  |d¡}|  | d¡d¡ |  | d¡d¡ | d¡ |  | d¡d¡ | d¡ z| d	¡ W n, | jy˜ } z|j}W Y d }~nd }~0 0 |  d
¡ |  |d¡ |  | ¡ d¡ |  | d¡d¡ | ¡ }|  	| 
d¡|¡ d S )Nr
  r  r÷   s   efghir[   ó   ks   jklmnó   0s   opqrwxyz0123456789z'BlockingIOError should have been raisedrì  s   abcdefghijklmnopqrwxyzs	   ABCDEFGHIr–   s	   01234567A)r‚   rª  r›   r6   rˆ   r   Úcharacters_writtenrä   r†   rJ  rç   )r1   r:  r±  r  Úwrittenr…   r   r   r   Útest_write_non_blocking™  s&    



ÿz*BufferedWriterTest.test_write_non_blockingc                 C   sž   t  ¡ }|  |d¡}|  | d¡d¡ |  | ¡ d¡ | dd¡ |  | d¡d¡ | dd¡ |  | ¡ d¡ |  | d¡d¡ | ¡  |  | ¡ d	¡ d S )
Nr÷   rD  r•   r   s   XYrW   s   XYcdefs   123456s   XYcdef123456)	r   rÍ   rª  r›   r6   rB   rA   r  rf   ©r1   r:  r±  r   r   r   Útest_write_and_rewind´  s    z(BufferedWriterTest.test_write_and_rewindc                 C   s<   |   ¡ }|  |d¡}| d¡ | ¡  |  d|jd ¡ d S ©Nr
  rS  r   )rM   rª  r6   rf   r›   r.   ©r1   rE  r±  r   r   r   Ú
test_flushÁ  s
    
zBufferedWriterTest.test_flushc                 C   sF   g d¢}|   ¡ }|  |d¡}| |¡ | ¡  |  d |j¡d¡ d S ©N)rV  rú  rX  r
  rN   rD  )rM   rª  rµ   rf   r›   r„   r.   ©r1   r(  rE  r±  r   r   r   Útest_writelinesÈ  s    
z"BufferedWriterTest.test_writelinesc                 C   sJ   t g d¢ƒ}|  ¡ }|  |d¡}| |¡ | ¡  |  d |j¡d¡ d S r_  )r   rM   rª  rµ   rf   r›   r„   r.   r`  r   r   r   Útest_writelines_userlistÐ  s    
z+BufferedWriterTest.test_writelines_userlistc                 C   sL   |   ¡ }|  |d¡}|  t|jg d¢¡ |  t|jd ¡ |  t|jd¡ d S )Nr
  r  Úabc)rM   rª  r   rž   rµ   r]  r   r   r   Útest_writelines_errorØ  s
    z(BufferedWriterTest.test_writelines_errorc                 C   s>   |   ¡ }|  |d¡}| d¡ ~t ¡  |  d|jd ¡ d S r\  )rM   rª  r6   r   r  r›   r.   r]  r   r   r   r  ß  s    
z"BufferedWriterTest.test_destructorc                 C   sÂ   |   tjtj¡ | jtj| jddH}|  |d¡}| d¡ |  | 	d¡d¡ |  | 
¡ d¡ W d   ƒ n1 sr0    Y  | jtjddd }|  | ¡ d¡ W d   ƒ n1 s´0    Y  d S )	Nr   r±   r
  rD  r©   r•   r³   rS  )rÃ   r   r‘   r’   r$   Ú
write_moderª  r6   r›   rI   rB   rQ   )r1   r:  r±  r(   r   r   r   Útest_truncateç  s    
.z BufferedWriterTest.test_truncatec              	   C   sÌ   |   tjtj¡ |  tjd¡}| dd ¡ W d   ƒ n1 sB0    Y  g d¢}|D ]n}| jtjd|dH}| d|d  ¡ | d¡ | ¡  |  | 	¡ |d ¡ W d   ƒ qX1 s¼0    Y  qXd S )	Nr°   ó    i'  )rã  râ  éÈ   zr+br±   rD   rW   )
rÃ   r   r‘   r’   r$   r6   rQ   rI   r›   rB   )r1   r(   Zbuffer_sizesrå  r   r   r   Útest_truncate_after_writeò  s    ,
z,BufferedWriterTest.test_truncate_after_writer  c           
   	      sž  zˆd}t tdƒƒ| }tddgƒ}d}tƒ ‰|t|ƒk rbt|ƒ}ˆ |||| … ¡ ||7 }q.~| jtj	| j
dd’}|  |d¡‰ g ‰‡ ‡‡fdd	„‰‡fd
d„tdƒD ƒ}t |¡ t d¡ W d   ƒ n1 sÚ0    Y  |  ˆdˆ ¡ ˆ  ¡  W d   ƒ n1 s0    Y  |  tj	d¡‰ˆ ¡ }W d   ƒ n1 sJ0    Y  tdƒD ]}	|  | t |	gƒ¡|¡ q\W t tj	¡ nt tj	¡ 0 d S )Nr  r  rD   r  r   r±   r
  c               
      sj   z4zˆ  ¡ } W n ty$   Y W d S 0 ˆ  | ¡ qW n0 tyd } zˆ |¡ ‚ W Y d }~n
d }~0 0 d S r3   )ÚpopleftrE   r6   r  r4   )r…   r  )r±  r  Úqueuer   r   r(     s    

z*BufferedWriterTest.test_threads.<locals>.fc                    s   g | ]}t jˆ d ‘qS r  r  r  r'   r   r   r   &  rN   z3BufferedWriterTest.test_threads.<locals>.<listcomp>r¢   r!  r"  r³   )r   r.  r   r   r   rü   r4   r$   r   r’   re  rª  r&  rd   re   rK  rn   rQ   r›   r   r‘   )
r1   r'  rG  rK  rG   r}  r:  r)  r…   r+  r   )r±  r  r(   rk  r   r+    s6    
(ÿ((zBufferedWriterTest.test_threadsc                 C   sP   |   ¡ }|  |d¡}|  t|jd¡ |  t|j¡ |  t|jd¡ dd„ |_d S )Nr[   r   rD  c                   S   s   d S r3   r   r   r   r   r   rI  ;  rN   z7BufferedWriterTest.test_misbehaved_io.<locals>.<lambda>)rU   rª  r   rm   rA   rB   r6   rn   r°  r   r   r   r,  3  s    z%BufferedWriterTest.test_misbehaved_ioc                 C   s@   |   t¡" |  |  ¡ dd¡ W d   ƒ n1 s20    Y  d S ©Nr
  r™   ©r   rž   rª  rM   r8   r   r   r   Útest_max_buffer_size_removal=  s    z/BufferedWriterTest.test_max_buffer_size_removalc                 C   sH   |   ¡ }dd„ }||_|  |¡}| d¡ |  t|j¡ |  |j¡ d S )Nc                 S   s
   t ƒ ‚d S r3   r›  )r   r   r   r   Ú	bad_writeC  s    z?BufferedWriterTest.test_write_error_on_close.<locals>.bad_writeó   spam)rM   r6   rª  r   rm   rn   rJ  rl   )r1   r:  ro  r   r   r   r   Útest_write_error_on_closeA  s    

z,BufferedWriterTest.test_write_error_on_closec                 C   s\   |   ¡ }|  |d¡}tj|jd}| ¡  |j ¡  |  t	|j
d¡ |  |j¡ | ¡  d S )Nr
  r  rp  )r_   rª  r`   rÄ   rn   rÅ   rb   Úwaitr   r‹   r6   rJ  rl   r„   )r1   r[  r±  Útr   r   r   Útest_slow_close_from_threadK  s    
z.BufferedWriterTest.test_slow_close_from_threadN)r   r   r   re  rî  rò  rA  rF  rH  rL  rN  rO  rS  rT  rY  r[  r^  ra  rb  rd  r  rf  ri  r   r1  r+  r,  rn  rq  rt  r   r   r   r   r?  2  s4   

.

r?  c                   @   s@   e Zd ZejZedddddd„ ƒZdd„ Zdd	„ Z	d
d„ Z
dS )ÚCBufferedWriterTestTr3  r4  c                 C   sD   t  | ¡ tjdkr@|  ¡ }|  |¡}|  ttt	f|j
|tj¡ d S r7  )r?  rî  rå   rE  rM   rª  r   r«   r8  r‹   r2   r°  r   r   r   rî  [  s    



ÿz$CBufferedWriterTest.test_constructorc                 C   s‚   |   ¡ }|  |¡}| jt|j|dd |  t|jd¡ | jt|j|dd |  t|jd¡ | jt|j|dd |  t|jd¡ d S )Nr   rä  rB  rí  r‰   )rM   rª  r   r‹   r2   r6   r°  r   r   r   r9  g  s    
z'CBufferedWriterTest.test_initializationc                 C   sÊ   |   tjtj¡ t dtf¡L |  tjd¡}|  |¡}| d¡ ||_	t
 |¡}~t ¡  W d   ƒ n1 sp0    Y  |  |ƒ |¡ |  tjd¡ }|  | ¡ d¡ W d   ƒ n1 s¼0    Y  d S )Nr  r  s   123xxxr³   )rÃ   r   r‘   r’   r  r  r¾   rª  r6   rß  r<  r=  r  r>  r$   r›   rQ   r;  r   r   r   r@  q  s    


&z+CBufferedWriterTest.test_garbage_collectionc                 C   sD   |   td¡$ |  t ¡ ddd¡ W d   ƒ n1 s60    Y  d S )NrÊ   rë  r<  r8   r   r   r   r=  ‚  s    z#CBufferedWriterTest.test_args_errorN)r   r   r   r   rÊ   rª  r   rî  r9  r@  r=  r   r   r   r   ru  X  s   


ru  c                   @   s   e Zd ZejZdS )ÚPyBufferedWriterTestN)r   r   r   r   rÊ   rª  r   r   r   r   rv  ˆ  s   rv  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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 ),ÚBufferedRWPairTestc                 C   s$   |   |  ¡ |  ¡ ¡}|  |j¡ d S r3   )rª  rM   rK  rl   ©r1   Úpairr   r   r   rî    s    z#BufferedRWPairTest.test_constructorc                 C   s†   | j  | j ¡}~| j  | j ¡}|  ttfd|jd¡ |  ttfd|jd¡ | |  ¡ |  ¡ ¡ |  	| d¡d¡ |  	| d¡d¡ d S rï  )
rª  rñ  rˆ  r‹   r  rQ   r6   r2   rM   r›   rx  r   r   r   rò  ‘  s    
þ
þz%BufferedRWPairTest.test_uninitializedc                 C   s(   |   |  ¡ |  ¡ ¡}|  | j|j¡ d S r3   )rª  rM   r   r{   r¬  rx  r   r   r   r¯  Ÿ  s    zBufferedRWPairTest.test_detachc                 C   sF   |   t¡( |  |  ¡ |  ¡ dd¡ W d   ƒ n1 s80    Y  d S rl  rm  r8   r   r   r   Ú(test_constructor_max_buffer_size_removal£  s    z;BufferedRWPairTest.test_constructor_max_buffer_size_removalc                 C   s,   G dd„ dt ƒ}|  t| j|ƒ |   ¡ ¡ d S )Nc                   @   s   e Zd Zdd„ ZdS )zJBufferedRWPairTest.test_constructor_with_not_readable.<locals>.NotReadablec                 S   s   dS rx   r   r8   r   r   r   r=   ©  s    zSBufferedRWPairTest.test_constructor_with_not_readable.<locals>.NotReadable.readableN©r   r   r   r=   r   r   r   r   ÚNotReadable¨  s   r|  ©rM   r   rm   rª  )r1   r|  r   r   r   Ú"test_constructor_with_not_readable§  s    z5BufferedRWPairTest.test_constructor_with_not_readablec                 C   s,   G dd„ dt ƒ}|  t| j|   ¡ |ƒ ¡ d S )Nc                   @   s   e Zd Zdd„ ZdS )zLBufferedRWPairTest.test_constructor_with_not_writeable.<locals>.NotWriteablec                 S   s   dS rx   r   r8   r   r   r   r9   °  s    zUBufferedRWPairTest.test_constructor_with_not_writeable.<locals>.NotWriteable.writableN)r   r   r   r9   r   r   r   r   ÚNotWriteable¯  s   r  r}  )r1   r  r   r   r   Ú#test_constructor_with_not_writeable®  s    z6BufferedRWPairTest.test_constructor_with_not_writeablec                 C   sv   |   |  d¡|  ¡ ¡}|  | d¡d¡ |  | d¡d¡ |  | ¡ d¡ |   |  d¡|  ¡ ¡}|  | d ¡d¡ d S )NrD  r©   rS  rD   rT  rX  )rª  rÍ   rM   r›   rQ   rx  r   r   r   rô  µ  s    zBufferedRWPairTest.test_readc                    sT   ‡ fdd„}ˆ   |ƒ  ¡ g d¢¡ ˆ   |ƒ  ¡ g d¢¡ ˆ   |ƒ  d¡ddg¡ d S )Nc                      s   ˆ   ˆ  d¡ˆ  ¡ ¡S )Ns	   abc
def
h)rª  rÍ   rM   r   r8   r   r   rI  ¿  rN   z3BufferedRWPairTest.test_readlines.<locals>.<lambda>)rô   rõ   r—   r[   rô   rõ   r  rx  r   r8   r   r  ¾  s    z!BufferedRWPairTest.test_readlinesc                 C   s<   |   |  d¡|  ¡ ¡}|  | d¡d¡ |  | ¡ d¡ d S )NrD  r©   rS  rB  )rª  rÍ   rM   r›   r~  rx  r   r   r   rø  Ä  s    zBufferedRWPairTest.test_read1c              	   C   s|   dD ]r}|   |¡T |  |  d¡|  ¡ ¡}tdƒ}|  t||ƒ|ƒd¡ |  t|ƒd¡ W d   ƒ q1 sl0    Y  qd S )Nr€  rD  s        r[   s   abcde)rà   rª  rÍ   rM   r   r›   r  r   )r1   rƒ  ry  r   r   r   r   rû  Ì  s    z BufferedRWPairTest.test_readintoc                 C   sf   |   ¡ }|  |   ¡ |¡}| d¡ | ¡  tdƒ}| |¡ d|d d …< | ¡  |  |jddg¡ d S )NrS  rB  rC  )rM   rª  r6   rf   rœ   r›   r.   )r1   r¯   ry  rŸ   r   r   r   rF  Õ  s    

zBufferedRWPairTest.test_writec                 C   sB   |   |  d¡|  ¡ ¡}|  | d¡ d¡¡ |  | d¡d¡ d S )NrD  r©   rS  )rª  rÍ   rM   rJ  rþ  rç   r›   rQ   rx  r   r   r   Ú	test_peeká  s    zBufferedRWPairTest.test_peekc                 C   s&   |   |  ¡ |  ¡ ¡}|  | ¡ ¡ d S r3   )rª  rM   rJ  r=   rx  r   r   r   Útest_readableç  s    z BufferedRWPairTest.test_readablec                 C   s&   |   |  ¡ |  ¡ ¡}|  | ¡ ¡ d S r3   )rª  rM   rJ  r9   rx  r   r   r   Útest_writeableë  s    z!BufferedRWPairTest.test_writeablec                 C   s&   |   |  ¡ |  ¡ ¡}|  | ¡ ¡ d S r3   )rª  rM   rK  r>   rx  r   r   r   Útest_seekableï  s    z BufferedRWPairTest.test_seekablec                 C   s8   |   |  ¡ |  ¡ ¡}|  |j¡ | ¡  |  |j¡ d S r3   )rª  rM   rK  rl   rn   rJ  rx  r   r   r   Útest_close_and_closedø  s    z(BufferedRWPairTest.test_close_and_closedc                 C   s    dd„ }|   ¡ }||_|   ¡ }|  ||¡}|  t¡}| ¡  W d   ƒ n1 sR0    Y  |  dt|jƒ¡ |  |j	¡ |  
|j	¡ |  |j	¡ dd„ |_d S )Nc                   S   s   t  d S r3   ©Úreader_non_existingr   r   r   r   Úreader_closeÿ  s    zIBufferedRWPairTest.test_reader_close_error_on_close.<locals>.reader_closer‡  c                   S   s   d S r3   r   r   r   r   r   rI    rN   zEBufferedRWPairTest.test_reader_close_error_on_close.<locals>.<lambda>)rM   rn   rª  r   rÙ  rÚ  rj  rk  rJ  rl   rK  )r1   rˆ  r–  rE  ry  rÓ  r   r   r   Ú test_reader_close_error_on_closeþ  s    &z3BufferedRWPairTest.test_reader_close_error_on_closec              	   C   s  dd„ }|   ¡ }|   ¡ }||_|  ||¡}|  t¡}| ¡  W d   ƒ n1 sR0    Y  |  dt|jƒ¡ |  |j	¡ |  
|j	¡ |  |j	¡ dd„ |_d }t ¡ L t ¡  d }t ¡  W d   ƒ n1 sÔ0    Y  t ¡  W d   ƒ n1 sú0    Y  d S )Nc                   S   s   t  d S r3   ©Úwriter_non_existingr   r   r   r   Úwriter_close  s    zIBufferedRWPairTest.test_writer_close_error_on_close.<locals>.writer_closer‹  c                   S   s   d S r3   r   r   r   r   r   rI    rN   zEBufferedRWPairTest.test_writer_close_error_on_close.<locals>.<lambda>)rM   rn   rª  r   rÙ  rÚ  rj  rk  rK  rl   rJ  r   r¹  r  )r1   rŒ  r–  rE  ry  rÓ  r   r   r   Ú test_writer_close_error_on_close  s$    &


&z3BufferedRWPairTest.test_writer_close_error_on_closec                 C   sÜ   dd„ }dd„ }|   ¡ }||_|   ¡ }||_|  ||¡}|  t¡}| ¡  W d   ƒ n1 s`0    Y  |  dt|jƒ¡ |  |jj	t¡ |  dt|jj	ƒ¡ |  
|j¡ |  
|j¡ |  
|j¡ dd„ |_d	d„ |_d S )
Nc                   S   s   t  d S r3   r†  r   r   r   r   rˆ  *  s    zPBufferedRWPairTest.test_reader_writer_close_error_on_close.<locals>.reader_closec                   S   s   t  d S r3   rŠ  r   r   r   r   rŒ  ,  s    zPBufferedRWPairTest.test_reader_writer_close_error_on_close.<locals>.writer_closer‡  r‹  c                   S   s   d S r3   r   r   r   r   r   rI  =  rN   zLBufferedRWPairTest.test_reader_writer_close_error_on_close.<locals>.<lambda>c                   S   s   d S r3   r   r   r   r   r   rI  >  rN   )rM   rn   rª  r   rÙ  rÚ  rj  rk  rÐ  rÑ  rK  rl   )r1   rˆ  rŒ  r–  rE  ry  rÓ  r   r   r   Ú'test_reader_writer_close_error_on_close)  s"    &
z:BufferedRWPairTest.test_reader_writer_close_error_on_closec                 C   sœ   G dd„ dt ƒ}|  |dƒ|dƒ¡}|  | ¡ ¡ |  |dƒ|dƒ¡}|  | ¡ ¡ |  |dƒ|dƒ¡}|  | ¡ ¡ |  |dƒ|dƒ¡}|  | ¡ ¡ d S )Nc                   @   s   e Zd Zdd„ Zdd„ ZdS )z8BufferedRWPairTest.test_isatty.<locals>.SelectableIsAttyc                 S   s   t  | ¡ || _d S r3   )rM   r2   Ú_isatty)r1   Úisattyr   r   r   r2   B  s    
zABufferedRWPairTest.test_isatty.<locals>.SelectableIsAtty.__init__c                 S   s   | j S r3   )r  r8   r   r   r   r  F  s    z?BufferedRWPairTest.test_isatty.<locals>.SelectableIsAtty.isattyN)r   r   r   r2   r  r   r   r   r   ÚSelectableIsAttyA  s   r‘  FT)rM   rª  rK  r  rJ  )r1   r‘  ry  r   r   r   Útest_isatty@  s    zBufferedRWPairTest.test_isattyc                 C   s*   |   |  ¡ |  ¡ ¡}t |¡}d }d }d S r3   )rª  rM   r<  r=  )r1   Zbrwr=  r   r   r   Útest_weakref_clearingU  s    
z(BufferedRWPairTest.test_weakref_clearingN)r   r   r   rî  rò  r¯  rz  r~  r€  rô  r  rø  rû  rF  r  r‚  rƒ  r„  r…  r‰  r  rŽ  r’  r“  r   r   r   r   rw  ‹  s*   			rw  c                   @   s   e Zd ZejZdS )ÚCBufferedRWPairTestN)r   r   r   r   rÏ   rª  r   r   r   r   r”  [  s   r”  c                   @   s   e Zd ZejZdS )ÚPyBufferedRWPairTestN)r   r   r   r   rÏ   rª  r   r   r   r   r•  ^  s   r•  c                   @   s¼   e Zd 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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+Zd+Zd+S ),ÚBufferedRandomTestúrb+zwb+c                 C   s   t  | ¡ t | ¡ d S r3   )rê  rî  r?  r8   r   r   r   rî  f  s    
z#BufferedRandomTest.test_constructorc                 C   s   t  | ¡ t | ¡ d S r3   )rê  rò  r?  r8   r   r   r   rò  j  s    
z%BufferedRandomTest.test_uninitializedc                 C   sn   |   d¡}|  |d¡}|  d| d¡¡ | d¡ | d¡ |  |j¡ |  d| ¡ ¡ |  d|jd	 ¡ d S )
N)ó   asdfó   ghjkr
  ó   asrW   s   ddds   eeer™  s   dddeeer   )rM   rª  r›   rQ   r6   rK  r.   ©r1   r:  rÛ   r   r   r   Útest_read_and_writen  s    


z&BufferedRandomTest.test_read_and_writec                 C   s   |   d¡}|  |¡}|  d| d¡¡ |  d| ¡ ¡ | dd¡ |  d| d¡¡ | d¡ | dd¡ |  d| ¡ ¡ |  d	| ¡ ¡ | d
d¡ |  d| ¡ ¡ | dd¡ |  d| ¡ ¡ |  d| d¡¡ | ¡  |  d| ¡ ¡ |  	t
|jd¡ d S )Ns	   asdfghjklrš  rW   r   r˜  r÷   s   123fs	   asdf123flr–   éüÿÿÿr[   rD   r”  s   flé   rš   )rÍ   rª  r›   rQ   rB   rA   r6   rf   r  r   rž   r›  r   r   r   Útest_seek_and_telly  s$    


z%BufferedRandomTest.test_seek_and_tellc                 C   sº   |   d¡}|  |¡}|  d||dƒ¡ | d¡ |  d||dƒ¡ |  d| ¡ ¡ | ¡  |  d| ¡ ¡ |  d||ƒ¡ | dd¡ | d	¡ | ¡  | dd¡ |  d	||d
ƒ¡ d S )Nr	  rV  rW   r.  rX  r•   r@  r   s   XYZr©   )rÍ   rª  r›   r6   rB   rf   rA   )r1   Z	read_funcr:  r±  r   r   r   Úcheck_flush_and_read  s    



z'BufferedRandomTest.check_flush_and_readc                 C   s   |   dd„ ¡ d S )Nc                 W   s
   | j |Ž S r3   )rQ   )r±  r}   r   r   r   rI  £  rN   z8BufferedRandomTest.test_flush_and_read.<locals>.<lambda>©r   r8   r   r   r   Útest_flush_and_read¢  s    z&BufferedRandomTest.test_flush_and_readc                 C   s   ddd„}|   |¡ d S )Nr‰   c                 S   s.   t |dkr|ndƒ}|  |¡}t|d |… ƒS )Nr   é'  )rœ   rH   r   ©r±  rG   r   r   r   r   Ú	_readinto¦  s    
z=BufferedRandomTest.test_flush_and_readinto.<locals>._readinto)r‰   r¡  )r1   r¥  r   r   r   Útest_flush_and_readinto¥  s    
z*BufferedRandomTest.test_flush_and_readintoc                 C   s   ddd„}|   |¡ d S )Nr‰   c                 S   s2   |   |¡}|dkr|d |… }|  t|ƒd¡ |S ©Nr‰   rD   )rþ  rA   r   r¤  r   r   r   Ú_peek­  s
    
z5BufferedRandomTest.test_flush_and_peek.<locals>._peek)r‰   r¡  ©r1   r¨  r   r   r   Útest_flush_and_peek¬  s    
z&BufferedRandomTest.test_flush_and_peekc                 C   sh   |   d¡}|  |¡}| d¡ | ¡  | d¡ | ¡  | dd¡ |  d| ¡ ¡ |  d| ¡ ¡ d S )Nr	  ó   123s   45r   s	   12345fghi)rÍ   rª  r6   rf   rA   r›   r  rQ   rZ  r   r   r   Útest_flush_and_write·  s    



z'BufferedRandomTest.test_flush_and_writec                 C   s   t  | ¡ t | ¡ d S r3   )rê  r+  r?  r8   r   r   r   r+  Ã  s    
zBufferedRandomTest.test_threadsc                 C   s(   dd„ }|   |¡ dd„ }|   |¡ d S )Nc                 S   s   |   d¡ d S rj   )rþ  r¶  r   r   r   r¨  È  s    z6BufferedRandomTest.test_writes_and_peek.<locals>._peekc                 S   s.   |   ¡ }|  dd¡ |  d¡ |  |d¡ d S )Nr‰   rD   r   )rB   rA   rþ  rP  r   r   r   r¨  Ë  s    
rM  r©  r   r   r   Útest_writes_and_peekÇ  s    
z'BufferedRandomTest.test_writes_and_peekc                 C   s   dd„ }|   |¡ d S )Nc                 S   s   |   dd¡ |  d¡ d S r§  )rA   rQ   r¶  r   r   r   Ú_readÓ  s    z7BufferedRandomTest.test_writes_and_reads.<locals>._readrM  ©r1   r®  r   r   r   Útest_writes_and_readsÒ  s    z(BufferedRandomTest.test_writes_and_readsc                 C   s   dd„ }|   |¡ d S )Nc                 S   s   |   dd¡ |  d¡ d S r§  )rA   r~  r¶  r   r   r   Ú_read1Ù  s    z9BufferedRandomTest.test_writes_and_read1s.<locals>._read1rM  )r1   r±  r   r   r   Útest_writes_and_read1sØ  s    z)BufferedRandomTest.test_writes_and_read1sc                 C   s   dd„ }|   |¡ d S )Nc                 S   s   |   dd¡ |  tdƒ¡ d S r§  )rA   rH   rœ   r¶  r   r   r   r®  ß  s    z;BufferedRandomTest.test_writes_and_readintos.<locals>._readrM  r¯  r   r   r   Útest_writes_and_readintosÞ  s    z,BufferedRandomTest.test_writes_and_readintosc                 C   s¬   dD ]¢}|   d¡}|  |d¡}|  | d¡d¡ |  | ¡ d¡ | d| ¡ |  | ¡ |d ¡ | ¡  |  | ¡ |d ¡ | ¡ }|  |dd|  dd|   ¡ qd S )N)rD   r[   rÜ  r÷   rD   ó   Aó   Br–   )rÍ   rª  r›   rQ   rB   r6   rf   r  )r1   Zoverwrite_sizer:  r±  r…   r   r   r   Útest_write_after_readaheadä  s    
ÿz-BufferedRandomTest.test_write_after_readaheadc              	   C   s”   dd„ }d}t dt|ƒƒD ]t}t |t|ƒƒD ]`}|  |¡}|  |d¡}||||ƒ | ¡  t|ƒ}d||< d||< |  | ¡ |d||f ¡ q,qd S )	Nc                 S   s:   |   |¡ |  || ¡ |  d¡ |   |¡ |  d¡ d S )Nó   ó   )rA   rQ   r6   )r±  Zpos1Zpos2r   r   r   Úmutateú  s
    


z:BufferedRandomTest.test_write_rewind_write.<locals>.mutates   €‚ƒ„r   rÀ   rW   rD   zfailed result for i=%d, j=%d)r.  r   rÍ   rª  rf   rœ   r›   r  )r1   r¹  r   r+  Újr:  r±  Úexpectedr   r   r   Útest_write_rewind_writeø  s    

ÿz*BufferedRandomTest.test_write_rewind_writec                 C   s^   |   d¡}|  |d¡}|  | d¡d¡ |  | ¡ d¡ |  | d¡d¡ |  | ¡ d¡ d S )NrÜ  rÀ   rW   s   AAs   BBr÷   )rÍ   rª  r›   rQ   rI   r6   rZ  r   r   r   Ú!test_truncate_after_read_or_write	  s    
z4BufferedRandomTest.test_truncate_after_read_or_writec                 C   s   t  | ¡ t | ¡ d S r3   )rê  r,  r?  r8   r   r   r   r,  	  s    
z%BufferedRandomTest.test_misbehaved_ioc              	   C   sŽ  |   d¡Ð}|  |d¡¤}| d¡ |  | d¡d¡ | d¡ |  | d¡d¡ | d¡ tdƒ}| |¡ |  |d	¡ | d
¡ |  | d¡d¡ | 	¡  |  | 
¡ d¡ W d   ƒ n1 sÂ0    Y  W d   ƒ n1 sà0    Y  |   d¡„}|  |d¡V}|  | d¡d¡ | d¡ |  | d¡d¡ | 	¡  |  | 
¡ d¡ W d   ƒ n1 s`0    Y  W d   ƒ n1 s€0    Y  d S )Ns   abcdefghrÀ   ó   1rD   rö  ó   2rT  rÝ   ó   fó   4r—   s   1b2d3f4hrS  rõ  rW  s   a2c)rÍ   rª  r6   r›   rQ   r~  rœ   rH   rþ  rf   r  )r1   r:  r(   rF   r   r   r   Útest_interleaved_read_write	  s*    




L
z.BufferedRandomTest.test_interleaved_read_writec              	   C   s¾   |   d¡ }|  |¡v}| d¡ |  | ¡ d¡ | d¡ |  | ¡ d¡ | d¡ |  | ¡ d¡ | ¡  |  | ¡ d¡ W d   ƒ n1 s’0    Y  W d   ƒ n1 s°0    Y  d S )	Ns
   ab
cdef
g
r¾  s   b
r¿  rõ   rÝ   ó   
s
   1b
2def
3
)rÍ   rª  r6   r›   r´   rf   r  )r1   r:  r(   r   r   r   Útest_interleaved_readline_write7	  s    


z2BufferedRandomTest.test_interleaved_readline_writeN)r   r   r   r%  re  rî  rò  rœ  rŸ  r   r¢  r¦  rª  r¬  r+  r­  r°  r²  r³  r¶  r¼  r½  r,  rÂ  rÄ  rÞ  r0  r   r   r   r   r–  b  s0   r–  c                   @   s8   e Zd ZejZedddddd„ ƒZdd„ Zdd	„ Z	d
S )ÚCBufferedRandomTestTr3  r4  c                 C   sD   t  | ¡ tjdkr@|  ¡ }|  |¡}|  ttt	f|j
|tj¡ d S r7  )r–  rî  rå   rE  rM   rª  r   r«   r8  r‹   r2   r°  r   r   r   rî  N	  s    



ÿz$CBufferedRandomTest.test_constructorc                 C   s   t  | ¡ t | ¡ d S r3   )r2  r@  ru  r8   r   r   r   r@  Z	  s    
z+CBufferedRandomTest.test_garbage_collectionc                 C   sD   |   td¡$ |  t ¡ ddd¡ W d   ƒ n1 s60    Y  d S )NrÌ   rë  r<  r8   r   r   r   r=  ^	  s    z#CBufferedRandomTest.test_args_errorN)
r   r   r   r   rÌ   rª  r   rî  r@  r=  r   r   r   r   rÅ  K	  s
   

rÅ  c                   @   s   e Zd ZejZdS )ÚPyBufferedRandomTestN)r   r   r   r   rÌ   rª  r   r   r   r   rÆ  d	  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d„Z	dd„ Z
dZedd„ ƒZdS )ÚStatefulIncrementalDecoderaœ  
    For testing seek/tell behavior with a stateful, buffering decoder.

    Input is a sequence of words.  Words may be fixed-length (length set
    by input) or variable-length (period-terminated).  In variable-length
    mode, extra periods are ignored.  Possible words are:
      - 'i' followed by a number sets the input length, I (maximum 99).
        When I is set to 0, words are space-terminated.
      - 'o' followed by a number sets the output length, O (maximum 99).
      - Any other word is converted into a word followed by a period on
        the output.  The output word consists of the input word truncated
        or padded out with hyphens to make its length equal to O.  If O
        is 0, the word is output verbatim without truncating or padding.
    I and O are initially set to 1.  When I changes, any buffered input is
    re-scanned according to the new I.  EOF also terminates the last word.
    Ústrictc                 C   s   t j | |¡ |  ¡  d S r3   )ÚcodecsÚIncrementalDecoderr2   Úreset)r1   r  r   r   r   r2   …	  s    z#StatefulIncrementalDecoder.__init__c                 C   s   dt | ƒ S )Nz<SID %x>)Úidr8   r   r   r   Ú__repr__‰	  s    z#StatefulIncrementalDecoder.__repr__c                 C   s   d| _ d| _tƒ | _d S rj   )r+  Úorœ   rŸ   r8   r   r   r   rË  Œ	  s    z StatefulIncrementalDecoder.resetc                 C   s,   | j dA | jdA  }}t| jƒ|d | fS )NrD   rÀ   )r+  rÎ  r   rŸ   )r1   r+  rÎ  r   r   r   Úgetstate‘	  s    z#StatefulIncrementalDecoder.getstatec                 C   s:   |\}}t |ƒ| _t|dƒ\}}|dA |dA  | _| _d S )NrÀ   rD   )rœ   rŸ   Údivmodr+  rÎ  )r1   ÚstaterŸ   r   r+  rÎ  r   r   r   Úsetstate•	  s    
z#StatefulIncrementalDecoder.setstateFc                 C   sˆ   d}|D ]d}| j dkrD|tdƒkr6| jrB||  ¡ 7 }ql| j |¡ q| j |¡ t| jƒ| j kr||  ¡ 7 }q|r„| jr„||  ¡ 7 }|S )Nr  r   Ú.)r+  ÚordrŸ   Úprocess_wordr4   r   )r1   ÚinputÚfinalÚoutputr   r   r   r   Údecode›	  s    

z!StatefulIncrementalDecoder.decodec                 C   s¸   d}| j d tdƒkr6tdt| j dd … p,dƒƒ| _nv| j d tdƒkrhtdt| j dd … p^dƒƒ| _nD| j  d¡}t|ƒ| jk r|d| j 7 }| jr¤|d | j… }|d	7 }tƒ | _ |S )
Nr  r   r+  éc   rD   rÎ  rÓ   ú-rÓ  )	rŸ   rÔ  r’  Úintr+  rÎ  rÙ  r   rœ   )r1   rØ  r   r   r   rÕ  ¬	  s      z'StatefulIncrementalDecoder.process_wordc              	   C   s6   | j r2|dkr2t d¡}tjd|jd d d d | dS d S )NÚtest_decoderr!   )r˜  ÚencoderÙ  ÚincrementalencoderÚstreamreaderÚstreamwriterÚincrementaldecoder)ÚcodecEnabledrÉ  ÚlookupÚ	CodecInforÞ  )Úclsr˜  Úlatin1r   r   r   ÚlookupTestDecoder¾	  s    
üz,StatefulIncrementalDecoder.lookupTestDecoderN)rÈ  )F)r   r   r   rJ   r2   rÍ  rË  rÏ  rÒ  rÙ  rÕ  rã  Úclassmethodrè  r   r   r   r   rÇ  s	  s   

rÇ  c                   @   s    e Zd ZdZg d¢Zdd„ ZdS )ÚStatefulIncrementalDecoderTestzB
    Make sure the StatefulIncrementalDecoder actually works.
    ))r  Fza.b.c.d.)ó   oiabcdTúabcd.)s   oi...abcd...Trì  )s   i.o6.x.xyz.toolongtofit.Fzx-----.xyz---.toolon.)s
   i.i2.o6xyzTzxy----.z-----.)s   i.o3.i6.abcdefghijklmnopTzabc.ghi.mno.)s;   i.o29.a.b.cde.o15.abcdefghijabcdefghij.i3.a.b.c.d.ei00k.l.mTzÊa----------------------------.b----------------------------.cde--------------------------.abcdefghijabcde.a.b------------..c.------------.d.e------------.k--------------.l--------------.m--------------.c                 C   s\   | j D ]$\}}}tƒ }|  | ||¡|¡ qtƒ }|  | d¡d¡ |  | dd¡d¡ d S )Nrë  r  rN   rD   rì  )Ú
test_casesrÇ  r›   rÙ  )r1   rÖ  ÚeofrØ  Údr   r   r   rÝ  í	  s    z+StatefulIncrementalDecoderTest.test_decoderN)r   r   r   rJ   rí  rÝ  r   r   r   r   rê  Í	  s   rê  c                   @   s€  e Zd Zdd„ Zdd„ Zdd„ Zdd„ Zd	d
„ Zdd„ Zdd„ Z	dd„ Z
dd„ Zdd„ Ze ejjd¡dd„ ƒZeje ejj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 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„ Z0dPdQ„ Z1dRdS„ Z2dTdU„ Z3dVdW„ Z4dXdY„ Z5dZd[„ Z6d\d]„ Z7d^d_„ Z8ej9d`da„ ƒZ:dbdc„ Z;ddde„ Z<dfdg„ Z=dhdi„ Z>djdk„ Z?dldm„ Z@dndo„ ZAdpdq„ ZBdrds„ ZCdtdu„ ZDdvdw„ ZEdxdy„ ZFdzd{„ ZGd|d}„ ZHd~d„ ZId€d„ ZJd‚dƒ„ ZKd„d…„ ZLd†d‡„ ZMdˆd‰„ ZNdŠd‹„ ZOdŒd„ ZPdŽd„ ZQdd‘„ ZRd’d“„ ZSd”S )•ÚTextIOWrapperTestc                 C   s"   d| _ d d¡| _t tj¡ d S )Ns   AAA
BBBCCC
DDD
EEE
s   AAA
BBB
CCC
DDD
EEE
rÓ   )ÚtestdatarÙ  Ú
normalizedr   r‘   r’   r8   r   r   r   r“   ú	  s    zTextIOWrapperTest.setUpc                 C   s   t  t j¡ d S r3   r   r8   r   r   r   r”   ÿ	  s    zTextIOWrapperTest.tearDownc                 C   s´   |   d¡}|  |d¡}|  |¡}|j|ddd |  |jd¡ |  |jd¡ |j|ddd	 |  |jd¡ |  |jd¡ |  d
| ¡ ¡ | jt	|j|dd | jt
|j|dd d S )Nó   Ã©

r  r!   ú
©r#   ry  Fúutf-8T)r#   Úline_bufferingõ   Ã©
r;   rx  rº  )rÍ   rÈ   rÕ   r2   r›   r#   r÷  r´   r   rž   r‹   ©r1   r    r   rs  r   r   r   rî  
  s    

z"TextIOWrapperTest.test_constructorc                 C   sf   | j  | j ¡}~| j  | j ¡}|  tt|¡ |  ttfd|jd¡ | 	|  
¡ ¡ |  | d¡d¡ d S )Nrð  r   r  )rÕ   rñ  r   r  r­  rˆ  r‹   r  rQ   r2   rM   r›   ©r1   rs  r   r   r   rò  
  s    
þz$TextIOWrapperTest.test_uninitializedc                 C   sP   |   ¡ }|  |¡}|  td¡ | j|dd W d   ƒ n1 sB0    Y  d S )Nzis not a text encodingÚhexr"   )rÍ   rÊ   rˆ  ÚLookupErrorrÕ   )r1   r    r   r   r   r   Ú*test_non_text_encoding_codecs_are_rejected
  s    
z<TextIOWrapperTest.test_non_text_encoding_codecs_are_rejectedc                 C   s¸   |   ¡ }|  |¡}|  |¡}|  | ¡ |¡ | j|dd}| d¡ |  | ¡ ¡ | ¡  |  | ¡ d¡ |  	t
|j¡ t|ƒ |  |jd¡ |  |jd¡ |  |j¡ |  |j¡ d S )NrÓ   r"   Zhowdys   howdyrÈ  )rÍ   rÊ   rÕ   r«  r¬  r6   rK  r  r›   r   r‹   r­  r#   r  r÷  Úwrite_throughrù  r   r   r   r¯  $
  s    


zTextIOWrapperTest.test_detachc                 C   s¨   |   d d¡¡}|  |¡}| j|dd}| jj}|  t|ƒd| ¡ d|_|  t|ƒd| ¡ d|_|  t|ƒd| ¡ d	|_|  t|ƒd
| ¡ |j	 
¡  t|ƒ d S )NZhellorö  r"   z'<(%s\.)?TextIOWrapper encoding='utf-8'>rÀ  z4<(%s\.)?TextIOWrapper name='dummy' encoding='utf-8'>r    z=<(%s\.)?TextIOWrapper name='dummy' mode='r' encoding='utf-8'>rÁ  z><(%s\.)?TextIOWrapper name=b'dummy' mode='r' encoding='utf-8'>)rÍ   rÞ  rÈ   rÕ   r   rÂ  r­  r˜  r¹   rŸ   r¬  )r1   r:  r   rs  Úmodnamer   r   r   rÃ  8
  s*    

ÿ
ÿ
ÿ
ÿ
zTextIOWrapperTest.test_reprc              	   C   sd   |   ¡ }|  |¡}t |d|¡0 zt|ƒ W n ty@   Y n0 W d   ƒ n1 sV0    Y  d S rÄ  )rÍ   rÕ   r   rÅ  r­  rÆ  ©r1   r:  rs  r   r   r   rÈ  L
  s    
z%TextIOWrapperTest.test_recursive_reprc                 C   sv   |   ¡ }|  |d¡}| j|ddd}| d¡ |  | ¡ d¡ | d¡ |  | ¡ d¡ | d	¡ |  | ¡ d
¡ d S )Nr  Ú
T©ry  r÷  ÚXrN   zY
Zs   XY
ZzABs   XY
ZAB)rÍ   rÊ   rÕ   r6   r›   r  rù  r   r   r   Útest_line_bufferingV
  s    


z%TextIOWrapperTest.test_line_bufferingc                 C   s  |   ¡ }|  |d¡}| j|ddd}| d¡ |  | ¡ d¡ |jdd |  | ¡ d	¡ | d
¡ |  | ¡ d¡ | d¡ |  | ¡ d¡ |jdd |  | ¡ d¡ | d¡ |  | ¡ d¡ | ¡  |jd d |  |jd¡ |jdd | ¡  |jd d |  |jd¡ d S )Nr  r  Fr  zAB
CrN   T)r÷  s   AB
CzDEF
Gs	   AB
CDEF
GÚHs
   AB
CDEF
GHZIJ)rÍ   rÊ   rÕ   r6   r›   r  Úreconfigurer÷  rù  r   r   r   Útest_reconfigure_line_bufferinga
  s,    



z1TextIOWrapperTest.test_reconfigure_line_bufferingzutf-8 mode is enabledc              	   C   sˆ   t tjƒ}z`dD ]}|tjv rtj|= qt d¡}|  ¡ }|  |¡}|  |j|¡ W tj 	¡  tj 
|¡ ntj 	¡  tj 
|¡ 0 d S )N)ÚLC_ALLÚLANGÚLC_CTYPEF)Údictr¼   ÚenvironÚlocaleÚgetpreferredencodingrÍ   rÕ   r›   r#   ÚclearÚupdate)r1   Zold_environÚkeyZcurrent_locale_encodingr   rs  r   r   r   Útest_default_encoding|
  s    





ÿ
z'TextIOWrapperTest.test_default_encodingc                    sP   dd l ‰ |  ¡ }‡ fdd„|_|  t| j|¡ ‡ fdd„|_|  t| j|¡ d S )Nr   c                      s
   ˆ j d S rj   )ZINT_MAXr   ©Ú	_testcapir   r   rI  •
  rN   z8TextIOWrapperTest.test_device_encoding.<locals>.<lambda>c                      s
   ˆ j d S rj   )ZUINT_MAXr   r  r   r   rI  —
  rN   )r  rÍ   r<   r   r«   rÕ   r5   r   r  r   Útest_device_encoding
  s    z&TextIOWrapperTest.test_device_encodingc                 C   sJ   |   ¡ }| j|dd}|  |jd¡ |  |¡}|  |j¡ t |j¡ d S )Nrö  r"   )rÍ   rÕ   r›   r#   ÚassertIsNotNonerÉ  rä  ©r1   r   rs  r   r   r   Útest_encodingš
  s    
zTextIOWrapperTest.test_encodingc                 C   s¦   |   d¡}| j|dd}|  t|j¡ |   d¡}| j|ddd}|  t|j¡ |   d¡}| j|ddd}|  | ¡ d¡ |   d¡}| j|ddd}|  | ¡ d	¡ d S )
Ns   abc
ÿ
rÓ   r"   rÈ  ©r#   r  rë   zabc

Úreplaceu   abc
ï¿½
)rÍ   rÕ   r   ÚUnicodeErrorrQ   r›   r  r   r   r   Útest_encoding_errors_reading£
  s    



z.TextIOWrapperTest.test_encoding_errors_readingc                 C   sÊ   |   ¡ }| j|dd}|  t|jd¡ |   ¡ }| j|ddd}|  t|jd¡ |   ¡ }| j|dddd}| d	¡ | ¡  |  | ¡ d
¡ |   ¡ }| j|dddd}| d	¡ | ¡  |  | ¡ d¡ d S )NrÓ   r"   õ   Ã¿rÈ  r  rë   r  )r#   r  ry  u	   abcÃ¿def
s   abcdef
r  s   abc?def
)rÍ   rÕ   r   r  r6   rf   r›   r  r  r   r   r   Útest_encoding_errors_writingµ
  s(    
ÿ

ÿ
z.TextIOWrapperTest.test_encoding_errors_writingc              	   C   s(  g d¢}d g d¢gd|gdg d¢gdddggd	g d
¢gg}d}|D ]à}t d |¡ |¡ƒ}dD ]Â}tddƒD ]²}|D ]¨\}}	|  |  |¡|¡}
| j|
||d}|ràg }| d¡}|dkrºqè|  t	|ƒd¡ | 
|| ¡  ¡ q¦nt|ƒ}t||	ƒD ]\}}|  ||¡ qò|  t	|ƒt	|	ƒ¡ qtqlq^qBd S )N)úunix
ú	windows
zos9úlast
Únonl)r  zwindows
zos9
r!  r"  r  r  )r  r   z	os9last
r"  rô  zunix
windows
zos9last
nonlú)zunix
windowsz
os9z	last
nonl)rö  r!   úutf-16ú	utf-16-leú	utf-16-beúutf-32ú	utf-32-leú	utf-32-be)FTrD   r¥   ©ry  r#   rW   )r   r„   rÞ  r.  rÈ   rÍ   rÕ   rQ   r›   r   r4   r´   r,   Úzip)r1   Zinput_linesrè   Ú	encodingsr#   r   Zdo_readsr  ry  Z	exp_linesr±  ÚtextioZ	got_linesÚc2Zgot_lineZexp_liner   r   r   Útest_newlinesÍ
  s8    



ûÿ
zTextIOWrapperTest.test_newlinesc                 C   sº   d}|  dd¡  dd¡}d | d¡jddfd| d¡jddfd	g d
¢fdg d¢fdg d¢ffD ]R\}}|  |¡}| j|d|d}|  | ¡ |¡ | d¡ |  | ¡ d 	|¡¡ qbd S )Ns   AAA
BB B
CCCDDDEEE
FFF
GGGs   
rÃ  ó   rÓ   T)Úkeependsr  r  )zAAA
zBB B
zCCCDDDEEE
úFFF
ÚGGGrô  )zAAA
BB B
CCCDDDEEE
r2  r3  r#  )zAAA
BB B
CCCzDDDzEEEz
FFFz
GGGrõ  r   )
r  rÙ  Ú
splitlinesrÍ   rÕ   r›   r   rA   rQ   r„   )r1   rñ  rò  ry  r»  rF   Útxtr   r   r   Útest_newlines_input÷
  s    


û

z%TextIOWrapperTest.test_newlines_inputc                 C   s˜   dddddœ}d |t j fgt| ¡ ƒ }|D ]d\}}|  ¡ }| j|d|d}| d¡ | d¡ | d	¡ | ¡  |  |j	d
¡ |  | 
¡ |¡ q.d S )Ns   AAA
BBB
CCC
XY
Zs   AAABBBCCCXYZs   AAA
BBB
CCC
XY
Z)r  r  r#  rô  rÓ   rõ  zAAA
BzBB
CCC
zXY
ZF)r¼   ÚlinesepÚsortedÚitemsrÍ   rÕ   r6   rf   r›   rl   r  )r1   Ztestdictrè   ry  r»  rF   r5  r   r   r   Útest_newlines_output  s    ü


z&TextIOWrapperTest.test_newlines_outputc                    sZ   g ‰| j ‰ G ‡ ‡fdd„dˆ ƒ}|ƒ }| j|dd}| d¡ ~t ¡  |  dgˆ¡ d S )Nc                       s   e Zd Z‡ ‡fdd„ZdS )z4TextIOWrapperTest.test_destructor.<locals>.MyBytesIOc                    s   ˆ  |  ¡ ¡ ˆ  | ¡ d S r3   )r4   r  rn   r8   ©r#  r(  r   r   rn     s    z:TextIOWrapperTest.test_destructor.<locals>.MyBytesIO.closeNrž  r   r;  r   r   Ú	MyBytesIO  s   r<  rÓ   r"   rc  rS  )rÍ   rÕ   r6   r   r  r›   )r1   r<  r   rs  r   r;  r   r    s    
z!TextIOWrapperTest.test_destructorc                    sL   g ‰ G ‡ fdd„d| j ƒ}|  ¡ }||dd}~t ¡  |  ˆ g d¢¡ d S )Nc                       s:   e Zd Z‡ ‡fdd„Z‡ ‡fdd„Z‡ ‡fdd„Z‡  ZS )z<TextIOWrapperTest.test_override_destructor.<locals>.MyTextIOc                    s4   ˆ  d¡ ztƒ j}W n ty(   Y n0 |ƒ  d S rj   r  r­   r  r   r   r  *  s    
zDTextIOWrapperTest.test_override_destructor.<locals>.MyTextIO.__del__c                    s   ˆ  d¡ tƒ  ¡  d S rV   r  r8   r  r   r   rn   2  s    
zBTextIOWrapperTest.test_override_destructor.<locals>.MyTextIO.closec                    s   ˆ  d¡ tƒ  ¡  d S r  r  r8   r  r   r   rf   5  s    
zBTextIOWrapperTest.test_override_destructor.<locals>.MyTextIO.flushr  r   r  rY   r   ÚMyTextIO)  s   r=  rÓ   r"   r  )rÕ   rÍ   r   r  r›   )r1   r=  r   rs  r   r  r   rµ  '  s    z*TextIOWrapperTest.test_override_destructorc              	   C   s–   |   ¡ }t ¡ r}|  t¡ |  |¡j W d   ƒ n1 s>0    Y  tsZ|  |j	¡ n|j	d urt|  
|j	jt¡ W d   ƒ n1 sˆ0    Y  d S r3   )ri   r   r¹  r   r  rÕ   rº  r»  r>  r¼  r›   r½  rm   r¾  r   r   r   r¿  >  s    
*
z/TextIOWrapperTest.test_error_through_destructorc                 C   sŒ  dD ]€}dD ]t}| j tjd|d}||_|  | d¡d¡ | ¡  | j tjd|d}||_|  | ¡ d¡ |  | ¡ d¡ | ¡ }|  | 	d¡d¡ |  | d ¡d¡ | 	d¡ |  | d	¡d
¡ |  | d¡d¡ |  | d¡d¡ |  | ¡ d¡ |  | ¡ |¡ |  | 	d¡d¡ |  | 	dd	¡|¡ |  | d¡d¡ |  | 	|¡|¡ |  | ¡ d¡ | 
d¡r||  ||¡ | ¡  qqd S )N)rD   rW   r©   r÷   r[   rI  rì  é   é   é    é!   é?   é@   éA   )rÓ   r!   rö  úw+r"   rc  r©   úr+r   rW   r
  rD   r*  r  ÚdefÚutf)r$   r   r’   r&   r›   r6   rn   rB   rQ   rA   rç   Úmulti_line_test)r1   Ú	chunksizeÚencr(   Úcookier   r   r   Útest_basic_ioM  s6    


zTextIOWrapperTest.test_basic_ioc                 C   sº   |  d¡ | ¡  d}g }dD ]V}g }t|ƒD ]}| ||t|ƒ  ¡ q.d |¡d }| | ¡ |f¡ | |¡ q|  d¡ g }	| ¡ }
| ¡ }|sšqª|	 |
|f¡ q„|  	|	|¡ d S )Nr   u	   sÃ¿à¿¿ï¿¿)r   rD   rW   r©   r÷   r[   é   r?  r@  rA  é>   rB  rC  rD  r  r  r  )
rA   rI   r.  r4   r   r„   rB   r6   r´   r›   )r1   r(   rK  ÚsampleZwlinesr}  Úcharsr+  ÚlineZrlinesr   r   r   r   rI  j  s&    

z!TextIOWrapperTest.multi_line_testc                 C   sâ   | j tjddd}| ¡ }| d¡ | ¡ }| d¡ | ¡ }| d¡ |  | ¡ |¡ |  | ¡ d¡ |  | ¡ |¡ |  | ¡ d¡ |  | ¡ |¡ | d¡ |D ]}|  |d¡ |  t	|j¡ q¦|  | ¡ |¡ | 
¡  d S )NrE  rö  r"   u   Ã¿
r   )r$   r   r’   rB   r6   rA   r›   r´   r   rm   rn   )r1   r(   Úp0Úp1Zp2rR  r   r   r   Útest_telling€  s$    



zTextIOWrapperTest.test_tellingc           
      C   s   t ƒ }|d }d| }t| d¡ƒ}|  t|ƒt|ƒ¡ d}t| d¡ƒ}|| }|  tjd¡}| |d ¡ W d   ƒ n1 s„0    Y  | jtjdddL}| 	|¡}	|  |	t
|dƒ¡ |  | ¡ |¡ |  | ¡ |¡ W d   ƒ n1 sò0    Y  d S )	NrW   r  rö  õ   è¢ˆ
r°   r    r"   rÓ   )r)   r   rÞ  r›   r   r$   r   r’   r6   rQ   rj  rB   r´   )
r1   Ú
chunk_sizeZprefix_sizeZu_prefixÚprefixZu_suffixÚsuffixrR  r(   r…   r   r   r   Útest_seeking”  s    ,
zTextIOWrapperTest.test_seekingc                 C   sŽ   d}|   tjd¡}| |¡ W d   ƒ n1 s20    Y  | j tjddd,}|j d|_| ¡  | ¡  W d   ƒ n1 s€0    Y  d S )Ns   à¿¿
r°   r    rö  r"   rW   )r$   r   r’   r6   r&   r´   rB   )r1   r   r(   r   r   r   Útest_seeking_too¥  s    (z"TextIOWrapperTest.test_seeking_tooc                    sŒ   d‰ d‡ ‡fdd„	}dt _zdtjD ]\}}}||ƒ q"tjD ]8\}}}ˆ t|ƒd  }d| }|d }||| |ƒ q<W dt _ndt _0 d S )	Né€   r   c              	      sô   ˆ  tjd¡}| | ¡ | ¡  ˆj tjdd}ˆ |_| ¡ }| ¡  t|t|ƒd ƒD ]–}ddt|ƒ| fD ]~}ˆj tjdd}ˆ 	| |¡|d|… ¡ | 
¡ }ˆ 	| |¡|||| … ¡ | |¡ ˆ 	| ¡ ||d… ¡ | ¡  qnqXdS )zTell/seek to various points within a data stream and ensure
            that the decoded data returned by read() is consistent.r°   rÝ  r"   rD   r[   N)r$   r   r’   r6   rn   r&   rQ   r.  r   r›   rB   rA   )r   Úmin_posr(   Zdecodedr+  rº  rL  ©Z
CHUNK_SIZEr1   r   r   Útest_seek_and_tell_with_dataµ  s     

zJTextIOWrapperTest.test_seek_and_tell.<locals>.test_seek_and_tell_with_datarD   rW   ó   .)r   )rÇ  rã  rê  rí  r   )r1   r_  rÖ  Ú_ÚoffsetrX  r]  r   r^  r   rŸ  °  s    
z$TextIOWrapperTest.test_seek_and_tellc                 C   sœ   | j tjddd}| d¡ | ¡  | j tjddd}|  | ¡ d¡ | ¡ }|  | ¡ d¡ | ¡ }| |¡ |  | ¡ d¡ |  | ¡ |¡ | ¡  d S )Nr¯   Úeuc_jpr"   u
   AB
ã†ãˆ
r    zAB
u   ã†ãˆ
)	r$   r   r’   r6   rn   r›   r´   rB   rA   )r1   r(   rS  rT  r   r   r   Útest_multibyte_seek_and_tellß  s    

z.TextIOWrapperTest.test_multibyte_seek_and_tellc                 C   sx   | j tjddd}| d¡ | ¡ }| d¡ | |¡ | d¡ | ¡  | j tjddd}|  | ¡ d¡ | ¡  d S )	Nr¯   Úeuc_jis_2004r"   u   Ã¦Ì€õ   Ã¦u   Ì€r    u   Ã¦Ì€Ì€)	r$   r   r’   r6   rB   rA   rn   r›   r´   )r1   r(   rS  r   r   r   Útest_seek_with_encoder_stateî  s    



z.TextIOWrapperTest.test_seek_with_encoder_statec                 C   s–   d}d}|D ]„}|   ¡ }| j||d}| |¡ | |¡ | d¡ |  | ¡ |d ¡ | d¡ |  | ¡ |d ¡ |  | ¡ |d  |¡¡ qd S )NZ
1234567890)r$  r%  r&  r'  r(  r)  r"   r   rW   )rÍ   rÕ   r6   rA   r›   rQ   r  rÞ  )r1   r   rè   r#   rF   r(   r   r   r   Útest_encoded_writesû  s    



z%TextIOWrapperTest.test_encoded_writesc                 C   s0   G dd„ d| j ƒ}|  |ƒ ¡}|  t|j¡ d S )Nc                   @   s   e Zd Zdd„ ZdS )z5TextIOWrapperTest.test_unreadable.<locals>.UnReadablec                 S   s   dS rx   r   r8   r   r   r   r=     s    z>TextIOWrapperTest.test_unreadable.<locals>.UnReadable.readableNr{  r   r   r   r   Ú
UnReadable  s   ri  )rÍ   rÕ   r   rm   rQ   )r1   ri  r5  r   r   r   Útest_unreadable  s    z!TextIOWrapperTest.test_unreadablec                 C   s>   |   |  d¡¡}d}| d¡}|s$q.||7 }q|  |d¡ d S )Ns   AA
BBr  rD   zAA
BB©rÕ   rÍ   rQ   r›   ©r1   r5  Úreadsr*  r   r   r   Útest_read_one_by_one  s    

z&TextIOWrapperTest.test_read_one_by_onec                 C   sh   |   |  d¡¡}|  | ¡ g d¢¡ | d¡ |  | d ¡g d¢¡ | d¡ |  | d¡ddg¡ d S )Ns   AA
BB
CC)úAA
úBB
ZCCr   r[   ro  rp  )rÕ   rÍ   r›   r   rA   ©r1   r5  r   r   r   r     s    

z TextIOWrapperTest.test_readlinesc                 C   s>   |   |  d¡¡}d}| d¡}|s$q.||7 }q|  |d¡ d S )Ns‚   AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
Br  r\  zAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
Brk  rl  r   r   r   Útest_read_by_chunk)  s    

z$TextIOWrapperTest.test_read_by_chunkc                 C   s@   g d¢}|   ¡ }|  |¡}| |¡ | ¡  |  | ¡ d¡ d S ©N)r
  ZcdZefrD  )rÍ   rÕ   rµ   rf   r›   r  ©r1   r(  rF   r5  r   r   r   ra  4  s    

z!TextIOWrapperTest.test_writelinesc                 C   sD   t g d¢ƒ}|  ¡ }|  |¡}| |¡ | ¡  |  | ¡ d¡ d S rs  )r   rÍ   rÕ   rµ   rf   r›   r  rt  r   r   r   rb  <  s    

z*TextIOWrapperTest.test_writelines_userlistc                 C   sF   |   |  ¡ ¡}|  t|jg d¢¡ |  t|jd ¡ |  t|jd¡ d S )Nr  rS  )rÕ   rÍ   r   rž   rµ   rq  r   r   r   rd  D  s    z'TextIOWrapperTest.test_writelines_errorc                 C   sF   | j |  | j¡dd}d}| d¡}|s*q4||7 }q|  || j¡ d S )NrÓ   r"   r  rD   )rÕ   rÍ   rñ  rQ   r›   rò  rl  r   r   r   Útest_issue1395_1J  s    

z"TextIOWrapperTest.test_issue1395_1c                 C   sL   | j |  | j¡dd}d|_d}| d¡}|s0q:||7 }q |  || j¡ d S )NrÓ   r"   r÷   r  ©rÕ   rÍ   rñ  r&   rQ   r›   rò  rl  r   r   r   Útest_issue1395_2V  s    

z"TextIOWrapperTest.test_issue1395_2c                 C   sj   | j |  | j¡dd}d|_| d¡}|| d¡7 }|| ¡ 7 }|| ¡ 7 }|| ¡ 7 }|  || j¡ d S ©NrÓ   r"   r÷   )rÕ   rÍ   rñ  r&   rQ   r´   r›   rò  ©r1   r5  rm  r   r   r   Útest_issue1395_3b  s    
z"TextIOWrapperTest.test_issue1395_3c                 C   sD   | j |  | j¡dd}d|_| d¡}|| ¡ 7 }|  || j¡ d S rx  rv  ry  r   r   r   Útest_issue1395_4m  s
    
z"TextIOWrapperTest.test_issue1395_4c                 C   sX   | j |  | j¡dd}d|_| d¡}| ¡ }| d¡ | |¡ |  | d¡d¡ d S )NrÓ   r"   r÷   r   zBBB
)rÕ   rÍ   rñ  r&   rQ   rB   rA   r›   )r1   r5  rm  r   r   r   r   Útest_issue1395_5u  s    


z"TextIOWrapperTest.test_issue1395_5c                 C   s2   |   | j¡}| j|dd}|  | ¡ | ¡ ¡ d S ©NrÓ   r"   )rÍ   rñ  rÕ   r›   r>   )r1   rŸ   r5  r   r   r   Útest_issue2282  s    z TextIOWrapperTest.test_issue2282c              	   C   s  t j}dD ]}| j|d|d"}| d¡ | ¡ }W d   ƒ n1 sH0    Y  |  |d¡&}|  | ¡ d |¡¡ W d   ƒ n1 sŠ0    Y  | j|d|d}| d¡ W d   ƒ n1 sÄ0    Y  |  |d¡&}|  | ¡ d |¡¡ W d   ƒ q
1 s0    Y  q
d S )	N©ú	utf-8-sigr$  r'  r¯   r"   Úaaar³   r  ÚxxxÚaaaxxx)r   r’   r$   r6   rB   r›   rQ   rÞ  ©r1   ÚfilenameÚcharsetr(   r   r   r   r   Útest_append_bom…  s    

&4(z!TextIOWrapperTest.test_append_bomc              	   C   sð   t j}dD ]à}| j|d|d"}| d¡ | ¡ }W d   ƒ n1 sF0    Y  | j|d|d8}| |¡ | d¡ | d¡ | d¡ W d   ƒ n1 sž0    Y  |  |d	¡&}|  | ¡ d
 |¡¡ W d   ƒ q
1 sà0    Y  q
d S )Nr  r¯   r"   r  rF  Zzzzr   Úbbbr³   Zbbbzzz)	r   r’   r$   r6   rB   rA   r›   rQ   rÞ  r„  r   r   r   Útest_seek_bom”  s    
&


(zTextIOWrapperTest.test_seek_bomc              	   C   sâ   t j}dD ]Ò}| j|d|d}| d¡ W d   ƒ n1 s>0    Y  | j|d|d2}| d¡ | d| j¡ | d¡ W d   ƒ n1 s0    Y  |  |d¡&}|  | ¡ d	 |¡¡ W d   ƒ q
1 sÒ0    Y  q
d S )
Nr  r¯   r"   r  r  r   r‚  r³   rƒ  )	r   r’   r$   r6   rA   r·   r›   rQ   rÞ  )r1   r…  r†  r(   r   r   r   Útest_seek_append_bom£  s    (
(z&TextIOWrapperTest.test_seek_append_bomc                 C   s€   |   tjd¡}|  |jd¡ W d   ƒ n1 s20    Y  | j tjddd}|  |jd¡ W d   ƒ n1 sr0    Y  d S )Nr¯   rÈ  r  ©r  )r$   r   r’   r›   r  r­   r   r   r   Útest_errors_property°  s    ,z&TextIOWrapperTest.test_errors_propertyc              	      sò   t  ¡ ‰ | jtjdddl‰‡ ‡fdd„‰‡fdd„tdƒD ƒ}t |ˆ j¡ t 	d	¡ W d   ƒ n1 sn0    Y  W d   ƒ n1 sŒ0    Y  |  tj¡<‰ˆ 
¡ }tdƒD ]}|  | d
| ¡d¡ q´W d   ƒ n1 sä0    Y  d S )Nr¯   rD   r±   c                    s   d|  }ˆ   ¡  ˆ |¡ d S )NúThread%03d
)rr  r6   )rG   Útext)Úeventr(   r   r   Úrun»  s    z1TextIOWrapperTest.test_threads_write.<locals>.runc                    s   g | ]}t jˆ |fd ‘qS )rÁ   r  r  )r  r   r   r   ¿  s   ÿz8TextIOWrapperTest.test_threads_write.<locals>.<listcomp>r¢   r!  r  )r`   ra   r$   r   r’   r.  r&  rc   rd   re   rQ   r›   r   )r1   r)  ZcontentrG   r   )r  r(   r  r   Útest_threads_write¶  s    
ÿFz$TextIOWrapperTest.test_threads_writec                    sŠ   | j |  | j¡dd‰g ‰ ‡ ‡fdd„}|ˆ_|  tˆj¡ |  ˆj¡ |  ˆj	j¡ |  ˆ ¡ |  
ˆ d ¡ |  
ˆ d ¡ dd„ ˆ_d S )	NrÓ   r"   c                      s    ˆj ˆjj gˆ d d …< tƒ ‚d S r3   )rl   rŸ   rm   r   ©rl   r5  r   r   rH  Í  s    z>TextIOWrapperTest.test_flush_error_on_close.<locals>.bad_flushr   rD   c                   S   s   d S r3   r   r   r   r   r   rI  ×  rN   z=TextIOWrapperTest.test_flush_error_on_close.<locals>.<lambda>)rÕ   rÍ   rñ  rf   r   rm   rn   rJ  rl   rŸ   rK  rÊ  r   r’  r   rQ  È  s    
z+TextIOWrapperTest.test_flush_error_on_closec                 C   s¾   |   | j¡}dd„ }dd„ }||_| j|dd}||_|  t¡}| ¡  W d   ƒ n1 s^0    Y  |  |jj	d¡ |  
|jjt¡ |  |jjj	d¡ |  |j¡ d	d
„ |_dd
„ |_d S )Nc                   S   s   t dƒ‚d S rË  r›  r   r   r   r   rH  Û  s    z>TextIOWrapperTest.test_close_error_on_close.<locals>.bad_flushc                   S   s   t dƒ‚d S rÌ  r›  r   r   r   r   rÍ  Ý  s    z>TextIOWrapperTest.test_close_error_on_close.<locals>.bad_closerÓ   r"   rÎ  rÏ  c                   S   s   d S r3   r   r   r   r   r   rI  ê  rN   z=TextIOWrapperTest.test_close_error_on_close.<locals>.<lambda>c                   S   s   d S r3   r   r   r   r   r   rI  ë  rN   )rÍ   rñ  rn   rÕ   rf   r   rm   r›   rk  r}   rÐ  rÑ  rK  rl   ©r1   rŸ   rH  rÍ  r5  rÓ  r   r   r   rÔ  Ù  s    &
z+TextIOWrapperTest.test_close_error_on_closec                 C   sÂ   |   | j¡}dd„ }dd„ }||_| j|dd}||_|  t¡}| ¡  W d   ƒ n1 s^0    Y  |  dt|j	ƒ¡ |  
|j	jt¡ |  dt|j	jƒ¡ |  |j¡ d	d
„ |_dd
„ |_d S )Nc                   S   s   t ‚d S r3   rÕ  r   r   r   r   rH  ð  s    zLTextIOWrapperTest.test_nonnormalized_close_error_on_close.<locals>.bad_flushc                   S   s   t ‚d S r3   r×  r   r   r   r   rÍ  ò  s    zLTextIOWrapperTest.test_nonnormalized_close_error_on_close.<locals>.bad_closerÓ   r"   rØ  rÖ  c                   S   s   d S r3   r   r   r   r   r   rI  ÿ  rN   zKTextIOWrapperTest.test_nonnormalized_close_error_on_close.<locals>.<lambda>c                   S   s   d S r3   r   r   r   r   r   rI     rN   )rÍ   rñ  rn   rÕ   rf   r   rÙ  rÚ  rj  rk  rÐ  rÑ  rK  rl   r“  r   r   r   rÛ  í  s    &
z9TextIOWrapperTest.test_nonnormalized_close_error_on_closec                 C   s@   | j |  | j¡dd}| ¡  | ¡  | ¡  |  t|j¡ d S r}  )rÕ   rÍ   rñ  rn   r   r‹   rf   rq  r   r   r   rR    s
    z"TextIOWrapperTest.test_multi_closec                 C   s8   |   |  | j¡¡}|  | j|j¡ |  | j|jd¡ d S r+   )rÕ   rw   rñ  r   r{   rB   rA   rq  r   r   r   rÞ  	  s    z!TextIOWrapperTest.test_unseekablec                 C   sV   | j |  | j¡dd}|  | j¡}|  t¡ ||_W d   ƒ n1 sH0    Y  d S r}  )rÕ   rÍ   rñ  r   r  rŸ   )r1   r5  rF   r   r   r   rà    s    z*TextIOWrapperTest.test_readonly_attributesc                 C   sX   |   g d¢¡}| j|ddd}|  | d¡d¡ |  | ¡ d¡ |  t|ƒdd	g¡ d S )
N©rS  rB  s   ghi
jkl
opq
rÓ   r  rõ  r÷   Zabcdzefghi
zjkl
zopq
)rM   rÕ   r›   rQ   r´   r,   ©r1   r:  r5  r   r   r   Ú
test_rawio  s
    zTextIOWrapperTest.test_rawioc                 C   sV   |   g d¢¡}| j|dddd}| d¡ | d¡ | d¡ |  d	 |j¡d
¡ d S )Nr”  rÓ   r  T)r#   ry  rþ  Ú1z23
4Ú5rN   s   123
45)rM   rÕ   r6   r›   r„   r.   r•  r   r   r   Útest_rawio_write_through  s    
ÿ


z*TextIOWrapperTest.test_rawio_write_throughc                    s¼   g g  ‰ ‰G ‡ ‡fdd„d| j ƒ}|  ¡ }d}||t|ƒd ƒ}| j|ddd}| d¡}| |¡ |  ˆ ¡ |  ˆ¡ |  | 	¡ d¡ g ‰| |d	 ¡ |  ˆ¡ |  | 	¡ |d
 ¡ d S )Nc                       s,   e Zd Z‡ ‡fdd„Z‡ ‡fdd„Z‡  ZS )zBTextIOWrapperTest.test_bufio_write_through.<locals>.BufferedWriterc                    s   ˆ  d¡ tƒ j|i |¤ŽS r7   r  ©r1   r}   rL  )rZ   Úflush_calledr   r   rf   .  s    
zHTextIOWrapperTest.test_bufio_write_through.<locals>.BufferedWriter.flushc                    s   ˆ  d¡ tƒ j|i |¤ŽS r7   )r4   rX   r6   rš  )rZ   Úwrite_calledr   r   r6   1  s    
zHTextIOWrapperTest.test_bufio_write_through.<locals>.BufferedWriter.write)r   r   r   rf   r6   r\   r   ©r›  rœ  rY   r   rÊ   -  s   rÊ   rõ  rW   rÓ   T)r#   rþ  rN   r¥   rž  )
rÊ   rÍ   r   rÕ   rÙ  r6   rK  rJ  r›   r  )r1   rÊ   r[  r   r±  r-  rŽ  r   r  r   Útest_bufio_write_through)  s"    
ÿ




z*TextIOWrapperTest.test_bufio_write_throughc                 C   s  |   g ¡}| j|ddd}| d¡ |jdd |  |jd¡ |  d |j¡d¡ | d	¡ |  d |j¡d
¡ |jdd |  |jd¡ | d¡ | ¡  |  d |j¡d¡ | ¡  |jd d |  |jd¡ |jdd | ¡  |jd d |  |jd¡ d S )NrÓ   r  rõ  r—  T)rþ  rN   r¾  Z23r«  FZ45r{  )	rM   rÕ   r6   r  r›   rþ  r„   r.   rf   r   r   r   r   Útest_reconfigure_write_throughI  s(    



z0TextIOWrapperTest.test_reconfigure_write_throughc                 C   s`   |   |  d¡¡}|  t|jd¡ |   |  d¡¡}|  t|j¡ |   |  d¡¡}|  t|j¡ d S )Nr  rD   )rÕ   rß   r   rž   rQ   r´   rú  r   r   r   Útest_read_nonbytes`  s    z$TextIOWrapperTest.test_read_nonbytesc                 C   s`   t  d¡}t |dd¡$ tjt d¡dd}W d   ƒ n1 sB0    Y  |  t|j	d¡ d S )NÚrot13Ú_is_text_encodingTó   foor"   Zbar)
rÉ  rä  r   rÅ  r   rÕ   rÍ   r   rž   r6   )r1   r¡  rs  r   r   r   Útest_illegal_encoderj  s    
2z&TextIOWrapperTest.test_illegal_encoderc                    s¢   ‡fdd„‰ ˆ ƒ }ˆ  t|jd¡ ˆ ƒ }ˆ  t|j¡ ˆ ƒ }ˆ  t|j¡ ‡ fdd„}|dƒ}ˆ  t|jd¡ |dƒ}ˆ  t|jd¡ |dƒ}ˆ  t|jd¡ d S )	Nc                     s>   t  d¡} d| _z ˆ jˆ  d¡ddd}W d| _nd| _0 |S )NÚquopriTs   aaaaaar  r*  F)rÉ  rä  r¢  rÕ   rÍ   )r¥  rs  r8   r   r   Ú_make_illegal_wrapperu  s    
ÿzETextIOWrapperTest.test_illegal_decoder.<locals>._make_illegal_wrapperrD   c                    s`   G ‡fdd„dƒ‰ ‡ fdd„}t  d¡}t |d|¡ ˆƒ W  d   ƒ S 1 sR0    Y  d S )Nc                       s   e Zd Z‡ fdd„ZdS )z^TextIOWrapperTest.test_illegal_decoder.<locals>._make_very_illegal_wrapper.<locals>.BadDecoderc                    s   ˆ S r3   r   r8   ©Úgetstate_ret_valr   r   rÏ  ‹  s    zgTextIOWrapperTest.test_illegal_decoder.<locals>._make_very_illegal_wrapper.<locals>.BadDecoder.getstateN)r   r   r   rÏ  r   r§  r   r   Ú
BadDecoderŠ  s   r©  c                    s   ˆ ƒ S r3   r   )rÀ  )r©  r   r   Ú_get_bad_decoder  s    zdTextIOWrapperTest.test_illegal_decoder.<locals>._make_very_illegal_wrapper.<locals>._get_bad_decoderr¥  râ  )rÉ  rä  r   rÅ  )r¨  rª  r¥  )r¦  )r©  r¨  r   Ú_make_very_illegal_wrapper‰  s    
ÿzJTextIOWrapperTest.test_illegal_decoder.<locals>._make_very_illegal_wrapperr;   r   )rD   rW   )r   rž   rQ   r´   )r1   rs  r«  r   )r¦  r1   r   Útest_illegal_decoderr  s    

z&TextIOWrapperTest.test_illegal_decoderc                 K   s    | j j}dj||d}td|ƒS )Na›  if 1:
            import codecs
            import {iomod} as io

            # Avoid looking up codecs at shutdown
            codecs.lookup('utf-8')

            class C:
                def __init__(self):
                    self.buf = io.BytesIO()
                def __del__(self):
                    io.TextIOWrapper(self.buf, **{kwargs})
                    print("ok")
            c = C()
            )ÚiomodrL  ú-c)r   r   rD  r   )r1   rL  r­  Úcoder   r   r   Ú_check_create_at_shutdownš  s
    òz+TextIOWrapperTest._check_create_at_shutdownc                 C   s>   |   ¡ \}}}|r&|  | j| ¡ ¡ n|  d| ¡  ¡ ¡ d S )NÚok)r°  rÚ  Úshutdown_errorrÙ  r›   Ústrip©r1   ÚrcÚoutrÓ  r   r   r   Ú(test_create_at_shutdown_without_encoding¯  s    z:TextIOWrapperTest.test_create_at_shutdown_without_encodingc                 C   s6   | j ddd\}}}|  |¡ |  d| ¡  ¡ ¡ d S )Nrö  rÈ  r  r±  )r°  rK  r›   rÙ  r³  r´  r   r   r   Ú%test_create_at_shutdown_with_encoding¸  s
    ÿ
z7TextIOWrapperTest.test_create_at_shutdown_with_encodingc                 C   s@   t dƒ}|  |d¡}t| ¡ ƒ ¡ }|  | d¡| d¡¡ d S )Ns   Just some random string
rö  rh  )ÚMemviewBytesIOrÕ   Ú_to_memoryviewr  r/  r›   rQ   rÙ  )r1   r    rs  Z	bytes_valr   r   r   Útest_read_byteslike¾  s    z%TextIOWrapperTest.test_read_byteslikec              	   C   sd   G dd„ dt ƒ}tdƒD ],}z| j|ƒ dd W q tyB   Y q0 qdd„ |_| j|ƒ dd}d S )Nc                   @   s$   e Zd Zdd„ Zdd„ Zdd„ ZdS )z,TextIOWrapperTest.test_issue22849.<locals>.Fc                 S   s   dS r7   r   r8   r   r   r   r=   Ë  rN   z5TextIOWrapperTest.test_issue22849.<locals>.F.readablec                 S   s   dS r7   r   r8   r   r   r   r9   Ì  rN   z5TextIOWrapperTest.test_issue22849.<locals>.F.writablec                 S   s   dS r7   r   r8   r   r   r   r>   Í  rN   z5TextIOWrapperTest.test_issue22849.<locals>.F.seekableN)r   r   r   r=   r9   r>   r   r   r   r   ÚFÊ  s   r¼  r¥   rö  r"   c                 S   s   dS r+   r   ©rß  r   r   r   rI  Õ  rN   z3TextIOWrapperTest.test_issue22849.<locals>.<lambda>)Úobjectr.  rÕ   r  rB   )r1   r¼  r+  rs  r   r   r   Útest_issue22849É  s    
z!TextIOWrapperTest.test_issue22849c                 C   s²   d  d¡d  d¡ }|  |¡}| j|ddd}|  | ¡ d¡ |  | j¡ |jdd W d   ƒ n1 sl0    Y  |  | j¡ |jd d	 W d   ƒ n1 s¤0    Y  d S )
Nõ   abcÃ©
rç  õ   dÃ©f
Úutf8r  rõ  rö  r"   rx  )rÞ  rÍ   rÕ   r›   r´   r   r{   r  )r1   r   r:  r5  r   r   r   Útest_reconfigure_encoding_readØ  s    
*z0TextIOWrapperTest.test_reconfigure_encoding_readc                 C   sT   |   ¡ }| j|ddd}| d¡ |jdd | d¡ | ¡  |  | ¡ d¡ d S )	NrÓ   r  rõ  zfoo
r€  r"   rø  s   foo
Ã©
)rÍ   rÕ   r6   r  rf   r›   r  r•  r   r   r   Ú test_reconfigure_write_fromasciiä  s    

z2TextIOWrapperTest.test_reconfigure_write_fromasciic                 C   s´   |   ¡ }| j|ddd}| d¡ |jdd |  | ¡ d¡ | d¡ | ¡  |  | ¡ d	¡ |   ¡ }| j|d
dd}| d¡ |jdd | d¡ | ¡  |  | ¡ d¡ d S )Nrç  r  rõ  rÀ  rö  r"   s   abcé
rÁ  s
   abcé
dÃ©f
rÓ   úabc
r€  s	   abc
dÃ©f
)rÍ   rÕ   r6   r  r›   r  rf   r•  r   r   r   Útest_reconfigure_writeð  s    



z(TextIOWrapperTest.test_reconfigure_writec                 C   sd   |   ¡ }dd„ |_d |_| j|ddd}| d¡ |jdd | d	¡ | ¡  |  | ¡ d
¡ d S )Nc                   S   s   dS rx   r   r   r   r   r   rI    rN   zGTextIOWrapperTest.test_reconfigure_write_non_seekable.<locals>.<lambda>rÓ   r  rõ  rÅ  r€  r"   rÁ  s   abc
ï»¿dÃ©f
)	rÍ   r>   rA   rÕ   r6   r  rf   r›   r  r•  r   r   r   Ú#test_reconfigure_write_non_seekable  s    


z5TextIOWrapperTest.test_reconfigure_write_non_seekablec                 C   sî   |   |  ¡ ddd¡}|jd d |  |jd¡ |  |jd¡ | d¡ |jdd |  |jd¡ |  |jd¡ |jdd	 |  |jd¡ |  |jd¡ | d
¡ |jdd d |  |jd¡ | d¡ |  | ¡ d¡ |  | 	¡  
¡ d¡ d S )NrÓ   r  r  r"   úLF
rô  rx  rë   r‹  úCRLF
rö  rõ  rÈ  r   zLF
CRLF
s	   LF
CRLF
)rÕ   rÍ   r  r›   r#   r  r6   rA   rQ   r¬  r  rq  r   r   r   Útest_reconfigure_defaults  s"    


z+TextIOWrapperTest.test_reconfigure_defaultsc                 C   s¼  |   d¡}| j|ddd}|jd d |  | ¡ d¡ |   d¡}| j|ddd}|jdd |  | ¡ d¡ |   d¡}| j|dd	d}|jdd |  | ¡ d
¡ |   d¡}| j|ddd}|jd	d |  | ¡ d¡ |   d¡}| j|dd	d}|jdd |  | ¡ d¡ | j|   ¡ dd	d}|jd d | d¡ |jdd | d¡ |jdd | d¡ |jd	d | d¡ |jdd | d¡ dtj d }|  | ¡  	¡  
d¡|¡ d S )Ns   CREOFrÓ   r  rx  zCR
r  zCRs	   CRLF
EOFr#  zCRLF
s	   LF
CREOFzLF
CRs   CRCRLF
EOFrô  z	CRCRLF
zlinesep
rÈ  rÉ  r7  zLF
LF
CRCRLF
)rÍ   rÕ   r  r›   r´   r6   r¼   r7  r¬  r  rÙ  )r1   r:  r5  r»  r   r   r   Útest_reconfigure_newline)  sB    









z*TextIOWrapperTest.test_reconfigure_newlinec                 C   sb   | j |  d¡dd}| d¡ | ¡  | ¡  | j |  d¡dd}| d¡ | d¡ | ¡  d S )Ns   testrÓ   r"   rD   rß  )rÕ   rÍ   rQ   rB   r6   rú  r   r   r   Útest_issue25862M  s    


z!TextIOWrapperTest.test_issue25862N)Tr   r   r   r“   r”   rî  rò  rý  r¯  rÃ  rÈ  r  r  ÚunittestÚskipIfrå   r`  Ú	utf8_moder  r   ré  r  r  r  r  r/  r6  r:  r  rµ  r¿  rM  rI  rU  rZ  r[  rŸ  rd  rg  rh  rj  rn  r  rr  ra  rb  rd  ru  rw  rz  r{  r|  r~  r‡  r‰  rŠ  rŒ  Ú
no_tracingr‘  rQ  rÔ  rÛ  rR  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ð  ø	  sš   	

		*/
	


 
(	$rð  c                       s,   e Zd ZdZ‡ fdd„Z‡ fdd„Z‡  ZS )r¹  zOA BytesIO object whose read method returns memoryviews
       rather than bytesc                    s   t tƒ  |¡ƒS r3   )rº  rX   r~  ©r1   Zlen_rY   r   r   r~  ]  s    zMemviewBytesIO.read1c                    s   t tƒ  |¡ƒS r3   )rº  rX   rQ   rÑ  rY   r   r   rQ   `  s    zMemviewBytesIO.read)r   r   r   rJ   r~  rQ   r\   r   r   rY   r   r¹  Y  s   r¹  c                 C   s:   t   d¡}t| ƒt| ƒ|j  }| | d|… ¡ t|ƒS )z6Convert bytes-object *buf* to a non-trivial memoryviewr+  N)r   r   ÚitemsizeÚ	frombytesr   )rF   ZarrÚidxr   r   r   rº  c  s    
rº  c                   @   s<   e Zd ZeZdZdd„ Zdd„ Zdd„ Zdd	„ Zd
d„ Z	dS )ÚCTextIOWrapperTestú$LookupError: unknown encoding: asciic                 C   sb   |   d¡}|  |d¡}|  |¡}| jt|j|dd |  t|j¡ | j | j¡}|  tt	|¡ d S )Nró  r  rº  rx  )
rÍ   rÈ   rÕ   r   r‹   r2   rQ   rñ  r  r­  rù  r   r   r   r9  p  s    

z&CTextIOWrapperTest.test_initializationc                 C   sÈ   t  dtf¡Z t t jd¡}|  |¡}| j|dd}| d¡ ||_	t
 |¡}~t  ¡  W d   ƒ n1 sn0    Y  |  |ƒ |¡ |  t jd¡ }|  | ¡ d¡ W d   ƒ n1 sº0    Y  d S )Nr  r°   rÓ   r"   Z456defr³   s   456def)r   r  r  r   r¾   r’   rÊ   rÕ   r6   rß  r<  r=  r  r>  r$   r›   rQ   )r1   r[  r   rs  r?  r(   r   r   r   r@  z  s    


&z*CTextIOWrapperTest.test_garbage_collectionc                 C   sj   t dƒD ]T}|  |  ¡ |  ¡ ¡}| j|dd}|  |  ¡ |  ¡ ¡}| j|dd}||_||_qt ¡  d S )Nr  rÓ   r"   )r.  rÏ   rM   rÕ   Zbuddyr   r  )r1   r+  Úb1Út1Úb2Út2r   r   r   Ú!test_rwpair_cleared_before_textio‹  s    z4CTextIOWrapperTest.test_rwpair_cleared_before_textioc                 C   sD   | j |  ¡ dd}|  t¡ |`W d   ƒ n1 s60    Y  d S r}  )rÕ   rÍ   r   r  r&   rú  r   r   r   Ú test_del__CHUNK_SIZE_SystemError™  s    z3CTextIOWrapperTest.test_del__CHUNK_SIZE_SystemErrorc                    sÖ   d‰ G ‡ fdd„d| j ƒ}|ƒ }| j|dd}|j‰ | d¡ | d¡ |  g |j¡ |  t¡" | dˆ d	  ¡ W d   ƒ n1 sˆ0    Y  |  d
g|j¡ | d¡ | dˆ  ¡ |  d
ddˆ  g|j¡ d S )Nrã  c                       s   e Zd Z‡ ‡fdd„Z‡  ZS )z<CTextIOWrapperTest.test_internal_buffer_size.<locals>.MockIOc                    s   t |ƒˆkrt‚tƒ  |¡S r3   )r   rÆ  rX   r6   rs   )rZ   rW  r   r   r6   ¤  s    zBCTextIOWrapperTest.test_internal_buffer_size.<locals>.MockIO.write)r   r   r   r6   r\   r   ©rW  rY   r   ÚMockIO£  s   rÞ  rÓ   r"   rc  rG  rß  rD   rD  Zghir@  r¤   )rM   rÕ   r&   r6   r›   r.   r   rÆ  )r1   rÞ  rF   rs  r   rÝ  r   Útest_internal_buffer_sizež  s    

0
z,CTextIOWrapperTest.test_internal_buffer_sizeN)
r   r   r   r   r²  r9  r@  rÛ  rÜ  rß  r   r   r   r   rÕ  l  s   
rÕ  c                   @   s   e Zd ZeZdZdS )ÚPyTextIOWrapperTestrÖ  N)r   r   r   r   r   r²  r   r   r   r   rà  º  s   rà  c                   @   s4   e Zd Zdd„ Zdd„ Zdd„ Zdd„ Zd	d
„ ZdS )ÚIncrementalNewlineDecoderTestc                    s  ‡ ‡fdd„}|ddƒ |ddƒ |ddƒ |ddƒ |ddƒ |ddƒ |ddƒ |ddƒ ˆj tˆ jd	d
d ˆ  ¡  |ddƒ |ddƒ |d	dd
d |ddd
d |ddƒ |ddƒ |ddƒ |ddƒ |ddƒ |ddƒ |ddƒ |ddƒ |ddƒ |ddƒ |ddƒ d S )Nc                    sJ   ˆ   ¡ }ˆ ˆ j| fi |¤Ž|¡ ˆ  |¡ ˆ ˆ j| fi |¤Ž|¡ d S r3   )rÏ  r›   rÙ  rÒ  )r   r…   rL  rÑ  ©Údecoderr1   r   r   Ú_check_decodeÃ  s    
zPIncrementalNewlineDecoderTest.check_newline_decoding_utf8.<locals>._check_decodes   è¢ˆu   è¢ˆó   èr  ó   ¢ó   ˆrN   T)r×  rÃ  r  r0  rõ  z
aó   
z

s   
as   è¢ˆ
rV  s   è¢ˆ)r   ÚUnicodeDecodeErrorrÙ  rË  )r1   rã  rä  r   râ  r   Úcheck_newline_decoding_utf8Á  s4    



















z9IncrementalNewlineDecoderTest.check_newline_decoding_utf8c                    s  g ‰|d ur*t  |¡ƒ ‰‡ ‡‡fdd„}nd ‰‡ ‡fdd„}|  ˆ jd ¡ |dƒ |  ˆ jd¡ |dƒ |  ˆ jd¡ |dƒ |  ˆ jd¡ |d	ƒ |  ˆ jd
¡ |dƒ |  d ˆ¡d¡ ˆ  ¡  d	}ˆd urâˆ ¡  ˆ |¡}|  ˆ  |¡d	¡ |  ˆ jd ¡ d S )Nc                    s*   ˆ  | ¡D ]}ˆ ˆ  t|gƒ¡¡ q
d S r3   )rÞ  r4   rÙ  r   )r…   r   ©rã  Úencoderr‘  r   r   Ú_decode_bytewiseï  s    zNIncrementalNewlineDecoderTest.check_newline_decoding.<locals>._decode_bytewisec                    s   | D ]}ˆ  ˆ  |¡¡ qd S r3   )r4   rÙ  )r…   r*  )rã  r‘  r   r   rí  õ  s    zabc
r  z
abc)r  rô  zabcrc  )r#  r  rô  r  zabc

abcabc
abcabc)rÉ  Úgetincrementalencoderr›   Únewlinesr„   rË  rÞ  rÙ  )r1   rã  r#   rí  rÖ  r   rë  r   Úcheck_newline_decodingë  s0    
z4IncrementalNewlineDecoderTest.check_newline_decodingc                 C   sp   d}|D ].}|ot  |¡ƒ }| j|dd}|  ||¡ qt  d¡ƒ }| j|dd}|  |¡ |  t|jd¡ d S )N)	Nrö  r!   r$  r%  r&  r'  r(  r)  T©Ú	translaterö  r;   )rÉ  ÚgetincrementaldecoderÚIncrementalNewlineDecoderrð  rê  r   rž   rÒ  )r1   r,  rK  rã  r   r   r   Útest_newline_decoder  s    
z2IncrementalNewlineDecoderTest.test_newline_decoderc                    s<   ‡ fdd„}ˆ j d dd}||ƒ ˆ j d dd}||ƒ d S )Nc                    sR   ˆ   | jd ¡ ˆ   |  d¡d¡ ˆ   | jd ¡ ˆ   |  d¡d¡ ˆ   | jd ¡ d S )Nu   à´€u   à¨€)r›   rï  rÙ  )Údecr8   r   r   Ú_check  s
    z@IncrementalNewlineDecoderTest.test_newline_bytes.<locals>._checkFrñ  T)rô  )r1   r÷  rö  r   r8   r   Útest_newline_bytes  s
    z0IncrementalNewlineDecoderTest.test_newline_bytesc                 C   s\   dD ]&}t  d¡ƒ }|  ||¡}|  |¡ qt  d¡ƒ }| j|dd}|  | d¡d¡ d S )N)ro  r‰   rD   rW   rö  r   rñ  rè  z
)rÉ  ró  rô  rê  r›   rÙ  )r1   rò  rã  r   r   r   Útest_translate*  s    z,IncrementalNewlineDecoderTest.test_translateN)r   r   r   rê  rð  rõ  rø  rù  r   r   r   r   rá  ¿  s
   *!rá  c                   @   s   e Zd ZdS )ÚCIncrementalNewlineDecoderTestNr   r   r   r   r   rú  4  s   rú  c                   @   s   e Zd ZdS )ÚPyIncrementalNewlineDecoderTestNr   r   r   r   r   rû  7  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d„ Zdd„ Zdd„ Zdd„ Zdd„ Zdd „ Zd!d"„ Ze eed#ƒd$¡d%d&„ ƒZd'd(„ Zd)d*„ Zd+d,„ Zd-d.„ Zd/S )0Ú
MiscIOTestc                 C   s   t  t j¡ d S r3   r   r8   r   r   r   r”   ?  s    zMiscIOTest.tearDownc                 C   s|   | j jD ]n}t| j |d ƒ}|  ||¡ |dv r2qqd| ¡ v sF|dkrZ|  t|tƒ|¡ q| d¡s|  t|| j	ƒ¡ qd S )N)r$   Ú	open_codeÚerrorr{   ZSEEK_)
r   Ú__all__r  r  ÚlowerrJ  Ú
issubclassr  rç   rú   )r1   r˜  r   r   r   r   Útest___all__B  s    
zMiscIOTest.test___all__c                 C   s|  | j tjddd}|  |jd¡ | ¡  t dtf¡ |   tjd¡}W d   ƒ n1 sZ0    Y  |  |jtj¡ |  |j	jtj¡ |  |j	j
jtj¡ |  |jd¡ |  |j	jd¡ |  |j	j
jd¡ | ¡  |   tjd¡}|  |jd¡ |  |j	jd¡ |  |j	j
jd¡ | j | ¡ dd	d
}|  |jd¡ |  |j
jd¡ |  |j| ¡ ¡ |  |j
j| ¡ ¡ | ¡  | ¡  d S )Nr°   r   r±   r  ÚUr³   rE  r—  Fr1  )r$   r   r’   r›   r¹   rn   r  rï   r˜  rŸ   r:  r<   )r1   r(   Úgr   r   r   Útest_attributesM  s.    ,zMiscIOTest.test_attributesc                 C   sN   t  ¡ \}}|  t j|¡ |  |d¡}|  |j¡ tjdkrJ|  | ¡ ¡ d S )Nr  Úwin32)	r¼   r½   rÃ   rn   r$   rå   ræ   rK  r>   )r1   r    r¯   r(   r   r   r   Útest_open_pipe_with_appendi  s    
z%MiscIOTest.test_open_pipe_with_appendc                 C   s  ddiddidddœdddœdddœddidd	idddœdddœd	ddœdd
iddid
ddœd
ddœdddœfD ]œ}| j tjfi |¤Ž}| ¡  |  t|j¡ |  t|j¡ |  t|j¡ |  t|j	¡ t
|dƒrä|  t|jd¡ |  t|j¡ t
|dƒr|  t|jd¡ |  t|j¡ t
|dƒr6|  t|j¡ t
|dƒrV|  t|jtdƒ¡ t
|dƒrv|  t|jtdƒ¡ |  t|j¡ |  t|j¡ |  t|jd¡ |  t|jd¡ |  t|j¡ |  t|j¡ |  t|jd|d v rêdnd¡ |  t|jg ¡ |  tt|¡ qpd S )Nr¹   r¯   r°   rD   ©r¹   r²   rW   r   r    r³   rE  r  rþ  r~  rë  r  rH   r¦   r   rN   r  )r$   r   r’   rn   r   r‹   rf   r<   r  Ú__iter__r^  rþ  rQ   r~  r  rH   rœ   r¦   r´   r   rA   rB   rI   r6   rµ   rü   )r1   rL  r(   r   r   r   Útest_io_after_closet  sZ    ñ


ÿzMiscIOTest.test_io_after_closec                 C   sX   G dd„ dt ƒ}|dƒ}|  d|¡}||_||_t |¡}~~t ¡  |  |ƒ |¡ d S )Nc                   @   s   e Zd ZdS )z*MiscIOTest.test_blockingioerror.<locals>.CNr   r   r   r   r   ÚC¥  s   r  r  rD   )	rj  r   r   r*  r<  r=  r   r  r>  )r1   r  r*  r   r?  r   r   r   Útest_blockingioerror£  s    
zMiscIOTest.test_blockingioerrorc                 C   sD   |   | jtj¡ |   | jtj¡ |   | jtj¡ |   | jtj¡ d S r3   )rÐ  rú   rc  ÚABCMetarã   rÑ   râ   r8   r   r   r   Ú	test_abcs°  s    zMiscIOTest.test_abcsc                 C   s<  | j tjdddH}|  ||j¡ |  ||j¡ |  ||j¡ |  ||j¡ W d   ƒ n1 s`0    Y  |   tjd¡H}|  ||j¡ |  ||j¡ |  ||j¡ |  ||j¡ W d   ƒ n1 sÆ0    Y  |   tjd¡H}|  ||j¡ |  ||j¡ |  ||j¡ |  ||j¡ W d   ƒ n1 s.0    Y  d S ©Nr°   r   r±   r¯   )	r$   r   r’   rÐ  rú   rã   ZassertNotIsInstancerÑ   râ   )r1   Z	abcmoduler(   r   r   r   Ú_check_abc_inheritance·  s    ,,z!MiscIOTest._check_abc_inheritancec                 C   s   |   | ¡ d S r3   )r  r8   r   r   r   Útest_abc_inheritanceÈ  s    zMiscIOTest.test_abc_inheritancec                 C   s   |   t¡ d S r3   )r  r   r8   r   r   r   Útest_abc_inheritance_officialÌ  s    z(MiscIOTest.test_abc_inheritance_officialc                 O   sh   t |i |¤Ž}t|ƒ}|  t¡}d }t ¡  W d   ƒ n1 sB0    Y  |  |t|jj	d ƒ¡ d S r+   )
r$   r­  ZassertWarnsr  r   r  rÚ  rj  Úwarningr}   )r1   r}   rL  r(   r    rm  r   r   r   Ú_check_warn_on_deallocÑ  s    &z!MiscIOTest._check_warn_on_deallocc                 C   s2   | j tjddd |   tjd¡ |   tjd¡ d S r  )r  r   r’   r8   r   r   r   Útest_warn_on_deallocÙ  s    zMiscIOTest.test_warn_on_deallocc                    sª   g ‰ ‡ fdd„}|   |¡ t ¡ \}}ˆ ||f7 ‰ | j|g|¢R i |¤Ž t ¡ \}}ˆ ||f7 ‰ t | ¡* t|g|¢R ddi|¤Ž W d   ƒ n1 sœ0    Y  d S )Nc                     sP   ˆ D ]F} zt  | ¡ W q tyH } z|jtjkr4‚ W Y d }~qd }~0 0 qd S r3   )r¼   rn   rm   ÚerrnoÚEBADF)rP  r  ©Úfdsr   r   Úcleanup_fdsà  s    z9MiscIOTest._check_warn_on_dealloc_fd.<locals>.cleanup_fdsr2  F)rÃ   r¼   r½   r  r   ru  r$   )r1   r}   rL  r  r    r¯   r   r  r   Ú_check_warn_on_dealloc_fdÞ  s    
z$MiscIOTest._check_warn_on_dealloc_fdc                 C   s&   | j ddd |   d¡ |   d¡ d S )Nr³   r   r±   r    )r  r8   r   r   r   Útest_warn_on_dealloc_fdñ  s    
z"MiscIOTest.test_warn_on_dealloc_fdc                 C   s¤   ddiddidddœddiddidddœddidd	id	ddœf	D ]^}t tjd
 ƒD ]J}| jtjfi |¤Ž"}|  ttj||¡ W d   ƒ qR1 s’0    Y  qRq@d S )Nr¹   r¯   r°   r   r  r    r³   rE  r  rD   )	r.  ÚpickleÚHIGHEST_PROTOCOLr$   r   r’   r   rž   Údumps)r1   rL  Úprotocolr(   r   r   r   Útest_pickling÷  s    ÷zMiscIOTest.test_picklingc                 C   s   |   d¡ d S )Ni @  ©Ú_test_nonblock_pipe_writer8   r   r   r   Útest_nonblock_pipe_write_bigbuf  s    z*MiscIOTest.test_nonblock_pipe_write_bigbufc                 C   s   |   d¡ d S )Nrë  r"  r8   r   r   r   Ú!test_nonblock_pipe_write_smallbuf  s    z,MiscIOTest.test_nonblock_pipe_write_smallbufÚset_blockingz(os.set_blocking() required for this testc                 C   sF  g }g }t  ¡ \}}t  |d¡ t  |d¡ | j|dd|d}| j|dd|d}|  |x dD ]Î}z<d}	t|	d d	 gƒ| }
| |
¡ | |
¡ |	d
7 }	qnW qd | jy0 } zp|  |j	d t
j¡ |  |j	d |j¡ |d d |j… |d< | | ¡ ¡ d}
| |
¡ | |
¡ W Y d }~qdd }~0 0 qdz| ¡  W q¸W nl | jy² } zP|  |j	d t
j¡ |  |j	d |j¡ |  |jd¡ | | ¡ ¡ W Y d }~n
d }~0 0 q4|t|jd ƒ7 }W d   ƒ n1 sÞ0    Y  W d   ƒ n1 sþ0    Y  d |¡d |¡ }}|  ||¡ |  |j¡ |  |j¡ d S )NFr³   T)r¹   r2  r²   r°   )r£  éI   i–  r   é   éa   rD   rW   r‰   s   BLOCKEDrN   )r¼   r½   r&  r$   r   r4   r6   r   r›   r}   r  ÚEAGAINrW  rQ   rf   Úiterr„   rJ  rl   )r1   r  ÚsentZreceivedr    r¯   ZrfZwfr'  r+  r¤  r  r   r   r   r#    sH    


"
(Pz$MiscIOTest._test_nonblock_pipe_writec                 C   sF   |   tjd¡ W d   ƒ n1 s$0    Y  |  t| j tjd¡ d S )Nr¯   rß  )r$   r   r’   r   ÚFileExistsErrorr8   r   r   r   Útest_create_failB  s    zMiscIOTest.test_create_failc                 C   sz   |   tjd¡}| d¡ W d   ƒ n1 s.0    Y  |   tjd¡ }|  d| ¡ ¡ W d   ƒ n1 sl0    Y  d S )NÚxbrp  r³   r)  r­   r   r   r   Útest_create_writesH  s    (zMiscIOTest.test_create_writesc                 C   s   |   t| jtjd¡ d S )Nzrwax+r3  r8   r   r   r   Útest_open_allargsO  s    zMiscIOTest.test_open_allargsc                 C   sn   | j j}t}d}t d|› d|›d|›d|›d|›d|›d|›d	|›d
¡}tddd|ƒ}|  |jd|¡ d S )NzBoom, Shaka Laka, Boom!z)
            import sys
            from zC import open, TextIOWrapper

            try:
                open(z, encoding=z)
            except LookupError:
                pass
            else:
                sys.exit(21)

            try:
                open(z	, errors=z})
            except LookupError:
                pass
            else:
                sys.exit(22)

            fp = open(za, "rb")
            with fp:
                try:
                    TextIOWrapper(fp, encoding=z¹)
                except LookupError:
                    pass
                else:
                    sys.exit(23)

                try:
                    TextIOWrapper(fp, errors=z˜)
                except LookupError:
                    pass
                else:
                    sys.exit(24)

            sys.exit(10)
        z-XÚdevr®  r¥   )r   r   r%   ÚtextwrapÚdedentr   r›   rµ  )r1   Úmodr…  rw  r¯  Úprocr   r   r   Útest_check_encoding_errorsS  s,    þûûôôîëä
$z%MiscIOTest.test_check_encoding_errorsN)r   r   r   r”   r  r  r  r
  r  r  r  r  r  r  r  r  r  r!  r$  r%  rÍ  Z
skipUnlessr^  r¼   r#  r.  r0  r1  r7  r   r   r   r   rü  =  s2   /ÿ
2rü  c                   @   s0   e Zd ZeZdd„ Zdd„ Zdd„ Zdd„ Zd	S )
ÚCMiscIOTestc                 C   s6   G dd„ d| j jƒ}|ƒ }tdƒ}|  t|j|¡ d S )Nc                   @   s   e Zd Zddd„ZdS )z<CMiscIOTest.test_readinto_buffer_overflow.<locals>.BadReaderr‰   c                 S   s   dd S )Nr¤   i@B r   rP   r   r   r   rQ   ‡  s    zACMiscIOTest.test_readinto_buffer_overflow.<locals>.BadReader.readN)r‰   rR   r   r   r   r   Ú	BadReader†  s   r9  rW   )r   rÑ   rœ   r   r‹   rH   )r1   r9  r±  r   r   r   r   Útest_readinto_buffer_overflow„  s    z)CMiscIOTest.test_readinto_buffer_overflowc                 C   s\   d  tƒ ¡}td|ƒ\}}|j ¡ }|jdkrHd  tƒ ¡}|  ||¡ n|  | d¡¡ d S )Na‰  if 1:
            import sys
            import time
            import threading
            from test.support import SuppressCrashReport

            file = sys.{stream_name}

            def run():
                while True:
                    file.write('.')
                    file.flush()

            crash = SuppressCrashReport()
            crash.__enter__()
            # don't call __exit__(): the crash occurs at Python shutdown

            thread = threading.Thread(target=run)
            thread.daemon = True
            thread.start()

            time.sleep(0.5)
            file.write('!')
            file.flush()
            r®  r   z¬Fatal Python error: _enter_buffered_busy: could not acquire lock for <(_io\.)?BufferedWriter name='<{stream_name}>'> at interpreter shutdown, possibly due to daemon threadsz.!)	Ú
format_mapÚlocalsr	   rÓ  rÙ  rµ  rÂ  rK  r³  )r1   Zstream_namer¯  rt   ra  rÓ  Úpatternr   r   r   Ú&check_daemon_threads_shutdown_deadlock  s    è

üz2CMiscIOTest.check_daemon_threads_shutdown_deadlockc                 C   s   |   d¡ d S )NÚstdout©r>  r8   r   r   r   Ú,test_daemon_threads_shutdown_stdout_deadlock¶  s    z8CMiscIOTest.test_daemon_threads_shutdown_stdout_deadlockc                 C   s   |   d¡ d S )NÚstderrr@  r8   r   r   r   Ú,test_daemon_threads_shutdown_stderr_deadlock¹  s    z8CMiscIOTest.test_daemon_threads_shutdown_stderr_deadlockN)r   r   r   r   r:  r>  rA  rC  r   r   r   r   r8    s
   	)r8  c                   @   s   e Zd ZeZdS )ÚPyMiscIOTestN)r   r   r   r   r   r   r   r   r   rD  ½  s   rD  Úntz%POSIX signals required for this test.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	e
j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 )"ÚSignalsTestc                 C   s   t   t j| j¡| _d S r3   )ÚsignalÚSIGALRMÚalarm_interruptÚoldalrmr8   r   r   r   r“   Ä  s    zSignalsTest.setUpc                 C   s   t   t j| j¡ d S r3   )rG  rH  rJ  r8   r   r   r   r”   Ç  s    zSignalsTest.tearDownc                 C   s   dd  d S rC   r   )r1   ÚsigÚframer   r   r   rI  Ê  s    zSignalsTest.alarm_interruptc           
         sà  t  ¡  g ‰‡ ‡fdd„}tj|d}d|_t ¡ \‰ }d|d< |t jt|ƒ d  }z(| j	j
|fi |¤Ž}ttdƒr¦t tjtjg¡ | ¡  t tjtjg¡ n| ¡  t d¡ z&|  t|j|¡ W t d	¡ | ¡  nt d	¡ | ¡  0 ˆ t ˆ d¡¡ |  ˆ|d	d… |dd
… g¡ W t |¡ t ˆ ¡ z| ¡  W n6 ty~ }	 z|	jtjkrj‚ W Y d}	~	n
d}	~	0 0 nZt |¡ t ˆ ¡ z| ¡  W n6 tyØ }	 z|	jtjkrÄ‚ W Y d}	~	n
d}	~	0 0 0 dS )zCheck that a partial write, when it gets interrupted, properly
        invokes the signal handler, and bubbles up the exception raised
        in the latter.c                     s   t  ˆ d¡} ˆ | ¡ d S rj   )r¼   rQ   r4   )r…   ©r    Úread_resultsr   r   r®  ë  s    z2SignalsTest.check_interrupted_write.<locals>._readr  TFr2  rD   Úpthread_sigmaskr   rW   N)r   r  r`   rÄ   Údaemonr¼   r½   ÚPIPE_MAX_SIZEr   r   r$   r^  rG  rO  Ú	SIG_BLOCKrH  rÅ   ÚSIG_UNBLOCKÚalarmr   r  r6   r„   r4   rQ   r›   rn   rm   r  r  )
r1   Úitemr   Úfdopen_kwargsr®  rs  r¯   Ú
large_dataÚwior  r   rM  r   Úcheck_interrupted_writeÍ  sL    



ÿ

"

÷

z#SignalsTest.check_interrupted_writec                 C   s   | j ddddd d S )Nrö   r°   r   r  ©rY  r8   r   r   r   Ú!test_interrupted_write_unbuffered  s    z-SignalsTest.test_interrupted_write_unbufferedc                 C   s   | j dddd d S ©Nrö   r°   ©r¹   rZ  r8   r   r   r   Útest_interrupted_write_buffered  s    z+SignalsTest.test_interrupted_write_bufferedc                 C   s   | j ddddd d S )NÚxyrö   r¯   rÓ   ©r¹   r#   rZ  r8   r   r   r   Útest_interrupted_write_text   s    z'SignalsTest.test_interrupted_write_textc           	   	      s  ‡ ‡fdd„}t   t j|¡ t ¡ \}}| jj|fi |¤Ž‰z¸t  d¡ |  tt	f¡F}t
dƒD ]}ˆ ˆ ¡ ˆ ¡  q`t |tˆ ƒd ¡ qXW d   ƒ n1 s¢0    Y  |j}t|t	ƒrÖ|  t|ƒ d¡t|ƒ¡ W t  d¡ ˆ ¡  t |¡ nt  d¡ ˆ ¡  t |¡ 0 d S )Nc                     s   ˆ  ˆ ¡ dd  d S rC   )r6   )r}   ©r   rX  r   r   Úon_alarm%  s    
z3SignalsTest.check_reentrant_write.<locals>.on_alarmrD   rÀ   zreentrant callr   )rG  rH  r¼   r½   r   r$   rT  r   r  rÆ  r.  r6   rf   rQ   r   rk  rá   rJ  rj  rç   rn   )	r1   r   rV  rc  r    r¯   rm  r+  r¸   r   rb  r   Úcheck_reentrant_write#  s(    


4

þ
z!SignalsTest.check_reentrant_writec                 C   s   | j ddd d S r\  ©rd  r8   r   r   r   Útest_reentrant_write_buffered?  s    z)SignalsTest.test_reentrant_write_bufferedc                 C   s   | j dddd d S )Nr_  r¯   rÓ   r`  re  r8   r   r   r   Útest_reentrant_write_textB  s    z%SignalsTest.test_reentrant_write_textc              	      sÆ   t  ¡ \}‰ d|d< ‡ fdd„}t tj|¡ zj| jj|fi |¤Ž}t  ˆ d¡ t d¡ |  || 	d¡ƒd¡ W t d	¡ | 
¡  t  
ˆ ¡ t  
|¡ n(t d	¡ | 
¡  t  
ˆ ¡ t  
|¡ 0 d
S )zÇCheck that a buffered read, when it gets interrupted (either
        returning a partial result or EINTR), properly invokes the signal
        handler and retries if the latter returned successfully.Fr2  c                    s   t  ˆ d¡ d S )Ns   bar)r¼   r6   ©rK  rL  ©r¯   r   r   Úalarm_handlerK  s    z?SignalsTest.check_interrupted_read_retry.<locals>.alarm_handlerr£  rD   r•   Zfoobarr   N)r¼   r½   rG  rH  r   r$   r6   rT  r›   rQ   rn   )r1   rÙ  rV  r    rj  Zrior   ri  r   Úcheck_interrupted_read_retryE  s"    


ý

z(SignalsTest.check_interrupted_read_retryc                 C   s   | j dd„ dd d S )Nc                 S   s
   |   d¡S )Nrç  )rÙ  r½  r   r   r   rI  ^  rN   zBSignalsTest.test_interrupted_read_retry_buffered.<locals>.<lambda>r³   r]  ©rk  r8   r   r   r   Ú$test_interrupted_read_retry_buffered]  s    
ÿz0SignalsTest.test_interrupted_read_retry_bufferedc                 C   s   | j dd„ dd d S )Nc                 S   s   | S r3   r   r½  r   r   r   rI  b  rN   z>SignalsTest.test_interrupted_read_retry_text.<locals>.<lambda>r    r]  rl  r8   r   r   r   Ú test_interrupted_read_retry_texta  s    
ÿz,SignalsTest.test_interrupted_read_retry_textc                    sÈ  t  d¡‰t j}t ¡ \‰}d|d< g ‰d‰d‰‡‡‡‡‡fdd„}tj|d‰dˆ_‡ fd	d
„}‡fdd„‰ || }t tj	|¡ zÖ| j
j|fi |¤Ž}t d¡ | |¡}	|  ||	¡ | ¡  d‰ˆ ¡  |  ˆ¡ |  |tdd„ ˆD ƒƒ¡ W t d¡ d‰t |¡ t ˆ¡ z| ¡  W n6 tyX }
 z|
jtjkrD‚ W Y d}
~
n
d}
~
0 0 nht d¡ d‰t |¡ t ˆ¡ z| ¡  W n6 tyÀ }
 z|
jtjkr¬‚ W Y d}
~
n
d}
~
0 0 0 dS )zÈCheck that a buffered write, when it gets interrupted (either
        returning a partial result or EINTR), properly invokes the signal
        handler and retries if the latter returned successfully.ÚselectFr2  Nc               
      sj   z<ˆs:ˆˆ  ˆgg g d¡d v rt ˆd¡} ˆ | ¡ qqW n( tyd } z|‰ W Y d }~n
d }~0 0 d S )Ng      ð?r   rë  )ro  r¼   rQ   r4   ÚBaseException)r…   r¸   )rþ  r    rN  ro  Úwrite_finishedr   r   r®  w  s    z8SignalsTest.check_interrupted_write_retry.<locals>._readr  Tc                    s   t   t jˆ ¡ t  d¡ d S rj   )rG  rH  rT  rh  )Úalarm2r   r   Úalarm1‚  s    z9SignalsTest.check_interrupted_write_retry.<locals>.alarm1c                    s   ˆ   ¡  d S r3   )rÅ   rh  )rs  r   r   rr  …  s    z9SignalsTest.check_interrupted_write_retry.<locals>.alarm2rD   c                 s   s   | ]}t |ƒV  qd S r3   )r   r  r   r   r   Ú	<genexpr>š  rN   z<SignalsTest.check_interrupted_write_retry.<locals>.<genexpr>r   )r   Úimport_modulerQ  r¼   r½   r`   rÄ   rP  rG  rH  r   r$   rT  r6   r›   rf   r„   r>  Úsumrn   rm   r  r  )r1   rU  rV  r'  r¯   r®  rs  rW  rX  rX  r  r   )rr  rþ  r    rN  ro  rs  rq  r   Úcheck_interrupted_write_retrye  sT    
	





õ


z)SignalsTest.check_interrupted_write_retryc                 C   s   | j ddd d S )Nr¤   r°   r]  ©rw  r8   r   r   r   Ú%test_interrupted_write_retry_buffered©  s    z1SignalsTest.test_interrupted_write_retry_bufferedc                 C   s   | j dddd d S )Nrß  r¯   rç  r`  rx  r8   r   r   r   Ú!test_interrupted_write_retry_text¬  s    z-SignalsTest.test_interrupted_write_retry_textN)r   r   r   r“   r”   rI  rY  r[  r^  ra  r   rÐ  rd  rf  rg  rk  rm  rn  rw  ry  rz  r   r   r   r   rF  Á  s"   M
DrF  c                   @   s   e Zd ZeZdS )ÚCSignalsTestN)r   r   r   r   r   r   r   r   r{  °  s   r{  c                   @   s   e Zd ZeZdZdZdS )ÚPySignalsTestN)r   r   r   r   r   rf  rg  r   r   r   r   r|  ³  s   r|  c            
         s   t ttttttttt	t
tttttttttf}ttttttttf}tjdg }dd„ |D ƒ}dd„ |D ƒ}tƒ ‰ | ‡ fdd„|D ƒ¡ | ‡ fdd„|D ƒ¡ t j!|d< |D ]Z}|j" #d	¡rÜ| $¡ D ]\}}t%|||ƒ qÄq¬|j" #d
¡r¬| $¡ D ]\}}t%|||ƒ qðq¬t& 'dd„ |D ƒ¡}	|	S )Nrô  c                 S   s   i | ]}|t t|ƒ“qS r   )r  r   ©r  r˜  r   r   r   Ú
<dictcomp>Ï  rN   zload_tests.<locals>.<dictcomp>c                 S   s   i | ]}|t t|ƒ“qS r   )r  r   r}  r   r   r   r~  Ð  rN   c                 3   s"   | ]}|j ˆ d |j   fV  qdS )r  N©r   r  ©Zglobsr   r   rt  Ò  rN   zload_tests.<locals>.<genexpr>c                 3   s"   | ]}|j ˆ d |j   fV  qdS )ÚPyNr  r  r€  r   r   rt  Ó  rN   r$   r  r  c                 S   s   g | ]}t  |¡‘qS r   )rÍ  Z	makeSuite)r  ré   r   r   r   r   Þ  rN   zload_tests.<locals>.<listcomp>)(r  r   r¡  r2  r>  ru  rv  r”  r•  rÅ  rÆ  rê  rú  rû  rÕ  rà  r8  rD  r{  r|  rM   rU   rq   ri   r‚   rw   r*   r_   r   rÿ  Úglobalsr  r   ÚOpenWrapperr   rç   r9  ÚsetattrrÍ  Z	TestSuite)
r}   rè   ZmocksZall_membersZc_io_nsZpy_io_nsré   r˜  r   Zsuiter   r€  r   Ú
load_tests¼  s>    ÷þ
r…  Ú__main__)srJ   rc  r   r  r  r¼   r  r#  rG  rå   r3  r`   rd   rÍ  rì   r<  Úcollectionsr   r   Ú	itertoolsr   r   ré   r   Ztest.support.script_helperr   r   r	   Ztest.supportr
   r   rÉ  r   Z_pyior   r   ÚImportErrorr   Z	Structurer   r^  r`  Údev_moder»  r)   r*   rã   rK   rL   rM   rS   rT   rU   r]   r^   r_   rg   rh   ri   ro   rp   rq   rÍ   ru   rv   rw   r~   r€   r‚   rŒ   rŽ   ZTestCaser   r  r   ré  r¡  r©  rá  rê  r2  r>  r?  ru  rv  rw  r”  r•  r–  rÅ  rÆ  rÊ  rÇ  Úregisterrè  rê  rð  r¹  rº  rÕ  rà  rá  rú  rû  rü  r8  rD  rÎ  r˜  rF  r{  r|  r…  r   Úmainr   r   r   r   Ú<module>   sì   8
	0     : .  *3  (0 Q jW+        i
	Nu  F< o	%
