Server : LiteSpeed
System : Linux server51.dnsbootclub.com 4.18.0-553.62.1.lve.el8.x86_64 #1 SMP Mon Jul 21 17:50:35 UTC 2025 x86_64
User : nandedex ( 1060)
PHP Version : 8.1.33
Disable Function : NONE
Directory :  /opt/cppython/lib/python3.8/test/__pycache__/

Upload File :
current_dir [ Writeable ] document_root [ Writeable ]


Current File : //opt/cppython/lib/python3.8/test/__pycache__/test_io.cpython-38.pyc
U

>��gŏ�@s�dZddlZddlZddlZddlZddlZddlZddlZddlZddl	Z	ddl
Z
ddlZddlZddl
Z
ddlZddlZddlmZmZddlmZmZddlmZddlmZmZddlmZddlZddlZddlZ zddl!Z!Wne"k
�rdd	�Z#YnXd
d	�Z#Gdd�de!j$�Z%e
�&d
��p0dZ'e
�&d��p@dZ(de'k�pRde(kZ)e*e	d��pfe	j+j,Z-dd�Z.Gdd�d�Z/Gdd�de/ej0�Z1Gdd�de/e j0�Z2Gdd�de/�Z3Gdd�de3ej0�Z4Gdd �d e3e j0�Z5Gd!d"�d"e3�Z6Gd#d$�d$e6ej0�Z7Gd%d&�d&e6e j0�Z8Gd'd(�d(e3�Z9Gd)d*�d*e9ej0�Z:Gd+d,�d,e9e j0�Z;Gd-d.�d.e3�Z<Gd/d0�d0e<ej0�Z=Gd1d2�d2e<e j0�Z>Gd3d4�d4�Z?Gd5d6�d6e?ej@�ZAGd7d8�d8e?e j@�ZBGd9d:�d:�ZCGd;d<�d<eCej@�ZDGd=d>�d>eCe j@�ZEGd?d@�d@�ZFGdAdB�dBeFej0�ZGGdCdD�dDeFe j0�ZHGdEdF�dFe
jI�ZJGdGdH�dHeJ�ZKGdIdJ�dJeJ�ZLejMGdKdL�dLe
jI��ZNGdMdN�dN�ZOGdOdP�dP�ZPGdQdR�dRe
jIeO�ZQGdSdT�dTeQeP�ZRGdUdV�dVeQ�ZSGdWdX�dXe
jIeO�ZTGdYdZ�dZeTeP�ZUGd[d\�d\eT�ZVGd]d^�d^e
jI�ZWGd_d`�d`eW�ZXGdadb�dbeW�ZYGdcdd�ddeQeT�ZZGdedf�dfeZeP�Z[Gdgdh�dheZ�Z\Gdidj�djej]�Z^e�_e^j`�Gdkdl�dle
jI�ZaGdmdn�dne
jI�ZbGdodp�dpej@�Zcdqdr�ZdGdsdt�dteb�ZeGdudv�dveb�ZfGdwdx�dxe
jI�ZgGdydz�dzeg�ZhGd{d|�d|eg�ZiGd}d~�d~e
jI�ZjGdd��d�ej�ZkGd�d��d�ej�Zle
�mejnd�kd��Gd�d��d�e
jI��ZoGd�d��d�eo�ZpGd�d��d�eo�Zqd�d��Zresd�k�r�e
�t�dS)�zUnit tests for the io module.�N)�deque�UserList)�cycle�count)�support)�assert_python_ok�run_python_until_end)�FakePathcOst�dt||��S)N�b)�array�bytes)�pos�kw�r�+/opt/cppython/lib/python3.8/test/test_io.py�	byteslike2srcOs:t||�}t�}t�|t|��|t|��d�dd�<|S)z?Create a bytes-like object having no string or sequence methods�BN)r�EmptyStruct�ctypesZresize�len�
memoryview�cast)r
r�data�objrrrr5s

c@seZdZdS)rN��__name__�
__module__�__qualname__rrrrr<srZCFLAGS�ZCONFIG_ARGSz-fsanitize=memoryz--with-memory-sanitizerZgettotalrefcountc
Cs,ttddd��}|jW5QR�SQRXdS)z(Get the default TextIOWrapper chunk size�r�latin-1��encodingN)�open�__file__�_CHUNK_SIZE��frrr�_default_chunk_sizeKsr(c@sdeZdZdZddd�Zdd�Zdd�Zd	d
�Zdd�Zd
d�Z	dd�Z
dd�Zdd�Zddd�Z
dS)�MockRawIOWithoutReadzmA RawIO implementation without read(), so as to exercise the default
    RawIO.read() which calls readinto().rcCs t|�|_g|_d|_d|_dS�Nr)�list�_read_stack�_write_stack�_reads�_extraneous_reads)�selfZ
read_stackrrr�__init__Us
zMockRawIOWithoutRead.__init__cCs|j�t|��t|�S�N)r-�appendrr�r0r
rrr�write[szMockRawIOWithoutRead.writecCsdS�NTr�r0rrr�writable_szMockRawIOWithoutRead.writablecCsdS�N�*rr7rrr�filenobszMockRawIOWithoutRead.filenocCsdSr6rr7rrr�readableeszMockRawIOWithoutRead.readablecCsdSr6rr7rrr�seekablehszMockRawIOWithoutRead.seekablecCsdSr*r�r0r
�whencerrr�seekkszMockRawIOWithoutRead.seekcCsdSr*rr7rrr�tellnszMockRawIOWithoutRead.tellcCs�|jd7_t|�}z|jd}Wn$tk
rH|jd7_YdSX|dkr^|jd=dSt|�}t|�|kr�|jd=||d|�<|S|d|�|dd�<||d�|jd<|SdS�N�r)r.rr,�
IndexErrorr/)r0�bufZmax_lenr�nrrr�readintoqs$zMockRawIOWithoutRead.readintoNcCs|Sr2r)r0r
rrr�truncate�szMockRawIOWithoutRead.truncate)r)N)rrr�__doc__r1r5r8r;r<r=r@rArGrHrrrrr)Qs
r)c@seZdZdS)�CMockRawIOWithoutReadNrrrrrrJ�srJc@seZdZdS)�PyMockRawIOWithoutReadNrrrrrrK�srKc@seZdZddd�ZdS)�	MockRawIONcCs>|jd7_z|j�d�WS|jd7_YdSXdS)NrCr�)r.r,�popr/�r0rFrrr�read�szMockRawIO.read)N�rrrrPrrrrrL�srLc@seZdZdS)�
CMockRawIONrrrrrrR�srRc@seZdZdS)�PyMockRawIONrrrrrrS�srScsFeZdZ�fdd�Zd�fdd�	Zdd�Zdd	�Z�fd
d�Z�ZS)
�MisbehavedRawIOcst��|�dS�N�)�superr5r4��	__class__rrr5�szMisbehavedRawIO.writeNcst��|�dSrU)rWrPrOrXrrrP�szMisbehavedRawIO.readcCsdS)Ni����rr>rrrr@�szMisbehavedRawIO.seekcCsdS)Ni8���rr7rrrrA�szMisbehavedRawIO.tellcst��|�t|�dS)N�)rWrGr)r0rErXrrrG�szMisbehavedRawIO.readinto)N)	rrrr5rPr@rArG�
__classcell__rrrXrrT�s
rTc@seZdZdS)�CMisbehavedRawIONrrrrrr\�sr\c@seZdZdS)�PyMisbehavedRawIONrrrrrr]�sr]cs$eZdZ�fdd�Zdd�Z�ZS)�SlowFlushRawIOcst���t��|_dSr2)rWr1�	threading�Event�in_flushr7rXrrr1�s
zSlowFlushRawIO.__init__cCs|j��t�d�dS)Ng�?)ra�set�time�sleepr7rrr�flush�s
zSlowFlushRawIO.flush)rrrr1rer[rrrXrr^�sr^c@seZdZdS)�CSlowFlushRawIONrrrrrrf�srfc@seZdZdS)�PySlowFlushRawIONrrrrrrg�srgc@seZdZdZdd�ZdS)�CloseFailureIOrcCs|jsd|_t�dS�NrC��closed�OSErrorr7rrr�close�szCloseFailureIO.closeN)rrrrkrmrrrrrh�srhc@seZdZdS)�CCloseFailureIONrrrrrrn�srnc@seZdZdS)�PyCloseFailureIONrrrrrro�srocs6eZdZ�fdd�Zd�fdd�	Z�fdd�Z�ZS)	�
MockFileIOcsg|_t��|�dSr2)�read_historyrWr1�r0rrXrrr1�szMockFileIO.__init__Ncs,t��|�}|j�|dkrdnt|��|Sr2)rWrPrqr3r)r0rF�resrXrrrP�szMockFileIO.readcst��|�}|j�|�|Sr2)rWrGrqr3)r0r
rsrXrrrG�szMockFileIO.readinto)N)rrrr1rPrGr[rrrXrrp�srpc@seZdZdS)�CMockFileIONrrrrrrt�srtc@seZdZdS)�PyMockFileIONrrrrrru�sruc@s,eZdZdd�Zdd�Zdd�Zdd�Zd	S)
�MockUnseekableIOcCsdS�NFrr7rrrr=�szMockUnseekableIO.seekablecGs|�d��dS�Nznot seekable��UnsupportedOperation�r0�argsrrrr@�szMockUnseekableIO.seekcGs|�d��dSrxryr{rrrrA�szMockUnseekableIO.tellcGs|�d��dSrxryr{rrrrH�szMockUnseekableIO.truncateN)rrrr=r@rArHrrrrrv�srvc@seZdZejZdS)�CMockUnseekableION)rrr�iorzrrrrr}�sr}c@seZdZejZdS)�PyMockUnseekableION)rrr�pyiorzrrrrr�src@sNeZdZdd�Zdd�Zdd�Zdd�Zd	d
�Zddd
�Zdd�Z	dd�Z
dS)�MockNonBlockWriterIOcCsg|_d|_dSr2)r-�
_blocker_charr7rrrr1szMockNonBlockWriterIO.__init__cCsd�|j�}g|jdd�<|S)NrM)�joinr-)r0�srrr�pop_written	sz MockNonBlockWriterIO.pop_writtencCs
||_dS)z'Block when a given char is encountered.N)r�)r0�charrrr�block_onszMockNonBlockWriterIO.block_oncCsdSr6rr7rrrr<szMockNonBlockWriterIO.readablecCsdSr6rr7rrrr=szMockNonBlockWriterIO.seekablercCsdSr*rr>rrrr@szMockNonBlockWriterIO.seekcCsdSr6rr7rrrr8szMockNonBlockWriterIO.writablecCsvt|�}d}|jrbz|�|j�}Wntk
r6Yn,X|dkrX|j�|d|��|Sd|_dS|j�|�t|�S)N���r)rr��index�
ValueErrorr-r3r)r0r
rFrrrr5szMockNonBlockWriterIO.writeN)r)rrrr1r�r�r<r=r@r8r5rrrrr�s
r�c@seZdZejZdS)�CMockNonBlockWriterION)rrrr~�BlockingIOErrorrrrrr�3sr�c@seZdZejZdS)�PyMockNonBlockWriterION)rrrr�r�rrrrr�6sr�c@s�eZdZdd�Zdd�Zdd�Zdbdd	�Zd
Zdd�Zd
d�Z	dd�Z
dd�Zdd�Zdd�Z
dd�Zdd�Zdd�Zdd�Zdd �Zd!d"�Zd#d$�Zd%d&�Zd'd(�Zd)d*�Zd+d,�Zd-d.�Zd/d0�Zd1d2�Zd3d4�Zd5d6�Zd7d8�Zd9d:�Zd;d<�Z d=d>�Z!d?d@�Z"dAdB�Z#dCdD�Z$dEdF�Z%dGdH�Z&dIdJ�Z'dKdL�Z(dMdN�Z)dOdP�Z*dQdR�Z+dSdT�Z,dUdV�Z-dWdX�Z.dYdZ�Z/d[d\�Z0d]d^�Z1d_d`�Z2daS)c�IOTestcCst�tj�dSr2�r�unlink�TESTFNr7rrr�setUp<szIOTest.setUpcCst�tj�dSr2r�r7rrr�tearDown?szIOTest.tearDowncCsD|�|�d�d�|�d�|�|��d�|�d�|�|�d�d�|�|�d�d�|�|�d�d�|�|��d�|�|�dd�d�|�|��d�td�}|�|�|�d	�d
|dd�<|�|�d�d�|�|�d�d�|�|�dd�d
�|�|��d
�|�|�d�d�|�|��d
�|�t|jd�dS)Nsblah.rZrsHello.�r�rCs	 world


�	s	*********�hrV�
��)�assertEqualr5rHrAr@�	bytearray�assertRaises�	TypeError)r0r'�bufferrrr�	write_opsBs(

zIOTest.write_opsFcCs�|�d�}|�|d�t|�}|�|�|�d�|�t|�d�td�}|�|�|�d�|�t|�d�|�|dd�d�|�|�d�d�|�|�d�d�|�|�d	�d
�|�|�td��d�|�|�dd�d
�|�|�d�d�|�|�d�d
�|�|�t��d�|�|�dd	�d�|�|�d�d�|�|��d�|�	t
|jd�|�r�|�d�|�|��d�|�d
�|�|��d�|�|��d
�|�d�td�}|�|�|�d�|�t|�d�dS)NrZshellos worlrV�d
r��hello world
rCrM�xi����r�sworld�
r�sworld
)rPr�rrGrr�rr@rAr�r��	readinto1)r0r'Zbufferedrrrr�read_opsZs>



zIOTest.read_opslc	Csj|��st�|��st�z|�|�|j�|j�Wn"ttfk
rT|�d�YnX|�|�	�|j�|�|�
d�d�|�|�	�|jd�|�|�dd�|jd�|�|��|jd�|�|�	�|jd�|�|�dd�|jd�|�|�|jd�|jd�|�|�	�|jd�|�|�dd�|jd�|�|�dd�|j�|�|�d�d�dS)	Nzno largefile support�xxx�r�rCrVrr�)
r<�AssertionErrorr8r�r@�LARGE�
OverflowErrorr��skipTestrAr5rHrP�r0r'rrr�large_file_ops}s$zIOTest.large_file_opsc
Csd|j}dD]:}|�tj|��"}|�||j�|�||j�W5QRXq
|jtjddd��"}|�||j�|�||j�W5QRX|jtjddd��(}|�||jd�|�||jdg�W5QRX|�tjd��(}|�||jd�|�||jdg�W5QRX|�tjd��P}|�||jd	�|�||jd
g�|�||j	d|j
�|�||j	d|j�W5QRXdS)
N)�w�wbr�r��	buffering�rbsblahsblah
rZblahzblah
rCr�)rzr#rr�r�rP�readliner5�
writelinesr@�SEEK_CUR�SEEK_END)r0�exc�mode�fprrr�test_invalid_operations�s&zIOTest.test_invalid_operationscs��fdd�}�fdd�}�fdd�}�fdd�}�fd	d
�}�fdd�}�fd
d�}�fdd�}|df|df|df|df|df|df|df|df�jdf�jdff
}	|	D�]�\}
}��|
����|
����}d|k}
��|��|
�d|k}��|��|�t|�j��rd}n$t|�j�j	f��r(d}n
��
d�d|k�rF|��n��t
|j�|
�rn|�d�|��n��t
|jd���t
|j�|�r�|�|�n��t
|j|�tj�d��r�|
||fk�r�W5QR�W5QR�q�d|k}��|��|�|�r|��|�d�n��t
|j���t
|jd�|�rP|�rP|��|�d�n��t
|j���t
|jd�W5QRXW5QRXq�dS)Ncs"t��\}}t�|���|d�S)Nr)�os�piperm�FileIO)rr�r7rr�pipe_reader�s
z3IOTest.test_optional_abilities.<locals>.pipe_readercsNt��\}}��tj|�tjtj|dfd�}|����|j���	|d�S)N�d��targetr|r�)
r�r��
addCleanuprmr_�ThreadrP�startr�r�)rr��threadr7rr�pipe_writer�sz3IOTest.test_optional_abilities.<locals>.pipe_writercs������Sr2)�BufferedReaderrvrr7rr�buffered_reader�sz7IOTest.test_optional_abilities.<locals>.buffered_readercs������Sr2)�BufferedWriterrvrr7rr�buffered_writer�sz7IOTest.test_optional_abilities.<locals>.buffered_writercs������Sr2)�BufferedRandom�BytesIOrr7rr�buffered_random�sz7IOTest.test_optional_abilities.<locals>.buffered_randomcs���������Sr2)�BufferedRWPairrvrr7rr�buffered_rw_pair�s
�z8IOTest.test_optional_abilities.<locals>.buffered_rw_paircs$G�fdd�d�j�}��|�d�S)NcseZdZ�jjZ�jjZdS)zMIOTest.test_optional_abilities.<locals>.text_reader.<locals>.UnseekableReaderN)rrr�BufferedIOBaser8r5rr7rr�UnseekableReader�sr��ascii�rv�
TextIOWrapper)r�r7rr�text_reader�sz3IOTest.test_optional_abilities.<locals>.text_readercs$G�fdd�d�j�}��|�d�S)NcseZdZ�jjZ�jjZdS)zMIOTest.test_optional_abilities.<locals>.text_writer.<locals>.UnseekableWriterN)rrrr�r<rPrr7rr�UnseekableWriter�sr�r�r�)r�r7rr�text_writer�sz3IOTest.test_optional_abilities.<locals>.text_writer�fr�fwrr�Zrws�rw�3�3zUnknown base classr'rC�winr�r)r��StringIO�subTestr�r<r8�
isinstance�
TextIOBaser��	RawIOBase�failr;r�rlrPr5�sys�platform�
startswithr=rAr@rH)r0r�r�r�r�r�r�r�r��tests�testZ	abilitiesrr<r8rr=rr7r�test_optional_abilities�st	�




�zIOTest.test_optional_abilitiesc	CsVd}|�t|j|d�t|d�}t���$t�dt�|�t|j|d�W5QRXdS)Nzfoobarr�r��ignore)r�r�r#r�warnings�catch_warnings�simplefilter�DeprecationWarning)r0Zfn_with_NULZbytes_fnrrr�test_open_handles_NUL_charss

z"IOTest.test_open_handles_NUL_charsc	Cs�|jtjddd��@}|�|��d�|�|��d�|�|��d�|�|�W5QRX|jtjddd��@}|�|��d�|�|��d�|�|��d�|�|�W5QRXdS)Nr�rr�FTr��	r#rr�r�r<r8r=r�r�r�rrr�test_raw_file_ioszIOTest.test_raw_file_ioc	Cs�|�tjd��@}|�|��d�|�|��d�|�|��d�|�|�W5QRX|�tjd��B}|�|��d�|�|��d�|�|��d�|�|d�W5QRXdS)Nr�FTr�r�r�rrr�test_buffered_file_io%szIOTest.test_buffered_file_ioc	Cs�|�tjd��}|�d�W5QRX|�tjd��~}|�|��d�|�|�d�d�|�|�d�d�|�|�d	�d
�|�|��d�|�|�d�d�|�t|jd
�W5QRX|�tjd��}|�t|jd
�W5QRXdS)Nr�s"abc
def
xyzzy
foobar
another liner��abc
r��def
rV�xy�szzy
sfoobar
sanother lineg333333@r)r#rr�r5r�r�r�r�r�rrr�
test_readline1szIOTest.test_readlinecCs*Gdd�d|j�}|�ttft|��dS)Nc@seZdZdd�ZdS)z+IOTest.test_readline_nonsizeable.<locals>.RcSsdSr2rr7rrrr�Csz4IOTest.test_readline_nonsizeable.<locals>.R.readlineN)rrrr�rrrr�RBsr�)�IOBaser�r��
StopIteration�next�r0r�rrr�test_readline_nonsizeable?sz IOTest.test_readline_nonsizeablecCs(Gdd�d|j�}|�t|�jd�dS)Nc@seZdZdd�ZdS)z'IOTest.test_next_nonsizeable.<locals>.RcSsdSr2rr7rrr�__next__Ksz0IOTest.test_next_nonsizeable.<locals>.R.__next__N)rrrr�rrrrr�Jsr�rC)r�r�r��	readlinesr�rrr�test_next_nonsizeableGszIOTest.test_next_nonsizeablecCs@|��}|�|�|��}|�|d�|�|�}|�|d�dS)Nr�T)r�r��getvaluer�r�)r0r'rrrr�test_raw_bytes_ioOs

zIOTest.test_raw_bytes_ioc	Cs|tjdd�dkstjdkr.t�dd|j�|�tjdd��}|�|�W5QRX|�tjd��}|�|�W5QRXdS)Nr�r��darwinZ	largefilez-test requires %s bytes and a long time to run�w+br)r�r�rZrequiresr�r#r�r�r�rrr�test_large_file_opsWs�zIOTest.test_large_file_opsc
Cs�dD]�}d}|�tjd|��}|�d�W5QRX|�|jd�d}z(|�tjd|��}ddW5QRXWn"tk
r�|�|jd�YqX|�d�qdS)N)rr�r�r�TrCrz1/0 didn't raise an exception)r#rr�r5r�rk�ZeroDivisionErrorr�)r0�bufsizer'rrr�test_with_opendszIOTest.test_with_openc	Cs�|�tjd��}|�d�W5QRX|jtjddd��}|�|��d�W5QRX|�tjd��}|�|��d�W5QRX|�tjd��}|�|��d�W5QRXdS)Nr�r��abrr�r��a)r#rr�r5r�rA�
assertGreaterr�rrr�test_append_mode_telltszIOTest.test_append_mode_tellc
s�g�G�fdd�d|j�}t�dtf��b|tjd�}|�d�~t��|��dddg�|�tjd	��}|�|�	�d�W5QRXW5QRXdS)
Ncs:eZdZ��fdd�Z��fdd�Z��fdd�Z�ZS)z(IOTest.test_destructor.<locals>.MyFileIOcs6��d�zt�j}Wntk
r*YnX|�dSri�r3rW�__del__�AttributeErrorr��rY�recordrrr�s
z0IOTest.test_destructor.<locals>.MyFileIO.__del__cs��d�t���dSrU�r3rWrmr7rrrrm�s
z.IOTest.test_destructor.<locals>.MyFileIO.closecs��d�t���dS�Nr��r3rWrer7rrrre�s
z.IOTest.test_destructor.<locals>.MyFileIO.flush�rrrrrmrer[r�rrXr�MyFileIO�srrr�r�rCrVr�r�)
r�r�check_warnings�ResourceWarningr�r5�
gc_collectr�r#rP)r0rr'rrr�test_destructor~s
zIOTest.test_destructorcs>g�G�fdd�d|�}|�}~t��|��dddg�dS)NcsBeZdZdd�Z��fdd�Z��fdd�Z��fdd�Z�ZS)	z+IOTest._check_base_destructor.<locals>.MyIOcSsd|_d|_d|_dS)NrCrVr�)�on_del�on_close�on_flushr7rrrr1�sz4IOTest._check_base_destructor.<locals>.MyIO.__init__cs8��|j�zt�j}Wntk
r,YnX|�dSr2)r3rrWrrr�rrrr�sz3IOTest._check_base_destructor.<locals>.MyIO.__del__cs��|j�t���dSr2)r3rrWrmr7rrrrm�sz1IOTest._check_base_destructor.<locals>.MyIO.closecs��|j�t���dSr2)r3rrWrer7rrrre�sz1IOTest._check_base_destructor.<locals>.MyIO.flush)rrrr1rrmrer[rrrXr�MyIO�sr rCrVr�)rrr�)r0�baser r'rrr�_check_base_destructor�szIOTest._check_base_destructorcCs|�|j�dSr2)r"r�r7rrr�test_IOBase_destructor�szIOTest.test_IOBase_destructorcCs|�|j�dSr2)r"r�r7rrr�test_RawIOBase_destructor�sz IOTest.test_RawIOBase_destructorcCs|�|j�dSr2)r"r�r7rrr�test_BufferedIOBase_destructor�sz%IOTest.test_BufferedIOBase_destructorcCs|�|j�dSr2)r"r�r7rrr�test_TextIOBase_destructor�sz!IOTest.test_TextIOBase_destructorc	CsR|�tjd��}|�d�W5QRX|�tjd��}|�|��d�W5QRXdS)Nr�r�r��r#rr�r5r�rPr�rrr�test_close_flushes�szIOTest.test_close_flushescs�t�dtd���t��������fdd�}|����|��tjd��|����	���|��
��	���|����	���	���dS)N�ir�c	s2|�$��|�����|��f�W5QRXdSr2)r�r5r�r&�rrFr0rr�check�sz'IOTest.test_array_writes.<locals>.checkr�)r�ranger�tobytesr�r�rr�r�rLr�r�)r0r+rr*r�test_array_writes�szIOTest.test_array_writescCs|jt|jtjddd�dS)Nr�F��closefd�r�r�r#rr�r7rrr�test_closefd�s�zIOTest.test_closefdc	Cs�|�tjd��}|�d�W5QRX|�tjd��J}|j|��ddd�}|�|��d�|�d�|��|�	t
|j�W5QRX|�tjd��N}|j|��ddd�}|�|��dd�d	�|��|�	t
|jtd
��W5QRXdS)Nr��egg
rFr/rr�r�seggrC)
r#rr�r5r;r�rPr@rmr�r�rGr��r0r'�filerrr�test_read_closed�s
zIOTest.test_read_closedcCs|jt|jtjddd�dS)NrFr/r1r7rrr�test_no_closefd_with_filename�sz$IOTest.test_no_closefd_with_filenamec	Csz|�tjd��}|�d�W5QRX|�tjd��>}|�|jjjd�|j|��ddd�}|�|jjjd�W5QRXdS)Nr�segg
rTFr/)	r#rr�r5r�r��rawr0r;r4rrr�test_closefd_attr�szIOTest.test_closefd_attrc	Cs�t�dtf��8|�tjd�}|�d�||_t�|�}~t�	�W5QRX|�
|�|�|�tjd��}|�|�
�d�W5QRXdS)Nrr�sabcxxxr�)rrrr�r�r5r'�weakref�refr�assertIsNoner#r�rP)r0r'�wrrrr�test_garbage_collection�s

zIOTest.test_garbage_collectionc	Cs�d}tj�|�s |�d�|��tjdkr4|�d�tjtj	krJ|�d�|j
|ddd��}|�t|j
�W5QRX|�
|d��}|�t|j
�W5QRX|�
|d	��}|�t|j
�W5QRXdS)
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�rr�r)r��path�existsr��formatr��maxsizerZreal_max_memuseZ_2Gr#r�r�rP)r0Zzeror'rrr�test_unbounded_files


zIOTest.test_unbounded_filecsd|j||��g���fdd�}|�_|�t�j�|��j�|���|��d�dd��_dS)Ncs�jg�dd�<t��dSr2rjr�rkr'rr�	bad_flushsz4IOTest.check_flush_error_on_close.<locals>.bad_flushrcSsdSr2rrrrr�<lambda>rMz3IOTest.check_flush_error_on_close.<locals>.<lambda>)r#rer�rlrm�
assertTruerk�assertFalse)r0r|�kwargsrFrrEr�check_flush_error_on_closes
z!IOTest.check_flush_error_on_closecCs.|jtjddd�t�tjtjtjB�}|j|ddd�t�tjtjtjB�}|j|dddd�t�|�|�tjd�t�tjtjtjB�}|�|d�t�tjtjtjB�}|j|ddd�t�|�|�tjd�t�tjtjtjB�}|�|d�t�tjtjtjB�}|j|ddd�t�|�dS)Nr�rr�F)r�r0r/r�)rKrr�r�r#�O_WRONLY�O_CREATrm)r0�fdrrr�test_flush_error_on_close!s$

z IOTest.test_flush_error_on_closecCs<|jtjddd�}|��|��|��|�t|j�dS)Nr�rr�)r#rr�rmr�r�rer�rrr�test_multi_close9s
zIOTest.test_multi_closecCs�|�d�}|�|�d�d�|�|�d�d�|�|�d�d�|�|�d�d�|�|�d�d�|�|�d�d�|�|�d�d�|�|�d�d�dS)	N)�abc�dN�efgNrV�ab�crR�ef�grM)r)r�rP�r0�rawiorrr�test_RawIOBase_read@s
zIOTest.test_RawIOBase_readcCs@|��|��|��|��|��f}|D]}|�t|d��q&dS)N�__dict__)r�r�r�r�r�rH�hasattr)r0r�rrrr�test_types_have_dictMs�zIOTest.test_types_have_dictc	sp|�tjd��}|�d�W5QRXt�tjtj���fdd�}|jdd|d��}|�|��d�W5QRXdS)Nr�r3cs�Sr2r)r@�flags�rNrr�opener\sz"IOTest.test_opener.<locals>.opener�non-existentr�r`)r#rr�r5r��O_RDONLYr�rP)r0r'r`rr_r�test_openerXszIOTest.test_openerc	CsBdd�}|�t��}tdd|d�W5QRX|�t|j�d�dS)NcSsdS)Nr�r�Zfnamer^rrr�	badopenercsz4IOTest.test_bad_opener_negative_1.<locals>.badopenerrarrbzopener returned -1�r�r�r#r��str�	exception�r0rf�cmrrr�test_bad_opener_negative_1asz!IOTest.test_bad_opener_negative_1c	CsBdd�}|�t��}tdd|d�W5QRX|�t|j�d�dS)NcSsdS)N���rrerrrrfksz8IOTest.test_bad_opener_other_negative.<locals>.badopenerrarrbzopener returned -2rgrjrrr�test_bad_opener_other_negativeisz%IOTest.test_bad_opener_other_negativec
Csp|�td��Z}|�td��B}|j|��dd�}|j|��dd�|��|��|��W5QRXW5QRXdS)Nr�Fr/)r#r$r�r;r1r�rm)r0�f1�f2Zfileiorrr�test_fileio_closefdqs
�zIOTest.test_fileio_closefdc
CsBt�|��.|�t��|jtjddd�W5QRXW5QRXdS)Nr�rr��r�check_no_resource_warningr�r�r#r�r7rrr�test_nonbuffered_textio}szIOTest.test_nonbuffered_textioc
CsBt�|��.|�t��|jtjddd�W5QRXW5QRXdS)Nr��invalid��newlinerrr7rrr�test_invalid_newline�szIOTest.test_invalid_newlinec
CsjGdd�d|j�}|�}dD]H}|�|��4td�}|�t||�|�d�|�t|�d�W5QRXqdS)Nc@seZdZdd�ZeZdS)z3IOTest.test_buffered_readinto_mixin.<locals>.StreamcSsdS)N�12345r�r0�sizerrrrP�sz8IOTest.test_buffered_readinto_mixin.<locals>.Stream.readN)rrrrP�read1rrrr�Stream�sr}�rGr�rZry)r�r�rr��getattrr)r0r}�stream�methodr�rrr�test_buffered_readinto_mixin�sz#IOTest.test_buffered_readinto_mixinc
s��fdd�}|ttj��|tt�tj�����tjd��4}t|���}��t����|d�W5QRXW5QRXtd�}��t����|d�W5QRXtt	�}��t	����|d�W5QRX��
td����ttj�d�W5QRXdS)Nc	sN��|d��}|�d�W5QRX��|d��}��|��d�W5QRXdS)Nr�r3r)r#r5r�rP)r@r'r7rr�check_path_succeeds�sz7IOTest.test_fspath_support.<locals>.check_path_succeedsr�zread/write/append modeZrwxa)r	rr�r��fsencoder#r;r�r��FloatingPointError�assertRaisesRegexr�)r0r�r'Zbad_pathrr7r�test_fspath_support�s zIOTest.test_fspath_supportcCs8|�d�}|�|��d�|�d�}|�|��d�dS�N�rQrRrS�abcdefg)r)r�rP�readallrXrrr�test_RawIOBase_readall�s

zIOTest.test_RawIOBase_readallc
Cs�Gdd�d|j�}d}d}|D]�}|�|���|\}}}}|tt|���}	t|f|�}
t|	|�}|�||
�|�|�t|
�|�|�|
d|�t|��|f||}|�|
|d�|�|�t|	j	�||�W5QRXqdS)Nc@s$eZdZdd�Zdd�Zdd�ZdS)z3IOTest.test_BufferedIOBase_readinto.<locals>.ReadercSs
||_dSr2��avail)r0r�rrrr1�sz<IOTest.test_BufferedIOBase_readinto.<locals>.Reader.__init__cSs"|jd|�}|j|d�|_|Sr2r�)r0r{�resultrrrrP�sz8IOTest.test_BufferedIOBase_readinto.<locals>.Reader.readcSs|�t|d��S)z$Returns no more than 5 bytes at oncerZ)rP�minrzrrrr|�sz9IOTest.test_BufferedIOBase_readinto.<locals>.Reader.read1N)rrrr1rPr|rrrr�Reader�sr�)
)rGr�rZrZ)rGr�r�r�)rGrZr�rZ)rGr��r�)rGr�rr)r�r�rZrZ)r�r�r�rZ)r�rZr�rZ)r�r�r�rZ)r�r�rr�)
r�r�rr,r�rr�rZassertSequenceEqualr�)r0r�r�ZUNUSED_BYTEr�r�r�Zrequestr��readerr�Zunusedrrr�test_BufferedIOBase_readinto�s

z#IOTest.test_BufferedIOBase_readintocCs4Gdd�d|j�}|�}|�t|j�dd�|_dS)Nc@seZdZdd�Zdd�ZdS)z#IOTest.test_close_assert.<locals>.RcSsdSr2r)r0�name�valuerrr�__setattr__�sz/IOTest.test_close_assert.<locals>.R.__setattr__cSs
t��dSr2�rlr7rrrre�sz)IOTest.test_close_assert.<locals>.R.flushN)rrrr�rerrrrr��sr�cSsdSr2rr7rrrrG�rMz*IOTest.test_close_assert.<locals>.<lambda>)r�r�rlrmre)r0r�r'rrr�test_close_assert�szIOTest.test_close_assertN)F)3rrrr�r�r�r�r�r�r�r�r�r�r�r�r�rrrr	r
rr"r#r$r%r&r(r.r2r6r7r9r>rDrKrOrPrZr]rdrlrnrqrtrxr�r�r�r�r�rrrrr�:s`
!h	



	
)r�c@seZdZdd�ZdS)�CIOTestcCsLGdd�d|j�}|�|�}||_t�|�}~~t��|�|�|�dS)Nc@seZdZdd�ZdS)z*CIOTest.test_IOBase_finalize.<locals>.MyIOcSsdSr2rr7rrrrm�sz0CIOTest.test_IOBase_finalize.<locals>.MyIO.closeN�rrrrmrrrrr �sr )r�rr:r;rrr<)r0r rr=rrr�test_IOBase_finalize�s
zCIOTest.test_IOBase_finalizeN)rrrr�rrrrr��sr�c@seZdZdS)�PyIOTestNrrrrrr�sr�c@seZdZdd�Zdd�ZdS)�APIMismatchTestcCs*tjtjtjdd�}|j|t�dd�dS)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�rb�r0Zmismatchrrr�test_RawIOBase_io_in_pyio_match
s�z/APIMismatchTest.test_RawIOBase_io_in_pyio_matchcCs&t�tjtj�}|j|t�dd�dS)z:Test that c RawIOBase class has all pyio RawIOBase methodsz6C RawIOBase does not have all Python RawIOBase methodsr�N)rr�r~r�r�r�rbr�rrr�test_RawIOBase_pyio_in_io_matchsz/APIMismatchTest.test_RawIOBase_pyio_in_io_matchN)rrrr�r�rrrrr�sr�c@s|eZdZdd�Zdd�Zdd�Zdd�Zd	d
�Zdd�Zd
d�Z	dd�Z
dd�Zdd�Zdd�Z
dd�Zdd�Zdd�ZdS)�CommonBufferedTestscCs<|��}|�|�}|�|��|�|�t|j�t|�dSr2)rL�tp�assertIs�detachr�r��repr�r0r8rErrr�test_detachs

zCommonBufferedTests.test_detachcCs&|��}|�|�}|�d|���dSr9)rLr�r�r;�r0rY�bufiorrr�test_fileno!s
zCommonBufferedTests.test_filenocCs:|��}|�|�}|�t|jdd�|�t|jdd�dS)Nrr�r�)rLr�r�r�r@r�rrr�test_invalid_args's
z%CommonBufferedTests.test_invalid_argscsN|j}g�G�fdd�d|�}|��}||�}~t��|��dddg�dS)Ncs:eZdZ��fdd�Z��fdd�Z��fdd�Z�ZS)zBCommonBufferedTests.test_override_destructor.<locals>.MyBufferedIOcs6��d�zt�j}Wntk
r*YnX|�dSrirr�rrrr2s
zJCommonBufferedTests.test_override_destructor.<locals>.MyBufferedIO.__del__cs��d�t���dSrUrr7rrrrm:s
zHCommonBufferedTests.test_override_destructor.<locals>.MyBufferedIO.closecs��d�t���dSrrr7rrrre=s
zHCommonBufferedTests.test_override_destructor.<locals>.MyBufferedIO.flushrrrrXr�MyBufferedIO1sr�rCrVr�)r�rLrrr�)r0r�r�rYr�rrr�test_override_destructor.sz,CommonBufferedTests.test_override_destructorcs4|��}|�|���fdd�}|�|�t|�dS)Nc	s��W5QRXdSr2rr�r�rr�_withJsz7CommonBufferedTests.test_context_manager.<locals>._with)rLr�r�r�)r0rYr�rr�r�test_context_managerFs

z(CommonBufferedTests.test_context_managerc
Csn|��}t���T}|�t��|�|�jW5QRXtsF|�|j	�n|j	dk	r`|�
|j	jt�W5QRXdSr2)
rhr�catch_unraisable_exceptionr�rr��xyzzy�IOBASE_EMITS_UNRAISABLEr<�
unraisabler��exc_typerl�r0rYrkrrr�test_error_through_destructorRs

z1CommonBufferedTests.test_error_through_destructorcCsr|��}|�|�}d|jj|jjf}|�t|�d|�d|_|�t|�d|�d|_|�t|�d|�dS)Nz	(%s\.)?%sz<%s>�dummyz<%s name='dummy'>�dummyz<%s name=b'dummy'>)rLr�rr�assertRegexr�r�)r0r8r
Zclsnamerrr�	test_repr_s
zCommonBufferedTests.test_reprc	CsR|��}|�|�}t�|d|��(zt|�Wntk
rBYnXW5QRXdS�Nr�)rLr�r�	swap_attrr��RuntimeError�r0r8r
rrr�test_recursive_repris
z'CommonBufferedTests.test_recursive_reprcs�|���g����fdd�}|�_|����|�t�j�|��j�|��j�|���|��d�|��d�dd��_dS)Ncs�j�jg�dd�<t��dSr2rjr�r
rkr8rrrFxsz@CommonBufferedTests.test_flush_error_on_close.<locals>.bad_flushrrCcSsdSr2rrrrrrG�rMz?CommonBufferedTests.test_flush_error_on_close.<locals>.<lambda>)	rLrer�r�rlrmrHrkrI�r0rFrr�rrOss

z-CommonBufferedTests.test_flush_error_on_closec	Cs�|��}dd�}dd�}||_|�|�}||_|�t��}|��W5QRX|�|jjd�|�	|jj
t�|�|jj
jd�|�|j�dd�|_d	d�|_dS)
NcSstd��dS�Nrer�rrrrrF�sz@CommonBufferedTests.test_close_error_on_close.<locals>.bad_flushcSstd��dS�Nrmr�rrrr�	bad_close�sz@CommonBufferedTests.test_close_error_on_close.<locals>.bad_close�rm�recSsdSr2rrrrrrG�rMz?CommonBufferedTests.test_close_error_on_close.<locals>.<lambda>cSsdSr2rrrrrrG�rM)
rLrmr�rer�rlr�rir|�assertIsInstance�__context__rIrk�r0r8rFr�r
�errrrr�test_close_error_on_close�s

z-CommonBufferedTests.test_close_error_on_closec	Cs�|��}dd�}dd�}||_|�|�}||_|�t��}|��W5QRX|�dt|j��|�	|jj
t�|�dt|jj
��|�|j�dd�|_d	d�|_dS)
NcSst�dSr2��non_existing_flushrrrrrF�szNCommonBufferedTests.test_nonnormalized_close_error_on_close.<locals>.bad_flushcSst�dSr2��non_existing_closerrrrr��szNCommonBufferedTests.test_nonnormalized_close_error_on_close.<locals>.bad_closer�r�cSsdSr2rrrrrrG�rMzMCommonBufferedTests.test_nonnormalized_close_error_on_close.<locals>.<lambda>cSsdSr2rrrrrrG�rM)
rLrmr�rer��	NameError�assertInrhrir�r�rIrkr�rrr�'test_nonnormalized_close_error_on_close�s

z;CommonBufferedTests.test_nonnormalized_close_error_on_closecCs<|��}|�|�}|��|��|��|�t|j�dSr2)rLr�rmr�r�rer�rrrrP�s
z$CommonBufferedTests.test_multi_closecCs6|�|�d��}|�|j|j�|�|j|jd�dS)N�
AAAAAAAAAAr)r�rvr�rzrAr@�r0r�rrr�test_unseekable�sz#CommonBufferedTests.test_unseekablec	Cs:|��}|�|�}|��}|�t��||_W5QRXdSr2)rLr�r�rr8)r0r8rE�xrrr�test_readonly_attributes�s

z,CommonBufferedTests.test_readonly_attributesN)rrrr�r�r�r�r�r�r�r�rOr�r�rPr�r�rrrrr�s


r�c@s(eZdZejdd��Zejdd��ZdS)�
SizeofTestcCs\d}d}|��}|j||d�}t�|�|}|��}|j||d�}|�t�|�||�dS)N�� ��buffer_size)rLr�r��	getsizeofr�)r0Zbufsize1Zbufsize2rYr�r{rrr�test_sizeof�szSizeofTest.test_sizeofcCsFd}|��}|j||d�}t�|�|}|��|�t�|�|�dS)Nr�r�)rLr�r�r�rmr�)r0rrYr�r{rrr�test_buffer_freeing�szSizeofTest.test_buffer_freeingN)rrrr�cpython_onlyr�r�rrrrr��s

r�c@s�eZdZdZdd�Zdd�Zdd�Zdd	�Zd
d�Zdd
�Z	dd�Z
dd�Zdd�Zdd�Z
dd�Zdd�Zdd�Zdd�Ze�d�dd ��Zd!d"�Zd#d$�Zd%d&�Zd'd(�Zd)S)*�BufferedReaderTestr�cCs�|�dg�}|�|�}|�|�|j|dd�|j|dd�|�d|���|jt|j|dd�|jt|j|dd�|jt|j|dd�|�dg�}|�|�|�d|���dS)NrQ�r��r��r�)rLr�r1r�rPr�r�r�rrr�test_constructor�s


z#BufferedReaderTest.test_constructorcCsX|j�|j�}~|j�|j�}|�ttfd|jd�|�|���|�|�d�d�dS�N�uninitialized|has no attributerrM)	r��__new__r�r�rrPr1rLr�r�rrr�test_uninitialized�s
�z%BufferedReaderTest.test_uninitializedcCsDdD]*}|�d�}|�|�}|�d|�|��q|�t|jd�dS)N)Nr�r�r�rm)rLr�r�rPr�r�)r0�argrYr�rrr�	test_read�s


zBufferedReaderTest.test_readcCs�|�d�}|�|�}|�d|�d��|�d|�d��|�|jd�|�d|�d��|�d|�d��|�|jd�|�d	|�d��|�|jd
�|�d|�d��|�|jd�|�d|�d��|�|jd
�dS)Nr��arC�brMrrUr�rRrVrSr�r��rLr�r�rPr|r.r�rrr�
test_read1�s

zBufferedReaderTest.test_read1cCs�|�d�}|�|�}|�d|�d��|�d|���|�d|���|�d|�d��|�|jd�|�d	|���|�|jd
�dS)Nr�r�rCsbcrRrSr�r�rMr�r�r�rrr�test_read1_arbitrarys

z'BufferedReaderTest.test_read1_arbitrarycCs|�d�}|�|�}td�}|�|�|�d�|�|d�|�|�|�d�|�|d�|�|�|�d�|�|d�|�|�|�d�|�|d�|�|�|�d�|�|d�|�d	�}|�|�}|�|�|�d�|�|d�|�|�|�d�|�|d
�dS)Nr�rVrT�cdrVrCsgfr)rQNscb)rLr�r�r�rG)r0rYr�r
rrr�
test_readintos&



z BufferedReaderTest.test_readintocCs4d}|�d�}|j||d�}td�}|�|�d�d�|�|jd�|�|�|�d�|�|d�|�|jd�|�|�|�d�|�|dd�d	�|�|jd�|�|�|�d�|�|d
�|�|jd�td|�}|�|�d�d�|�|jd�|�|�|�d�|�|dd�d
�|�|jd�dS)Nr�)rQ�de�fghsjklr�rVr�rQrCrTrUr�r�r�sfghjklr�)rLr�r�r��peekr.r�)r0r�rYr�r
rrr�test_readinto1,s*
z!BufferedReaderTest.test_readinto1cCs�d}d}|�|f�}|j||d�}t�dd�}t|�dks>t�|�|�}|�|t|��t|��d�}|�	|t|��|�
|d|�|d|��|�
||d�dt||d���dS�	N�<saaaaaaaaaaaaaaaaaaaaaaaaaar�r)s xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxr�rr�)rLr�rrr�rGrrr�
assertLessr��r0r�rrYr�r
rFZbmrrr�test_readinto_arrayCs
z&BufferedReaderTest.test_readinto_arraycCs�d}d}|�|f�}|j||d�}t�dd�}t|�dks>t�|�|�}|�|t|��t|��d�}|�	|t|��|�
|d|�|d|��|�
||d�dt||d���dSr�)rLr�rrr�r�rrrrr�rrrr�test_readinto1_arrayXs
z'BufferedReaderTest.test_readinto1_arraycsZ�fdd�}��|���dddg���|��d�ddg���|��d�dddg�dS)Ncs��d�}��|�S)N)r�r�rV)rLr�)rYr7rrr�ns
z0BufferedReaderTest.test_readlines.<locals>.bufior�r�rVrZ�r�rr�rr7r�test_readlinesmsz!BufferedReaderTest.test_readlinesc	Cs�d}t|�}dddddg|dggddddg|ggdddddgdddggg}|D]d\}}}|�|�}|j||d	�}d}	|D]*}
|�|�|
�||	|	|
��|	|
7}	qx|�|j|�qNdS)
N�	abcdefghir�r�rCr��rrVr�)rrpr�r�rPrq)r0rZdlenr�rZbuf_read_sizesZraw_read_sizesrYr�r
�nbytesrrr�test_bufferingus�

z!BufferedReaderTest.test_bufferingcCs�|�d�}|�|�}|�d|�d��|�d|�d��|�d|���|�d|�d��|�|���|�d|���|�d�}|�d	|���|�|���dS)
N)rQrRNrSNNN�abcdr��erCsfgrM)r�NNr�)rLr�r�rPr�r<r�r�rrr�test_read_non_blocking�s


z)BufferedReaderTest.test_read_non_blockingcCs*|�d�}|�|�}|�d|�d��dS)Nr�r�i(#�rLr�r�rPr�rrr�test_read_past_eof�s

z%BufferedReaderTest.test_read_past_eofcCs(|�d�}|�|�}|�d|���dSr�r
r�rrr�
test_read_all�s

z BufferedReaderTest.test_read_all�cpuc
s*�zd}ttd��|}t�|�tt|��}|�	tjd�����
|�W5QRX|j	tj|jdd���}|�|d��g�g����fdd���fd	d
�td�D�}t�
|��t�d�W5QRX|��d
��d���}td�D]$}tt|g��}|�|�|�|�q�W5QRXW5t�tj�XdS)N���r�rr�rc
sfz2tddg�D] }��|�}|s$q0��|�qWn.tk
r`}z��|��W5d}~XYnXdS)NrC�)rrPr3�	Exception)rFr��e)r��errors�resultsrrr'�s

z*BufferedReaderTest.test_threads.<locals>.fcsg|]}tj�d��qS��r��r_r���.0r�r&rr�
<listcomp>�sz3BufferedReaderTest.test_threads.<locals>.<listcomp>r��{�G�z�?�(the following exceptions were caught: %rrM)rr�r�r+r,�random�shufflerr�r#r5�	read_moder��
start_threadsrcrdrIr�r�r)r0�N�lr�r8�threadsr)�cr)r�rr'rr�test_threads�s.
�
"zBufferedReaderTest.test_threadscCsb|�|�d��}|�|j|j�|�|j|jd�|�d�|�|j|jd�|�|j|j�dS)Nr�rrC)r�rvr�rzrAr@rPr�rrrr��s
z"BufferedReaderTest.test_unseekablecCs@|�d�}|�|�}|�t|jd�|�t|j�dd�|_dS)Nr�rcSsdSr2rrrrrrG�rMz7BufferedReaderTest.test_misbehaved_io.<locals>.<lambda>)rTr�r�rlr@rArmr�rrr�test_misbehaved_io�s


z%BufferedReaderTest.test_misbehaved_ioc	Cs�d}d|d||d|dfD]�}|�d|g�}|�||�}|�|�|�d|�|�|jdd�||j��|�d|ddg�}|�||�}|�|�|�d|�|�|jdd�||j��qdS)Nr�rVrCr�rzfailed for {}: {} != 0)rLr�r�rPr/rB)r0rrFrYr�rrr�test_no_extraneous_read�s
�
�z*BufferedReaderTest.test_no_extraneous_readcCsDt�t�d��}|�d�|��|�t|j�|�t|jd�dS)N�12rC)	r~r�r�rPrmr�r�r�r|r4rrr�test_read_on_closed�s

z&BufferedReaderTest.test_read_on_closedN)rrrr"r�r�r�r�r�r�r�rrrr	rrrr�requires_resourcer(r�r)r*r,rrrrr��s*

'	r�c@sFeZdZejZe�ed�dd��Z	dd�Z
dd�Zdd	�Zd
d�Z
dS)
�CBufferedReaderTest�GMSan defaults to crashing instead of returning NULL for malloc failure.cCsDt�|�tjdkr@|��}|�|�}|�ttt	f|j
|tj�dS�Nr?)r�r�r�rCrLr�r�r��MemoryErrorr�r1r�rrrr��s


�z$CBufferedReaderTest.test_constructorcCs�|�dg�}|�|�}|jt|j|dd�|�t|j�|jt|j|dd�|�t|j�|jt|j|dd�|�t|j�dS)NrQrr�r�r�)rLr�r�r�r1rPr�rrr�test_initialization	s
z'CBufferedReaderTest.test_initializationcCs(|�d�}|�|�}|�t|jd�dS)Nr�r�)rTr�r�rlrPr�rrr�test_misbehaved_io_reads

z+CBufferedReaderTest.test_misbehaved_io_readc	Csn|�tjtj�t�dtf��8|�tjd�}|�|�}||_t	�
|�}~t��W5QRX|�|�|�dS)Nrr)
r�rr�r�rrr�r�r'r:r;rr<�r0rYr'r=rrrr>s

z+CBufferedReaderTest.test_garbage_collectionc	Cs0|�td��|�t��ddd�W5QRXdS)Nr�r��r�r�r�r~r�r7rrr�test_args_error'sz#CBufferedReaderTest.test_args_errorN)rrrr~r�r��unittest�skipIf�MEMORY_SANITIZERr�r2r3r>r6rrrrr.�s




r.c@seZdZejZdS)�PyBufferedReaderTestN)rrrr�r�r�rrrrr:-sr:c@s�eZdZdZdd�Zdd�Zdd�Zdd	�Zd
d�Zdd
�Z	dd�Z
dd�Zdd�Zdd�Z
dd�Zdd�Zdd�Zdd�Zdd�Zd d!�Zd"d#�Zd$d%�Zd&d'�Ze�d(�d)d*��Zd+d,�Zd-d.�Zd/d0�Zd1d2�Zd3S)4�BufferedWriterTestr�cCs�|��}|�|�}|�|�|j|dd�|j|dd�|�d|�d��|��|jt|j|dd�|jt|j|dd�|jt|j|dd�|�|�|�d|�d	��|��|�d
�|j	�d�dS)Nr�r�r�r�rQrr�r��ghirMsabcghi)
rLr�r1r�r5rer�r�r�r-r�rrrr�4s


z#BufferedWriterTest.test_constructorcCsX|j�|j�}~|j�|j�}|�ttfd|jd�|�|���|�|�d�d�dS)Nr�rMr)	r�r�r�r�rr5r1rLr�r�rrrr�Ds
�z%BufferedWriterTest.test_uninitializedcCsD|��}|�|�}|�d�|�|j�|��|�|jdg�dS)Nshowdy!)rLr�r5rIr-r�r�r�rrr�test_detach_flushNs

z$BufferedWriterTest.test_detach_flushcCsh|��}|�|d�}|�d�|�|j�td�}|�|�d|dd�<|��|�d�|j�d�dS)NrrQ�def�***rM�abcdef)	rLr�r5rIr-r�rer�r�)r0�writerr�r�rrr�
test_writeVs

zBufferedWriterTest.test_writecCsn|��}|�|d�}d}tdt|�d�D]}|�|||d��q(d�|j�}|�|�|dd��|�dS)Nrsabcdefghijklmnoprr�rMi����)	rLr�r,rr5r�r-rHr�)r0rAr��contentsrFZflushedrrr�test_write_overflowbsz&BufferedWriterTest.test_write_overflowc	Cs�ttd��d}d}|��}|�|d�}dd�}|�}|t|�kr�tt|�t|�|�}|�|�||||��|�||�||7}q6|�	�|�|d�
|j��dS)Nrrrr�css&td�D]}td�D]
}|VqqdS)NrC�)rr,)r{r)rrr�	gen_sizestsz2BufferedWriterTest.check_writes.<locals>.gen_sizesrM)rr,rLr�rr�r�r�r5rer�r-)	r0Zintermediate_funcrCrFrAr�rF�sizesr{rrr�check_writesms
zBufferedWriterTest.check_writescCs|�dd��dS)NcSsdSr2rr�rrrrG�rMz0BufferedWriterTest.test_writes.<locals>.<lambda>�rHr7rrr�test_writes�szBufferedWriterTest.test_writescCs|�dd��dS)NcSs|��Sr2r�r�rrrrG�rMz<BufferedWriterTest.test_writes_and_flushes.<locals>.<lambda>rIr7rrr�test_writes_and_flushes�sz*BufferedWriterTest.test_writes_and_flushescCs(dd�}|�|�dd�}|�|�dS)NcSs8|��}|�|dd�|�|dd�|�|d�dSrB)rAr@�r�r
rrr�_seekabs�sz:BufferedWriterTest.test_writes_and_seeks.<locals>._seekabscSs4|�dd�}|�dd�|�dd�|�|d�dS)NrrCr�)r@rLrrr�_seekrel�sz:BufferedWriterTest.test_writes_and_seeks.<locals>._seekrelrI)r0rMrNrrr�test_writes_and_seeks�s
z(BufferedWriterTest.test_writes_and_seekscCs|�dd��dS)NcSs|�|���Sr2)rHrAr�rrrrG�rMz>BufferedWriterTest.test_writes_and_truncates.<locals>.<lambda>rIr7rrr�test_writes_and_truncates�sz,BufferedWriterTest.test_writes_and_truncatesc
Cs�|��}|�|d�}|�|�d�d�|�|�d�d�|�d�|�|�d�d�|�d�z|�d	�Wn*|jk
r�}z
|j}W5d}~XYnX|�d
�|�|d�|�|��d�|�|�d
�d�|��}|�	|�
d�|�dS)Nrr
r�sefghirZ�ksjklmn�0sopqrwxyz0123456789z'BlockingIOError should have been raisedr�sabcdefghijklmnopqrwxyzs	ABCDEFGHIr�s	01234567A)r�r�r�r5r�r��characters_writtenr�r�rHr�)r0r8r�r�writtenr�rrr�test_write_non_blocking�s&



�z*BufferedWriterTest.test_write_non_blockingcCs�t��}|�|d�}|�|�d�d�|�|��d�|�dd�|�|�d�d�|�dd�|�|��d�|�|�d�d�|��|�|��d	�dS)
Nr�r@r�rsXYrVsXYcdefs123456sXYcdef123456)	r~r�r�r�r5rAr@rre�r0r8r�rrr�test_write_and_rewind�sz(BufferedWriterTest.test_write_and_rewindcCs<|��}|�|d�}|�d�|��|�d|jd�dS�NrrQr)rLr�r5rer�r-�r0rAr�rrr�
test_flush�s

zBufferedWriterTest.test_flushcCsHdddg}|��}|�|d�}|�|�|��|�d�|j�d�dS�NrTr�rVrrMr@)rLr�r�rer�r�r-�r0r%rAr�rrr�test_writelines�s

z"BufferedWriterTest.test_writelinescCsLtdddg�}|��}|�|d�}|�|�|��|�d�|j�d�dSr[)rrLr�r�rer�r�r-r\rrr�test_writelines_userlist�s
z+BufferedWriterTest.test_writelines_userlistcCsN|��}|�|d�}|�t|jdddg�|�t|jd�|�t|jd�dS)NrrCrVr��abc)rLr�r�r�r�rYrrr�test_writelines_error�s
z(BufferedWriterTest.test_writelines_errorcCs>|��}|�|d�}|�d�~t��|�d|jd�dSrX)rLr�r5rrr�r-rYrrrr�s
z"BufferedWriterTest.test_destructorc	Cs�|�tjtj�|jtj|jdd��>}|�|d�}|�d�|�|�	d�d�|�|�
�d�W5QRX|jtjddd��}|�|��d�W5QRXdS)	Nrr�rr@r�r�r�rQ)r�rr�r�r#�
write_moder�r5r�rHrArP)r0r8r�r'rrr�
test_truncate�s
z BufferedWriterTest.test_truncatec
Cs�|�tjtj�|�tjd��}|�dd�W5QRXdddg}|D]Z}|jtjd|d��>}|�d|d	�|�d	�|��|�|�	�|d
�W5QRXqFdS)Nr��i'r�r���zr+br�rCrV)
r�rr�r�r#r5rPrHr�rA)r0r'Zbuffer_sizesr�rrr�test_truncate_after_write�s

z,BufferedWriterTest.test_truncate_after_writerc

sR�z<d}ttd��|}tddg�}d}t��|t|�krbt|�}��	||||��||7}q.~|j
tj|jdd��t}|�|d��g����fdd	���fd
d�td�D�}t�
|��t�d
�W5QRX|��d�����W5QRX|�
tjd������}W5QRXtd�D]}	|�|�t|	g��|��qW5t�tj�XdS)NrrrCrrr�rc
sjz6z���}Wntk
r&YWdSX��|�qWn.tk
rd}z��|��W5d}~XYnXdSr2)�popleftrDr5rr3)r�r)r�r�queuerrr's

z*BufferedWriterTest.test_threads.<locals>.fcsg|]}tj�d��qSrrrr&rrr%sz3BufferedWriterTest.test_threads.<locals>.<listcomp>r�rrr�)rr�r�rr,rrrr�r3r#rar�r#rcrdrIrmrPr�r)
r0r$rCrGrFr{r8r&r�r)r)r�rr'rgrr(s6
� zBufferedWriterTest.test_threadscCsP|��}|�|d�}|�t|jd�|�t|j�|�t|jd�dd�|_dS)NrZrr@cSsdSr2rrrrrrG:rMz7BufferedWriterTest.test_misbehaved_io.<locals>.<lambda>)rTr�r�rlr@rAr5rmr�rrrr)2sz%BufferedWriterTest.test_misbehaved_ioc	Cs,|�t��|�|��dd�W5QRXdS�Nrr��r�r�r�rLr7rrr�test_max_buffer_size_removal<sz/BufferedWriterTest.test_max_buffer_size_removalcCsH|��}dd�}||_|�|�}|�d�|�t|j�|�|j�dS)NcSs
t��dSr2r�)r
rrr�	bad_writeBsz?BufferedWriterTest.test_write_error_on_close.<locals>.bad_write�spam)rLr5r�r�rlrmrHrk)r0r8rkr
rrr�test_write_error_on_close@s

z,BufferedWriterTest.test_write_error_on_closecCs\|��}|�|d�}tj|jd�}|��|j��|�t	|j
d�|�|j�|�
�dS)Nrrrl)r^r�r_r�rmr�ra�waitr�r�r5rHrkr�)r0rYr��trrr�test_slow_close_from_threadJs
z.BufferedWriterTest.test_slow_close_from_threadN)rrrrar�r�r=rBrDrHrJrKrOrPrUrWrZr]r^r`rrbrerr-r(r)rjrmrprrrrr;1s4


.

r;c@s>eZdZejZe�ed�dd��Z	dd�Z
dd�Zdd	�Zd
S)�CBufferedWriterTestr/cCsDt�|�tjdkr@|��}|�|�}|�ttt	f|j
|tj�dSr0)r;r�r�rCrLr�r�r�r1r�r1r�rrrr�Zs


�z$CBufferedWriterTest.test_constructorcCs�|��}|�|�}|jt|j|dd�|�t|jd�|jt|j|dd�|�t|jd�|jt|j|dd�|�t|jd�dS)Nrr�r>r�r�)rLr�r�r�r1r5r�rrrr2fs
z'CBufferedWriterTest.test_initializationc	Cs�|�tjtj�t�dtf��B|�tjd�}|�|�}|�d�||_	t
�|�}~t��W5QRX|�
|�|�|�tjd��}|�|��d�W5QRXdS)Nrrs123xxxr�)r�rr�r�rrr�r�r5r�r:r;rr<r#r�rPr4rrrr>ps


z+CBufferedWriterTest.test_garbage_collectionc	Cs0|�td��|�t��ddd�W5QRXdS)Nr�r�r5r7rrrr6�sz#CBufferedWriterTest.test_args_errorN)
rrrr~r�r�r7r8r9r�r2r>r6rrrrrqWs



rqc@seZdZejZdS)�PyBufferedWriterTestN)rrrr�r�r�rrrrrr�srrc@s�eZdZdd�Zdd�Zdd�Zdd�Zd	d
�Zdd�Zd
d�Z	dd�Z
dd�Zdd�Zdd�Z
dd�Zdd�Zdd�Zdd�Zdd �Zd!d"�Zd#d$�Zd%d&�Zd'd(�Zd)d*�Zd+S),�BufferedRWPairTestcCs$|�|��|���}|�|j�dSr2)r�rLrIrk�r0�pairrrrr��sz#BufferedRWPairTest.test_constructorcCs�|j�|j�}~|j�|j�}|�ttfd|jd�|�ttfd|jd�|�|��|���|�	|�d�d�|�	|�d�d�dSr�)
r�r�r�r�rrPr5r1rLr�rtrrrr��s 
�
�z%BufferedRWPairTest.test_uninitializedcCs(|�|��|���}|�|j|j�dSr2)r�rLr�rzr�rtrrrr��szBufferedRWPairTest.test_detachc	Cs2|�t��|�|��|��dd�W5QRXdSrhrir7rrr�(test_constructor_max_buffer_size_removal�sz;BufferedRWPairTest.test_constructor_max_buffer_size_removalcCs,Gdd�dt�}|�t|j|�|���dS)Nc@seZdZdd�ZdS)zJBufferedRWPairTest.test_constructor_with_not_readable.<locals>.NotReadablecSsdSrwrr7rrrr<�szSBufferedRWPairTest.test_constructor_with_not_readable.<locals>.NotReadable.readableN�rrrr<rrrr�NotReadable�srx�rLr�rlr�)r0rxrrr�"test_constructor_with_not_readable�sz5BufferedRWPairTest.test_constructor_with_not_readablecCs,Gdd�dt�}|�t|j|��|��dS)Nc@seZdZdd�ZdS)zLBufferedRWPairTest.test_constructor_with_not_writeable.<locals>.NotWriteablecSsdSrwrr7rrrr8�szUBufferedRWPairTest.test_constructor_with_not_writeable.<locals>.NotWriteable.writableN)rrrr8rrrr�NotWriteable�sr{ry)r0r{rrr�#test_constructor_with_not_writeable�sz6BufferedRWPairTest.test_constructor_with_not_writeablecCsv|�|�d�|���}|�|�d�d�|�|�d�d�|�|��d�|�|�d�|���}|�|�d�d�dS)Nr@r�rQrCrRrV)r�r�rLr�rPrtrrrr��szBufferedRWPairTest.test_readcsX�fdd�}��|���dddg���|���dddg���|��d�ddg�dS)Ncs����d�����S)Ns	abc
def
h)r�r�rLrr7rrrG�rMz3BufferedRWPairTest.test_readlines.<locals>.<lambda>r�r�r�rZrrtrr7rr�sz!BufferedRWPairTest.test_readlinescCs<|�|�d�|���}|�|�d�d�|�|��d�dS)Nr@r�rQr>)r�r�rLr�r|rtrrrr��szBufferedRWPairTest.test_read1c
CshdD]^}|�|��J|�|�d�|���}td�}|�t||�|�d�|�t|�d�W5QRXqdS)Nr~r@srZsabcde)r�r�r�rLrr�rr)r0r�rurrrrr��sz BufferedRWPairTest.test_readintocCsf|��}|�|��|�}|�d�|��td�}|�|�d|dd�<|��|�|jddg�dS)NrQr>r?)rLr�r5rer�r�r-)r0r�rur�rrrrB�s

zBufferedRWPairTest.test_writecCsB|�|�d�|���}|�|�d��d��|�|�d�d�dS)Nr@r�rQ)r�r�rLrHr�r�r�rPrtrrr�	test_peek�szBufferedRWPairTest.test_peekcCs&|�|��|���}|�|���dSr2)r�rLrHr<rtrrr�
test_readable�sz BufferedRWPairTest.test_readablecCs&|�|��|���}|�|���dSr2)r�rLrHr8rtrrr�test_writeable�sz!BufferedRWPairTest.test_writeablecCs&|�|��|���}|�|���dSr2)r�rLrIr=rtrrr�
test_seekable�sz BufferedRWPairTest.test_seekablecCs8|�|��|���}|�|j�|��|�|j�dSr2)r�rLrIrkrmrHrtrrr�test_close_and_closed�sz(BufferedRWPairTest.test_close_and_closedc	Cs�dd�}|��}||_|��}|�||�}|�t��}|��W5QRX|�dt|j��|�|j	�|�
|j	�|�|j	�dd�|_dS)NcSstdSr2��reader_non_existingrrrr�reader_close�szIBufferedRWPairTest.test_reader_close_error_on_close.<locals>.reader_closer�cSsdSr2rrrrrrGrMzEBufferedRWPairTest.test_reader_close_error_on_close.<locals>.<lambda>)rLrmr�r�r�r�rhrirHrkrI)r0r�r�rArur�rrr� test_reader_close_error_on_close�sz3BufferedRWPairTest.test_reader_close_error_on_closec
Cs�dd�}|��}|��}||_|�||�}|�t��}|��W5QRX|�dt|j��|�|j	�|�
|j	�|�|j	�dd�|_d}t���.t���d}t�
�W5QRXt�
�W5QRXdS)NcSstdSr2��writer_non_existingrrrr�writer_closeszIBufferedRWPairTest.test_writer_close_error_on_close.<locals>.writer_closer�cSsdSr2rrrrrrGrMzEBufferedRWPairTest.test_writer_close_error_on_close.<locals>.<lambda>)rLrmr�r�r�r�rhrirIrkrHrr�r)r0r�r�rArur�rrr� test_writer_close_error_on_closes$


z3BufferedRWPairTest.test_writer_close_error_on_closec	Cs�dd�}dd�}|��}||_|��}||_|�||�}|�t��}|��W5QRX|�dt|j��|�|jj	t�|�dt|jj	��|�
|j�|�
|j�|�
|j�dd�|_d	d�|_dS)
NcSstdSr2r�rrrrr�)szPBufferedRWPairTest.test_reader_writer_close_error_on_close.<locals>.reader_closecSstdSr2r�rrrrr�+szPBufferedRWPairTest.test_reader_writer_close_error_on_close.<locals>.writer_closer�r�cSsdSr2rrrrrrG<rMzLBufferedRWPairTest.test_reader_writer_close_error_on_close.<locals>.<lambda>cSsdSr2rrrrrrG=rM)rLrmr�r�r�r�rhrir�r�rIrk)r0r�r�r�rArur�rrr�'test_reader_writer_close_error_on_close(s"
z:BufferedRWPairTest.test_reader_writer_close_error_on_closecCs�Gdd�dt�}|�|d�|d��}|�|���|�|d�|d��}|�|���|�|d�|d��}|�|���|�|d�|d��}|�|���dS)Nc@seZdZdd�Zdd�ZdS)z8BufferedRWPairTest.test_isatty.<locals>.SelectableIsAttycSst�|�||_dSr2)rLr1�_isatty)r0�isattyrrrr1As
zABufferedRWPairTest.test_isatty.<locals>.SelectableIsAtty.__init__cSs|jSr2)r�r7rrrr�Esz?BufferedRWPairTest.test_isatty.<locals>.SelectableIsAtty.isattyN)rrrr1r�rrrr�SelectableIsAtty@sr�FT)rLr�rIr�rH)r0r�rurrr�test_isatty?szBufferedRWPairTest.test_isattycCs*|�|��|���}t�|�}d}d}dSr2)r�rLr:r;)r0Zbrwr;rrr�test_weakref_clearingTs
z(BufferedRWPairTest.test_weakref_clearingN)rrrr�r�r�rvrzr|r�rr�r�rBr}r~rr�r�r�r�r�r�r�rrrrrs�s*			rsc@seZdZejZdS)�CBufferedRWPairTestN)rrrr~r�r�rrrrr�Zsr�c@seZdZejZdS)�PyBufferedRWPairTestN)rrrr�r�r�rrrrr�]sr�c@s�eZdZdZdZdd�Zdd�Zdd�Zd	d
�Zdd�Z	d
d�Z
dd�Zdd�Zdd�Z
dd�Zdd�Zdd�Zdd�Zdd�Zdd �Zd!d"�Zd#d$�Zd%d&�Zd'd(�Zd)d*�Zd+Zd+S),�BufferedRandomTest�rb+zwb+cCst�|�t�|�dSr2)r�r�r;r7rrrr�es
z#BufferedRandomTest.test_constructorcCst�|�t�|�dSr2)r�r�r;r7rrrr�is
z%BufferedRandomTest.test_uninitializedcCsn|�d�}|�|d�}|�d|�d��|�d�|�d�|�|j�|�d|���|�d|jd	�dS)
N)�asdf�ghjkr�asrVsdddseeer�sdddeeer)rLr�r�rPr5rIr-�r0r8r�rrr�test_read_and_writems


z&BufferedRandomTest.test_read_and_writecCs|�d�}|�|�}|�d|�d��|�d|���|�dd�|�d|�d��|�d�|�dd�|�d|���|�d	|���|�d
d�|�d|���|�dd�|�d
|���|�d|�d��|��|�d|���|�	t
|jd�dS)Ns	asdfghjklr�rVrr�r�s123fs	asdf123flr����rZrCr�sfl�r�)r�r�r�rPrAr@r5rerr�r�r�rrr�test_seek_and_tellxs$


z%BufferedRandomTest.test_seek_and_tellcCs�|�d�}|�|�}|�d||d��|�d�|�d||d��|�d|���|��|�d|���|�d||��|�dd�|�d	�|��|�dd�|�d	||d
��dS)NrrTrVr+rVr�r<rsXYZr�)r�r�r�r5rArer@)r0Z	read_funcr8r�rrr�check_flush_and_read�s



z'BufferedRandomTest.check_flush_and_readcCs|�dd��dS)NcWs
|j|�Sr2)rP)r�r|rrrrG�rMz8BufferedRandomTest.test_flush_and_read.<locals>.<lambda>�r�r7rrr�test_flush_and_read�sz&BufferedRandomTest.test_flush_and_readcCsddd�}|�|�dS)Nr�cSs.t|dkr|nd�}|�|�}t|d|��S)Nr�')r�rGr�r�rFr
rrr�	_readinto�s
z=BufferedRandomTest.test_flush_and_readinto.<locals>._readinto)r�r�)r0r�rrr�test_flush_and_readinto�s
z*BufferedRandomTest.test_flush_and_readintocCsddd�}|�|�dS)Nr�cSs2|�|�}|dkr|d|�}|�t|�d�|S�Nr�rC)r�r@rr�rrr�_peek�s

z5BufferedRandomTest.test_flush_and_peek.<locals>._peek)r�r��r0r�rrr�test_flush_and_peek�s
z&BufferedRandomTest.test_flush_and_peekcCsh|�d�}|�|�}|�d�|��|�d�|��|�dd�|�d|���|�d|���dS)Nr�123s45rs	12345fghi)r�r�r5rer@r�rrPrVrrr�test_flush_and_write�s



z'BufferedRandomTest.test_flush_and_writecCst�|�t�|�dSr2)r�r(r;r7rrrr(�s
zBufferedRandomTest.test_threadscCs(dd�}|�|�dd�}|�|�dS)NcSs|�d�dSri)r�r�rrrr��sz6BufferedRandomTest.test_writes_and_peek.<locals>._peekcSs.|��}|�dd�|�d�|�|d�dS)Nr�rCr)rAr@r�rLrrrr��s
rIr�rrr�test_writes_and_peek�s
z'BufferedRandomTest.test_writes_and_peekcCsdd�}|�|�dS)NcSs|�dd�|�d�dSr�)r@rPr�rrr�_read�sz7BufferedRandomTest.test_writes_and_reads.<locals>._readrI�r0r�rrr�test_writes_and_reads�sz(BufferedRandomTest.test_writes_and_readscCsdd�}|�|�dS)NcSs|�dd�|�d�dSr�)r@r|r�rrr�_read1�sz9BufferedRandomTest.test_writes_and_read1s.<locals>._read1rI)r0r�rrr�test_writes_and_read1s�sz)BufferedRandomTest.test_writes_and_read1scCsdd�}|�|�dS)NcSs|�dd�|�td��dSr�)r@rGr�r�rrrr��sz;BufferedRandomTest.test_writes_and_readintos.<locals>._readrIr�rrr�test_writes_and_readintos�sz,BufferedRandomTest.test_writes_and_readintoscCs�dD]�}|�d�}|�|d�}|�|�d�d�|�|��d�|�d|�|�|��|d�|��|�|��|d�|��}|�|dd|dd|�qdS)N)rCrZr�r�rC�A�Br�)r�r�r�rPrAr5rer)r0Zoverwrite_sizer8r�r�rrr�test_write_after_readahead�s
�z-BufferedRandomTest.test_write_after_readaheadc	Cs�dd�}d}tdt|��D]t}t|t|��D]`}|�|�}|�|d�}||||�|��t|�}d||<d||<|�|��|d||f�q,qdS)	NcSsF||kst�|�|�|�||�|�d�|�|�|�d�dS)N��)r�r@rPr5)r�Zpos1Zpos2rrr�mutate�s


z:BufferedRandomTest.test_write_rewind_write.<locals>.mutates�����rr�rVrCzfailed result for i=%d, j=%d)r,rr�r�rer�r�r)r0r�r
r)�jr8r��expectedrrr�test_write_rewind_write�s

�z*BufferedRandomTest.test_write_rewind_writecCs^|�d�}|�|d�}|�|�d�d�|�|��d�|�|�d�d�|�|��d�dS)Nr�r�rVsAAsBBr�)r�r�r�rPrHr5rVrrr�!test_truncate_after_read_or_write	s
z4BufferedRandomTest.test_truncate_after_read_or_writecCst�|�t�|�dSr2)r�r)r;r7rrrr)	s
z%BufferedRandomTest.test_misbehaved_ioc
Cs:|�d���}|�|d���}|�d�|�|�d�d�|�d�|�|�d�d�|�d�td�}|�|�|�|d	�|�d
�|�|�d�d�|�	�|�|�
�d�W5QRXW5QRX|�d
��d}|�|d��L}|�|�d�d�|�d�|�|�d�d�|�	�|�|�
�d�W5QRXW5QRXdS)Nsabcdefghr��1rCr��2rRr��f�4r�s1b2d3f4hrQr�rUsa2c)r�r�r5r�rPr|r�rGr�rer)r0r8r'rErrr�test_interleaved_read_write	s*




$
z.BufferedRandomTest.test_interleaved_read_writec
Cs�|�d���}|�|��l}|�d�|�|��d�|�d�|�|��d�|�d�|�|��d�|��|�|��d�W5QRXW5QRXdS)	Ns
ab
cdef
g
r�sb
r�r�r��
s
1b
2def
3
)r�r�r5r�r�rer)r0r8r'rrr�test_interleaved_readline_write6	s


z2BufferedRandomTest.test_interleaved_readline_writeN)rrrr"rar�r�r�r�r�r�r�r�r�r(r�r�r�r�r�r�r�r)r�r�r�rrrrr�as.
r�c@s6eZdZejZe�ed�dd��Z	dd�Z
dd�ZdS)	�CBufferedRandomTestr/cCsDt�|�tjdkr@|��}|�|�}|�ttt	f|j
|tj�dSr0)r�r�r�rCrLr�r�r�r1r�r1r�rrrr�I	s


�z$CBufferedRandomTest.test_constructorcCst�|�t�|�dSr2)r.r>rqr7rrrr>U	s
z+CBufferedRandomTest.test_garbage_collectionc	Cs0|�td��|�t��ddd�W5QRXdS)Nr�r�r5r7rrrr6Y	sz#CBufferedRandomTest.test_args_errorN)rrrr~r�r�r7r8r9r�r>r6rrrrr�F	s



r�c@seZdZejZdS)�PyBufferedRandomTestN)rrrr�r�r�rrrrr�_	sr�c@s\eZdZdZddd�Zdd�Zdd�Zd	d
�Zdd�Zddd�Z	dd�Z
d
Zedd��Z
dS)�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.
    �strictcCstj�||�|��dSr2)�codecs�IncrementalDecoderr1�reset)r0rrrrr1�	sz#StatefulIncrementalDecoder.__init__cCsdt|�S)Nz<SID %x>)�idr7rrr�__repr__�	sz#StatefulIncrementalDecoder.__repr__cCsd|_d|_t�|_dSri)r)�or�r�r7rrrr��	sz StatefulIncrementalDecoder.resetcCs,|jdA|jdA}}t|j�|d|fS)NrCr�)r)r�rr�)r0r)r�rrr�getstate�	sz#StatefulIncrementalDecoder.getstatecCs:|\}}t|�|_t|d�\}}|dA|dA|_|_dS)Nr�rC)r�r��divmodr)r�)r0�stater�r~r)r�rrr�setstate�	s
z#StatefulIncrementalDecoder.setstateFcCs�d}|D]d}|jdkrD|td�kr6|jrB||��7}ql|j�|�q|j�|�t|j�|jkr||��7}q|r�|jr�||��7}|S)Nrr�.)r)�ordr��process_wordr3r)r0�input�final�outputr
rrr�decode�	s

z!StatefulIncrementalDecoder.decodecCs�d}|jdtd�kr6tdt|jdd�p,d��|_nv|jdtd�krhtdt|jdd�p^d��|_nD|j�d�}t|�|jkr�|d|j7}|jr�|d|j�}|d	7}t�|_|S)
Nrrr)�crCr�r��-r�)	r�r�r��intr)r�r�rr�)r0r�rrrr��	s  z'StatefulIncrementalDecoder.process_wordc	Cs6|jr2|dkr2t�d�}tjd|jdddd|d�SdS)N�test_decoderr )r��encoder��incrementalencoder�streamreader�streamwriter�incrementaldecoder)�codecEnabledr��lookup�	CodecInfor�)�clsr��latin1rrr�lookupTestDecoder�	s
�z,StatefulIncrementalDecoder.lookupTestDecoderN)r�)F)rrrrIr1r�r�r�r�r�r�r��classmethodr�rrrrr�n	s

r�c@s*eZdZdZdddddddgZd	d
�ZdS)�StatefulIncrementalDecoderTestzB
    Make sure the StatefulIncrementalDecoder actually works.
    )r
Fza.b.c.d.)�oiabcdT�abcd.)soi...abcd...Tr�)si.o6.x.xyz.toolongtofit.Fzx-----.xyz---.toolon.)s
i.i2.o6xyzTzxy----.z-----.)si.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--------------.cCs\|jD]$\}}}t�}|�|�||�|�qt�}|�|�d�d�|�|�dd�d�dS)Nr�rrMrCr�)�
test_casesr�r�r�)r0r��eofr��drrrr��	sz+StatefulIncrementalDecoderTest.test_decoderN)rrrrIr�r�rrrrr��	s�r�c@s�eZdZdd�Zdd�Zdd�Zdd�Zd	d
�Zdd�Zd
d�Z	dd�Z
dd�Zdd�Ze
�ejjd�dd��Zeje
�ejjd�dd���Zdd�Zdd�Zdd�Zd d!�Zd"d#�Zd$d%�Zd&d'�Zd(d)�Zd*d+�Zd,d-�Zd.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_�Z8ej9d`da��Z:dbdc�Z;ddde�Z<dfdg�Z=dhdi�Z>djdk�Z?dldm�Z@dndo�ZAdpdq�ZBdrds�ZCdtdu�ZDdvdw�ZEdxdy�ZFdzd{�ZGd|d}�ZHejId~d��ZJejId�d���ZKd�d��ZLd�d��ZMd�d��ZNd�d��ZOd�d��ZPd�d��ZQd�d��ZRd�d��ZSd�d��ZTd�S)��TextIOWrapperTestcCs"d|_d�d�|_t�tj�dS)NsAAA
BBB
CCC
DDD
EEE
sAAA
BBB
CCC
DDD
EEE
r�)�testdatar��
normalizedrr�r�r7rrrr��	szTextIOWrapperTest.setUpcCst�tj�dSr2r�r7rrrr��	szTextIOWrapperTest.tearDowncCs�|�d�}|�|d�}|�|�}|j|ddd�|�|jd�|�|jd�|j|ddd	�|�|jd�|�|jd�|�d
|���|jt	|j|dd�|jt
|j|d
d�dS)N�é

rr �
�r"rwF�utf-8T)r"�line_buffering�é
r:rvr�)r�r�r�r1r�r"r�r�r�r�r��r0rr
rorrrr��	s

z"TextIOWrapperTest.test_constructorcCsf|j�|j�}~|j�|j�}|�tt|�|�ttfd|jd�|�	|�
��|�|�d�d�dS)Nr�rr)r�r�r�rr�r�r�rrPr1rLr��r0rorrrr�
s
�z$TextIOWrapperTest.test_uninitializedc	Cs<|��}|�|�}|�td��|j|dd�W5QRXdS)Nzis not a text encoding�hexr!)r�r�r��LookupErrorr�)r0rr
rrr�*test_non_text_encoding_codecs_are_rejected
s
z<TextIOWrapperTest.test_non_text_encoding_codecs_are_rejectedcCs�|��}|�|�}|�|�}|�|��|�|j|dd�}|�d�|�|���|��|�|��d�|�	t
|j�t|�|�|jd�|�|j
d�|�|j�|�|j�dS)Nr�r!Zhowdyshowdyr�)r�r�r�r�r�r5rIrr�r�r�r�r"rr��
write_throughr�rrrr�
s


zTextIOWrapperTest.test_detachcCs�|�d�d��}|�|�}|j|dd�}|jj}|�t|�d|�d|_|�t|�d|�d|_|�t|�d|�d	|_|�t|�d
|�|j	�
�t|�dS)NZhellor�r!z'<(%s\.)?TextIOWrapper encoding='utf-8'>r�z4<(%s\.)?TextIOWrapper name='dummy' encoding='utf-8'>rz=<(%s\.)?TextIOWrapper name='dummy' mode='r' encoding='utf-8'>r�z><(%s\.)?TextIOWrapper name=b'dummy' mode='r' encoding='utf-8'>)r�r�r�r�rr�r�r�r�r�r�)r0r8r
ro�modnamerrrr�3
s*

�
�
�
�
zTextIOWrapperTest.test_reprc	CsR|��}|�|�}t�|d|��(zt|�Wntk
rBYnXW5QRXdSr�)r�r�rr�r�r��r0r8rorrrr�G
s
z%TextIOWrapperTest.test_recursive_reprcCsv|��}|�|d�}|j|ddd�}|�d�|�|��d�|�d�|�|��d�|�d	�|�|��d
�dS)Nr�
T�rwr��XrMzY
ZsXY
ZzA
BsXY
ZA
B)r�r�r�r5r�rr�rrr�test_line_bufferingQ
s


z%TextIOWrapperTest.test_line_bufferingcCs|��}|�|d�}|j|ddd�}|�d�|�|��d�|jdd�|�|��d	�|�d
�|�|��d�|�d�|�|��d�|jdd�|�|��d
�|�d�|�|��d
�|��|jdd�|�|jd�|jdd�|��|jdd�|�|jd�dS)Nrr�Fr�zAB
CrMT)r�sAB
CzDEF
Gs	AB
CDEF
G�Hs
AB
CDEF
GHZIJ)r�r�r�r5r�r�reconfigurer�r�rrr�test_reconfigure_line_buffering\
s,



z1TextIOWrapperTest.test_reconfigure_line_bufferingzutf-8 mode is enabledc	Csrttj�}zJdD]}|tjkrtj|=qt�d�}|��}|�|�}|�	|j
|�W5tj��tj�|�XdS)N)�LC_ALL�LANG�LC_CTYPEF)�dictr��environ�clear�update�locale�getpreferredencodingr�r�r�r")r0Zold_environ�keyZcurrent_locale_encodingr
rorrr�test_default_encodingw
s





z'TextIOWrapperTest.test_default_encodingcsPddl�|��}�fdd�|_|�t|j|��fdd�|_|�t|j|�dS)Nrcs
�jdSri)ZINT_MAXr��	_testcapirrrG�
rMz8TextIOWrapperTest.test_device_encoding.<locals>.<lambda>cs
�jdSri)ZUINT_MAXrrrrrG�
rM)rr�r;r�r�r�r4rrr�test_device_encoding�
sz&TextIOWrapperTest.test_device_encodingcCsJ|��}|j|dd�}|�|jd�|�|�}|�|j�t�|j�dS)Nr�r!)r�r�r�r"�assertIsNotNoner�r��r0r
rorrr�
test_encoding�
s
zTextIOWrapperTest.test_encodingcCs�|�d�}|j|dd�}|�t|j�|�d�}|j|ddd�}|�t|j�|�d�}|j|ddd�}|�|��d�|�d�}|j|ddd�}|�|��d	�dS)
Nsabc
�
r�r!r��r"rr�zabc

�replaceuabc
�
)r�r�r��UnicodeErrorrPr�rrrr�test_encoding_errors_reading�
s



z.TextIOWrapperTest.test_encoding_errors_readingcCs�|��}|j|dd�}|�t|jd�|��}|j|ddd�}|�t|jd�|��}|j|dddd�}|�d	�|��|�|��d
�|��}|j|dddd�}|�d	�|��|�|��d�dS)
Nr�r!�ÿr�rr�r�)r"rrwu	abcÿdef
sabcdef
rsabc?def
)r�r�r�rr5rer�rrrrr�test_encoding_errors_writing�
s(
�

�
z.TextIOWrapperTest.test_encoding_errors_writingc	Cs<dddddg}ddddddggd|gd	ddd
dggddd
ggddddggg}d}|D]�}td�|��|��}dD]�}tdd�D]�}|D]�\}}	|�|�|�|�}
|j|
||d�}|r�g}|�d�}
|
dkr�q�|�t	|
�d�|�
|
|���q�nt|�}t
||	�D]\}}|�||��q|�t	|�t	|	��q�q~qpqTdS)Nzunix
z	windows
zos9
zlast
Znonlzwindows
zos9
rr�z	os9
last
r�zunix
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)FTrCr��rwr"rV)rr�r�r,r�r�r�rPr�rr3r�r+�zip)r0Zinput_linesr��	encodingsr"rZdo_readsrrwZ	exp_linesr��textioZ	got_lines�c2Zgot_lineZexp_linerrr�
test_newlines�
s8
��
zTextIOWrapperTest.test_newlinesc
Cs�d}|�dd��dd�}d|�d�jdd�fd|�d�jdd�fd	d
ddd
dgfddd
dgfddddddgffD]R\}}|�|�}|j|d|d�}|�|��|�|�d�|�|��d�	|��qpdS)NsAAA
BBB
CCC
DDD
EEE
FFF
GGGs
r��
r�T)�keependsrr�zAAA
zBBB
z
CCC
DDD
EEE
zFFF
ZGGGr�zAAA
BBB
CCC
DDD
EEE
rz
AAA
BBB
CCC
zDDD
zEEE
z
FFF
z
GGGr�r)
rr��
splitlinesr�r�r�rr@rPr�)r0r�r�rwr�rE�txtrrr�test_newlines_input�
s�

z%TextIOWrapperTest.test_newlines_inputcCs�ddddd�}d|tjfgt|���}|D]d\}}|��}|j|d|d�}|�d�|�d�|�d	�|��|�|j	d
�|�|�
�|�q.dS)NsAAA
BBB
CCC
X
Y
ZsAAA
BBB
CCC
X
Y

ZsAAA
BBB
CCC
X
Y

Z)rr�rr�r�r�zAAA
BzBB
CCC
zX
Y
ZF)r��linesep�sorted�itemsr�r�r5rer�rkr)r0Ztestdictr�rwr�rEr+rrr�test_newlines_outputs�


z&TextIOWrapperTest.test_newlines_outputcsZg�|j�G��fdd�d��}|�}|j|dd�}|�d�~t��|�dg��dS)NcseZdZ��fdd�ZdS)z4TextIOWrapperTest.test_destructor.<locals>.MyBytesIOcs��|�����|�dSr2)r3rrmr7�r!r%rrrmsz:TextIOWrapperTest.test_destructor.<locals>.MyBytesIO.closeNr�rr1rr�	MyBytesIOsr2r�r!r_rQ)r�r�r5rrr�)r0r2r
rorr1rrs
z!TextIOWrapperTest.test_destructorcsNg�G�fdd�d|j�}|��}||dd�}~t��|��dddg�dS)Ncs:eZdZ��fdd�Z��fdd�Z��fdd�Z�ZS)z<TextIOWrapperTest.test_override_destructor.<locals>.MyTextIOcs6��d�zt�j}Wntk
r*YnX|�dSrirr�rrrr%s
zDTextIOWrapperTest.test_override_destructor.<locals>.MyTextIO.__del__cs��d�t���dSrUrr7rrrrm-s
zBTextIOWrapperTest.test_override_destructor.<locals>.MyTextIO.closecs��d�t���dSrrr7rrrre0s
zBTextIOWrapperTest.test_override_destructor.<locals>.MyTextIO.flushrrrrXr�MyTextIO$sr3r�r!rCrVr�)r�r�rrr�)r0r3r
rorrrr�"sz*TextIOWrapperTest.test_override_destructorc
Csn|��}t���T}|�t��|�|�jW5QRXtsF|�|j	�n|j	dk	r`|�
|j	jt�W5QRXdSr2)
rhrr�r�rr�r�r�r<r�r�r�rlr�rrrr�9s

z/TextIOWrapperTest.test_error_through_destructorcCs�dD�]�}dD�]t}|jtjd|d�}||_|�|�d�d�|��|jtjd|d�}||_|�|��d�|�|��d�|��}|�|�	d�d�|�|�d�d�|�	d�|�|�d	�d
�|�|�d�d�|�|�d�d
�|�|��d
�|�|��|�|�|�	d�d�|�|�	dd	�|�|�|�d�d�|�|�	|�|�|�|��d�|�
d��r||�||�|��qqdS)N)rCrVr�r�rZrEr���� �!�?�@�A)r�r r��w+r!r_r��r+rrVr
rCr'r�def�utf)r#rr�r%r�r5rmrArPr@r��multi_line_test)r0�	chunksize�encr'�cookierrr�
test_basic_ioHs6


zTextIOWrapperTest.test_basic_iocCs�|�d�|��d}g}dD]V}g}t|�D]}|�||t|��q.d�|�d}|�|��|f�|�|�q|�d�g}	|��}
|��}|s�q�|	�|
|f�q�|�	|	|�dS)Nru	sÿ࿿￿)rrCrVr�r�rZ�r5r6r7�>r8r9r:rrr�)
r@rHr,r3rr�rAr5r�r�)r0r'rA�sampleZwlinesr{�charsr)�lineZrlinesr
rrrr?es&

z!TextIOWrapperTest.multi_line_testcCs�|jtjddd�}|��}|�d�|��}|�d�|��}|�d�|�|��|�|�|��d�|�|��|�|�|��d�|�|��|�|�d�|D]}|�|d�|�t	|j�q�|�|��|�|�
�dS)Nr;r�r!uÿ
r)r#rr�rAr5r@r�r�r�rlrm)r0r'�p0�p1Zp2rHrrr�test_telling{s$



zTextIOWrapperTest.test_tellingc
	Cs�t�}|d}d|}t|�d��}|�t|�t|��d}t|�d��}||}|�tjd��}|�|d�W5QRX|jtjddd��B}|�	|�}	|�|	t
|d��|�|��|�|�|��|�W5QRXdS)	NrVrr��袈
r�rr!r�)
r(rr�r�rr#rr�r5rPrhrAr�)
r0�
chunk_sizeZprefix_sizeZu_prefix�prefixZu_suffix�suffixrHr'r�rrr�test_seeking�s
zTextIOWrapperTest.test_seekingc	Csfd}|�tjd��}|�|�W5QRX|jtjddd��"}|jd|_|��|��W5QRXdS)Ns࿿
r�rr�r!rV)r#rr�r5r%r�rA)r0rr'rrr�test_seeking_too�sz"TextIOWrapperTest.test_seeking_toocs�d�d��fdd�	}dt_z^tjD]\}}}||�q"tjD]8\}}}�t|�d}d|}|d}||||�q<W5dt_XdS)	N�rc	s���tjd�}|�|�|���jtjdd�}�|_|��}|��t|t|�d�D]�}ddt|�|fD]~}�jtjdd�}��	|�|�|d|��|�
�}��	|�|�||||��|�|���	|��||d��|��qnqXdS)zTell/seek to various points within a data stream and ensure
            that the decoded data returned by read() is consistent.r�r�r!rCrZN)r#rr�r5rmr%rPr,rr�rAr@)r�min_posr'Zdecodedr)r�rB�Z
CHUNK_SIZEr0rr�test_seek_and_tell_with_data�s 

zJTextIOWrapperTest.test_seek_and_tell.<locals>.test_seek_and_tell_with_datarCrV�.)r)r�r�r�r�r)r0rUr��_�offsetrNrSrrTrr��s
z$TextIOWrapperTest.test_seek_and_tellcCs�|jtjddd�}|�d�|��|jtjddd�}|�|��d�|��}|�|��d�|��}|�|�|�|��d�|�|��|�|��dS)Nr��euc_jpr!u
AB
うえ
rzAB
uうえ
)	r#rr�r5rmr�r�rAr@)r0r'rIrJrrr�test_multibyte_seek_and_tell�s

z.TextIOWrapperTest.test_multibyte_seek_and_tellcCsx|jtjddd�}|�d�|��}|�d�|�|�|�d�|��|jtjddd�}|�|��d�|��dS)	Nr��euc_jis_2004r!uæ̀�æùruæ̀̀)	r#rr�r5rAr@rmr�r�)r0r'rIrrr�test_seek_with_encoder_state�s



z.TextIOWrapperTest.test_seek_with_encoder_statecCs�d}d}|D]�}|��}|j||d�}|�|�|�|�|�d�|�|��|d�|�d�|�|��|d�|�|��|d�|��qdS)NZ
1234567890)rrrrr r!r!rrV)r�r�r5r@r�rPrr�)r0rr�r"rEr'rrr�test_encoded_writes�s



z%TextIOWrapperTest.test_encoded_writescCs0Gdd�d|j�}|�|��}|�t|j�dS)Nc@seZdZdd�ZdS)z5TextIOWrapperTest.test_unreadable.<locals>.UnReadablecSsdSrwrr7rrrr<sz>TextIOWrapperTest.test_unreadable.<locals>.UnReadable.readableNrwrrrr�
UnReadablesr_)r�r�r�rlrP)r0r_r+rrr�test_unreadable
sz!TextIOWrapperTest.test_unreadablecCs>|�|�d��}d}|�d�}|s$q.||7}q|�|d�dS)NsAA
BBrrCzAA
BB�r�r�rPr��r0r+�readsr'rrr�test_read_one_by_ones

z&TextIOWrapperTest.test_read_one_by_onecCsl|�|�d��}|�|��dddg�|�d�|�|�d�dddg�|�d�|�|�d�ddg�dS)NsAA
BB
CCzAA
zBB
ZCCrrZ)r�r�r�rr@�r0r+rrrrs

z TextIOWrapperTest.test_readlinescCs>|�|�d��}d}|�d�}|s$q.||7}q|�|d�dS)Ns�AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
BrrRz�AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
Brarbrrr�test_read_by_chunk$s

z$TextIOWrapperTest.test_read_by_chunkcCsBdddg}|��}|�|�}|�|�|��|�|��d�dS�Nr
ZcdZefr@)r�r�r�rer�r�r0r%rEr+rrrr]/s


z!TextIOWrapperTest.test_writelinescCsFtdddg�}|��}|�|�}|�|�|��|�|��d�dSrg)rr�r�r�rer�rrhrrrr^7s

z*TextIOWrapperTest.test_writelines_userlistcCsH|�|���}|�t|jdddg�|�t|jd�|�t|jd�dS)NrCrVr�rQ)r�r�r�r�r�rerrrr`?sz'TextIOWrapperTest.test_writelines_errorcCsF|j|�|j�dd�}d}|�d�}|s*q4||7}q|�||j�dS)Nr�r!rrC)r�r�r�rPr�r�rbrrr�test_issue1395_1Es

z"TextIOWrapperTest.test_issue1395_1cCsL|j|�|j�dd�}d|_d}|�d�}|s0q:||7}q |�||j�dS)Nr�r!r�r�r�r�r�r%rPr�r�rbrrr�test_issue1395_2Qs

z"TextIOWrapperTest.test_issue1395_2cCsj|j|�|j�dd�}d|_|�d�}||�d�7}||��7}||��7}||��7}|�||j�dS�Nr�r!r�)r�r�r�r%rPr�r�r��r0r+rcrrr�test_issue1395_3]s
z"TextIOWrapperTest.test_issue1395_3cCsD|j|�|j�dd�}d|_|�d�}||��7}|�||j�dSrlrjrmrrr�test_issue1395_4hs

z"TextIOWrapperTest.test_issue1395_4cCsX|j|�|j�dd�}d|_|�d�}|��}|�d�|�|�|�|�d�d�dS)Nr�r!r�rzBBB
)r�r�r�r%rPrAr@r�)r0r+rcr
rrr�test_issue1395_5ps


z"TextIOWrapperTest.test_issue1395_5cCs2|�|j�}|j|dd�}|�|��|���dS�Nr�r!)r�r�r�r�r=)r0r�r+rrr�test_issue2282zsz TextIOWrapperTest.test_issue2282c
Cs�tj}dD]�}|j|d|d��}|�d�|��}W5QRX|�|d��}|�|��d�|��W5QRX|j|d|d��}|�d�W5QRX|�|d��}|�|��d�|��W5QRXq
dS)	N��	utf-8-sigrrr�r!�aaar�r�xxx�aaaxxx)rr�r#r5rAr�rPr��r0�filename�charsetr'r
rrr�test_append_bom�s
 z!TextIOWrapperTest.test_append_bomc
Cs�tj}dD]�}|j|d|d��}|�d�|��}W5QRX|j|d|d��.}|�|�|�d�|�d�|�d�W5QRX|�|d	��}|�|��d
�|��W5QRXq
dS)Nrsr�r!rur<Zzzzr�bbbr�Zbbbzzz)	rr�r#r5rAr@r�rPr�rxrrr�
test_seek_bom�s



zTextIOWrapperTest.test_seek_bomc
Cs�tj}dD]�}|j|d|d��}|�d�W5QRX|j|d|d��(}|�d�|�d|j�|�d�W5QRX|�|d��}|�|��d	�|��W5QRXq
dS)
Nrsr�r!rurrrvr�rw)	rr�r#r5r@r�r�rPr�)r0ryrzr'rrr�test_seek_append_bom�s
z&TextIOWrapperTest.test_seek_append_bomc	CsX|�tjd��}|�|jd�W5QRX|jtjddd��}|�|jd�W5QRXdS)Nr�r�r�r)r#rr�r�rr�rrr�test_errors_property�sz&TextIOWrapperTest.test_errors_propertyc
s�t���|jtjddd��N���fdd���fdd�td�D�}t�|�j��t�	d	�W5QRXW5QRX|�tj��2���
�}td�D]}|�|�d
|�d�q�W5QRXdS)Nr�rCr�csd|}�����|�dS)N�Thread%03d
)rnr5)rF�text)�eventr'rr�run�sz1TextIOWrapperTest.test_threads_write.<locals>.runcsg|]}tj�|fd��qS)r�rr)r�rrr�s�z8TextIOWrapperTest.test_threads_write.<locals>.<listcomp>r�rr�)
r_r`r#rr�r,r#rbrcrdrPr�r)r0r&ZcontentrFr)r�r'r�r�test_threads_write�s
�z$TextIOWrapperTest.test_threads_writecs�|j|�|j�dd��g���fdd�}|�_|�t�j�|��j�|��j	j�|���|�
�d�|�
�d�dd��_dS)	Nr�r!cs �j�jjg�dd�<t��dSr2)rkr�rlr�rkr+rrrF�sz>TextIOWrapperTest.test_flush_error_on_close.<locals>.bad_flushrrCcSsdSr2rrrrrrG�rMz=TextIOWrapperTest.test_flush_error_on_close.<locals>.<lambda>)r�r�r�rer�rlrmrHrkr�rIr�rr�rrO�s
z+TextIOWrapperTest.test_flush_error_on_closec	Cs�|�|j�}dd�}dd�}||_|j|dd�}||_|�t��}|��W5QRX|�|jj	d�|�
|jjt�|�|jjj	d�|�|j
�d	d
�|_dd
�|_dS)NcSstd��dSr�r�rrrrrF�sz>TextIOWrapperTest.test_close_error_on_close.<locals>.bad_flushcSstd��dSr�r�rrrrr��sz>TextIOWrapperTest.test_close_error_on_close.<locals>.bad_closer�r!r�r�cSsdSr2rrrrrrG�rMz=TextIOWrapperTest.test_close_error_on_close.<locals>.<lambda>cSsdSr2rrrrrrG�rM)r�r�rmr�rer�rlr�rir|r�r�rIrk�r0r�rFr�r+r�rrrr��s
z+TextIOWrapperTest.test_close_error_on_closec	Cs�|�|j�}dd�}dd�}||_|j|dd�}||_|�t��}|��W5QRX|�dt|j	��|�
|j	jt�|�dt|j	j��|�|j
�d	d
�|_dd
�|_dS)NcSst�dSr2r�rrrrrF�szLTextIOWrapperTest.test_nonnormalized_close_error_on_close.<locals>.bad_flushcSst�dSr2r�rrrrr��szLTextIOWrapperTest.test_nonnormalized_close_error_on_close.<locals>.bad_closer�r!r�r�cSsdSr2rrrrrrG�rMzKTextIOWrapperTest.test_nonnormalized_close_error_on_close.<locals>.<lambda>cSsdSr2rrrrrrG�rM)r�r�rmr�rer�r�r�rhrir�r�rIrkr�rrrr��s
z9TextIOWrapperTest.test_nonnormalized_close_error_on_closecCs@|j|�|j�dd�}|��|��|��|�t|j�dSrq)r�r�r�rmr�r�rererrrrP�s
z"TextIOWrapperTest.test_multi_closecCs8|�|�|j��}|�|j|j�|�|j|jd�dSr*)r�rvr�r�rzrAr@rerrrr�
sz!TextIOWrapperTest.test_unseekablec	CsB|j|�|j�dd�}|�|j�}|�t��||_W5QRXdSrq)r�r�r�r�rr�)r0r+rErrrr�	
sz*TextIOWrapperTest.test_readonly_attributescCsZ|�dddg�}|j|ddd�}|�|�d�d�|�|��d	�|�t|�d
dg�dS)NrQr>�ghi
jkl
opq
r�r�r�r�Zabcdzefghi
zjkl
zopq
)rLr�r�rPr�r+�r0r8r+rrr�
test_rawio
s
zTextIOWrapperTest.test_rawiocCsX|�dddg�}|j|dddd�}|�d�|�d	�|�d
�|�d�|j�d�dS)
NrQr>r�r�r�T)r"rwr��1z23
4�5rMs123
45)rLr�r5r�r�r-r�rrr�test_rawio_write_through
s
�


z*TextIOWrapperTest.test_rawio_write_throughcs�gg��G��fdd�d|j�}|��}d}||t|�d�}|j|ddd�}|�d�}|�|�|���|���|�|�	�d�g�|�|d	�|���|�|�	�|d
�dS)Ncs,eZdZ��fdd�Z��fdd�Z�ZS)zBTextIOWrapperTest.test_bufio_write_through.<locals>.BufferedWritercs��d�t�j||�Sr6r�r0r|rJ)rY�flush_calledrrre)
s
zHTextIOWrapperTest.test_bufio_write_through.<locals>.BufferedWriter.flushcs��d�t�j||�Sr6)r3rWr5r�)rY�write_calledrrr5,
s
zHTextIOWrapperTest.test_bufio_write_through.<locals>.BufferedWriter.write)rrrrer5r[r�r�r�rXrr�(
sr�r�rVr�T)r"r�rMr�r�)
r�r�rr�r�r5rIrHr�r)r0r�rYrr�r%r�rr�r�test_bufio_write_through$
s"
�




z*TextIOWrapperTest.test_bufio_write_throughcCs|�g�}|j|ddd�}|�d�|jdd�|�|jd�|�d�|j�d�|�d	�|�d�|j�d
�|jdd�|�|jd�|�d�|��|�d�|j�d
�|��|jdd�|�|jd�|jdd�|��|jdd�|�|jd�dS)Nr�r�r�r�T)r�rMr�Z23r�FZ45ry)	rLr�r5rr�r�r�r-rer�rrr�test_reconfigure_write_throughD
s(



z0TextIOWrapperTest.test_reconfigure_write_throughcCs`|�|�d��}|�t|jd�|�|�d��}|�t|j�|�|�d��}|�t|j�dS)NrrC)r�r�r�r�rPr�r�rrr�test_read_nonbytes[
sz$TextIOWrapperTest.test_read_nonbytesc	CsLt�d�}t�|dd��tjt�d�dd�}W5QRX|�t|j	d�dS)N�rot13�_is_text_encodingT�foor!Zbar)
r�r�rr�r~r�r�r�r�r5)r0r�rorrr�test_illegal_encodere
s
z&TextIOWrapperTest.test_illegal_encodercs��fdd����}��t|jd���}��t|j���}��t|j��fdd�}|d�}��t|jd�|d�}��t|jd�|d�}��t|jd�dS)	Ncs8t�d�}d|_z�j��d�ddd�}W5d|_X|S)N�quopriTFsaaaaaar�r")r�r�r�r�r�)r�ror7rr�_make_illegal_wrapperp
s
�
zETextIOWrapperTest.test_illegal_decoder.<locals>._make_illegal_wrapperrCc
sTG�fdd�d���fdd�}t�d�}t�|d|����W5QR�SQRXdS)NcseZdZ�fdd�ZdS)z^TextIOWrapperTest.test_illegal_decoder.<locals>._make_very_illegal_wrapper.<locals>.BadDecodercs�Sr2rr7��getstate_ret_valrrr��
szgTextIOWrapperTest.test_illegal_decoder.<locals>._make_very_illegal_wrapper.<locals>.BadDecoder.getstateN)rrrr�rr�rr�
BadDecoder�
sr�cs��Sr2r)r�)r�rr�_get_bad_decoder�
szdTextIOWrapperTest.test_illegal_decoder.<locals>._make_very_illegal_wrapper.<locals>._get_bad_decoderr�r�)r�r�rr�)r�r�r�)r�)r�r�r�_make_very_illegal_wrapper�
s
�zJTextIOWrapperTest.test_illegal_decoder.<locals>._make_very_illegal_wrapperr:r)rCrV)r�r�rPr�)r0ror�r)r�r0r�test_illegal_decoderm
s

z&TextIOWrapperTest.test_illegal_decodercKs |jj}dj||d�}td|�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()
            )�iomodrJ�-c)r~rrBr)r0rJr��coderrr�_check_create_at_shutdown�
s�z+TextIOWrapperTest._check_create_at_shutdowncCs>|��\}}}|r&|�|j|���n|�d|�����dS)N�ok)r�r��shutdown_errorr�r��strip�r0�rc�outr�rrr�(test_create_at_shutdown_without_encoding�
sz:TextIOWrapperTest.test_create_at_shutdown_without_encodingcCs6|jddd�\}}}|�|�|�d|�����dS)Nr�r�rr�)r�rIr�r�r�r�rrr�%test_create_at_shutdown_with_encoding�
s
�
z7TextIOWrapperTest.test_create_at_shutdown_with_encodingcCs@td�}|�|d�}t|�����}|�|�d�|�d��dS)NsJust some random string
r�rd)�MemviewBytesIOr��_to_memoryviewrr-r�rPr�)r0rroZ	bytes_valrrr�test_read_byteslike�
sz%TextIOWrapperTest.test_read_byteslikec	CsfGdd�dt�}td�D].}z|j|�dd�Wqtk
rDYqXqdd�|_|j|�dd�}dS)Nc@s$eZdZdd�Zdd�Zdd�ZdS)z,TextIOWrapperTest.test_issue22849.<locals>.FcSsdSr6rr7rrrr<�
rMz5TextIOWrapperTest.test_issue22849.<locals>.F.readablecSsdSr6rr7rrrr8�
rMz5TextIOWrapperTest.test_issue22849.<locals>.F.writablecSsdSr6rr7rrrr=�
rMz5TextIOWrapperTest.test_issue22849.<locals>.F.seekableN)rrrr<r8r=rrrr�F�
sr�r�r�r!cSsdSr*r�r�rrrrG�
rMz3TextIOWrapperTest.test_issue22849.<locals>.<lambda>)�objectr,r�rrA)r0r�r)rorrr�test_issue22849�
s
z!TextIOWrapperTest.test_issue22849c	Cs�d�d�d�d�}|�|�}|j|ddd�}|�|��d�|�|j��|jdd�W5QRX|�|j��|jdd	�W5QRXdS)
N�abcé
r��déf
�utf8r�r�r�r!rv)r�r�r�r�r�r�rzr)r0rr8r+rrr�test_reconfigure_encoding_read�
s
z0TextIOWrapperTest.test_reconfigure_encoding_readcCsT|��}|j|ddd�}|�d�|jdd�|�d�|��|�|��d�dS)	Nr�r�r�zfoo
rtr!r�sfoo
é
)r�r�r5rrer�rr�rrr� test_reconfigure_write_fromascii�
s

z2TextIOWrapperTest.test_reconfigure_write_fromasciicCs�|��}|j|ddd�}|�d�|jdd�|�|��d�|�d�|��|�|��d	�|��}|j|d
dd�}|�d�|jdd�|�d�|��|�|��d
�dS)Nr�r�r�r�r�r!sabc�
r�s
abc�
déf
r��abc
rts	abc
déf
)r�r�r5rr�rrer�rrr�test_reconfigure_write�
s



z(TextIOWrapperTest.test_reconfigure_writecCsd|��}dd�|_d|_|j|ddd�}|�d�|jdd�|�d	�|��|�|��d
�dS)NcSsdSrwrrrrrrGrMzGTextIOWrapperTest.test_reconfigure_write_non_seekable.<locals>.<lambda>r�r�r�r�rtr!r�sabc
déf
)	r�r=r@r�r5rrer�rr�rrr�#test_reconfigure_write_non_seekables


z5TextIOWrapperTest.test_reconfigure_write_non_seekablecCs�|�|��ddd�}|jdd�|�|jd�|�|jd�|�d�|jdd�|�|jd�|�|jd�|jdd	�|�|jd�|�|jd�|�d
�|jddd�|�|jd
�|�d�|�|��d�|�|�	��
�d�dS)Nr�rr�r!�LF
r�rvr�r�CRLF
r�r�r�rzLF
CRLF
s	LF
CRLF
)r�r�rr�r"rr5r@rPr�rrerrr�test_reconfigure_defaultss"


z+TextIOWrapperTest.test_reconfigure_defaultscCs�|�d�}|j|ddd�}|jdd�|�|��d�|�d�}|j|ddd�}|jdd�|�|��d�|�d�}|j|dd	d�}|jdd�|�|��d
�|�d�}|j|ddd�}|jd	d�|�|��d�|�d
�}|j|dd	d�}|jdd�|�|��d�|j|��dd	d�}|jdd�|�d�|jdd�|�d�|jdd�|�d�|jd	d�|�d�|jdd�|�d�dtjd}|�|���	��
d�|�dS)NsCR
EOFr�r�rvzCR
rzCR
s	CR
LF
EOFrzCR
LF
s	LF
CR
EOFzLF
CR
sCR
CRLF
EOFr�z	CR
CRLF
zlinesep
r�r�r-zLF
LF
CR
CRLF
)r�r�rr�r�r5r�r-r�rr�)r0r8r+r�rrr�test_reconfigure_newline&sB









z*TextIOWrapperTest.test_reconfigure_newlinecCsb|j|�d�dd�}|�d�|��|��|j|�d�dd�}|�d�|�d�|��dS)Nstestr�r!rCr�)r�r�rPrAr5r�rrr�test_issue25862Js


z!TextIOWrapperTest.test_issue25862N)Urrrr�r�r�r�r�r�r�r�rrr7r8r�r^�	utf8_moderrr�rrrrr'r,r0rr�r�rCr?rKrPrQr�rZr]r^r`rdrrfr]r^r`rirkrnrorprrr{r}r~r��
no_tracingr�rOr�r�rPr�r�r�r�r�r�r�r�r�r�Zrequires_type_collectingr�r�r�r�r�r�r�r�r�r�r�rrrrr��	s�	

		*/

	



 
(
	

$r�cs,eZdZdZ�fdd�Z�fdd�Z�ZS)r�zOA BytesIO object whose read method returns memoryviews
       rather than bytescstt��|��Sr2)r�rWr|�r0Zlen_rXrrr|ZszMemviewBytesIO.read1cstt��|��Sr2)r�rWrPr�rXrrrP]szMemviewBytesIO.read)rrrrIr|rPr[rrrXrr�Vsr�cCs:t�d�}t|�t|�|j}|�|d|��t|�S)z6Convert bytes-object *buf* to a non-trivial memoryviewr)N)rr�itemsize�	frombytesr)rEZarr�idxrrrr�`s
r�c@s<eZdZeZdZdd�Zdd�Zdd�Zdd	�Zd
d�Z	dS)
�CTextIOWrapperTestz,RuntimeError: could not find io module statecCsb|�d�}|�|d�}|�|�}|jt|j|dd�|�t|j�|j�|j�}|�tt	|�dS)Nr�rr�rv)
r�r�r�r�r�r1rPr�rr�r�rrrr2ms

z&CTextIOWrapperTest.test_initializationc	Cs�t�dtf��Pt�tjd�}|�|�}|j|dd�}|�d�||_	t
�|�}~t��W5QRX|�
|�|�|�tjd��}|�|��d�W5QRXdS)Nrr�r�r!Z456defr�s456def)rrrr~r�r�r�r�r5r�r:r;rr<r#r�rP)r0rYr
ror=r'rrrr>ws


z*CTextIOWrapperTest.test_garbage_collectioncCsjtd�D]T}|�|��|���}|j|dd�}|�|��|���}|j|dd�}||_||_qt��dS)Nrr�r!)r,r�rLr�Zbuddyrr)r0r)Zb1�t1Zb2�t2rrr�!test_rwpair_cleared_before_textio�sz4CTextIOWrapperTest.test_rwpair_cleared_before_textioc	Cs0|j|��dd�}|�t��
|`W5QRXdSrq)r�r�r�rr%r�rrr� test_del__CHUNK_SIZE_SystemError�sz3CTextIOWrapperTest.test_del__CHUNK_SIZE_SystemErrorc	s�d�G�fdd�d|j�}|�}|j|dd�}|j�|�d�|�d�|�g|j�|�t��|�d�d	�W5QRX|�d
g|j�|�d�|�d��|�d
dd
�g|j�dS)Nr�cseZdZ��fdd�Z�ZS)z<CTextIOWrapperTest.test_internal_buffer_size.<locals>.MockIOcst|��krt�t��|�Sr2)rr�rWr5rr)rYrMrrr5�szBCTextIOWrapperTest.test_internal_buffer_size.<locals>.MockIO.write)rrrr5r[r�rMrXr�MockIO�sr�r�r!r_r=r�rCr@Zghir<r�)rLr�r%r5r�r-r�r�)r0r�rErorr�r�test_internal_buffer_size�s


z,CTextIOWrapperTest.test_internal_buffer_sizeN)
rrrr~r�r2r>r�r�r�rrrrr�is
r�c@seZdZeZdZdS)�PyTextIOWrapperTestz$LookupError: unknown encoding: asciiN)rrrr�r~r�rrrrr��sr�c@s4eZdZdd�Zdd�Zdd�Zdd�Zd	d
�ZdS)�IncrementalNewlineDecoderTestcs��fdd�}|dd�|dd�|dd�|dd�|dd�|dd�|dd�|dd��jt�jd	d
d����|dd
�|dd�|d	d
d
d�|dd
d
d�|dd�|dd�|dd�|dd�|dd
�|dd�|dd�|dd�|dd
�|dd�|dd
�dS)NcsB���}���j|f|�|���|����j|f|�|�dSr2)r�r�r�r�)r
r�rJr���decoderr0rr�
_check_decode�s
zPIncrementalNewlineDecoderTest.check_newline_decoding_utf8.<locals>._check_decodes袈u袈��r����rMT)r�r�r�r(r�z
a�

z

s
as袈
rLs袈
)r��UnicodeDecodeErrorr�r�)r0r�r�rr�r�check_newline_decoding_utf8�s4



















z9IncrementalNewlineDecoderTest.check_newline_decoding_utf8csg�|dk	r*t�|������fdd�}nd���fdd�}|��jd�|d�|��jd�|d�|��jd�|d�|��jd�|d	�|��jd
�|d�|�d���d����d	}�dk	r�����|�}|���|�d	�|��jd�dS)
Ncs*��|�D]}����t|g���q
dSr2)r�r3r�r)r�r
�r��encoderr�rr�_decode_bytewise�szNIncrementalNewlineDecoderTest.check_newline_decoding.<locals>._decode_bytewisecs|D]}����|��qdSr2)r3r�)r�r')r�r�rrr��szabc

r�z
abc)r�r�zabc
r_)rr�r�rzabc

abcabc
abcabc)r��getincrementalencoderr��newlinesr�r�r�r�)r0r�r"r�r�rr�r�check_newline_decoding�s0
z4IncrementalNewlineDecoderTest.check_newline_decodingcCspd}|D].}|ot�|��}|j|dd�}|�||�qt�d��}|j|dd�}|�|�|�t|jd�dS)N)	Nr�r rrrrr r!T��	translater�r:)r��getincrementaldecoder�IncrementalNewlineDecoderr�r�r�r�r�)r0r$rAr�rrr�test_newline_decoder	s
z2IncrementalNewlineDecoderTest.test_newline_decodercs<�fdd�}�jddd�}||��jddd�}||�dS)NcsR��|jd���|�d�d���|jd���|�d�d���|jd�dS)Nuഀu਀)r�r�r�)�decr7rr�_checks
z@IncrementalNewlineDecoderTest.test_newline_bytes.<locals>._checkFr�T)r�)r0r�r�rr7r�test_newline_bytess
z0IncrementalNewlineDecoderTest.test_newline_bytescCs\dD]&}t�d��}|�||�}|�|�qt�d��}|j|dd�}|�|�d�d�dS)N)rmr�rCrVr�rr�r�z

)r�r�r�r�r�r�)r0r�r�rrr�test_translate'sz,IncrementalNewlineDecoderTest.test_translateN)rrrr�r�r�r�r�rrrrr��s
*!
r�c@seZdZdS)�CIncrementalNewlineDecoderTestNrrrrrr�1sr�c@seZdZdS)�PyIncrementalNewlineDecoderTestNrrrrrr�4sr�c@s�eZdZdd�Zdd�Zdd�Zdd�Zd	d
�Zdd�Zd
d�Z	dd�Z
dd�Zdd�Zdd�Z
dd�Zdd�Zdd�Zdd�Zdd �Zd!d"�Ze�eed#�d$�d%d&��Zd'd(�Zd)d*�Zd+d,�Zd-S).�
MiscIOTestcCst�tj�dSr2r�r7rrrr�<szMiscIOTest.tearDowncCs||jjD]n}t|j|d�}|�||�|dkr2qqd|��ksF|dkrZ|�t|t�|�q|�d�s|�t||j	��qdS)N)r#�	open_code�errorrzZSEEK_)
r~�__all__rr�lowerrH�
issubclassrr�r�)r0r�rrrr�test___all__?s
zMiscIOTest.test___all__c	Csh|jtjddd�}|�|jd�|��t�dtf��|�tjd�}W5QRX|�|jtj�|�|j	jtj�|�|j	j
jtj�|�|jd�|�|j	jd�|�|j	j
jd�|��|�tjd�}|�|jd�|�|j	jd�|�|j	j
jd�|j|��dd	d
�}|�|jd�|�|j
jd�|�|j|���|�|j
j|���|��|��dS)Nr�rr�r�Ur�r;r�Fr/)r#rr�r�r�rmrr�r�r�r8r;)r0r'�grrr�test_attributesJs.zMiscIOTest.test_attributescCsNt��\}}|�tj|�|�|d�}|�|j�tjdkrJ|�|���dS)Nr�win32)	r�r�r�rmr#r�r�rIr=)r0rr�r'rrr�test_open_pipe_with_appendfs
z%MiscIOTest.test_open_pipe_with_appendcCsddiddiddd�ddd�ddd�ddidd	iddd�ddd�d	dd�dd
iddid
dd�d
dd�ddd�fD�]�}|jtjf|�}|��|�t|j�|�t|j�|�t|j�|�t|j	�t
|d�r�|�t|jd�|�t|j�t
|d
��r|�t|j
d�|�t|j
�t
|d��r2|�t|j�t
|d��rR|�t|jtd��t
|d��rr|�t|jtd��|�t|j�|�t|j�|�t|jd�|�t|jd�|�t|j�|�t|j�|�t|jd|dk�r�dnd�|�t|jg�|�tt|�qpdS)Nr�r�r�rC�r�r�rVrrr�r;rr�r|r�r�rGr�r
rMr)r#rr�rmr�r�rer;r��__iter__r\r�rPr|r�rGr�r�r�rr@rArHr5r�r�)r0rJr'rrr�test_io_after_closeqsZ�


�zMiscIOTest.test_io_after_closecCsXGdd�dt�}|d�}|�d|�}||_||_t�|�}~~t��|�|�|�dS)Nc@seZdZdS)z*MiscIOTest.test_blockingioerror.<locals>.CNrrrrr�C�sr�rrC)	rhr�r
r'r:r;rrr<)r0r�r'r
r=rrr�test_blockingioerror�s
zMiscIOTest.test_blockingioerrorcCsD|�|jtj�|�|jtj�|�|jtj�|�|jtj�dSr2)r�r�r_�ABCMetar�r�r�r7rrr�	test_abcs�szMiscIOTest.test_abcsc	Cs�|jtjddd��>}|�||j�|�||j�|�||j�|�||j�W5QRX|�tjd��>}|�||j�|�||j�|�||j�|�||j�W5QRX|�tjd��>}|�||j�|�||j�|�||j�|�||j�W5QRXdS�Nr�rr�r�)	r#rr�r�r�r�ZassertNotIsInstancer�r�)r0Z	abcmoduler'rrr�_check_abc_inheritance�sz!MiscIOTest._check_abc_inheritancecCs|�|�dSr2)r�r7rrr�test_abc_inheritance�szMiscIOTest.test_abc_inheritancecCs|�t�dSr2)r�r~r7rrr�test_abc_inheritance_official�sz(MiscIOTest.test_abc_inheritance_officialc	OsPt||�}t|�}|�t��}d}t��W5QRX|�|t|jj	d��dSr*)
r#r�ZassertWarnsrrrr�rh�warningr|)r0r|rJr'rrkrrr�_check_warn_on_dealloc�s
z!MiscIOTest._check_warn_on_dealloccCs2|jtjddd�|�tjd�|�tjd�dSr�)rrr�r7rrr�test_warn_on_dealloc�szMiscIOTest.test_warn_on_deallocc	s�g��fdd�}|�|�t��\}}�||f7�|j|f|�|�t��\}}�||f7�t�|��t|f|�ddi|��W5QRXdS)NcsN�D]D}zt�|�Wqtk
rF}z|jtjkr6�W5d}~XYqXqdSr2)r�rmrl�errno�EBADF)rNr��fdsrr�cleanup_fds�sz9MiscIOTest._check_warn_on_dealloc_fd.<locals>.cleanup_fdsr0F)r�r�r�rrrsr#)r0r|rJr	rr�rrr�_check_warn_on_dealloc_fd�s
z$MiscIOTest._check_warn_on_dealloc_fdcCs&|jddd�|�d�|�d�dS)Nr�rr�r)r
r7rrr�test_warn_on_dealloc_fd�s
z"MiscIOTest.test_warn_on_dealloc_fdcCs�ddiddiddd�ddiddiddd�ddidd	id	dd�f	D]F}ttjd
�D]2}|jtjf|��}|�ttj||�W5QRXqRq@dS)Nr�r�r�rr�rr�r;rrC)	r,�pickle�HIGHEST_PROTOCOLr#rr�r�r��dumps)r0rJ�protocolr'rrr�
test_pickling�s�zMiscIOTest.test_picklingcCs|�d�dS)Ni@��_test_nonblock_pipe_writer7rrr�test_nonblock_pipe_write_bigbufsz*MiscIOTest.test_nonblock_pipe_write_bigbufcCs|�d�dS)Nr�rr7rrr�!test_nonblock_pipe_write_smallbufsz,MiscIOTest.test_nonblock_pipe_write_smallbuf�set_blockingz(os.set_blocking() required for this testc
Csg}g}t��\}}t�|d�t�|d�|j|dd|d�}|j|dd|d�}|��||��jdD]�}z<d}	t|	dd	g�|}
|�|
�|�|
�|	d
7}	qnWqd|jk
�r.}zh|�|j	dt
j�|�|j	d|j�|dd|j�|d<|�|�
��d
}
|�|
�|�|
�W5d}~XYqdXqdz|��W�q�Wnj|jk
�r�}zH|�|j	dt
j�|�|j	d|j�|�|jd�|�|�
��W5d}~XYnX�q2|t|j
d�7}W5QRXW5QRXd�|�d�|�}}|�||�|�|j�|�|j�dS)NFr�T)r�r0r�r�)r��Ii�r��arCrVr�sBLOCKEDrM)r�r�rr#rr3r5r�r�r|r�EAGAINrSrPre�iterr�rHrk)r0r�sentZreceivedrr�ZrfZwfr$r)r�rrrrrsH



$$z$MiscIOTest._test_nonblock_pipe_writec	Cs2|�tjd��W5QRX|�t|jtjd�dS)Nr�r�)r#rr�r��FileExistsErrorr7rrr�test_create_fail?s
zMiscIOTest.test_create_failc	CsR|�tjd��}|�d�W5QRX|�tjd��}|�d|���W5QRXdS)N�xbrlr�r'r�rrr�test_create_writesEszMiscIOTest.test_create_writescCs|�t|jtjd�dS)Nzrwax+r1r7rrr�test_open_allargsLszMiscIOTest.test_open_allargsN)rrrr�r�r�r�r�r�r�r�rrrrr
rrrrr7Z
skipUnlessr\r�rrrr rrrrr�:s0/
�
2r�c@s0eZdZeZdd�Zdd�Zdd�Zdd�Zd	S)
�CMiscIOTestcCs6Gdd�d|jj�}|�}td�}|�t|j|�dS)Nc@seZdZddd�ZdS)z<CMiscIOTest.test_readinto_buffer_overflow.<locals>.BadReaderr�cSsddS)Nr�i@BrrOrrrrPWszACMiscIOTest.test_readinto_buffer_overflow.<locals>.BadReader.readN)r�rQrrrr�	BadReaderVsr"rV)r~r�r�r�r�rG)r0r"r�r
rrr�test_readinto_buffer_overflowTsz)CMiscIOTest.test_readinto_buffer_overflowcCs\d�t��}td|�\}}|j��}|jdkrHd�t��}|�||�n|�|�d��dS)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�rz�Fatal Python error: could not acquire lock for <(_io\.)?BufferedWriter name='<{stream_name}>'> at interpreter shutdown, possibly due to daemon threadsz.!)	�
format_map�localsrr�r�r�r�rIr�)r0Zstream_namer�rsrWr��patternrrr�&check_daemon_threads_shutdown_deadlock]s�

�z2CMiscIOTest.check_daemon_threads_shutdown_deadlockcCs|�d�dS)N�stdout�r'r7rrr�,test_daemon_threads_shutdown_stdout_deadlock�sz8CMiscIOTest.test_daemon_threads_shutdown_stdout_deadlockcCs|�d�dS)N�stderrr)r7rrr�,test_daemon_threads_shutdown_stderr_deadlock�sz8CMiscIOTest.test_daemon_threads_shutdown_stderr_deadlockN)rrrr~r#r'r*r,rrrrr!Qs
	(r!c@seZdZeZdS)�PyMiscIOTestN)rrrr�r~rrrrr-�sr-�ntz%POSIX signals required for this test.c@s�eZdZdd�Zdd�Zdd�Zdd�Zd	d
�Zdd�Zd
d�Z	e
jdd��Zdd�Z
dd�Zdd�Zdd�Zdd�Zdd�Zdd�Zdd �Zd!S)"�SignalsTestcCst�tj|j�|_dSr2)�signal�SIGALRM�alarm_interrupt�oldalrmr7rrrr��szSignalsTest.setUpcCst�tj|j�dSr2)r0r1r3r7rrrr��szSignalsTest.tearDowncCsdddSrBr)r0�sig�framerrrr2�szSignalsTest.alarm_interruptc
sfg���fdd�}tj|d�}d|_t��\�}d|d<|tjt|�d}z�|jj
|f|�}ttd	�r�t�tjtjg�|��t�tjtjg�n|��t�d�z|�t|j|�W5t�d
�|��X��t��d��|��|d
d�|dd�g�W5t�|�t���z|��Wn4t	k
�r^}	z|	j
t
jk�rN�W5d}	~	XYnXXdS)z�Check that a partial write, when it gets interrupted, properly
        invokes the signal handler, and bubbles up the exception raised
        in the latter.cst��d�}��|�dSri)r�rPr3)r��r�read_resultsrrr��sz2SignalsTest.check_interrupted_write.<locals>._readrTFr0rCN�pthread_sigmaskrrV)r_r��daemonr�r�r�
PIPE_MAX_SIZErrmrlrrr~r#r\r0r8�	SIG_BLOCKr1r��SIG_UNBLOCK�alarmr�r�rr5r3rPr�)
r0�itemr�
fdopen_kwargsr�ror��
large_data�wiorrr6r�check_interrupted_write�s8



$

z#SignalsTest.check_interrupted_writecCs|jddddd�dS)Nr�r�rr��rBr7rrr�!test_interrupted_write_unbuffered�sz-SignalsTest.test_interrupted_write_unbufferedcCs|jdddd�dS�Nr�r��r�rCr7rrr�test_interrupted_write_buffered�sz+SignalsTest.test_interrupted_write_bufferedcCs|jddddd�dS)N�xyr�r�r��r�r"rCr7rrr�test_interrupted_write_text�sz'SignalsTest.test_interrupted_write_textc		s���fdd�}t�tj|�t��\}}|jj|f|��z�t�d�|�t	t
f��<}td�D]}������
�q\t�|t��d�qTW5QRX|j}t|t
�r�|�t|��d�t|��W5t�d����t�|�XdS)Ncs����dddSrB)r5)r|�rrArr�on_alarm�s
z3SignalsTest.check_reentrant_write.<locals>.on_alarmrrCr�zreentrant call)r0r1r�r�r~r#r=rmr�rr�r,r5rerPrrir�rHrhr�)	r0rr?rLrr�rkr)r�rrKr�check_reentrant_write�s"


 

z!SignalsTest.check_reentrant_writecCs|jddd�dSrE�rMr7rrr�test_reentrant_write_buffered�sz)SignalsTest.test_reentrant_write_bufferedcCs|jdddd�dS)NrHr�r�rIrNr7rrr�test_reentrant_write_text�sz%SignalsTest.test_reentrant_write_textc	s�t��\}�d|d<�fdd�}t�tj|�z@|jj|f|�}t��d�t�d�|�	||�
d��d	�W5t�d�|��t���t�|�Xd
S)z�Check that a buffered read, when it gets interrupted (either
        returning a partial result or EINTR), properly invokes the signal
        handler and retries if the latter returned successfully.Fr0cst��d�dS)Nsbar)r�r5�r4r5�r�rr�
alarm_handlersz?SignalsTest.check_interrupted_read_retry.<locals>.alarm_handlerrr�rCr�ZfoobarN)r�r�r0r1r=rmr~r#r5r�rP)r0r�r?rrSZriorrRr�check_interrupted_read_retry�s


z(SignalsTest.check_interrupted_read_retrycCs|jdd�dd�dS)NcSs
|�d�S)Nr�)r�r�rrrrGrMzBSignalsTest.test_interrupted_read_retry_buffered.<locals>.<lambda>r�rF�rTr7rrr�$test_interrupted_read_retry_buffereds
�z0SignalsTest.test_interrupted_read_retry_bufferedcCs|jdd�dd�dS)NcSs|Sr2rr�rrrrGrMz>SignalsTest.test_interrupted_read_retry_text.<locals>.<lambda>rrFrUr7rrr� test_interrupted_read_retry_texts
�z,SignalsTest.test_interrupted_read_retry_textcs\t�d��tj}t��\�}d|d<g�d�d������fdd�}tj|d��d�_�fd	d
�}�fdd��||}t�tj	|�zl|jj|f|�}t�
d�|�|�}
|�||
�|��d����|���|�|tdd��D���W5t�
d
�d�t�|�t���z|��Wn4tk
�rT}	z|	j
t
jk�rD�W5d}	~	XYnXXdS)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.�selectFr0Nc
shz<�s:����gggd�dkrt��d�}��|�qqWn&tk
rb}z|�W5d}~XYnXdS)Ng�?rr�)rXr�rPr3�
BaseException)r�r�)r�rr7rX�write_finishedrrr�-sz8SignalsTest.check_interrupted_write_retry.<locals>._readrTcst�tj��t�d�dSri)r0r1r=rQ)�alarm2rr�alarm18sz9SignalsTest.check_interrupted_write_retry.<locals>.alarm1cs���dSr2)r�rQ)rorrr[;sz9SignalsTest.check_interrupted_write_retry.<locals>.alarm2rrCcss|]}t|�VqdSr2)rrrrr�	<genexpr>Psz<SignalsTest.check_interrupted_write_retry.<locals>.<genexpr>)r�
import_moduler:r�r�r_r�r9r0r1r=rmrlrrr~r#r5r�rer�r<�sum)r0r>r?r$r�r�r\r@rArrTr)r[r�rr7rXrorZr�check_interrupted_write_retrysB
	





z)SignalsTest.check_interrupted_write_retrycCs|jddd�dS)Nr�r�rF�r`r7rrr�%test_interrupted_write_retry_buffered_sz1SignalsTest.test_interrupted_write_retry_bufferedcCs|jdddd�dS)Nr�r�r�rIrar7rrr�!test_interrupted_write_retry_textbsz-SignalsTest.test_interrupted_write_retry_textN)rrrr�r�r2rBrDrGrJrr�rMrOrPrTrVrWr`rbrcrrrrr/�s"4
Dr/c@seZdZeZdS)�CSignalsTestN)rrrr~rrrrrdfsrdc@seZdZeZdZdZdS)�
PySignalsTestN)rrrr�r~rOrPrrrrreisrec
s tttttttttt	t
ttt
ttttttf}ttttttttf}tjdg}dd�|D�}dd�|D�}t��|��fdd�|D��|��fdd�|D��t j!|d<|D]Z}|j"�#d	�r�|�$�D]\}}t%|||�q�q�|j"�#d
�r�|�$�D]\}}t%|||�q�q�t&�'dd�|D��}	|	S)
Nr�cSsi|]}|tt|��qSr)rr~�rr�rrr�
<dictcomp>�szload_tests.<locals>.<dictcomp>cSsi|]}|tt|��qSr)rr�rfrrrrg�sc3s"|]}|j�d|jfVqdS)r�N�rr�Zglobsrrr]�szload_tests.<locals>.<genexpr>c3s"|]}|j�d|jfVqdS)�PyNrhrrirrr]�sr#r�rjcSsg|]}t�|��qSr)r7Z	makeSuite)rr�rrrr�szload_tests.<locals>.<listcomp>)(r�r�r�r.r:rqrrr�r�r�r�r�r�r�r�r�r!r-rdrerLrTrprhr�rvr)r^r~r��globalsr
r��OpenWrapperrr�r/�setattrr7Z	TestSuite)
r|r�ZmocksZall_membersZc_io_nsZpy_io_nsr�r�rZsuiterrir�
load_testsrsR��
rn�__main__)urIr_rrrr�rr r0r�Z	sysconfigr_rcr7r�r:�collectionsrr�	itertoolsrrr�rZtest.support.script_helperrrZtest.supportr	r�r~Z_pyior�r�ImportErrorrZ	StructurerZget_config_varZ_cflagsZ_config_argsr9r\r^�dev_moder�r(r)r�rJrKrLrRrSrTr\r]r^rfrgrhrnrorpr�rtrurvr}rr�r�r�ZTestCaser�r�r�r�r�r�r�r�r.r:r;rqrrrsr�r�r�r�r�r�r��registerr�r�r�r�r�r�r�r�r�r�r�r!r-r8r�r/rdrernr�mainrrrr�<module>s�
�8
	
0:.#3(0QfW+k
	Nu;V	%


F1le Man4ger