o
    °ó®go¦ ã                   @   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mZ dd	lm Z  dd
l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w dd„ Z*G dd„ de(j+ƒZ,e
 -d¡p³dZ.e
 -d¡pºdZ/de.v pÂde/v Z0e1e	dƒpËe	j2j3Z4dd„ Z5G dd„ dƒZ6G dd„ de6e%j7ƒZ8G dd„ de6e'j7ƒZ9G dd „ d e6ƒZ:G d!d"„ d"e:e%j7ƒZ;G d#d$„ d$e:e'j7ƒZ<G d%d&„ d&e:ƒZ=G d'd(„ d(e=e%j7ƒZ>G d)d*„ d*e=e'j7ƒZ?G d+d,„ d,e:ƒZ@G d-d.„ d.e@e%j7ƒZAG d/d0„ d0e@e'j7ƒZBG d1d2„ d2e:ƒZCG d3d4„ d4eCe%j7ƒZDG d5d6„ d6eCe'j7ƒZEG d7d8„ d8ƒZFG d9d:„ d:eFe%jGƒZHG d;d<„ d<eFe'jGƒZIG d=d>„ d>ƒZJG d?d@„ d@eJe%jGƒZKG dAdB„ dBeJe'jGƒZLG dCdD„ dDƒZMG dEdF„ dFeMe%j7ƒZNG dGdH„ dHeMe'j7ƒZOG dIdJ„ dJejPƒZQG dKdL„ dLeQƒZRG dMdN„ dNeQƒZSejTG dOdP„ dPejPƒƒZUG dQdR„ dRƒZVG dSdT„ dTƒZWG dUdV„ dVejPeVƒZXG dWdX„ dXeXeWƒZYG dYdZ„ dZeXƒZZG d[d\„ d\ejPeVƒZ[G d]d^„ d^e[eWƒZ\G d_d`„ d`e[ƒZ]G dadb„ dbejPƒZ^G dcdd„ dde^ƒZ_G dedf„ dfe^ƒZ`G dgdh„ dheXe[ƒZaG didj„ djeaeWƒZbG dkdl„ dleaƒZcG dmdn„ dne$jdƒZedodp„ ZfG dqdr„ drejPƒZgG dsdt„ dtejPƒZhG dudv„ dve%jGƒZidwdx„ ZjG dydz„ dzehƒZkG d{d|„ d|ehƒZlG d}d~„ d~ejPƒZmG dd€„ d€emƒZnG dd‚„ d‚emƒZoG dƒd„„ d„ejPƒZpG d…d†„ d†epƒZqG d‡dˆ„ dˆepƒZre sejtd‰kdŠ¡G d‹dŒ„ dŒejPƒƒZuG ddŽ„ dŽeuƒZvG dd„ deuƒZwd‘d’„ Zxeyd“krçe z¡  dS 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)Úimport_helper)Ú	os_helper)Úthreading_helper)Úwarnings_helper)ÚFakePathc                  O   s   t   dt| i |¤Ž¡S )NÚb)ÚarrayÚbytes)ÚposÚkw© r   úB/Users/admin/.pyenv/versions/3.10.0/lib/python3.10/test/test_io.pyÚ	byteslike8   ó   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   ;   s
   c                   @   ó   e Zd ZdS )r   N©Ú__name__Ú
__module__Ú__qualname__r   r   r   r   r   B   ó    r   ZCFLAGSÚ ZCONFIG_ARGSz-fsanitize=memoryz--with-memory-sanitizerZgettotalrefcountc                  C   s8   t tddd} | jW  d  ƒ S 1 sw   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   $ÿr0   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)r5   Úappendr   r   ©r8   r   r   r   r   Úwritea   s   zMockRawIOWithoutRead.writec                 C   ó   dS ©NTr   ©r8   r   r   r   Úwritablee   ó   zMockRawIOWithoutRead.writablec                 C   r>   ©Né*   r   r@   r   r   r   Úfilenoh   rB   zMockRawIOWithoutRead.filenoc                 C   r>   r?   r   r@   r   r   r   Úreadablek   rB   zMockRawIOWithoutRead.readablec                 C   r>   r?   r   r@   r   r   r   Úseekablen   rB   zMockRawIOWithoutRead.seekablec                 C   r>   r2   r   ©r8   r   Úwhencer   r   r   Úseekq   rB   zMockRawIOWithoutRead.seekc                 C   r>   r2   r   r@   r   r   r   Útellt   rB   zMockRawIOWithoutRead.tellc                 C   s²   |  j d7  _ t|ƒ}z| jd }W n ty#   |  jd7  _Y dS w |d u r.| jd= d S t|ƒ}t|ƒ|krD| jd= ||d |…< |S |d |… |d d …< ||d … | jd< |S ©Né   r   )r6   r   r4   Ú
IndexErrorr7   )r8   ÚbufZmax_lenr   Únr   r   r   Úreadintow   s&   þzMockRawIOWithoutRead.readintoNc                 C   s   |S r:   r   )r8   r   r   r   r   ÚtruncateŒ   rB   zMockRawIOWithoutRead.truncate)r   r:   )r"   r#   r$   Ú__doc__r9   r=   rA   rE   rF   rG   rJ   rK   rQ   rR   r   r   r   r   r1   W   s    
r1   c                   @   r    )ÚCMockRawIOWithoutReadNr!   r   r   r   r   rT      r%   rT   c                   @   r    )ÚPyMockRawIOWithoutReadNr!   r   r   r   r   rU   ’   r%   rU   c                   @   s   e Zd Zddd„ZdS )Ú	MockRawIONc                 C   s8   |  j d7  _ z| j d¡W S    |  jd7  _Y dS )NrM   r   ó    )r6   r4   Úpopr7   ©r8   rP   r   r   r   Úread˜   s   zMockRawIO.readr:   ©r"   r#   r$   rZ   r   r   r   r   rV   –   s    rV   c                   @   r    )Ú
CMockRawIONr!   r   r   r   r   r\       r%   r\   c                   @   r    )ÚPyMockRawIONr!   r   r   r   r   r]   £   r%   r]   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                    ó   t ƒ  |¡d S ©Né   )Úsuperr=   r<   ©Ú	__class__r   r   r=   ¨   ó   zMisbehavedRawIO.writeNc                    r_   r`   )rb   rZ   rY   rc   r   r   rZ   «   re   zMisbehavedRawIO.readc                 C   r>   )Ni…ÿÿÿr   rH   r   r   r   rJ   ®   rB   zMisbehavedRawIO.seekc                 C   r>   )Ni8þÿÿr   r@   r   r   r   rK   ±   rB   zMisbehavedRawIO.tellc                    s   t ƒ  |¡ t|ƒd S )Né   )rb   rQ   r   )r8   rO   rc   r   r   rQ   ´   s   zMisbehavedRawIO.readintor:   )	r"   r#   r$   r=   rZ   rJ   rK   rQ   Ú__classcell__r   r   rc   r   r^   §   s    r^   c                   @   r    )ÚCMisbehavedRawIONr!   r   r   r   r   rh   ¸   r%   rh   c                   @   r    )ÚPyMisbehavedRawIONr!   r   r   r   r   ri   »   r%   ri   c                       s$   e Zd Z‡ fdd„Zdd„ Z‡  ZS )ÚSlowFlushRawIOc                    s   t ƒ  ¡  t ¡ | _d S r:   )rb   r9   Ú	threadingÚEventÚin_flushr@   rc   r   r   r9   À   ó   
zSlowFlushRawIO.__init__c                 C   s   | j  ¡  t d¡ d S )Ng      Ð?)rm   ÚsetÚtimeÚsleepr@   r   r   r   ÚflushÄ   rn   zSlowFlushRawIO.flush)r"   r#   r$   r9   rr   rg   r   r   rc   r   rj   ¿   s    rj   c                   @   r    )ÚCSlowFlushRawIONr!   r   r   r   r   rs   È   r%   rs   c                   @   r    )ÚPySlowFlushRawIONr!   r   r   r   r   rt   Ë   r%   rt   c                   @   s   e Zd ZdZdd„ ZdS )ÚCloseFailureIOr   c                 C   s   | j sd| _ t‚d S ©NrM   ©ÚclosedÚOSErrorr@   r   r   r   ÚcloseÒ   s   þzCloseFailureIO.closeN)r"   r#   r$   rx   rz   r   r   r   r   ru   Ï   s    ru   c                   @   r    )ÚCCloseFailureIONr!   r   r   r   r   r{   ×   r%   r{   c                   @   r    )ÚPyCloseFailureIONr!   r   r   r   r   r|   Ú   r%   r|   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 r:   )Úread_historyrb   r9   ©r8   r   rc   r   r   r9   à   s   zMockFileIO.__init__Nc                    s2   t ƒ  |¡}| j |d u rd ¡ |S t|ƒ¡ |S r:   )rb   rZ   r~   r;   r   )r8   rP   Úresrc   r   r   rZ   ä   s
   
ÿzMockFileIO.readc                    s   t ƒ  |¡}| j |¡ |S r:   )rb   rQ   r~   r;   )r8   r   r€   rc   r   r   rQ   é   s   zMockFileIO.readintor:   )r"   r#   r$   r9   rZ   rQ   rg   r   r   rc   r   r}   Þ   s    r}   c                   @   r    )ÚCMockFileIONr!   r   r   r   r   r   î   r%   r   c                   @   r    )ÚPyMockFileIONr!   r   r   r   r   r‚   ñ   r%   r‚   c                   @   s,   e Zd Zdd„ Zdd„ Zdd„ Zdd„ Zd	S )
ÚMockUnseekableIOc                 C   r>   ©NFr   r@   r   r   r   rG   ö   rB   zMockUnseekableIO.seekablec                 G   ó
   |   d¡‚©Nznot seekable©ÚUnsupportedOperation©r8   Úargsr   r   r   rJ   ù   ó   
zMockUnseekableIO.seekc                 G   r…   r†   r‡   r‰   r   r   r   rK   ü   r‹   zMockUnseekableIO.tellc                 G   r…   r†   r‡   r‰   r   r   r   rR   ÿ   r‹   zMockUnseekableIO.truncateN)r"   r#   r$   rG   rJ   rK   rR   r   r   r   r   rƒ   õ   s
    rƒ   c                   @   ó   e Zd ZejZdS )ÚCMockUnseekableION)r"   r#   r$   Úiorˆ   r   r   r   r   r     ó    
r   c                   @   rŒ   )ÚPyMockUnseekableION)r"   r#   r$   Úpyiorˆ   r   r   r   r   r     r   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 r:   )r5   Ú_blocker_charr@   r   r   r   r9     s   
zMockNonBlockWriterIO.__init__c                 C   s   d  | j¡}g | jd d …< |S ©NrW   )Újoinr5   )r8   Úsr   r   r   Úpop_written  s   z MockNonBlockWriterIO.pop_writtenc                 C   s
   || _ dS )z'Block when a given char is encountered.N)r“   )r8   Úcharr   r   r   Úblock_on  s   
zMockNonBlockWriterIO.block_onc                 C   r>   r?   r   r@   r   r   r   rF     rB   zMockNonBlockWriterIO.readablec                 C   r>   r?   r   r@   r   r   r   rG     rB   zMockNonBlockWriterIO.seekabler   c                 C   r>   r2   r   rH   r   r   r   rJ     s   zMockNonBlockWriterIO.seekc                 C   r>   r?   r   r@   r   r   r   rA   "  rB   zMockNonBlockWriterIO.writablec                 C   st   t |ƒ}d}| jr0z| | j¡}W n	 ty   Y nw |dkr+| j |d |… ¡ |S d | _d S | j |¡ t|ƒS )Néÿÿÿÿr   )r   r“   ÚindexÚ
ValueErrorr5   r;   r   )r8   r   rP   r   r   r   r=   %  s   ÿzMockNonBlockWriterIO.writeN©r   )r"   r#   r$   r9   r—   r™   rF   rG   rJ   rA   r=   r   r   r   r   r’   	  s    
r’   c                   @   rŒ   )ÚCMockNonBlockWriterION)r"   r#   r$   rŽ   ÚBlockingIOErrorr   r   r   r   rž   9  r   rž   c                   @   rŒ   )ÚPyMockNonBlockWriterION)r"   r#   r$   r‘   rŸ   r   r   r   r   r    <  r   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   ó   t  t j¡ d S r:   ©r   ÚunlinkÚTESTFNr@   r   r   r   ÚsetUpB  re   zIOTest.setUpc                 C   r¢   r:   r£   r@   r   r   r   ÚtearDownE  re   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.rf   r   s   Hello.é   rš   rM   s	    world


é	   s	   *********ó   hra   é   é   ç        )ÚassertEqualr=   rR   rK   rJ   Ú	bytearrayÚassertRaisesÚ	TypeError)r8   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 d S )Nrf   s   hellos    worlra   ó   d
r   é   ó   hello world
rM   rW   ó   xiúÿÿÿr¨   s   worldé
   r­   s   world
)rZ   r®   r   rQ   r   r¯   r   rJ   rK   r°   r±   Ú	readinto1)r8   r/   Zbufferedr   r   r   r   Úread_ops`  s@   



÷zIOTest.read_opsl        c              	   C   sP  z|   | | j¡| j¡ W n ttfy   |  d¡ Y nw |   | ¡ | 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š   rM   ra   r   r·   )
r®   rJ   ÚLARGEÚOverflowErrorrœ   ÚskipTestrK   r=   rR   rZ   ©r8   r/   r   r   r   Úlarge_file_opsƒ  s"   ÿzIOTest.large_file_opsc                 C   s  | j }| jtjddd}|  ||j¡ |  ||j¡ W d   ƒ n1 s%w   Y  |  tjd¡}|  ||j¡ |  ||j¡ W d   ƒ n1 sJw   Y  | jtjddd}|  ||j¡ |  ||j¡ W d   ƒ n1 sqw   Y  | jtjddd}|  ||jd¡ |  ||jd	g¡ W d   ƒ n1 s›w   Y  |  tjd¡}|  ||jd¡ |  ||jd	g¡ W d   ƒ n1 sÃw   Y  | jtjd
dd.}|  ||jd¡ |  ||jdg¡ |  ||j	d| j
¡ |  ||j	d| j¡ W d   ƒ d S 1 sw   Y  d S )NÚwúutf-8r)   Úwbr   ©Ú	bufferingÚrbs   blahs   blah
r'   Zblahzblah
rM   rš   )rˆ   r+   r   r¥   r°   rZ   Úreadliner=   Ú
writelinesrJ   ÚSEEK_CURÚSEEK_END)r8   ÚexcÚfpr   r   r   Útest_invalid_operations—  s6   þþþþþ$û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ƒrd}nˆ  
d¡ d|v r| ¡  nˆ  t|j¡ |r°| d¡ | ¡  nˆ  t|jd¡ ˆ  t|j¡ |rÇ| |¡ nˆ  t|j|¡ tj d¡ré|
||fv ré	 W d   ƒ W d   ƒ qTd|v }ˆ  | ¡ |¡ |r| ¡  | d¡ nˆ  t|j¡ ˆ  t|jd¡ |r!|r!| ¡  | d¡ nˆ  t|j¡ ˆ  t|jd¡ W d   ƒ n	1 s;w   Y  W d   ƒ qT1 sKw   Y  qTd S )Nc                     s"   t  ¡ \} }t  |¡ ˆ  | d¡S )Nr'   )ÚosÚpiperz   ÚFileIO)r'   rÂ   r@   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Ð   Ú
addCleanuprz   rk   ÚThreadrZ   Ústartr•   rÑ   )r'   rÂ   Úthreadr@   r   r   Úpipe_writer»  s   z3IOTest.test_optional_abilities.<locals>.pipe_writerc                      ó   ˆ   ˆ  ¡ ¡S r:   )ÚBufferedReaderrƒ   r   r@   r   r   Úbuffered_readerÄ  ó   z7IOTest.test_optional_abilities.<locals>.buffered_readerc                      rÛ   r:   )ÚBufferedWriterrƒ   r   r@   r   r   Úbuffered_writerÇ  rÞ   z7IOTest.test_optional_abilities.<locals>.buffered_writerc                      rÛ   r:   )ÚBufferedRandomÚBytesIOr   r@   r   r   Úbuffered_randomÊ  rÞ   z7IOTest.test_optional_abilities.<locals>.buffered_randomc                      s   ˆ   ˆ  ¡ ˆ  ¡ ¡S r:   )ÚBufferedRWPairrƒ   r   r@   r   r   Úbuffered_rw_pairÍ  s   
ÿz8IOTest.test_optional_abilities.<locals>.buffered_rw_pairc                     ó$   G ‡ fdd„dˆ j ƒ} ˆ  | ƒ d¡S )Nc                       ó   e Zd Z” jjZ” jjZdS )zMIOTest.test_optional_abilities.<locals>.text_reader.<locals>.UnseekableReaderN)r"   r#   r$   ÚBufferedIOBaserA   r=   r   r@   r   r   ÚUnseekableReaderÒ  ó    ré   Úascii©rƒ   ÚTextIOWrapper)ré   r@   r   r   Útext_readerÑ  ó   z3IOTest.test_optional_abilities.<locals>.text_readerc                     ræ   )Nc                       rç   )zMIOTest.test_optional_abilities.<locals>.text_writer.<locals>.UnseekableWriterN)r"   r#   r$   rè   rF   rZ   r   r@   r   r   ÚUnseekableWriterØ  rê   rð   rë   rì   )rð   r@   r   r   Útext_writer×  rï   z3IOTest.test_optional_abilities.<locals>.text_writerÚfrÚfwr'   rÂ   ZrwsÚrwÚ3ó   3zUnknown base classr/   rM   Úwinr–   r   )râ   ÚStringIOÚsubTestr®   rF   rA   Ú
isinstanceÚ
TextIOBaserè   Ú	RawIOBaseÚfailrE   r°   ry   rZ   r=   ÚsysÚplatformÚ
startswithrG   rK   rJ   rR   )r8   rÒ   rÚ   rÝ   rà   rã   rå   rî   rñ   ÚtestsÚtestZ	abilitiesr   rF   rA   r   rG   r   r@   r   Útest_optional_abilities°  st   	û



ÿß"€Ï€  ÿzIOTest.test_optional_abilitiesc                 C   st   d}| j t| j|ddd t|dƒ}t ¡  t dt¡ | j t| j|ddd W d   ƒ d S 1 s3w   Y  d S )Nzfoo barrÂ   rÃ   r)   rë   Úignore)r°   rœ   r+   r   ÚwarningsÚcatch_warningsÚsimplefilterÚDeprecationWarning)r8   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%}|  | ¡ d¡ |  | ¡ d¡ |  | ¡ d¡ |  |¡ W d   ƒ n1 s1w   Y  | j tjddd&}|  | ¡ d¡ |  | ¡ d¡ |  | ¡ d¡ |  |¡ W d   ƒ d S 1 shw   Y  d S )NrÄ   r   rÅ   FTrÇ   ©	r+   r   r¥   r®   rF   rA   rG   r³   rº   rÀ   r   r   r   Útest_raw_file_io!  s   ü"üzIOTest.test_raw_file_ioc                 C   sØ   |   tjd¡%}|  | ¡ d¡ |  | ¡ d¡ |  | ¡ d¡ |  |¡ W d   ƒ n1 s/w   Y  |   tjd¡'}|  | ¡ d¡ |  | ¡ d¡ |  | ¡ d¡ |  |d¡ W d   ƒ d S 1 sew   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w   Y  |   tjd¡D}|  | ¡ d¡ |  | d¡d¡ |  | d¡d¡ |  | d	¡d
¡ |  | ¡ d¡ |  | d ¡d¡ |  t|jd¡ W d   ƒ n1 sjw   Y  | j tjddd}|  t|jd¡ W d   ƒ d S 1 sŒw   Y  d S )NrÄ   s"   abc
def
xyzzy
foo bar
another linerÇ   ó   abc
r¸   ó   def
ra   ó   xyé   s   zzy
s   foo bar
s   another lineg333333@r'   rÃ   r)   )r+   r   r¥   r=   r®   rÈ   r°   r±   rÀ   r   r   r   Útest_readline9  s   ÿù"ÿzIOTest.test_readlinec                 C   s*   G dd„ d| j ƒ}|  ttft|ƒ ¡ d S )Nc                   @   ó   e Zd Zdd„ ZdS )z+IOTest.test_readline_nonsizeable.<locals>.Rc                 S   ó   d S r:   r   r@   r   r   r   rÈ   K  rB   z4IOTest.test_readline_nonsizeable.<locals>.R.readlineN)r"   r#   r$   rÈ   r   r   r   r   ÚRJ  ó    r  )ÚIOBaser°   r±   ÚStopIterationÚnext©r8   r  r   r   r   Útest_readline_nonsizeableG  s   z IOTest.test_readline_nonsizeablec                 C   s(   G dd„ d| j ƒ}|  t|ƒ jd¡ d S )Nc                   @   r  )z'IOTest.test_next_nonsizeable.<locals>.Rc                 S   r  r:   r   r@   r   r   r   Ú__next__S  rB   z0IOTest.test_next_nonsizeable.<locals>.R.__next__N)r"   r#   r$   r  r   r   r   r   r  R  r  r  rM   )r  r°   r±   Ú	readlinesr  r   r   r   Útest_next_nonsizeableO  s   zIOTest.test_next_nonsizeablec                 C   s@   |   ¡ }|  |¡ | ¡ }|  |d¡ |   |¡}|  |d¡ d S )Nr¶   T)râ   r³   Úgetvaluer®   rº   )r8   r/   r   r   r   r   Útest_raw_bytes_ioW  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/w   Y  |  tjd¡}|  |¡ W d   ƒ d S 1 sLw   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   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w   Y  |  |jd¡ d }z|   tjd|¡}dd  W d   ƒ n1 sDw   Y  W n tyZ   |  |jd¡ Y qw |  d¡ qd S )N)r   rÓ   rÄ   r»   TrM   r   z1/0 didn't raise an exception)r+   r   r¥   r=   r®   rx   ÚZeroDivisionErrorrý   )r8   Úbufsizer/   r   r   r   Útest_with_openl  s"   ÿ
ÿ€ÿôzIOTest.test_with_openc                 C   s   |   tjd¡}| d¡ W d   ƒ n1 sw   Y  | j tjddd}|  | ¡ d¡ W d   ƒ n1 s8w   Y  |   tjd¡}|  | ¡ d¡ W d   ƒ n1 sWw   Y  | j tjddd	}|  | ¡ d¡ W d   ƒ d S 1 syw   Y  d S )
NrÄ   r»   Úabr   rÅ   r¼   ÚarÃ   r)   )r+   r   r¥   r=   r®   rK   ÚassertGreaterrÀ   r   r   r   Útest_append_mode_tell|  s   ÿÿÿ"ÿzIOTest.test_append_mode_tellc              	      sÌ   g ‰ G ‡ fdd„d| j ƒ}t dtf¡H |tjdƒ}| d¡ ~t ¡  |  	ˆ g d¢¡ |  
tjd¡}|  	| ¡ d¡ W d   ƒ n1 sGw   Y  W d   ƒ d S W d   ƒ d S 1 s_w   Y  d S )Nc                       ó:   e Zd Z‡ ‡fdd„Z‡ ‡fdd„Z‡ ‡fdd„Z‡  ZS )z(IOTest.test_destructor.<locals>.MyFileIOc                    ó6   ˆ  d¡ ztƒ j}W n
 ty   Y d S w |ƒ  d S rv   ©r;   rb   Ú__del__ÚAttributeErrorrÀ   ©rd   Úrecordr   r   r-  ‰  ó   
ÿ
z0IOTest.test_destructor.<locals>.MyFileIO.__del__c                    ó   ˆ  d¡ tƒ  ¡  d S r`   ©r;   rb   rz   r@   r/  r   r   rz   ‘  rn   z.IOTest.test_destructor.<locals>.MyFileIO.closec                    r2  ©Nr¼   ©r;   rb   rr   r@   r/  r   r   rr   ”  rn   z.IOTest.test_destructor.<locals>.MyFileIO.flush©r"   r#   r$   r-  rz   rr   rg   r   ©r0  rc   r   ÚMyFileIOˆ  ó    r8  r&   rÄ   r»   ©rM   ra   r¼   rÇ   )rÑ   r   Úcheck_warningsÚResourceWarningr   r¥   r=   r   Ú
gc_collectr®   r+   rZ   )r8   r8  r/   r   r7  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 )NrM   ra   r¼   )Úon_delÚon_closeÚon_flushr@   r   r   r   r9   £  s   
z4IOTest._check_base_destructor.<locals>.MyIO.__init__c                    s8   ˆ  | j¡ ztƒ j}W n
 ty   Y d S w |ƒ  d S r:   )r;   r?  rb   r-  r.  rÀ   r/  r   r   r-  «  s   ÿ
z3IOTest._check_base_destructor.<locals>.MyIO.__del__c                    ó   ˆ  | j¡ tƒ  ¡  d S r:   )r;   r@  rb   rz   r@   r/  r   r   rz   ³  ó   z1IOTest._check_base_destructor.<locals>.MyIO.closec                    rB  r:   )r;   rA  rb   rr   r@   r/  r   r   rr   ¶  rC  z1IOTest._check_base_destructor.<locals>.MyIO.flush)r"   r#   r$   r9   r-  rz   rr   rg   r   r7  rc   r   ÚMyIO¢  s
    rD  r:  )r   r=  r®   )r8   ÚbaserD  r/   r   r7  r   Ú_check_base_destructor   s   zIOTest._check_base_destructorc                 C   ó   |   | j¡ d S r:   )rF  r  r@   r   r   r   Útest_IOBase_destructor¾  re   zIOTest.test_IOBase_destructorc                 C   rG  r:   )rF  rü   r@   r   r   r   Útest_RawIOBase_destructorÁ  re   z IOTest.test_RawIOBase_destructorc                 C   rG  r:   )rF  rè   r@   r   r   r   Útest_BufferedIOBase_destructorÄ  re   z%IOTest.test_BufferedIOBase_destructorc                 C   rG  r:   )rF  rû   r@   r   r   r   Útest_TextIOBase_destructorÇ  re   z!IOTest.test_TextIOBase_destructorc                 C   s|   |   tjd¡}| d¡ W d   ƒ n1 sw   Y  |   tjd¡}|  | ¡ d¡ W d   ƒ d S 1 s7w   Y  d S )NrÄ   r»   rÇ   ©r+   r   r¥   r=   r®   rZ   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                    sH   |  ˆ  |  ˆ ¡ˆ¡ |  ˆ f¡ W d   ƒ d S 1 sw   Y  d S r:   )r®   r=   rÉ   r.   ©r'  rP   r8   r   r   ÚcheckÓ  s   "þz'IOTest.test_array_writes.<locals>.checkrÂ   )r   Úranger   Útobytesrâ   rÑ   r   r¥   rß   rV   rá   rä   )r8   rP  r   rO  r   Útest_array_writesÐ  s   zIOTest.test_array_writesc                 C   ó   | j t| jtjdddd d S )NrÂ   rÃ   F©r*   Úclosefd©r°   rœ   r+   r   r¥   r@   r   r   r   Útest_closefdÝ  s   
ÿzIOTest.test_closefdc                 C   s0  | j tjddd}| d¡ W d   ƒ n1 sw   Y  | j tjddd+}| j | ¡ dddd}|  | ¡ d¡ | d¡ | ¡  |  	t
|j¡ W d   ƒ n1 sUw   Y  |   tjd	¡-}| j | ¡ d	dd
}|  | ¡ d d… d¡ | ¡  |  	t
|jtdƒ¡ W d   ƒ d S 1 s‘w   Y  d S )NrÂ   rÃ   r)   úegg
r'   FrU  r   rÇ   ©rV  r¼   s   eggrM   )r+   r   r¥   r=   rE   r®   rZ   rJ   rz   r°   rœ   rQ   r¯   ©r8   r/   Úfiler   r   r   Útest_read_closedá  s    ÿ
û"üzIOTest.test_read_closedc                 C   rT  )Nr'   rÃ   FrU  rW  r@   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w   Y  | j tjddd&}|  |jjjd¡ | j | ¡ dddd}|  |jjjd¡ W d   ƒ d S 1 sNw   Y  d S )	NrÄ   s   egg
r'   rÃ   r)   TFrU  )	r+   r   r¥   r=   r®   r²   ÚrawrV  rE   r[  r   r   r   Útest_closefd_attrõ  s   ÿ"ýzIOTest.test_closefd_attrc                 C   s²   t  dtf¡! |  tjd¡}| d¡ ||_t 	|¡}~t
 ¡  W d   ƒ n1 s+w   Y  |  |ƒ |¡ |  tjd¡}|  | ¡ d¡ W d   ƒ d S 1 sRw   Y  d S )Nr&   rÄ   s   abcxxxrÇ   )r   r;  r<  rÑ   r   r¥   r=   r/   ÚweakrefÚrefr   r=  ÚassertIsNoner+   r®   rZ   )r8   r/   Úwrr   r   r   Útest_garbage_collectioný  s   


ú"ÿzIOTest.test_garbage_collectionc                 C   s  d}t j |¡s|  d |¡¡ tjdkr|  d¡ tjtj	k r%|  d¡ | j
|ddd}|  t|j¡ W d   ƒ n1 s?w   Y  |  
|d¡}|  t|j¡ W d   ƒ n1 s\w   Y  |  
|d	¡}|  t|j¡ W d   ƒ d S 1 szw   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¾   rZ   )r8   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ƒ ‚r:   rw   r   ©rx   r/   r   r   Ú	bad_flush   s   z4IOTest.check_flush_error_on_close.<locals>.bad_flushr   c                   S   r  r:   r   r   r   r   r   Ú<lambda>(  ó    z3IOTest.check_flush_error_on_close.<locals>.<lambda>)r+   rr   r°   ry   rz   Ú
assertTruerx   ÚassertFalse)r8   rŠ   Úkwargsrm  r   rl  r   Úcheck_flush_error_on_close  s   
z!IOTest.check_flush_error_on_closec                 C   s8  | 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 |¡ | 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 |¡ d S )NrÄ   r   rÅ   F)rÆ   rV  rZ  rÂ   rÃ   r)   rU  )rs  r   r¥   rÏ   r+   ÚO_WRONLYÚO_CREATrz   )r8   Ú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¥   rz   r°   rœ   rr   rÀ   r   r   r   Útest_multi_closeB  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ó   efgNra   ó   abó   crz  ó   efó   grW   )r1   r®   rZ   ©r8   Úrawior   r   r   Útest_RawIOBase_readI  s   
zIOTest.test_RawIOBase_readc                 C   s@   |   ¡ |  ¡ |  ¡ |  ¡ |  ¡ f}|D ]
}|  t|dƒ¡ qd S )NÚ__dict__)r  rü   rû   rø   râ   rp  Úhasattr)r8   r  r   r   r   r   Útest_types_have_dictV  s   ûÿzIOTest.test_types_have_dictc                    s    | j tjddd}| d¡ W d   ƒ n1 sw   Y  t  tjtj¡‰ ‡ fdd„}| j ddd|d	}|  | ¡ d¡ W d   ƒ d S 1 sIw   Y  d S )
NrÂ   rÃ   r)   rY  c                    ó   ˆ S r:   r   )rg  Úflags©rv  r   r   Úopenere  rB   z"IOTest.test_opener.<locals>.openerúnon-existentr'   )r*   r‰  )r+   r   r¥   r=   rÏ   ÚO_RDONLYr®   rZ   )r8   r/   r‰  r   rˆ  r   Útest_openera  s   ÿ"ÿzIOTest.test_openerc                 C   óV   dd„ }|   t¡}tdd|d W d   ƒ n1 sw   Y  |  t|jƒd¡ d S )Nc                 S   r>   ©Nrš   r   ©Úfnamer‡  r   r   r   Ú	badopenerl  rB   z4IOTest.test_bad_opener_negative_1.<locals>.badopenerrŠ  r'   ©r‰  zopener returned -1©r°   rœ   r+   r®   ÚstrÚ	exception©r8   r‘  Úcmr   r   r   Útest_bad_opener_negative_1j  ó
   ÿz!IOTest.test_bad_opener_negative_1c                 C   r  )Nc                 S   r>   )Néþÿÿÿr   r  r   r   r   r‘  t  rB   z8IOTest.test_bad_opener_other_negative.<locals>.badopenerrŠ  r'   r’  zopener returned -2r“  r–  r   r   r   Útest_bad_opener_other_negativer  r™  z%IOTest.test_bad_opener_other_negativec              	   C   sª   |   td¡E}|   td¡&}| j| ¡ dd}|j| ¡ dd | ¡  | ¡  | ¡  W d   ƒ n1 s6w   Y  W d   ƒ d S W d   ƒ d S 1 sNw   Y  d S )NrÇ   FrZ  )r+   r,   rÑ   rE   r9   rÈ   rz   )r8   Úf1Úf2Zfileior   r   r   Útest_fileio_closefdz  s   
ÿ
PøzIOTest.test_fileio_closefdc              	   C   ó~   t  | ¡0 |  t¡ | jtjdddd W d   ƒ n1 s w   Y  W d   ƒ d S W d   ƒ d S 1 s8w   Y  d S )NrÂ   rÃ   r   ©r*   rÆ   ©r   Úcheck_no_resource_warningr°   rœ   r+   r   r¥   r@   r   r   r   Útest_nonbuffered_textio†  ó   ÿÿ"ÿzIOTest.test_nonbuffered_textioc              	   C   rŸ  )NrÂ   rÃ   Úinvalid©r*   Únewliner¡  r@   r   r   r   Útest_invalid_newline‹  r¤  zIOTest.test_invalid_newlinec              	   C   s~   G dd„ d| j ƒ}|ƒ }dD ].}|  |¡ tdƒ}|  t||ƒ|ƒd¡ |  t|ƒd¡ W d   ƒ q1 s7w   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   r>   )Nó   12345r   ©r8   Úsizer   r   r   rZ   “  rB   z8IOTest.test_buffered_readinto_mixin.<locals>.Stream.readN)r"   r#   r$   rZ   Úread1r   r   r   r   ÚStream’  s    r­  ©rQ   r¹   rf   r©  )rè   rù   r   r®   Úgetattrr   )r8   r­  ÚstreamÚmethodr²   r   r   r   Útest_buffered_readinto_mixin  s   ýÿz#IOTest.test_buffered_readinto_mixinc              	      sr  ‡ fdd„}|t tjƒƒ |t t tj¡ƒƒ ˆ jtjddd+}t | ¡ ƒ}ˆ  t¡ ˆ j|ddd W d   ƒ n1 s?w   Y  W d   ƒ n1 sNw   Y  t d ƒ}ˆ  t¡ ˆ j|ddd W d   ƒ n1 sow   Y  t t	ƒ}ˆ  t	¡ ˆ j|ddd W d   ƒ n1 sw   Y  ˆ  
td¡ ˆ jt tjƒddd W d   ƒ d S 1 s²w   Y  d S )Nc                    s€   ˆ j | ddd}| d¡ W d   ƒ n1 sw   Y  ˆ j | ddd}ˆ  | ¡ d¡ W d   ƒ d S 1 s9w   Y  d S )NrÂ   rÃ   r)   rY  r'   )r+   r=   r®   rZ   )rg  r/   r@   r   r   Úcheck_path_succeedsž  s   ÿ"ÿz7IOTest.test_fspath_support.<locals>.check_path_succeedsrÂ   rÃ   r)   zread/write/append modeZrwxa)r   r   r¥   rÏ   Úfsencoder+   rE   r°   r±   ÚFloatingPointErrorÚassertRaisesRegexrœ   )r8   r³  r/   Zbad_pathr   r@   r   Útest_fspath_support  s*   ÿ€þÿÿ"ÿzIOTest.test_fspath_supportc                 C   s8   |   d¡}|  | ¡ d¡ |   d¡}|  | ¡ d¡ d S ©N©ry  rz  r{  ó   abcdefg)r1   r®   rZ   Úreadallr€  r   r   r   Útest_RawIOBase_readall¹  s   

zIOTest.test_RawIOBase_readallc              	   C   sö   G dd„ d| j ƒ}d}d}|D ]i}|  |¡Z |\}}}}|tt|ƒƒƒ}	t|f| ƒ}
t|	|ƒ}|  ||
ƒ|¡ |  t|
ƒ|¡ |  |
d |… t|ƒ¡ |f||  }|  |
|d … |¡ |  t|	j	ƒ|| ¡ W d   ƒ q1 ssw   Y  qd S )Nc                   @   ó$   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 r:   ©Úavail)r8   r¿  r   r   r   r9   Å  r‹   z<IOTest.test_BufferedIOBase_readinto.<locals>.Reader.__init__c                 S   s"   | j d |… }| j |d … | _ |S r:   r¾  )r8   r«  Úresultr   r   r   rZ   Ç  s   z8IOTest.test_BufferedIOBase_readinto.<locals>.Reader.readc                 S   s   |   t|dƒ¡S )z$Returns no more than 5 bytes at oncerf   N)rZ   Úminrª  r   r   r   r¬  Ë  s   z9IOTest.test_BufferedIOBase_readinto.<locals>.Reader.read1N)r"   r#   r$   r9   rZ   r¬  r   r   r   r   ÚReaderÄ  s    rÂ  )
)rQ   r¸   rf   rf   )rQ   r¸   r¨   r¨   )rQ   rf   r¨   rf   )rQ   r¨   é   r¨   )rQ   r¸   r   r   )r¹   r¸   rf   rf   )r¹   r¸   r¨   rf   )r¹   rf   r¨   rf   )r¹   r¨   rÃ  rf   )r¹   r¸   r   r   é   )
rè   rù   r   rQ  r¯   r¯  r®   r   ZassertSequenceEqualr¿  )r8   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                   @   ó   e Zd Zdd„ Zdd„ ZdS )z#IOTest.test_close_assert.<locals>.Rc                 S   r  r:   r   )r8   ÚnameÚvaluer   r   r   Ú__setattr__ì  rB   z/IOTest.test_close_assert.<locals>.R.__setattr__c                 S   ó   t ƒ ‚r:   ©ry   r@   r   r   r   rr   î  ó   z)IOTest.test_close_assert.<locals>.R.flushN)r"   r#   r$   rÊ  rr   r   r   r   r   r  ë  s    r  c                 S   r  r:   r   r@   r   r   r   rn  õ  ro  z*IOTest.test_close_assert.<locals>.<lambda>)r  r°   ry   rz   rr   )r8   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>  rF  rH  rI  rJ  rK  rM  rS  rX  r]  r^  r`  re  rk  rs  rw  rx  r‚  r…  rŒ  r˜  r›  rž  r£  r¨  r²  r·  r¼  rÆ  rÎ  r   r   r   r   r¡   @  sb    
!h	
	)r¡   c                   @   r  )ÚCIOTestc                 C   sL   G dd„ d| j ƒ}|ƒ  |ƒ }||_t |¡}~~t ¡  |  |ƒ |¡ d S )Nc                   @   r  )z*CIOTest.test_IOBase_finalize.<locals>.MyIOc                 S   r  r:   r   r@   r   r   r   rz   ÿ  rB   z0CIOTest.test_IOBase_finalize.<locals>.MyIO.closeN©r"   r#   r$   rz   r   r   r   r   rD  þ  r  rD  )r  r   ra  rb  r   r=  rc  )r8   rD  r   rd  r   r   r   Útest_IOBase_finalizeú  s   
zCIOTest.test_IOBase_finalizeN)r"   r#   r$   rÒ  r   r   r   r   rÐ  ø  s    rÐ  c                   @   r    )ÚPyIOTestNr!   r   r   r   r   rÓ    r%   rÓ  c                   @   rÇ  )Ú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®   ro   ©r8   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®   ro   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 r:   )rV   ÚtpÚassertIsÚdetachr°   rœ   Úrepr©r8   r_  rO   r   r   r   Útest_detach"  s
   
zCommonBufferedTests.test_detachc                 C   s&   |   ¡ }|  |¡}|  d| ¡ ¡ d S rC   )rV   rÝ  r®   rE   ©r8   r  Úbufior   r   r   Útest_fileno*  s   
zCommonBufferedTests.test_filenoc                 C   s:   |   ¡ }|  |¡}|  t|jdd¡ |  t|jdd¡ d S )Nr   rš   r©   )rV   rÝ  r°   rœ   rJ   rã  r   r   r   Útest_invalid_args0  s   
z%CommonBufferedTests.test_invalid_argsc                    sL   | j }g ‰ G ‡ fdd„d|ƒ}|  ¡ }||ƒ}~t ¡  |  ˆ g d¢¡ d S )Nc                       r*  )zBCommonBufferedTests.test_override_destructor.<locals>.MyBufferedIOc                    r+  rv   r,  rÀ   r/  r   r   r-  ;  r1  zJCommonBufferedTests.test_override_destructor.<locals>.MyBufferedIO.__del__c                    r2  r`   r3  r@   r/  r   r   rz   C  rn   zHCommonBufferedTests.test_override_destructor.<locals>.MyBufferedIO.closec                    r2  r4  r5  r@   r/  r   r   rr   F  rn   zHCommonBufferedTests.test_override_destructor.<locals>.MyBufferedIO.flushr6  r   r7  rc   r   ÚMyBufferedIO:  r9  rç  r:  )rÝ  rV   r   r=  r®   )r8   rÝ  rç  r  rä  r   r7  r   Útest_override_destructor7  s   z,CommonBufferedTests.test_override_destructorc                    s4   |   ¡ }|  |¡‰ ‡ fdd„}|ƒ  |  t|¡ d S )Nc                      s*   ˆ 	 W d   ƒ d S 1 sw   Y  d S r:   r   r   ©rä  r   r   Ú_withS  s   "ÿz7CommonBufferedTests.test_context_manager.<locals>._with)rV   rÝ  r°   rœ   )r8   r  rê  r   ré  r   Útest_context_managerO  s
   
z(CommonBufferedTests.test_context_managerc              	   C   s¸   |   ¡ }t ¡ J}|  t¡ |  |¡j W d   ƒ n1 sw   Y  ts-|  |j	¡ n|j	d urB|  
|j	jt¡ W d   ƒ d S W d   ƒ d S W d   ƒ d S 1 sUw   Y  d S r:   )ru   r   Úcatch_unraisable_exceptionr°   r.  rÝ  ÚxyzzyÚIOBASE_EMITS_UNRAISABLErc  Ú
unraisabler®   Úexc_typery   ©r8   r  r—  r   r   r   Útest_error_through_destructor[  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'>)rV   rÝ  r#   r$   ÚassertRegexrà  rÈ  )r8   r_  r   Zclsnamer   r   r   Ú	test_reprh  s   
zCommonBufferedTests.test_reprc              	   C   sv   |   ¡ }|  |¡}t |d|¡! zt|ƒ W n	 ty    Y n	w W d   ƒ d S W d   ƒ d S 1 s4w   Y  d S )NrÈ  )rV   rÝ  r   Ú	swap_attrrà  ÚRuntimeError©r8   r_  r   r   r   r   Útest_recursive_reprr  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ƒ ‚r:   rw   r   ©r   rx   r_  r   r   rm    s   z@CommonBufferedTests.test_flush_error_on_close.<locals>.bad_flushr   rM   c                   S   r  r:   r   r   r   r   r   rn  Œ  ro  z?CommonBufferedTests.test_flush_error_on_close.<locals>.<lambda>)	rV   rr   rÝ  r°   ry   rz   rp  rx   rq  ©r8   rm  r   rû  r   rw  |  s   

z-CommonBufferedTests.test_flush_error_on_closec                 C   s¶   |   ¡ }dd„ }dd„ }||_|  |¡}||_|  t¡}| ¡  W d   ƒ n1 s+w   Y  |  |jjd¡ |  	|jj
t¡ |  |jj
jd¡ |  |j¡ dd„ |_d	d„ |_d S )
Nc                   S   ó   t dƒ‚©Nrr   rÌ  r   r   r   r   rm    ó   z@CommonBufferedTests.test_close_error_on_close.<locals>.bad_flushc                   S   rý  ©Nrz   rÌ  r   r   r   r   Ú	bad_close’  rÿ  z@CommonBufferedTests.test_close_error_on_close.<locals>.bad_close©rz   ©rr   c                   S   r  r:   r   r   r   r   r   rn  Ÿ  ro  z?CommonBufferedTests.test_close_error_on_close.<locals>.<lambda>c                   S   r  r:   r   r   r   r   r   rn     ro  )rV   rz   rÝ  rr   r°   ry   r®   r•  rŠ   ÚassertIsInstanceÚ__context__rq  rx   ©r8   r_  rm  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 s+w   Y  |  dt|jƒ¡ |  	|jj
t¡ |  dt|jj
ƒ¡ |  |j¡ dd„ |_d	d„ |_d S )
Nc                   S   ó   t ‚r:   ©Únon_existing_flushr   r   r   r   rm  ¥  rB   zNCommonBufferedTests.test_nonnormalized_close_error_on_close.<locals>.bad_flushc                   S   r	  r:   ©Únon_existing_closer   r   r   r   r  §  rB   zNCommonBufferedTests.test_nonnormalized_close_error_on_close.<locals>.bad_closer  r  c                   S   r  r:   r   r   r   r   r   rn  ´  ro  zMCommonBufferedTests.test_nonnormalized_close_error_on_close.<locals>.<lambda>c                   S   r  r:   r   r   r   r   r   rn  µ  ro  )rV   rz   rÝ  rr   r°   Ú	NameErrorÚassertInr”  r•  r  r  rq  rx   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 r:   )rV   rÝ  rz   r°   rœ   rr   rù  r   r   r   rx  ·  s   
z$CommonBufferedTests.test_multi_closec                 C   s6   |   |  d¡¡}|  | j|j¡ |  | j|jd¡ d S )Nó
   AAAAAAAAAAr   )rÝ  rƒ   r°   rˆ   rK   rJ   ©r8   rä  r   r   r   Útest_unseekable¿  s   z#CommonBufferedTests.test_unseekablec                 C   sP   |   ¡ }|  |¡}|   ¡ }|  t¡ ||_W d   ƒ d S 1 s!w   Y  d S r:   )rV   rÝ  r°   r.  r_  )r8   r_  rO   Úxr   r   r   Útest_readonly_attributesÄ  s   
"ÿz,CommonBufferedTests.test_readonly_attributesN)r"   r#   r$   râ  rå  ræ  rè  rë  rò  rö  rú  rw  r  r  rx  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)rV   rÝ  rþ   Ú	getsizeofr®   )r8   Zbufsize1Zbufsize2r  rä  r«  r   r   r   Útest_sizeofÎ  s   zSizeofTest.test_sizeofc                 C   sF   d}|   ¡ }| j||d}t |¡| }| ¡  |  t |¡|¡ d S )Nr  r  )rV   rÝ  rþ   r  rz   r®   )r8   r$  r  rä  r«  r   r   r   Útest_buffer_freeingÙ  s   zSizeofTest.test_buffer_freeingN)r"   r#   r$   r   Úcpython_onlyr  r  r   r   r   r   r  Ì  s
    

r  c                   @   sº   e Zd ZdZdd„ Zdd„ Zdd„ Zdd	„ Zd
d„ Zdd„ Z	dd„ Z
dd„ Zdd„ Zdd„ Zdd„ Zdd„ Zdd„ Zdd„ Ze d¡dd „ ƒZd!d"„ Zd#d$„ Zd%d&„ Zd'd(„ Zd)d*„ Zd+S ),ÚBufferedReaderTestrÇ   c                 C   s²   |   dg¡}|  |¡}| |¡ |j|dd |j|dd |  d| ¡ ¡ | jt|j|dd | jt|j|dd | jt|j|dd |   dg¡}| |¡ |  d| ¡ ¡ d S )Nry  é   r  é   r   éðÿÿÿrš   )rV   rÝ  r9   r®   rZ   r°   rœ   rã  r   r   r   Útest_constructorå  s   


z#BufferedReaderTest.test_constructorc                 C   óX   | j  | j ¡}~| j  | j ¡}|  ttfd|jd¡ | |  ¡ ¡ |  | d¡d¡ d S ©Núuninitialized|has no attributer   rW   )	rÝ  Ú__new__r¶  rœ   r.  rZ   r9   rV   r®   r  r   r   r   Útest_uninitializedó  ó   
þz%BufferedReaderTest.test_uninitializedc                 C   sD   dD ]}|   d¡}|  |¡}|  d| |¡¡ q|  t|jd¡ d S )N)NrÃ  r¹  rº  rš  )rV   rÝ  r®   rZ   r°   rœ   )r8   Úargr  rä  r   r   r   Ú	test_readý  s
   

zBufferedReaderTest.test_readc                 C   sÜ   |   d¡}|  |¡}|  d| d¡¡ |  d| d¡¡ |  |jd¡ |  d| d¡¡ |  d| d¡¡ |  |jd¡ |  d	| d¡¡ |  |jd
¡ |  d| d¡¡ |  |jd¡ |  d| d¡¡ |  |jd¡ d S )Nr¹  ó   arM   ó   brW   r   r}  rÓ   rz  ra   r{  r¼   r  ©rV   rÝ  r®   rZ   r¬  r6   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,  rM   s   bcrz  r{  rš   r¼   rW   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¹  ra   r|  ó   cdr~  rM   s   gfr   )ry  Ns   cb)rV   rÝ  r¯   r®   rQ   )r8   r  rä  r   r   r   r   Útest_readinto   s&   



z BufferedReaderTest.test_readintoc                 C   s4  d}|   d¡}| j||d}tdƒ}|  | d¡d¡ |  |jd¡ |  | |¡d¡ |  |d¡ |  |jd¡ |  | |¡d¡ |  |d d… d	¡ |  |jd¡ |  | |¡d¡ |  |d
¡ |  |jd¡ td| ƒ}|  | d¡d¡ |  |jd¡ |  | |¡d¡ |  |d d… d¡ |  |jd¡ d S )Nr¸   )ry  ó   deó   fghs   jklr  ra   r¼   ry  rM   r|  r}  r3  r4  r¨   s   fghjklr  )rV   rÝ  r¯   r®   Úpeekr6   r¹   )r8   r  r  rä  r   r   r   r   Útest_readinto15  s*   
z!BufferedReaderTest.test_readinto1c                 C   óª   d}d}|   |f¡}| j||d}t dd¡}| |¡}|  |t|ƒ¡ t|ƒ d¡}|  |t|ƒ¡ |  	|d |… |d |… ¡ |  	||d … dt||d … ƒ ¡ d S ©Né<   s   aaaaaaaaaaaaaaaaaaaaaaaaaar  rN  s    xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxr   r·   )
rV   rÝ  r   rQ   r(  r   r   r   Ú
assertLessr®   ©r8   r  r   r  rä  r   rP   Zbmr   r   r   Útest_readinto_arrayL  ó   
(z&BufferedReaderTest.test_readinto_arrayc                 C   r7  r8  )
rV   rÝ  r   r¹   r(  r   r   r   r:  r®   r;  r   r   r   Útest_readinto1_arraya  r=  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´   r~  )rV   rÝ  )r  r@   r   r   rä  w  ó   

z0BufferedReaderTest.test_readlines.<locals>.bufior?  rf   r  r´   ©r®   r  r  r   r@   r   Útest_readlinesv  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 ]2\}}}|  |¡}| j||d	}d}	|D ]}
|  | |
¡||	|	|
 … ¡ |	|
7 }	q6|  |j|¡ q!d S )
Nó	   abcdefghirÓ   )r¼   rM   r  é   r   )r¼   r¼   r¼   r  )rM   ra   r  ra   )r  r  rM   r  )r   r}   rÝ  r®   rZ   r~   )r8   r   Zdlenr  r$  Zbuf_read_sizesZraw_read_sizesr  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)ry  rz  Nr{  NNNó   abcdr¨   ó   erM   s   fgrW   )r,  NNr,  )rV   rÝ  r®   rZ   r5  rc  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(#  ©rV   rÝ  r®   rZ   rã  r   r   r   Útest_read_past_eof¡  s   

z%BufferedReaderTest.test_read_past_eofc                 C   s(   |   d¡}|  |¡}|  d| ¡ ¡ d S r¸  rJ  rã  r   r   r   Útest_read_all§  s   

z BufferedReaderTest.test_read_allÚcpuc              	      s€  z¸d}t tdƒƒ| }t |¡ tt|ƒƒ}|  tjd¡‰ˆ 	|¡ W d   ƒ n1 s-w   Y  | jtj| j
ddc}|  |d¡‰ g ‰g ‰‡ ‡‡fdd„‰‡fd	d
„tdƒD ƒ}t |¡ t d¡ W d   ƒ n1 sow   Y  |  ˆdˆ ¡ d ˆ¡}tdƒD ]}tt|gƒƒ}|  | |¡|¡ q…W d   ƒ n1 s¢w   Y  W t tj¡ d S W t tj¡ d S t tj¡ w )Néè  é   rÄ   r   rÅ   rD  c               
      s^   zt ddgƒD ]} ˆ  | ¡}|s W d S ˆ |¡ qW d S  ty. } zˆ |¡ ‚ d }~ww )NrM   é   )r   rZ   r;   Ú	Exception)rP   r–   Úe)rä  ÚerrorsÚresultsr   r   r/   ½  s   
û
€þz*BufferedReaderTest.test_threads.<locals>.fc                    ó   g | ]}t jˆ d ‘qS ©©rÕ   ©rk   r×   ©Ú.0r  r.   r   r   Ú
<listcomp>É  ó    z3BufferedReaderTest.test_threads.<locals>.<listcomp>rµ   ç{®Gáz”?ú(the following exceptions were caught: %rrW   )r3   rQ  ÚrandomÚshuffler   r¯   r+   r   r¥   r=   Ú	read_moderÝ  r   Ústart_threadsrp   rq   rq  r•   r®   r   r¤   )r8   ÚNÚlr–   r_  ÚthreadsrN  Úcr   )rä  rS  r/   rT  r   Útest_threads­  s:   
ÿÿÿ
þêæzBufferedReaderTest.test_threadsc                 C   sb   |   |  d¡¡}|  | j|j¡ |  | j|jd¡ | d¡ |  | j|jd¡ |  | j|j¡ d S )Nr  r   rM   )rÝ  rƒ   r°   rˆ   rK   rJ   rZ   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   r  r:   r   r   r   r   r   rn  ä  ro  z7BufferedReaderTest.test_misbehaved_io.<locals>.<lambda>)r^   rÝ  r°   ry   rJ   rK   rz   rã  r   r   r   Útest_misbehaved_ioÝ  s
   

z%BufferedReaderTest.test_misbehaved_ioc              	   C   sÆ   d}d|d ||d |d fD ]Q}|   d| g¡}|  ||¡}|  | |¡d| ¡ |  |jdd ||j¡¡ |   d|d  dg¡}|  ||¡}|  | |¡d| ¡ |  |jdd ||j¡¡ qd S )Nr!  ra   rM   r·   r   zfailed for {}: {} != 0)rV   rÝ  r®   rZ   r7   ri  )r8   r$  rP   r  rä  r   r   r   Útest_no_extraneous_readæ  s   
ÿ
ÿôz*BufferedReaderTest.test_no_extraneous_readc                 C   sD   t  t  d¡¡}| d¡ | ¡  |  t|j¡ |  t|jd¡ d S )Nó   12rM   )	rŽ   rÜ   râ   rZ   rz   r°   rœ   r5  r¬  r<   r   r   r   Útest_read_on_closedú  s
   
z&BufferedReaderTest.test_read_on_closedc                 C   sH   |   d¡}|  |¡}|  | ¡ ¡ |  | j|j¡ |  | j|jd¡ d S )Nry  r   )r}   rÝ  rq  rA   r°   rˆ   rR   rã  r   r   r   Útest_truncate_on_read_only  s
   

z-BufferedReaderTest.test_truncate_on_read_onlyN)r"   r#   r$   ra  r#  r(  r+  r/  r0  r2  r6  r<  r>  rB  rF  rI  rK  rL  r   Úrequires_resourcerg  r  rh  ri  rk  rl  r   r   r   r   r  â  s.    

'	r  c                   @   sV   e Zd ZejZe ed¡dd„ ƒZ	dd„ Z
dd„ Zdd	„ Zd
d„ Zdd„ Zdd„ ZdS )ÚCBufferedReaderTestúGMSan defaults to crashing instead of returning NULL for malloc failure.c                 C   óH   t  | ¡ tjdkr"|  ¡ }|  |¡}|  ttt	f|j
|tj¡ d S d S ©Nrf  )r  r#  rþ   rj  rV   rÝ  r°   r¾   ÚMemoryErrorrœ   r9   rã  r   r   r   r#    ó   



ÿý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 )Nry  r   r  r"  rš   )rV   rÝ  r°   rœ   r9   rZ   rã  r   r   r   Útest_initialization  s   
z'CBufferedReaderTest.test_initializationc                 C   s(   |   d¡}|  |¡}|  t|jd¡ d S )Nr¹  r¸   )r^   rÝ  r°   ry   rZ   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¡! |  tjd¡}|  |¡}||_	t
 |¡}~t ¡  W d   ƒ n1 s3w   Y  |  |ƒ |¡ d S )Nr&   r!  )rÖ   r   r¤   r¥   r   r;  r<  rÑ   rÝ  r/   ra  rb  r   r=  rc  ©r8   r  r/   rd  r   r   r   re  *  s   


úz+CBufferedReaderTest.test_garbage_collectionc                 C   óF   |   td¡ |  t ¡ ddd¡ W d   ƒ d S 1 sw   Y  d S )NrÜ   r   ©r¶  r±   rÝ  rŽ   râ   r@   r   r   r   Útest_args_error7  ó   "ÿz#CBufferedReaderTest.test_args_errorc                 C   sh   t  t  d¡¡}dd„ |_|  |¡}|  t¡}| ¡  W d   ƒ n1 s&w   Y  |  |j	j
¡ d S )Nrj  c                 S   r>   rŽ  r   ©rO   r   r   r   rn  >  ro  z=CBufferedReaderTest.test_bad_readinto_value.<locals>.<lambda>)rŽ   rÜ   râ   rQ   rÝ  r°   ry   rÈ   rc  r•  Ú	__cause__©r8   r  rä  r—  r   r   r   Útest_bad_readinto_value<  s   


ÿz+CBufferedReaderTest.test_bad_readinto_valuec                 C   sj   t  t  d¡¡}dd„ |_|  |¡}|  t¡}| ¡  W d   ƒ n1 s&w   Y  |  |j	j
t¡ d S )Nrj  c                 S   r>   r”   r   r{  r   r   r   rn  F  ro  z<CBufferedReaderTest.test_bad_readinto_type.<locals>.<lambda>)rŽ   rÜ   râ   rQ   rÝ  r°   ry   rÈ   r  r•  r|  r±   r}  r   r   r   Útest_bad_readinto_typeD  s   


ÿz*CBufferedReaderTest.test_bad_readinto_typeN)r"   r#   r$   rŽ   rÜ   rÝ  ÚunittestÚskipIfÚMEMORY_SANITIZERr#  rt  ru  re  ry  r~  r  r   r   r   r   rn  
  s    



rn  c                   @   ó   e Zd ZejZdS )ÚPyBufferedReaderTestN)r"   r#   r$   r‘   rÜ   rÝ  r   r   r   r   r„  M  r   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¼   ry  r   r"  rš   ó   ghirW   s   abcghi)
rV   rÝ  r9   r®   r=   rr   r°   rœ   r•   r5   rã  r   r   r   r#  T  s   


z#BufferedWriterTest.test_constructorc                 C   r$  )Nr&  rW   r   )	rÝ  r'  r¶  rœ   r.  r=   r9   rV   r®   r  r   r   r   r(  d  r)  z%BufferedWriterTest.test_uninitializedc                 C   sD   |   ¡ }|  |¡}| d¡ |  |j¡ | ¡  |  |jdg¡ d S )Ns   howdy!)rV   rÝ  r=   rq  r5   rß  r®   rá  r   r   r   Útest_detach_flushn  s   

z$BufferedWriterTest.test_detach_flushc                 C   sh   |   ¡ }|  |d¡}| d¡ |  |j¡ tdƒ}| |¡ d|d d …< | ¡  |  d |j¡d¡ d S )NrD  ry  ó   defó   ***rW   ó   abcdef)	rV   rÝ  r=   rq  r5   r¯   rr   r®   r•   )r8   Úwriterrä  r²   r   r   r   Ú
test_writev  s   

zBufferedWriterTest.test_writec                 C   sn   |   ¡ }|  |d¡}d}tdt|ƒdƒD ]}| |||d … ¡ qd |j¡}|  | |d d… ¡|¡ d S )NrD  s   abcdefghijklmnopr   r¼   rW   iøÿÿÿ)	rV   rÝ  rQ  r   r=   r•   r5   rp  r   )r8   r‹  rä  ÚcontentsrP   Zflushedr   r   r   Útest_write_overflow‚  s   z&BufferedWriterTest.test_write_overflowc           	      C   s²   t tdƒƒd }d}|  ¡ }|  |d¡}dd„ }|ƒ }|t|ƒk rItt|ƒt|ƒ| ƒ}|  | |||| … ¡|¡ ||ƒ ||7 }|t|ƒk s!| 	¡  |  |d 
|j¡¡ d S )NrO  rN  r   r«   c                  s   s(    t dƒD ]} tdƒD ]}| V  qqd S )NrM   é   )r   rQ  )r«  rN  r   r   r   Ú	gen_sizes”  s   €ÿÿz2BufferedWriterTest.check_writes.<locals>.gen_sizesrW   )r   rQ  rV   rÝ  r   rÁ  r  r®   r=   rr   r•   r5   )	r8   Zintermediate_funcr  rP   r‹  rä  r  Úsizesr«  r   r   r   Úcheck_writes  s   üzBufferedWriterTest.check_writesc                 C   ó   |   dd„ ¡ d S )Nc                 S   r  r:   r   ré  r   r   r   rn  ¢  ro  z0BufferedWriterTest.test_writes.<locals>.<lambda>©r’  r@   r   r   r   Útest_writes¡  ó   zBufferedWriterTest.test_writesc                 C   r“  )Nc                 S   s   |   ¡ S r:   r  ré  r   r   r   rn  ¥  s    z<BufferedWriterTest.test_writes_and_flushes.<locals>.<lambda>r”  r@   r   r   r   Útest_writes_and_flushes¤  r–  z*BufferedWriterTest.test_writes_and_flushesc                 C   s(   dd„ }|   |¡ dd„ }|   |¡ d S )Nc                 S   s8   |   ¡ }|  |d d¡ |  |d d¡ |  |d¡ d S rL   )rK   rJ   ©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   rM   rš   )rJ   r˜  r   r   r   Ú_seekrel®  s   z:BufferedWriterTest.test_writes_and_seeks.<locals>._seekrelr”  )r8   r™  rš  r   r   r   Útest_writes_and_seeks§  s   
z(BufferedWriterTest.test_writes_and_seeksc                 C   r“  )Nc                 S   s   |   |  ¡ ¡S r:   )rR   rK   ré  r   r   r   rn  ¶  s    z>BufferedWriterTest.test_writes_and_truncates.<locals>.<lambda>r”  r@   r   r   r   Útest_writes_and_truncatesµ  r–  z,BufferedWriterTest.test_writes_and_truncatesc              
   C   sð   |   ¡ }|  |d¡}|  | d¡d¡ |  | d¡d¡ | d¡ |  | d¡d¡ | d¡ z| d	¡ W n | jyL } z	|j}W Y d }~n
d }~ww |  d
¡ |  |d¡ |  | ¡ d¡ |  | d¡d¡ | ¡ }|  	| 
d¡|¡ d S )NrD  rG  r  s   efghirf   ó   ks   jklmnó   0s   opqrwxyz0123456789z'BlockingIOError should have been raisedr!  s   abcdefghijklmnopqrwxyzs	   ABCDEFGHIr©   s	   01234567A)r’   rÝ  r®   r=   r™   rŸ   Úcharacters_writtenrý   r—   rp  r   )r8   r_  rä  rR  Ú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  rŠ  r¨   r   s   XYra   s   XYcdefs   123456s   XYcdef123456)	rŽ   râ   rÝ  r®   r=   rK   rJ   r  rr   ©r8   r_  rä  r   r   r   Útest_write_and_rewindÓ  s   z(BufferedWriterTest.test_write_and_rewindc                 C   s<   |   ¡ }|  |d¡}| d¡ | ¡  |  d|jd ¡ d S ©NrD  ry  r   )rV   rÝ  r=   rr   r®   r5   ©r8   r‹  rä  r   r   r   Ú
test_flushà  s
   
zBufferedWriterTest.test_flushc                 C   sF   g d¢}|   ¡ }|  |d¡}| |¡ | ¡  |  d |j¡d¡ d S ©N)r|  r1  r~  rD  rW   rŠ  )rV   rÝ  rÉ   rr   r®   r•   r5   ©r8   rd  r‹  rä  r   r   r   Útest_writelinesç  s   
z"BufferedWriterTest.test_writelinesc                 C   sJ   t g d¢ƒ}|  ¡ }|  |d¡}| |¡ | ¡  |  d |j¡d¡ d S r§  )r   rV   rÝ  rÉ   rr   r®   r•   r5   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 )NrD  r:  Úabc)rV   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¤  )rV   rÝ  r=   r   r=  r®   r5   r¥  r   r   r   r>  þ  s   
z"BufferedWriterTest.test_destructorc                 C   sÄ   |   tjtj¡ | jtj| jdd$}|  |d¡}| d¡ |  | 	d¡d¡ |  | 
¡ d¡ W d   ƒ n1 s9w   Y  | jtjddd}|  | ¡ d¡ W d   ƒ d S 1 s[w   Y  d S )	Nr   rÅ   rD  rŠ  r¼   r¨   rÇ   ry  )rÖ   r   r¤   r¥   r+   Ú
write_moderÝ  r=   r®   rR   rK   rZ   )r8   r_  rä  r/   r   r   r   Útest_truncate  s   
ü"ÿz BufferedWriterTest.test_truncatec              	   C   sÌ   |   tjtj¡ |  tjd¡}| dd ¡ W d   ƒ n1 s!w   Y  g d¢}|D ]7}| jtjd|d$}| d|d  ¡ | d¡ | ¡  |  | 	¡ |d ¡ W d   ƒ q,1 s^w   Y  q,d S )	NrÄ   ó    i'  )r  r  éÈ   zr+brÅ   rM   ra   )
rÖ   r   r¤   r¥   r+   r=   rZ   rR   r®   rK   )r8   r/   Zbuffer_sizesr  r   r   r   Útest_truncate_after_write  s   þ
úÿz,BufferedWriterTest.test_truncate_after_writerM  c           
   	      sž  zÇd}t tdƒƒ| }tddgƒ}d}tƒ ‰|t|ƒk r5t|ƒ}ˆ |||| … ¡ ||7 }|t|ƒk s~| jtj	| j
ddI}|  |d¡‰ g ‰‡ ‡‡fdd	„‰‡fd
d„tdƒD ƒ}t |¡ t d¡ W d   ƒ n1 sqw   Y  |  ˆdˆ ¡ ˆ  ¡  W d   ƒ n1 sŒw   Y  |  tj	d¡‰ˆ ¡ }W d   ƒ n1 s§w   Y  tdƒD ]}	|  | t |	gƒ¡|¡ q°W t tj	¡ d S t tj	¡ w )NrN  rO  rM   rP  r   rÅ   rD  c               
      sX   z	 zˆ  ¡ } W n ty   Y W d S w ˆ  | ¡ q ty+ } zˆ |¡ ‚ d }~ww r?   )ÚpopleftrN   r=   rQ  r;   )r–   rR  )rä  rS  Úqueuer   r   r/   :  s   ÿ
û
€þz*BufferedWriterTest.test_threads.<locals>.fc                    rU  rV  rX  rY  r.   r   r   r[  E  r\  z3BufferedWriterTest.test_threads.<locals>.<listcomp>rµ   r]  r^  rÇ   )r   rQ  r   r   r   r  r;   r+   r   r¥   r­  rÝ  r   rb  rp   rq   rq  rz   rZ   r®   r   r¤   )
r8   rc  r  r‘  rP   r«  r_  re  r–   rN  r   )rä  rS  r/   r³  r   rg  #  s@   ýÿÿ
í
ÿÿzBufferedWriterTest.test_threadsc                 C   sP   |   ¡ }|  |d¡}|  t|jd¡ |  t|j¡ |  t|jd¡ dd„ |_d S )Nrf   r   rŠ  c                   S   r  r:   r   r   r   r   r   rn  Z  ro  z7BufferedWriterTest.test_misbehaved_io.<locals>.<lambda>)r^   rÝ  r°   ry   rJ   rK   r=   rz   rã  r   r   r   rh  R  s   z%BufferedWriterTest.test_misbehaved_ioc                 C   sB   |   t¡ |  |  ¡ dd¡ W d   ƒ d S 1 sw   Y  d S ©NrD  r¬   ©r°   r±   rÝ  rV   r@   r   r   r   Útest_max_buffer_size_removal\  s   "ÿz/BufferedWriterTest.test_max_buffer_size_removalc                 C   sH   |   ¡ }dd„ }||_|  |¡}| d¡ |  t|j¡ |  |j¡ d S )Nc                 S   rË  r:   rÌ  )r   r   r   r   Ú	bad_writeb  rÍ  z?BufferedWriterTest.test_write_error_on_close.<locals>.bad_writeó   spam)rV   r=   rÝ  r°   ry   rz   rp  rx   )r8   r_  r·  r   r   r   r   Útest_write_error_on_close`  s   

z,BufferedWriterTest.test_write_error_on_closec                 C   s\   |   ¡ }|  |d¡}tj|jd}| ¡  |j ¡  |  t	|j
d¡ |  |j¡ | ¡  d S )NrD  rW  r¸  )rj   rÝ  rk   r×   rz   rØ   rm   Úwaitr°   rœ   r=   rp  rx   r•   )r8   r  rä  Útr   r   r   Útest_slow_close_from_threadj  s   
z.BufferedWriterTest.test_slow_close_from_threadN)r"   r#   r$   r­  r#  r(  r‡  rŒ  rŽ  r’  r•  r—  r›  rœ  r¡  r£  r¦  r©  rª  r¬  r>  r®  r±  r   rm  rg  rh  r¶  r¹  r¼  r   r   r   r   r…  Q  s6    

.

r…  c                   @   s>   e Zd ZejZe ed¡dd„ ƒZ	dd„ Z
dd„ Zdd	„ Zd
S )ÚCBufferedWriterTestro  c                 C   rp  rq  )r…  r#  rþ   rj  rV   rÝ  r°   r¾   rr  rœ   r9   rã  r   r   r   r#  z  rs  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  rˆ  r"  rš   )rV   rÝ  r°   rœ   r9   r=   rã  r   r   r   rt  †  s   
z'CBufferedWriterTest.test_initializationc                 C   sÌ   |   tjtj¡ t dtf¡& |  tjd¡}|  |¡}| 	d¡ ||_
t |¡}~t ¡  W d   ƒ n1 s8w   Y  |  |ƒ |¡ |  tjd¡}|  | ¡ d¡ W d   ƒ d S 1 s_w   Y  d S )Nr&   r!  s   123xxxrÇ   )rÖ   r   r¤   r¥   r   r;  r<  rÑ   rÝ  r=   r  ra  rb  r   r=  rc  r+   r®   rZ   rv  r   r   r   re    s   



ù"ÿz+CBufferedWriterTest.test_garbage_collectionc                 C   rw  )Nrß   r   rx  r@   r   r   r   ry  ¡  rz  z#CBufferedWriterTest.test_args_errorN)r"   r#   r$   rŽ   rß   rÝ  r€  r  r‚  r#  rt  re  ry  r   r   r   r   r½  w  s    



r½  c                   @   rƒ  )ÚPyBufferedWriterTestN)r"   r#   r$   r‘   rß   rÝ  r   r   r   r   r¾  §  r   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d#d$„ Zd%d&„ Zd'd(„ Zd)d*„ Zd+S ),ÚBufferedRWPairTestc                 C   s$   |   |  ¡ |  ¡ ¡}|  |j¡ d S r:   )rÝ  rV   rq  rx   ©r8   Ú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.  rZ   r=   r9   rV   r®   rÀ  r   r   r   r(  °  s   
þ
þz%BufferedRWPairTest.test_uninitializedc                 C   s(   |   |  ¡ |  ¡ ¡}|  | j|j¡ d S r:   )rÝ  rV   r°   rˆ   rß  rÀ  r   r   r   râ  ¾  s   zBufferedRWPairTest.test_detachc                 C   sH   |   t¡ |  |  ¡ |  ¡ dd¡ W d   ƒ d S 1 sw   Y  d S r´  rµ  r@   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                   @   r  )zJBufferedRWPairTest.test_constructor_with_not_readable.<locals>.NotReadablec                 S   r>   r„   r   r@   r   r   r   rF   È  rB   zSBufferedRWPairTest.test_constructor_with_not_readable.<locals>.NotReadable.readableN©r"   r#   r$   rF   r   r   r   r   ÚNotReadableÇ  r  rÄ  ©rV   r°   ry   rÝ  )r8   rÄ  r   r   r   Ú"test_constructor_with_not_readableÆ  ó   z5BufferedRWPairTest.test_constructor_with_not_readablec                 C   s,   G dd„ dt ƒ}|  t| j|   ¡ |ƒ ¡ d S )Nc                   @   r  )zLBufferedRWPairTest.test_constructor_with_not_writeable.<locals>.NotWriteablec                 S   r>   r„   r   r@   r   r   r   rA   Ï  rB   zUBufferedRWPairTest.test_constructor_with_not_writeable.<locals>.NotWriteable.writableN)r"   r#   r$   rA   r   r   r   r   ÚNotWriteableÎ  r  rÈ  rÅ  )r8   rÈ  r   r   r   Ú#test_constructor_with_not_writeableÍ  rÇ  z6BufferedRWPairTest.test_constructor_with_not_writeablec                 C   sv   |   |  d¡|  ¡ ¡}|  | d¡d¡ |  | d¡d¡ |  | ¡ d¡ |   |  d¡|  ¡ ¡}|  | d ¡d¡ d S )NrŠ  r¼   ry  rM   rz  r~  )rÝ  râ   rV   r®   rZ   rÀ  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â   rV   r   r@   r   r   rn  Þ  ó    z3BufferedRWPairTest.test_readlines.<locals>.<lambda>)r  r  rª   rf   r  r  rA  rÀ  r   r@   r   rB  Ý  s   z!BufferedRWPairTest.test_readlinesc                 C   s<   |   |  d¡|  ¡ ¡}|  | d¡d¡ |  | ¡ d¡ d S )NrŠ  r¼   ry  rˆ  )rÝ  râ   rV   r®   r¬  rÀ  r   r   r   r/  ã  s   zBufferedRWPairTest.test_read1c              	   C   s|   dD ]9}|   |¡* |  |  d¡|  ¡ ¡}tdƒ}|  t||ƒ|ƒd¡ |  t|ƒd¡ W d   ƒ q1 s6w   Y  qd S )Nr®  rŠ  s        rf   s   abcde)rù   rÝ  râ   rV   r   r®   r¯  r   )r8   r±  rÁ  r   r   r   r   r2  ë  s   ûÿz BufferedRWPairTest.test_readintoc                 C   sf   |   ¡ }|  |   ¡ |¡}| d¡ | ¡  tdƒ}| |¡ d|d d …< | ¡  |  |jddg¡ d S )Nry  rˆ  r‰  )rV   rÝ  r=   rr   r¯   r®   r5   )r8   rÂ   rÁ  r²   r   r   r   rŒ  ô  s   

zBufferedRWPairTest.test_writec                 C   sB   |   |  d¡|  ¡ ¡}|  | d¡ d¡¡ |  | d¡d¡ d S )NrŠ  r¼   ry  )rÝ  râ   rV   rp  r5  r   r®   rZ   rÀ  r   r   r   Ú	test_peek   s   zBufferedRWPairTest.test_peekc                 C   ó&   |   |  ¡ |  ¡ ¡}|  | ¡ ¡ d S r:   )rÝ  rV   rp  rF   rÀ  r   r   r   Útest_readable  ó   z BufferedRWPairTest.test_readablec                 C   rÌ  r:   )rÝ  rV   rp  rA   rÀ  r   r   r   Útest_writeable
  rÎ  z!BufferedRWPairTest.test_writeablec                 C   rÌ  r:   )rÝ  rV   rq  rG   rÀ  r   r   r   Útest_seekable  s   z BufferedRWPairTest.test_seekablec                 C   s8   |   |  ¡ |  ¡ ¡}|  |j¡ | ¡  |  |j¡ d S r:   )rÝ  rV   rq  rx   rz   rp  rÀ  r   r   r   Útest_close_and_closed  s   z(BufferedRWPairTest.test_close_and_closedc                 C   s    dd„ }|   ¡ }||_|   ¡ }|  ||¡}|  t¡}| ¡  W d   ƒ n1 s)w   Y  |  dt|jƒ¡ |  |j	¡ |  
|j	¡ |  |j	¡ dd„ |_d S )Nc                   S   ó   t  d S r:   ©Úreader_non_existingr   r   r   r   Úreader_close  rÿ  zIBufferedRWPairTest.test_reader_close_error_on_close.<locals>.reader_closerÔ  c                   S   r  r:   r   r   r   r   r   rn  ,  ro  zEBufferedRWPairTest.test_reader_close_error_on_close.<locals>.<lambda>)rV   rz   rÝ  r°   r  r  r”  r•  rp  rx   rq  )r8   rÕ  rÅ  r‹  rÁ  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 s)w   Y  |  dt|jƒ¡ |  |j	¡ |  
|j	¡ |  |j	¡ dd„ |_d }t ¡ ' t ¡  d }t ¡  W d   ƒ n1 sjw   Y  t ¡  W d   ƒ d S 1 s~w   Y  d S )Nc                   S   rÒ  r:   ©Úwriter_non_existingr   r   r   r   Úwriter_close/  rÿ  zIBufferedRWPairTest.test_writer_close_error_on_close.<locals>.writer_closerØ  c                   S   r  r:   r   r   r   r   r   rn  =  ro  zEBufferedRWPairTest.test_writer_close_error_on_close.<locals>.<lambda>)rV   rz   rÝ  r°   r  r  r”  r•  rq  rx   rp  r   rì  r=  )r8   rÙ  rÅ  r‹  rÁ  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 s0w   Y  |  dt|jƒ¡ |  |jj	t¡ |  dt|jj	ƒ¡ |  
|j¡ |  
|j¡ |  
|j¡ dd„ |_d	d„ |_d S )
Nc                   S   rÒ  r:   rÓ  r   r   r   r   rÕ  I  rÿ  zPBufferedRWPairTest.test_reader_writer_close_error_on_close.<locals>.reader_closec                   S   rÒ  r:   r×  r   r   r   r   rÙ  K  rÿ  zPBufferedRWPairTest.test_reader_writer_close_error_on_close.<locals>.writer_closerÔ  rØ  c                   S   r  r:   r   r   r   r   r   rn  \  ro  zLBufferedRWPairTest.test_reader_writer_close_error_on_close.<locals>.<lambda>c                   S   r  r:   r   r   r   r   r   rn  ]  ro  )rV   rz   rÝ  r°   r  r  r”  r•  r  r  rq  rx   )r8   rÕ  rÙ  rÅ  r‹  rÁ  r  r   r   r   Ú'test_reader_writer_close_error_on_closeH  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                   @   rÇ  )z8BufferedRWPairTest.test_isatty.<locals>.SelectableIsAttyc                 S   s   t  | ¡ || _d S r:   )rV   r9   Ú_isatty)r8   Úisattyr   r   r   r9   a  r@  zABufferedRWPairTest.test_isatty.<locals>.SelectableIsAtty.__init__c                 S   s   | j S r:   )rÜ  r@   r   r   r   rÝ  e  rÍ  z?BufferedRWPairTest.test_isatty.<locals>.SelectableIsAtty.isattyN)r"   r#   r$   r9   rÝ  r   r   r   r   ÚSelectableIsAtty`  s    rÞ  FT)rV   rÝ  rq  rÝ  rp  )r8   rÞ  rÁ  r   r   r   Útest_isatty_  s   zBufferedRWPairTest.test_isattyc                 C   s*   |   |  ¡ |  ¡ ¡}t |¡}d }d }d S r:   )rÝ  rV   ra  rb  )r8   Zbrwrb  r   r   r   Útest_weakref_clearingt  s   
z(BufferedRWPairTest.test_weakref_clearingN)r"   r#   r$   r#  r(  râ  rÂ  rÆ  rÉ  r+  rB  r/  r2  rŒ  rË  rÍ  rÏ  rÐ  rÑ  rÖ  rÚ  rÛ  rß  rà  r   r   r   r   r¿  ª  s,    			r¿  c                   @   rƒ  )ÚCBufferedRWPairTestN)r"   r#   r$   rŽ   rä   rÝ  r   r   r   r   rá  z  r   rá  c                   @   rƒ  )ÚPyBufferedRWPairTestN)r"   r#   r$   r‘   rä   rÝ  r   r   r   r   râ  }  r   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   ó   t  | ¡ t | ¡ d S r:   )r  r#  r…  r@   r   r   r   r#  …  rn   z#BufferedRandomTest.test_constructorc                 C   rå  r:   )r  r(  r…  r@   r   r   r   r(  ‰  rn   z%BufferedRandomTest.test_uninitializedc                 C   sn   |   d¡}|  |d¡}|  d| d¡¡ | d¡ | d¡ |  |j¡ |  d| ¡ ¡ |  d|jd	 ¡ d S )
N)ó   asdfó   ghjkrD  ó   asra   s   ddds   eeerç  s   dddeeer   )rV   rÝ  r®   rZ   r=   rq  r5   ©r8   r_  rô   r   r   r   Útest_read_and_write  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è  ra   r   ræ  r  s   123fs	   asdf123flr©   éüÿÿÿrf   rM   rÃ  s   flé   r­   )râ   rÝ  r®   rZ   rK   rJ   r=   rr   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 )NrC  r|  ra   rj  r~  r¨   r†  r   s   XYZr¼   )râ   rÝ  r®   r=   rK   rr   rJ   )r8   Z	read_funcr_  rä  r   r   r   Úcheck_flush_and_read¯  s   



z'BufferedRandomTest.check_flush_and_readc                 C   r“  )Nc                 W   s
   | j |Ž S r:   )rZ   )rä  rŠ   r   r   r   rn  Â  ó   
 z8BufferedRandomTest.test_flush_and_read.<locals>.<lambda>©rî  r@   r   r   r   Útest_flush_and_readÁ  r–  z&BufferedRandomTest.test_flush_and_readc                 C   ó   ddd„}|   |¡ d S )Nrš   c                 S   s.   t |dkr|ndƒ}|  |¡}t|d |… ƒS )Nr   é'  )r¯   rQ   r   ©rä  rP   r   r   r   r   Ú	_readintoÅ  s   
z=BufferedRandomTest.test_flush_and_readinto.<locals>._readinto©rš   rð  )r8   rõ  r   r   r   Útest_flush_and_readintoÄ  s   
z*BufferedRandomTest.test_flush_and_readintoc                 C   rò  )Nrš   c                 S   s2   |   |¡}|dkr|d |… }|  t|ƒd¡ |S ©Nrš   rM   )r5  rJ   r   rô  r   r   r   Ú_peekÌ  s
   
z5BufferedRandomTest.test_flush_and_peek.<locals>._peekrö  rð  ©r8   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 )NrC  ó   123s   45r   s	   12345fghi)râ   rÝ  r=   rr   rJ   r®   r  rZ   r¢  r   r   r   Útest_flush_and_writeÖ  s   



z'BufferedRandomTest.test_flush_and_writec                 C   rå  r:   )r  rg  r…  r@   r   r   r   rg  â  rn   zBufferedRandomTest.test_threadsc                 C   s(   dd„ }|   |¡ dd„ }|   |¡ d S )Nc                 S   ó   |   d¡ d S rv   )r5  ré  r   r   r   rù  ç  rÞ   z6BufferedRandomTest.test_writes_and_peek.<locals>._peekc                 S   s.   |   ¡ }|  dd¡ |  d¡ |  |d¡ d S )Nrš   rM   r   )rK   rJ   r5  r˜  r   r   r   rù  ê  s   
r”  rú  r   r   r   Útest_writes_and_peekæ  s   
z'BufferedRandomTest.test_writes_and_peekc                 C   ó   dd„ }|   |¡ d S )Nc                 S   ó   |   dd¡ |  d¡ d S rø  )rJ   rZ   ré  r   r   r   Ú_readò  rC  z7BufferedRandomTest.test_writes_and_reads.<locals>._readr”  ©r8   r  r   r   r   Útest_writes_and_readsñ  ó   z(BufferedRandomTest.test_writes_and_readsc                 C   r   )Nc                 S   r  rø  )rJ   r¬  ré  r   r   r   Ú_read1ø  rC  z9BufferedRandomTest.test_writes_and_read1s.<locals>._read1r”  )r8   r  r   r   r   Útest_writes_and_read1s÷  r  z)BufferedRandomTest.test_writes_and_read1sc                 C   r   )Nc                 S   s   |   dd¡ |  tdƒ¡ d S rø  )rJ   rQ   r¯   ré  r   r   r   r  þ  s   z;BufferedRandomTest.test_writes_and_readintos.<locals>._readr”  r  r   r   r   Útest_writes_and_readintosý  r  z,BufferedRandomTest.test_writes_and_readintosc                 C   s¬   dD ]Q}|   d¡}|  |d¡}|  | d¡d¡ |  | ¡ d¡ | d| ¡ |  | ¡ |d ¡ | ¡  |  | ¡ |d ¡ | ¡ }|  |dd|  dd|   ¡ qd S )N)rM   rf   r  r  rM   ó   Aó   Br©   )râ   rÝ  r®   rZ   rK   r=   rr   r  )r8   Zoverwrite_sizer_  rä  r–   r   r   r   Útest_write_after_readahead	  s   
ÿòz-BufferedRandomTest.test_write_after_readaheadc              	   C   s”   dd„ }d}t dt|ƒƒD ]:}t |t|ƒƒD ]0}|  |¡}|  |d¡}||||ƒ | ¡  t|ƒ}d||< d||< |  | ¡ |d||f ¡ qqd S )	Nc                 S   s:   |   |¡ |  || ¡ |  d¡ |   |¡ |  d¡ d S )Nó   ó   )rJ   rZ   r=   )rä  Zpos1Zpos2r   r   r   Úmutate	  s
   


z:BufferedRandomTest.test_write_rewind_write.<locals>.mutates   €‚ƒ„r   rÓ   ra   rM   zfailed result for i=%d, j=%d)rQ  r   râ   rÝ  rr   r¯   r®   r  )r8   r  r   rN  Újr_  rä  Úexpectedr   r   r   Útest_write_rewind_write	  s    

ÿøÿz*BufferedRandomTest.test_write_rewind_writec                 C   s^   |   d¡}|  |d¡}|  | d¡d¡ |  | ¡ d¡ |  | d¡d¡ |  | ¡ d¡ d S )Nr  rÓ   ra   s   AAs   BBr  )râ   rÝ  r®   rZ   rR   r=   r¢  r   r   r   Ú!test_truncate_after_read_or_write1	  s   
z4BufferedRandomTest.test_truncate_after_read_or_writec                 C   rå  r:   )r  rh  r…  r@   r   r   r   rh  9	  rn   z%BufferedRandomTest.test_misbehaved_ioc              	   C   sœ  |   d¡h}|  |d¡R}| d¡ |  | d¡d¡ | d¡ |  | d¡d¡ | d¡ tdƒ}| |¡ |  |d	¡ | d
¡ |  | d¡d¡ | 	¡  |  | 
¡ d¡ W d   ƒ n1 saw   Y  W d   ƒ n1 spw   Y  |   d¡J}|  |d¡+}|  | d¡d¡ | d¡ |  | d¡d¡ | 	¡  |  | 
¡ d¡ W d   ƒ n1 s¯w   Y  W d   ƒ d S W d   ƒ d S 1 sÇw   Y  d S )Ns   abcdefghrÓ   ó   1rM   r-  ó   2rz  rö   ó   fó   4rª   s   1b2d3f4hry  r,  r}  s   a2c)râ   rÝ  r=   r®   rZ   r¬  r¯   rQ   r5  rr   r  )r8   r_  r/   rO   r   r   r   Útest_interleaved_read_write=	  s8   




ô€ÿ
ûÿ"ÿz.BufferedRandomTest.test_interleaved_read_writec              	   C   sÐ   |   d¡Y}|  |¡;}| d¡ |  | ¡ d¡ | d¡ |  | ¡ d¡ | d¡ |  | ¡ d¡ | ¡  |  | ¡ d¡ W d   ƒ n1 sIw   Y  W d   ƒ d S W d   ƒ d S 1 saw   Y  d S )	Ns
   ab
cdef
g
r  s   b
r  r  rö   ó   
s
   1b
2def
3
)râ   rÝ  r=   r®   rÈ   rr   r  )r8   r_  r/   r   r   r   Útest_interleaved_readline_writeV	  s   


øÿ"ÿz2BufferedRandomTest.test_interleaved_readline_writeN)r"   r#   r$   ra  r­  r#  r(  rê  rí  rî  rñ  r÷  rû  rý  rg  rÿ  r  r  r  r  r  r  rh  r  r  r  rl  r   r   r   r   rã    s2    rã  c                   @   s6   e Zd ZejZe ed¡dd„ ƒZ	dd„ Z
dd„ ZdS )	ÚCBufferedRandomTestro  c                 C   rp  rq  )rã  r#  rþ   rj  rV   rÝ  r°   r¾   rr  rœ   r9   rã  r   r   r   r#  m	  rs  z$CBufferedRandomTest.test_constructorc                 C   rå  r:   )rn  re  r½  r@   r   r   r   re  y	  rn   z+CBufferedRandomTest.test_garbage_collectionc                 C   rw  )Nrá   r   rx  r@   r   r   r   ry  }	  rz  z#CBufferedRandomTest.test_args_errorN)r"   r#   r$   rŽ   rá   rÝ  r€  r  r‚  r#  re  ry  r   r   r   r   r  j	  s    


r  c                   @   rƒ  )ÚPyBufferedRandomTestN)r"   r#   r$   r‘   rá   rÝ  r   r   r   r   r  ƒ	  r   r  c                   @   sP   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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 r:   )ÚcodecsÚIncrementalDecoderr9   Úreset)r8   rS  r   r   r   r9   ¤	  s   z#StatefulIncrementalDecoder.__init__c                 C   s   dt | ƒ S )Nz<SID %x>)Úidr@   r   r   r   Ú__repr__¨	  ó   z#StatefulIncrementalDecoder.__repr__c                 C   s   d| _ d| _tƒ | _d S rv   )rN  Úor¯   r²   r@   r   r   r   r   «	  s   z StatefulIncrementalDecoder.resetc                 C   s,   | j dA | jdA }}t| jƒ|d | fS )NrM   rÓ   )rN  r$  r   r²   )r8   rN  r$  r   r   r   Úgetstate°	  s   z#StatefulIncrementalDecoder.getstatec                 C   s:   |\}}t |ƒ| _t|dƒ\}}|dA |dA | _| _d S )NrÓ   rM   )r¯   r²   ÚdivmodrN  r$  )r8   Ústater²   rŽ   rN  r$  r   r   r   Úsetstate´	  s   
z#StatefulIncrementalDecoder.setstateFc                 C   sˆ   d}|D ]2}| j dkr"|tdƒkr| jr||  ¡ 7 }q| j |¡ q| j |¡ t| jƒ| j kr6||  ¡ 7 }q|rB| jrB||  ¡ 7 }|S )Nr&   r   Ú.)rN  Úordr²   Úprocess_wordr;   r   )r8   ÚinputÚfinalÚoutputr   r   r   r   Údecodeº	  s   
€€
z!StatefulIncrementalDecoder.decodec                 C   s¸   d}| j d tdƒkrtdt| j dd … pdƒƒ| _n;| j d tdƒkr4tdt| j dd … p/dƒƒ| _n"| j  d¡}t|ƒ| jk rH|d| j 7 }| jrR|d | j… }|d	7 }tƒ | _ |S )
Nr&   r   rN  éc   rM   r$  rë   ú-r)  )	r²   r*  rÁ  ÚintrN  r$  r/  r   r¯   )r8   r.  r   r   r   r+  Ë	  s     z'StatefulIncrementalDecoder.process_wordN)r  rÏ  )r"   r#   r$   rS   r9   r"  r   r%  r(  r/  r+  ÚcodecEnabledr   r   r   r   r  ’	  s    

r  c              	   C   s:   t jr| dkrt d¡}tjd|jd d d d t dS d S d S )NÚtest_decoderr(   )rÈ  Úencoder/  ÚincrementalencoderÚstreamreaderÚstreamwriterÚincrementaldecoder)r  r3  r  ÚlookupÚ	CodecInfor5  )rÈ  Úlatin1r   r   r   ÚlookupTestDecoderà	  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.
    ))rG  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&   rW   rM   r@  )Ú
test_casesr  r®   r/  )r8   r,  Úeofr.  Údr   r   r   r4  

  s   z+StatefulIncrementalDecoderTest.test_decoderN)r"   r#   r$   rS   rA  r4  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¡ t t¡ |  	tj
t¡ d S )Ns   AAA
BBBCCC
DDD
EEE
s   AAA
BBB
CCC
DDD
EEE
rë   )Útestdatar/  Ú
normalizedr   r¤   r¥   r  Úregisterr=  rÖ   Ú
unregisterr@   r   r   r   r¦   
  s
   
zTextIOWrapperTest.setUpc                 C   r¢   r:   r£   r@   r   r   r   r§   
  re   zTextIOWrapperTest.tearDownc                 C   s¼   |   d¡}|  |d¡}| j|dd}|j|ddd |  |jd¡ |  |jd¡ |j|dd	d
 |  |jd¡ |  |jd	¡ |  d| ¡ ¡ | jt	|j|ddd | jt
|j|ddd d S )Nó   Ã©

rN  rÃ   r)   r(   ú
r¦  FT)r*   Úline_bufferingõ   Ã©
rD   rí  )râ   rÜ   rí   r9   r®   r*   rK  rÈ   r°   r±   rœ   ©r8   r'   r   r»  r   r   r   r#  !
  s   
z"TextIOWrapperTest.test_constructorc                 C   sj   | j  | j ¡}~| j  | j ¡}|  tt|¡ |  ttfd|jd¡ |j	|  
¡ dd |  | d¡d¡ d S )Nr&  r   rÃ   r)   r&   )rí   r'  r°   rQ  rà  r¶  rœ   r.  rZ   r9   rV   r®   ©r8   r»  r   r   r   r(  /
  s   
þz$TextIOWrapperTest.test_uninitializedc                 C   sR   |   ¡ }|  |¡}|  td¡ | j|dd W d   ƒ d S 1 s"w   Y  d S )Nzis not a text encodingÚhexr)   )râ   rß   r¶  ÚLookupErrorrí   )r8   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}|  | ¡ |¡ | 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ß  r=   rq  r  r®   r°   rœ   rà  r*   rS  rK  Úwrite_throughrM  r   r   r   râ  C
  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â   r5  rÜ   rí   r#   rõ  rà  rÈ  Úmoder²   rß  )r8   r_  r   r»  Úmodnamer   r   r   rö  W
  s*   

ÿ
ÿ
ÿ
ÿ
zTextIOWrapperTest.test_reprc              	   C   sz   |   ¡ }| j|dd}t |d|¡! zt|ƒ W n	 ty"   Y n	w W d   ƒ d S W d   ƒ d S 1 s6w   Y  d S )NrÃ   r)   rÈ  )râ   rí   r   r÷  rà  rø  ©r8   r_  r»  r   r   r   rú  k
  s   ÿÿþ"üz%TextIOWrapperTest.test_recursive_reprc                 C   sx   |   ¡ }|  |d¡}| j|dddd}| d¡ |  | ¡ d¡ | d¡ |  | ¡ d	¡ | d
¡ |  | ¡ d¡ d S )NrN  rÃ   Ú
T©r*   r§  rK  ÚXrW   zY
Zs   XY
ZzABs   XY
ZAB)râ   rß   rí   r=   r®   r  rM  r   r   r   Útest_line_bufferingu
  s   


z%TextIOWrapperTest.test_line_bufferingc                 C   s  |   ¡ }|  |d¡}| j|d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 )NrN  rÃ   rV  FrW  zAB
CrW   T)rK  s   AB
CzDEF
Gs	   AB
CDEF
GÚHs
   AB
CDEF
GHZIJ)râ   rß   rí   r=   r®   r  ÚreconfigurerK  rM  r   r   r   Útest_reconfigure_line_buffering€
  s,   



z1TextIOWrapperTest.test_reconfigure_line_bufferingzutf-8 mode is enabledc              	   C   sº   t tjƒ}zKdD ]}|tjv rtj|= qt d¡}|  ¡ }t ¡  t dt	¡ |  
|¡}W d   ƒ n1 s7w   Y  |  |j|¡ W tj ¡  tj |¡ d S tj ¡  tj |¡ w )N)ÚLC_ALLZLANGÚLC_CTYPEFr  )ÚdictrÏ   ÚenvironÚlocaleZgetpreferredencodingrâ   r  r  r  ÚEncodingWarningrí   r®   r*   ÚclearÚupdate)r8   Zold_environÚkeyZcurrent_locale_encodingr   r»  r   r   r   Útest_default_encoding›
  s"   

€

þ

ÿz'TextIOWrapperTest.test_default_encodingc                    sX   dd l ‰ |  ¡ }‡ fdd„|_| jt| j|dd ‡ fdd„|_| jt| j|dd d S )Nr   c                      ó
   ˆ j d S rv   )ZINT_MAXr   ©Ú	_testcapir   r   rn  ¶
  rï  z8TextIOWrapperTest.test_device_encoding.<locals>.<lambda>ra  r)   c                      rg  rv   )ZUINT_MAXr   rh  r   r   rn  ¸
  rï  )ri  râ   rE   r°   r¾   rí   r<   r   rh  r   Útest_device_encoding°
  s   z&TextIOWrapperTest.test_device_encodingc                 C   s~   |   ¡ }| j|dd}|  |jd¡ t ¡  t dt¡ |  |¡}W d   ƒ n1 s,w   Y  |  |j¡ t	 
|j¡ d S )NrÃ   r)   r  )râ   rí   r®   r*   r  r  r  rb  ÚassertIsNotNoner  r:  ©r8   r   r»  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*   rS  r  zabc

Úreplaceu   abc
ï¿½
)râ   rí   r°   ÚUnicodeErrorrZ   r®   rl  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  rn  r  rV  )r*   rS  r§  u	   abcÃ¿def
s   abcdef
ro  s   abc?def
)râ   rí   r°   rp  r=   rr   r®   r  rl  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 ]p}t d |¡ |¡ƒ}dD ]a}tddƒD ]Y}|D ]T\}}	|  |  |¡|¡}
| j|
||d}|rpg }	 | d¡}|dkr^qt|  t	|ƒd¡ | 
|| ¡  ¡ qTt|ƒ}t||	ƒD ]
\}}|  ||¡ qy|  t	|ƒt	|	ƒ¡ q:q6q/q!d S )N)úunix
ú	windows
zos9úlast
Únonl)rt  zwindows
zos9
rv  rw  r&   rV  )rt  ru  z	os9last
rw  rJ  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)FTrM   r¸   ©r§  r*   Tra   )r   r•   r5  rQ  rÜ   râ   rí   rZ   r®   r   r;   rÈ   r3   Úzip)r8   Zinput_linesr  Ú	encodingsr*   r   Zdo_readsr$  r§  Z	exp_linesrä  ÚtextioZ	got_linesÚc2Zgot_lineZexp_liner   r   r   Útest_newlinesð
  sD   



ûÿ
ûïÿÿý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 ])\}}|  |¡}| j|d|d}|  | ¡ |¡ | d¡ |  | ¡ d 	|¡¡ q1d S )Ns   AAA
BB B
CCCDDDEEE
FFF
GGGs   
r  ó   rë   T)Úkeependsr&   rV  )zAAA
zBB B
zCCCDDDEEE
úFFF
ÚGGGrJ  )zAAA
BB B
CCCDDDEEE
r‡  rˆ  rx  )zAAA
BB B
CCCzDDDzEEEz
FFFz
GGGr¦  r   )
ro  r/  Ú
splitlinesrâ   rí   r®   r  rJ   rZ   r•   )r8   rE  rF  r§  r  rO   Ú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 ]2\}}|  ¡ }| 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&   rV  rx  rJ  rë   r¦  zAAA
BzBB
CCC
zXY
ZF)rÏ   ÚlinesepÚsortedÚitemsrâ   rí   r=   rr   r®   rx   r  )r8   Ztestdictr  r§  r  rO   rŠ  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 r:   )r;   r  rz   r@   ©rE  rd  r   r   rz   @  ó   z:TextIOWrapperTest.test_destructor.<locals>.MyBytesIO.closeNrÑ  r   r  r   r   Ú	MyBytesIO?  s    r’  rë   r)   r«  ry  )râ   rí   r=   r   r=  r®   )r8   r’  r   r»  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                       r*  )z<TextIOWrapperTest.test_override_destructor.<locals>.MyTextIOc                    r+  rv   r,  rÀ   r/  r   r   r-  M  r1  zDTextIOWrapperTest.test_override_destructor.<locals>.MyTextIO.__del__c                    r2  r`   r3  r@   r/  r   r   rz   U  rn   zBTextIOWrapperTest.test_override_destructor.<locals>.MyTextIO.closec                    r2  r4  r5  r@   r/  r   r   rr   X  rn   zBTextIOWrapperTest.test_override_destructor.<locals>.MyTextIO.flushr6  r   r7  rc   r   ÚMyTextIOL  r9  r“  rë   r)   r:  )rí   râ   r   r=  r®   )r8   r“  r   r»  r   r7  r   rè  J  s   z*TextIOWrapperTest.test_override_destructorc              	   C   s¼   |   ¡ }t ¡ L}|  t¡ | j|ddj W d   ƒ n1 s!w   Y  ts/|  |j	¡ n|j	d urD|  
|j	jt¡ W d   ƒ d S W d   ƒ d S W d   ƒ d S 1 sWw   Y  d S )NrÃ   r)   )ru   r   rì  r°   r.  rí   rí  rî  rc  rï  r®   rð  ry   rñ  r   r   r   rò  a  s   
ÿ
ùú"ûz/TextIOWrapperTest.test_error_through_destructorc                 C   s†  dD ]¾}dD ]¹}| 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)rM   ra   r¼   r  rf   r  r!  é   é   é    é!   é?   é@   éA   )rë   r(   rÃ   úw+r)   r«  r¼   úr+r   ra   r&  rM   rf  r&   ÚdefÚutf)r+   r   r¥   r-   r®   r=   rz   rK   rZ   rJ   r   Úmulti_line_test)r8   Ú	chunksizeÚencr/   Úcookier   r   r   Útest_basic_iop  s:   


çÿzTextIOWrapperTest.test_basic_ioc                 C   s¼   |  d¡ | ¡  d}g }dD ]+}g }t|ƒD ]}| ||t|ƒ  ¡ qd |¡d }| | ¡ |f¡ | |¡ q|  d¡ g }		 | ¡ }
| ¡ }|sNqV|	 |
|f¡ qC|  	|	|¡ d S )Nr   u	   sÃ¿à¿¿ï¿¿)r   rM   ra   r¼   r  rf   é   r•  r–  r—  é>   r˜  r™  rš  rN  r&   rV  T)
rJ   rR   rQ  r;   r   r•   rK   r=   rÈ   r®   )r8   r/   r¡  ÚsampleZwlinesr«  ÚcharsrN  ÚlineZrlinesr   r   r   r   rŸ    s*   

ûz!TextIOWrapperTest.multi_line_testc                 C   sâ   | j tjddd}| ¡ }| d¡ | ¡ }| d¡ | ¡ }| d¡ |  | ¡ |¡ |  | ¡ d¡ |  | ¡ |¡ |  | ¡ d¡ |  | ¡ |¡ | d¡ |D ]}|  |d¡ |  t	|j¡ qS|  | ¡ |¡ | 
¡  d S )Nr›  rÃ   r)   u   Ã¿
r   )r+   r   r¥   rK   r=   rJ   r®   rÈ   r°   ry   rz   )r8   r/   Úp0Úp1Zp2r¨  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 sBw   Y  | jtjddd'}| 	|¡}	|  |	t
|dƒ¡ |  | ¡ |¡ |  | ¡ |¡ W d   ƒ d S 1 szw   Y  d S )	Nra   r'  rÃ   õ   è¢ˆ
rÄ   r'   r)   rë   )r0   r   r5  r®   r   r+   r   r¥   r=   rZ   r”  rK   rÈ   )
r8   Ú
chunk_sizeZprefix_sizeZu_prefixÚprefixZu_suffixÚsuffixr¨  r/   r–   r   r   r   Útest_seeking·  s"   ÿ
"üzTextIOWrapperTest.test_seekingc                 C   s   d}|   tjd¡}| |¡ W d   ƒ n1 sw   Y  | j tjddd}|j d|_| ¡  | ¡  W d   ƒ d S 1 sAw   Y  d S )Ns   à¿¿
rÄ   r'   rÃ   r)   ra   )r+   r   r¥   r=   r-   rÈ   rK   )r8   r   r/   r   r   r   Útest_seeking_tooÈ  s   ÿ
"üz"TextIOWrapperTest.test_seeking_tooc                    sŠ   d‰ d‡ ‡fdd„	}dt _z3tjD ]	\}}}||ƒ qtjD ]\}}}ˆ t|ƒd  }d| }|d }||| |ƒ qW dt _d S dt _w )	Né€   r   c              	      sô   ˆ  tjd¡}| | ¡ | ¡  ˆj tjdd}ˆ |_| ¡ }| ¡  t|t|ƒd ƒD ]K}ddt|ƒ| fD ]?}ˆj tjdd}ˆ 	| |¡|d|… ¡ | 
¡ }ˆ 	| |¡|||| … ¡ | |¡ ˆ 	| ¡ ||d… ¡ | ¡  q7q,dS )zTell/seek to various points within a data stream and ensure
            that the decoded data returned by read() is consistent.rÄ   r4  r)   rM   rf   N)r+   r   r¥   r=   rz   r-   rZ   rQ  r   r®   rK   rJ   )r   Úmin_posr/   ZdecodedrN  r  r¢  ©Z
CHUNK_SIZEr8   r   r   Útest_seek_and_tell_with_dataØ  s$   


ùÿzJTextIOWrapperTest.test_seek_and_tell.<locals>.test_seek_and_tell_with_datarM   ra   ó   .r   )r  r3  r>  rA  r   )r8   rµ  r,  Ú_Úoffsetr®  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¥   r=   rz   r®   rÈ   rK   rJ   )r8   r/   r©  rª  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¥   r=   rK   rJ   rz   r®   rÈ   )r8   r/   r©  r   r   r   Útest_seek_with_encoder_state  s   



z.TextIOWrapperTest.test_seek_with_encoder_statec                 C   s–   d}d}|D ]B}|   ¡ }| j||d}| |¡ | |¡ | d¡ |  | ¡ |d ¡ | d¡ |  | ¡ |d ¡ |  | ¡ |d  |¡¡ qd S )NZ
1234567890)ry  rz  r{  r|  r}  r~  r)   r   ra   )râ   rí   r=   rJ   r®   rZ   r  r5  )r8   r   r  r*   rO   r/   r   r   r   Útest_encoded_writes  s   



öz%TextIOWrapperTest.test_encoded_writesc                 C   s4   G dd„ d| j ƒ}| j|ƒ dd}|  t|j¡ d S )Nc                   @   r  )z5TextIOWrapperTest.test_unreadable.<locals>.UnReadablec                 S   r>   r„   r   r@   r   r   r   rF   4  rB   z>TextIOWrapperTest.test_unreadable.<locals>.UnReadable.readableNrÃ  r   r   r   r   Ú
UnReadable3  r  r¿  rÃ   r)   )râ   rí   r°   ry   rZ   )r8   r¿  rŠ  r   r   r   Útest_unreadable2  s   z!TextIOWrapperTest.test_unreadablec                 C   óD   | j |  d¡dd}d}	 | d¡}|sq||7 }q|  |d¡ d S )Ns   AA
BBrÃ   r)   r&   TrM   zAA
BB©rí   râ   rZ   r®   ©r8   rŠ  Úreadsrf  r   r   r   Útest_read_one_by_one9  s   
üz&TextIOWrapperTest.test_read_one_by_onec                 C   sl   | j |  d¡dd}|  | ¡ g d¢¡ | d¡ |  | d ¡g d¢¡ | d¡ |  | d¡ddg¡ d S )	Ns   AA
BB
CCrÃ   r)   )úAA
úBB
ZCCr   rf   rÆ  rÇ  )rí   râ   r®   r  rJ   ©r8   rŠ  r   r   r   rB  C  s   

z TextIOWrapperTest.test_readlinesc                 C   rÁ  )Ns‚   AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
BrÃ   r)   r&   Tr²  zAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
BrÂ  rÃ  r   r   r   Útest_read_by_chunkL  s   
üz$TextIOWrapperTest.test_read_by_chunkc                 C   sD   g d¢}|   ¡ }| j|dd}| |¡ | ¡  |  | ¡ d¡ d S ©N)r&  ZcdZefrÃ   r)   rŠ  )râ   rí   rÉ   rr   r®   r  ©r8   rd  rO   rŠ  r   r   r   r©  W  s   
z!TextIOWrapperTest.test_writelinesc                 C   sH   t g d¢ƒ}|  ¡ }| j|dd}| |¡ | ¡  |  | ¡ d¡ d S rÊ  )r   râ   rí   rÉ   rr   r®   r  rË  r   r   r   rª  _  s   
z*TextIOWrapperTest.test_writelines_userlistc                 C   sJ   | j |  ¡ dd}|  t|jg d¢¡ |  t|jd ¡ |  t|jd¡ d S )NrÃ   r)   r:  ry  )rí   râ   r°   r±   rÉ   rÈ  r   r   r   r¬  g  s   z'TextIOWrapperTest.test_writelines_errorc                 C   sH   | j |  | j¡dd}d}	 | d¡}|sq||7 }q|  || j¡ d S )Nrë   r)   r&   TrM   )rí   râ   rE  rZ   r®   rF  rÃ  r   r   r   Útest_issue1395_1m  s   
üz"TextIOWrapperTest.test_issue1395_1c                 C   sN   | j |  | j¡dd}d|_d}	 | d¡}|sq||7 }q|  || j¡ d S )Nrë   r)   r  r&   T©rí   râ   rE  r-   rZ   r®   rF  rÃ  r   r   r   Útest_issue1395_2y  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â   rE  r-   rZ   rÈ   r®   rF  ©r8   rŠ  rÄ  r   r   r   Útest_issue1395_3…  s   
z"TextIOWrapperTest.test_issue1395_3c                 C   sD   | j |  | j¡dd}d|_| d¡}|| ¡ 7 }|  || j¡ d S rÏ  rÍ  rÐ  r   r   r   Útest_issue1395_4  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â   rE  r-   rZ   rK   rJ   r®   )r8   rŠ  rÄ  r   r   r   r   Útest_issue1395_5˜  s   


z"TextIOWrapperTest.test_issue1395_5c                 C   s2   |   | j¡}| j|dd}|  | ¡ | ¡ ¡ d S ©Nrë   r)   )râ   rE  rí   r®   rG   )r8   r²   rŠ  r   r   r   Útest_issue2282¢  s   z TextIOWrapperTest.test_issue2282c              	   C   s  t j}dD ]‚}| j|d|d}| d¡ | ¡ }W d   ƒ n1 s#w   Y  |  |d¡}|  | ¡ d |¡¡ W d   ƒ n1 sDw   Y  | j|d|d}| d¡ W d   ƒ n1 saw   Y  |  |d¡}|  | ¡ d |¡¡ W d   ƒ q1 s‚w   Y  qd S )	N©ú	utf-8-sigry  r|  rÂ   r)   ÚaaarÇ   r'  ÚxxxÚaaaxxx)r   r¥   r+   r=   rK   r®   rZ   r5  ©r8   ÚfilenameÚcharsetr/   r   r   r   r   Útest_append_bom¨  s    

þÿÿÿ÷z!TextIOWrapperTest.test_append_bomc              	   C   sð   t j}dD ]p}| j|d|d}| d¡ | ¡ }W d   ƒ n1 s#w   Y  | j|d|d}| |¡ | d¡ | d¡ | d¡ W d   ƒ n1 sOw   Y  |  |d	¡}|  | ¡ d
 |¡¡ W d   ƒ q1 spw   Y  qd S )NrÖ  rÂ   r)   rØ  rœ  Zzzzr   ÚbbbrÇ   Zbbbzzz)	r   r¥   r+   r=   rK   rJ   r®   rZ   r5  rÛ  r   r   r   Útest_seek_bom·  s    

þ


üÿ÷zTextIOWrapperTest.test_seek_bomc              	   C   sâ   t j}dD ]i}| j|d|d}| d¡ W d   ƒ n1 sw   Y  | j|d|d}| d¡ | d| j¡ | d¡ W d   ƒ n1 sHw   Y  |  |d¡}|  | ¡ d	 |¡¡ W d   ƒ q1 siw   Y  qd S )
NrÖ  rÂ   r)   rØ  r'  r   rÙ  rÇ   rÚ  )	r   r¥   r+   r=   rJ   rË   r®   rZ   r5  )r8   rÜ  rÝ  r/   r   r   r   Útest_seek_append_bomÆ  s   ÿ
ýÿùz&TextIOWrapperTest.test_seek_append_bomc                 C   sˆ   | j tjddd}|  |jd¡ W d   ƒ n1 sw   Y  | j tjdddd}|  |jd¡ W d   ƒ d S 1 s=w   Y  d S )NrÂ   rÃ   r)   r  ro  rn  )r+   r   r¥   r®   rS  rÀ   r   r   r   Útest_errors_propertyÓ  s   ÿ"ÿz&TextIOWrapperTest.test_errors_propertyc              	      sú   t  ¡ ‰ | jtjdddd6‰‡ ‡fdd„‰‡fdd„td	ƒD ƒ}t |ˆ j¡ t	 
d
¡ W d   ƒ n1 s8w   Y  W d   ƒ n1 sGw   Y  | jtjdd‰ˆ ¡ }td	ƒD ]}|  | d| ¡d¡ q]W d   ƒ d S 1 svw   Y  d S )NrÂ   rÃ   rM   r   c                    s   d|  }ˆ   ¡  ˆ |¡ d S )NúThread%03d
)rº  r=   )rP   Útext)Úeventr/   r   r   ÚrunÞ  s   z1TextIOWrapperTest.test_threads_write.<locals>.runc                    s   g | ]
}t jˆ |fd ‘qS )rÔ   rX  rY  )ræ  r   r   r[  â  s    ÿz8TextIOWrapperTest.test_threads_write.<locals>.<listcomp>rµ   r]  r)   rã  )rk   rl   r+   r   r¥   rQ  r   rb  ro   rp   rq   rZ   r®   r   )r8   re  ZcontentrP   r   )rå  r/   ræ  r   Útest_threads_writeÙ  s"   
ÿÿ€ù	ÿ"þ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ƒ ‚r:   )rx   r²   ry   r   ©rx   rŠ  r   r   rm  ð  s   z>TextIOWrapperTest.test_flush_error_on_close.<locals>.bad_flushr   rM   c                   S   r  r:   r   r   r   r   r   rn  ú  ro  z=TextIOWrapperTest.test_flush_error_on_close.<locals>.<lambda>)rí   râ   rE  rr   r°   ry   rz   rp  rx   r²   rq  rü  r   rè  r   rw  ë  s   
z+TextIOWrapperTest.test_flush_error_on_closec                 C   s¾   |   | j¡}dd„ }dd„ }||_| j|dd}||_|  t¡}| ¡  W d   ƒ n1 s/w   Y  |  |jj	d¡ |  
|jjt¡ |  |jjj	d¡ |  |j¡ d	d
„ |_dd
„ |_d S )Nc                   S   rý  rþ  rÌ  r   r   r   r   rm  þ  rÿ  z>TextIOWrapperTest.test_close_error_on_close.<locals>.bad_flushc                   S   rý  r   rÌ  r   r   r   r   r     rÿ  z>TextIOWrapperTest.test_close_error_on_close.<locals>.bad_closerë   r)   r  r  c                   S   r  r:   r   r   r   r   r   rn    ro  z=TextIOWrapperTest.test_close_error_on_close.<locals>.<lambda>c                   S   r  r:   r   r   r   r   r   rn    ro  )râ   rE  rz   rí   rr   r°   ry   r®   r•  rŠ   r  r  rq  rx   ©r8   r²   rm  r  rŠ  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/w   Y  |  dt|j	ƒ¡ |  
|j	jt¡ |  dt|j	jƒ¡ |  |j¡ d	d
„ |_dd
„ |_d S )Nc                   S   r	  r:   r
  r   r   r   r   rm    rB   zLTextIOWrapperTest.test_nonnormalized_close_error_on_close.<locals>.bad_flushc                   S   r	  r:   r  r   r   r   r   r    rB   zLTextIOWrapperTest.test_nonnormalized_close_error_on_close.<locals>.bad_closerë   r)   r  r  c                   S   r  r:   r   r   r   r   r   rn  "  ro  zKTextIOWrapperTest.test_nonnormalized_close_error_on_close.<locals>.<lambda>c                   S   r  r:   r   r   r   r   r   rn  #  ro  )râ   rE  rz   rí   rr   r°   r  r  r”  r•  r  r  rq  rx   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â   rE  rz   r°   rœ   rr   rÈ  r   r   r   rx  %  s
   z"TextIOWrapperTest.test_multi_closec                 C   s<   | j |  | j¡dd}|  | j|j¡ |  | j|jd¡ d S )NrÃ   r)   r   )rí   rƒ   rE  r°   rˆ   rK   rJ   rÈ  r   r   r   r  ,  s   z!TextIOWrapperTest.test_unseekablec                 C   sX   | j |  | j¡dd}|  | j¡}|  t¡ ||_W d   ƒ d S 1 s%w   Y  d S rÔ  )rí   râ   rE  r°   r.  r²   )r8   rŠ  rO   r   r   r   r  1  s
   "ÿz*TextIOWrapperTest.test_readonly_attributesc                 C   sX   |   g d¢¡}| j|ddd}|  | d¡d¡ |  | ¡ d¡ |  t|ƒdd	g¡ d S )
N©ry  rˆ  s   ghi
jkl
opq
rë   rV  r¦  r  Zabcdzefghi
zjkl
zopq
)rV   rí   r®   rZ   rÈ   r3   ©r8   r_  rŠ  r   r   r   Ú
test_rawio7  s
   zTextIOWrapperTest.test_rawioc                 C   sV   |   g d¢¡}| j|dddd}| d¡ | d¡ | d¡ |  d	 |j¡d
¡ d S )Nrê  rë   rV  T)r*   r§  rR  Ú1z23
4Ú5rW   s   123
45)rV   rí   r=   r®   r•   r5   rë  r   r   r   Útest_rawio_write_throughB  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                    ó   ˆ  d¡ tƒ j|i |¤ŽS r?   r5  ©r8   rŠ   rr  )rd   Úflush_calledr   r   rr   Q  ó   
zHTextIOWrapperTest.test_bufio_write_through.<locals>.BufferedWriter.flushc                    rð  r?   )r;   rb   r=   rñ  )rd   Úwrite_calledr   r   r=   T  ró  zHTextIOWrapperTest.test_bufio_write_through.<locals>.BufferedWriter.write)r"   r#   r$   rr   r=   rg   r   ©rò  rô  rc   r   rß   P  s    rß   r,  ra   rë   T)r*   rR  rW   r¸   rì  )
rß   râ   r   rí   r/  r=   rq  rp  r®   r  )r8   rß   r  r   rä  r‚  rä  r   rõ  r   Útest_bufio_write_throughL  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ë   rV  r¦  rí  T)rR  rW   r  Z23rü  FZ45r©  )	rV   rí   r=   r[  r®   rR  r•   r5   rr   rU  r   r   r   Útest_reconfigure_write_throughl  s(   



z0TextIOWrapperTest.test_reconfigure_write_throughc                 C   sl   | j |  d¡dd}|  t|jd¡ | j |  d¡dd}|  t|j¡ | j |  d¡dd}|  t|j¡ d S )Nr'  rÃ   r)   rM   )rí   rø   r°   r±   rZ   rÈ   rN  r   r   r   Útest_read_nonbytesƒ  s   z$TextIOWrapperTest.test_read_nonbytesc                 C   s`   t  d¡}t |dd¡ tjt d¡dd}W d   ƒ n1 s!w   Y  |  t|j	d¡ d S )NÚrot13Ú_is_text_encodingTó   foor)   Zbar)
r  r:  r   r÷  rŽ   rí   râ   r°   r±   r=   )r8   rù  r»  r   r   r   Útest_illegal_encoder  s
   
ÿ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| _|S d| _w )NÚquopriTs   aaaaaarV  r  F)r  r:  rú  rí   râ   )rý  r»  r@   r   r   Ú_make_illegal_wrapper˜  s   
ÿÿzETextIOWrapperTest.test_illegal_decoder.<locals>._make_illegal_wrapperrM   c                    s`   G ‡fdd„dƒ‰ ‡ fdd„}t  d¡}t |d|¡ ˆƒ W  d   ƒ S 1 s)w   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                    r†  r:   r   r@   ©Úgetstate_ret_valr   r   r%  ®  rB   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 r:   r   )ró  )r  r   r   Ú_get_bad_decoder°  rÍ  zdTextIOWrapperTest.test_illegal_decoder.<locals>._make_very_illegal_wrapper.<locals>._get_bad_decoderrý  r9  )r  r:  r   r÷  )r   r  rý  )rþ  )r  r   r   Ú_make_very_illegal_wrapper¬  s   
ÿ$þzJTextIOWrapperTest.test_illegal_decoder.<locals>._make_very_illegal_wrapperrD   r   )rM   ra   )r°   r±   rZ   rÈ   )r8   r»  r  r   )rþ  r8   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()
            )Úiomodrr  ú-c)rŽ   r"   ri  r   )r8   rr  r  Úcoder   r   r   Ú_check_create_at_shutdown½  s
   ò
z+TextIOWrapperTest._check_create_at_shutdownc                 C   s@   |   ¡ \}}}|r|  | j| ¡ ¡ d S |  d| ¡  ¡ ¡ d S )NÚok)r  r  Úshutdown_errorr/  r®   Ústrip©r8   Ú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  rn  r	  )r  rq  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Ã   r°  )ÚMemviewBytesIOrí   Ú_to_memoryviewr  rR  r®   rZ   r/  )r8   r'   r»  Z	bytes_valr   r   r   Útest_read_byteslikeá  s   z%TextIOWrapperTest.test_read_byteslikec              	   C   sb   G dd„ dt ƒ}tdƒD ]}z
| j|ƒ dd W q ty!   Y qw dd„ |_| j|ƒ dd}d S )Nc                   @   r½  )z,TextIOWrapperTest.test_issue22849.<locals>.Fc                 S   r>   r?   r   r@   r   r   r   rF   î  ro  z5TextIOWrapperTest.test_issue22849.<locals>.F.readablec                 S   r>   r?   r   r@   r   r   r   rA   ï  ro  z5TextIOWrapperTest.test_issue22849.<locals>.F.writablec                 S   r>   r?   r   r@   r   r   r   rG   ð  ro  z5TextIOWrapperTest.test_issue22849.<locals>.F.seekableN)r"   r#   r$   rF   rA   rG   r   r   r   r   ÚFí  s    r  r¸   rÃ   r)   c                 S   r>   r2   r   ©r  r   r   r   rn  ø  ro  z3TextIOWrapperTest.test_issue22849.<locals>.<lambda>)ÚobjectrQ  rí   rQ  rK   )r8   r  rN  r»  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 s6w   Y  |  | j¡ |jd d	 W d   ƒ d S 1 sSw   Y  d S )
Nõ   abcÃ©
r<  õ   dÃ©f
Úutf8rV  r¦  rÃ   r)   ©r§  )r5  râ   rí   r®   rÈ   r°   rˆ   r[  )r8   r   r_  rŠ  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ë   rV  r¦  zfoo
r×  r)   rL  s   foo
Ã©
)râ   rí   r=   r[  rr   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<  rV  r¦  r  rÃ   r)   s   abcé
r  s
   abcé
dÃ©f
rë   úabc
r×  s	   abc
dÃ©f
)râ   rí   r=   r[  r®   r  rr   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   r>   r„   r   r   r   r   r   rn  *  ro  zGTextIOWrapperTest.test_reconfigure_write_non_seekable.<locals>.<lambda>rë   rV  r¦  r  r×  r)   r  s   abc
ï»¿dÃ©f
)	râ   rG   rJ   rí   r=   r[  rr   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ë   ro  rV  r)   úLF
rJ  r  r  )rS  úCRLF
rÃ   r¦  r  r   zLF
CRLF
s	   LF
CRLF
)rí   râ   r[  r®   r*   rS  r=   rJ   rZ   rß  r  rÈ  r   r   r   Útest_reconfigure_defaults5  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ë   rV  r  zCR
r&   zCRs	   CRLF
EOFrx  zCRLF
s	   LF
CREOFzLF
CRs   CRCRLF
EOFrJ  z	CRCRLF
zlinesep
r!  r"  rŒ  zLF
LF
CRCRLF
)râ   rí   r[  r®   rÈ   r=   rÏ   rŒ  rß  r  r/  )r8   r_  rŠ  r  r   r   r   Útest_reconfigure_newlineL  sB   









z*TextIOWrapperTest.test_reconfigure_newlinec                 C   sb   | j |  d¡dd}| d¡ | ¡  | ¡  | j |  d¡dd}| d¡ | d¡ | ¡  d S )Ns   testrë   r)   rM   r  )rí   râ   rZ   rK   r=   rN  r   r   r   Útest_issue25862p  s   


z!TextIOWrapperTest.test_issue25862N)Tr"   r#   r$   r¦   r§   r#  r(  rQ  râ  rö  rú  rY  r\  r€  r  rþ   r‡  Ú	utf8_moderf  r   r  rj  rm  rq  rs  r„  r‹  r  r>  rè  rò  r£  rŸ  r«  r°  r±  rí  rº  r½  r¾  rÀ  rÅ  rB  rÉ  r©  rª  r¬  rÌ  rÎ  rÑ  rÒ  rÓ  rÕ  rÞ  rà  rá  râ  Ú
no_tracingrç  rw  r  r  rx  r  r  rì  rï  rö  r÷  rø  rü  r  r  r  r  r  r  r  r  r  r   r#  r$  r%  r   r   r   r   rD  
  sœ    	

	*/
	


 
(	$rD  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                    ó   t tƒ  |¡ƒS r:   )r  rb   r¬  ©r8   Zlen_rc   r   r   r¬  €  re   zMemviewBytesIO.read1c                    r(  r:   )r  rb   rZ   r)  rc   r   r   rZ   ƒ  re   zMemviewBytesIO.read)r"   r#   r$   rS   r¬  rZ   rg   r   r   rc   r   r  |  s    r  c                 C   s:   t   d¡}t| ƒt| ƒ|j  }| | d|… ¡ t|ƒS )z6Convert bytes-object *buf* to a non-trivial memoryviewrN  N)r   r   ÚitemsizeÚ	frombytesr   )rO   ZarrÚidxr   r   r   r  †  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   sh   |   d¡}|  |d¡}| j|dd}| jt|j|ddd |  t|j¡ | j | j¡}|  tt	|¡ d S )NrI  rN  rÃ   r)   rí  r¦  )
râ   rÜ   rí   r°   rœ   r9   rZ   r'  rQ  rà  rM  r   r   r   rt  “  s   
z&CTextIOWrapperTest.test_initializationc                 C   sÊ   t  dtf¡- t tjd¡}|  |¡}| j|dd}| 	d¡ ||_
t |¡}~t ¡  W d   ƒ n1 s7w   Y  |  |ƒ |¡ |  tjd¡}|  | ¡ d¡ W d   ƒ d S 1 s^w   Y  d S )Nr&   rÄ   rë   r)   Z456defrÇ   s   456def)r   r;  r<  rŽ   rÑ   r   r¥   rß   rí   r=   r  ra  rb  r   r=  rc  r+   r®   rZ   )r8   r  r   r»  rd  r/   r   r   r   re    s   



ø	"ÿz*CTextIOWrapperTest.test_garbage_collectionc                 C   sj   t dƒD ]*}|  |  ¡ |  ¡ ¡}| j|dd}|  |  ¡ |  ¡ ¡}| j|dd}||_||_qt ¡  d S )NrN  rë   r)   )rQ  rä   rV   rí   Zbuddyr   r=  )r8   rN  Úb1Út1Úb2Út2r   r   r   Ú!test_rwpair_cleared_before_textio®  s   z4CTextIOWrapperTest.test_rwpair_cleared_before_textioc                 C   sF   | j |  ¡ dd}|  t¡ |`W d   ƒ d S 1 sw   Y  d S rÔ  )rí   râ   r°   r.  r-   rN  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 sDw   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 r:   )r   rø  rb   r=   r   )rd   r­  r   r   r=   Ç  s   zBCTextIOWrapperTest.test_internal_buffer_size.<locals>.MockIO.write)r"   r#   r$   r=   rg   r   ©r­  rc   r   ÚMockIOÆ  s    r6  rë   r)   r«  r  r  rM   rŠ  Zghir†  r·   )rV   rí   r-   r=   r®   r5   r°   rø  )r8   r6  rO   r»  r   r5  r   Útest_internal_buffer_sizeÁ  s   

ÿ
z,CTextIOWrapperTest.test_internal_buffer_sizeN)
r"   r#   r$   rŽ   r
  rt  re  r3  r4  r7  r   r   r   r   r-    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   r8  Ý  s    r8  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 r:   )r%  r®   r/  r(  )r   r–   rr  r'  ©Údecoderr8   r   r   Ú_check_decodeæ  s   
zPIncrementalNewlineDecoderTest.check_newline_decoding_utf8.<locals>._check_decodes   è¢ˆu   è¢ˆó   èr&   ó   ¢ó   ˆrW   T)r-  r  rV  r…  r,  z
aó   
z

s   
as   è¢ˆ
r¬  s   è¢ˆ)r°   ÚUnicodeDecodeErrorr/  r   )r8   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rqˆ ¡  ˆ |¡}|  ˆ  |¡d	¡ |  ˆ jd ¡ d S )Nc                    s*   ˆ  | ¡D ]}ˆ ˆ  t|gƒ¡¡ qd S r:   )r5  r;   r/  r   )r–   r   ©r;  ÚencoderrÀ  r   r   Ú_decode_bytewise  s   ÿzNIncrementalNewlineDecoderTest.check_newline_decoding.<locals>._decode_bytewisec                    s   | D ]
}ˆ  ˆ  |¡¡ qd S r:   )r;   r/  )r–   rf  )r;  rÀ  r   r   rE    s   ÿzabc
rV  z
abc)rV  rJ  zabcr«  )rx  rV  rJ  r&   zabc

abcabc
abcabc)r  Úgetincrementalencoderr®   Únewlinesr•   r   r5  r/  )r8   r;  r*   rE  r,  r   rC  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(   ry  rz  r{  r|  r}  r~  T©Ú	translaterÃ   rD   )r  ÚgetincrementaldecoderÚIncrementalNewlineDecoderrH  rB  r°   r±   r(  )r8   r  r¡  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®   rG  r/  )Údecr@   r   r   Ú_checkB  s
   z@IncrementalNewlineDecoderTest.test_newline_bytes.<locals>._checkFrI  T)rL  )r8   rO  rN  r   r@   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)rš  rš   rM   ra   rÃ   r   rI  r@  z
)r  rK  rL  rB  r®   r/  )r8   rJ  r;  r   r   r   Útest_translateM  s   z,IncrementalNewlineDecoderTest.test_translateN)r"   r#   r$   rB  rH  rM  rP  rQ  r   r   r   r   r9  â  s    *!r9  c                   @   r    )ÚCIncrementalNewlineDecoderTestNr!   r   r   r   r   rR  W  r%   rR  c                   @   r    )ÚPyIncrementalNewlineDecoderTestNr!   r   r   r   r   rS  Z  r%   rS  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/d0„ Zeje j!e"d1d2d3„ ƒƒZ#d4S )5Ú
MiscIOTestc                 C   r¢   r:   r£   r@   r   r   r   r§   b  re   zMiscIOTest.tearDownc                 C   sz   | j jD ]6}t| j |d ƒ}|  ||¡ |dv rqd| ¡ v s"|dkr,|  t|tƒ|¡ q| d¡s:|  t|| j	ƒ¡ qd S )N)r+   Ú	open_codeÚerrorrˆ   ZSEEK_)
rŽ   Ú__all__r¯  rk  Úlowerrp  Ú
issubclassrQ  r   r  )r8   rÈ  r   r   r   r   Útest___all__e  s   
€øzMiscIOTest.test___all__c                 C   s„  | j tjddd}|  |jd¡ | ¡  t dtf¡ | j tjddd}W d   ƒ n1 s/w   Y  |  |j	tj¡ |  |j
j	tj¡ |  |j
jj	tj¡ |  |jd¡ |  |j
jd¡ |  |j
jjd¡ | ¡  | j tjd	d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Ã   r)   rÇ   r›  rä  FrZ  )r+   r   r¥   r®   rS  rz   r   r;  r  rÈ  r²   r_  rE   )r8   r/   Úgr   r   r   Útest_attributesp  s0   ÿzMiscIOTest.test_attributesc                 C   sV   t  ¡ \}}|  t j|¡ | j|ddd}|  |j¡ tjdkr)|  | ¡ ¡ d S d S )Nr'  rÃ   r)   Úwin32)	rÏ   rÐ   rÖ   rz   r+   rþ   rÿ   rq  rG   )r8   r'   rÂ   r/   r   r   r   Útest_open_pipe_with_appendŒ  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 ]Ó}d|d vrDd|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ƒr¢|  t|j¡ t
|dƒr±|  t|jtdƒ¡ t
|dƒrÀ|  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|¡ q8d S )NrS  rÂ   rÄ   rM   ©rS  rÆ   ra   r   r'   rÇ   r›  r!  r   rÃ   r*   r5  r¬  r   r»  rQ   r¹   rW   r&   )r+   r   r¥   rz   r°   rœ   rr   rE   rÝ  Ú__iter__r„  r5  rZ   r¬  r»  rQ   r¯   r¹   rÈ   r  rJ   rK   rR   r=   rÉ   r  )r8   rr  r/   r   r   r   Útest_io_after_close—  s`   ñ





ÿÒzMiscIOTest.test_io_after_closec                 C   sX   G dd„ dt ƒ}|dƒ}|  d|¡}||_||_t |¡}~~t ¡  |  |ƒ |¡ d S )Nc                   @   r    )z*MiscIOTest.test_blockingioerror.<locals>.CNr!   r   r   r   r   ÚCÊ  r%   rc  r&   rM   )	r”  rŸ   r   rf  ra  rb  r   r=  rc  )r8   rc  rf  r   rd  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 r:   )r  r  r«  ÚABCMetarü   rè   rû   r@   r   r   r   Ú	test_abcsÕ  s   zMiscIOTest.test_abcsc                 C   s@  | j tjddd$}|  ||j¡ |  ||j¡ |  ||j¡ |  ||j¡ W d   ƒ n1 s0w   Y  |   tjd¡$}|  ||j¡ |  ||j¡ |  ||j¡ |  ||j¡ W d   ƒ n1 scw   Y  | j tjddd%}|  ||j¡ |  ||j¡ |  ||j¡ |  ||j¡ W d   ƒ d S 1 s™w   Y  d S ©NrÄ   r   rÅ   rÂ   rÃ   r)   )	r+   r   r¥   r  r  rü   ZassertNotIsInstancerè   rû   )r8   Z	abcmoduler/   r   r   r   Ú_check_abc_inheritanceÜ  s$   üü"üz!MiscIOTest._check_abc_inheritancec                 C   s   |   | ¡ d S r:   )rh  r@   r   r   r   Útest_abc_inheritanceí  s   zMiscIOTest.test_abc_inheritancec                 C   s   |   t¡ d S r:   )rh  rŽ   r@   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 s!w   Y  |  |t|jj	d ƒ¡ d S r2   )
r+   rà  ZassertWarnsr<  r   r=  r  r”  ÚwarningrŠ   )r8   rŠ   rr  r/   r'   r—  r   r   r   Ú_check_warn_on_deallocö  s   
þz!MiscIOTest._check_warn_on_deallocc                 C   s6   | j tjddd |   tjd¡ | j tjddd d S rg  )rl  r   r¥   r@   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   ƒ d S 1 sOw   Y  d S )Nc                     sN   ˆ D ]"} zt  | ¡ W q ty$ } z|jtjkr‚ W Y d }~qd }~ww d S r:   )rÏ   rz   ry   ÚerrnoÚEBADF)rv  rR  ©Úfdsr   r   Úcleanup_fds  s   ÿ€ÿýz9MiscIOTest._check_warn_on_dealloc_fd.<locals>.cleanup_fdsrV  F)rÖ   rÏ   rÐ   rl  r   r¢  r+   )r8   rŠ   rr  rr  r'   rÂ   r   rp  r   Ú_check_warn_on_dealloc_fd  s   
"ÿz$MiscIOTest._check_warn_on_dealloc_fdc                 C   s*   | j ddd |   d¡ | j ddd d S )NrÇ   r   rÅ   r'   rÃ   r)   )rs  r@   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 ]9}d
|d vr,d|d< t tjd ƒD ]%}| jtjfi |¤Ž}|  ttj||¡ W d   ƒ q31 sSw   Y  q3q d S )NrS  rÂ   rÄ   r   r`  r'   rÇ   r›  r!  r   rÃ   r*   rM   )	rQ  ÚpickleÚHIGHEST_PROTOCOLr+   r   r¥   r°   r±   Údumps)r8   rr  Úprotocolr/   r   r   r   Útest_pickling  s$   ÷ÿÿózMiscIOTest.test_picklingc                 C   rþ  )Ni @  ©Ú_test_nonblock_pipe_writer@   r   r   r   Útest_nonblock_pipe_write_bigbuf/  rÞ   z*MiscIOTest.test_nonblock_pipe_write_bigbufc                 C   rþ  )Nr   rz  r@   r   r   r   Ú!test_nonblock_pipe_write_smallbuf2  rÞ   z,MiscIOTest.test_nonblock_pipe_write_smallbufÚset_blockingz(os.set_blocking() required for this testc                 C   s0  g }g }t  ¡ \}}t  |d¡ t  |d¡ | j|dd|d}| j|dd|d}|Ç |µ dD ]d}zd}		 t|	d d	 gƒ| }
| |
¡ | |
¡ |	d
7 }	q6 | jy” } z8|  |j	d t
j¡ |  |j	d |j¡ |d d |j… |d< | | ¡ ¡ d}
| |
¡ | |
¡ W Y d }~q0d }~ww 	 z| ¡  W qÓ | jyÑ } z(|  |j	d t
j¡ |  |j	d |j¡ |  |jd¡ | | ¡ ¡ W Y d }~nd }~ww q–|t|jd ƒ7 }W d   ƒ n1 såw   Y  W d   ƒ n1 sôw   Y  d |¡d |¡}}|  ||¡ |  |j¡ |  |j¡ d S )NFrÇ   T)rS  rV  rÆ   rÄ   )ró  éI   i–  r   é   éa   rM   ra   rš   s   BLOCKEDrW   )rÏ   rÐ   r~  r+   r   r;   r=   rŸ   r®   rŠ   rn  ÚEAGAINrŸ  rZ   rr   Úiterr•   rp  rx   )r8   r$  ÚsentZreceivedr'   rÂ   ZrfZwfrc  rN  r×  rR  r   r   r   r{  5  s^   

ü
€ù	€üü
ã€ z$MiscIOTest._test_nonblock_pipe_writec                 C   sN   | j tjddd W d   ƒ n1 sw   Y  | jt| j tjddd d S )NrÂ   rÃ   r)   r  )r+   r   r¥   r°   ÚFileExistsErrorr@   r   r   r   Útest_create_faili  s   ÿzMiscIOTest.test_create_failc                 C   s|   |   tjd¡}| d¡ W d   ƒ n1 sw   Y  |   tjd¡}|  d| ¡ ¡ W d   ƒ d S 1 s7w   Y  d S )NÚxbr¸  rÇ   rL  rÀ   r   r   r   Útest_create_writeso  s   ÿ"ÿzMiscIOTest.test_create_writesc                 C   s   | j t| jtjddd d S )Nzrwax+rÃ   r)   rW  r@   r   r   r   Útest_open_allargsv  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)
        ú-XÚdevr  r¸   )rŽ   r"   r,   ÚtextwrapÚdedentr   r®   r  )r8   ÚmodrÜ  r¥  r  Úprocr   r   r   Útest_check_encoding_errorsz  s,   þûûôôîë
ä$z%MiscIOTest.test_check_encoding_errorsc              	   C   s~   | j j}t}t d|› d|›d|›d¡}tddd|ƒ}|j ¡ }|  t	|ƒd¡ |  
|d	  d
¡¡ |  
|d  d¡¡ d S )Nz(            import sys
            from zN import open, TextIOWrapper
            import pathlib

            with open(zJ) as f:           # line 5
                pass

            pathlib.Path(z ).read_text()  # line 8
        rŠ  Úwarn_default_encodingr  ra   r   s   <string>:5: EncodingWarning: rM   s   <string>:8: EncodingWarning: )rŽ   r"   r,   rŒ  r  r   r  r‰  r®   r   rp  r   )r8   rŽ  rÜ  r  r  r  r   r   r   Útest_check_encoding_warning§  s$   þû
ø

ÿÿz&MiscIOTest.test_check_encoding_warning)Úcategoryc                 C   s   |   | jj| jj¡ d S r:   )rÞ  rŽ   ÚOpenWrapperr+   r@   r   r   r   Útest_openwrapper¾  s   zMiscIOTest.test_openwrapperN)$r"   r#   r$   r§   rZ  r]  r_  rb  rd  rf  rh  ri  rj  rl  rm  rs  rt  ry  r|  r}  r€  Z
skipUnlessr„  rÏ   r{  r†  rˆ  r‰  r  r’  r   r  r   Zignore_warningsr  r•  r   r   r   r   rT  `  s<    1ÿ
2-
rT  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   rY   r   r   r   rZ   Í  rÿ  zACMiscIOTest.test_readinto_buffer_overflow.<locals>.BadReader.readNrö  r[   r   r   r   r   Ú	BadReaderÌ  s    r—  ra   )rŽ   rè   r¯   r°   rœ   rQ   )r8   r—  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r%d  tƒ ¡}|  ||¡ d S |  | 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õ  rq  r  )r8   Zstream_namer  r€   r·  r  Úpatternr   r   r   Ú&check_daemon_threads_shutdown_deadlockÓ  s   è

üz2CMiscIOTest.check_daemon_threads_shutdown_deadlockc                 C   rþ  )NÚstdout©rœ  r@   r   r   r   Ú,test_daemon_threads_shutdown_stdout_deadlockü  rÞ   z8CMiscIOTest.test_daemon_threads_shutdown_stdout_deadlockc                 C   rþ  )NÚstderrrž  r@   r   r   r   Ú,test_daemon_threads_shutdown_stderr_deadlockÿ  rÞ   z8CMiscIOTest.test_daemon_threads_shutdown_stderr_deadlockN)r"   r#   r$   rŽ   r˜  rœ  rŸ  r¡  r   r   r   r   r–  Ç  s    	)r–  c                   @   s   e Zd ZeZdS )ÚPyMiscIOTestN)r"   r#   r$   r‘   rŽ   r   r   r   r   r¢    ó    r¢  Ú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 r:   )ÚsignalÚSIGALRMÚalarm_interruptÚoldalrmr@   r   r   r   r¦   
  r   zSignalsTest.setUpc                 C   s   t   t j| j¡ d S r:   )r¦  r§  r©  r@   r   r   r   r§     ó   zSignalsTest.tearDownc                 C   s   dd  d S rL   r   )r8   ÚsigÚframer   r   r   r¨    r#  zSignalsTest.alarm_interruptc           
         sÊ  g ‰‡ ‡fdd„}t j|d}d|_t ¡ \‰ }d|d< |tjt|ƒ d  }z“| jj	|fi |¤Ž}t
tdƒrNt tjtjg¡ | ¡  t tjtjg¡ n| ¡  t d¡ z|  t|j|¡ W t d	¡ | ¡  n
t d	¡ | ¡  w ˆ t ˆ d¡¡ |  ˆ|d	d… |dd
… g¡ W t |¡ t ˆ ¡ z| ¡  W dS  tyº }	 z|	jtjkr¯‚ W Y d}	~	dS d}	~	ww t |¡ t ˆ ¡ z| ¡  W w  tyä }	 z|	jtjkrÚ‚ W Y d}	~	w d}	~	ww )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 rv   )rÏ   rZ   r;   )r–   ©r'   Úread_resultsr   r   r    rC  z2SignalsTest.check_interrupted_write.<locals>._readrW  TFrV  rM   Úpthread_sigmaskr   ra   N)rk   r×   ÚdaemonrÏ   rÐ   r   ÚPIPE_MAX_SIZEr   rŽ   r+   r„  r¦  r¯  Ú	SIG_BLOCKr§  rØ   ÚSIG_UNBLOCKÚalarmr°   r#  r=   r•   r;   rZ   r®   rz   ry   rn  ro  )
r8   Úitemr   Úfdopen_kwargsr  r»  rÂ   Ú
large_dataÚwiorR  r   r­  r   Úcheck_interrupted_write  sV   




ÿ
"

ÿ€ÿ
ù
ÿ€ÿz#SignalsTest.check_interrupted_writec                 C   s   | j ddddd d S )Nr  rÄ   r   r`  ©r¹  r@   r   r   r   Ú!test_interrupted_write_unbufferedG  r   z-SignalsTest.test_interrupted_write_unbufferedc                 C   s   | j dddd d S ©Nr  rÄ   ©rS  rº  r@   r   r   r   Útest_interrupted_write_bufferedJ  rª  z+SignalsTest.test_interrupted_write_bufferedc                 C   s   | j ddddd d S )NÚxyr  rÂ   rë   ©rS  r*   rº  r@   r   r   r   Útest_interrupted_write_textM  r   z'SignalsTest.test_interrupted_write_textc           	   	      s,  ‡ ‡fdd„}t   t j|¡ t ¡ \}}| jj|fi |¤Ž‰zht  d¡ |  tt	f¡}	 t
dƒD ]}ˆ ˆ ¡ ˆ ¡  q1t |tˆ ƒd ¡ q-1 sKw   Y  |j}t|t	ƒrv|  t|ƒ d¡t|ƒ¡ W t  d¡ ˆ ¡  t |¡ d S W t  d¡ ˆ ¡  t |¡ d S t  d¡ ˆ ¡  t |¡ w )Nc                     s   ˆ  ˆ ¡ dd  d S rL   )r=   )rŠ   ©r   r¸  r   r   Úon_alarmR  s   
z3SignalsTest.check_reentrant_write.<locals>.on_alarmrM   rÓ   zreentrant callr   )r¦  r§  rÏ   rÐ   rŽ   r+   r´  r°   r#  rø  rQ  r=   rr   rZ   r   r•  rú   rp  r”  r   rz   )	r8   r   r¶  rÃ  r'   rÂ   r—  rN  rÌ   r   rÂ  r   Úcheck_reentrant_writeP  s6   


ûÿ

û

þz!SignalsTest.check_reentrant_writec                 C   ó   | j ddd d S r¼  ©rÄ  r@   r   r   r   Útest_reentrant_write_bufferedl  r–  z)SignalsTest.test_reentrant_write_bufferedc                 C   ó   | j dddd d S )Nr¿  rÂ   rë   rÀ  rÆ  r@   r   r   r   Útest_reentrant_write_texto  rª  z%SignalsTest.test_reentrant_write_textc              	      sÄ   t  ¡ \}‰ d|d< ‡ fdd„}t tj|¡ z6| jj|fi |¤Ž}t  ˆ d¡ t d¡ |  || 	d¡ƒd¡ W t d	¡ | 
¡  t  
ˆ ¡ t  
|¡ d
S t d	¡ | 
¡  t  
ˆ ¡ t  
|¡ w )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.FrV  c                    s   t  ˆ d¡ d S )Ns   bar)rÏ   r=   ©r«  r¬  ©rÂ   r   r   Úalarm_handlerx  re   z?SignalsTest.check_interrupted_read_retry.<locals>.alarm_handlerrû  rM   r¨   Zfoobarr   N)rÏ   rÐ   r¦  r§  rŽ   r+   r=   r´  r®   rZ   rz   )r8   r/  r¶  r'   rÌ  Zrior   rË  r   Úcheck_interrupted_read_retryr  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   rn  ‹  rï  zBSignalsTest.test_interrupted_read_retry_buffered.<locals>.<lambda>rÇ   r½  ©rÍ  r@   r   r   r   Ú$test_interrupted_read_retry_bufferedŠ  s   

ÿz0SignalsTest.test_interrupted_read_retry_bufferedc                 C   s   | j dd„ ddd d S )Nc                 S   s   | S r:   r   r  r   r   r   rn    ro  z>SignalsTest.test_interrupted_read_retry_text.<locals>.<lambda>r'   r<  rÀ  rÎ  r@   r   r   r   Ú test_interrupted_read_retry_textŽ  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
|¡ zj| jj|fi |¤Ž}t	 d¡ | |¡}	|  ||	¡ | ¡  d‰ˆ ¡  |  ˆ¡ |  |tdd„ ˆD ƒƒ¡ W t	 d¡ d‰t |¡ t ˆ¡ z| ¡  W dS  ty¬ }
 z|
jtjkr¡‚ W Y d}
~
dS d}
~
ww t	 d¡ d‰t |¡ t ˆ¡ z| ¡  W w  tyÝ }
 z|
jtjkrÓ‚ W Y d}
~
w d}
~
ww )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.ÚselectFrV  Nc               
      sŠ   z/ˆs-ˆˆ  ˆgg g d¡d v r(t ˆd¡} ˆ | ¡ ˆˆ  ˆgg g d¡d v sˆrW d S W d S  tyD } z	|‰ W Y d }~d S d }~ww )Ng      ð?r   r   )rÑ  rÏ   rZ   r;   ÚBaseException)r–   rÌ   )rV  r'   r®  rÑ  Úwrite_finishedr   r   r  ¤  s   
þÿ€þz8SignalsTest.check_interrupted_write_retry.<locals>._readrW  Tc                    s   t   t jˆ ¡ t  d¡ d S rv   )r¦  r§  r´  rÊ  )Úalarm2r   r   Úalarm1¯  r‘  z9SignalsTest.check_interrupted_write_retry.<locals>.alarm1c                    s   ˆ   ¡  d S r:   )rØ   rÊ  )r»  r   r   rÔ  ²  r#  z9SignalsTest.check_interrupted_write_retry.<locals>.alarm2rM   c                 s   s    | ]}t |ƒV  qd S r:   )r   rY  r   r   r   Ú	<genexpr>Ç  s   € z<SignalsTest.check_interrupted_write_retry.<locals>.<genexpr>r   )r
   Úimport_moduler   r±  rÏ   rÐ   rk   r×   r°  r¦  r§  rŽ   r+   r´  r=   r®   rr   r•   rc  Úsumrz   ry   rn  ro  )r8   rµ  r¶  rc  rÂ   r  rÕ  r·  r¸  r   rR  r   )rÔ  rV  r'   r®  rÑ  r»  rÓ  r   Úcheck_interrupted_write_retry’  s`   
	





ÿ€ÿ
÷

ÿ€ÿz)SignalsTest.check_interrupted_write_retryc                 C   rÅ  )Nr·   rÄ   r½  ©rÙ  r@   r   r   r   Ú%test_interrupted_write_retry_bufferedÖ  r–  z1SignalsTest.test_interrupted_write_retry_bufferedc                 C   rÈ  )Nr  rÂ   r<  rÀ  rÚ  r@   r   r   r   Ú!test_interrupted_write_retry_textÙ  rª  z-SignalsTest.test_interrupted_write_retry_textN)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$    4
Dr¥  c                   @   s   e Zd ZeZdS )ÚCSignalsTestN)r"   r#   r$   rŽ   r   r   r   r   rÝ  Ý  r£  rÝ  c                   @   s   e Zd ZeZdZdZdS )ÚPySignalsTestN)r"   r#   r$   r‘   rŽ   rÇ  rÉ  r   r   r   r   rÞ  à  s    rÞ  c            
         s  t ttttttttt	t
tttttttttf}ttttttttf}tjdg }dd„ |D ƒ}dd„ |D ƒ}tƒ ‰ | ‡ fdd„|D ƒ¡ | ‡ fdd„|D ƒ¡ |D ],}|j  !d¡rh| "¡ D ]\}}t#|||ƒ q]|j  !d	¡r}| "¡ D ]
\}}t#|||ƒ qrqQt$ %d
d„ |D ƒ¡}	|	S )NrL  c                 S   ó   i | ]}|t t|ƒ“qS r   )r¯  rŽ   ©rZ  rÈ  r   r   r   Ú
<dictcomp>ü  r\  zload_tests.<locals>.<dictcomp>c                 S   rß  r   )r¯  r‘   rà  r   r   r   rá  ý  r\  c                 3   ó$    | ]}|j ˆ d |j   fV  qdS )rc  N©r"   rY  ©Zglobsr   r   rÖ  ÿ  ó   €" zload_tests.<locals>.<genexpr>c                 3   râ  )ÚPyNrã  rY  rä  r   r   rÖ     rå  rc  ræ  c                 S   s   g | ]}t  |¡‘qS r   )r€  Z	makeSuite)rZ  r  r   r   r   r[  	  rÊ  zload_tests.<locals>.<listcomp>)&rÐ  rÓ  rÔ  rn  r„  r½  r¾  rá  râ  r  r  r>  rR  rS  r-  r8  r–  r¢  rÝ  rÞ  rV   r^   r}   ru   r’   rƒ   r1   rj   rŽ   rW  Úglobalsrd  r"   r   rŽ  Ú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__){rS   r«  r   rn  ra  rÏ   ru  r_  r¦  rþ   Z	sysconfigrŒ  rk   rp   r€  r  ra  Úcollectionsr   r   Ú	itertoolsr   r   r  r   Ztest.support.script_helperr   r   r	   Ztest.supportr
   r   r   r   Ztest.support.os_helperr   r  rŽ   Z_pyior‘   r   ÚImportErrorr   Z	Structurer   Zget_config_varZ_cflagsZ_config_argsr‚  r„  r‡  Údev_moderî  r0   r1   rü   rT   rU   rV   r\   r]   r^   rh   ri   rj   rs   rt   ru   r{   r|   r}   râ   r   r‚   rƒ   r   r   r’   rž   r    ZTestCaser¡   rÐ  rÓ  r  rÔ  rÜ  r  r  rn  r„  r…  r½  r¾  r¿  rá  râ  rã  r  r  r  r  r=  r>  rD  r  r  r-  r8  r9  rR  rS  rT  r–  r¢  r  rÈ  r¥  rÝ  rÞ  ré  r"   Úmainr   r   r   r   Ú<module>   s   ÿþ8
	0     = .  *C  (0 Q jN
+        o
	Nu  i< V	
#ÿ