a
    ¼3jº› ã                   @   s´  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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 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
 (d¡p:dZ)e
 (d¡pJdZ*de)v p\de*v Z+de)v Z,e-e	dƒpxe	j.j/Z0dd„ Z1G dd„ dƒZ2G dd„ de2e j3ƒZ4G dd„ de2e"j3ƒZ5G dd„ de2ƒZ6G dd„ de6e j3ƒZ7G d d!„ d!e6e"j3ƒZ8G d"d#„ d#e6ƒZ9G d$d%„ d%e9e j3ƒZ:G d&d'„ d'e9e"j3ƒZ;G d(d)„ d)e6ƒZ<G d*d+„ d+e<e j3ƒZ=G d,d-„ d-e<e"j3ƒZ>G d.d/„ d/e6ƒZ?G d0d1„ d1e?e j3ƒZ@G d2d3„ d3e?e"j3ƒZAG d4d5„ d5ƒZBG d6d7„ d7eBe jCƒZDG d8d9„ d9eBe"jCƒZEG d:d;„ d;ƒZFG d<d=„ d=eFe jCƒZGG d>d?„ d?eFe"jCƒZHG d@dA„ dAƒZIG dBdC„ dCeIe j3ƒZJG dDdE„ dEeIe"j3ƒZKG dFdG„ dGejLƒZMG dHdI„ dIeMƒZNG dJdK„ dKeMƒZOejPG dLdM„ dMejLƒƒZQG dNdO„ dOƒZRG dPdQ„ dQƒZSG dRdS„ dSejLeRƒZTG dTdU„ dUeTeSƒZUG dVdW„ dWeTƒZVG dXdY„ dYejLeRƒZWG dZd[„ d[eWeSƒZXG d\d]„ d]eWƒZYG d^d_„ d_ejLƒZZG d`da„ daeZƒZ[G dbdc„ dceZƒZ\G ddde„ deeTeWƒZ]G dfdg„ dge]eSƒZ^G dhdi„ die]ƒZ_G djdk„ dkej`ƒZae beajc¡ G dldm„ dmejLƒZdG dndo„ doejLƒZeG dpdq„ dqe jCƒZfdrds„ ZgG dtdu„ dueeƒZhG dvdw„ dweeƒZiG dxdy„ dyejLƒZjG dzd{„ d{ejƒZkG d|d}„ d}ejƒZlG d~d„ dejLƒZmG d€d„ demƒZnG d‚dƒ„ dƒemƒZoe pejqd„kd…¡G d†d‡„ d‡ejLƒƒZrG dˆd‰„ d‰erƒZsG dŠd‹„ d‹erƒZtdŒd„ ZuevdŽkr°e w¡  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)ÚFakePathc                  O   s   t   dt| i |¤Ž¡S )NÚb)ÚarrayÚbytes)ÚposÚkw© r   úH/www/server/python_manager/versions/3.9.10/lib/python3.9/test/test_io.pyÚ	byteslike4   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   7   s
    c                   @   s   e Zd ZdS )r   N©Ú__name__Ú
__module__Ú__qualname__r   r   r   r   r   >   s   r   ZCFLAGSÚ ZCONFIG_ARGSz-fsanitize=memoryz--with-memory-sanitizerz-fsanitize=addressZ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_sizeQ   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__[   s    
zMockRawIOWithoutRead.__init__c                 C   s   | j  t|ƒ¡ t|ƒS ©N)r.   Úappendr   r   ©r1   r   r   r   r   Úwritea   s    zMockRawIOWithoutRead.writec                 C   s   dS ©NTr   ©r1   r   r   r   Úwritablee   s    zMockRawIOWithoutRead.writablec                 C   s   dS ©Né*   r   r8   r   r   r   Úfilenoh   s    zMockRawIOWithoutRead.filenoc                 C   s   dS r7   r   r8   r   r   r   Úreadablek   s    zMockRawIOWithoutRead.readablec                 C   s   dS r7   r   r8   r   r   r   Úseekablen   s    zMockRawIOWithoutRead.seekablec                 C   s   dS r+   r   ©r1   r   Úwhencer   r   r   Úseekq   s    zMockRawIOWithoutRead.seekc                 C   s   dS r+   r   r8   r   r   r   Útellt   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   Úreadintow   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*   W   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Œ   9  s   rŒ   c                   @   s   e Zd ZejZdS )ÚPyMockNonBlockWriterION)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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   ÚsetUpB  s    zIOTest.setUpc                 C   s   t  t j¡ d S r3   r   r8   r   r   r   ÚtearDownE  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_opsH  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_ops`  s>    



zIOTest.read_opsl        c              	   C   sh  |  ¡ sJ ‚| ¡ sJ ‚z|  | | j¡| j¡ W n  ttfyR   |  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=   r9   r›   rA   ÚLARGEÚOverflowErrorr‹   ÚskipTestrB   r6   rI   rQ   ©r1   r(   r   r   r   Úlarge_file_opsƒ  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_readline7  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´   I  s    z4IOTest.test_readline_nonsizeable.<locals>.R.readlineN)r   r   r   r´   r   r   r   r   ÚRH  s   rù   )ÚIOBaser   rž   ÚStopIterationÚnext©r1   rù   r   r   r   Útest_readline_nonsizeableE  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__Q  s    z0IOTest.test_next_nonsizeable.<locals>.R.__next__N)r   r   r   rÿ   r   r   r   r   rù   P  s   rù   rD   )rú   r   rž   Ú	readlinesrý   r   r   r   Útest_next_nonsizeableM  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_ioU  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_ops]  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_openj  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_tellz  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   ÚMyFileIO†  s   r  r   r°   r¨   ©rD   rW   r©   r³   )
r¾   r   Úcheck_warningsÚResourceWarningr’   r6   Ú
gc_collectr›   r$   rQ   )r1   r  r(   r   r  r   Útest_destructor„  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    Fr0  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    Fr0  r2  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    TFr0  )	r$   r   r’   r6   r›   rŸ   Úrawr1  r<   r5  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}   ÚkwargsrG  r   rF  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²   r1  r0  r¯   )rL  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_close?  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ó   crS  ó   efó   grN   )r*   r›   rQ   ©r1   Úrawior   r   r   Útest_RawIOBase_readF  s    
zIOTest.test_RawIOBase_readc                 C   s@   |   ¡ |  ¡ |  ¡ |  ¡ |  ¡ f}|D ]}|  t|dƒ¡ q&d S )NÚ__dict__)rú   rã   râ   rß   rÍ   rI  Úhasattr)r1   ré   r   r   r   r   Útest_types_have_dictS  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¯   r4  c                    s   ˆ S r3   r   )rA  Úflags©rO  r   r   Úopenerb  s    z"IOTest.test_opener.<locals>.openerúnon-existentr    ©ra  )r$   r   r’   r6   r¼   ÚO_RDONLYr›   rQ   )r1   r(   ra  r   r`  r   Útest_opener^  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   Ú	badopeneri  s    z4IOTest.test_bad_opener_negative_1.<locals>.badopenerrb  r    rc  zopener returned -1©r   r‹   r$   r›   ÚstrÚ	exception©r1   rg  Úcmr   r   r   Útest_bad_opener_negative_1g  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   rf  r   r   r   rg  q  s    z8IOTest.test_bad_opener_other_negative.<locals>.badopenerrb  r    rc  zopener returned -2rh  rk  r   r   r   Útest_bad_opener_other_negativeo  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³   Fr0  )r$   r%   r¾   r<   r2   r´   rn   )r1   Úf1Úf2Zfileior   r   r   Útest_fileio_closefdw  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_textioƒ  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©Únewliners  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[   rz  )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¯   r4  r    )r$   r6   r›   rQ   )rA  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©rR  rS  rT  ó   abcdefg)r*   r›   rQ   ÚreadallrY  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   rH  ò  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)  r/  r3  r7  r8  r:  r?  rE  rL  rP  rQ  r[  r^  re  rm  ro  rr  ru  ry  rƒ  rˆ  r  r–  r›  r   r   r   r   r   @  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   r9  rF   r   r   r   Útest_detach  s
    
zCommonBufferedTests.test_detachc                 C   s&   |   ¡ }|  |¡}|  d| ¡ ¡ d S r:   )rM   r©  r›   r<   ©r1   rZ  Ú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  8  s    
zJCommonBufferedTests.test_override_destructor.<locals>.MyBufferedIO.__del__c                    s   ˆ  d¡ tƒ  ¡  d S rV   r  r8   r  r   r   rn   @  s    
zHCommonBufferedTests.test_override_destructor.<locals>.MyBufferedIO.closec                    s   ˆ  d¡ tƒ  ¡  d S r  r  r8   r  r   r   rf   C  s    
zHCommonBufferedTests.test_override_destructor.<locals>.MyBufferedIO.flushr  r   r  rY   r   ÚMyBufferedIO7  s   r³  r  )r©  rM   r   r  r›   )r1   r©  r³  rZ  r°  r   r  r   Útest_override_destructor4  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   Ú_withP  s    z7CommonBufferedTests.test_context_manager.<locals>._with)rM   r©  r   r‹   )r1   rZ  r¶  r   rµ  r   Útest_context_managerL  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   rZ  rl  r   r   r   Útest_error_through_destructorX  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   r9  r   Zclsnamer   r   r   Ú	test_repre  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   r9  r   r   r   r   Útest_recursive_repro  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   r9  r   r   rG  ~  s    z@CommonBufferedTests.test_flush_error_on_close.<locals>.bad_flushr   rD   c                   S   s   d S r3   r   r   r   r   r   rH  ‰  rN   z?CommonBufferedTests.test_flush_error_on_close.<locals>.<lambda>)	rM   rf   r©  r   rm   rn   rI  rl   rJ  ©r1   rG  r   rÈ  r   rP  y  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   rG    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   rH  œ  rN   z?CommonBufferedTests.test_close_error_on_close.<locals>.<lambda>c                   S   s   d S r3   r   r   r   r   r   rH    rN   )rM   rn   r©  rf   r   rm   r›   rj  r}   ÚassertIsInstanceÚ__context__rJ  rl   ©r1   r9  rG  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   rG  ¢  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   rH  ±  rN   zMCommonBufferedTests.test_nonnormalized_close_error_on_close.<locals>.<lambda>c                   S   s   d S r3   r   r   r   r   r   rH  ²  rN   )rM   rn   r©  rf   r   Ú	NameErrorÚassertInri  rj  rÏ  rÐ  rJ  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   rQ  ´  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  r9  )r1   r9  rF   Úxr   r   r   Útest_readonly_attributesÁ  s
    
z,CommonBufferedTests.test_readonly_attributesN)r   r   r   r®  r±  r²  r´  r·  r¾  rÂ  rÇ  rP  rÓ  rÚ  rQ  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bufsize2rZ  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  rZ  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 )NrR  é   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‹  rn  )rM   r©  r›   rQ   r   r‹   )r1   ÚargrZ  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   rV  rÀ   rS  rW   rT  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   bcrS  rT  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   rU  ó   cdrW  rD   s   gfr   )rR  Ns   cb)rM   r©  rœ   r›   rH   )r1   rZ  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¥   )rR  ó   deó   fghs   jklrã  rW   r©   rR  rD   rU  rV  rû  rü  r•   s   fghjklr÷   )rM   r©  rœ   r›   Úpeekr/   r¦   )r1   rä  rZ  r°  r   r   r   r   Útest_readinto12  s*    
z!BufferedReaderTest.test_readinto1c                 C   sº   d}d}|   |f¡}| j||d}t dd¡}t|ƒdks>J ‚| |¡}|  |t|ƒ¡ t|ƒ d¡}|  |t|ƒ¡ |  	|d |… |d |… ¡ |  	||d … dt||d … ƒ ¡ d S ©	Né<   s   aaaaaaaaaaaaaaaaaaaaaaaaaarã  r*  s    xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxrë  r   r¤   )
rM   r©  r   r   rH   r  r   r   Ú
assertLessr›   ©r1   rä  r   rZ  r°  r   rG   Zbmr   r   r   Útest_readinto_arrayI  s    
z&BufferedReaderTest.test_readinto_arrayc                 C   sº   d}d}|   |f¡}| j||d}t dd¡}t|ƒdks>J ‚| |¡}|  |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_array^  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¡   rW  )rM   r©  )rZ  r8   r   r   r°  t  s    
z0BufferedReaderTest.test_readlines.<locals>.bufior  r[   rô   r¡   ©r›   r   rÜ  r   r8   r   Útest_readliness  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_sizesrZ  r°  r   Únbytesr   r   r   Útest_buffering{  s    ý

z!BufferedReaderTest.test_bufferingc                 C   s¤   |   d¡}|  |¡}|  d| d¡¡ |  d| d¡¡ |  d| ¡ ¡ |  d| d¡¡ |  | ¡ ¡ |  d| ¡ ¡ |   d¡}|  d	| ¡ ¡ |  | ¡ ¡ d S )
N)rR  rS  NrT  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   rJ  r„   r›   r   r‘   )r1   ÚNÚlr…   r9  Ú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   rH  á  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   rC  )r1   r  rG   rZ  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 )NrR  r   )rq   r©  rJ  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.  r/  r   r   r   r   ré  ß  s,   

'	ré  c                   @   sJ   e Zd ZejZe epe	d¡dd„ ƒZ
dd„ Zdd„ Zdd	„ Zd
d„ ZdS )ÚCBufferedReaderTestúLsanitizer defaults to crashing instead of returning NULL for malloc failure.c                 C   sD   t  | ¡ tjdkr@|  ¡ }|  |¡}|  ttt	f|j
|tj¡ d S ©Nr@  )ré  rí  rå   rD  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 )NrR  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   rZ  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_error4  s    z#CBufferedReaderTest.test_args_errorN)r   r   r   r   rÈ   r©  ÚunittestÚskipIfÚMEMORY_SANITIZERÚADDRESS_SANITIZERrí  r5  r6  r?  r9  r   r   r   r   r1    s   


r1  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©   rR  r   rì  r‰   ó   ghirN   s   abcghi)
rM   r©  r2   r›   r6   rf   r   r‹   r„   r.   r¯  r   r   r   rí  A  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ñ  Q  s    
þz%BufferedWriterTest.test_uninitializedc                 C   sD   |   ¡ }|  |¡}| d¡ |  |j¡ | ¡  |  |jdg¡ d S )Ns   howdy!)rM   r©  r6   rJ  r.   r«  r›   r­  r   r   r   Útest_detach_flush[  s    

z$BufferedWriterTest.test_detach_flushc                 C   sh   |   ¡ }|  |d¡}| d¡ |  |j¡ tdƒ}| |¡ d|d d …< | ¡  |  d |j¡d¡ d S )Nr	  rR  ó   defó   ***rN   ó   abcdef)	rM   r©  r6   rJ  r.   rœ   rf   r›   r„   )r1   Úwriterr°  rŸ   r   r   r   Ú
test_writec  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.   rI  rç   )r1   rE  r°  ÚcontentsrG   Zflushedr   r   r   Útest_write_overflowo  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_sizes  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_writesz  s    
zBufferedWriterTest.check_writesc                 C   s   |   dd„ ¡ d S )Nc                 S   s   d S r3   r   rµ  r   r   r   rH    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   rH  ’  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   rH  £  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†   rI  rç   )r1   r9  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   r9  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	  rR  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)rU  rù  rW  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³   rR  )rÃ   r   r‘   r’   r$   Ú
write_moder©  r6   r›   rI   rB   rQ   )r1   r9  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  2  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   rJ  rn   rQ   r›   r   r‘   )
r1   r&  rG  rK  rG   r|  r9  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   rH  G  rN   z7BufferedWriterTest.test_misbehaved_io.<locals>.<lambda>)rU   r©  r   rm   rA   rB   r6   rn   r¯  r   r   r   r+  ?  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_removalI  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_writeO  s    z?BufferedWriterTest.test_write_error_on_close.<locals>.bad_writeó   spam)rM   r6   r©  r   rm   rn   rI  rl   )r1   r9  ro  r   r   r   r   Útest_write_error_on_closeM  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   rI  rl   r„   )r1   rZ  r°  Útr   r   r   Útest_slow_close_from_threadW  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   r0  r*  r+  rn  rq  rt  r   r   r   r   r?  >  s4   

.

r?  c                   @   sB   e Zd ZejZe epe	d¡dd„ ƒZ
dd„ Zdd„ Zdd	„ Zd
S )ÚCBufferedWriterTestr2  c                 C   sD   t  | ¡ tjdkr@|  ¡ }|  |¡}|  ttt	f|j
|tj¡ d S r3  )r?  rí  rå   rD  rM   r©  r   r«   r4  r‹   r2   r¯  r   r   r   rí  g  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   r5  s  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   r7  r   r   r   r?  }  s    


&z+CBufferedWriterTest.test_garbage_collectionc                 C   sD   |   td¡$ |  t ¡ ddd¡ W d   ƒ n1 s60    Y  d S )NrÊ   rê  r8  r8   r   r   r   r9  Ž  s    z#CBufferedWriterTest.test_args_errorN)r   r   r   r   rÊ   r©  r:  r;  r<  r=  rí  r5  r?  r9  r   r   r   r   ru  d  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   rJ  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©   rR  rD   rS  rW  )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   rH  Ë  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©   rR  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 )NrR  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©   rR  )r©  rÍ   rM   rI  rý  rç   r›   rQ   rx  r   r   r   Ú	test_peekí  s    zBufferedRWPairTest.test_peekc                 C   s&   |   |  ¡ |  ¡ ¡}|  | ¡ ¡ d S r3   )r©  rM   rI  r=   rx  r   r   r   Útest_readableó  s    z BufferedRWPairTest.test_readablec                 C   s&   |   |  ¡ |  ¡ ¡}|  | ¡ ¡ d S r3   )r©  rM   rI  r9   rx  r   r   r   Útest_writeable÷  s    z!BufferedRWPairTest.test_writeablec                 C   s&   |   |  ¡ |  ¡ ¡}|  | ¡ ¡ d S r3   )r©  rM   rJ  r>   rx  r   r   r   Útest_seekableû  s    z BufferedRWPairTest.test_seekablec                 C   s8   |   |  ¡ |  ¡ ¡}|  |j¡ | ¡  |  |j¡ d S r3   )r©  rM   rJ  rl   rn   rI  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   rH    rN   zEBufferedRWPairTest.test_reader_close_error_on_close.<locals>.<lambda>)rM   rn   r©  r   rØ  rÙ  ri  rj  rI  rl   rJ  )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   rH  *  rN   zEBufferedRWPairTest.test_writer_close_error_on_close.<locals>.<lambda>)rM   rn   r©  r   rØ  rÙ  ri  rj  rJ  rl   rI  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ˆ  6  s    zPBufferedRWPairTest.test_reader_writer_close_error_on_close.<locals>.reader_closec                   S   s   t  d S r3   rŠ  r   r   r   r   rŒ  8  s    zPBufferedRWPairTest.test_reader_writer_close_error_on_close.<locals>.writer_closer‡  r‹  c                   S   s   d S r3   r   r   r   r   r   rH  I  rN   zLBufferedRWPairTest.test_reader_writer_close_error_on_close.<locals>.<lambda>c                   S   s   d S r3   r   r   r   r   r   rH  J  rN   )rM   rn   r©  r   rØ  rÙ  ri  rj  rÏ  rÐ  rJ  rl   )r1   rˆ  rŒ  r•  rE  ry  rÒ  r   r   r   Ú'test_reader_writer_close_error_on_close5  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   N  s    
zABufferedRWPairTest.test_isatty.<locals>.SelectableIsAtty.__init__c                 S   s   | j S r3   )r  r8   r   r   r   r  R  s    z?BufferedRWPairTest.test_isatty.<locals>.SelectableIsAtty.isattyN)r   r   r   r2   r  r   r   r   r   ÚSelectableIsAttyM  s   r‘  FT)rM   r©  rJ  r  rI  )r1   r‘  ry  r   r   r   Útest_isattyL  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_clearinga  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”  g  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•  j  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í  r  s    
z#BufferedRandomTest.test_constructorc                 C   s   t  | ¡ t | ¡ d S r3   )ré  rñ  r?  r8   r   r   r   rñ  v  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   rJ  r.   ©r1   r9  rÛ   r   r   r   Útest_read_and_writez  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_tell…  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  rU  rW   r-  rW  r•   r@  r   s   XYZr©   )rÍ   r©  r›   r6   rB   rf   rA   )r1   Z	read_funcr9  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   rH  ¯  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_sizer9  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   sF   ||ksJ ‚|   |¡ |  || ¡ |  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*  Újr9  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õ  ó   2rS  rÝ   ó   fó   4r—   s   1b2d3f4hrR  rô  rV  s   a2c)rÍ   r©  r6   r›   rQ   r}  rœ   rH   rý  rf   r  )r1   r9  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   r9  r(   r   r   r   Útest_interleaved_readline_writeC	  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Ý  r/  r   r   r   r   r–  n  s0   r–  c                   @   s:   e Zd ZejZe epe	d¡dd„ ƒZ
dd„ Zdd„ ZdS )	ÚCBufferedRandomTestr2  c                 C   sD   t  | ¡ tjdkr@|  ¡ }|  |¡}|  ttt	f|j
|tj¡ d S r3  )r–  rí  rå   rD  rM   r©  r   r«   r4  r‹   r2   r¯  r   r   r   rí  Z	  s    



ÿz$CBufferedRandomTest.test_constructorc                 C   s   t  | ¡ t | ¡ d S r3   )r1  r?  ru  r8   r   r   r   r?  f	  s    
z+CBufferedRandomTest.test_garbage_collectionc                 C   sD   |   td¡$ |  t ¡ ddd¡ W d   ƒ n1 s60    Y  d S )NrÌ   rê  r8  r8   r   r   r   r9  j	  s    z#CBufferedRandomTest.test_args_errorN)r   r   r   r   rÌ   r©  r:  r;  r<  r=  rí  r?  r9  r   r   r   r   rÅ  W	  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Æ  p	  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   

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#   rx  Fúutf-8T)r#   Úline_bufferingõ   Ã©
r;   rw  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   rJ  r  r›   r   r‹   r¬  r#   r  r÷  Úwrite_throughrù  r   r   r   r®  0
  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   r9  r   rs  Úmodnamer   r   r   rÂ  D
  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   r9  rs  r   r   r   rÇ  X
  s    
z%TextIOWrapperTest.test_recursive_reprc                 C   sv   |   ¡ }|  |d¡}| j|ddd}| d¡ |  | ¡ d¡ | d¡ |  | ¡ d¡ | d	¡ |  | ¡ d
¡ d S )Nr  Ú
T©rx  r÷  ÚXrN   zY
Zs   XY
ZzABs   XY
ZAB)rÍ   rÊ   rÕ   r6   r›   r  rù  r   r   r   Útest_line_bufferingb
  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_bufferingm
  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   rH  ¡
  rN   z8TextIOWrapperTest.test_device_encoding.<locals>.<lambda>c                      s
   ˆ j d S rj   )ZUINT_MAXr   r  r   r   rH  £
  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  rx  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¥   ©rx  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  rx  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ò  rx  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è   rx  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  rR  )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  6  s    
zDTextIOWrapperTest.test_override_destructor.<locals>.MyTextIO.__del__c                    s   ˆ  d¡ tƒ  ¡  d S rV   r  r8   r  r   r   rn   >  s    
zBTextIOWrapperTest.test_override_destructor.<locals>.MyTextIO.closec                    s   ˆ  d¡ tƒ  ¡  d S r  r  r8   r  r   r   rf   A  s    
zBTextIOWrapperTest.test_override_destructor.<locals>.MyTextIO.flushr  r   r  rY   r   ÚMyTextIO5  s   r=  rÓ   r"   r  )rÕ   rÍ   r   r  r›   )r1   r=  r   rs  r   r  r   r´  3  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¾  J  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_ioY  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  v  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   ri  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_chunk5  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  @  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  H  s    

z*TextIOWrapperTest.test_writelines_userlistc                 C   sF   |   |  ¡ ¡}|  t|jg d¢¡ |  t|jd ¡ |  t|jd¡ d S )Nr  rR  )rÕ   rÍ   r   rž   rµ   rq  r   r   r   rd  P  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_1V  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_2b  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_3n  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_4y  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_5  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   rG  Ù  s    z>TextIOWrapperTest.test_flush_error_on_close.<locals>.bad_flushr   rD   c                   S   s   d S r3   r   r   r   r   r   rH  ã  rN   z=TextIOWrapperTest.test_flush_error_on_close.<locals>.<lambda>)rÕ   rÍ   rñ  rf   r   rm   rn   rI  rl   rŸ   rJ  rÉ  r   r’  r   rP  Ô  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   rG  ç  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   rH  ö  rN   z=TextIOWrapperTest.test_close_error_on_close.<locals>.<lambda>c                   S   s   d S r3   r   r   r   r   r   rH  ÷  rN   )rÍ   rñ  rn   rÕ   rf   r   rm   r›   rj  r}   rÏ  rÐ  rJ  rl   ©r1   rŸ   rG  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   rG  ü  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   rH    rN   zKTextIOWrapperTest.test_nonnormalized_close_error_on_close.<locals>.<lambda>c                   S   s   d S r3   r   r   r   r   r   rH    rN   )rÍ   rñ  rn   rÕ   rf   r   rØ  rÙ  ri  rj  rÏ  rÐ  rJ  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   rQ    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©rR  rB  s   ghi
jkl
opq
rÓ   r  rõ  r÷   Zabcdzefghi
zjkl
zopq
)rM   rÕ   r›   rQ   r´   r,   ©r1   r9  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#   rx  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}   rK  )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   =  s    
zHTextIOWrapperTest.test_bufio_write_through.<locals>.BufferedWriter.write)r   r   r   rf   r6   r\   r   ©r›  rœ  rY   r   rÊ   9  s   rÊ   rô  rW   rÓ   T)r#   rþ  rN   r¥   rž  )
rÊ   rÍ   r   rÕ   rÙ  r6   rJ  rI  r›   r  )r1   rÊ   rZ  r   r°  r-  rŽ  r   r  r   Útest_bufio_write_through5  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45rz  )	rM   rÕ   r6   r  r›   rþ  r„   r.   rf   r   r   r   r   Útest_reconfigure_write_throughU  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_nonbytesl  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_encoderv  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_wrapper  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_decoder~  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()
            )ÚiomodrK  ú-c)r   r   rC  r   )r1   rK  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°  rJ  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   rH  á  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"   rw  )rÞ  rÍ   rÕ   r›   r´   r   r{   r  )r1   r   r9  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   rH    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ô  rw  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  rw  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   r9  r5  r»  r   r   r   Útest_reconfigure_newline5  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_issue25862Y  s    


z!TextIOWrapperTest.test_issue25862N)Tr   r   r   r“   r”   rí  rñ  rý  r®  rÂ  rÇ  r  r  r:  r;  rå   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‘  rP  rÓ  rÚ  rQ  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}  i  s    zMemviewBytesIO.read1c                    s   t tƒ  |¡ƒS r3   )rº  rX   rQ   rÏ  rY   r   r   rQ   l  s    zMemviewBytesIO.read)r   r   r   rJ   r}  rQ   r\   r   r   rY   r   r¹  e  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º  o  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¹  rw  )
rÍ   rÈ   rÕ   r   r‹   r2   rQ   rð  r  r¬  rù  r   r   r   r5  |  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   rZ  r   rs  r>  r(   r   r   r   r?  †  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²  r5  r?  rÙ  rÚ  rÝ  r   r   r   r   rÓ  x  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…   rK  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)rn  r‰   rD   rW   rö  r   rï  ræ  z
)rÉ  rñ  rò  rè  r›   rÙ  )r1   rð  rá  r   r   r   Útest_translate6  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ø  @  s   rø  c                   @   s   e Zd ZdS )ÚPyIncrementalNewlineDecoderTestNr   r   r   r   r   rù  C  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”   K  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  ÚlowerrI  Ú
issubclassr  rç   rú   )r1   r—  r   r   r   r   Útest___all__N  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—  Fr0  )r$   r   r’   r›   r¹   rn   r  rï   r—  rŸ   r9  r<   )r1   r(   Úgr   r   r   Útest_attributesY  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æ   rJ  r>   )r1   r    r¯   r(   r   r   r   Útest_open_pipe_with_appendu  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   rK  r(   r   r   r   Útest_io_after_close€  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   )	ri  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Ù  ri  Úwarningr}   )r1   r}   rK  r(   r    rl  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)rO  r  ©Úfdsr   r   Úcleanup_fdsì  s    z9MiscIOTest._check_warn_on_dealloc_fd.<locals>.cleanup_fdsr1  F)rÃ   r¼   r½   r  r   rt  r$   )r1   r}   rK  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   rK  Ú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¹   r1  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„   rI  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_failN  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_writesT  s    (zMiscIOTest.test_create_writesc                 C   s   |   t| jtjd¡ d S )Nzrwax+r2  r8   r   r   r   Útest_open_allargs[  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…  rv  r¯  Úprocr   r   r   Útest_check_encoding_errors_  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,  r.  r/  r5  r   r   r   r   rú  I  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   r7  rW   )r   rÑ   rœ   r   r‹   rH   )r1   r7  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Á  rJ  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   r8  r<  r?  rA  r   r   r   r   r6    s
   	)r6  c                   @   s   e Zd ZeZdS )ÚPyMiscIOTestN)r   r   r   r   r   r   r   r   r   rB  É  s   rB  Ú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   )rE  rF  rH  r8   r   r   r   r”   Ó  s    zSignalsTest.tearDownc                 C   s   dd  d S rC   r   )r1   ÚsigÚframer   r   r   rG  Ö  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  TFr1  rD   Úpthread_sigmaskr   rW   N)r   r  r`   rÄ   Údaemonr¼   r½   ÚPIPE_MAX_SIZEr   r   r$   r]  rE  rM  Ú	SIG_BLOCKrF  rÅ   ÚSIG_UNBLOCKÚalarmr   r  r6   r„   r4   rQ   r›   rn   rm   r  r  )
r1   Úitemr   Úfdopen_kwargsr®  rs  r¯   Ú
large_dataÚwior  r   rK  r   Úcheck_interrupted_writeÙ  sL    



ÿ

"

÷

z#SignalsTest.check_interrupted_writec                 C   s   | j ddddd d S )Nrö   r°   r   r  ©rW  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¹   rX  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#   rX  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   rV  r   r   Úon_alarm1  s    
z3SignalsTest.check_reentrant_write.<locals>.on_alarmrD   rÀ   zreentrant callr   )rE  rF  r¼   r½   r   r$   rR  r   r  rÅ  r-  r6   rf   rQ   r   rj  rá   rI  ri  rç   rn   )	r1   r   rT  ra  r    r¯   rl  r*  r¸   r   r`  r   Úcheck_reentrant_write/  s(    


4

þ
z!SignalsTest.check_reentrant_writec                 C   s   | j ddd d S rZ  ©rb  r8   r   r   r   Útest_reentrant_write_bufferedK  s    z)SignalsTest.test_reentrant_write_bufferedc                 C   s   | j dddd d S )Nr]  r¯   rÓ   r^  rc  r8   r   r   r   Útest_reentrant_write_textN  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.Fr1  c                    s   t  ˆ d¡ d S )Ns   bar)r¼   r6   ©rI  rJ  ©r¯   r   r   Úalarm_handlerW  s    z?SignalsTest.check_interrupted_read_retry.<locals>.alarm_handlerr£  rD   r•   Zfoobarr   N)r¼   r½   rE  rF  r   r$   r6   rR  r›   rQ   rn   )r1   rÙ  rT  r    rh  Zrior   rg  r   Úcheck_interrupted_read_retryQ  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   rH  j  rN   zBSignalsTest.test_interrupted_read_retry_buffered.<locals>.<lambda>r³   r[  ©ri  r8   r   r   r   Ú$test_interrupted_read_retry_bufferedi  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   rH  n  rN   z>SignalsTest.test_interrupted_read_retry_text.<locals>.<lambda>r    r[  rj  r8   r   r   r   Ú test_interrupted_read_retry_textm  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.ÚselectFr1  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ê  )rm  r¼   rQ   r4   ÚBaseException)r…   r¸   )rü  r    rL  rm  Úwrite_finishedr   r   r®  ƒ  s    z8SignalsTest.check_interrupted_write_retry.<locals>._readr  Tc                    s   t   t jˆ ¡ t  d¡ d S rj   )rE  rF  rR  rf  )Úalarm2r   r   Úalarm1Ž  s    z9SignalsTest.check_interrupted_write_retry.<locals>.alarm1c                    s   ˆ   ¡  d S r3   )rÅ   rf  )rs  r   r   rp  ‘  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_modulerO  r¼   r½   r`   rÄ   rN  rE  rF  r   r$   rR  r6   r›   rf   r„   r=  Úsumrn   rm   r  r  )r1   rS  rT  r&  r¯   r®  rq  rU  rV  rX  r  r   )rp  rü  r    rL  rm  rs  ro  r   Úcheck_interrupted_write_retryq  sT    
	





õ


z)SignalsTest.check_interrupted_write_retryc                 C   s   | j ddd d S )Nr¤   r°   r[  ©ru  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^  rv  r8   r   r   r   Ú!test_interrupted_write_retry_text¸  s    z-SignalsTest.test_interrupted_write_retry_textN)r   r   r   r“   r”   rG  rW  rY  r\  r_  r   rÎ  rb  rd  re  ri  rk  rl  ru  rw  rx  r   r   r   r   rD  Í  s"   M
DrD  c                   @   s   e Zd ZeZdS )ÚCSignalsTestN)r   r   r   r   r   r   r   r   ry  ¼  s   ry  c                   @   s   e Zd ZeZdZdZdS )ÚPySignalsTestN)r   r   r   r   r   rd  re  r   r   r   r   rz  ¿  s   rz  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   rr  Þ  rN   zload_tests.<locals>.<genexpr>c                 3   s"   | ]}|j ˆ d |j   fV  qdS )ÚPyNr}  r  r~  r   r   rr  ß  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   r1  r>  ru  rv  r”  r•  rÅ  rÆ  rê  rø  rù  rÓ  rÞ  r6  rB  ry  rz  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__)xrJ   rc  r   r  r  r¼   r  r"  rE  rå   Z	sysconfigr1  r`   rd   r:  rì   r;  Úcollectionsr   r   Ú	itertoolsr   r   ré   r   Ztest.support.script_helperr   r   r	   Ztest.supportr
   rÉ  r   Z_pyior   r   ÚImportErrorr   Z	Structurer   Zget_config_varZ_cflagsZ_config_argsr<  r=  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é  r1  r>  r?  ru  rv  rw  r”  r•  r–  rÅ  rÆ  rÊ  rÇ  Úregisterrè  rê  rð  r¹  rº  rÓ  rÞ  rß  rø  rù  rú  r6  rB  r;  r—  rD  ry  rz  rƒ  r   Úmainr   r   r   r   Ú<module>   sü   
þÿ8
	0     : .  *3  (0 Q jW+        i
	Nu  F< o	%
