HEX
Server: Apache
System: Linux zacp120.webway.host 4.18.0-553.50.1.lve.el8.x86_64 #1 SMP Thu Apr 17 19:10:24 UTC 2025 x86_64
User: govancoz (1003)
PHP: 8.3.26
Disabled: exec,system,passthru,shell_exec,proc_close,proc_open,dl,popen,show_source,posix_kill,posix_mkfifo,posix_getpwuid,posix_setpgid,posix_setsid,posix_setuid,posix_setgid,posix_seteuid,posix_setegid,posix_uname
Upload Files
File: //usr/local/lib/python3.10/test/__pycache__/test_io.cpython-310.opt-1.pyc
o

�i���@s�dZddlZddlZddlZddlZddlZddlZddlZddlZddl	Z	ddl
Z
ddlZddlZddl
Z
ddlZddlZddlmZmZddlmZmZddlmZddlmZmZmZddlmZddlmZdd	lmZdd
lm Z ddlm!Z!ddl"m#Z#ddl$Z$ddl%Z%ddl&Z'zddl(Z(Wn
e)y�d
d�Z*Ynwdd�Z*Gdd�de(j+�Z,e-e	d�p�e	j.j/Z0dd�Z1Gdd�d�Z2Gdd�de2e%j3�Z4Gdd�de2e'j3�Z5Gdd�de2�Z6Gdd�de6e%j3�Z7Gdd �d e6e'j3�Z8Gd!d"�d"e6�Z9Gd#d$�d$e9e%j3�Z:Gd%d&�d&e9e'j3�Z;Gd'd(�d(e6�Z<Gd)d*�d*e<e%j3�Z=Gd+d,�d,e<e'j3�Z>Gd-d.�d.e6�Z?Gd/d0�d0e?e%j3�Z@Gd1d2�d2e?e'j3�ZAGd3d4�d4�ZBGd5d6�d6eBe%jC�ZDGd7d8�d8eBe'jC�ZEGd9d:�d:�ZFGd;d<�d<eFe%jC�ZGGd=d>�d>eFe'jC�ZHGd?d@�d@�ZIGdAdB�dBeIe%j3�ZJGdCdD�dDeIe'j3�ZKGdEdF�dFe
jL�ZMGdGdH�dHeM�ZNGdIdJ�dJeM�ZOejPGdKdL�dLe
jL��ZQGdMdN�dN�ZRGdOdP�dP�ZSGdQdR�dRe
jLeR�ZTGdSdT�dTeTeS�ZUGdUdV�dVeT�ZVGdWdX�dXe
jLeR�ZWGdYdZ�dZeWeS�ZXGd[d\�d\eW�ZYGd]d^�d^e
jL�ZZGd_d`�d`eZ�Z[Gdadb�dbeZ�Z\Gdcdd�ddeTeW�Z]Gdedf�dfe]eS�Z^Gdgdh�dhe]�Z_Gdidj�dje$j`�Zadkdl�ZbGdmdn�dne
jL�ZcGdodp�dpe
jL�ZdGdqdr�dre%jC�Zedsdt�ZfGdudv�dved�ZgGdwdx�dxed�ZhGdydz�dze
jL�ZiGd{d|�d|ei�ZjGd}d~�d~ei�ZkGdd��d�e
jL�ZlGd�d��d�el�ZmGd�d��d�el�Zne
�oejpd�kd��Gd�d��d�e
jL��ZqGd�d��d�eq�ZrGd�d��d�eq�Zsd�d��Zteud�k�r�e
�v�dSdS)�zUnit 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)�FakePathcOst�dt|i|���S)N�b)�array�bytes)�pos�kw�r�)/usr/local/lib/python3.10/test/test_io.py�	byteslike8�rcOs>t|i|��}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)rr�data�objrrrr;s
c@�eZdZdS)rN��__name__�
__module__�__qualname__rrrrrB�rZgettotalrefcountcCs8ttddd��}|jWd�S1swYdS)z(Get the default TextIOWrapper chunk size�r�latin-1��encodingN)�open�__file__�_CHUNK_SIZE��frrr�_default_chunk_sizeJs$�r0c@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__Ts

zMockRawIOWithoutRead.__init__cCs|j�t|��t|�S�N)r5�appendrr�r8rrrr�writeZszMockRawIOWithoutRead.writecC�dS�NTr�r8rrr�writable^�zMockRawIOWithoutRead.writablecCr>�N�*rr@rrr�filenoarBzMockRawIOWithoutRead.filenocCr>r?rr@rrr�readabledrBzMockRawIOWithoutRead.readablecCr>r?rr@rrr�seekablegrBzMockRawIOWithoutRead.seekablecCr>r2r�r8r�whencerrr�seekjrBzMockRawIOWithoutRead.seekcCr>r2rr@rrr�tellmrBzMockRawIOWithoutRead.tellcCs�|jd7_t|�}z|jd}Wnty#|jd7_YdSw|dur.|jd=dSt|�}t|�|krD|jd=||d|�<|S|d|�|dd�<||d�|jd<|S�N�r)r6rr4�
IndexErrorr7)r8�bufZmax_lenr�nrrr�readintops&�zMockRawIOWithoutRead.readintoNcCs|Sr:r)r8rrrr�truncate�rBzMockRawIOWithoutRead.truncate)rr:)r#r$r%�__doc__r9r=rArErFrGrJrKrQrRrrrrr1Ps
r1c@r!)�CMockRawIOWithoutReadNr"rrrrrT�r&rTc@r!)�PyMockRawIOWithoutReadNr"rrrrrU�r&rUc@seZdZddd�ZdS)�	MockRawIONcCs8|jd7_z|j�d�WS|jd7_YdS)NrMr�)r6r4�popr7�r8rPrrr�read�szMockRawIO.readr:�r#r$r%rZrrrrrV�srVc@r!)�
CMockRawIONr"rrrrr\�r&r\c@r!)�PyMockRawIONr"rrrrr]�r&r]csFeZdZ�fdd�Zd�fdd�	Zdd�Zdd	�Z�fd
d�Z�ZS)
�MisbehavedRawIOc�t��|�dS�N�)�superr=r<��	__class__rrr=��zMisbehavedRawIO.writeNcr_r`)rbrZrYrcrrrZ�rezMisbehavedRawIO.readcCr>)Ni����rrHrrrrJ�rBzMisbehavedRawIO.seekcCr>)Ni8���rr@rrrrK�rBzMisbehavedRawIO.tellcst��|�t|�dS)N�)rbrQr)r8rOrcrrrQ�szMisbehavedRawIO.readintor:)	r#r$r%r=rZrJrKrQ�
__classcell__rrrcrr^�sr^c@r!)�CMisbehavedRawIONr"rrrrrh�r&rhc@r!)�PyMisbehavedRawIONr"rrrrri�r&rics$eZdZ�fdd�Zdd�Z�ZS)�SlowFlushRawIOcst���t��|_dSr:)rbr9�	threading�Event�in_flushr@rcrrr9��
zSlowFlushRawIO.__init__cCs|j��t�d�dS)Ng�?)rm�set�time�sleepr@rrr�flush�rnzSlowFlushRawIO.flush)r#r$r%r9rrrgrrrcrrj�srjc@r!)�CSlowFlushRawIONr"rrrrrs�r&rsc@r!)�PySlowFlushRawIONr"rrrrrt�r&rtc@seZdZdZdd�ZdS)�CloseFailureIOrcCs|jsd|_t�dS�NrM��closed�OSErrorr@rrr�close�s�zCloseFailureIO.closeN)r#r$r%rxrzrrrrru�sruc@r!)�CCloseFailureIONr"rrrrr{�r&r{c@r!)�PyCloseFailureIONr"rrrrr|�r&r|cs6eZdZ�fdd�Zd�fdd�	Z�fdd�Z�ZS)	�
MockFileIOcsg|_t��|�dSr:)�read_historyrbr9�r8rrcrrr9�szMockFileIO.__init__Ncs2t��|�}|j�|durd�|St|��|Sr:)rbrZr~r;r)r8rP�resrcrrrZ�s

�zMockFileIO.readcst��|�}|j�|�|Sr:)rbrQr~r;)r8rr�rcrrrQ�szMockFileIO.readintor:)r#r$r%r9rZrQrgrrrcrr}�sr}c@r!)�CMockFileIONr"rrrrr��r&r�c@r!)�PyMockFileIONr"rrrrr��r&r�c@s,eZdZdd�Zdd�Zdd�Zdd�Zd	S)
�MockUnseekableIOcCr>�NFrr@rrrrG�rBzMockUnseekableIO.seekablecG�
|�d���Nznot seekable��UnsupportedOperation�r8�argsrrrrJ��
zMockUnseekableIO.seekcGr�r�r�r�rrrrK�r�zMockUnseekableIO.tellcGr�r�r�r�rrrrR�r�zMockUnseekableIO.truncateN)r#r$r%rGrJrKrRrrrrr��s
r�c@�eZdZejZdS)�CMockUnseekableION)r#r$r%�ior�rrrrr���
r�c@r�)�PyMockUnseekableION)r#r$r%�pyior�rrrrr��r�r�c@sNeZdZdd�Zdd�Zdd�Zdd�Zd	d
�Zddd
�Zdd�Z	dd�Z
dS)�MockNonBlockWriterIOcCsg|_d|_dSr:)r5�
_blocker_charr@rrrr9s
zMockNonBlockWriterIO.__init__cCsd�|j�}g|jdd�<|S�NrW)�joinr5)r8�srrr�pop_writtensz MockNonBlockWriterIO.pop_writtencCs
||_dS)z'Block when a given char is encountered.N)r�)r8�charrrr�block_on
s
zMockNonBlockWriterIO.block_oncCr>r?rr@rrrrFrBzMockNonBlockWriterIO.readablecCr>r?rr@rrrrGrBzMockNonBlockWriterIO.seekablercCr>r2rrHrrrrJszMockNonBlockWriterIO.seekcCr>r?rr@rrrrArBzMockNonBlockWriterIO.writablecCstt|�}d}|jr0z|�|j�}Wn	tyYnw|dkr+|j�|d|��|Sd|_dS|j�|�t|�S)N���r)rr��index�
ValueErrorr5r;r)r8rrPrrrr=s�zMockNonBlockWriterIO.writeN�r)r#r$r%r9r�r�rFrGrJrAr=rrrrr�s
r�c@r�)�CMockNonBlockWriterION)r#r$r%r��BlockingIOErrorrrrrr�2r�r�c@r�)�PyMockNonBlockWriterION)r#r$r%r�r�rrrrr�5r�r�c@s�eZdZdd�Zdd�Zdd�Zdddd	�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`�Z2dadb�Z3dcS)e�IOTestcC�t�tj�dSr:�r�unlink�TESTFNr@rrr�setUp;rezIOTest.setUpcCr�r:r�r@rrr�tearDown>rezIOTest.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.rfrsHello.�r�rMs	 world


�	s	*********�hra�
��)�assertEqualr=rRrKrJ�	bytearray�assertRaises�	TypeError)r8r/�bufferrrr�	write_opsAs(

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�dSdS)Nrfshellos worlra�d
r��hello world
rMrW�xi����r�sworld�
r�sworld
)rZr�rrQrr�rrJrKr�r��	readinto1)r8r/Zbufferedrrrr�read_opsYs@



�zIOTest.read_opslc	CsPz
|�|�|j�|j�Wnttfy|�d�Ynw|�|��|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�rMrarr�)
r�rJ�LARGE�
OverflowErrorr��skipTestrKr=rRrZ�r8r/rrr�large_file_ops|s"�zIOTest.large_file_opscCs|j}|jtjddd��}|�||j�|�||j�Wd�n1s%wY|�tjd��}|�||j�|�||j�Wd�n1sJwY|jtjddd��}|�||j�|�||j�Wd�n1sqwY|jtjddd��}|�||jd�|�||jd	g�Wd�n1s�wY|�tjd��}|�||jd�|�||jd	g�Wd�n1s�wY|jtjd
dd��.}|�||jd�|�||jdg�|�||j	d
|j
�|�||j	d|j�Wd�dS1�swYdS)N�w�utf-8r)�wbr��	buffering�rbsblahsblah
r'Zblahzblah
rMr�)r�r+rr�r�rZ�readliner=�
writelinesrJ�SEEK_CUR�SEEK_END)r8�exc�fprrr�test_invalid_operations�s6�����$�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|v}
��|��|
�d|v}��|��|�t|�j�r�d}nt|�j�j	f�r�d}n��
d�d|vr�|��n��t
|j�|
r�|�d�|��n��t
|jd���t
|j�|r�|�|�n��t
|j|�tj�d�r�|
||fvr�	Wd�Wd�qTd|v}��|��|�|�r|��|�d�n��t
|j���t
|jd�|�r!|�r!|��|�d�n��t
|j���t
|jd�Wd�n	1�s;wYWd�n	1�sKwYqTdS)Ncs"t��\}}t�|���|d�S)Nr')�os�piperz�FileIO)r'r�r@rr�pipe_reader�s
z3IOTest.test_optional_abilities.<locals>.pipe_readercsNt��\}}��tj|�tjtj|dfd�}|����|j���	|d�S)N�d��targetr�r�)
r�r��
addCleanuprzrk�ThreadrZ�startr�r�)r'r��threadr@rr�pipe_writer�sz3IOTest.test_optional_abilities.<locals>.pipe_writerc�������Sr:)�BufferedReaderr�rr@rr�buffered_reader��z7IOTest.test_optional_abilities.<locals>.buffered_readercr�r:)�BufferedWriterr�rr@rr�buffered_writer�r�z7IOTest.test_optional_abilities.<locals>.buffered_writercr�r:)�BufferedRandom�BytesIOrr@rr�buffered_random�r�z7IOTest.test_optional_abilities.<locals>.buffered_randomcs���������Sr:)�BufferedRWPairr�rr@rr�buffered_rw_pair�s
�z8IOTest.test_optional_abilities.<locals>.buffered_rw_pairc�$G�fdd�d�j�}��|�d�S)Nc�eZdZ�jjZ�jjZdS)zMIOTest.test_optional_abilities.<locals>.text_reader.<locals>.UnseekableReaderN)r#r$r%�BufferedIOBaserAr=rr@rr�UnseekableReader��r��ascii�r��
TextIOWrapper)r�r@rr�text_reader��z3IOTest.test_optional_abilities.<locals>.text_readercr�)Ncr�)zMIOTest.test_optional_abilities.<locals>.text_writer.<locals>.UnseekableWriterN)r#r$r%r�rFrZrr@rr�UnseekableWriter�r�r�r�r�)r�r@rr�text_writer�r�z3IOTest.test_optional_abilities.<locals>.text_writer�fr�fwr'r�Zrws�rw�3�3zUnknown base classr/rM�winr�r)r��StringIO�subTestr�rFrA�
isinstance�
TextIOBaser��	RawIOBase�failrEr�ryrZr=�sys�platform�
startswithrGrKrJrR)r8r�r�r�r�r�r�r�r��tests�testZ	abilitiesr rFrArrGrr@r�test_optional_abilities�sv	�



��"�����zIOTest.test_optional_abilitiescCstd}|jt|j|ddd�t|d�}t���t�dt�|jt|j|ddd�Wd�dS1s3wYdS)Nzfoobarr�r�r)r��ignore)r�r�r+r�warnings�catch_warnings�simplefilter�DeprecationWarning)r8Zfn_with_NULZbytes_fnrrr�test_open_handles_NUL_charss

"�z"IOTest.test_open_handles_NUL_charscCs�|jtjddd��%}|�|��d�|�|��d�|�|��d�|�|�Wd�n1s1wY|jtjddd��&}|�|��d�|�|��d�|�|��d�|�|�Wd�dS1shwYdS)Nr�rr�FTr��	r+rr�r�rFrArGr�r�r�rrr�test_raw_file_ios�"�zIOTest.test_raw_file_iocCs�|�tjd��%}|�|��d�|�|��d�|�|��d�|�|�Wd�n1s/wY|�tjd��'}|�|��d�|�|��d�|�|��d�|�|d�Wd�dS1sewYdS)Nr�FTr�r
r�rrr�test_buffered_file_io&s�"�zIOTest.test_buffered_file_iocCs&|�tjd��
}|�d�Wd�n1swY|�tjd��D}|�|��d�|�|�d�d�|�|�d�d�|�|�d	�d
�|�|��d�|�|�d�d�|�t|jd
�Wd�n1sjwY|jtjddd��}|�t|jd
�Wd�dS1s�wYdS)Nr�s"abc
def
xyzzy
foobar
another liner��abc
r��def
ra�xy�szzy
sfoobar
sanother lineg333333@r'r�r))r+rr�r=r�r�r�r�r�rrr�
test_readline2s��"�zIOTest.test_readlinecCs*Gdd�d|j�}|�ttft|��dS)Nc@�eZdZdd�ZdS)z+IOTest.test_readline_nonsizeable.<locals>.RcS�dSr:rr@rrrr�DrBz4IOTest.test_readline_nonsizeable.<locals>.R.readlineN)r#r$r%r�rrrr�RC�r)�IOBaser�r��
StopIteration�next�r8rrrr�test_readline_nonsizeable@sz IOTest.test_readline_nonsizeablecCs(Gdd�d|j�}|�t|�jd�dS)Nc@r)z'IOTest.test_next_nonsizeable.<locals>.RcSrr:rr@rrr�__next__LrBz0IOTest.test_next_nonsizeable.<locals>.R.__next__N)r#r$r%rrrrrrKrrrM)rr�r��	readlinesrrrr�test_next_nonsizeableHszIOTest.test_next_nonsizeablecCs@|��}|�|�|��}|�|d�|�|�}|�|d�dS)Nr�T)r�r��getvaluer�r�)r8r/rrrr�test_raw_bytes_ioPs

zIOTest.test_raw_bytes_iocCs�tjdd�dkstjdkrt�dd|j�|�tjdd��
}|�|�Wd�n1s/wY|�tjd��}|�|�Wd�dS1sLwYdS)Nr�r��darwinZ	largefilez-test requires %s bytes and a long time to run�w+br)	r�r�rZrequiresr�r+rr�r�r�rrr�test_large_file_opsXs��"�zIOTest.test_large_file_opsc	Cs�dD]^}d}|�tjd|��
}|�d�Wd�n1swY|�|jd�d}z|�tjd|��}ddWd�n1sDwYWntyZ|�|jd�Yqw|�d�qdS)N)rr�r�r�TrMrz1/0 didn't raise an exception)r+rr�r=r�rx�ZeroDivisionErrorr�)r8�bufsizer/rrr�test_with_openes"�
����zIOTest.test_with_opencCs|�tjd��
}|�d�Wd�n1swY|jtjddd��}|�|��d�Wd�n1s8wY|�tjd��}|�|��d�Wd�n1sWwY|jtjddd	��}|�|��d�Wd�dS1sywYdS)
Nr�r��abrr�r��ar�r))r+rr�r=r�rK�
assertGreaterr�rrr�test_append_mode_tellus���"�zIOTest.test_append_mode_tellc	s�g�G�fdd�d|j�}t�dtf��H|tjd�}|�d�~t��|�	�gd��|�
tjd��}|�	|��d�Wd�n1sGwYWd�dSWd�dS1s_wYdS)Nc�:eZdZ��fdd�Z��fdd�Z��fdd�Z�ZS)z(IOTest.test_destructor.<locals>.MyFileIOc�6��d�zt�j}Wn
tyYdSw|�dSrv�r;rb�__del__�AttributeErrorr��rd�recordrrr-��
�
z0IOTest.test_destructor.<locals>.MyFileIO.__del__c���d�t���dSr`�r;rbrzr@r/rrrz�rnz.IOTest.test_destructor.<locals>.MyFileIO.closecr2�Nr��r;rbrrr@r/rrrr�rnz.IOTest.test_destructor.<locals>.MyFileIO.flush�r#r$r%r-rzrrrgr�r0rcr�MyFileIO��r8�r�r��rMrar�r�)r�r
�check_warnings�ResourceWarningrr�r=r�
gc_collectr�r+rZ)r8r8r/rr7r�test_destructors
��"�zIOTest.test_destructorcs<g�G�fdd�d|�}|�}~t��|��gd��dS)NcsBeZdZdd�Z��fdd�Z��fdd�Z��fdd�Z�ZS)	z+IOTest._check_base_destructor.<locals>.MyIOcSsd|_d|_d|_dS)NrMrar�)�on_del�on_close�on_flushr@rrrr9�s
z4IOTest._check_base_destructor.<locals>.MyIO.__init__cs8��|j�zt�j}Wn
tyYdSw|�dSr:)r;r@rbr-r.r�r/rrr-�s�
z3IOTest._check_base_destructor.<locals>.MyIO.__del__c���|j�t���dSr:)r;rArbrzr@r/rrrz��z1IOTest._check_base_destructor.<locals>.MyIO.closecrCr:)r;rBrbrrr@r/rrrr�rDz1IOTest._check_base_destructor.<locals>.MyIO.flush)r#r$r%r9r-rzrrrgrr7rcr�MyIO�s
rEr;)rr>r�)r8�baserEr/rr7r�_check_base_destructor�szIOTest._check_base_destructorcC�|�|j�dSr:)rGrr@rrr�test_IOBase_destructor�rezIOTest.test_IOBase_destructorcCrHr:)rGr�r@rrr�test_RawIOBase_destructor�rez IOTest.test_RawIOBase_destructorcCrHr:)rGr�r@rrr�test_BufferedIOBase_destructor�rez%IOTest.test_BufferedIOBase_destructorcCrHr:)rGr�r@rrr�test_TextIOBase_destructor�rez!IOTest.test_TextIOBase_destructorcCs||�tjd��
}|�d�Wd�n1swY|�tjd��}|�|��d�Wd�dS1s7wYdS)Nr�r�r��r+rr�r=r�rZr�rrr�test_close_flushes�s�"�zIOTest.test_close_flushescs�t�dtd���t��������fdd�}|����|��tjd��|����	���|��
��	���|����	���	���dS)N�ir�csH|���|�����|��f�Wd�dS1swYdSr:)r�r=r�r.�r'rPr8rr�check�s"�z'IOTest.test_array_writes.<locals>.checkr�)r�ranger�tobytesr�r�rr�r�rVr�r�)r8rQrrPr�test_array_writes�szIOTest.test_array_writescC�|jt|jtjdddd�dS)Nr�r�F�r*�closefd�r�r�r+rr�r@rrr�test_closefd�s
�zIOTest.test_closefdcCs0|jtjddd��
}|�d�Wd�n1swY|jtjddd��+}|j|��dddd�}|�|��d�|�d�|��|�	t
|j�Wd�n1sUwY|�tjd	��-}|j|��d	dd
�}|�|��dd�d�|��|�	t
|jtd
��Wd�dS1s�wYdS)Nr�r�r)�egg
r'FrVrr��rWr�seggrM)
r+rr�r=rEr�rZrJrzr�r�rQr��r8r/�filerrr�test_read_closed�s �
�"�zIOTest.test_read_closedcCrU)Nr'r�FrVrXr@rrr�test_no_closefd_with_filename�s
�z$IOTest.test_no_closefd_with_filenamecCs�|�tjd��
}|�d�Wd�n1swY|jtjddd��&}|�|jjjd�|j|��dddd�}|�|jjjd�Wd�dS1sNwYdS)	Nr�segg
r'r�r)TFrV)	r+rr�r=r�r��rawrWrEr\rrr�test_closefd_attr�s�"�zIOTest.test_closefd_attrcCs�t�dtf��!|�tjd�}|�d�||_t�	|�}~t
��Wd�n1s+wY|�|�|�|�
tjd��}|�|��d�Wd�dS1sRwYdS)Nr:r�sabcxxxr�)r
r<r=r�rr�r=r/�weakref�refrr>�assertIsNoner+r�rZ)r8r/�wrrrr�test_garbage_collection�s


�"�zIOTest.test_garbage_collectioncCsd}tj�|�s|�d�|��tjdkr|�d�tjtj	kr%|�d�|j
|ddd��}|�t|j
�Wd�n1s?wY|�
|d��}|�t|j
�Wd�n1s\wY|�
|d	��}|�t|j
�Wd�dS1szwYdS)
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�rZ)r8Zzeror/rrr�test_unbounded_files 


��"�zIOTest.test_unbounded_filecsh|j|i|���g���fdd�}|�_|�t�j�|��j�|���|��d�dd��_dS)Ncs�jg�dd�<t��r:rwr�rxr/rr�	bad_flushsz4IOTest.check_flush_error_on_close.<locals>.bad_flushrcSrr:rrrrr�<lambda>!�z3IOTest.check_flush_error_on_close.<locals>.<lambda>)r+rrr�ryrz�
assertTruerx�assertFalse)r8r��kwargsrnrrmr�check_flush_error_on_closes
z!IOTest.check_flush_error_on_closecCs8|jtjddd�t�tjtjtjB�}|j|ddd�t�tjtjtjB�}|j|dddd�t�|�|�tjd�t�tjtjtjB�}|�|d�t�tjtjtjB�}|j|ddd�t�|�|jtjddd	�t�tjtjtjB�}|j|ddd	�t�tjtjtjB�}|j|dddd
�t�|�dS)Nr�rr�F)r�rWr[r�r�r)rV)rtrr�r�r+�O_WRONLY�O_CREATrz)r8�fdrrr�test_flush_error_on_close#s$

z IOTest.test_flush_error_on_closecCs<|jtjddd�}|��|��|��|�t|j�dS)Nr�rr�)r+rr�rzr�r�rrr�rrr�test_multi_close;s
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�efgNra�ab�cr{�ef�grW)r1r�rZ�r8�rawiorrr�test_RawIOBase_readBs
zIOTest.test_RawIOBase_readcCs@|��|��|��|��|��f}|D]
}|�t|d��qdS)N�__dict__)rr�r�r�r�rq�hasattr)r8rr rrr�test_types_have_dictOs��zIOTest.test_types_have_dictcs�|jtjddd��
}|�d�Wd�n1swYt�tjtj���fdd�}|jddd|d	��}|�|��d�Wd�dS1sIwYdS)
Nr�r�r)rZc��Sr:r)rh�flags�rwrr�opener^rBz"IOTest.test_opener.<locals>.opener�non-existentr')r*r�)r+rr�r=r��O_RDONLYr�rZ)r8r/r�rr�r�test_openerZs�"�zIOTest.test_openercC�Vdd�}|�t��}tdd|d�Wd�n1swY|�t|j�d�dS)NcSr>�Nr�r�Zfnamer�rrr�	badopenererBz4IOTest.test_bad_opener_negative_1.<locals>.badopenerr�r'�r�zopener returned -1�r�r�r+r��str�	exception�r8r��cmrrr�test_bad_opener_negative_1c�
�z!IOTest.test_bad_opener_negative_1cCr�)NcSr>)N���rr�rrrr�mrBz8IOTest.test_bad_opener_other_negative.<locals>.badopenerr�r'r�zopener returned -2r�r�rrr�test_bad_opener_other_negativekr�z%IOTest.test_bad_opener_other_negativecs^t���|�t��}|jd�fdd�d�Wd�n1swY|�|jjtj�dS)NZfoocr�r:r)�namer�r�rrroxrpz/IOTest.test_opener_invalid_fd.<locals>.<lambda>r�)	rZmake_bad_fdr�ryr+r�r��errno�EBADF)r8r�rr�r�test_opener_invalid_fdss
�zIOTest.test_opener_invalid_fdc	Cs�|�td��E}|�td��&}|j|��dd�}|j|��dd�|��|��|��Wd�n1s6wYWd�dSWd�dS1sNwYdS)Nr�Fr[)r+r,r�rEr9r�rz)r8�f1�f2Zfileiorrr�test_fileio_closefd{s
�
P�zIOTest.test_fileio_closefdc	C�~t�|��0|�t��|jtjdddd�Wd�n1s wYWd�dSWd�dS1s8wYdS)Nr�r�r�r*r��r
�check_no_resource_warningr�r�r+rr�r@rrr�test_nonbuffered_textio����"�zIOTest.test_nonbuffered_textioc	Cr�)Nr�r��invalid�r*�newliner�r@rrr�test_invalid_newline�r�zIOTest.test_invalid_newlinec	Cs~Gdd�d|j�}|�}dD].}|�|��td�}|�t||�|�d�|�t|�d�Wd�n1s7wYqdS)Nc@seZdZdd�ZeZdS)z3IOTest.test_buffered_readinto_mixin.<locals>.StreamcSr>)N�12345r�r8�sizerrrrZ�rBz8IOTest.test_buffered_readinto_mixin.<locals>.Stream.readN)r#r$r%rZ�read1rrrr�Stream�sr��rQr�rfr�)r�r�rr��getattrr)r8r��stream�methodr�rrr�test_buffered_readinto_mixin�s���z#IOTest.test_buffered_readinto_mixinc	sr�fdd�}|ttj��|tt�tj����jtjddd��+}t|���}��t���j|ddd�Wd�n1s?wYWd�n1sNwYtd�}��t���j|ddd�Wd�n1sowYtt	�}��t	���j|ddd�Wd�n1s�wY��
td���jttj�ddd�Wd�dS1s�wYdS)Ncs��j|ddd��
}|�d�Wd�n1swY�j|ddd��}��|��d�Wd�dS1s9wYdS)Nr�r�r)rZr')r+r=r�rZ)rhr/r@rr�check_path_succeeds�s�"�z7IOTest.test_fspath_support.<locals>.check_path_succeedsr�r�r)zread/write/append modeZrwxa)rrr�r��fsencoder+rEr�r��FloatingPointError�assertRaisesRegexr�)r8r�r/Zbad_pathrr@r�test_fspath_support�s*�����"�zIOTest.test_fspath_supportcCs8|�d�}|�|��d�|�d�}|�|��d�dS�N�rzr{r|�abcdefg)r1r�rZ�readallr�rrr�test_RawIOBase_readall�s

zIOTest.test_RawIOBase_readallc	Cs�Gdd�d|j�}d}d}|D]i}|�|��Z|\}}}}|tt|���}	t|f|�}
t|	|�}|�||
�|�|�t|
�|�|�|
d|�t|��|f||}|�|
|d�|�|�t|	j	�||�Wd�n1sswYqdS)Nc@�$eZdZdd�Zdd�Zdd�ZdS)z3IOTest.test_BufferedIOBase_readinto.<locals>.ReadercSs
||_dSr:��avail)r8r�rrrr9�r�z<IOTest.test_BufferedIOBase_readinto.<locals>.Reader.__init__cSs"|jd|�}|j|d�|_|Sr:r�)r8r��resultrrrrZ�sz8IOTest.test_BufferedIOBase_readinto.<locals>.Reader.readcSs|�t|d��S)z$Returns no more than 5 bytes at oncerf)rZ�minr�rrrr��sz9IOTest.test_BufferedIOBase_readinto.<locals>.Reader.read1N)r#r$r%r9rZr�rrrr�Reader�sr�)
)rQr�rfrf)rQr�r�r�)rQrfr�rf)rQr��r�)rQr�rr)r�r�rfrf)r�r�r�rf)r�rfr�rf)r�r�r�rf)r�r�rr�)
r�r�rrRr�r�r�rZassertSequenceEqualr�)r8r�rZUNUSED_BYTErr�r�Zrequestr��readerr�Zunusedrrr�test_BufferedIOBase_readinto�s$

���z#IOTest.test_BufferedIOBase_readintocCs4Gdd�d|j�}|�}|�t|j�dd�|_dS)Nc@�eZdZdd�Zdd�ZdS)z#IOTest.test_close_assert.<locals>.RcSrr:r)r8r��valuerrr�__setattr__�rBz/IOTest.test_close_assert.<locals>.R.__setattr__cS�t��r:�ryr@rrrrr��z)IOTest.test_close_assert.<locals>.R.flushN)r#r$r%r�rrrrrrr�srcSrr:rr@rrrro�rpz*IOTest.test_close_assert.<locals>.<lambda>)rr�ryrzrr)r8rr/rrr�test_close_assert�szIOTest.test_close_assertN�F)4r#r$r%r�r�r�r�r�r�r�rr	rrrrrrr"r%r)r?rGrIrJrKrLrNrTrYr^r_rarfrlrtrxryr�r�r�r�r�r�r�r�r�r�r�r�r�r�rrrrr�9sd
!h	



	
)r�c@r)�CIOTestcCsLGdd�d|j�}|�|�}||_t�|�}~~t��|�|�|�dS)Nc@r)z*CIOTest.test_IOBase_finalize.<locals>.MyIOcSrr:rr@rrrrzrBz0CIOTest.test_IOBase_finalize.<locals>.MyIO.closeN�r#r$r%rzrrrrrE�rrE)rr rbrcrr>rd)r8rEr rerrr�test_IOBase_finalize�s
zCIOTest.test_IOBase_finalizeN)r#r$r%r�rrrrr��sr�c@r!)�PyIOTestNr"rrrrr�
r&r�c@r�)�APIMismatchTestcCs*tjtjtjdd�}|j|t�dd�dS)z:Test that pyio RawIOBase class has all c RawIOBase methods)�__weakref__)rz6Python RawIOBase does not have all C RawIOBase methods��msgN)r�detect_api_mismatchr�r�r�r�ro�r8Zmismatchrrr�test_RawIOBase_io_in_pyio_matchs�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�ror�rrr�test_RawIOBase_pyio_in_io_matchsz/APIMismatchTest.test_RawIOBase_pyio_in_io_matchN)r#r$r%r�r�rrrrr�sr�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|�dSr:)rV�tp�assertIs�detachr�r��repr�r8r`rOrrr�test_detach#s

zCommonBufferedTests.test_detachcCs&|��}|�|�}|�d|���dSrC)rVr�r�rE�r8r��bufiorrr�test_fileno+s
zCommonBufferedTests.test_filenocCs:|��}|�|�}|�t|jdd�|�t|jdd�dS)Nrr�r�)rVr�r�r�rJr�rrr�test_invalid_args1s
z%CommonBufferedTests.test_invalid_argscsL|j}g�G�fdd�d|�}|��}||�}~t��|��gd��dS)Ncr*)zBCommonBufferedTests.test_override_destructor.<locals>.MyBufferedIOcr+rvr,r�r/rrr-<r1zJCommonBufferedTests.test_override_destructor.<locals>.MyBufferedIO.__del__cr2r`r3r@r/rrrzDrnzHCommonBufferedTests.test_override_destructor.<locals>.MyBufferedIO.closecr2r4r5r@r/rrrrGrnzHCommonBufferedTests.test_override_destructor.<locals>.MyBufferedIO.flushr6rr7rcr�MyBufferedIO;r9r�r;)r�rVrr>r�)r8r�r�r�r�rr7r�test_override_destructor8sz,CommonBufferedTests.test_override_destructorcs4|��}|�|���fdd�}|�|�t|�dS)Ncs*��	Wd�dS1swYdSr:rr�r�rr�_withTs"�z7CommonBufferedTests.test_context_manager.<locals>._with)rVr�r�r�)r8r�r�rr�r�test_context_managerPs

z(CommonBufferedTests.test_context_managerc	Cs�|��}t���J}|�t��|�|�jWd�n1swYts-|�|j	�n|j	durB|�
|j	jt�Wd�dSWd�dSWd�dS1sUwYdSr:)
rur�catch_unraisable_exceptionr�r.r��xyzzy�IOBASE_EMITS_UNRAISABLErd�
unraisabler��exc_typery�r8r�r�rrr�test_error_through_destructor\s
�
��"�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'>)rVr�r$r%�assertRegexr�r�)r8r`rZclsnamerrr�	test_repris
zCommonBufferedTests.test_reprc	Csv|��}|�|�}t�|d|��!zt|�Wn	ty Yn	wWd�dSWd�dS1s4wYdS)Nr�)rVr�r�	swap_attrr��RuntimeError�r8r`rrrr�test_recursive_reprss
���"�z'CommonBufferedTests.test_recursive_reprcs�|���g����fdd�}|�_|����|�t�j�|��j�|��j�|���|��d�|��d�dd��_dS)Ncs�j�jg�dd�<t��r:rwr�rrxr`rrrn�sz@CommonBufferedTests.test_flush_error_on_close.<locals>.bad_flushrrMcSrr:rrrrrro�rpz?CommonBufferedTests.test_flush_error_on_close.<locals>.<lambda>)	rVrrr�r�ryrzrqrxrr�r8rnrr�rrx}s

z-CommonBufferedTests.test_flush_error_on_closecCs�|��}dd�}dd�}||_|�|�}||_|�t��}|��Wd�n1s+wY|�|jjd�|�	|jj
t�|�|jj
jd�|�|j�dd�|_d	d�|_dS)
NcS�td���Nrrr�rrrrrn��z@CommonBufferedTests.test_close_error_on_close.<locals>.bad_flushcSr�Nrzr�rrrr�	bad_close�rz@CommonBufferedTests.test_close_error_on_close.<locals>.bad_close�rz�rrcSrr:rrrrrro�rpz?CommonBufferedTests.test_close_error_on_close.<locals>.<lambda>cSrr:rrrrrro�rp)
rVrzr�rrr�ryr�r�r��assertIsInstance�__context__rrrx�r8r`rnrr�errrrr�test_close_error_on_close�s

�
z-CommonBufferedTests.test_close_error_on_closecCs�|��}dd�}dd�}||_|�|�}||_|�t��}|��Wd�n1s+wY|�dt|j��|�	|jj
t�|�dt|jj
��|�|j�dd�|_d	d�|_dS)
NcS�t�r:��non_existing_flushrrrrrn�rBzNCommonBufferedTests.test_nonnormalized_close_error_on_close.<locals>.bad_flushcSrr:��non_existing_closerrrrr�rBzNCommonBufferedTests.test_nonnormalized_close_error_on_close.<locals>.bad_closerrcSrr:rrrrrro�rpzMCommonBufferedTests.test_nonnormalized_close_error_on_close.<locals>.<lambda>cSrr:rrrrrro�rp)
rVrzr�rrr��	NameError�assertInr�r�rrrrrxr	rrr�'test_nonnormalized_close_error_on_close�s

�
z;CommonBufferedTests.test_nonnormalized_close_error_on_closecCs<|��}|�|�}|��|��|��|�t|j�dSr:)rVr�rzr�r�rrr�rrrry�s
z$CommonBufferedTests.test_multi_closecCs6|�|�d��}|�|j|j�|�|j|jd�dS)N�
AAAAAAAAAAr)r�r�r�r�rKrJ�r8r�rrr�test_unseekable�sz#CommonBufferedTests.test_unseekablecCsP|��}|�|�}|��}|�t��||_Wd�dS1s!wYdSr:)rVr�r�r.r`)r8r`rO�xrrr�test_readonly_attributes�s
"�z,CommonBufferedTests.test_readonly_attributesN)r#r$r%r�r�r�r�r�r�r�r�rxrrryrrrrrrr� s


r�c@s(eZdZejdd��Zejdd��ZdS)�
SizeofTestcCs\d}d}|��}|j||d�}t�|�|}|��}|j||d�}|�t�|�||�dS)N�� ��buffer_size)rVr�r��	getsizeofr�)r8Zbufsize1Zbufsize2r�r�r�rrr�test_sizeof�szSizeofTest.test_sizeofcCsFd}|��}|j||d�}t�|�|}|��|�t�|�|�dS)Nrr)rVr�r�rrzr�)r8r$r�r�r�rrr�test_buffer_freeing�szSizeofTest.test_buffer_freeingN)r#r$r%r�cpython_onlyrr rrrrr�s


rc@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)d*�Zd+S),�BufferedReaderTestr�cCs�|�dg�}|�|�}|�|�|j|dd�|j|dd�|�d|���|jt|j|dd�|jt|j|dd�|jt|j|dd�|�dg�}|�|�|�d|���dS)Nrz�r�r��r�)rVr�r9r�rZr�r�r�rrr�test_constructor�s


z#BufferedReaderTest.test_constructorcC�X|j�|j�}~|j�|j�}|�ttfd|jd�|�|���|�|�d�d�dS�N�uninitialized|has no attributerrW)	r��__new__r�r�r.rZr9rVr�rrrr�test_uninitialized��
�z%BufferedReaderTest.test_uninitializedcCsDdD]}|�d�}|�|�}|�d|�|��q|�t|jd�dS)N)Nr�r�r�r�)rVr�r�rZr�r�)r8�argr�r�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��arM�brWrr~r�r{rar|r�r�rVr�r�rZr�r6r�rrr�
test_read1s

zBufferedReaderTest.test_read1cCs�|�d�}|�|�}|�d|�d��|�d|���|�d|���|�d|�d��|�|jd�|�d	|���|�|jd
�dS)Nr�r/rMsbcr{r|r�r�rWrr1r�rrr�test_read1_arbitrarys

z'BufferedReaderTest.test_read1_arbitrarycCs|�d�}|�|�}td�}|�|�|�d�|�|d�|�|�|�d�|�|d�|�|�|�d�|�|d�|�|�|�d�|�|d�|�|�|�d�|�|d�|�d	�}|�|�}|�|�|�d�|�|d�|�|�|�d�|�|d
�dS)Nr�rar}�cdrrMsgfr)rzNscb)rVr�r�r�rQ)r8r�r�rrrr�
test_readinto!s&



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�)rz�de�fghsjklrrar�rzrMr}r~r6r7r�sfghjklr)rVr�r�r��peekr6r�)r8rr�r�rrrr�test_readinto16s*
z!BufferedReaderTest.test_readinto1cC�d}d}|�|f�}|j||d�}t�dd�}|�|�}|�|t|��t|��d�}|�|t|��|�	|d|�|d|��|�	||d�dt||d���dS�N�<saaaaaaaaaaaaaaaaaaaaaaaaaarrOs xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxrr�)
rVr�rrQr(rrr�
assertLessr��r8rrr�r�rrPZbmrrr�test_readinto_arrayM�
(z&BufferedReaderTest.test_readinto_arraycCr:r;)
rVr�rr�r(rrrr=r�r>rrr�test_readinto1_arraybr@z'BufferedReaderTest.test_readinto1_arraycsV�fdd�}��|���gd����|��d�ddg���|��d�gd��dS)Ncs��d�}��|�S)N�r
r�r)rVr�)r�r@rrr�x�

z0BufferedReaderTest.test_readlines.<locals>.bufiorBrfr
r��r�rrrr@r�test_readlineswsz!BufferedReaderTest.test_readlinesc	Cs�d}t|�}dgd�|dggdgd�|ggdgd�gd�gg}|D]2\}}}|�|�}|j||d	�}d}	|D]}
|�|�|
�||	|	|
��|	|
7}	q6|�|j|�q!dS)
N�	abcdefghir�)r�rMr�r)r�r�r�r)rMrarra)rrrMr)rr}r�r�rZr~)r8rZdlenrr$Zbuf_read_sizesZraw_read_sizesr�r�r�nbytesrrr�test_bufferings�

�z!BufferedReaderTest.test_bufferingcCs�|�d�}|�|�}|�d|�d��|�d|�d��|�d|���|�d|�d��|�|���|�d|���|�d�}|�d	|���|�|���dS)
N)rzr{Nr|NNN�abcdr��erMsfgrW)r/NNr/)rVr�r�rZr8rdr�r�rrr�test_read_non_blocking�s


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

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

z BufferedReaderTest.test_read_all�cpuc	s�z�d}ttd��|}t�|�tt|��}|�tjd��
���	|�Wd�n1s-wY|jtj|j
dd��c}|�|d��g�g����fdd���fd	d
�td�D�}t�
|��
t�d�Wd�n1sowY|��d
��d���}td�D]}tt|g��}|�|�|�|�q�Wd�n1s�wYWt�tj�dSWt�tj�dSt�tj�w)N���r�rr�rGc
s^ztddg�D]}��|�}|sWdS��|�qWdSty.}z��|��d}~ww)NrM�)rrZr;�	Exception)rPr��e)r��errors�resultsrrr/�s
�
��z*BufferedReaderTest.test_threads.<locals>.fc�g|]}tj�d��qS��r��rkr���.0rr.rr�
<listcomp>��z3BufferedReaderTest.test_threads.<locals>.<listcomp>r��{�G�z�?�(the following exceptions were caught: %rrW)r3rR�random�shufflerr�r+rr�r=�	read_moder�r�
start_threadsrprqrrr�r�rr�)r8�N�lr�r`�threadsrO�cr)r�rVr/rWr�test_threads�s:
���
���zBufferedReaderTest.test_threadscCsb|�|�d��}|�|j|j�|�|j|jd�|�d�|�|j|jd�|�|j|j�dS)NrrrM)r�r�r�r�rKrJrZrrrrr�s
z"BufferedReaderTest.test_unseekablecCs@|�d�}|�|�}|�t|jd�|�t|j�dd�|_dS)Nr�rcSrr:rrrrrro�rpz7BufferedReaderTest.test_misbehaved_io.<locals>.<lambda>)r^r�r�ryrJrKrzr�rrr�test_misbehaved_io�s


z%BufferedReaderTest.test_misbehaved_ioc	Cs�d}d|d||d|dfD]Q}|�d|g�}|�||�}|�|�|�d|�|�|jdd�||j��|�d|ddg�}|�||�}|�|�|�d|�|�|jdd�||j��qdS)Nr$rarMr�rzfailed for {}: {} != 0)rVr�r�rZr7rj)r8r$rPr�r�rrr�test_no_extraneous_read�s
�
��z*BufferedReaderTest.test_no_extraneous_readcCsDt�t�d��}|�d�|��|�t|j�|�t|jd�dS)N�12rM)	r�r�r�rZrzr�r�r8r�r<rrr�test_read_on_closed�s

z&BufferedReaderTest.test_read_on_closedcCsH|�d�}|�|�}|�|���|�|j|j�|�|j|jd�dS)Nrzr)r}r�rrrAr�r�rRr�rrr�test_truncate_on_read_onlys


z-BufferedReaderTest.test_truncate_on_read_onlyN)r#r$r%rdr&r+r.r2r3r5r9r?rArErIrLrNrOr�requires_resourcerjrrkrlrnrorrrrr"�s.

'	r"c@sXeZdZejZedddd�dd��Zdd�Zdd	�Z	d
d�Z
dd
�Zdd�Zdd�Z
dS)�CBufferedReaderTestT�Lsanitizer defaults to crashing instead of returning NULL for malloc failure.�Zmemory�address�reasoncC�Ht�|�tjdkr"|��}|�|�}|�ttt	f|j
|tj�dSdS�Nrg)r"r&r�rkrVr�r�r��MemoryErrorr�r9r�rrrr&�



��z$CBufferedReaderTest.test_constructorcCs�|�dg�}|�|�}|jt|j|dd�|�t|j�|jt|j|dd�|�t|j�|jt|j|dd�|�t|j�dS)Nrzrrr%r�)rVr�r�r�r9rZr�rrr�test_initializations
z'CBufferedReaderTest.test_initializationcCs(|�d�}|�|�}|�t|jd�dS)Nr�r�)r^r�r�ryrZr�rrr�test_misbehaved_io_read$s

z+CBufferedReaderTest.test_misbehaved_io_readcCs�|�tjtj�t�dtf��!|�tjd�}|�|�}||_	t
�|�}~t�
�Wd�n1s3wY|�|�|�dS)Nr:r!)r�rr�r�r
r<r=r�r�r/rbrcrr>rd�r8r�r/rerrrrf+s


�z+CBufferedReaderTest.test_garbage_collectioncC�F|�td��|�t��ddd�Wd�dS1swYdS)Nr�r#�r�r�r�r�r�r@rrr�test_args_error8�"�z#CBufferedReaderTest.test_args_errorcCsht�t�d��}dd�|_|�|�}|�t��}|��Wd�n1s&wY|�|j	j
�dS)NrmcSr>r�r�rOrrrro?rpz=CBufferedReaderTest.test_bad_readinto_value.<locals>.<lambda>)r�r�r�rQr�r�ryr�rdr��	__cause__�r8r�r�r�rrr�test_bad_readinto_value=s


�z+CBufferedReaderTest.test_bad_readinto_valuecCsjt�t�d��}dd�|_|�|�}|�t��}|��Wd�n1s&wY|�|j	j
t�dS)NrmcSr>r�rr�rrrroGrpz<CBufferedReaderTest.test_bad_readinto_type.<locals>.<lambda>)r�r�r�rQr�r�ryr�rr�r�r�r�rrr�test_bad_readinto_typeEs


�z*CBufferedReaderTest.test_bad_readinto_typeN)r#r$r%r�r�r�rr&rzr{rfrr�r�rrrrrqs



rqc@�eZdZejZdS)�PyBufferedReaderTestN)r#r$r%r�r�r�rrrrr�Nr�r�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#rr$r�rzrr%r��ghirWsabcghi)
rVr�r9r�r=rrr�r�r�r5r�rrrr&Us


z#BufferedWriterTest.test_constructorcCr')Nr)rWr)	r�r*r�r�r.r=r9rVr�rrrrr+er,z%BufferedWriterTest.test_uninitializedcCsD|��}|�|�}|�d�|�|j�|��|�|jdg�dS)Nshowdy!)rVr�r=rrr5r�r�r�rrr�test_detach_flushos

z$BufferedWriterTest.test_detach_flushcCsh|��}|�|d�}|�d�|�|j�td�}|�|�d|dd�<|��|�d�|j�d�dS)NrGrz�def�***rW�abcdef)	rVr�r=rrr5r�rrr�r�)r8�writerr�r�rrr�
test_writews

zBufferedWriterTest.test_writecCsn|��}|�|d�}d}tdt|�d�D]
}|�|||d��qd�|j�}|�|�|dd��|�dS)NrGsabcdefghijklmnoprr�rWi����)	rVr�rRrr=r�r5rqr)r8r�r��contentsrPZflushedrrr�test_write_overflow�sz&BufferedWriterTest.test_write_overflowc	Cs�ttd��d}d}|��}|�|d�}dd�}|�}|t|�krItt|�t|�|�}|�|�||||��|�||�||7}|t|�ks!|�	�|�|d�
|j��dS)NrRrQrr�css(�td�D]}td�D]}|VqqdS)NrM�)rrR)r�rOrrr�	gen_sizes�s���z2BufferedWriterTest.check_writes.<locals>.gen_sizesrW)rrRrVr�rr�rr�r=rrr�r5)	r8Zintermediate_funcr�rPr�r�r��sizesr�rrr�check_writes�s�zBufferedWriterTest.check_writescC�|�dd��dS)NcSrr:rr�rrrro�rpz0BufferedWriterTest.test_writes.<locals>.<lambda>�r�r@rrr�test_writes��zBufferedWriterTest.test_writescCr�)NcSs|��Sr:rr�rrrro�sz<BufferedWriterTest.test_writes_and_flushes.<locals>.<lambda>r�r@rrr�test_writes_and_flushes�r�z*BufferedWriterTest.test_writes_and_flushescCs(dd�}|�|�dd�}|�|�dS)NcSs8|��}|�|dd�|�|dd�|�|d�dSrL)rKrJ�r�rrrr�_seekabs�sz:BufferedWriterTest.test_writes_and_seeks.<locals>._seekabscSs4|�dd�}|�dd�|�dd�|�|d�dS)NrrMr�)rJr�rrr�_seekrel�sz:BufferedWriterTest.test_writes_and_seeks.<locals>._seekrelr�)r8r�r�rrr�test_writes_and_seeks�s
z(BufferedWriterTest.test_writes_and_seekscCr�)NcSs|�|���Sr:)rRrKr�rrrro�sz>BufferedWriterTest.test_writes_and_truncates.<locals>.<lambda>r�r@rrr�test_writes_and_truncates�r�z,BufferedWriterTest.test_writes_and_truncatesc
Cs�|��}|�|d�}|�|�d�d�|�|�d�d�|�d�|�|�d�d�|�d�z|�d	�Wn|jyL}z	|j}WYd}~n
d}~ww|�d
�|�|d�|�|��d�|�|�d
�d�|��}|�	|�
d�|�dS)NrGrJrsefghirf�ksjklmn�0sopqrwxyz0123456789z'BlockingIOError should have been raisedr$sabcdefghijklmnopqrwxyzs	ABCDEFGHIr�s	01234567A)r�r�r�r=r�r��characters_writtenr�r�rqr)r8r`r�rU�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)
Nrr�r�rsXYrasXYcdefs123456sXYcdef123456)	r�r�r�r�r=rKrJrrr�r8r`r�rrr�test_write_and_rewind�sz(BufferedWriterTest.test_write_and_rewindcCs<|��}|�|d�}|�d�|��|�d|jd�dS�NrGrzr)rVr�r=rrr�r5�r8r�r�rrr�
test_flush�s

zBufferedWriterTest.test_flushcCsFgd�}|��}|�|d�}|�|�|��|�d�|j�d�dS�N)r}r4rrGrWr�)rVr�r�rrr�r�r5�r8rgr�r�rrr�test_writelines�s
z"BufferedWriterTest.test_writelinescCsJtgd��}|��}|�|d�}|�|�|��|�d�|j�d�dSr�)rrVr�r�rrr�r�r5r�rrr�test_writelines_userlist�s
z+BufferedWriterTest.test_writelines_userlistcCsL|��}|�|d�}|�t|jgd��|�t|jd�|�t|jd�dS)NrGr;�abc)rVr�r�r�r�r�rrr�test_writelines_error�s
z(BufferedWriterTest.test_writelines_errorcCs>|��}|�|d�}|�d�~t��|�d|jd�dSr�)rVr�r=rr>r�r5r�rrrr?�s
z"BufferedWriterTest.test_destructorcCs�|�tjtj�|jtj|jdd��$}|�|d�}|�d�|�|�	d�d�|�|�
�d�Wd�n1s9wY|jtjddd��}|�|��d�Wd�dS1s[wYdS)	Nrr�rGr�r�r�r�rz)r�rr�r�r+�
write_moder�r=r�rRrKrZ)r8r`r�r/rrr�
test_truncates
�"�z BufferedWriterTest.test_truncatec	Cs�|�tjtj�|�tjd��}|�dd�Wd�n1s!wYgd�}|D]7}|jtjd|d��$}|�d|d�|�d�|��|�|�	�|d�Wd�n1s^wYq,dS)	Nr��i')rr��zr+br�rMra)
r�rr�r�r+r=rZrRr�rK)r8r/Zbuffer_sizesrrrr�test_truncate_after_writes�
���z,BufferedWriterTest.test_truncate_after_writerPc
	s�z�d}ttd��|}tddg�}d}t��|t|�kr5t|�}��||||��||7}|t|�ks~|jtj	|j
dd��I}|�|d��g����fdd	���fd
d�td�D�}t�
|��
t�d
�Wd�n1sqwY|��d�����Wd�n1s�wY|�tj	d������}Wd�n1s�wYtd�D]}	|�|�t|	g��|�q�Wt�tj	�dSt�tj	�w)NrQrRrMrSrr�rGc
sXz	z���}WntyYWdSw��|�qty+}z��|��d}~wwr:)�popleftrNr=rTr;)r�rU)r�rV�queuerrr/;s�
�
��z*BufferedWriterTest.test_threads.<locals>.fcrXrYr[r\r.rrr^Fr_z3BufferedWriterTest.test_threads.<locals>.<listcomp>r�r`rar�)rrRrrrrr;r+rr�r�r�rrerprqrrrzrZr�rr�)
r8rfr�r�rPr�r`rhr�rOr)r�rVr/r�rrj$s@���
�
��zBufferedWriterTest.test_threadscCsP|��}|�|d�}|�t|jd�|�t|j�|�t|jd�dd�|_dS)Nrfrr�cSrr:rrrrrro[rpz7BufferedWriterTest.test_misbehaved_io.<locals>.<lambda>)r^r�r�ryrJrKr=rzr�rrrrkSsz%BufferedWriterTest.test_misbehaved_iocCsB|�t��|�|��dd�Wd�dS1swYdS�NrGr��r�r�r�rVr@rrr�test_max_buffer_size_removal]s"�z/BufferedWriterTest.test_max_buffer_size_removalcCsH|��}dd�}||_|�|�}|�d�|�t|j�|�|j�dS)NcSr�r:r�)rrrr�	bad_writecr�z?BufferedWriterTest.test_write_error_on_close.<locals>.bad_write�spam)rVr=r�r�ryrzrqrx)r8r`r�rrrr�test_write_error_on_closeas

z,BufferedWriterTest.test_write_error_on_closecCs\|��}|�|d�}tj|jd�}|��|j��|�t	|j
d�|�|j�|�
�dS)NrGrZr�)rjr�rkr�rzr�rm�waitr�r�r=rqrxr�)r8r�r��trrr�test_slow_close_from_threadks
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�rrprjrkr�r�r�rrrrr�Rs6


.

r�c@s@eZdZejZedddd�dd��Zdd�Zdd	�Z	d
d�Z
dS)
�CBufferedWriterTestTrrrscCrvrw)r�r&r�rkrVr�r�r�rxr�r9r�rrrr&{ryz$CBufferedWriterTest.test_constructorcCs�|��}|�|�}|jt|j|dd�|�t|jd�|jt|j|dd�|�t|jd�|jt|j|dd�|�t|jd�dS)Nrrr�r%r�)rVr�r�r�r9r=r�rrrrz�s
z'CBufferedWriterTest.test_initializationcCs�|�tjtj�t�dtf��&|�tjd�}|�|�}|�	d�||_
t�|�}~t
��Wd�n1s8wY|�|�|�|�tjd��}|�|��d�Wd�dS1s_wYdS)Nr:r!s123xxxr�)r�rr�r�r
r<r=r�r�r=rrbrcrr>rdr+r�rZr|rrrrf�s



�"�z+CBufferedWriterTest.test_garbage_collectioncCr})Nr�r#r~r@rrrr�r�z#CBufferedWriterTest.test_args_errorN)r#r$r%r�r�r�rr&rzrfrrrrrr�xs


r�c@r�)�PyBufferedWriterTestN)r#r$r%r�r�r�rrrrr��r�r�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"�Zd#d$�Zd%d&�Zd'd(�Zd)d*�Zd+S),�BufferedRWPairTestcCs$|�|��|���}|�|j�dSr:)r�rVrrrx�r8�pairrrrr&�sz#BufferedRWPairTest.test_constructorcCs�|j�|j�}~|j�|j�}|�ttfd|jd�|�ttfd|jd�|�|��|���|�	|�d�d�|�	|�d�d�dSr()
r�r*r�r�r.rZr=r9rVr�r�rrrr+�s
�
�z%BufferedRWPairTest.test_uninitializedcCs(|�|��|���}|�|j|j�dSr:)r�rVr�r�r�r�rrrr��szBufferedRWPairTest.test_detachcCsH|�t��|�|��|��dd�Wd�dS1swYdSr�r�r@rrr�(test_constructor_max_buffer_size_removal�s"�z;BufferedRWPairTest.test_constructor_max_buffer_size_removalcCs,Gdd�dt�}|�t|j|�|���dS)Nc@r)zJBufferedRWPairTest.test_constructor_with_not_readable.<locals>.NotReadablecSr>r�rr@rrrrF�rBzSBufferedRWPairTest.test_constructor_with_not_readable.<locals>.NotReadable.readableN�r#r$r%rFrrrr�NotReadable�rr��rVr�ryr�)r8r�rrr�"test_constructor_with_not_readable��z5BufferedRWPairTest.test_constructor_with_not_readablecCs,Gdd�dt�}|�t|j|��|��dS)Nc@r)zLBufferedRWPairTest.test_constructor_with_not_writeable.<locals>.NotWriteablecSr>r�rr@rrrrA�rBzUBufferedRWPairTest.test_constructor_with_not_writeable.<locals>.NotWriteable.writableN)r#r$r%rArrrr�NotWriteable�rr�r�)r8r�rrr�#test_constructor_with_not_writeable�r�z6BufferedRWPairTest.test_constructor_with_not_writeablecCsv|�|�d�|���}|�|�d�d�|�|�d�d�|�|��d�|�|�d�|���}|�|�d�d�dS)Nr�r�rzrMr{r)r�r�rVr�rZr�rrrr.�szBufferedRWPairTest.test_readcsT�fdd�}��|���gd����|���gd����|��d�ddg�dS)Ncs����d�����S)Ns	abc
def
h)r�r�rVrr@rrro��z3BufferedRWPairTest.test_readlines.<locals>.<lambda>)r
rr�rfr
rrDr�rr@rrE�sz!BufferedRWPairTest.test_readlinescCs<|�|�d�|���}|�|�d�d�|�|��d�dS)Nr�r�rzr�)r�r�rVr�r�r�rrrr2�szBufferedRWPairTest.test_read1c	Cs|dD]9}|�|��*|�|�d�|���}td�}|�t||�|�d�|�t|�d�Wd�n1s6wYqdS)Nr�r�srfsabcde)r�r�r�rVrr�r�r)r8r�r�rrrrr5�s���z BufferedRWPairTest.test_readintocCsf|��}|�|��|�}|�d�|��td�}|�|�d|dd�<|��|�|jddg�dS)Nrzr�r�)rVr�r=rrr�r�r5)r8r�r�r�rrrr��s

zBufferedRWPairTest.test_writecCsB|�|�d�|���}|�|�d��d��|�|�d�d�dS)Nr�r�rz)r�r�rVrqr8rr�rZr�rrr�	test_peekszBufferedRWPairTest.test_peekcC�&|�|��|���}|�|���dSr:)r�rVrqrFr�rrr�
test_readable�z BufferedRWPairTest.test_readablecCr�r:)r�rVrqrAr�rrr�test_writeabler�z!BufferedRWPairTest.test_writeablecCr�r:)r�rVrrrGr�rrr�
test_seekablesz BufferedRWPairTest.test_seekablecCs8|�|��|���}|�|j�|��|�|j�dSr:)r�rVrrrxrzrqr�rrr�test_close_and_closedsz(BufferedRWPairTest.test_close_and_closedcCs�dd�}|��}||_|��}|�||�}|�t��}|��Wd�n1s)wY|�dt|j��|�|j	�|�
|j	�|�|j	�dd�|_dS)NcS�tdSr:��reader_non_existingrrrr�reader_closerzIBufferedRWPairTest.test_reader_close_error_on_close.<locals>.reader_closer�cSrr:rrrrrro-rpzEBufferedRWPairTest.test_reader_close_error_on_close.<locals>.<lambda>)rVrzr�r�rrr�r�rqrxrr)r8r�r�r�r�r
rrr� test_reader_close_error_on_closes
�z3BufferedRWPairTest.test_reader_close_error_on_closec	Cs
dd�}|��}|��}||_|�||�}|�t��}|��Wd�n1s)wY|�dt|j��|�|j	�|�
|j	�|�|j	�dd�|_d}t���'t���d}t�
�Wd�n1sjwYt�
�Wd�dS1s~wYdS)NcSr�r:��writer_non_existingrrrr�writer_close0rzIBufferedRWPairTest.test_writer_close_error_on_close.<locals>.writer_closer�cSrr:rrrrrro>rpzEBufferedRWPairTest.test_writer_close_error_on_close.<locals>.<lambda>)rVrzr�r�rrr�r�rrrxrqrr�r>)r8r�r�r�r�r
rrr� test_writer_close_error_on_close/s*
�



�
"�z3BufferedRWPairTest.test_writer_close_error_on_closecCs�dd�}dd�}|��}||_|��}||_|�||�}|�t��}|��Wd�n1s0wY|�dt|j��|�|jj	t�|�dt|jj	��|�
|j�|�
|j�|�
|j�dd�|_d	d�|_dS)
NcSr�r:r�rrrrr�JrzPBufferedRWPairTest.test_reader_writer_close_error_on_close.<locals>.reader_closecSr�r:r�rrrrr�LrzPBufferedRWPairTest.test_reader_writer_close_error_on_close.<locals>.writer_closer�r�cSrr:rrrrrro]rpzLBufferedRWPairTest.test_reader_writer_close_error_on_close.<locals>.<lambda>cSrr:rrrrrro^rp)rVrzr�r�rrr�r�rrrrrx)r8r�r�r�r�r�r
rrr�'test_reader_writer_close_error_on_closeIs$
�
z:BufferedRWPairTest.test_reader_writer_close_error_on_closecCs�Gdd�dt�}|�|d�|d��}|�|���|�|d�|d��}|�|���|�|d�|d��}|�|���|�|d�|d��}|�|���dS)Nc@r�)z8BufferedRWPairTest.test_isatty.<locals>.SelectableIsAttycSst�|�||_dSr:)rVr9�_isatty)r8�isattyrrrr9brCzABufferedRWPairTest.test_isatty.<locals>.SelectableIsAtty.__init__cSs|jSr:)r�r@rrrr�fr�z?BufferedRWPairTest.test_isatty.<locals>.SelectableIsAtty.isattyN)r#r$r%r9r�rrrr�SelectableIsAttyasr�FT)rVr�rrr�rq)r8r�r�rrr�test_isatty`szBufferedRWPairTest.test_isattycCs*|�|��|���}t�|�}d}d}dSr:)r�rVrbrc)r8Zbrwrcrrr�test_weakref_clearingus
z(BufferedRWPairTest.test_weakref_clearingN)r#r$r%r&r+r�r�r�r�r.rEr2r5r�r�r�r�r�r�r�r�r�r�r�rrrrr��s,			r�c@r�)�CBufferedRWPairTestN)r#r$r%r�r�r�rrrrr�{r�r�c@r�)�PyBufferedRWPairTestN)r#r$r%r�r�r�rrrrr�~r�r�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+Zd+S),�BufferedRandomTest�rb+zwb+cC�t�|�t�|�dSr:)r"r&r�r@rrrr&�rnz#BufferedRandomTest.test_constructorcCr�r:)r"r+r�r@rrrr+�rnz%BufferedRandomTest.test_uninitializedcCsn|�d�}|�|d�}|�d|�d��|�d�|�d�|�|j�|�d|���|�d|jd	�dS)
N)�asdf�ghjkrG�asrasdddseeer�sdddeeer)rVr�r�rZr=rrr5�r8r`r�rrr�test_read_and_write�s


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�rarr�rs123fs	asdf123flr����rfrMr�sfl�r�)r�r�r�rZrKrJr=rrrr�r�r�rrr�test_seek_and_tell�s$


z%BufferedRandomTest.test_seek_and_tellcCs�|�d�}|�|�}|�d||d��|�d�|�d||d��|�d|���|��|�d|���|�d||��|�dd�|�d	�|��|�dd�|�d	||d
��dS)NrFr}rarmrr�r�rsXYZr�)r�r�r�r=rKrrrJ)r8Z	read_funcr`r�rrr�check_flush_and_read�s



z'BufferedRandomTest.check_flush_and_readcCr�)NcWs
|j|�Sr:)rZ)r�r�rrrro��
z8BufferedRandomTest.test_flush_and_read.<locals>.<lambda>�r�r@rrr�test_flush_and_read�r�z&BufferedRandomTest.test_flush_and_readcC�ddd�}|�|�dS)Nr�cSs.t|dkr|nd�}|�|�}t|d|��S)Nr�')r�rQr�r�rPrrrr�	_readinto�s
z=BufferedRandomTest.test_flush_and_readinto.<locals>._readinto�r�r�)r8r�rrr�test_flush_and_readinto�s
z*BufferedRandomTest.test_flush_and_readintocCr�)Nr�cSs2|�|�}|dkr|d|�}|�t|�d�|S�Nr�rM)r8rJrr�rrr�_peek�s

z5BufferedRandomTest.test_flush_and_peek.<locals>._peekr�r��r8r�rrr�test_flush_and_peek�s
z&BufferedRandomTest.test_flush_and_peekcCsh|�d�}|�|�}|�d�|��|�d�|��|�dd�|�d|���|�d|���dS)NrF�123s45rs	12345fghi)r�r�r=rrrJr�rrZr�rrr�test_flush_and_write�s



z'BufferedRandomTest.test_flush_and_writecCr�r:)r"rjr�r@rrrrj�rnzBufferedRandomTest.test_threadscCs(dd�}|�|�dd�}|�|�dS)NcS�|�d�dSrv)r8r�rrrr��r�z6BufferedRandomTest.test_writes_and_peek.<locals>._peekcSs.|��}|�dd�|�d�|�|d�dS)Nr�rMr)rKrJr8r�rrrr��s
r�r�rrr�test_writes_and_peek�s
z'BufferedRandomTest.test_writes_and_peekcC�dd�}|�|�dS)NcS�|�dd�|�d�dSr�)rJrZr�rrr�_read�rDz7BufferedRandomTest.test_writes_and_reads.<locals>._readr��r8rrrr�test_writes_and_reads��z(BufferedRandomTest.test_writes_and_readscCr)NcSrr�)rJr�r�rrr�_read1�rDz9BufferedRandomTest.test_writes_and_read1s.<locals>._read1r�)r8r	rrr�test_writes_and_read1s�rz)BufferedRandomTest.test_writes_and_read1scCr)NcSs|�dd�|�td��dSr�)rJrQr�r�rrrr�sz;BufferedRandomTest.test_writes_and_readintos.<locals>._readr�rrrr�test_writes_and_readintos�rz,BufferedRandomTest.test_writes_and_readintoscCs�dD]Q}|�d�}|�|d�}|�|�d�d�|�|��d�|�d|�|�|��|d�|��|�|��|d�|��}|�|dd|dd|�qdS)N)rMrfrrrM�A�Br�)r�r�r�rZrKr=rrr)r8Zoverwrite_sizer`r�r�rrr�test_write_after_readahead	s
��z-BufferedRandomTest.test_write_after_readaheadc	Cs�dd�}d}tdt|��D]:}t|t|��D]0}|�|�}|�|d�}||||�|��t|�}d||<d||<|�|��|d||f�qq
dS)	NcSs:|�|�|�||�|�d�|�|�|�d�dS)N��)rJrZr=)r�Zpos1Zpos2rrr�mutate	s



z:BufferedRandomTest.test_write_rewind_write.<locals>.mutates�����rr�rarMzfailed result for i=%d, j=%d)rRrr�r�rrr�r�r)r8rrrO�jr`r��expectedrrr�test_write_rewind_write	s 

���z*BufferedRandomTest.test_write_rewind_writecCs^|�d�}|�|d�}|�|�d�d�|�|��d�|�|�d�d�|�|��d�dS)Nrr�rasAAsBBr)r�r�r�rZrRr=r�rrr�!test_truncate_after_read_or_write2	s
z4BufferedRandomTest.test_truncate_after_read_or_writecCr�r:)r"rkr�r@rrrrk:	rnz%BufferedRandomTest.test_misbehaved_ioc	Cs�|�d��h}|�|d��R}|�d�|�|�d�d�|�d�|�|�d�d�|�d�td�}|�|�|�|d	�|�d
�|�|�d�d�|�	�|�|�
�d�Wd�n1sawYWd�n1spwY|�d
��J}|�|d��+}|�|�d�d�|�d�|�|�d�d�|�	�|�|�
�d�Wd�n1s�wYWd�dSWd�dS1s�wYdS)Nsabcdefghr��1rMr0�2r{r��f�4r�s1b2d3f4hrzr/r~sa2c)r�r�r=r�rZr�r�rQr8rrr)r8r`r/rOrrr�test_interleaved_read_write>	s8




���
��"�z.BufferedRandomTest.test_interleaved_read_writec	Cs�|�d��Y}|�|��;}|�d�|�|��d�|�d�|�|��d�|�d�|�|��d�|��|�|��d�Wd�n1sIwYWd�dSWd�dS1sawYdS)	Ns
ab
cdef
g
rsb
rrr��
s
1b
2def
3
)r�r�r=r�r�rrr)r8r`r/rrr�test_interleaved_readline_writeW	s


��"�z2BufferedRandomTest.test_interleaved_readline_writeN)r#r$r%rdr�r&r+r�r�r�r�r�r�rrjrrr
rrrrrkrrrrorrrrr��s2
r�c@s8eZdZejZedddd�dd��Zdd�Zdd	�Z	d
S)�CBufferedRandomTestTrrrscCrvrw)r�r&r�rkrVr�r�r�rxr�r9r�rrrr&n	ryz$CBufferedRandomTest.test_constructorcCr�r:)rqrfr�r@rrrrfz	rnz+CBufferedRandomTest.test_garbage_collectioncCr})Nr�r#r~r@rrrr~	r�z#CBufferedRandomTest.test_args_errorN)
r#r$r%r�r�r�rr&rfrrrrrrk	s

rc@r�)�PyBufferedRandomTestN)r#r$r%r�r�r�rrrrr�	r�rc@sPeZdZdZddd�Zdd�Zdd�Zd	d
�Zdd�Zddd�Z	dd�Z
d
ZdS)�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�||�|��dSr:)�codecs�IncrementalDecoderr9�reset)r8rVrrrr9�	sz#StatefulIncrementalDecoder.__init__cCsdt|�S)Nz<SID %x>)�idr@rrr�__repr__�	�z#StatefulIncrementalDecoder.__repr__cCsd|_d|_t�|_dSrv)rO�or�r�r@rrrr#�	sz StatefulIncrementalDecoder.resetcCs,|jdA|jdA}}t|j�|d|fS)NrMr�)rOr'rr�)r8rOr'rrr�getstate�	sz#StatefulIncrementalDecoder.getstatecCs:|\}}t|�|_t|d�\}}|dA|dA|_|_dS)Nr�rM)r�r��divmodrOr')r8�stater�r�rOr'rrr�setstate�	s
z#StatefulIncrementalDecoder.setstateFcCs�d}|D]2}|jdkr"|td�kr|jr||��7}q|j�|�q|j�|�t|j�|jkr6||��7}q|rB|jrB||��7}|S)Nr:r�.)rO�ordr��process_wordr;r)r8�input�final�outputrrrr�decode�	s
��
z!StatefulIncrementalDecoder.decodecCs�d}|jdtd�krtdt|jdd�pd��|_n;|jdtd�kr4tdt|jdd�p/d��|_n"|j�d�}t|�|jkrH|d|j7}|jrR|d|j�}|d	7}t�|_|S)
Nr:rrO�crMr'r��-r,)	r�r-r��intrOr'r2rr�)r8r1rrrr.�	s  z'StatefulIncrementalDecoder.process_wordN)r r�)r#r$r%rSr9r%r#r(r+r2r.�codecEnabledrrrrr�	s

rc	Cs:tjr|dkrt�d�}tjd|jddddtd�SdSdS)N�test_decoderr()r��encoder2�incrementalencoder�streamreader�streamwriter�incrementaldecoder)rr6r!�lookup�	CodecInfor8)r��latin1rrr�lookupTestDecoder�	s
��r@c@s eZdZdZgd�Zdd�ZdS)�StatefulIncrementalDecoderTestzB
    Make sure the StatefulIncrementalDecoder actually works.
    ))rJFza.b.c.d.)�oiabcdT�abcd.)soi...abcd...TrC)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)NrBr:rWrMrC)�
test_casesrr�r2)r8r/�eofr1�drrrr7
sz+StatefulIncrementalDecoderTest.test_decoderN)r#r$r%rSrDr7rrrrrA�	srAc@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}�ZHd~d�ZId�d��ZJd�d��ZKd�d��ZLd�d��ZMd�d��ZNd�d��ZOd�d��ZPd�d��ZQd�d��ZRd�d��ZSd�S)��TextIOWrapperTestcCs:d|_d�d�|_t�tj�t�t�|�	tj
t�dS)NsAAA
BBB
CCC
DDD
EEE
sAAA
BBB
CCC
DDD
EEE
r�)�testdatar2�
normalizedrr�r�r!�registerr@r��
unregisterr@rrrr�
s

zTextIOWrapperTest.setUpcCr�r:r�r@rrrr�
rezTextIOWrapperTest.tearDowncCs�|�d�}|�|d�}|j|dd�}|j|ddd�|�|jd�|�|jd�|j|dd	d
�|�|jd�|�|jd	�|�d|���|jt	|j|ddd�|jt
|j|dd
d�dS)N�é

rQr�r)r(�
r�FT)r*�line_buffering�é
rDr�)r�r�r�r9r�r*rNr�r�r�r��r8r'rr�rrrr&"
s
z"TextIOWrapperTest.test_constructorcCsj|j�|j�}~|j�|j�}|�tt|�|�ttfd|jd�|j	|�
�dd�|�|�d�d�dS)Nr)rr�r)r:)r�r*r�rTr�r�r�r.rZr9rVr��r8r�rrrr+0
s
�z$TextIOWrapperTest.test_uninitializedcCsR|��}|�|�}|�td��|j|dd�Wd�dS1s"wYdS)Nzis not a text encoding�hexr))r�r�r��LookupErrorr�)r8r'rrrr�*test_non_text_encoding_codecs_are_rejected;
s

"�z<TextIOWrapperTest.test_non_text_encoding_codecs_are_rejectedcCs�|��}|�|�}|j|dd�}|�|��|�|j|dd�}|�d�|�|���|��|�|��d�|�	t
|j�t|�|�|jd�|�|j
d�|�|j�|�|j�dS)Nr�r)Zhowdyshowdyr )r�r�r�r�r�r=rrrr�r�r�r�r*rVrN�
write_throughrPrrrr�D
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'>r'z=<(%s\.)?TextIOWrapper name='dummy' mode='r' encoding='utf-8'>r�z><(%s\.)?TextIOWrapper name=b'dummy' mode='r' encoding='utf-8'>)r�r8r�r�r$r�r�r��moder�r�)r8r`rr��modnamerrrr�X
s*

�
�
�
�
zTextIOWrapperTest.test_reprc	Csz|��}|j|dd�}t�|d|��!zt|�Wn	ty"Yn	wWd�dSWd�dS1s6wYdS)Nr�r)r�)r�r�rr�r�r��r8r`r�rrrr�l
s���"�z%TextIOWrapperTest.test_recursive_reprcCsx|��}|�|d�}|j|dddd�}|�d�|�|��d�|�d�|�|��d	�|�d
�|�|��d�dS)NrQr��
T�r*r�rN�XrWzY
ZsXY
ZzA
BsXY
ZA
B)r�r�r�r=r�rrPrrr�test_line_bufferingv
s


z%TextIOWrapperTest.test_line_bufferingcCs|��}|�|d�}|j|dddd�}|�d�|�|��d�|jdd	�|�|��d
�|�d�|�|��d�|�d
�|�|��d�|jdd	�|�|��d�|�d�|�|��d�|��|jdd	�|�|jd�|jdd	�|��|jdd	�|�|jd�dS)NrQr�rYFrZzAB
CrWT)rNsAB
CzDEF
Gs	AB
CDEF
G�Hs
AB
CDEF
GHZIJ)r�r�r�r=r�r�reconfigurerNrPrrr�test_reconfigure_line_buffering�
s,



z1TextIOWrapperTest.test_reconfigure_line_bufferingzutf-8 mode is enabledc	Cs�ttj�}zKdD]}|tjvrtj|=qt�d�}|��}t���t�dt	�|�
|�}Wd�n1s7wY|�|j|�Wtj�
�tj�|�dStj�
�tj�|�w)N)�LC_ALL�LANG�LC_CTYPEFr)�dictr��environ�locale�getpreferredencodingr�rrr�EncodingWarningr�r�r*�clear�update)r8Zold_environ�keyZcurrent_locale_encodingrr�rrr�test_default_encoding�
s"

�

�

�z'TextIOWrapperTest.test_default_encodingcsXddl�|��}�fdd�|_|jt|j|dd��fdd�|_|jt|j|dd�dS)Nrc�
�jdSrv)ZINT_MAXr��	_testcapirrro�
r�z8TextIOWrapperTest.test_device_encoding.<locals>.<lambda>rer)crlrv)ZUINT_MAXrrmrrro�
r�)rnr�rEr�r�r�r<rrmr�test_device_encoding�
sz&TextIOWrapperTest.test_device_encodingcCs~|��}|j|dd�}|�|jd�t���t�dt�|�|�}Wd�n1s,wY|�|j�t	�
|j�dS)Nr�r)r)r�r�r�r*rrrrg�assertIsNotNoner!r=�r8rr�rrr�
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*rVrzabc

�replaceuabc
�
)r�r�r��UnicodeErrorrZr�rqrrr�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 rsrrY)r*rVr�u	abcÿdef
sabcdef
rtsabc?def
)r�r�r�rur=rrr�rrqrrr�test_encoding_errors_writing�
s(
�

�
z.TextIOWrapperTest.test_encoding_errors_writingc	Cs*gd�}dgd�gd|gdgd�gdddggd	gd
�gg}d}|D]q}td�|��|��}dD]b}td
d�D]Z}|D]U\}}	|�|�|�|�}
|j|
||d�}|rqg}	|�d�}
|
dkr^n|�t	|
�d�|�
|
|���qTnt|�}t
||	�D]
\}}|�||�qz|�t	|�t	|	��q:q6q/q!dS)N)�unix
�	windows
zos9
�last
�nonl)ryzwindows
zos9
r{r|r:rY)ryrzz	os9
last
r|rMzunix
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)FTrMr��r�r*Tra)rr�r8rRr�r�r�rZr�rr;r�r3�zip)r8Zinput_linesr�	encodingsr*rZdo_readsr$r�Z	exp_linesr��textioZ	got_lines�c2Zgot_lineZexp_linerrr�
test_newlines�
sF



��
�����zTextIOWrapperTest.test_newlinescCs�d}|�dd��dd�}d|�d�jdd�fd|�d�jdd�fd	gd
�fdgd�fd
gd�ffD])\}}|�|�}|j|d|d�}|�|��|�|�d�|�|��d�	|��q1dS)NsAAA
BBB
CCC
DDD
EEE
FFF
GGGs
r�
r�T)�keependsr:rY)zAAA
zBBB
z
CCC
DDD
EEE
�FFF
�GGGrM)zAAA
BBB
CCC
DDD
EEE
r�r�r})z
AAA
BBB
CCC
zDDD
zEEE
z
FFF
z
GGGr�r)
rtr2�
splitlinesr�r�r�rrJrZr�)r8rHrIr�rrO�txtrrr�test_newlines_inputs


�

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

ZsAAA
BBB
CCC
X
Y

Z)r:rYr}rMr�r�zAAA
BzBB
CCC
zX
Y
ZF)r��linesep�sorted�itemsr�r�r=rrr�rxr)r8Ztestdictrr�rrOr�rrr�test_newlines_output+s �


�z&TextIOWrapperTest.test_newlines_outputcsZg�|j�G��fdd�d��}|�}|j|dd�}|�d�~t��|�dg��dS)NcseZdZ��fdd�ZdS)z4TextIOWrapperTest.test_destructor.<locals>.MyBytesIOcs��|�����|�dSr:)r;rrzr@�rFrgrrrzA�z:TextIOWrapperTest.test_destructor.<locals>.MyBytesIO.closeNr�rr�rr�	MyBytesIO@sr�r�r)r�rz)r�r�r=rr>r�)r8r�rr�rr�rr?=s
z!TextIOWrapperTest.test_destructorcsLg�G�fdd�d|j�}|��}||dd�}~t��|��gd��dS)Ncr*)z<TextIOWrapperTest.test_override_destructor.<locals>.MyTextIOcr+rvr,r�r/rrr-Nr1zDTextIOWrapperTest.test_override_destructor.<locals>.MyTextIO.__del__cr2r`r3r@r/rrrzVrnzBTextIOWrapperTest.test_override_destructor.<locals>.MyTextIO.closecr2r4r5r@r/rrrrYrnzBTextIOWrapperTest.test_override_destructor.<locals>.MyTextIO.flushr6rr7rcr�MyTextIOMr9r�r�r)r;)r�r�rr>r�)r8r�rr�rr7rr�Ksz*TextIOWrapperTest.test_override_destructorc	Cs�|��}t���L}|�t��|j|dd�jWd�n1s!wYts/|�|j	�n|j	durD|�
|j	jt�Wd�dSWd�dSWd�dS1sWwYdS)Nr�r))
rurr�r�r.r�r�r�rdr�r�r�ryr�rrrr�bs
�
��"�z/TextIOWrapperTest.test_error_through_destructorcCs�dD]�}dD]�}|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)rMrar�rrfr�r$��� �!�?�@�A)r�r(r��w+r)r�r��r+rrar&rMrir:�def�utf)r+rr�r-r�r=rzrKrZrJr�multi_line_test)r8�	chunksize�encr/�cookierrr�
test_basic_ioqs:


��zTextIOWrapperTest.test_basic_iocCs�|�d�|��d}g}dD]+}g}t|�D]
}|�||t|��qd�|�d}|�|��|f�|�|�q|�d�g}		|��}
|��}|sNn|	�|
|f�qC|�	|	|�dS)Nru	sÿ࿿￿)rrMrar�rrf�r�r�r��>r�r�r�rQr:rY)
rJrRrRr;rr�rKr=r�r�)r8r/r��sampleZwlinesr��charsrO�lineZrlinesrrrrr��s*

�z!TextIOWrapperTest.multi_line_testcCs�|jtjddd�}|��}|�d�|��}|�d�|��}|�d�|�|��|�|�|��d�|�|��|�|�|��d�|�|��|�|�d�|D]}|�|d�|�t	|j�qS|�|��|�|�
�dS)Nr�r�r)uÿ
r)r+rr�rKr=rJr�r�r�ryrz)r8r/�p0�p1Zp2r�rrr�test_telling�s$



zTextIOWrapperTest.test_tellingc
Cst�}|d}d|}t|�d��}|�t|�t|��d}t|�d��}||}|�tjd��}|�|d�Wd�n1sBwY|jtjddd��'}|�	|�}	|�|	t
|d��|�|��|�|�|��|�Wd�dS1szwYdS)	Nrar'r��袈
r�r'r)r�)
r0rr8r�rr+rr�r=rZr�rKr�)
r8�
chunk_sizeZprefix_sizeZu_prefix�prefixZu_suffix�suffixr�r/r�rrr�test_seeking�s"�
"�zTextIOWrapperTest.test_seekingcCs�d}|�tjd��
}|�|�Wd�n1swY|jtjddd��}|jd|_|��|��Wd�dS1sAwYdS)Ns࿿
r�r'r�r)ra)r+rr�r=r-r�rK)r8rr/rrr�test_seeking_too�s�
"�z"TextIOWrapperTest.test_seeking_toocs�d�d��fdd�	}dt_z3tjD]	\}}}||�qtjD]\}}}�t|�d}d|}|d}||||�qWdt_dSdt_w)	N�rc	s���tjd�}|�|�|���jtjdd�}�|_|��}|��t|t|�d�D]K}ddt|�|fD]?}�jtjdd�}��	|�|�|d|��|�
�}��	|�|�||||��|�|���	|��||d��|��q7q,dS)zTell/seek to various points within a data stream and ensure
            that the decoded data returned by read() is consistent.r�r7r)rMrfN)r+rr�r=rzr-rZrRrr�rKrJ)r�min_posr/ZdecodedrOrr��Z
CHUNK_SIZEr8rr�test_seek_and_tell_with_data�s$


��zJTextIOWrapperTest.test_seek_and_tell.<locals>.test_seek_and_tell_with_datarMra�.r�)rr6rArDr)r8r�r/�_�offsetr�r�rr�rr��s
�	z$TextIOWrapperTest.test_seek_and_tellcCs�|jtjddd�}|�d�|��|jtjddd�}|�|��d�|��}|�|��d�|��}|�|�|�|��d�|�|��|�|��dS)Nr��euc_jpr)u
AB
うえ
r'zAB
uうえ
)	r+rr�r=rzr�r�rKrJ)r8r/r�r�rrr�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æ̀�æùr'uæ̀̀)	r+rr�r=rKrJrzr�r�)r8r/r�rrr�test_seek_with_encoder_states



z.TextIOWrapperTest.test_seek_with_encoder_statecCs�d}d}|D]B}|��}|j||d�}|�|�|�|�|�d�|�|��|d�|�d�|�|��|d�|�|��|d�|��qdS)NZ
1234567890)r~rr�r�r�r�r)rra)r�r�r=rJr�rZrr8)r8rrr*rOr/rrr�test_encoded_writess



�z%TextIOWrapperTest.test_encoded_writescCs4Gdd�d|j�}|j|�dd�}|�t|j�dS)Nc@r)z5TextIOWrapperTest.test_unreadable.<locals>.UnReadablecSr>r�rr@rrrrF5rBz>TextIOWrapperTest.test_unreadable.<locals>.UnReadable.readableNr�rrrr�
UnReadable4rr�r�r))r�r�r�ryrZ)r8r�r�rrr�test_unreadable3sz!TextIOWrapperTest.test_unreadablecC�D|j|�d�dd�}d}	|�d�}|sn||7}q
|�|d�dS)NsAA
BBr�r)r:TrMzAA
BB�r�r�rZr��r8r��readsrirrr�test_read_one_by_one:s
�z&TextIOWrapperTest.test_read_one_by_onecCsl|j|�d�dd�}|�|��gd��|�d�|�|�d�gd��|�d�|�|�d�ddg�dS)	NsAA
BB
CCr�r))�AA
�BB
ZCCrrfr�r�)r�r�r�rrJ�r8r�rrrrEDs

z TextIOWrapperTest.test_readlinescCr�)Ns�AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
Br�r)r:Tr�z�AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
Br�r�rrr�test_read_by_chunkMs
�z$TextIOWrapperTest.test_read_by_chunkcCsDgd�}|��}|j|dd�}|�|�|��|�|��d�dS�N)r&ZcdZefr�r)r�)r�r�r�rrr�r�r8rgrOr�rrrr�Xs
z!TextIOWrapperTest.test_writelinescCsHtgd��}|��}|j|dd�}|�|�|��|�|��d�dSr�)rr�r�r�rrr�rr�rrrr�`s
z*TextIOWrapperTest.test_writelines_userlistcCsJ|j|��dd�}|�t|jgd��|�t|jd�|�t|jd�dS)Nr�r)r;rz)r�r�r�r�r�r�rrrr�hsz'TextIOWrapperTest.test_writelines_errorcCsH|j|�|j�dd�}d}	|�d�}|sn||7}q|�||j�dS)Nr�r)r:TrM)r�r�rHrZr�rIr�rrr�test_issue1395_1ns
�z"TextIOWrapperTest.test_issue1395_1cCsN|j|�|j�dd�}d|_d}	|�d�}|sn||7}q|�||j�dS)Nr�r)rr:�r�r�rHr-rZr�rIr�rrr�test_issue1395_2zs
�z"TextIOWrapperTest.test_issue1395_2cCsj|j|�|j�dd�}d|_|�d�}||�d�7}||��7}||��7}||��7}|�||j�dS�Nr�r)r)r�r�rHr-rZr�r�rI�r8r�r�rrr�test_issue1395_3�s
z"TextIOWrapperTest.test_issue1395_3cCsD|j|�|j�dd�}d|_|�d�}||��7}|�||j�dSr�r�r�rrr�test_issue1395_4�s

z"TextIOWrapperTest.test_issue1395_4cCsX|j|�|j�dd�}d|_|�d�}|��}|�d�|�|�|�|�d�d�dS)Nr�r)rrzBBB
)r�r�rHr-rZrKrJr�)r8r�r�rrrr�test_issue1395_5�s


z"TextIOWrapperTest.test_issue1395_5cCs2|�|j�}|j|dd�}|�|��|���dS�Nr�r))r�rHr�r�rG)r8r�r�rrr�test_issue2282�sz TextIOWrapperTest.test_issue2282c	Cstj}dD]�}|j|d|d��}|�d�|��}Wd�n1s#wY|�|d��}|�|��d�|��Wd�n1sDwY|j|d|d��
}|�d�Wd�n1sawY|�|d��}|�|��d�|��Wd�n1s�wYqdS)	N��	utf-8-sigr~r�r�r)�aaar�r'�xxx�aaaxxx)rr�r+r=rKr�rZr8�r8�filename�charsetr/rrrr�test_append_bom�s"

������z!TextIOWrapperTest.test_append_bomc	Cs�tj}dD]p}|j|d|d��}|�d�|��}Wd�n1s#wY|j|d|d��}|�|�|�d�|�d�|�d�Wd�n1sOwY|�|d	��}|�|��d
�|��Wd�n1spwYqdS)Nr�r�r)r�r�Zzzzr�bbbr�Zbbbzzz)	rr�r+r=rKrJr�rZr8r�rrr�
test_seek_bom�s"

�


����zTextIOWrapperTest.test_seek_bomc	Cs�tj}dD]i}|j|d|d��
}|�d�Wd�n1swY|j|d|d��}|�d�|�d|j�|�d�Wd�n1sHwY|�|d��}|�|��d	�|��Wd�n1siwYqdS)
Nr�r�r)r�r'rr�r�r�)	rr�r+r=rJr�r�rZr8)r8r�r�r/rrr�test_seek_append_bom�s�
����z&TextIOWrapperTest.test_seek_append_bomcCs�|jtjddd��}|�|jd�Wd�n1swY|jtjdddd��}|�|jd�Wd�dS1s=wYdS)Nr�r�r)r rtrs)r+rr�r�rVr�rrr�test_errors_property�s�"�z&TextIOWrapperTest.test_errors_propertyc	s�t���|jtjdddd��6���fdd���fdd�td	�D�}t�|�j��
t	�
d
�Wd�n1s8wYWd�n1sGwY|jtjdd������}td	�D]
}|�|�
d|�d�q]Wd�dS1svwYdS)
Nr�r�rMr�csd|}�����|�dS)N�Thread%03d
)r�r=)rP�text)�eventr/rr�run�sz1TextIOWrapperTest.test_threads_write.<locals>.runcsg|]
}tj�|fd��qS)r�r[r\)r�rrr^�s�z8TextIOWrapperTest.test_threads_write.<locals>.<listcomp>r�r`r)r�)rkrlr+rr�rRrrerorprqrZr�r)r8rhZcontentrPr)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��r:)rxr�ryr�rxr�rrrn�sz>TextIOWrapperTest.test_flush_error_on_close.<locals>.bad_flushrrMcSrr:rrrrrro�rpz=TextIOWrapperTest.test_flush_error_on_close.<locals>.<lambda>)r�r�rHrrr�ryrzrqrxr�rrr�rr�rrx�s
z+TextIOWrapperTest.test_flush_error_on_closecCs�|�|j�}dd�}dd�}||_|j|dd�}||_|�t��}|��Wd�n1s/wY|�|jj	d�|�
|jjt�|�|jjj	d�|�|j
�d	d
�|_dd
�|_dS)NcSrrr�rrrrrn�rz>TextIOWrapperTest.test_close_error_on_close.<locals>.bad_flushcSrrr�rrrrr
rz>TextIOWrapperTest.test_close_error_on_close.<locals>.bad_closer�r)rrcSrr:rrrrrro
rpz=TextIOWrapperTest.test_close_error_on_close.<locals>.<lambda>cSrr:rrrrrro
rp)r�rHrzr�rrr�ryr�r�r�rrrrrx�r8r�rnrr�r
rrrr�s
�
z+TextIOWrapperTest.test_close_error_on_closecCs�|�|j�}dd�}dd�}||_|j|dd�}||_|�t��}|��Wd�n1s/wY|�dt|j	��|�
|j	jt�|�dt|j	j��|�|j
�d	d
�|_dd
�|_dS)NcSrr:r
rrrrrn
rBzLTextIOWrapperTest.test_nonnormalized_close_error_on_close.<locals>.bad_flushcSrr:rrrrrr
rBzLTextIOWrapperTest.test_nonnormalized_close_error_on_close.<locals>.bad_closer�r)rrcSrr:rrrrrro#
rpzKTextIOWrapperTest.test_nonnormalized_close_error_on_close.<locals>.<lambda>cSrr:rrrrrro$
rp)r�rHrzr�rrr�rrr�r�rrrrrxr�rrrr
s
�
z9TextIOWrapperTest.test_nonnormalized_close_error_on_closecCs@|j|�|j�dd�}|��|��|��|�t|j�dSr�)r�r�rHrzr�r�rrr�rrrry&
s
z"TextIOWrapperTest.test_multi_closecCs<|j|�|j�dd�}|�|j|j�|�|j|jd�dS)Nr�r)r)r�r�rHr�r�rKrJr�rrrr-
sz!TextIOWrapperTest.test_unseekablecCsX|j|�|j�dd�}|�|j�}|�t��||_Wd�dS1s%wYdSr�)r�r�rHr�r.r�)r8r�rOrrrr2
s
"�z*TextIOWrapperTest.test_readonly_attributescCsX|�gd��}|j|ddd�}|�|�d�d�|�|��d�|�t|�dd	g�dS)
N�rzr�sghi
jkl
opq
r�rYr�rZabcdzefghi
zjkl
zopq
)rVr�r�rZr�r3�r8r`r�rrr�
test_rawio8
s
zTextIOWrapperTest.test_rawiocCsV|�gd��}|j|dddd�}|�d�|�d�|�d�|�d	�|j�d
�dS)Nr�r�rYT)r*r�rU�1z23
4�5rWs123
45)rVr�r=r�r�r5r�rrr�test_rawio_write_throughC
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>.BufferedWriterc���d�t�j|i|��Sr?r5�r8r�rs)rd�flush_calledrrrrR
�
zHTextIOWrapperTest.test_bufio_write_through.<locals>.BufferedWriter.flushcr�r?)r;rbr=r�)rd�write_calledrrr=U
r�zHTextIOWrapperTest.test_bufio_write_through.<locals>.BufferedWriter.write)r#r$r%rrr=rgr�r�r�rcrr�Q
sr�r/rar�T)r*rUrWr�r�)
r�r�rr�r2r=rrrqr�r)r8r�r�rr�r�r�rr�r�test_bufio_write_throughM
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�rYr�r�T)rUrWrZ23r�FZ45r�)	rVr�r=r^r�rUr�r5rrrXrrr�test_reconfigure_write_throughm
s(



z0TextIOWrapperTest.test_reconfigure_write_throughcCsl|j|�d�dd�}|�t|jd�|j|�d�dd�}|�t|j�|j|�d�dd�}|�t|j�dS)Nr'r�r)rM)r�r�r�r�rZr�rQrrr�test_read_nonbytes�
sz$TextIOWrapperTest.test_read_nonbytescCs`t�d�}t�|dd��tjt�d�dd�}Wd�n1s!wY|�t|j	d�dS)N�rot13�_is_text_encodingT�foor)Zbar)
r!r=rr�r�r�r�r�r�r=)r8r�r�rrr�test_illegal_encoder�
s

�z&TextIOWrapperTest.test_illegal_encodercs��fdd����}��t|jd���}��t|j���}��t|j��fdd�}|d�}��t|jd�|d�}��t|jd�|d�}��t|jd�dS)	Ncs<t�d�}d|_z�j��d�ddd�}Wd|_|Sd|_w)N�quopriTsaaaaaarYr�F)r!r=r�r�r�)rr�r@rr�_make_illegal_wrapper�
s
��zETextIOWrapperTest.test_illegal_decoder.<locals>._make_illegal_wrapperrMcs`G�fdd�d���fdd�}t�d�}t�|d|����Wd�S1s)wYdS)NcseZdZ�fdd�ZdS)z^TextIOWrapperTest.test_illegal_decoder.<locals>._make_very_illegal_wrapper.<locals>.BadDecodercr�r:rr@��getstate_ret_valrrr(�
rBzgTextIOWrapperTest.test_illegal_decoder.<locals>._make_very_illegal_wrapper.<locals>.BadDecoder.getstateN)r#r$r%r(rrrr�
BadDecoder�
srcs��Sr:r)r�)rrr�_get_bad_decoder�
r�zdTextIOWrapperTest.test_illegal_decoder.<locals>._make_very_illegal_wrapper.<locals>._get_bad_decoderrr<)r!r=rr�)rrr)r)rrr�_make_very_illegal_wrapper�
s
�$�zJTextIOWrapperTest.test_illegal_decoder.<locals>._make_very_illegal_wrapperrDr)rMra)r�r�rZr�)r8r�rr)rr8r�test_illegal_decoder�
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()
            )�iomodrs�-c)r�r#rjr)r8rsr
�coderrr�_check_create_at_shutdown�
s
�
z+TextIOWrapperTest._check_create_at_shutdowncCs@|��\}}}|r|�|j|���dS|�d|�����dS)N�ok)r
r�shutdown_errorr2r��strip�r8�rc�outr
rrr�(test_create_at_shutdown_without_encoding�
sz:TextIOWrapperTest.test_create_at_shutdown_without_encodingcCs6|jddd�\}}}|�|�|�d|�����dS)Nr�r rsr)r
rrr�r2rrrrr�%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�r�)�MemviewBytesIOr��_to_memoryviewrrSr�rZr2)r8r'r�Z	bytes_valrrr�test_read_byteslike�
sz%TextIOWrapperTest.test_read_byteslikec	CsbGdd�dt�}td�D]}z
|j|�dd�Wqty!Yqwdd�|_|j|�dd�}dS)Nc@r�)z,TextIOWrapperTest.test_issue22849.<locals>.FcSr>r?rr@rrrrF�
rpz5TextIOWrapperTest.test_issue22849.<locals>.F.readablecSr>r?rr@rrrrA�
rpz5TextIOWrapperTest.test_issue22849.<locals>.F.writablecSr>r?rr@rrrrG�
rpz5TextIOWrapperTest.test_issue22849.<locals>.F.seekableN)r#r$r%rFrArGrrrr�F�
srr�r�r)cSr>r2r�rrrrro�
rpz3TextIOWrapperTest.test_issue22849.<locals>.<lambda>)�objectrRr�rTrK)r8rrOr�rrr�test_issue22849�
s�
z!TextIOWrapperTest.test_issue22849cCs�d�d�d�d�}|�|�}|j|ddd�}|�|��d�|�|j��|jdd�Wd�n1s6wY|�|j��|jdd	�Wd�dS1sSwYdS)
N�abcé
r?�déf
�utf8rYr�r�r)�r�)r8r�r�r�r�r�r�r^)r8rr`r�rrr�test_reconfigure_encoding_read�
s
�"�z0TextIOWrapperTest.test_reconfigure_encoding_readcCsT|��}|j|ddd�}|�d�|jdd�|�d�|��|�|��d�dS)	Nr�rYr�zfoo
r�r)rOsfoo
é
)r�r�r=r^rrr�rr�rrr� test_reconfigure_write_fromasciis

z2TextIOWrapperTest.test_reconfigure_write_fromasciicCs�|��}|j|ddd�}|�d�|jdd�|�|��d�|�d�|��|�|��d	�|��}|j|d
dd�}|�d�|jdd�|�d�|��|�|��d
�dS)Nr?rYr�rr�r)sabc�
rs
abc�
déf
r��abc
r�s	abc
déf
)r�r�r=r^r�rrrr�rrr�test_reconfigure_writes



z(TextIOWrapperTest.test_reconfigure_writecCsd|��}dd�|_d|_|j|ddd�}|�d�|jdd�|�d	�|��|�|��d
�dS)NcSr>r�rrrrrro+rpzGTextIOWrapperTest.test_reconfigure_write_non_seekable.<locals>.<lambda>r�rYr�r#r�r)rsabc
déf
)	r�rGrJr�r=r^rrr�rr�rrr�#test_reconfigure_write_non_seekable)s


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�rtrYr)�LF
rMr r)rV�CRLF
r�r�r rzLF
CRLF
s	LF
CRLF
)r�r�r^r�r*rVr=rJrZr�rr�rrr�test_reconfigure_defaults6s"


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�rYr zCR
r:zCR
s	CR
LF
EOFr}zCR
LF
s	LF
CR
EOFzLF
CR
sCR
CRLF
EOFrMz	CR
CRLF
zlinesep
r&r'r�zLF
LF
CR
CRLF
)r�r�r^r�r�r=r�r�r�rr2)r8r`r�rrrr�test_reconfigure_newlineMsB









z*TextIOWrapperTest.test_reconfigure_newlinecCsb|j|�d�dd�}|�d�|��|��|j|�d�dd�}|�d�|�d�|��dS)Nstestr�r)rMr)r�r�rZrKr=rQrrr�test_issue25862qs


z!TextIOWrapperTest.test_issue25862N)Tr#r$r%r�r�r&r+rTr�r�r�r\r_�unittest�skipIfr�r��	utf8_moderkrr!rorrrvrxr�r�r�r?r�r�r�r�r�r�r�r�r�r�r�r�r�rEr�r�r�r�r�r�r�r�r�r�r�r�r�r��
no_tracingr�rxrrryrrr�r�r�r�r�rr	r
rrrrr!r"r$r%r(r)r*rrrrrG
s�	

	*/

	



 
(	
$rGcs,eZdZdZ�fdd�Z�fdd�Z�ZS)rzOA BytesIO object whose read method returns memoryviews
       rather than bytesc�tt��|��Sr:)rrbr��r8Zlen_rcrrr��rezMemviewBytesIO.read1cr/r:)rrbrZr0rcrrrZ�rezMemviewBytesIO.read)r#r$r%rSr�rZrgrrrcrr}srcCs:t�d�}t|�t|�|j}|�|d|��t|�S)z6Convert bytes-object *buf* to a non-trivial memoryviewrON)rr�itemsize�	frombytesr)rOZarr�idxrrrr�s
rc@s<eZdZeZdZdd�Zdd�Zdd�Zdd	�Zd
d�Z	dS)
�CTextIOWrapperTest�$LookupError: unknown encoding: asciicCsh|�d�}|�|d�}|j|dd�}|jt|j|ddd�|�t|j�|j�|j�}|�tt	|�dS)NrLrQr�r)r�r�)
r�r�r�r�r�r9rZr*rTr�rPrrrrz�s
z&CTextIOWrapperTest.test_initializationcCs�t�dtf��-t�tjd�}|�|�}|j|dd�}|�	d�||_
t�|�}~t
��Wd�n1s7wY|�|�|�|�tjd��}|�|��d�Wd�dS1s^wYdS)Nr:r�r�r)Z456defr�s456def)r
r<r=r�r�rr�r�r�r=rrbrcrr>rdr+r�rZ)r8r�rr�rer/rrrrf�s



�	"�z*CTextIOWrapperTest.test_garbage_collectioncCsjtd�D]*}|�|��|���}|j|dd�}|�|��|���}|j|dd�}||_||_qt��dS)NrQr�r))rRr�rVr�Zbuddyrr>)r8rO�b1�t1�b2�t2rrr�!test_rwpair_cleared_before_textio�sz4CTextIOWrapperTest.test_rwpair_cleared_before_textiocCsF|j|��dd�}|�t��|`Wd�dS1swYdSr�)r�r�r�r.r-rQrrr� test_del__CHUNK_SIZE_SystemError�s"�z3CTextIOWrapperTest.test_del__CHUNK_SIZE_SystemErrorcs�d�G�fdd�d|j�}|�}|j|dd�}|j�|�d�|�d�|�g|j�|�t��|�d�d	�Wd�n1sDwY|�d
g|j�|�d�|�d��|�d
dd
�g|j�dS)NrcseZdZ��fdd�Z�ZS)z<CTextIOWrapperTest.test_internal_buffer_size.<locals>.MockIOcst|��krt�t��|�Sr:)rr�rbr=r)rdr�rrr=�szBCTextIOWrapperTest.test_internal_buffer_size.<locals>.MockIO.write)r#r$r%r=rgr�r�rcr�MockIO�sr=r�r)r�r�rrMr�Zghir�r�)rVr�r-r=r�r5r�r�)r8r=rOr�rr<r�test_internal_buffer_size�s

�
z,CTextIOWrapperTest.test_internal_buffer_sizeN)
r#r$r%r�rrzrfr:r;r>rrrrr4�s
r4c@seZdZeZdZdS)�PyTextIOWrapperTestr5N)r#r$r%r�r�rrrrrr?�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)NcsJ���}���j|fi|��|���|����j|fi|��|�dSr:)r(r�r2r+)rr�rsr*��decoderr8rr�
_check_decode�s
zPIncrementalNewlineDecoderTest.check_newline_decoding_utf8.<locals>._check_decodes袈u袈��r:����rWT)r0rrYr�r/z
a�

z

s
as袈
r�s袈
)r��UnicodeDecodeErrorr2r#)r8rBrCrrAr�check_newline_decoding_utf8�s4



















z9IncrementalNewlineDecoderTest.check_newline_decoding_utf8csg�|durt�|������fdd�}n	d���fdd�}|��jd�|d�|��jd�|d�|��jd�|d�|��jd�|d	�|��jd
�|d�|�d���d����d	}�durq�����|�}|���|�d	�|��jd�dS)
Ncs*��|�D]
}����t|g���qdSr:)r8r;r2r)r�r�rB�encoderr�rr�_decode_bytewises�zNIncrementalNewlineDecoderTest.check_newline_decoding.<locals>._decode_bytewisecs|D]
}����|��qdSr:)r;r2)r�ri)rBr�rrrLs�zabc

rYz
abc)rYrMzabc
r�)r}rYrMr:zabc

abcabc
abcabc)r!�getincrementalencoderr��newlinesr�r#r8r2)r8rBr*rLr/rrJr�check_newline_decodings0
z4IncrementalNewlineDecoderTest.check_newline_decodingcCspd}|D]}|o
t�|��}|j|dd�}|�||�qt�d��}|j|dd�}|�|�|�t|jd�dS)N)	Nr�r(r~rr�r�r�r�T��	translater�rD)r!�getincrementaldecoder�IncrementalNewlineDecoderrOrIr�r�r+)r8r�r�rBrrr�test_newline_decoder0s
z2IncrementalNewlineDecoderTest.test_newline_decodercs<�fdd�}�jddd�}||��jddd�}||�dS)NcsR��|jd���|�d�d���|jd���|�d�d���|jd�dS)Nuഀu਀)r�rNr2)�decr@rr�_checkCs
z@IncrementalNewlineDecoderTest.test_newline_bytes.<locals>._checkFrPT)rS)r8rVrUrr@r�test_newline_bytesAs
z0IncrementalNewlineDecoderTest.test_newline_bytescCs\dD]}t�d��}|�||�}|�|�qt�d��}|j|dd�}|�|�d�d�dS)N)r�r�rMrar�rrPrGz

)r!rRrSrIr�r2)r8rQrBrrr�test_translateNsz,IncrementalNewlineDecoderTest.test_translateN)r#r$r%rIrOrTrWrXrrrrr@�s*!
r@c@seZdZejdd��ZdS)�CIncrementalNewlineDecoderTestcCsN|j�|j�}|�t|jd�|�t|j�|�t|jd�|�t|j�dS)N�bar)rr)rSr*r�r�r2r(r+r#)r8Z
uninitializedrrrr+Ys�z1CIncrementalNewlineDecoderTest.test_uninitializedN)r#r$r%rr!r+rrrrrYXsrYc@r!)�PyIncrementalNewlineDecoderTestNr"rrrrr[cr&r[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-d.�Zd/d0�Zeje j!e"d1�d2d3���Z#d4S)5�
MiscIOTestcCr�r:r�r@rrrr�krezMiscIOTest.tearDowncCsz|jjD]6}t|j|d�}|�||�|dvrqd|��vs"|dkr,|�t|t�|�q|�d�s:|�t||j	��qdS)N)r+�	open_code�errorr�ZSEEK_)
r��__all__r�rp�lowerrq�
issubclassrTrr)r8r�r rrr�test___all__ns
��zMiscIOTest.test___all__cCs�|jtjddd�}|�|jd�|��t�dtf��|jtjddd�}Wd�n1s/wY|�|j	tj�|�|j
j	tj�|�|j
jj	tj�|�|jd�|�|j
jd�|�|j
jjd�|��|jtjd	dd�}|�|jd	�|�|j
jd
�|�|j
jjd
�|j|��ddd�}|�|jd�|�|jjd�|�|j	|���|�|jj	|���|��|��dS)
Nr�rr�r:�Ur�r)r�r�r�Fr[)
r+rr�r�rVrzr
r<rr�r�r`rE)r8r/�grrr�test_attributesys0�zMiscIOTest.test_attributescCsVt��\}}|�tj|�|j|ddd�}|�|j�tjdkr)|�|���dSdS)Nr'r�r)�win32)	r�r�r�rzr+r�r�rrrG)r8r'r�r/rrr�test_open_pipe_with_append�s
�z%MiscIOTest.test_open_pipe_with_appendcCsddiddiddd�ddd�ddd�ddidd	iddd�ddd�d	dd�dd
iddid
dd�d
dd�ddd�fD]�}d|dvrDd
|d<|jtjfi|��}|��|�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�r�|�t|j�t
|d�r�|�t|jtd��t
|d�r�|�t|jtd��|�t|j�|�t|j�|�t|jd�|�t|jd�|�t|j�|�t|j�|�t|jd|dvr�dnd�|�t|jg�|�tt|�q8dS)NrVr�r�rM�rVr�rarr'r�r�r!rr�r*r8r�r#r�rQr�rWr:)r+rr�rzr�r�rrrEr��__iter__r�r8rZr�r�rQr�r�r�rrJrKrRr=r�r)r8rsr/rrr�test_io_after_close�s`�





��zMiscIOTest.test_io_after_closecCsXGdd�dt�}|d�}|�d|�}||_||_t�|�}~~t��|�|�|�dS)Nc@r!)z*MiscIOTest.test_blockingioerror.<locals>.CNr"rrrr�C�r&rkr:rM)	r�r�rrirbrcrr>rd)r8rkrirrerrr�test_blockingioerror�s
zMiscIOTest.test_blockingioerrorcCsD|�|jtj�|�|jtj�|�|jtj�|�|jtj�dSr:)rrr��ABCMetar�r�r�r@rrr�	test_abcs�szMiscIOTest.test_abcscCs@|jtjddd��$}|�||j�|�||j�|�||j�|�||j�Wd�n1s0wY|�tjd��$}|�||j�|�||j�|�||j�|�||j�Wd�n1scwY|jtjddd��%}|�||j�|�||j�|�||j�|�||j�Wd�dS1s�wYdS�Nr�rr�r�r�r))	r+rr�rrr�ZassertNotIsInstancer�r�)r8Z	abcmoduler/rrr�_check_abc_inheritance�s$��"�z!MiscIOTest._check_abc_inheritancecCs|�|�dSr:)rpr@rrr�test_abc_inheritance�szMiscIOTest.test_abc_inheritancecCs|�t�dSr:)rpr�r@rrr�test_abc_inheritance_official�sz(MiscIOTest.test_abc_inheritance_officialcOsht|i|��}t|�}|�t��}d}t��Wd�n1s!wY|�|t|jj	d��dSr2)
r+r�ZassertWarnsr=rr>rr��warningr�)r8r�rsr/r'r�rrr�_check_warn_on_dealloc�s
�z!MiscIOTest._check_warn_on_dealloccCs6|jtjddd�|�tjd�|jtjddd�dSro)rtrr�r@rrr�test_warn_on_deallocszMiscIOTest.test_warn_on_dealloccs�g��fdd�}|�|�t��\}}�||f7�|j|g|�Ri|��t��\}}�||f7�t�|��t|g|�Rddi|��Wd�dS1sOwYdS)NcsN�D]"}zt�|�Wqty$}z
|jtjkr�WYd}~qd}~wwdSr:)r�rzryr�r�)rwrU��fdsrr�cleanup_fdss����z9MiscIOTest._check_warn_on_dealloc_fd.<locals>.cleanup_fdsrWF)r�r�r�rtr
r�r+)r8r�rsrxr'r�rrvr�_check_warn_on_dealloc_fds
"�z$MiscIOTest._check_warn_on_dealloc_fdcCs*|jddd�|�d�|jddd�dS)Nr�rr�r'r�r))ryr@rrr�test_warn_on_dealloc_fds
z"MiscIOTest.test_warn_on_dealloc_fdcCs�ddiddiddd�ddiddiddd�ddidd	id	dd�f	D]9}d
|dvr,d|d<ttjd
�D]%}|jtjfi|���}|�ttj||�Wd�n1sSwYq3q dS)NrVr�r�rrhr'r�r�r!rr�r*rM)	rR�pickle�HIGHEST_PROTOCOLr+rr�r�r��dumps)r8rs�protocolr/rrr�
test_pickling%s&�����zMiscIOTest.test_picklingcCr)Ni@��_test_nonblock_pipe_writer@rrr�test_nonblock_pipe_write_bigbuf8r�z*MiscIOTest.test_nonblock_pipe_write_bigbufcCr)Nr#r�r@rrr�!test_nonblock_pipe_write_smallbuf;r�z,MiscIOTest.test_nonblock_pipe_write_smallbuf�set_blockingz(os.set_blocking() required for this testc
Cs0g}g}t��\}}t�|d�t�|d�|j|dd|d�}|j|dd|d�}|��|��dD]d}zd}		t|	dd	g�|}
|�|
�|�|
�|	d
7}	q6|jy�}z8|�|j	dt
j�|�|j	d|j�|dd|j�|d<|�|�
��d
}
|�|
�|�|
�WYd}~q0d}~ww	z|��Wn6|jy�}z(|�|j	dt
j�|�|j	d|j�|�|jd�|�|�
��WYd}~nd}~wwq�|t|j
d�7}Wd�n1s�wYWd�n1s�wYd�|�d�|�}}|�||�|�|j�|�|j�dS)NFr�T)rVrWr�r�)r��Ii�r��arMrar�sBLOCKEDrW)r�r�r�r+rr;r=r�r�r�r��EAGAINr�rZrr�iterr�rqrx)r8r$�sentZreceivedr'r�ZrfZwfrfrOr�rUrrrr�>s^

�
��	���
��z$MiscIOTest._test_nonblock_pipe_writecCsN|jtjddd��Wd�n1swY|jt|jtjddd�dS)Nr�r�r)r)r+rr�r��FileExistsErrorr@rrr�test_create_failrs�zMiscIOTest.test_create_failcCs||�tjd��
}|�d�Wd�n1swY|�tjd��}|�d|���Wd�dS1s7wYdS)N�xbr�r�rMr�rrr�test_create_writesxs�"�zMiscIOTest.test_create_writescCs|jt|jtjddd�dS)Nzrwax+r�r)rXr@rrr�test_open_allargsszMiscIOTest.test_open_allargscCsn|jj}t}d}t�d|�d|�d|�d|�d|�d|�d|�d	|�d
��}tddd
|�}|�|jd|�dS)NzBoom, 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�devrr�)r�r#r,�textwrap�dedentrr�r)r8�modr�r�r�procrrr�test_check_encoding_errors�s,�������
�$z%MiscIOTest.test_check_encoding_errorsc	Cs~|jj}t}t�d|�d|�d|�d��}tddd|�}|j��}|�t	|�d�|�
|d	�d
��|�
|d�d��dS)
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_encodingrrars<string>:5: EncodingWarning: rMs<string>:8: EncodingWarning: )r�r#r,r�r�rr
r�r�rrqr)r8r�r�rr�rrrr�test_check_encoding_warning�s$��
�

��z&MiscIOTest.test_check_encoding_warning)�categorycCs|�|jj|jj�dSr:)r�r��OpenWrapperr+r@rrr�test_openwrapper�szMiscIOTest.test_openwrapperN)$r#r$r%r�rbrergrjrlrnrprqrrrtruryrzrr�r�r+Z
skipUnlessr�r�r�r�r�r�r�r�rr!r
Zignore_warningsrr�rrrrr\is<1
�
2-
r\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@BrrYrrrrZ�rzACMiscIOTest.test_readinto_buffer_overflow.<locals>.BadReader.readNr�r[rrrr�	BadReader�sr�ra)r�r�r�r�r�rQ)r8r�r�rrrr�test_readinto_buffer_overflow�sz)CMiscIOTest.test_readinto_buffer_overflowcCs^d�t��}td|�\}}|j��}|jdkr%d�t��}|�||�dS|�|�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()
            rrz�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
r2rr�rrr)r8Zstream_namerr�r�r
�patternrrr�&check_daemon_threads_shutdown_deadlock�s�

�z2CMiscIOTest.check_daemon_threads_shutdown_deadlockcCr)N�stdout�r�r@rrr�,test_daemon_threads_shutdown_stdout_deadlockr�z8CMiscIOTest.test_daemon_threads_shutdown_stdout_deadlockcCr)N�stderrr�r@rrr�,test_daemon_threads_shutdown_stderr_deadlockr�z8CMiscIOTest.test_daemon_threads_shutdown_stderr_deadlockN)r#r$r%r�r�r�r�r�rrrrr��s	)r�c@seZdZeZdS)�PyMiscIOTestN)r#r$r%r�r�rrrrr��r��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�|_dSr:)�signal�SIGALRM�alarm_interrupt�oldalrmr@rrrr�rzSignalsTest.setUpcCst�tj|j�dSr:)r�r�r�r@rrrr��zSignalsTest.tearDowncCsdddSrLr)r8�sig�framerrrr�r&zSignalsTest.alarm_interruptc
s�t��g���fdd�}tj|d�}d|_t��\�}d|d<|tjt|�d}z�|j	j
|fi|��}ttd�rRt�
tjtjg�|��t�
tjtjg�n|��t�d�z|�t|j|�Wt�d	�|��n
t�d	�|��w��t��d��|��|d	d�|dd
�g�Wt�|�t���z|��WdSty�}	z|	jtjkr��WYd}	~	dSd}	~	wwt�|�t���z|��Wwty�}	z
|	jtjkrނWYd}	~	wd}	~	ww)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�}��|�dSrv)r�rZr;)r��r'�read_resultsrrr:rDz2SignalsTest.check_interrupted_write.<locals>._readrZTFrWrM�pthread_sigmaskrraN)rr>rkr��daemonr�r��
PIPE_MAX_SIZErr�r+r�r�r��	SIG_BLOCKr�r��SIG_UNBLOCK�alarmr�r#r=r�r;rZr�rzryr�r�)
r8�itemr�
fdopen_kwargsrr�r��
large_data�wiorUrr�r�check_interrupted_writesX




�
"

���
�
���z#SignalsTest.check_interrupted_writecCs|jddddd�dS)Nrr�rrh�r�r@rrr�!test_interrupted_write_unbufferedirz-SignalsTest.test_interrupted_write_unbufferedcCs|jdddd�dS�Nrr��rVr�r@rrr�test_interrupted_write_bufferedlr�z+SignalsTest.test_interrupted_write_bufferedcCs|jddddd�dS)N�xyrr�r��rVr*r�r@rrr�test_interrupted_write_textorz'SignalsTest.test_interrupted_write_textc		s,��fdd�}t�tj|�t��\}}|jj|fi|���zht�d�|�tt	f��}	t
d�D]}�������q1t�
|t��d�q-1sKwY|j}t|t	�rv|�t|��d�t|��Wt�d����t�|�dSWt�d����t�|�dSt�d����t�|�w)Ncs����dddSrL)r=)r��rr�rr�on_alarmts
z3SignalsTest.check_reentrant_write.<locals>.on_alarmrMr�zreentrant callr)r�r�r�r�r�r+r�r�r#r�rRr=rrrZrr�r�rqr�rrz)	r8rr�r�r'r�r�rOr�rr�r�check_reentrant_writers6


��

�

�z!SignalsTest.check_reentrant_writecC�|jddd�dSr��r�r@rrr�test_reentrant_write_buffered�r�z)SignalsTest.test_reentrant_write_bufferedcC�|jdddd�dS)Nr�r�r�r�r�r@rrr�test_reentrant_write_text�r�z%SignalsTest.test_reentrant_write_textc	s�t��\}�d|d<�fdd�}t�tj|�z6|jj|fi|��}t��d�t�d�|�||�	d��d�Wt�d	�|�
�t�
��t�
|�d
St�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.FrWcst��d�dS)NrZ)r�r=�r�r��r�rr�
alarm_handler�rez?SignalsTest.check_interrupted_read_retry.<locals>.alarm_handlerrrMr�ZfoobarrN)r�r�r�r�r�r+r=r�r�rZrz)r8r2r�r'r�Zriorr�r�check_interrupted_read_retry�s"



�
z(SignalsTest.check_interrupted_read_retrycCs|jdd�dd�dS)NcSs
|�d�S)Nr?)r2rrrrro�r�zBSignalsTest.test_interrupted_read_retry_buffered.<locals>.<lambda>r�r��r�r@rrr�$test_interrupted_read_retry_buffered�s

�z0SignalsTest.test_interrupted_read_retry_bufferedcCs|jdd�ddd�dS)NcSs|Sr:rrrrrro�rpz>SignalsTest.test_interrupted_read_retry_text.<locals>.<lambda>r'r?r�r�r@rrr� test_interrupted_read_retry_text�s

�z,SignalsTest.test_interrupted_read_retry_textcs�t�d��tj}t��\�}d|d<g�d�d������fdd�}tj|d��d�_�fd	d
�}�fdd��||}t	�	t	j
|�zj|jj|fi|��}t	�
d
�|�|�}	|�||	�|��d����|���|�|tdd��D���Wt	�
d�d�t�|�t���z|��WdSty�}
z|
jtjkr��WYd}
~
dSd}
~
wwt	�
d�d�t�|�t���z|��Wwty�}
z
|
jtjkrӂWYd}
~
wd}
~
ww)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.�selectFrWNc
s�z/�s-����gggd�dvr(t��d�}��|�����gggd�dvs�rWdSWdStyD}z	|�WYd}~dSd}~ww)Ng�?rr#)r�r�rZr;�
BaseException)r�r�)r^r'r�r��write_finishedrrr�s
����z8SignalsTest.check_interrupted_write_retry.<locals>._readrZTcst�tj��t�d�dSrv)r�r�r�r�)�alarm2rr�alarm1�r�z9SignalsTest.check_interrupted_write_retry.<locals>.alarm1cs���dSr:)r�r�)r�rrr��r&z9SignalsTest.check_interrupted_write_retry.<locals>.alarm2rMcss�|]}t|�VqdSr:)rr\rrr�	<genexpr>�s�z<SignalsTest.check_interrupted_write_retry.<locals>.<genexpr>r)r
�
import_modulerr�r�r�rkr�r�r�r�r�r+r�r=r�rrr�rd�sumrzryr�r�)r8r�r�rfr�rr�r�r�r�rUr)r�r^r'r�r�r�r�r�check_interrupted_write_retry�s`
	





���
�

���z)SignalsTest.check_interrupted_write_retrycCr�)Nr�r�r��r�r@rrr�%test_interrupted_write_retry_buffered�r�z1SignalsTest.test_interrupted_write_retry_bufferedcCr�)Nrr�r?r�r�r@rrr�!test_interrupted_write_retry_text�r�z-SignalsTest.test_interrupted_write_retry_textN)r#r$r%r�r�r�r�r�r�r�rr.r�r�r�r�r�r�r�r�r�rrrrr�s$M
Dr�c@seZdZeZdS)�CSignalsTestN)r#r$r%r�rrrrr��r�r�c@seZdZeZdZdZdS)�
PySignalsTestN)r#r$r%r�r�r�r�rrrrr�sr�c
stttttttttt	t
ttt
ttttttf}ttttttttf}tjdg}dd�|D�}dd�|D�}t��|��fdd�|D��|��fdd�|D��|D]-}|j �!d�ri|�"�D]
\}}t#|||�q]qQ|j �!d	�r~|�"�D]
\}}t#|||�qsqQt$�%d
d�|D��}	|	S)NrScS�i|]}|tt|��qSr)r�r��r]r�rrr�
<dictcomp>r_zload_tests.<locals>.<dictcomp>cSr�r)r�r�r�rrrr�r_c3�$�|]
}|j�d|jfVqdS)rkN�r#r\�Zglobsrrr�!��"zload_tests.<locals>.<genexpr>c3r�)�PyNr�r\r�rrr�"r�rkr�cSsg|]}t�|��qSr)r+Z	makeSuite)r]rrrrr^+r�zload_tests.<locals>.<listcomp>)&r�r�r�rqr�r�r�r�r�rrrArYr[r4r?r�r�r�r�rVr^r}rur�r�r1rjr�r_�globalsrir#rr��setattrr+Z	TestSuite)
r�rZmocksZall_membersZc_io_nsZpy_io_nsrr�r Zsuiterr�r�
load_testss@����r��__main__)wrSr�rr�rer�r{rbr�r�r�rkrpr+rrb�collectionsrr�	itertoolsrrrrZtest.support.script_helperrrr	Ztest.supportr
rrr
rZtest.support.os_helperrr!r�Z_pyior�r�ImportErrorrZ	Structurerr�r��dev_moder�r0r1r�rTrUrVr\r]r^rhrirjrsrtrur{r|r}r�r�r�r�r�r�r�r�r�ZTestCaser�r�r�r!r�r�rr"rqr�r�r�r�r�r�r�r�rrr"rr@rArGrrr4r?r@rYr[r\r�r�r,r�r�r�r�r�r#�mainrrrr�<module>s��8
	
0E.*C(0QjN
+o
	Nui<o	
#�