o
    HXîh¬­ ã                   @   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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"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-e	dƒp·e	j.j/Z0dd„ Z1G dd„ dƒZ2G dd„ de2e%j3ƒZ4G dd„ de2e'j3ƒZ5G dd„ de2ƒZ6G dd„ de6e%j3ƒZ7G dd „ d e6e'j3ƒZ8G d!d"„ d"e6ƒZ9G d#d$„ d$e9e%j3ƒZ:G d%d&„ d&e9e'j3ƒZ;G d'd(„ d(e6ƒZ<G d)d*„ d*e<e%j3ƒZ=G d+d,„ d,e<e'j3ƒZ>G d-d.„ d.e6ƒZ?G d/d0„ d0e?e%j3ƒZ@G d1d2„ d2e?e'j3ƒZAG d3d4„ d4ƒZBG d5d6„ d6eBe%jCƒZDG d7d8„ d8eBe'jCƒZEG d9d:„ d:ƒZFG d;d<„ d<eFe%jCƒZGG d=d>„ d>eFe'jCƒZHG d?d@„ d@ƒZIG dAdB„ dBeIe%j3ƒZJG dCdD„ dDeIe'j3ƒZKG dEdF„ dFejLƒZMG dGdH„ dHeMƒZNG dIdJ„ dJeMƒZOejPG dKdL„ dLejLƒƒZQG dMdN„ dNƒZRG dOdP„ dPƒZSG dQdR„ dRejLeRƒZTG dSdT„ dTeTeSƒZUG dUdV„ dVeTƒZVG dWdX„ dXejLeRƒZWG dYdZ„ dZeWeSƒZXG d[d\„ d\eWƒZYG d]d^„ d^ejLƒZZG d_d`„ d`eZƒZ[G dadb„ dbeZƒZ\G dcdd„ ddeTeWƒZ]G dedf„ dfe]eSƒZ^G dgdh„ dhe]ƒZ_G didj„ dje$j`ƒZadkdl„ ZbG dmdn„ dnejLƒZcG dodp„ dpejLƒZdG dqdr„ dre%jCƒZedsdt„ ZfG dudv„ dvedƒZgG dwdx„ dxedƒZhG dydz„ dzejLƒZiG d{d|„ d|eiƒZjG d}d~„ d~eiƒZkG dd€„ d€ejLƒZlG dd‚„ d‚elƒZmG dƒd„„ d„elƒZne oejpd…kd†¡G d‡dˆ„ dˆejLƒƒZqG d‰dŠ„ dŠeqƒZrG d‹dŒ„ dŒeqƒZsddŽ„ ZteudkrÓe v¡  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)Úskip_if_sanitizer)ÚFakePathc                  O   s   t   dt| i |¤Ž¡S )NÚb)ÚarrayÚbytes)ÚposÚkw© r   ú6/opt/python-3.10.19/usr/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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_sizeJ   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__T   s   

zMockRawIOWithoutRead.__init__c                 C   s   | j  t|ƒ¡ t|ƒS ©N)r5   Úappendr   r   ©r8   r   r   r   r   ÚwriteZ   s   zMockRawIOWithoutRead.writec                 C   ó   dS ©NTr   ©r8   r   r   r   Úwritable^   ó   zMockRawIOWithoutRead.writablec                 C   r>   ©Né*   r   r@   r   r   r   Úfilenoa   rB   zMockRawIOWithoutRead.filenoc                 C   r>   r?   r   r@   r   r   r   Úreadabled   rB   zMockRawIOWithoutRead.readablec                 C   r>   r?   r   r@   r   r   r   Úseekableg   rB   zMockRawIOWithoutRead.seekablec                 C   r>   r2   r   ©r8   r   Úwhencer   r   r   Úseekj   rB   zMockRawIOWithoutRead.seekc                 C   r>   r2   r   r@   r   r   r   Útellm   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   Úreadintop   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   P   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ž   2  r   rž   c                   @   rŒ   )ÚPyMockNonBlockWriterION)r#   r$   r%   r‘   rŸ   r   r   r   r   r    5  r   r    c                   @   s’  e Zd Zdd„ Zdd„ Zdd„ Zddd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`„ Z2dadb„ Z3dcS )eÚIOTestc                 C   ó   t  t j¡ d S r:   ©r   ÚunlinkÚTESTFNr@   r   r   r   ÚsetUp;  re   zIOTest.setUpc                 C   r¢   r:   r£   r@   r   r   r   ÚtearDown>  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_opsA  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_opsY  s@   



÷zIOTest.read_opsl        c              	   C   sh  |  ¡ sJ ‚| ¡ sJ ‚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·   )rF   rA   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   ƒ n	1 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©  sv   	û



ÿß"€Ï€ €ÿ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_readline2  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È   D  rB   z4IOTest.test_readline_nonsizeable.<locals>.R.readlineN)r#   r$   r%   rÈ   r   r   r   r   ÚRC  ó    r  )ÚIOBaser°   r±   ÚStopIterationÚnext©r8   r  r   r   r   Útest_readline_nonsizeable@  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__L  rB   z0IOTest.test_next_nonsizeable.<locals>.R.__next__N)r#   r$   r%   r  r   r   r   r   r  K  r  r  rM   )r  r°   r±   Ú	readlinesr  r   r   r   Útest_next_nonsizeableH  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_ioP  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_opsX  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_opene  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_tellu  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»   ©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;   rA  rb   rz   r@   r/  r   r   rz   ¬  ó   z1IOTest._check_base_destructor.<locals>.MyIO.closec                    rC  r:   )r;   rB  rb   rr   r@   r/  r   r   rr   ¯  rD  z1IOTest._check_base_destructor.<locals>.MyIO.flush)r#   r$   r%   r9   r-  rz   rr   rg   r   r7  rc   r   ÚMyIO›  s
    rE  r;  )r   r>  r®   )r8   ÚbaserE  r/   r   r7  r   Ú_check_base_destructor™  s   zIOTest._check_base_destructorc                 C   ó   |   | j¡ d S r:   )rG  r  r@   r   r   r   Útest_IOBase_destructor·  re   zIOTest.test_IOBase_destructorc                 C   rH  r:   )rG  rü   r@   r   r   r   Útest_RawIOBase_destructorº  re   z IOTest.test_RawIOBase_destructorc                 C   rH  r:   )rG  rè   r@   r   r   r   Útest_BufferedIOBase_destructor½  re   z%IOTest.test_BufferedIOBase_destructorc                 C   rH  r:   )rG  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   rQ  r   rP  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'   FrV  r   rÇ   ©rW  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   rU  )Nr'   rÃ   FrV  rX  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)   TFrV  )	r+   r   r¥   r=   r®   r²   ÚrawrW  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Š   Úkwargsrn  r   rm  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Æ   rW  r[  rÂ   rÃ   r)   rV  )rt  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_close;  s
   zIOTest.test_multi_closec                 C   sž   |   d¡}|  | d¡d¡ |  | d¡d¡ |  | d¡d¡ |  | d¡d ¡ |  | d¡d¡ |  | d¡d¡ |  | d¡d ¡ |  | d¡d¡ d S )	N)ó   abcó   dNó   efgNra   ó   abó   cr{  ó   efó   grW   )r1   r®   rZ   ©r8   Úrawior   r   r   Útest_RawIOBase_readB  s   
zIOTest.test_RawIOBase_readc                 C   s@   |   ¡ |  ¡ |  ¡ |  ¡ |  ¡ f}|D ]
}|  t|dƒ¡ qd S )NÚ__dict__)r  rü   rû   rø   râ   rq  Úhasattr)r8   r  r    r   r   r   Útest_types_have_dictO  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)   rZ  c                    ó   ˆ S r:   r   )rh  Úflags©rw  r   r   Úopener^  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_openerZ  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   ©Zfnamerˆ  r   r   r   Ú	badopenere  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_1c  ó
   ÿz!IOTest.test_bad_opener_negative_1c                 C   rŽ  )Nc                 S   r>   )Néþÿÿÿr   r  r   r   r   r‘  m  rB   z8IOTest.test_bad_opener_other_negative.<locals>.badopenerr‹  r'   r’  zopener returned -2r“  r–  r   r   r   Útest_bad_opener_other_negativek  r™  z%IOTest.test_bad_opener_other_negativec                    s^   t  ¡ ‰ |  t¡}| jd‡ fdd„d W d   ƒ n1 sw   Y  |  |jjtj¡ d S )NZfooc                    r‡  r:   r   )Únamerˆ  r‰  r   r   ro  x  rp  z/IOTest.test_opener_invalid_fd.<locals>.<lambda>r’  )	r   Zmake_bad_fdr°   ry   r+   r®   r•  ÚerrnoÚEBADF)r8   r—  r   r‰  r   Útest_opener_invalid_fds  s
   ÿzIOTest.test_opener_invalid_fdc              	   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Ç   Fr[  )r+   r,   rÑ   rE   r9   rÈ   rz   )r8   Úf1Úf2Zfileior   r   r   Útest_fileio_closefd{  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   ƒ n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)   rZ  r'   )r+   r=   r®   rZ   )rh  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©rz  r{  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   ƒ n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   )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   rR  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   rœ  Ú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   ro  ö  rp  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)4r#   r$   r%   r¦   r§   r³   rº   r½   rÁ   rÎ   r  r	  r  r  r  r  r  r  r"  r%  r)  r?  rG  rI  rJ  rK  rL  rN  rT  rY  r^  r_  ra  rf  rl  rt  rx  ry  rƒ  r†  r  r˜  r›  rŸ  r¢  r§  r¬  r¶  r»  rÀ  rÊ  rÑ  r   r   r   r   r¡   9  sd    
!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   rE  ÿ  r  rE  )r  r    rb  rc  r   r>  rd  )r8   rE  r    re  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_args1  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   D  rn   zHCommonBufferedTests.test_override_destructor.<locals>.MyBufferedIO.closec                    r2  r4  r5  r@   r/  r   r   rr   G  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_destructor8  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   Ú_withT  s   "ÿz7CommonBufferedTests.test_context_manager.<locals>._with)rV   rà  r°   rœ   )r8   r‚  rí  r   rì  r   Útest_context_managerP  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_UNRAISABLErd  Ú
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_repri  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_reprs  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   rn  ‚  s   z@CommonBufferedTests.test_flush_error_on_close.<locals>.bad_flushr   rM   c                   S   r  r:   r   r   r   r   r   ro    rp  z?CommonBufferedTests.test_flush_error_on_close.<locals>.<lambda>)	rV   rr   rà  r°   ry   rz   rq  rx   rr  ©r8   rn  r   rþ  r   rx  }  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   rn  ‘  ó   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   ro     rp  z?CommonBufferedTests.test_close_error_on_close.<locals>.<lambda>c                   S   r  r:   r   r   r   r   r   ro  ¡  rp  )rV   rz   rà  rr   r°   ry   r®   r•  rŠ   ÚassertIsInstanceÚ__context__rr  rx   ©r8   r`  rn  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   rn  ¦  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   ro  µ  rp  zMCommonBufferedTests.test_nonnormalized_close_error_on_close.<locals>.<lambda>c                   S   r  r:   r   r   r   r   r   ro  ¶  rp  )rV   rz   rà  rr   r°   Ú	NameErrorÚassertInr”  r•  r  r  rr  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   ry  ¸  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ý  rx  r  r  ry  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 )Nrz  é   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Ó   r{  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   bcr{  r|  rš   r¼   rW   r  r1  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   )rz  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¸   )rz  ó   deó   fghs   jklr  ra   r¼   rz  rM   r}  r~  r6  r7  r¨   s   fghjklr  )rV   rà  r¯   r®   Úpeekr6   r¹   )r8   r  r‚  rç  r   r   r   r   Útest_readinto16  s*   
z!BufferedReaderTest.test_readinto1c                 C   óº   d}d}|   |f¡}| j||d}t dd¡}t|ƒdksJ ‚| |¡}|  |t|ƒ¡ t|ƒ d¡}|  |t|ƒ¡ |  	|d |… |d |… ¡ |  	||d … dt||d … ƒ ¡ d S ©	Né<   s   aaaaaaaaaaaaaaaaaaaaaaaaaar  rO  s    xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxr$  r   r·   )
rV   rà  r   r   rQ   r(  r   r   Ú
assertLessr®   ©r8   r  r   r‚  rç  r   rP   Zbmr   r   r   Útest_readinto_arrayM  ó   
(z&BufferedReaderTest.test_readinto_arrayc                 C   r:  r;  )
rV   rà  r   r   r¹   r(  r   r   r=  r®   r>  r   r   r   Útest_readinto1_arrayb  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ç  x  ó   

z0BufferedReaderTest.test_readlines.<locals>.bufiorB  rf   r  r´   ©r®   r  r  r   r@   r   Útest_readlinesw  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)rz  r{  Nr|  NNNó   abcdr¨   ó   erM   s   fgrW   )r/  NNr/  )rV   rà  r®   rZ   r8  rd  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¼  rM  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Å   rG  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   rR  ÚrandomÚshuffler   r¯   r+   r   r¥   r=   Ú	read_moderà  r   Ústart_threadsrp   rq   rr  r•   r®   r   r¤   )r8   ÚNÚlr–   r`  ÚthreadsrO  Úcr   )rç  rV  r/   rW  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   ro  å  rp  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   rj  )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œ   r8  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 )Nrz  r   )r}   rà  rr  rA   r°   rˆ   rR   ræ  r   r   r   Útest_truncate_on_read_only  s
   

z-BufferedReaderTest.test_truncate_on_read_onlyN)r#   r$   r%   rd  r&  r+  r.  r2  r3  r5  r9  r?  rA  rE  rI  rL  rN  rO  r   Úrequires_resourcerj  r  rk  rl  rn  ro  r   r   r   r   r"  ã  s.    

'	r"  c                   @   sX   e Zd ZejZedddddd„ ƒZdd„ Zdd	„ Z	d
d„ Z
dd„ Zdd„ Zdd„ ZdS )ÚCBufferedReaderTestTúLsanitizer defaults to crashing instead of returning NULL for malloc failure.©ZmemoryÚaddressÚreasonc                 C   óH   t  | ¡ tjdkr"|  ¡ }|  |¡}|  ttt	f|j
|tj¡ d S d S ©Nrg  )r"  r&  rþ   rk  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 )Nrz  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/   rb  rc  r   r>  rd  ©r8   r‚  r/   re  r   r   r   rf  +  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_error8  ó   "ÿz#CBufferedReaderTest.test_args_errorc                 C   sh   t  t  d¡¡}dd„ |_|  |¡}|  t¡}| ¡  W d   ƒ n1 s&w   Y  |  |j	j
¡ d S )Nrm  c                 S   r>   r  r   ©rO   r   r   r   ro  ?  rp  z=CBufferedReaderTest.test_bad_readinto_value.<locals>.<lambda>)rŽ   rÜ   râ   rQ   rà  r°   ry   rÈ   rd  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 )Nrm  c                 S   r>   r”   r   r  r   r   r   ro  G  rp  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_typeE  s   


ÿz*CBufferedReaderTest.test_bad_readinto_typeN)r#   r$   r%   rŽ   rÜ   rà  r   r&  rz  r{  rf  r  r„  r…  r   r   r   r   rq    s    


rq  c                   @   ó   e Zd ZejZdS )ÚPyBufferedReaderTestN)r#   r$   r%   r‘   rÜ   rà  r   r   r   r   r‡  N  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¼   rz  r   r%  rš   ó   ghirW   s   abcghi)
rV   rà  r9   r®   r=   rr   r°   rœ   r•   r5   ræ  r   r   r   r&  U  s   


z#BufferedWriterTest.test_constructorc                 C   r'  )Nr)  rW   r   )	rà  r*  rº  rœ   r.  r=   r9   rV   r®   r  r   r   r   r+  e  r,  z%BufferedWriterTest.test_uninitializedc                 C   sD   |   ¡ }|  |¡}| d¡ |  |j¡ | ¡  |  |jdg¡ d S )Ns   howdy!)rV   rà  r=   rr  r5   râ  r®   rä  r   r   r   Útest_detach_flusho  s   

z$BufferedWriterTest.test_detach_flushc                 C   sh   |   ¡ }|  |d¡}| d¡ |  |j¡ tdƒ}| |¡ d|d d …< | ¡  |  d |j¡d¡ d S )NrG  rz  ó   defó   ***rW   ó   abcdef)	rV   rà  r=   rr  r5   r¯   rr   r®   r•   )r8   Úwriterrç  r²   r   r   r   Ú
test_writew  s   

zBufferedWriterTest.test_writec                 C   sn   |   ¡ }|  |d¡}d}tdt|ƒdƒD ]}| |||d … ¡ qd |j¡}|  | |d d… ¡|¡ d S )NrG  s   abcdefghijklmnopr   r¼   rW   iøÿÿÿ)	rV   rà  rR  r   r=   r•   r5   rq  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 )NrR  rQ  r   r«   c                  s   s(    t dƒD ]} tdƒD ]}| V  qqd S )NrM   é   )r   rR  )r¯  rO  r   r   r   Ú	gen_sizes•  s   €ÿÿz2BufferedWriterTest.check_writes.<locals>.gen_sizesrW   )r   rR  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   ro  £  rp  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   ro  ¦  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   ro  ·  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 )NrG  rJ  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—   rq  r   )r8   r`  rç  rU  Ú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 ©NrG  rz  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}  r4  r  rG  rW   r  )rV   rà  rÉ   rr   r®   r•   r5   ©r8   rg  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 )NrG  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Å   rG  r  r¼   r¨   rÇ   rz  )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   ƒ n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_writerP  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 )NrQ  rR  rM   rS  r   rÅ   rG  c               
      sX   z	 zˆ  ¡ } W n ty   Y W d S w ˆ  | ¡ q ty+ } zˆ |¡ ‚ d }~ww r:   )ÚpopleftrN   r=   rT  r;   )r–   rU  )rç  rV  Úqueuer   r   r/   ;  s   ÿ
û
€þz*BufferedWriterTest.test_threads.<locals>.fc                    rX  rY  r[  r\  r.   r   r   r^  F  r_  z3BufferedWriterTest.test_threads.<locals>.<listcomp>rµ   r`  ra  rÇ   )r   rR  r   r   r   r  r;   r+   r   r¥   r°  rà  r   re  rp   rq   rr  rz   rZ   r®   r   r¤   )
r8   rf  r  r”  rP   r¯  r`  rh  r–   rO  r   )rç  rV  r/   r¶  r   rj  $  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   ro  [  rp  z7BufferedWriterTest.test_misbehaved_io.<locals>.<lambda>)r^   rà  r°   ry   rJ   rK   r=   rz   ræ  r   r   r   rk  S  s   z%BufferedWriterTest.test_misbehaved_ioc                 C   sB   |   t¡ |  |  ¡ dd¡ W d   ƒ d S 1 sw   Y  d S ©NrG  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_writec  rÐ  z?BufferedWriterTest.test_write_error_on_close.<locals>.bad_writeó   spam)rV   r=   rà  r°   ry   rz   rq  rx   )r8   r`  rº  r   r   r   r   Útest_write_error_on_closea  s   

z,BufferedWriterTest.test_write_error_on_closec                 C   s\   |   ¡ }|  |d¡}tj|jd}| ¡  |j ¡  |  t	|j
d¡ |  |j¡ | ¡  d S )NrG  rZ  r»  )rj   rà  rk   r×   rz   rØ   rm   Úwaitr°   rœ   r=   rq  rx   r•   )r8   r‚  rç  Útr   r   r   Útest_slow_close_from_threadk  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   rp  rj  rk  r¹  r¼  r¿  r   r   r   r   rˆ  R  s6    

.

rˆ  c                   @   s@   e Zd ZejZedddddd„ ƒZdd„ Zdd	„ Z	d
d„ Z
dS )ÚCBufferedWriterTestTrr  rs  c                 C   rv  rw  )rˆ  r&  rþ   rk  rV   rà  r°   r¾   rx  rœ   r9   ræ  r   r   r   r&  {  ry  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   rz  ‡  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  rb  rc  r   r>  rd  r+   r®   rZ   r|  r   r   r   rf  ‘  s   



ù"ÿz+CBufferedWriterTest.test_garbage_collectionc                 C   r}  )Nrß   r#  r~  r@   r   r   r   r  ¢  r€  z#CBufferedWriterTest.test_args_errorN)r#   r$   r%   rŽ   rß   rà  r   r&  rz  rf  r  r   r   r   r   rÀ  x  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   rr  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¼   rz  rM   r{  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   ro  ß  ó    z3BufferedRWPairTest.test_readlines.<locals>.<lambda>)r  r  rª   rf   r  r  rD  rÃ  r   r@   r   rE  Þ  s   z!BufferedRWPairTest.test_readlinesc                 C   s<   |   |  d¡|  ¡ ¡}|  | d¡d¡ |  | ¡ d¡ d S )Nr  r¼   rz  r‹  )rà  râ   rV   r®   r°  rÃ  r   r   r   r2  ä  s   zBufferedRWPairTest.test_read1c              	   C   s|   dD ]9}|   |¡* |  |  d¡|  ¡ ¡}tdƒ}|  t||ƒ|ƒd¡ |  t|ƒd¡ W d   ƒ n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   r5  ì  s   û€ÿz BufferedRWPairTest.test_readintoc                 C   sf   |   ¡ }|  |   ¡ |¡}| d¡ | ¡  tdƒ}| |¡ d|d d …< | ¡  |  |jddg¡ d S )Nrz  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¼   rz  )rà  râ   rV   rq  r8  r   r®   rZ   rÃ  r   r   r   Ú	test_peek  s   zBufferedRWPairTest.test_peekc                 C   ó&   |   |  ¡ |  ¡ ¡}|  | ¡ ¡ d S r:   )rà  rV   rq  rF   rÃ  r   r   r   Útest_readable  ó   z BufferedRWPairTest.test_readablec                 C   rÏ  r:   )rà  rV   rq  rA   rÃ  r   r   r   Útest_writeable  rÑ  z!BufferedRWPairTest.test_writeablec                 C   rÏ  r:   )rà  rV   rr  rG   rÃ  r   r   r   Útest_seekable  s   z BufferedRWPairTest.test_seekablec                 C   s8   |   |  ¡ |  ¡ ¡}|  |j¡ | ¡  |  |j¡ d S r:   )rà  rV   rr  rx   rz   rq  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   ro  -  rp  zEBufferedRWPairTest.test_reader_close_error_on_close.<locals>.<lambda>)rV   rz   rà  r°   r  r  r”  r•  rq  rx   rr  )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_close0  r  zIBufferedRWPairTest.test_writer_close_error_on_close.<locals>.writer_closerÛ  c                   S   r  r:   r   r   r   r   r   ro  >  rp  zEBufferedRWPairTest.test_writer_close_error_on_close.<locals>.<lambda>)rV   rz   rà  r°   r  r  r”  r•  rr  rx   rq  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Ø  J  r  zPBufferedRWPairTest.test_reader_writer_close_error_on_close.<locals>.reader_closec                   S   rÕ  r:   rÚ  r   r   r   r   rÜ  L  r  zPBufferedRWPairTest.test_reader_writer_close_error_on_close.<locals>.writer_closer×  rÛ  c                   S   r  r:   r   r   r   r   r   ro  ]  rp  zLBufferedRWPairTest.test_reader_writer_close_error_on_close.<locals>.<lambda>c                   S   r  r:   r   r   r   r   r   ro  ^  rp  )rV   rz   rà  r°   r  r  r”  r•  r  r  rr  rx   )r8   rØ  rÜ  rÉ  rŽ  rÄ  r
  r   r   r   Ú'test_reader_writer_close_error_on_closeI  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   b  rC  zABufferedRWPairTest.test_isatty.<locals>.SelectableIsAtty.__init__c                 S   s   | j S r:   )rß  r@   r   r   r   rà  f  rÐ  z?BufferedRWPairTest.test_isatty.<locals>.SelectableIsAtty.isattyN)r#   r$   r%   r9   rà  r   r   r   r   ÚSelectableIsAttya  s    rá  FT)rV   rà  rr  rà  rq  )r8   rá  rÄ  r   r   r   Útest_isatty`  s   zBufferedRWPairTest.test_isattyc                 C   s*   |   |  ¡ |  ¡ ¡}t |¡}d }d }d S r:   )rà  rV   rb  rc  )r8   Zbrwrc  r   r   r   Útest_weakref_clearingu  s   
z(BufferedRWPairTest.test_weakref_clearingN)r#   r$   r%   r&  r+  rå  rÅ  rÉ  rÌ  r.  rE  r2  r5  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ä  {  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ó   ghjkrG  ó   asra   s   ddds   eeerê  s   dddeeer   )rV   rà  r®   rZ   r=   rr  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 )NrF  r}  ra   rm  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   ro  Ã  ó   
 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   )r8  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 )NrF  ó   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"  rj  rˆ  r@   r   r   r   rj  ã  rn   zBufferedRandomTest.test_threadsc                 C   s(   dd„ }|   |¡ dd„ }|   |¡ d S )Nc                 S   ó   |   d¡ d S rv   )r8  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   r8  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ó  rD  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ù  rD  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   sF   ||ksJ ‚|   |¡ |  || ¡ |  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)rR  r   râ   rà  rr   r¯   r®   r  )r8   r  r   rO  Ú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_write2	  s   
z4BufferedRandomTest.test_truncate_after_read_or_writec                 C   rè  r:   )r"  rk  rˆ  r@   r   r   r   rk  :	  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   r0  ó   2r{  rö   ó   fó   4rª   s   1b2d3f4hrz  r/  r~  s   a2c)râ   rà  r=   r®   rZ   r°  r¯   rQ   r8  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_writeW	  s   


øÿ"ÿz2BufferedRandomTest.test_interleaved_readline_writeN)r#   r$   r%   rd  r°  r&  r+  rí  rð  rñ  rô  rú  rþ  r   rj  r  r  r
  r  r  r  r  rk  r  r  r  ro  r   r   r   r   ræ  ‚  s2    ræ  c                   @   s8   e Zd ZejZedddddd„ ƒZdd„ Zdd	„ Z	d
S )ÚCBufferedRandomTestTrr  rs  c                 C   rv  rw  )ræ  r&  rþ   rk  rV   rà  r°   r¾   rx  rœ   r9   ræ  r   r   r   r&  n	  ry  z$CBufferedRandomTest.test_constructorc                 C   rè  r:   )rq  rf  rÀ  r@   r   r   r   rf  z	  rn   z+CBufferedRandomTest.test_garbage_collectionc                 C   r}  )Nrá   r#  r~  r@   r   r   r   r  ~	  r€  z#CBufferedRandomTest.test_args_errorN)
r#   r$   r%   rŽ   rá   rà  r   r&  rf  r  r   r   r   r   r  k	  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   rV  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   )rO  Ú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Ó   )rO  r'  r   r²   )r8   rO  r'  r   r   r   Úgetstate±	  s   z#StatefulIncrementalDecoder.getstatec                 C   s:   |\}}t |ƒ| _t|dƒ\}}|dA |dA | _| _d S )NrÓ   rM   )r¯   r²   ÚdivmodrO  r'  )r8   Ústater²   rŽ   rO  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   Ú.)rO  Ú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   rO  éc   rM   r'  rë   ú-r,  )	r²   r-  rÅ  ÚintrO  r'  r2  r   r¯   )r8   r1  r   r   r   r.  Ì	  s     z'StatefulIncrementalDecoder.process_wordN)r   rÒ  )r#   r$   r%   rS   r9   r%  r#  r(  r+  r2  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œ  Úencoder2  ÚincrementalencoderÚstreamreaderÚstreamwriterÚincrementaldecoder)r  r6  r!  ÚlookupÚ	CodecInfor8  )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.
    ))rJ  Fza.b.c.d.)ó   oiabcdTúabcd.)s   oi...abcd...TrC  )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 )NrB  r:  rW   rM   rC  )Ú
test_casesr  r®   r2  )r8   r/  Úeofr1  Údr   r   r   r7  
  s   z+StatefulIncrementalDecoderTest.test_decoderN)r#   r$   r%   rS   rD  r7  r   r   r   r   rA  ë	  s    rA  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ë   )Útestdatar2  Ú
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ó   Ã©

rQ  rÃ   r)   r(   ú
rª  FT)r*   Úline_bufferingõ   Ã©
rD   rð  )râ   rÜ   rí   r9   r®   r*   rN  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°   rT  rã  rº  rœ   r.  rZ   r9   rV   r®   ©r8   r¾  r   r   r   r+  0
  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=   rr  r  r®   r°   rœ   rã  r*   rV  rN  Úwrite_throughrP  r   r   r   rå  D
  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â   r8  rÜ   rí   r$   rø  rã  rœ  Úmoder²   râ  )r8   r`  r   r¾  Úmodnamer   r   r   rù  X
  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ý  l
  s   ÿÿþ"üz%TextIOWrapperTest.test_recursive_reprc                 C   sx   |   ¡ }|  |d¡}| j|dddd}| d¡ |  | ¡ d¡ | d¡ |  | ¡ d	¡ | d
¡ |  | ¡ d¡ d S )NrQ  rÃ   Ú
T©r*   r«  rN  ÚXrW   zY
Zs   XY
ZzABs   XY
ZAB)râ   rß   rí   r=   r®   r  rP  r   r   r   Útest_line_bufferingv
  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 )NrQ  rÃ   rY  FrZ  zAB
CrW   T)rN  s   AB
CzDEF
Gs	   AB
CDEF
GÚHs
   AB
CDEF
GHZIJ)râ   rß   rí   r=   r®   r  ÚreconfigurerN  rP  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_ALLÚLANGÚLC_CTYPEFr  )ÚdictrÏ   ÚenvironÚlocaleÚ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   ro  ·
  rò  z8TextIOWrapperTest.test_device_encoding.<locals>.<lambda>re  r)   c                      rl  rv   )ZUINT_MAXr   rm  r   r   ro  ¹
  rò  )rn  râ   rE   r°   r¾   rí   r<   r   rm  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  rg  Ú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*   rV  r  zabc

Úreplaceu   abc
ï¿½
)râ   rí   r°   ÚUnicodeErrorrZ   r®   rq  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   rs  r  rY  )r*   rV  r«  u	   abcÃ¿def
s   abcdef
rt  s   abc?def
)râ   rí   r°   ru  r=   rr   r®   r  rq  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 ]q}t d |¡ |¡ƒ}dD ]b}tddƒD ]Z}|D ]U\}}	|  |  |¡|¡}
| j|
||d}|rqg }	 | d¡}|dkr^n|  t	|ƒd¡ | 
|| ¡  ¡ qTnt|ƒ}t||	ƒD ]
\}}|  ||¡ qz|  t	|ƒt	|	ƒ¡ q:q6q/q!d S )N)úunix
ú	windows
zos9úlast
Únonl)ry  zwindows
zos9
r{  r|  r:  rY  )ry  rz  z	os9last
r|  rM  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•   r8  rR  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ñ
  sF   



ûÿ
ûïÿÿý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:  rY  )zAAA
zBB B
zCCCDDDEEE
úFFF
ÚGGGrM  )zAAA
BB B
CCCDDDEEE
rŒ  r  r}  )zAAA
BB B
CCCzDDDzEEEz
FFFz
GGGrª  r   )
rt  r2  Ú
splitlinesrâ   rí   r®   r  rJ   rZ   r•   )r8   rH  rI  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:  rY  r}  rM  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@   ©rF  rg  r   r   rz   A  ó   z:TextIOWrapperTest.test_destructor.<locals>.MyBytesIO.closeNrÔ  r   r•  r   r   Ú	MyBytesIO@  s    r—  rë   r)   r®  rz  )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-  N  r1  zDTextIOWrapperTest.test_override_destructor.<locals>.MyTextIO.__del__c                    r2  r`   r3  r@   r/  r   r   rz   V  rn   zBTextIOWrapperTest.test_override_destructor.<locals>.MyTextIO.closec                    r2  r4  r5  r@   r/  r   r   rr   Y  rn   zBTextIOWrapperTest.test_override_destructor.<locals>.MyTextIO.flushr6  r   r7  rc   r   ÚMyTextIOM  r9  r˜  rë   r)   r;  )rí   râ   r   r>  r®   )r8   r˜  r   r¾  r   r7  r   rë  K  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ñ  rd  rò  r®   ró  ry   rô  r   r   r   rõ  b  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   ri  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_ioq  s:   


çÿzTextIOWrapperTest.test_basic_ioc                 C   s¼   |  d¡ | ¡  d}g }dD ]+}g }t|ƒD ]}| ||t|ƒ  ¡ qd |¡d }| | ¡ |f¡ | |¡ q|  d¡ g }		 | ¡ }
| ¡ }|sNn|	 |
|f¡ qC|  	|	|¡ d S )Nr   u	   sÃ¿à¿¿ï¿¿)r   rM   ra   r¼   r  rf   é   rš  r›  rœ  é>   r  rž  rŸ  rQ  r:  rY  )
rJ   rR   rR  r;   r   r•   rK   r=   rÈ   r®   )r8   r/   r¦  ÚsampleZwlinesr¯  ÚcharsrO  Ú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   r8  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Ä   r7  r)   rM   rf   N)r+   r   r¥   r=   rz   r-   rZ   rR  r   r®   rK   rJ   )r   Úmin_posr/   ZdecodedrO  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  r6  rA  rD  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)r~  r  r€  r  r‚  rƒ  r)   r   ra   )râ   rí   r=   rJ   r®   rZ   r  r8  )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   5  rB   z>TextIOWrapperTest.test_unreadable.<locals>.UnReadable.readableNrÆ  r   r   r   r   Ú
UnReadable4  r  rÄ  rÃ   r)   )râ   rí   r°   ry   rZ   )r8   rÄ  r  r   r   r   Útest_unreadable3  s   z!TextIOWrapperTest.test_unreadablec                 C   óD   | j |  d¡dd}d}	 | d¡}|sn||7 }q|  |d¡ d S )Ns   AA
BBrÃ   r)   r:  TrM   zAA
BB©rí   râ   rZ   r®   ©r8   r  Úreadsri  r   r   r   Útest_read_one_by_one:  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   rE  D  s   

z TextIOWrapperTest.test_readlinesc                 C   rÆ  )Ns‚   AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
BrÃ   r)   r:  Tr·  zAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
BrÇ  rÈ  r   r   r   Útest_read_by_chunkM  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   rg  rO   r  r   r   r   r¬  X  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;  rz  )rí   râ   r°   r±   rÉ   rÍ  r   r   r   r¯  h  s   z'TextIOWrapperTest.test_writelines_errorc                 C   sH   | j |  | j¡dd}d}	 | d¡}|sn||7 }q|  || j¡ d S )Nrë   r)   r:  TrM   )rí   râ   rH  rZ   r®   rI  rÈ  r   r   r   Útest_issue1395_1n  s   
üz"TextIOWrapperTest.test_issue1395_1c                 C   sN   | j |  | j¡dd}d|_d}	 | d¡}|sn||7 }q|  || j¡ d S )Nrë   r)   r  r:  ©rí   râ   rH  r-   rZ   r®   rI  rÈ  r   r   r   Útest_issue1395_2z  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â   rH  r-   rZ   rÈ   r®   rI  ©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â   rH  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â   rH  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   ƒ n1 s‚w   Y  qd S )	N©ú	utf-8-sigr~  r  rÂ   r)   ÚaaarÇ   r'  ÚxxxÚaaaxxx)r   r¥   r+   r=   rK   r®   rZ   r8  ©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   ƒ n1 spw   Y  qd S )NrÛ  rÂ   r)   rÝ  r¡  Zzzzr   ÚbbbrÇ   Zbbbzzz)	r   r¥   r+   r=   rK   rJ   r®   rZ   r8  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   ƒ n1 siw   Y  qd S )
NrÛ  rÂ   r)   rÝ  r'  r   rÞ  rÇ   rß  )	r   r¥   r+   r=   rJ   rË   r®   rZ   r8  )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   rt  rs  )r+   r   r¥   r®   rV  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Ô   r[  r\  )rë  r   r   r^  ã  s    ÿz8TextIOWrapperTest.test_threads_write.<locals>.<listcomp>rµ   r`  r)   rè  )rk   rl   r+   r   r¥   rR  r   re  ro   rp   rq   rZ   r®   r   )r8   rh  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   rn  ñ  s   z>TextIOWrapperTest.test_flush_error_on_close.<locals>.bad_flushr   rM   c                   S   r  r:   r   r   r   r   r   ro  û  rp  z=TextIOWrapperTest.test_flush_error_on_close.<locals>.<lambda>)rí   râ   rH  rr   r°   ry   rz   rq  rx   r²   rr  rÿ  r   rí  r   rx  ì  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   rn  ÿ  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   ro    rp  z=TextIOWrapperTest.test_close_error_on_close.<locals>.<lambda>c                   S   r  r:   r   r   r   r   r   ro    rp  )râ   rH  rz   rí   rr   r°   ry   r®   r•  rŠ   r  r  rr  rx   ©r8   r²   rn  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   rn    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   ro  #  rp  zKTextIOWrapperTest.test_nonnormalized_close_error_on_close.<locals>.<lambda>c                   S   r  r:   r   r   r   r   r   ro  $  rp  )râ   rH  rz   rí   rr   r°   r  r  r”  r•  r  r  rr  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â   rH  rz   r°   rœ   rr   rÍ  r   r   r   ry  &  s
   z"TextIOWrapperTest.test_multi_closec                 C   s<   | j |  | j¡dd}|  | j|j¡ |  | j|jd¡ d S )NrÃ   r)   r   )rí   rƒ   rH  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â   rH  r°   r.  r²   )r8   r  rO   r   r   r   r  2  s
   "ÿz*TextIOWrapperTest.test_readonly_attributesc                 C   sX   |   g d¢¡}| j|ddd}|  | d¡d¡ |  | ¡ d¡ |  t|ƒdd	g¡ d S )
N©rz  r‹  s   ghi
jkl
opq
rë   rY  rª  r  Zabcdzefghi
zjkl
zopq
)rV   rí   r®   rZ   rÈ   r3   ©r8   r`  r  r   r   r   Ú
test_rawio8  s
   zTextIOWrapperTest.test_rawioc                 C   sV   |   g d¢¡}| j|dddd}| d¡ | d¡ | d¡ |  d	 |j¡d
¡ d S )Nrï  rë   rY  T)r*   r«  rU  Ú1z23
4Ú5rW   s   123
45)rV   rí   r=   r®   r•   r5   rð  r   r   r   Útest_rawio_write_throughC  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Š   rs  )rd   Úflush_calledr   r   rr   R  ó   
zHTextIOWrapperTest.test_bufio_write_through.<locals>.BufferedWriter.flushc                    rõ  r?   )r;   rb   r=   rö  )rd   Úwrite_calledr   r   r=   U  rø  zHTextIOWrapperTest.test_bufio_write_through.<locals>.BufferedWriter.write)r#   r$   r%   rr   r=   rg   r   ©r÷  rù  rc   r   rß   Q  s    rß   r/  ra   rë   T)r*   rU  rW   r¸   rï  )
rß   râ   r   rí   r2  r=   rr  rq  r®   r  )r8   rß   r‚  r   rç  r‡  ré  r   rú  r   Útest_bufio_write_throughM  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ë   rY  rª  rò  T)rU  rW   r  Z23rÿ  FZ45r­  )	rV   rí   r=   r^  r®   rU  r•   r5   rr   rX  r   r   r   Útest_reconfigure_write_throughm  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È   rQ  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   aaaaaarY  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  r<  )r!  r=  r   rú  )r  r  r  )r  )r  r  r   Ú_make_very_illegal_wrapper­  s   
ÿ$þzJTextIOWrapperTest.test_illegal_decoder.<locals>._make_very_illegal_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()
            )Úiomodrs  ú-c)rŽ   r#   rj  r   )r8   rs  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_errorr2  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   rs  r  )r  rr  r®   r2  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  rS  r®   rZ   r2  )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   ï  rp  z5TextIOWrapperTest.test_issue22849.<locals>.F.readablec                 S   r>   r?   r   r@   r   r   r   rA   ð  rp  z5TextIOWrapperTest.test_issue22849.<locals>.F.writablec                 S   r>   r?   r   r@   r   r   r   rG   ñ  rp  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   ro  ù  rp  z3TextIOWrapperTest.test_issue22849.<locals>.<lambda>)ÚobjectrR  rí   rT  rK   )r8   r  rO  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
Úutf8rY  rª  rÃ   r)   ©r«  )r8  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ë   rY  rª  zfoo
rÜ  r)   rO  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?  rY  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   ro  +  rp  zGTextIOWrapperTest.test_reconfigure_write_non_seekable.<locals>.<lambda>rë   rY  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ë   rt  rY  r)   úLF
rM  r   r  )rV  úCRLF
rÃ   rª  r   r   zLF
CRLF
s	   LF
CRLF
)rí   râ   r^  r®   r*   rV  r=   rJ   rZ   râ  r  rÍ  r   r   r   Útest_reconfigure_defaults6  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ë   rY  r   zCR
r:  zCRs	   CRLF
EOFr}  zCRLF
s	   LF
CREOFzLF
CRs   CRCRLF
EOFrM  z	CRCRLF
zlinesep
r&  r'  r‘  zLF
LF
CRCRLF
)râ   rí   r^  r®   rÈ   r=   rÏ   r‘  râ  r  r2  )r8   r`  r  r  r   r   r   Útest_reconfigure_newlineM  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=   rQ  r   r   r   Útest_issue25862q  s   


z!TextIOWrapperTest.test_issue25862N)Tr#   r$   r%   r¦   r§   r&  r+  rT  rå  rù  rý  r\  r_  ÚunittestÚskipIfrþ   rˆ  Ú	utf8_moderk  r   r!  ro  rr  rv  rx  r‰  r  r”  r?  rë  rõ  r¨  r¤  r°  rµ  r¶  rð  r¿  rÂ  rÃ  rÅ  rÊ  rE  rÎ  r¬  r­  r¯  rÑ  rÓ  rÖ  r×  rØ  rÚ  rã  rå  ræ  rç  Ú
no_tracingrì  rx  r  r  ry  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   rG  
  sœ    	

	*/
	


 
(	$rG  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   r0  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 memoryviewrO  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 )NrL  rQ  rÃ   r)   rð  rª  )
râ   rÜ   rí   r°   rœ   r9   rZ   r*  rT  rã  rP  r   r   r   rz  ”  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  rb  rc  r   r>  rd  r+   r®   rZ   )r8   r‚  r   r¾  re  r/   r   r   r   rf  ž  s   



ø	"ÿz*CTextIOWrapperTest.test_garbage_collectionc                 C   sj   t dƒD ]*}|  |  ¡ |  ¡ ¡}| j|dd}|  |  ¡ |  ¡ ¡}| j|dd}||_||_qt ¡  d S )NrQ  rë   r)   )rR  rä   rV   rí   Zbuddyr   r>  )r8   rO  Ú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-   rQ  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    r=  rë   r)   r®  r¢  r  rM   r  Zghir‰  r·   )rV   rí   r-   r=   r®   r5   r°   rû  )r8   r=  rO   r¾  r   r<  r   Útest_internal_buffer_sizeÂ  s   

ÿ
z,CTextIOWrapperTest.test_internal_buffer_sizeN)
r#   r$   r%   rŽ   r  rz  rf  r:  r;  r>  r   r   r   r   r4    s    
r4  c                   @   s   e Zd ZeZdZdS )ÚPyTextIOWrapperTestr5  N)r#   r$   r%   r‘   rŽ   r  r   r   r   r   r?  Þ  s    r?  c                   @   s4   e Zd Zdd„ Zdd„ Zdd„ Zdd„ Zd	d
„ ZdS )ÚIncrementalNewlineDecoderTestc                    s  ‡ ‡fdd„}|ddƒ |ddƒ |ddƒ |ddƒ |ddƒ |ddƒ |ddƒ |ddƒ ˆj tˆ jd	d
d ˆ  ¡  |ddƒ |ddƒ |d	dd
d |ddd
d |ddƒ |ddƒ |ddƒ |ddƒ |ddƒ |ddƒ |ddƒ |ddƒ |ddƒ |ddƒ |ddƒ d S )Nc                    sJ   ˆ   ¡ }ˆ ˆ j| fi |¤Ž|¡ ˆ  |¡ ˆ ˆ j| fi |¤Ž|¡ d S r:   )r(  r®   r2  r+  )r   r–   rs  r*  ©Údecoderr8   r   r   Ú_check_decodeç  s   
zPIncrementalNewlineDecoderTest.check_newline_decoding_utf8.<locals>._check_decodes   è¢ˆu   è¢ˆó   èr:  ó   ¢ó   ˆrW   T)r0  r  rY  rŠ  r/  z
aó   
z

s   
as   è¢ˆ
r±  s   è¢ˆ)r°   ÚUnicodeDecodeErrorr2  r#  )r8   rB  rC  r   rA  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:   )r8  r;   r2  r   )r–   r   ©rB  ÚencoderrÄ  r   r   Ú_decode_bytewise  s   ÿzNIncrementalNewlineDecoderTest.check_newline_decoding.<locals>._decode_bytewisec                    s   | D ]
}ˆ  ˆ  |¡¡ qd S r:   )r;   r2  )r–   ri  )rB  rÄ  r   r   rL    s   ÿzabc
rY  z
abc)rY  rM  zabcr®  )r}  rY  rM  r:  zabc

abcabc
abcabc)r!  Úgetincrementalencoderr®   Únewlinesr•   r#  r8  r2  )r8   rB  r*   rL  r/  r   rJ  r   Úcheck_newline_decoding  s0   
z4IncrementalNewlineDecoderTest.check_newline_decodingc                 C   sp   d}|D ]}|ot  |¡ƒ }| j|dd}|  ||¡ qt  d¡ƒ }| j|dd}|  |¡ |  t|jd¡ d S )N)	NrÃ   r(   r~  r  r€  r  r‚  rƒ  T©Ú	translaterÃ   rD   )r!  ÚgetincrementaldecoderÚIncrementalNewlineDecoderrO  rI  r°   r±   r+  )r8   r†  r¦  rB  r   r   r   Útest_newline_decoder0  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®   rN  r2  )Údecr@   r   r   Ú_checkC  s
   z@IncrementalNewlineDecoderTest.test_newline_bytes.<locals>._checkFrP  T)rS  )r8   rV  rU  r   r@   r   Útest_newline_bytesA  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   rP  rG  z
)r!  rR  rS  rI  r®   r2  )r8   rQ  rB  r   r   r   Útest_translateN  s   z,IncrementalNewlineDecoderTest.test_translateN)r#   r$   r%   rI  rO  rT  rW  rX  r   r   r   r   r@  ã  s    *!r@  c                   @   s   e Zd Zejdd„ ƒZdS )ÚCIncrementalNewlineDecoderTestc                 C   sN   | j  | j ¡}|  t|jd¡ |  t|j¡ |  t|jd¡ |  t|j¡ d S )Nó   bar)r   r   )rS  r*  r°   rœ   r2  r(  r+  r#  )r8   Zuninitializedr   r   r   r+  Y  s   ÿz1CIncrementalNewlineDecoderTest.test_uninitializedN)r#   r$   r%   r   r!  r+  r   r   r   r   rY  X  s    rY  c                   @   r!   )ÚPyIncrementalNewlineDecoderTestNr"   r   r   r   r   r[  c  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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§   k  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³  rp  Úlowerrq  Ú
issubclassrT  r   r  )r8   rœ  r    r   r   r   Útest___all__n  s   
€øzMiscIOTest.test___all__c                 C   s„  | j tjddd}|  |jd¡ | ¡  t dtf¡ | 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ç  Fr[  )r+   r   r¥   r®   rV  rz   r   r<  r  rœ  r²   r`  rE   )r8   r/   Úgr   r   r   Útest_attributesy  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ÿ   rr  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 )NrV  rÂ   rÄ   rM   ©rV  rÆ   ra   r   r'   rÇ   r   r!  r   rÃ   r*   r8  r°  r#  r¿  rQ   r¹   rW   r:  )r+   r   r¥   rz   r°   rœ   rr   rE   rà  Ú__iter__r…  r8  rZ   r°  r¿  rQ   r¯   r¹   rÈ   r  rJ   rK   rR   r=   rÉ   r  )r8   rs  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&   rk  r:  rM   )	r”  rŸ   r   ri  rb  rc  r   r>  rd  )r8   rk  ri  r   re  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:   )rp  r@   r   r   r   Útest_abc_inheritanceö  s   zMiscIOTest.test_abc_inheritancec                 C   s   |   t¡ d S r:   )rp  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Š   rs  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 ro  )rt  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   r  rž  )rw  rU  ©Úfdsr   r   Úcleanup_fds  s   ÿ€ÿýz9MiscIOTest._check_warn_on_dealloc_fd.<locals>.cleanup_fdsrW  F)rÖ   rÏ   rÐ   rt  r   r¦  r+   )r8   rŠ   rs  rx  r'   rÂ   r   rv  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)   )ry  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   ƒ n1 sSw   Y  q3q d S )NrV  rÂ   rÄ   r   rh  r'   rÇ   r   r!  r   rÃ   r*   rM   )	rR  ÚpickleÚHIGHEST_PROTOCOLr+   r   r¥   r°   r±   Údumps)r8   rs  Ú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_bigbuf8  rÞ   z*MiscIOTest.test_nonblock_pipe_write_bigbufc                 C   r  )Nr#  r€  r@   r   r   r   Ú!test_nonblock_pipe_write_smallbuf;  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 n6 | 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)rV  rW  rÆ   rÄ   )rö  éI   i–  r   é   éa   rM   ra   rš   s   BLOCKEDrW   )rÏ   rÐ   r„  r+   r   r;   r=   rŸ   r®   rŠ   r  ÚEAGAINr¢  rZ   rr   Úiterr•   rq  rx   )r8   r$  ÚsentZreceivedr'   rÂ   ZrfZwfrf  rO  rÚ  rU  r   r   r   r  >  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_failr  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Ç   rM  rÀ   r   r   r   Útest_create_writesx  s   ÿ"ÿzMiscIOTest.test_create_writesc                 C   s   | j t| jtjddd d S )Nzrwax+rÃ   r)   rX  r@   r   r   r   Útest_open_allargs  s   zMiscIOTest.test_open_allargsc                 C   sn   | j j}t}d}t d|› d|›d|›d|›d|›d|›d|›d	|›d
¡}tddd|ƒ}|  |jd|¡ d S )NzBoom, Shaka Laka, Boom!z)
            import sys
            from zC import open, TextIOWrapper

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

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

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

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

            sys.exit(10)
        ú-XÚdevr  r¸   )rŽ   r#   r,   ÚtextwrapÚdedentr   r®   r  )r8   Úmodrá  r©  r  Úprocr   r   r   Útest_check_encoding_errorsƒ  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   rq  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§   rb  re  rg  rj  rl  rn  rp  rq  rr  rt  ru  ry  rz  r  r‚  rƒ  r+  Z
skipUnlessr…  rÏ   r  rŒ  rŽ  r  r–  r˜  r   r!  r   Zignore_warningsr  r›  r   r   r   r   r\  i  s<    1ÿ
2-
r\  c                   @   s0   e Zd ZeZdd„ Zdd„ Zdd„ Zdd„ Zd	S )
ÚCMiscIOTestc                 C   s6   G dd„ d| j jƒ}|ƒ }tdƒ}|  t|j|¡ d S )Nc                   @   s   e Zd Zddd„ZdS )z<CMiscIOTest.test_readinto_buffer_overflow.<locals>.BadReaderrš   c                 S   s   dd S )Nr·   i@B r   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
  r2  r  rø  rr  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Ò  t  ¡  g ‰‡ ‡fdd„}tj|d}d|_t ¡ \‰ }d|d< |t jt|ƒ d  }z“| j	j
|fi |¤Ž}ttdƒrRt 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  :  rD  z2SignalsTest.check_interrupted_write.<locals>._readrZ  TFrW  rM   Úpthread_sigmaskr   ra   N)r   r>  rk   r×   ÚdaemonrÏ   rÐ   ÚPIPE_MAX_SIZEr   rŽ   r+   r…  r¬  rµ  Ú	SIG_BLOCKr­  rØ   ÚSIG_UNBLOCKÚalarmr°   r#  r=   r•   r;   rZ   r®   rz   ry   r  rž  )
r8   Úitemr   Úfdopen_kwargsr  r¾  rÂ   Ú
large_dataÚwiorU  r   r³  r   Úcheck_interrupted_write  sX   




ÿ
"

ÿ€ÿ
ù
ÿ€ÿz#SignalsTest.check_interrupted_writec                 C   s   | j ddddd d S )Nr  rÄ   r   rh  ©r¿  r@   r   r   r   Ú!test_interrupted_write_unbufferedi  r   z-SignalsTest.test_interrupted_write_unbufferedc                 C   s   | j dddd d S ©Nr  rÄ   ©rV  rÀ  r@   r   r   r   Útest_interrupted_write_bufferedl  r°  z+SignalsTest.test_interrupted_write_bufferedc                 C   s   | j ddddd d S )NÚxyr  rÂ   rë   ©rV  r*   rÀ  r@   r   r   r   Útest_interrupted_write_texto  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_alarmt  s   
z3SignalsTest.check_reentrant_write.<locals>.on_alarmrM   rÓ   zreentrant callr   )r¬  r­  rÏ   rÐ   rŽ   r+   rº  r°   r#  rû  rR  r=   rr   rZ   r   r•  rú   rq  r”  r   rz   )	r8   r   r¼  rÉ  r'   rÂ   r—  rO  rÌ   r   rÈ  r   Úcheck_reentrant_writer  s6   


ûÿ

û

þz!SignalsTest.check_reentrant_writec                 C   ó   | j ddd d S rÂ  ©rÊ  r@   r   r   r   Útest_reentrant_write_bufferedŽ  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_text‘  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.FrW  c                    s   t  ˆ d¡ d S )NrZ  )rÏ   r=   ©r±  r²  ©rÂ   r   r   Úalarm_handlerš  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   r2  r¼  r'   rÒ  Zrior   rÑ  r   Úcheck_interrupted_read_retry”  s"   



ý
z(SignalsTest.check_interrupted_read_retryc                 C   s   | j dd„ dd d S )Nc                 S   s
   |   d¡S )Nr?  )r2  r  r   r   r   ro  ­  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   ro  ±  rp  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.ÚselectFrW  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Ì   )r^  r'   r´  r×  Úwrite_finishedr   r   r  Æ  s   
þÿ€þz8SignalsTest.check_interrupted_write_retry.<locals>._readrZ  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   r\  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•   rd  Úsumrz   ry   r  rž  )r8   r»  r¼  rf  rÂ   r  rÛ  r½  r¾  r£  rU  r   )rÚ  r^  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$    M
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¡ri| "¡ D ]
\}}t#|||ƒ q]qQ|j  !d	¡r~| "¡ D ]
\}}t#|||ƒ qsqQt$ %d
d„ |D ƒ¡}	|	S )NrS  c                 S   ó   i | ]}|t t|ƒ“qS r   )r³  rŽ   ©r]  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 )rk  N©r#   r\  ©Zglobsr   r   rÜ  !  ó   €" zload_tests.<locals>.<genexpr>c                 3   rè  )ÚPyNré  r\  rê  r   r   rÜ  "  rë  rk  rì  c                 S   s   g | ]}t  |¡‘qS r   )r+  Z	makeSuite)r]  r  r   r   r   r^  +  rÍ  zload_tests.<locals>.<listcomp>)&rÓ  rÖ  r×  rq  r‡  rÀ  rÁ  rä  rå  r  r  rA  rY  r[  r4  r?  rœ  r¨  rã  rä  rV   r^   r}   ru   r’   rƒ   r1   rj   rŽ   r_  Úglobalsri  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__)wrS   r®  r   r  re  rÏ   r{  rb  r¬  rþ   r’  rk   rp   r+  r  rb  Úcollectionsr   r   Ú	itertoolsr   r   r  r   Ztest.support.script_helperr   r   r	   Ztest.supportr
   r   r   r   r   Ztest.support.os_helperr   r!  rŽ   Z_pyior‘   r   ÚImportErrorr   Z	Structurer   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"  rq  r‡  rˆ  rÀ  rÁ  rÂ  rä  rå  ræ  r  r  r"  r  r@  rA  rG  r  r  r4  r?  r@  rY  r[  r\  rœ  r¨  r,  rœ  r«  rã  rä  rï  r#   Úmainr   r   r   r   Ú<module>   sü    ÿ8
	0     E .  *C  (0 Q jN
+        o
	Nu  i< o	
#ÿ