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.7/test/__pycache__/test_io.cpython-37.opt-1.pyc
B

��g��@s�dZddlZddlZddlZddlZddlZddlZddlZddlZddl	Z	ddl
Z
ddlZddlZddl
Z
ddlZddlZddlmZmZddlmZmZddlmZddlmZmZddlmZddlZddlZddlZ y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)dd�Z*Gdd�d�Z+Gdd�de+ej,�Z-Gdd�de+e j,�Z.Gdd�de+�Z/Gdd�de/ej,�Z0Gdd�de/e j,�Z1Gd d!�d!e/�Z2Gd"d#�d#e2ej,�Z3Gd$d%�d%e2e j,�Z4Gd&d'�d'e/�Z5Gd(d)�d)e5ej,�Z6Gd*d+�d+e5e j,�Z7Gd,d-�d-e/�Z8Gd.d/�d/e8ej,�Z9Gd0d1�d1e8e j,�Z:Gd2d3�d3�Z;Gd4d5�d5e;ej<�Z=Gd6d7�d7e;e j<�Z>Gd8d9�d9�Z?Gd:d;�d;e?ej<�Z@Gd<d=�d=e?e j<�ZAGd>d?�d?�ZBGd@dA�dAeBej,�ZCGdBdC�dCeBe j,�ZDGdDdE�dEe
jE�ZFGdFdG�dGeF�ZGGdHdI�dIeF�ZHejIGdJdK�dKe
jE��ZJGdLdM�dM�ZKGdNdO�dO�ZLGdPdQ�dQe
jEeK�ZMGdRdS�dSeMeL�ZNGdTdU�dUeM�ZOGdVdW�dWe
jEeK�ZPGdXdY�dYePeL�ZQGdZd[�d[eP�ZRGd\d]�d]e
jE�ZSGd^d_�d_eS�ZTGd`da�daeS�ZUGdbdc�dceMeP�ZVGddde�deeVeL�ZWGdfdg�dgeV�ZXGdhdi�diejY�ZZe�[eZj\�Gdjdk�dke
jE�Z]Gdldm�dme
jE�Z^Gdndo�doej<�Z_dpdq�Z`Gdrds�dse^�ZaGdtdu�due^�ZbGdvdw�dwe
jE�ZcGdxdy�dyec�ZdGdzd{�d{ec�ZeGd|d}�d}e
jE�ZfGd~d�def�ZgGd�d��d�ef�Zhe
�iejjd�kd��Gd�d��d�e
jE��ZkGd�d��d�ek�ZlGd�d��d�ek�Zmd�d��Zneod�k�r�e
�p�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�(/usr/local/lib/python3.7/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-sanitizerc	Cs ttddd��}|jSQRXdS)z(Get the default TextIOWrapper chunk size�rzlatin-1)�encodingN)�open�__file__�_CHUNK_SIZE)�frrr�_default_chunk_sizeFsr$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__Ps
zMockRawIOWithoutRead.__init__cCs|j�t|��t|�S)N)r(�appendrr)r+r
rrr�writeVszMockRawIOWithoutRead.writecCsdS)NTr)r+rrr�writableZszMockRawIOWithoutRead.writablecCsdS)N�*r)r+rrr�fileno]szMockRawIOWithoutRead.filenocCsdS)NTr)r+rrr�readable`szMockRawIOWithoutRead.readablecCsdS)NTr)r+rrr�seekablecszMockRawIOWithoutRead.seekablecCsdS)Nrr)r+r
�whencerrr�seekfszMockRawIOWithoutRead.seekcCsdS)Nrr)r+rrr�telliszMockRawIOWithoutRead.tellcCs�|jd7_t|�}y|jd}Wn"tk
rF|jd7_dSX|dkr\|jd=dSt|�}t|�|kr�|jd=||d|�<|S|d|�|dd�<||d�|jd<|SdS)N�r)r)rr'�
IndexErrorr*)r+�bufZmax_lenr�nrrr�readintols$zMockRawIOWithoutRead.readintoNcCs|S)Nr)r+r
rrr�truncate�szMockRawIOWithoutRead.truncate)r)N)rrr�__doc__r,r.r/r1r2r3r5r6r;r<rrrrr%Ls
r%c@seZdZdS)�CMockRawIOWithoutReadN)rrrrrrrr>�sr>c@seZdZdS)�PyMockRawIOWithoutReadN)rrrrrrrr?�sr?c@seZdZddd�ZdS)�	MockRawIONcCs8|jd7_y|j�d�S|jd7_dSdS)Nr7r�)r)r'�popr*)r+r:rrr�read�szMockRawIO.read)N)rrrrCrrrrr@�sr@c@seZdZdS)�
CMockRawION)rrrrrrrrD�srDc@seZdZdS)�PyMockRawION)rrrrrrrrE�srEcsFeZdZ�fdd�Zd�fdd�	Zdd�Zdd	�Z�fd
d�Z�ZS)
�MisbehavedRawIOcst��|�dS)N�)�superr.)r+r
)�	__class__rrr.�szMisbehavedRawIO.writeNcst��|�dS)NrG)rHrC)r+r:)rIrrrC�szMisbehavedRawIO.readcCsdS)Ni����r)r+r
r4rrrr5�szMisbehavedRawIO.seekcCsdS)Ni8���r)r+rrrr6�szMisbehavedRawIO.tellcst��|�t|�dS)N�)rHr;r)r+r9)rIrrr;�szMisbehavedRawIO.readinto)N)	rrrr.rCr5r6r;�
__classcell__rr)rIrrF�s
rFc@seZdZdS)�CMisbehavedRawION)rrrrrrrrL�srLc@seZdZdS)�PyMisbehavedRawION)rrrrrrrrM�srMcs$eZdZ�fdd�Zdd�Z�ZS)�SlowFlushRawIOcst���t��|_dS)N)rHr,�	threading�Event�in_flush)r+)rIrrr,�s
zSlowFlushRawIO.__init__cCs|j��t�d�dS)Ng�?)rQ�set�time�sleep)r+rrr�flush�s
zSlowFlushRawIO.flush)rrrr,rUrKrr)rIrrN�srNc@seZdZdS)�CSlowFlushRawION)rrrrrrrrV�srVc@seZdZdS)�PySlowFlushRawION)rrrrrrrrW�srWc@seZdZdZdd�ZdS)�CloseFailureIOrcCs|jsd|_t�dS)Nr7)�closed�OSError)r+rrr�close�szCloseFailureIO.closeN)rrrrYr[rrrrrX�srXc@seZdZdS)�CCloseFailureION)rrrrrrrr\�sr\c@seZdZdS)�PyCloseFailureION)rrrrrrrr]�sr]cs6eZdZ�fdd�Zd�fdd�	Z�fdd�Z�ZS)	�
MockFileIOcsg|_t��|�dS)N)�read_historyrHr,)r+r)rIrrr,�szMockFileIO.__init__Ncs,t��|�}|j�|dkrdnt|��|S)N)rHrCr_r-r)r+r:�res)rIrrrC�szMockFileIO.readcst��|�}|j�|�|S)N)rHr;r_r-)r+r
r`)rIrrr;�szMockFileIO.readinto)N)rrrr,rCr;rKrr)rIrr^�sr^c@seZdZdS)�CMockFileION)rrrrrrrra�srac@seZdZdS)�PyMockFileION)rrrrrrrrb�srbc@s,eZdZdd�Zdd�Zdd�Zdd�Zd	S)
�MockUnseekableIOcCsdS)NFr)r+rrrr3�szMockUnseekableIO.seekablecGs|�d��dS)Nznot seekable)�UnsupportedOperation)r+�argsrrrr5�szMockUnseekableIO.seekcGs|�d��dS)Nznot seekable)rd)r+rerrrr6�szMockUnseekableIO.tellcGs|�d��dS)Nznot seekable)rd)r+rerrrr<�szMockUnseekableIO.truncateN)rrrr3r5r6r<rrrrrc�srcc@seZdZejZdS)�CMockUnseekableION)rrr�iordrrrrrf�srfc@seZdZejZdS)�PyMockUnseekableION)rrr�pyiordrrrrrh�srhc@sDeZdZdd�Zdd�Zdd�Zdd�Zd	d
�Zdd�Zd
d�Z	dS)�MockNonBlockWriterIOcCsg|_d|_dS)N)r(�
_blocker_char)r+rrrr,szMockNonBlockWriterIO.__init__cCsd�|j�}g|jdd�<|S)NrA)�joinr()r+�srrr�pop_writtensz MockNonBlockWriterIO.pop_writtencCs
||_dS)z'Block when a given char is encountered.N)rk)r+�charrrr�block_on	szMockNonBlockWriterIO.block_oncCsdS)NTr)r+rrrr2
szMockNonBlockWriterIO.readablecCsdS)NTr)r+rrrr3szMockNonBlockWriterIO.seekablecCsdS)NTr)r+rrrr/szMockNonBlockWriterIO.writablecCsvt|�}d}|jrby|�|j�}Wntk
r6Yn,X|dkrX|j�|d|��|Sd|_dS|j�|�t|�S)N���r)rrk�index�
ValueErrorr(r-r)r+r
r:rrrr.szMockNonBlockWriterIO.writeN)
rrrr,rnrpr2r3r/r.rrrrrj�srjc@seZdZejZdS)�CMockNonBlockWriterION)rrrrg�BlockingIOErrorrrrrrt*srtc@seZdZejZdS)�PyMockNonBlockWriterION)rrrrirurrrrrv-srvc@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�dS)N)r�unlink�TESTFN)r+rrr�setUp3szIOTest.setUpcCst�tj�dS)N)rrxry)r+rrr�tearDown6szIOTest.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.rJrsHello.�rqr7s	 world


�	s	*********�hrG�
�g)�assertEqualr.r<r6r5�	bytearray�assertRaises�	TypeError)r+r#�bufferrrr�	write_ops9s(

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)NrJshellos worlrGsd
r�shello world
r7rA�xi����r|sworld�
gsworld
)rCr�rr;rr�rr5r6r�r��	readinto1)r+r#Zbufferedrrrr�read_opsQs>



zIOTest.read_opslc	CsRy|�|�|j�|j�Wn"ttfk
r<|�d�YnX|�|��|j�|�|�d�d�|�|��|jd�|�|�dd�|jd�|�|��|jd�|�|��|jd�|�|�dd�|jd�|�|�|jd�|jd�|�|��|jd�|�|�dd�|jd�|�|�dd�|j�|�|�	d�d�dS)	Nzno largefile supportsxxx�rqr7rGrr�)
r�r5�LARGE�
OverflowErrorrs�skipTestr6r.r<rC)r+r#rrr�large_file_opsts zIOTest.large_file_opsc
Csh|j}xBdD]:}|�tj|��"}|�||j�|�||j�WdQRXqW|jtjddd��"}|�||j�|�||j�WdQRX|jtjddd��(}|�||jd�|�||jdg�WdQRX|�tjd��(}|�||jd�|�||jdg�WdQRX|�tjd��P}|�||jd	�|�||jd
g�|�||j	d|j
�|�||j	d|j�WdQRXdS)
N)�w�wbr�r)�	buffering�rbsblahsblah
rZblahzblah
r7rq)rdr rryr�rC�readliner.�
writelinesr5�SEEK_CUR�SEEK_END)r+�exc�mode�fprrr�test_invalid_operations�s&
zIOTest.test_invalid_operationscsz�fdd�}�fdd�}�fdd�}�fdd�}�fd	d
�}�fdd�}�fd
d�}�fdd�}|df|df|df|df|df|df|df|df�jdf�jdff
}	�x�|	D�]�\}
}��|
����|
����}d|k}
��|��|
�d|k}��|��|�t|�j��rd}n$t|�j�j	f��r,d}n
��
d�d|k�rJ|��n��t
|j�|
�rr|�d�|��n��t
|jd���t
|j�|�r�|�|�n��t
|j|�tj�d��r�|
||fk�r�w�d|k}��|��|�|�r|��|�d�n��t
|j���t
|jd�|�r@|�r@|��|�d�n��t
|j���t
|jd�WdQRXWdQRXq�WdS)Ncs"t��\}}t�|���|d�S)Nr)�os�piper[�FileIO)rr�)r+rr�pipe_reader�s
z3IOTest.test_optional_abilities.<locals>.pipe_readercsNt��\}}��tj|�tjtj|dfd�}|����|j���	|d�S)N�d)�targetrer�)
r�r��
addCleanupr[rO�ThreadrC�startrlr�)rr�Zthread)r+rr�pipe_writer�sz3IOTest.test_optional_abilities.<locals>.pipe_writercs������S)N)�BufferedReaderrcr)r+rr�buffered_reader�sz7IOTest.test_optional_abilities.<locals>.buffered_readercs������S)N)�BufferedWriterrcr)r+rr�buffered_writer�sz7IOTest.test_optional_abilities.<locals>.buffered_writercs������S)N)�BufferedRandom�BytesIOr)r+rr�buffered_random�sz7IOTest.test_optional_abilities.<locals>.buffered_randomcs���������S)N)�BufferedRWPairrcr)r+rr�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�BufferedIOBaser/r.r)r+rr�UnseekableReader�sr��ascii)rc�
TextIOWrapper)r�)r+rr�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�r2rCr)r+rr�UnseekableWriter�sr�r�)rcr�)r�)r+rr�text_writer�sz3IOTest.test_optional_abilities.<locals>.text_writer�fr�fwrr�Zrws�rw�3�3zUnknown base classr#r7�winrmr)r��StringIO�subTestr�r2r/�
isinstance�
TextIOBaser��	RawIOBase�failr1r�rZrCr.�sys�platform�
startswithr3r6r5r<)r+r�r�r�r�r�r�r�r��tests�testZ	abilitiesrr2r/rr3r)r+r�test_optional_abilities�sd	




zIOTest.test_optional_abilitiesc	CsVd}|�t|j|d�t|d�}t���$t�dt�|�t|j|d�WdQRXdS)Nzfoobarr�r��ignore)r�rsr r�warnings�catch_warnings�simplefilter�DeprecationWarning)r+Zfn_with_NULZbytes_fnrrr�test_open_handles_NUL_charss

z"IOTest.test_open_handles_NUL_charsc	Cs�|jtjddd��@}|�|��d�|�|��d�|�|��d�|�|�WdQRX|jtjddd��@}|�|��d�|�|��d�|�|��d�|�|�WdQRXdS)Nr�r)r�FTr�)	r rryr�r2r/r3r�r�)r+r#rrr�test_raw_file_ioszIOTest.test_raw_file_ioc	Cs�|�tjd��@}|�|��d�|�|��d�|�|��d�|�|�WdQRX|�tjd��B}|�|��d�|�|��d�|�|��d�|�|d�WdQRXdS)Nr�FTr�)	r rryr�r2r/r3r�r�)r+r#rrr�test_buffered_file_ioszIOTest.test_buffered_file_ioc	Cs�|�tjd��}|�d�WdQRX|�tjd��~}|�|��d�|�|�d�d�|�|�d�d�|�|�d	�d
�|�|��d�|�|�d�d�|�t|jd
�WdQRX|�tjd��}|�t|jd
�WdQRXdS)Nr�s"abc
def
xyzzy
foobar
another liner�sabc
r�sdef
rGsxy�szzy
sfoobar
sanother lineg333333@r)r rryr.r�r�r�r�)r+r#rrr�
test_readline(szIOTest.test_readlinecCs*Gdd�d|j�}|�ttft|��dS)Nc@seZdZdd�ZdS)z+IOTest.test_readline_nonsizeable.<locals>.RcSsdS)Nr)r+rrrr�:sz4IOTest.test_readline_nonsizeable.<locals>.R.readlineN)rrrr�rrrr�R9sr�)�IOBaser�r��
StopIteration�next)r+r�rrr�test_readline_nonsizeable6sz IOTest.test_readline_nonsizeablecCs(Gdd�d|j�}|�t|�jd�dS)Nc@seZdZdd�ZdS)z'IOTest.test_next_nonsizeable.<locals>.RcSsdS)Nr)r+rrr�__next__Bsz0IOTest.test_next_nonsizeable.<locals>.R.__next__N)rrrr�rrrrr�Asr�r7)r�r�r��	readlines)r+r�rrr�test_next_nonsizeable>szIOTest.test_next_nonsizeablecCs@|��}|�|�|��}|�|d�|�|�}|�|d�dS)Nshello world
T)r�r��getvaluer�r�)r+r#rrrr�test_raw_bytes_ioFs

zIOTest.test_raw_bytes_ioc	Cs|tjdd�dkstjdkr.t�dd|j�|�tjdd��}|�|�WdQRX|�tjd��}|�|�WdQRXdS)Nr�r��darwinZ	largefilez-test requires %s bytes and a long time to runzw+br)r�r�rZrequiresr�r ryr�)r+r#rrr�test_large_file_opsNszIOTest.test_large_file_opsc
Cs�x�dD]�}d}|�tjd|��}|�d�WdQRX|�|jd�d}y(|�tjd|��}ddWdQRXWn"tk
r�|�|jd�YqX|�d�qWdS)N)rr7r�r�sxxxTr7rz1/0 didn't raise an exception)r rryr.r�rY�ZeroDivisionErrorr�)r+�bufsizer#rrr�test_with_open[s
zIOTest.test_with_openc	Cs�|�tjd��}|�d�WdQRX|jtjddd��}|�|��d�WdQRX|�tjd��}|�|��d�WdQRX|�tjd��}|�|��d�WdQRXdS)Nr�sxxx�abr)r�r��a)r rryr.r�r6�
assertGreater)r+r#rrr�test_append_mode_tellkszIOTest.test_append_mode_tellc
s�g�G�fdd�d|j�}t�dtf��b|tjd�}|�d�~t��|��dddg�|�tjd	��}|�|�	�d�WdQRXWdQRXdS)
Ncs:eZdZ��fdd�Z��fdd�Z��fdd�Z�ZS)z(IOTest.test_destructor.<locals>.MyFileIOcs6��d�yt�j}Wntk
r*YnX|�dS)Nr7)r-rH�__del__�AttributeError)r+r#)rI�recordrrr�xs
z0IOTest.test_destructor.<locals>.MyFileIO.__del__cs��d�t���dS)NrG)r-rHr[)r+)rIr�rrr[�s
z.IOTest.test_destructor.<locals>.MyFileIO.closecs��d�t���dS)Nr�)r-rHrU)r+)rIr�rrrU�s
z.IOTest.test_destructor.<locals>.MyFileIO.flush)rrrr�r[rUrKr)r�)rIr�MyFileIOwsr�rr�sxxxr7rGr�r�)
r�r�check_warnings�ResourceWarningryr.�
gc_collectr�r rC)r+r�r#r)r�r�test_destructorus
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)Nr7rGr�)�on_del�on_close�on_flush)r+rrrr,�sz4IOTest._check_base_destructor.<locals>.MyIO.__init__cs8��|j�yt�j}Wntk
r,YnX|�dS)N)r-r�rHr�r�)r+r#)rIr�rrr��sz3IOTest._check_base_destructor.<locals>.MyIO.__del__cs��|j�t���dS)N)r-r�rHr[)r+)rIr�rrr[�sz1IOTest._check_base_destructor.<locals>.MyIO.closecs��|j�t���dS)N)r-r�rHrU)r+)rIr�rrrU�sz1IOTest._check_base_destructor.<locals>.MyIO.flush)rrrr,r�r[rUrKr)r�)rIr�MyIO�sr�r7rGr�)rr�r�)r+�baser�r#r)r�r�_check_base_destructor�szIOTest._check_base_destructorcCs|�|j�dS)N)r�r�)r+rrr�test_IOBase_destructor�szIOTest.test_IOBase_destructorcCs|�|j�dS)N)r�r�)r+rrr�test_RawIOBase_destructor�sz IOTest.test_RawIOBase_destructorcCs|�|j�dS)N)r�r�)r+rrr�test_BufferedIOBase_destructor�sz%IOTest.test_BufferedIOBase_destructorcCs|�|j�dS)N)r�r�)r+rrr�test_TextIOBase_destructor�sz!IOTest.test_TextIOBase_destructorc	CsR|�tjd��}|�d�WdQRX|�tjd��}|�|��d�WdQRXdS)Nr�sxxxr�)r rryr.r�rC)r+r#rrr�test_close_flushes�szIOTest.test_close_flushescs�t�dtd���t��������fdd�}|����|��tjd��|����	���|��
��	���|����	���	���dS)N�ir�c	s2|�$��|�����|��f�WdQRXdS)N)r�r.r�)r#)r�r:r+rr�check�sz'IOTest.test_array_writes.<locals>.checkr�)r�ranger�tobytesr�r�rryr�r@r�r�)r+r�r)r�r:r+r�test_array_writes�szIOTest.test_array_writescCs|jt|jtjddd�dS)Nr�F)�closefd)r�rsr rry)r+rrr�test_closefd�szIOTest.test_closefdc	Cs�|�tjd��}|�d�WdQRX|�tjd��J}|j|��ddd�}|�|��d�|�d�|��|�	t
|j�WdQRX|�tjd��N}|j|��ddd�}|�|��dd�d	�|��|�	t
|jtd
��WdQRXdS)Nr�zegg
rF)r�rr�r�seggr7)
r rryr.r1r�rCr5r[r�rsr;r�)r+r#�filerrr�test_read_closed�s
zIOTest.test_read_closedcCs|jt|jtjddd�dS)NrF)r�)r�rsr rry)r+rrr�test_no_closefd_with_filename�sz$IOTest.test_no_closefd_with_filenamec	Csz|�tjd��}|�d�WdQRX|�tjd��>}|�|jjjd�|j|��ddd�}|�|jjjd�WdQRXdS)Nr�segg
rTF)r�)	r rryr.r�r��rawr�r1)r+r#rrrr�test_closefd_attr�szIOTest.test_closefd_attrc	Cs�t�dtf��8|�tjd�}|�d�||_t�|�}~t�	�WdQRX|�
|�|�|�tjd��}|�|�
�d�WdQRXdS)Nrr�sabcxxxr�)rr�r�r�ryr.r#�weakref�refr��assertIsNoner r�rC)r+r#�wrrrr�test_garbage_collection�s

zIOTest.test_garbage_collectionc	Cs�d}tj�|�s |�d�|��tjdkr4|�d�tjtj	krJ|�d�|j
|ddd��}|�t|j
�WdQRX|�
|d��}|�t|j
�WdQRX|�
|d	��}|�t|j
�WdQRXdS)
Nz	/dev/zeroz{0} does not existi���z+test can only run in a 32-bit address spacez&test requires at least 2 GiB of memoryr�r)r�r)r��path�existsr��formatr��maxsizerZreal_max_memuseZ_2Gr r�r�rC)r+Zzeror#rrr�test_unbounded_file�s


zIOTest.test_unbounded_filecsd|j||��g���fdd�}|�_|�t�j�|��j�|���|��d�dd��_dS)Ncs�jg�dd�<t��dS)N)rYrZr)rYr#rr�	bad_flushsz4IOTest.check_flush_error_on_close.<locals>.bad_flushrcSsdS)Nrrrrr�<lambda>rAz3IOTest.check_flush_error_on_close.<locals>.<lambda>)r rUr�rZr[�
assertTruerY�assertFalse)r+re�kwargsrr)rYr#r�check_flush_error_on_close	s
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�r)r�F)r�r�)r�r�)rrryr�r �O_WRONLY�O_CREATr[)r+�fdrrr�test_flush_error_on_closes$

z IOTest.test_flush_error_on_closecCs<|jtjddd�}|��|��|��|�t|j�dS)Nr�r)r�)r rryr[r�rsrU)r+r#rrr�test_multi_close0s
zIOTest.test_multi_closecCs�|�d�}|�|�d�d�|�|�d�d�|�|�d�d�|�|�d�d�|�|�d�d�|�|�d�d�|�|�d�d�|�|�d�d�dS)	N)sabc�dNsefgNrGsab�crsef�grA)r%r�rC)r+�rawiorrr�test_RawIOBase_read7s
zIOTest.test_RawIOBase_readcCsD|��|��|��|��|��f}x|D]}|�t|d��q(WdS)N�__dict__)r�r�r�r�r�r�hasattr)r+r�rrrr�test_types_have_dictDs

zIOTest.test_types_have_dictc	sp|�tjd��}|�d�WdQRXt�tjtj���fdd�}|jdd|d��}|�|��d�WdQRXdS)Nr�zegg
cs�S)Nr)r
�flags)rrr�openerSsz"IOTest.test_opener.<locals>.openerznon-existentr)r#)r rryr.r��O_RDONLYr�rC)r+r#r#r)rr�test_openerOszIOTest.test_openerc	CsBdd�}|�t��}tdd|d�WdQRX|�t|j�d�dS)NcSsdS)Nrqr)�fnamer"rrr�	badopenerZsz4IOTest.test_bad_opener_negative_1.<locals>.badopenerznon-existentr)r#zopener returned -1)r�rsr r��str�	exception)r+r'�cmrrr�test_bad_opener_negative_1Xsz!IOTest.test_bad_opener_negative_1c	CsBdd�}|�t��}tdd|d�WdQRX|�t|j�d�dS)NcSsdS)N���r)r&r"rrrr'bsz8IOTest.test_bad_opener_other_negative.<locals>.badopenerznon-existentr)r#zopener returned -2)r�rsr r�r(r))r+r'r*rrr�test_bad_opener_other_negative`sz%IOTest.test_bad_opener_other_negativec
Csp|�td��Z}|�td��B}|j|��dd�}|j|��dd�|��|��|��WdQRXWdQRXdS)Nr�F)r�)r r!r�r1r,r�r[)r+�f1�f2Zfileiorrr�test_fileio_closefdhszIOTest.test_fileio_closefdc
CsBt�|��.|�t��|jtjddd�WdQRXWdQRXdS)Nr�r)r�)r�check_no_resource_warningr�rsr ry)r+rrr�test_nonbuffered_textiotszIOTest.test_nonbuffered_textioc
CsBt�|��.|�t��|jtjddd�WdQRXWdQRXdS)Nr�Zinvalid)�newline)rr1r�rsr ry)r+rrr�test_invalid_newlineyszIOTest.test_invalid_newlinec
CsnGdd�d|j�}|�}xPdD]H}|�|��4td�}|�t||�|�d�|�t|�d�WdQRXqWdS)Nc@seZdZdd�ZeZdS)z3IOTest.test_buffered_readinto_mixin.<locals>.StreamcSsdS)Ns12345r)r+�sizerrrrC�sz8IOTest.test_buffered_readinto_mixin.<locals>.Stream.readN)rrrrC�read1rrrr�Stream�sr7)r;r�rJs12345)r�r�rr��getattrr)r+r7�stream�methodr�rrr�test_buffered_readinto_mixin~s
z#IOTest.test_buffered_readinto_mixinc
s��fdd�}|ttj��|ttj�d�����tjd��4}t|���}��t����|d�WdQRXWdQRXtd�}��t����|d�WdQRXtt�}��t����|d�WdQRX��	t
d����ttj�d�WdQRXdS)Nc	sN��|d��}|�d�WdQRX��|d��}��|��d�WdQRXdS)Nr�zegg
r)r r.r�rC)r
r#)r+rr�check_path_succeeds�sz7IOTest.test_fspath_support.<locals>.check_path_succeedszutf-8r�zread/write/append modeZrwxa)r	rry�encoder r1r�r��FloatingPointError�assertRaisesRegexrs)r+r<r#Zbad_pathr)r+r�test_fspath_support�s zIOTest.test_fspath_supportcCs8|�d�}|�|��d�|�d�}|�|��d�dS)N)sabcrsefgsabcdefg)r%r�rC�readall)r+rrrr�test_RawIOBase_readall�s

zIOTest.test_RawIOBase_readallc
Cs�Gdd�d|j�}d}d}x�|D]�}|�|���|\}}}}|tt|���}	t|f|�}
t|	|�}|�||
�|�|�t|
�|�|�|
d|�t|��|f||}|�|
|d�|�|�t|	j	�||�WdQRXq WdS)Nc@s$eZdZdd�Zdd�Zdd�ZdS)z3IOTest.test_BufferedIOBase_readinto.<locals>.ReadercSs
||_dS)N)�avail)r+rCrrrr,�sz<IOTest.test_BufferedIOBase_readinto.<locals>.Reader.__init__cSs"|jd|�}|j|d�|_|S)N)rC)r+r5�resultrrrrC�sz8IOTest.test_BufferedIOBase_readinto.<locals>.Reader.readcSs|�t|d��S)z$Returns no more than 5 bytes at oncerJ)rC�min)r+r5rrrr6�sz9IOTest.test_BufferedIOBase_readinto.<locals>.Reader.read1N)rrrr,rCr6rrrr�Reader�srF)
)r;r�rJrJ)r;r�r|r|)r;rJr|rJ)r;r|�r|)r;r�rr)r�r�rJrJ)r�r�r|rJ)r�rJr|rJ)r�r|rGrJ)r�r�rr�)
r�r�rr�r�r8r�rZassertSequenceEqualrC)r+rFr�ZUNUSED_BYTEr�r:rCZrequestrD�readerr�Zunusedrrr�test_BufferedIOBase_readinto�s


z#IOTest.test_BufferedIOBase_readintocCs*Gdd�d|j�}|�}|�t|j�dS)Nc@seZdZdd�Zdd�ZdS)z#IOTest.test_close_assert.<locals>.RcSsdS)Nr)r+�name�valuerrr�__setattr__�sz/IOTest.test_close_assert.<locals>.R.__setattr__cSs
t��dS)N)rZ)r+rrrrU�sz)IOTest.test_close_assert.<locals>.R.flushN)rrrrMrUrrrrr��sr�)r�r�rZr[)r+r�r#rrr�test_close_assert�szIOTest.test_close_assertN)F)3rrrrzr{r�r�r�r�r�r�r�r�r�r�r�r�r�r�r�r�r�r�r�r�r�r�r�r�r�rrrr	rrrrrr!r%r+r-r0r2r4r;r@rBrJrNrrrrrw1s`
!h	



	
)rwc@seZdZdd�ZdS)�CIOTestcCsLGdd�d|j�}|�|�}||_t�|�}~~t��|�|�|�dS)Nc@seZdZdd�ZdS)z*CIOTest.test_IOBase_finalize.<locals>.MyIOcSsdS)Nr)r+rrrr[�sz0CIOTest.test_IOBase_finalize.<locals>.MyIO.closeN)rrrr[rrrrr��sr�)r�rrrrr�r)r+r�rrrrr�test_IOBase_finalize�s
zCIOTest.test_IOBase_finalizeN)rrrrPrrrrrO�srOc@seZdZdS)�PyIOTestN)rrrrrrrrQ�srQc@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_mismatchrir�rgr�rR)r+�mismatchrrr�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 methods)rTN)rrUrgr�rir�rR)r+rVrrr�test_RawIOBase_pyio_in_io_matchsz/APIMismatchTest.test_RawIOBase_pyio_in_io_matchN)rrrrWrXrrrrrR�srRc@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|�dS)N)r@�tp�assertIs�detachr�rs�repr)r+rr9rrr�test_detach
s

zCommonBufferedTests.test_detachcCs&|��}|�|�}|�d|���dS)Nr0)r@rZr�r1)r+r�bufiorrr�test_filenos
zCommonBufferedTests.test_filenocCs:|��}|�|�}|�t|jdd�|�t|jdd�dS)Nrrqr})r@rZr�rsr5)r+rr_rrr�test_invalid_argss
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�yt�j}Wntk
r*YnX|�dS)Nr7)r-rHr�r�)r+r#)rIr�rrr�&s
zJCommonBufferedTests.test_override_destructor.<locals>.MyBufferedIO.__del__cs��d�t���dS)NrG)r-rHr[)r+)rIr�rrr[.s
zHCommonBufferedTests.test_override_destructor.<locals>.MyBufferedIO.closecs��d�t���dS)Nr�)r-rHrU)r+)rIr�rrrU1s
zHCommonBufferedTests.test_override_destructor.<locals>.MyBufferedIO.flush)rrrr�r[rUrKr)r�)rIr�MyBufferedIO%srbr7rGr�)rZr@rr�r�)r+rZrbrr_r)r�r�test_override_destructor"sz,CommonBufferedTests.test_override_destructorcs4|��}|�|���fdd�}|�|�t|�dS)Nc	s��WdQRXdS)Nrr)r_rr�_with>sz7CommonBufferedTests.test_context_manager.<locals>._with)r@rZr�rs)r+rrdr)r_r�test_context_manager:s

z(CommonBufferedTests.test_context_managerc	s�������fdd�}t�d��}��t|�WdQRX|����}|r���t|�	��d���
|�d�|���
|�d�|�dS)Ncs����jdS)N)rZ�xyzzyr)rr+rrr#Jsz<CommonBufferedTests.test_error_through_destructor.<locals>.f�stderrr7zException OSError: z ignored)
rXr�captured_outputr�r�r��stripr�r�
splitlinesrr��endswith)r+r#rmr)rr+r�test_error_through_destructorFs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'>sdummyz<%s name=b'dummy'>)r@rZrr�assertRegexr]rK)r+rr
Zclsnamerrr�	test_reprUs
zCommonBufferedTests.test_reprc	CsR|��}|�|�}t�|d|��(yt|�Wntk
rBYnXWdQRXdS)NrK)r@rZr�	swap_attrr]�RuntimeError)r+rr
rrr�test_recursive_repr_s
z'CommonBufferedTests.test_recursive_reprcs�|���g����fdd�}|�_|����|�t�j�|��j�|��j�|���|��d�|��d�dd��_dS)Ncs�j�jg�dd�<t��dS)N)rYrZr)r
rYrrrrnsz@CommonBufferedTests.test_flush_error_on_close.<locals>.bad_flushrr7cSsdS)NrrrrrryrAz?CommonBufferedTests.test_flush_error_on_close.<locals>.<lambda>)	r@rUrZr�rZr[rrYr)r+rr)r
rYrrris

z-CommonBufferedTests.test_flush_error_on_closec	Cs�|��}dd�}dd�}||_|�|�}||_|�t��}|��WdQRX|�|jjd�|�	|jj
t�|�|jj
jd�|�|j�dS)NcSstd��dS)NrU)rZrrrrr}sz@CommonBufferedTests.test_close_error_on_close.<locals>.bad_flushcSstd��dS)Nr[)rZrrrr�	bad_closesz@CommonBufferedTests.test_close_error_on_close.<locals>.bad_close)r[)rU)
r@r[rZrUr�rZr�r)re�assertIsInstance�__context__rrY)r+rrrsr
�errrrr�test_close_error_on_close{s
z-CommonBufferedTests.test_close_error_on_closec	Cs�|��}dd�}dd�}||_|�|�}||_|�t��}|��WdQRX|�dt|j��|�	|jj
t�|�dt|jj
��|�|j�dS)NcSst�dS)N)�non_existing_flushrrrrr�szNCommonBufferedTests.test_nonnormalized_close_error_on_close.<locals>.bad_flushcSst�dS)N)�non_existing_closerrrrrs�szNCommonBufferedTests.test_nonnormalized_close_error_on_close.<locals>.bad_closeryrx)
r@r[rZrUr��	NameError�assertInr(r)rtrurrY)r+rrrsr
rvrrr�'test_nonnormalized_close_error_on_close�s
z;CommonBufferedTests.test_nonnormalized_close_error_on_closecCs<|��}|�|�}|��|��|��|�t|j�dS)N)r@rZr[r�rsrU)r+rr
rrrr�s
z$CommonBufferedTests.test_multi_closecCs6|�|�d��}|�|j|j�|�|j|jd�dS)Ns
AAAAAAAAAAr)rZrcr�rdr6r5)r+r_rrr�test_unseekable�sz#CommonBufferedTests.test_unseekablec	Cs:|��}|�|�}|��}|�t��||_WdQRXdS)N)r@rZr�r�r)r+rr9�xrrr�test_readonly_attributes�s

z,CommonBufferedTests.test_readonly_attributesN)rrrr^r`rarcrerlrorrrrwr|rr}rrrrrrY
s

rYc@s(eZdZejdd��Zejdd��ZdS)�
SizeofTestcCs\d}d}|��}|j||d�}t�|�|}|��}|j||d�}|�t�|�||�dS)Nii )�buffer_size)r@rZr��	getsizeofr�)r+Zbufsize1Zbufsize2rr_r5rrr�test_sizeof�szSizeofTest.test_sizeofcCsFd}|��}|j||d�}t�|�|}|��|�t�|�|�dS)Ni)r�)r@rZr�r�r[r�)r+r�rr_r5rrr�test_buffer_freeing�szSizeofTest.test_buffer_freeingN)rrrr�cpython_onlyr�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�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)Nsabci)r��ri�rq)r@rZr,r�rCr�rs)r+rr_rrr�test_constructor�s


z#BufferedReaderTest.test_constructorcCsX|j�|j�}~|j�|j�}|�ttfd|jd�|�|���|�|�d�d�dS)Nzuninitialized|has no attributerrA)	rZ�__new__r?rsr�rCr,r@r�)r+r_rrr�test_uninitialized�s

z%BufferedReaderTest.test_uninitializedcCsHx2dD]*}|�d�}|�|�}|�d|�|��qW|�t|jd�dS)N)NrG)sabcrsefgsabcdefgr,)r@rZr�rCr�rs)r+�argrr_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)N)sabcrsefg�ar7�brArrr�rrGsefgr�r�)r@rZr�rCr6r))r+rr_rrr�
test_read1�s

zBufferedReaderTest.test_read1cCs�|�d�}|�|�}|�d|�d��|�d|���|�d|���|�d|�d��|�|jd�|�d	|���|�|jd
�dS)N)sabcrsefgr�r7sbcrsefgrqr�rAr�)r@rZr�rCr6r))r+rr_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)N)sabcrsefgrGsabscdsefr7sgfr)sabcNscb)r@rZr�r�r;)r+rr_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�)sabcsdesfghsjkl)r�rGr�sabcr7sabrsdesfghr|sfghjklr�)r@rZr�r��peekr)r�)r+r�rr_r
rrr�test_readinto1s*
z!BufferedReaderTest.test_readinto1cCs�d}d}|�|f�}|j||d�}t�dd�}|�|�}|�|t|��t|��d�}|�|t|��|�	|d|�|d|��|�	||d�dt||d���dS)N�<saaaaaaaaaaaaaaaaaaaaaaaaaa)r�r�s xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxrr�)
r@rZrr;r�rrr�
assertLessr�)r+r�rrr_r
r:�bmrrr�test_readinto_array1s
z&BufferedReaderTest.test_readinto_arraycCs�d}d}|�|f�}|j||d�}t�dd�}|�|�}|�|t|��t|��d�}|�|t|��|�	|d|�|d|��|�	||d�dt||d���dS)Nr�saaaaaaaaaaaaaaaaaaaaaaaaaa)r�r�s xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxrr�)
r@rZrr�r�rrrr�r�)r+r�rrr_r
r:r�rrr�test_readinto1_arrayFs
z'BufferedReaderTest.test_readinto1_arraycsZ�fdd�}��|���dddg���|��d�ddg���|��d�dddg�dS)Ncs��d�}��|�S)N)sabc
sd
sef)r@rZ)r)r+rrr_\s
z0BufferedReaderTest.test_readlines.<locals>.bufiosabc
sd
sefrJ)r�r�)r+r_r)r+r�test_readlines[sz!BufferedReaderTest.test_readlinesc	Cs�d}t|�}dddddg|dggddddg|ggdddddgdddggg}xp|D]h\}}}|�|�}|j||d	�}d}	x2|D]*}
|�|�|
�||	|	|
��|	|
7}	q|W|�|j|�qPWdS)
Ns	abcdefghir�r�r7r��rrG)r�)rr^rZr�rCr_)r+rZdlenr�r�Zbuf_read_sizesZraw_read_sizesrr_r
�nbytesrrr�test_bufferingcs

z!BufferedReaderTest.test_bufferingcCs�|�d�}|�|�}|�d|�d��|�d|�d��|�d|���|�d|�d��|�|���|�d|���|�d�}|�d	|���|�|���dS)
N)sabcrNsefgNNNsabcdr|�er7sfgrA)r�NNr�)r@rZr�rCr�rrA)r+rr_rrr�test_read_non_blockingws


z)BufferedReaderTest.test_read_non_blockingcCs*|�d�}|�|�}|�d|�d��dS)N)sabcrsefgsabcdefgi(#)r@rZr�rC)r+rr_rrr�test_read_past_eof�s

z%BufferedReaderTest.test_read_past_eofcCs(|�d�}|�|�}|�d|���dS)N)sabcrsefgsabcdefg)r@rZr�rC)r+rr_rrr�
test_read_all�s

z BufferedReaderTest.test_read_all�cpuc
s.�zd}ttd��|}t�|�tt|��}|�tjd�����	|�WdQRX|jtj|j
dd���}|�|d��g�g����fdd���fd	d
�td�D�}t�|��t
�d�WdQRX|��d
��d���}x0td�D]$}tt|g��}|�|�|�|�q�WWdQRXWdt�tj�XdS)Ni��r�r)r�r�c
shy4x.tddg�D]}��|�}|s$P��|�qWWn.tk
rb}z��|��Wdd}~XYnXdS)Nr7�)rrCr-�	Exception)r:rm�e)r_�errors�resultsrrr#�s

z*BufferedReaderTest.test_threads.<locals>.fcsg|]}tj�d��qS))r�)rOr�)�.0r~)r#rr�
<listcomp>�sz3BufferedReaderTest.test_threads.<locals>.<listcomp>r�g{�G�z�?z(the following exceptions were caught: %rrA)r&r��randomZshufflerr�r rryr.�	read_moderZ�
start_threadsrSrTrrlr�rrx)r+�N�lrmr�threadsr��cr)r_r�r#r�r�test_threads�s,


$zBufferedReaderTest.test_threadscCsb|�|�d��}|�|j|j�|�|j|jd�|�d�|�|j|jd�|�|j|j�dS)Ns
AAAAAAAAAArr7)rZrcr�rdr6r5rC)r+r_rrrr}�s
z"BufferedReaderTest.test_unseekablecCs6|�d�}|�|�}|�t|jd�|�t|j�dS)N)sabcrsefgr)rFrZr�rZr5r6)r+rr_rrr�test_misbehaved_io�s

z%BufferedReaderTest.test_misbehaved_ioc	Cs�d}x�d|d||d|dfD]�}|�d|g�}|�||�}|�|�|�d|�|�|jdd�||j��|�d|ddg�}|�||�}|�|�|�d|�|�|jdd�||j��q WdS)Nr�rGr7r�rzfailed for {}: {} != 0)r@rZr�rCr*r)r+r�r:rr_rrr�test_no_extraneous_read�s 

z*BufferedReaderTest.test_no_extraneous_readcCsDt�t�d��}|�d�|��|�t|j�|�t|jd�dS)Ns12r7)	rgr�r�rCr[r�rsr�r6)r+r
rrr�test_read_on_closed�s

z&BufferedReaderTest.test_read_on_closedN)rrrr�r�r�r�r�r�r�r�r�r�r�r�r�r�r�r�requires_resourcer�r}r�r�r�rrrrr��s(
(r�c@sFeZdZejZe�ed�dd��Z	dd�Z
dd�Zdd	�Zd
d�Z
dS)
�CBufferedReaderTestzGMSan defaults to crashing instead of returning NULL for malloc failure.cCsDt�|�tjdkr@|��}|�|�}|�ttt	f|j
|tj�dS)Ni���)r�r�r�r
r@rZr�r��MemoryErrorrsr,)r+rr_rrrr��s


z$CBufferedReaderTest.test_constructorcCs�|�dg�}|�|�}|jt|j|dd�|�t|j�|jt|j|dd�|�t|j�|jt|j|dd�|�t|j�dS)Nsabcr)r�i�rq)r@rZr�rsr,rC)r+rr_rrr�test_initialization�s
z'CBufferedReaderTest.test_initializationcCs(|�d�}|�|�}|�t|jd�dS)N)sabcrsefgr�)rFrZr�rZrC)r+rr_rrr�test_misbehaved_io_read�s

z+CBufferedReaderTest.test_misbehaved_io_readc	Csn|�tjtj�t�dtf��8|�tjd�}|�|�}||_t	�
|�}~t��WdQRX|�|�|�dS)Nrzw+b)
r�rrxryr�r�r�rZr#rrr�r)r+rr#rrrrr	s

z+CBufferedReaderTest.test_garbage_collectionc	Cs0|�td��|�t��ddd�WdQRXdS)Nr�i)r?r�rZrgr�)r+rrr�test_args_errorsz#CBufferedReaderTest.test_args_errorN)rrrrgr�rZ�unittest�skipIf�MEMORY_SANITIZERr�r�r�r	r�rrrrr��s

r�c@seZdZejZdS)�PyBufferedReaderTestN)rrrrir�rZrrrrr�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)Ni)r�r�r�sabcri�rqsghirAsabcghi)
r@rZr,r�r.rUr�rsrlr()r+rr_rrrr�s


z#BufferedWriterTest.test_constructorcCsX|j�|j�}~|j�|j�}|�ttfd|jd�|�|���|�|�d�d�dS)Nzuninitialized|has no attributerAr)	rZr�r?rsr�r.r,r@r�)r+r_rrrr�/s

z%BufferedWriterTest.test_uninitializedcCsD|��}|�|�}|�d�|�|j�|��|�|jdg�dS)Nshowdy!)r@rZr.rr(r\r�)r+rr9rrr�test_detach_flush9s

z$BufferedWriterTest.test_detach_flushcCsh|��}|�|d�}|�d�|�|j�td�}|�|�d|dd�<|��|�d�|j�d�dS)Nr�sabcsdefs***rAsabcdef)	r@rZr.rr(r�rUr�rl)r+�writerr_r�rrr�
test_writeAs

zBufferedWriterTest.test_writecCsr|��}|�|d�}d}x.tdt|�d�D]}|�|||d��q*Wd�|j�}|�|�|dd��|�dS)Nr�sabcdefghijklmnoprr�rAi����)	r@rZr�rr.rlr(rr�)r+r�r_�contentsr:Zflushedrrr�test_write_overflowMsz&BufferedWriterTest.test_write_overflowc	Cs�ttd��d}d}|��}|�|d�}dd�}|�}xT|t|�kr�tt|�t|�|�}|�|�||||��|�||�||7}q8W|�	�|�|d�
|j��dS)Nr�i�rrcss.x(td�D]}xtd�D]
}|VqWq
WdS)Nr7�)rr�)r5r�rrr�	gen_sizes_sz2BufferedWriterTest.check_writes.<locals>.gen_sizesrA)rr�r@rZrrEr�r�r.rUrlr()	r+Zintermediate_funcr�r:r�r_r��sizesr5rrr�check_writesXszBufferedWriterTest.check_writescCs|�dd��dS)NcSsdS)Nr)r_rrrrmrAz0BufferedWriterTest.test_writes.<locals>.<lambda>)r�)r+rrr�test_writeslszBufferedWriterTest.test_writescCs|�dd��dS)NcSs|��S)N)rU)r_rrrrprAz<BufferedWriterTest.test_writes_and_flushes.<locals>.<lambda>)r�)r+rrr�test_writes_and_flushesosz*BufferedWriterTest.test_writes_and_flushescCs(dd�}|�|�dd�}|�|�dS)NcSs8|��}|�|dd�|�|dd�|�|d�dS)Nr7r)r6r5)r_r
rrr�_seekabsssz:BufferedWriterTest.test_writes_and_seeks.<locals>._seekabscSs4|�dd�}|�dd�|�dd�|�|d�dS)Nrr7rq)r5)r_r
rrr�_seekrelysz:BufferedWriterTest.test_writes_and_seeks.<locals>._seekrel)r�)r+r�r�rrr�test_writes_and_seeksrs
z(BufferedWriterTest.test_writes_and_seekscCs|�dd��dS)NcSs|�|���S)N)r<r6)r_rrrr�rAz>BufferedWriterTest.test_writes_and_truncates.<locals>.<lambda>)r�)r+rrr�test_writes_and_truncates�sz,BufferedWriterTest.test_writes_and_truncatesc
Cs�|��}|�|d�}|�|�d�d�|�|�d�d�|�d�|�|�d�d�|�d�y|�d	�Wn*|jk
r�}z
|j}Wdd}~XYnX|�d
�|�|d�|�|��d�|�|�d
�d�|��}|�	|�
d�|�dS)Nr�sabcdr�sefghirJ�ksjklmn�0sopqrwxyz0123456789z'BlockingIOError should have been raisedr�sabcdefghijklmnopqrwxyzs	ABCDEFGHIr}s	01234567A)rjrZr�r.rpru�characters_writtenr�rnrr�)r+rr_r��writtenrmrrr�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�sabcdefr|rsXYrGsXYcdefs123456sXYcdef123456)	rgr�rZr�r.r6r5r�rU)r+rr_rrr�test_write_and_rewind�sz(BufferedWriterTest.test_write_and_rewindcCs<|��}|�|d�}|�d�|��|�d|jd�dS)Nr�sabcr)r@rZr.rUr�r()r+r�r_rrr�
test_flush�s

zBufferedWriterTest.test_flushcCsHdddg}|��}|�|d�}|�|�|��|�d�|j�d�dS)Nsabscdsefr�rAsabcdef)r@rZr�rUr�rlr()r+r�r�r_rrr�test_writelines�s

z"BufferedWriterTest.test_writelinescCsLtdddg�}|��}|�|d�}|�|�|��|�d�|j�d�dS)Nsabscdsefr�rAsabcdef)rr@rZr�rUr�rlr()r+r�r�r_rrr�test_writelines_userlist�s
z+BufferedWriterTest.test_writelines_userlistcCsN|��}|�|d�}|�t|jdddg�|�t|jd�|�t|jd�dS)Nr�r7rGr��abc)r@rZr�r�r�)r+r�r_rrr�test_writelines_error�s
z(BufferedWriterTest.test_writelines_errorcCs>|��}|�|d�}|�d�~t��|�d|jd�dS)Nr�sabcr)r@rZr.rr�r�r()r+r�r_rrrr��s
z"BufferedWriterTest.test_destructorc	Cs�|�tjtj�|jtj|jdd��>}|�|d�}|�d�|�|�	d�d�|�|�
�d�WdQRX|jtjddd��}|�|��d�WdQRXdS)	Nr)r�r�sabcdefr�r|r�sabc)r�rrxryr �
write_moderZr.r�r<r6rC)r+rr_r#rrr�
test_truncate�s
z BufferedWriterTest.test_truncatec
Cs�|�tjtj�|�tjd��}|�dd�WdQRXdddg}xb|D]Z}|jtjd|d��>}|�d|d	�|�d	�|��|�|�	�|d
�WdQRXqHWdS)Nr��i'i i��zr+b)r�r7rG)
r�rrxryr r.rCr<r�r6)r+r#Zbuffer_sizesr�rrr�test_truncate_after_write�s


z,BufferedWriterTest.test_truncate_after_writer�c

sZ�zDd}ttd��|}tddg�}d}t��x6|t|�krdt|�}��||||��||7}q0W~|jtj	|j
dd��t}|�|d��g����fdd	���fd
d�td�D�}t�|��t
�d
�WdQRX|��d�����WdQRX|�tj	d������}WdQRXx*td�D]}	|�|�t|	g��|��q"WWdt�tj	�XdS)Ni�r�r7r�r)r�r�c
sjy6x0y���}Wntk
r$dSX��|�qWWn.tk
rd}z��|��Wdd}~XYnXdS)N)�popleftr8r.r�r-)rmr�)r_r��queuerrr#s
z*BufferedWriterTest.test_threads.<locals>.fcsg|]}tj�d��qS))r�)rOr�)r�r~)r#rrr�sz3BufferedWriterTest.test_threads.<locals>.<listcomp>r�g{�G�z�?z(the following exceptions were caught: %rr�)rr�rrrr�r-r rryr�rZr�rSrTrr[rCr�rrx)
r+r�r�r�r:r5rr�rmr�r)r_r�r#r�rr��s4
"zBufferedWriterTest.test_threadscCsF|��}|�|d�}|�t|jd�|�t|j�|�t|jd�dS)NrJrsabcdef)rFrZr�rZr5r6r.)r+rr_rrrr�s
z%BufferedWriterTest.test_misbehaved_ioc	Cs,|�t��|�|��dd�WdQRXdS)Nr�r�)r�r�rZr@)r+rrr�test_max_buffer_size_removal$sz/BufferedWriterTest.test_max_buffer_size_removalcCsH|��}dd�}||_|�|�}|�d�|�t|j�|�|j�dS)NcSs
t��dS)N)rZ)r
rrr�	bad_write*sz?BufferedWriterTest.test_write_error_on_close.<locals>.bad_writesspam)r@r.rZr�rZr[rrY)r+rr�r
rrr�test_write_error_on_close(s

z,BufferedWriterTest.test_write_error_on_closecCs\|��}|�|d�}tj|jd�}|��|j��|�t	|j
d�|�|j�|�
�dS)Nr�)r�sspam)rNrZrOr�r[r�rQ�waitr�rsr.rrYrl)r+rr_�trrr�test_slow_close_from_thread2s
z.BufferedWriterTest.test_slow_close_from_threadN)rrrr�r�r�r�r�r�r�r�r�r�r�r�r�r�r�r�r�r�r�r�rr�r�r�r�r�r�rrrrr�s2

/
r�c@s>eZdZejZe�ed�dd��Z	dd�Z
dd�Zdd	�Zd
S)�CBufferedWriterTestzGMSan defaults to crashing instead of returning NULL for malloc failure.cCsDt�|�tjdkr@|��}|�|�}|�ttt	f|j
|tj�dS)Ni���)r�r�r�r
r@rZr�r�r�rsr,)r+rr_rrrr�Bs


z$CBufferedWriterTest.test_constructorcCs�|��}|�|�}|jt|j|dd�|�t|jd�|jt|j|dd�|�t|jd�|jt|j|dd�|�t|jd�dS)Nr)r�sdefi�rq)r@rZr�rsr,r.)r+rr_rrrr�Ns
z'CBufferedWriterTest.test_initializationc	Cs�|�tjtj�t�dtf��B|�tjd�}|�|�}|�d�||_	t
�|�}~t��WdQRX|�
|�|�|�tjd��}|�|��d�WdQRXdS)Nrzw+bs123xxxr�)r�rrxryr�r�r�rZr.r~rrr�rr r�rC)r+rr#rrrrr	Xs


z+CBufferedWriterTest.test_garbage_collectionc	Cs0|�td��|�t��ddd�WdQRXdS)Nr�i)r?r�rZrgr�)r+rrrr�isz#CBufferedWriterTest.test_args_errorN)
rrrrgr�rZr�r�r�r�r�r	r�rrrrr�?s

r�c@seZdZejZdS)�PyBufferedWriterTestN)rrrrir�rZrrrrr�osr�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�dS)N)rZr@rrY)r+�pairrrrr�tsz#BufferedRWPairTest.test_constructorcCs�|j�|j�}~|j�|j�}|�ttfd|jd�|�ttfd|jd�|�|��|���|�	|�d�d�|�	|�d�d�dS)Nzuninitialized|has no attributerrA)
rZr�r?rsr�rCr.r,r@r�)r+r�rrrr�xs



z%BufferedRWPairTest.test_uninitializedcCs(|�|��|���}|�|j|j�dS)N)rZr@r�rdr\)r+r�rrrr^�szBufferedRWPairTest.test_detachc	Cs2|�t��|�|��|��dd�WdQRXdS)Nr�r�)r�r�rZr@)r+rrr�(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>.NotReadablecSsdS)NFr)r+rrrr2�szSBufferedRWPairTest.test_constructor_with_not_readable.<locals>.NotReadable.readableN)rrrr2rrrr�NotReadable�sr�)r@r�rZrZ)r+r�rrr�"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>.NotWriteablecSsdS)NFr)r+rrrr/�szUBufferedRWPairTest.test_constructor_with_not_writeable.<locals>.NotWriteable.writableN)rrrr/rrrr�NotWriteable�sr�)r@r�rZrZ)r+r�rrr�#test_constructor_with_not_writeable�sz6BufferedRWPairTest.test_constructor_with_not_writeablecCsv|�|�d�|���}|�|�d�d�|�|�d�d�|�|��d�|�|�d�|���}|�|�d�d�dS)Nsabcdefr�sabcr7rsef)rZr�r@r�rC)r+r�rrrr��szBufferedRWPairTest.test_readcsX�fdd�}��|���dddg���|���dddg���|��d�ddg�dS)Ncs����d�����S)Ns	abc
def
h)rZr�r@r)r+rrr�rAz3BufferedRWPairTest.test_readlines.<locals>.<lambda>sabc
sdef
r~rJ)r�r�)r+r�r)r+rr��sz!BufferedRWPairTest.test_readlinescCs<|�|�d�|���}|�|�d�d�|�|��d�dS)Nsabcdefr�sabcsdef)rZr�r@r�r6)r+r�rrrr��szBufferedRWPairTest.test_read1c
CslxfdD]^}|�|��J|�|�d�|���}td�}|�t||�|�d�|�t|�d�WdQRXqWdS)N)r;r�sabcdefsrJsabcde)r�rZr�r@rr�r8r)r+r:r�rrrrr��s
z BufferedRWPairTest.test_readintocCsf|��}|�|��|�}|�d�|��td�}|�|�d|dd�<|��|�|jddg�dS)Nsabcsdefs***)r@rZr.rUr�r�r()r+r�r�r�rrrr��s

zBufferedRWPairTest.test_writecCsB|�|�d�|���}|�|�d��d��|�|�d�d�dS)Nsabcdefr�sabc)rZr�r@rr�r�r�rC)r+r�rrr�	test_peek�szBufferedRWPairTest.test_peekcCs&|�|��|���}|�|���dS)N)rZr@rr2)r+r�rrr�
test_readable�sz BufferedRWPairTest.test_readablecCs&|�|��|���}|�|���dS)N)rZr@rr/)r+r�rrr�test_writeable�sz!BufferedRWPairTest.test_writeablecCs&|�|��|���}|�|���dS)N)rZr@rr3)r+r�rrr�
test_seekable�sz BufferedRWPairTest.test_seekablecCs8|�|��|���}|�|j�|��|�|j�dS)N)rZr@rrYr[r)r+r�rrr�test_close_and_closed�sz(BufferedRWPairTest.test_close_and_closedc	Cs�dd�}|��}||_|��}|�||�}|�t��}|��WdQRX|�dt|j��|�|j	�|�
|j	�|�|j	�dS)NcSstdS)N)�reader_non_existingrrrr�reader_close�szIBufferedRWPairTest.test_reader_close_error_on_close.<locals>.reader_closer�)r@r[rZr�rzr{r(r)rrYr)r+r�rIr�r�rvrrr� test_reader_close_error_on_close�sz3BufferedRWPairTest.test_reader_close_error_on_closec	Cs�dd�}|��}|��}||_|�||�}|�t��}|��WdQRX|�dt|j��|�|j	�|�
|j	�|�|j	�dS)NcSstdS)N)�writer_non_existingrrrr�writer_close�szIBufferedRWPairTest.test_writer_close_error_on_close.<locals>.writer_closer�)r@r[rZr�rzr{r(r)rrYr)r+r�rIr�r�rvrrr� test_writer_close_error_on_close�sz3BufferedRWPairTest.test_writer_close_error_on_closec	Cs�dd�}dd�}|��}||_|��}||_|�||�}|�t��}|��WdQRX|�dt|j��|�|jj	t�|�dt|jj	��|�
|j�|�
|j�|�
|j�dS)NcSstdS)N)r�rrrrr�szPBufferedRWPairTest.test_reader_writer_close_error_on_close.<locals>.reader_closecSstdS)N)r�rrrrr�szPBufferedRWPairTest.test_reader_writer_close_error_on_close.<locals>.writer_closer�r�)r@r[rZr�rzr{r(r)rtrurrY)r+r�r�rIr�r�rvrrr�'test_reader_writer_close_error_on_closes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�|�||_dS)N)r@r,�_isatty)r+�isattyrrrr,s
zABufferedRWPairTest.test_isatty.<locals>.SelectableIsAtty.__init__cSs|jS)N)r�)r+rrrr�sz?BufferedRWPairTest.test_isatty.<locals>.SelectableIsAtty.isattyN)rrrr,r�rrrr�SelectableIsAttysr�FT)r@rZrr�r)r+r�r�rrr�test_isattyszBufferedRWPairTest.test_isattycCs*|�|��|���}t�|�}d}d}dS)N)rZr@rr)r+Zbrwrrrr�test_weakref_clearing)s
z(BufferedRWPairTest.test_weakref_clearingN)rrrr�r�r^r�r�r�r�r�r�r�r�r�r�r�r�r�r�r�r�r�rrrrrr�rs*			r�c@seZdZejZdS)�CBufferedRWPairTestN)rrrrgr�rZrrrrr/src@seZdZejZdS)�PyBufferedRWPairTestN)rrrrir�rZrrrrr2src@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),�BufferedRandomTestzrb+zwb+cCst�|�t�|�dS)N)r�r�r�)r+rrrr�:s
z#BufferedRandomTest.test_constructorcCst�|�t�|�dS)N)r�r�r�)r+rrrr�>s
z%BufferedRandomTest.test_uninitializedcCsn|�d�}|�|d�}|�d|�d��|�d�|�d�|�|j�|�d|���|�d|jd	�dS)
N)sasdfsghjkr�sasrGsdddseeesghjksdddeeer)r@rZr�rCr.rr()r+rr�rrr�test_read_and_writeBs


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	asdfghjklsasrGrsasdfr�s123fs	asdf123flr}���rJr7rGsfl�g)r�rZr�rCr6r5r.rUr�r�r�)r+rr�rrr�test_seek_and_tellMs$


z%BufferedRandomTest.test_seek_and_tellcCs�|�d�}|�|�}|�d||d��|�d�|�d||d��|�d|���|��|�d|���|�d||��|�dd�|�d	�|��|�dd�|�d	||d
��dS)Ns	abcdefghisabrGs12sefr|sghirsXYZr�)r�rZr�r.r6rUr5)r+Z	read_funcrr_rrr�check_flush_and_readds



z'BufferedRandomTest.check_flush_and_readcCs|�dd��dS)NcWs
|j|�S)N)rC)r_rerrrrwrAz8BufferedRandomTest.test_flush_and_read.<locals>.<lambda>)r)r+rrr�test_flush_and_readvsz&BufferedRandomTest.test_flush_and_readcCsddd�}|�|�dS)NrqcSs.t|dkr|nd�}|�|�}t|d|��S)Nri')r�r;r)r_r:r
rrr�	_readintozs
z=BufferedRandomTest.test_flush_and_readinto.<locals>._readinto)rq)r)r+r
rrr�test_flush_and_readintoys
z*BufferedRandomTest.test_flush_and_readintocCsddd�}|�|�dS)NrqcSs2|�|�}|dkr|d|�}|�t|�d�|S)Nrqr7)r�r5r)r_r:r
rrr�_peek�s

z5BufferedRandomTest.test_flush_and_peek.<locals>._peek)rq)r)r+rrrr�test_flush_and_peek�s
z&BufferedRandomTest.test_flush_and_peekcCsh|�d�}|�|�}|�d�|��|�d�|��|�dd�|�d|���|�d|���dS)Ns	abcdefghis123s45rs	12345fghi)r�rZr.rUr5r�r�rC)r+rr_rrr�test_flush_and_write�s



z'BufferedRandomTest.test_flush_and_writecCst�|�t�|�dS)N)r�r�r�)r+rrrr��s
zBufferedRandomTest.test_threadscCs(dd�}|�|�dd�}|�|�dS)NcSs|�d�dS)Nr7)r�)r_rrrr�sz6BufferedRandomTest.test_writes_and_peek.<locals>._peekcSs.|��}|�dd�|�d�|�|d�dS)Nrqr7r)r6r5r�)r_r
rrrr�s
)r�)r+rrrr�test_writes_and_peek�s
z'BufferedRandomTest.test_writes_and_peekcCsdd�}|�|�dS)NcSs|�dd�|�d�dS)Nrqr7)r5rC)r_rrr�_read�sz7BufferedRandomTest.test_writes_and_reads.<locals>._read)r�)r+rrrr�test_writes_and_reads�sz(BufferedRandomTest.test_writes_and_readscCsdd�}|�|�dS)NcSs|�dd�|�d�dS)Nrqr7)r5r6)r_rrr�_read1�sz9BufferedRandomTest.test_writes_and_read1s.<locals>._read1)r�)r+rrrr�test_writes_and_read1s�sz)BufferedRandomTest.test_writes_and_read1scCsdd�}|�|�dS)NcSs|�dd�|�td��dS)Nrqr7)r5r;r�)r_rrrr�sz;BufferedRandomTest.test_writes_and_readintos.<locals>._read)r�)r+rrrr�test_writes_and_readintos�sz,BufferedRandomTest.test_writes_and_readintoscCs�x�dD]�}|�d�}|�|d�}|�|�d�d�|�|��d�|�d|�|�|��|d�|��|�|��|d�|��}|�|dd|dd|�qWdS)N)r7rJs
AAAAAAAAAAr�r7�A�Br})r�rZr�rCr6r.rUr�)r+Zoverwrite_sizerr_rmrrr�test_write_after_readahead�s

z-BufferedRandomTest.test_write_after_readaheadc	Cs�dd�}d}x�tdt|��D]x}xrt|t|��D]`}|�|�}|�|d�}||||�|��t|�}d||<d||<|�|��|d||f�q0WqWdS)	NcSs:|�|�|�||�|�d�|�|�|�d�dS)N��)r5rCr.)r_Zpos1Zpos2rrr�mutate�s



z:BufferedRandomTest.test_write_rewind_write.<locals>.mutates�����rr�rGr7zfailed result for i=%d, j=%d)r�rr�rZrUr�r�r�)r+rr
r��jrr_�expectedrrr�test_write_rewind_write�s
z*BufferedRandomTest.test_write_rewind_writecCs^|�d�}|�|d�}|�|�d�d�|�|��d�|�|�d�d�|�|��d�dS)Ns
AAAAAAAAAAr�rGsAAsBBr�)r�rZr�rCr<r.)r+rr_rrr�!test_truncate_after_read_or_write�s
z4BufferedRandomTest.test_truncate_after_read_or_writecCst�|�t�|�dS)N)r�r�r�)r+rrrr��s
z%BufferedRandomTest.test_misbehaved_ioc
Cs:|�d���}|�|d���}|�d�|�|�d�d�|�d�|�|�d�d�|�d�td�}|�|�|�|d	�|�d
�|�|�d�d�|�	�|�|�
�d�WdQRXWdQRX|�d
��d}|�|d��L}|�|�d�d�|�d�|�|�d�d�|�	�|�|�
�d�WdQRXWdQRXdS)Nsabcdefghr��1r7r��2rr��f�4r~s1b2d3f4hsabcr�rsa2c)r�rZr.r�rCr6r�r;r�rUr�)r+rr#r9rrr�test_interleaved_read_write�s*




$
z.BufferedRandomTest.test_interleaved_read_writec
Cs�|�d���}|�|��l}|�d�|�|��d�|�d�|�|��d�|�d�|�|��d�|��|�|��d�WdQRXWdQRXdS)	Ns
ab
cdef
g
rsb
r sdef
r��
s
1b
2def
3
)r�rZr.r�r�rUr�)r+rr#rrr�test_interleaved_readline_write	s


z2BufferedRandomTest.test_interleaved_readline_writeN)rrrr�r�r�r�rrrr	rr
rr�rrrrrrrr�r#r%r}rrrrr6s.
rc@s6eZdZejZe�ed�dd��Z	dd�Z
dd�ZdS)	�CBufferedRandomTestzGMSan defaults to crashing instead of returning NULL for malloc failure.cCsDt�|�tjdkr@|��}|�|�}|�ttt	f|j
|tj�dS)Ni���)rr�r�r
r@rZr�r�r�rsr,)r+rr_rrrr�	s


z$CBufferedRandomTest.test_constructorcCst�|�t�|�dS)N)r�r	r�)r+rrrr	*	s
z+CBufferedRandomTest.test_garbage_collectionc	Cs0|�td��|�t��ddd�WdQRXdS)Nr�i)r?r�rZrgr�)r+rrrr�.	sz#CBufferedRandomTest.test_args_errorN)rrrrgr�rZr�r�r�r�r	r�rrrrr&	sr&c@seZdZejZdS)�PyBufferedRandomTestN)rrrrir�rZrrrrr'4	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�||�|��dS)N)�codecs�IncrementalDecoderr,�reset)r+r�rrrr,U	sz#StatefulIncrementalDecoder.__init__cCsdt|�S)Nz<SID %x>)�id)r+rrr�__repr__Y	sz#StatefulIncrementalDecoder.__repr__cCsd|_d|_t�|_dS)Nr7)r��or�r�)r+rrrr,\	sz StatefulIncrementalDecoder.resetcCs,|jdA|jdA}}t|j�|d|fS)Nr7r�)r�r/rr�)r+r�r/rrr�getstatea	sz#StatefulIncrementalDecoder.getstatecCs:|\}}t|�|_t|d�\}}|dA|dA|_|_dS)Nr�r7)r�r��divmodr�r/)r+�stater�rgr�r/rrr�setstatee	s
z#StatefulIncrementalDecoder.setstateFcCs�d}xl|D]d}|jdkrF|td�kr8|jrD||��7}qn|j�|�q
|j�|�t|j�|jkr
||��7}q
W|r�|jr�||��7}|S)Nrr�.)r��ordr��process_wordr-r)r+�input�final�outputr
rrr�decodek	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��cr7r/r��-r4)	r�r5rE�intr�r/r:rr�)r+r9rrrr6|	s  z'StatefulIncrementalDecoder.process_wordc	Cs6|jr2|dkr2t�d�}tjd|jdddd|d�SdS)N�test_decoderzlatin-1)rKr=r:�incrementalencoder�streamreader�streamwriter�incrementaldecoder)�codecEnabledr*�lookup�	CodecInfor=)�clsrK�latin1rrr�lookupTestDecoder�	s
z,StatefulIncrementalDecoder.lookupTestDecoderN)r))F)rrrr=r,r.r,r0r3r:r6rC�classmethodrHrrrrr(C	s

r(c@s*eZdZdZdddddddgZd	d
�ZdS)�StatefulIncrementalDecoderTestzB
    Make sure the StatefulIncrementalDecoder actually works.
    )sabcdFza.b.c.d.)soiabcdTzabcd.)soi...abcd...Tzabcd.)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`x.|jD]$\}}}t�}|�|�||�|�qWt�}|�|�d�d�|�|�dd�d�dS)NsoiabcdrrAr7zabcd.)�
test_casesr(r�r:)r+r7�eofr9�drrrr>�	sz+StatefulIncrementalDecoderTest.test_decoderN)rrrr=rKr>rrrrrJ�	s
rJc@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[�Z6ej7d\d]��Z8d^d_�Z9d`da�Z:dbdc�Z;ddde�Z<dfdg�Z=dhdi�Z>djdk�Z?dldm�Z@dndo�ZAdpdq�ZBdrds�ZCdtdu�ZDdvdw�ZEdxdy�ZFejGdzd{��ZHejGd|d}��ZId~d�ZJd�d��ZKd�d��ZLd�d��ZMd�d��ZNd�d��ZOd�d��ZPd�d��ZQd�d��ZRd�S)��TextIOWrapperTestcCs"d|_d�d�|_t�tj�dS)NsAAA
BBB
CCC
DDD
EEE
sAAA
BBB
CCC
DDD
EEE
r�)�testdatar:�
normalizedrrxry)r+rrrrz�	szTextIOWrapperTest.setUpcCst�tj�dS)N)rrxry)r+rrrr{�	szTextIOWrapperTest.tearDowncCs�|�d�}|�|d�}|�|�}|j|ddd�|�|jd�|�|jd�|j|ddd	�|�|jd�|�|jd�|�d
|���|jt	|j|dd�|jt
|j|d
d�dS)Nsé

i�zlatin-1z
)rr3Fzutf-8T)r�line_bufferingué
r0)r3rf)r�r�r�r,r�rrQr�r�r�rs)r+rr
r�rrrr��	s

z"TextIOWrapperTest.test_constructorcCsf|j�|j�}~|j�|j�}|�tt|�|�ttfd|jd�|�	|�
��|�|�d�d�dS)Nzuninitialized|has no attributerr)r�r�r�r�r]r?rsr�rCr,r@r�)r+r�rrrr��	s

z$TextIOWrapperTest.test_uninitializedc	Cs<|��}|�|�}|�td��|j|dd�WdQRXdS)Nzis not a text encoding�hex)r)r�r�r?�LookupErrorr�)r+rr
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�)rZhowdyshowdyr))r�r�r�r[r\r.rr�r�r�rsr]rr�rQ�
write_through)r+rr
r�rrrr^�	s


zTextIOWrapperTest.test_detachcCs�|�d�d��}|�|�}|j|dd�}|jj}|�t|�d|�d|_|�t|�d|�d|_|�t|�d|�d	|_|�t|�d
|�|j	�
�t|�dS)NZhellozutf-8)rz'<(%s\.)?TextIOWrapper encoding='utf-8'>rmz4<(%s\.)?TextIOWrapper name='dummy' encoding='utf-8'>rz=<(%s\.)?TextIOWrapper name='dummy' mode='r' encoding='utf-8'>sdummyz><(%s\.)?TextIOWrapper name=b'dummy' mode='r' encoding='utf-8'>)r�r=r�r�rrnr]rKr�r�r\)r+rr
r��modnamerrrro
s"









zTextIOWrapperTest.test_reprc	CsR|��}|�|�}t�|d|��(yt|�Wntk
rBYnXWdQRXdS)NrK)r�r�rrpr]rq)r+rr�rrrrr
s
z%TextIOWrapperTest.test_recursive_reprcCsv|��}|�|d�}|j|ddd�}|�d�|�|��d�|�d�|�|��d�|�d	�|�|��d
�dS)Ni��
T)r3rQ�XrAzY
ZsXY
ZzA
BsXY
ZA
B)r�r�r�r.r�r�)r+rr
r�rrr�test_line_buffering&
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)Ni�rWF)r3rQzAB
CrAT)rQsAB
CzDEF
Gs	AB
CDEF
G�Hs
AB
CDEF
GHZIJ)r�r�r�r.r�r��reconfigurerQ)r+rr
r�rrr�test_reconfigure_line_buffering1
s,



z1TextIOWrapperTest.test_reconfigure_line_bufferingzutf-8 mode is enabledc	Csvttj�}zNxdD]}|tjkrtj|=qWt�d�}|��}|�|�}|�|j|�Wdtj�	�tj�
|�XdS)N)�LC_ALL�LANG�LC_CTYPEF)�dictr��environ�locale�getpreferredencodingr�r�r�r�clear�update)r+Zold_environ�keyZcurrent_locale_encodingr
r�rrr�test_default_encodingL
s





z'TextIOWrapperTest.test_default_encodingcsPddl�|��}�fdd�|_|�t|j|��fdd�|_|�t|j|�dS)Nrcs
�jdS)Nr7)ZINT_MAXr)�	_testcapirrre
rAz8TextIOWrapperTest.test_device_encoding.<locals>.<lambda>cs
�jdS)Nr7)ZUINT_MAXr)rhrrrg
rA)rhr�r1r�r�r�)r+r
r)rhr�test_device_encoding_
sz&TextIOWrapperTest.test_device_encodingcCsJ|��}|j|dd�}|�|jd�|�|�}|�|j�t�|j�dS)Nzutf-8)r)r�r�r�r�assertIsNotNoner*rD)r+r
r�rrr�
test_encodingj
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�)rr))rr�r�zabc

�replaceuabc
�
)r�r�r��UnicodeErrorrCr�)r+r
r�rrr�test_encoding_errors_readings
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�rW)rr�r3u	abcÿdef
sabcdef
rlsabc?def
)r�r�r�rmr.rUr�r�)r+r
r�rrr�test_encoding_errors_writing�
s$



z.TextIOWrapperTest.test_encoding_errors_writingc	CsTdddddg}ddddddggd|gd	ddd
dggddd
ggddddggg}d}x�|D]�}td�|��|��}x�dD]�}x�tdd�D]�}x�|D]�\}}	|�|�|�|�}
|j|
||d�}|r�g}xD|�d�}
|
dkr�P|�t	|
�d�|�
|
|���q�Wnt|�}x$t
||	�D]\}}|�||��qW|�t	|�t	|	��q�Wq�WqtWqVWdS)Nzunix
z	windows
zos9
zlast
Znonlzwindows
zos9
rrWz	os9
last
z
zunix
windows
z
os9
last
nonl�
z
unix
windows
z
os9
z	last
nonl)zutf-8zlatin-1zutf-16z	utf-16-lez	utf-16-bezutf-32z	utf-32-lez	utf-32-be)FTr7r�)r3rrG)rrlr=r�r�r�r�rCr�rr-r�r&�zip)r+Zinput_linesr��	encodingsrrZdo_readsr�r3Z	exp_linesr_�textioZ	got_linesZc2Zgot_lineZexp_linerrr�
test_newlines�
s6



zTextIOWrapperTest.test_newlinesc
Cs�d}|�dd��dd�}x�d|�d�jdd�fd|�d�jdd�fd	d
ddd
dgfddd
dgfddddddgfgD]R\}}|�|�}|j|d|d�}|�|��|�|�d�|�|��d�	|��qrWdS)NsAAA
BBB
CCC
DDD
EEE
FFF
GGGs
r$�
r�T)�keependsrrWzAAA
zBBB
z
CCC
DDD
EEE
zFFF
ZGGGz
zAAA
BBB
CCC
DDD
EEE
rqz
AAA
BBB
CCC
zDDD
zEEE
z
FFF
z
GGG)rr3r)
rlr:rjr�r�r�r�r5rCrl)r+rOrPr3rr9�txtrrr�test_newlines_input�
s

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

ZsAAA
BBB
CCC
X
Y

Z)rrWrqz
r�)rr3zAAA
BzBB
CCC
zX
Y
ZF)r��linesep�sorted�itemsr�r�r.rUr�rYr�)r+Ztestdictr�r3rr9rxrrr�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��|�����|�dS)N)r-r�r[)r+)r�r�rrr[�
sz:TextIOWrapperTest.test_destructor.<locals>.MyBytesIO.closeN)rrrr[r)r�r�rr�	MyBytesIO�
sr~r�)rr�sabc)r�r�r.rr�r�)r+r~r
r�r)r�r�rr��
s
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�yt�j}Wntk
r*YnX|�dS)Nr7)r-rHr�r�)r+r#)rIr�rrr��
s
zDTextIOWrapperTest.test_override_destructor.<locals>.MyTextIO.__del__cs��d�t���dS)NrG)r-rHr[)r+)rIr�rrr[s
zBTextIOWrapperTest.test_override_destructor.<locals>.MyTextIO.closecs��d�t���dS)Nr�)r-rHrU)r+)rIr�rrrUs
zBTextIOWrapperTest.test_override_destructor.<locals>.MyTextIO.flush)rrrr�r[rUrKr)r�)rIr�MyTextIO�
srr�)rr7rGr�)r�r�rr�r�)r+rr
r�r)r�rrc�
sz*TextIOWrapperTest.test_override_destructorc	s�������fdd�}t�d��}��t|�WdQRX|����}|r���t|�	��d���
|�d�|���
|�d�|�dS)Ncs����jdS)N)r�rfr)rr+rrr#sz:TextIOWrapperTest.test_error_through_destructor.<locals>.frgr7zException OSError: z ignored)
rXrrhr�r�r�rir�rrjrr�rk)r+r#rmr)rr+rrlsz/TextIOWrapperTest.test_error_through_destructorcCs��x�dD�]�}�x~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�|�||�|��qWqWdS)N)r7rGr�r�rJr�r���� �!�?�@�A)r�zlatin-1zutf-8zw+)rr�r�zr+rrGr�r7r�r�def�utf)r rryr"r�r.r[r6rCr5r��multi_line_test)r+Z	chunksize�encr#�cookierrr�
test_basic_ios6
zTextIOWrapperTest.test_basic_iocCs�|�d�|��d}g}xbdD]Z}g}x&t|�D]}|�||t|��q2Wd�|�d}|�|��|f�|�|�q W|�d�g}	x(|��}
|��}|s�P|	�|
|f�q�W|�	|	|�dS)Nru	sÿ࿿￿)rr7rGr�r�rJ�r�r�r��>r�r�r�i�rrW)
r5r<r�r-rrlr6r.r�r�)r+r#r�ZsampleZwlinesr5�charsr��lineZrlinesr
rrrr�<s(


z!TextIOWrapperTest.multi_line_testcCs�|jtjddd�}|��}|�d�|��}|�d�|��}|�d�|�|��|�|�|��d�|�|��|�|�|��d�|�|��|�|�d�x&|D]}|�|d�|�t	|j�q�W|�|��|�|�
�dS)Nzw+zutf-8)ruÿ
r)r rryr6r.r5r�r�r�rZr[)r+r#Zp0Zp1Zp2r�rrr�test_tellingRs$




zTextIOWrapperTest.test_tellingc
	Cs�t�}|d}d|}t|�d��}|�t|�t|��d}t|�d��}||}|�tjd��}|�|d�WdQRX|jtjddd��B}|�	|�}	|�|	t
|d��|�|��|�|�|��|�WdQRXdS)	NrGr�zutf-8u袈
r�r)rr�)
r$rr=r�rr rryr.rCr(r6r�)
r+Z
chunk_sizeZprefix_sizeZu_prefix�prefixZu_suffix�suffixr�r#rmrrr�test_seekingfs
zTextIOWrapperTest.test_seekingc	Csfd}|�tjd��}|�|�WdQRX|jtjddd��"}|jd|_|��|��WdQRXdS)Ns࿿
r�rzutf-8)rrG)r rryr.r"r�r6)r+rr#rrr�test_seeking_toowsz"TextIOWrapperTest.test_seeking_toocs�d�d��fdd�	}dt_zfxtjD]\}}}||�q$WxBtjD]8\}}}�t|�d}d|}|d}||||�qBWWddt_XdS)	N�rc	s���tjd�}|�|�|���jtjdd�}�|_|��}|��x�t|t|�d�D]�}x�ddt|�|gD]~}�jtjdd�}��	|�|�|d|��|�
�}��	|�|�||||��|�|���	|��||d��|��qrWqZWdS)zTell/seek to various points within a data stream and ensure
            that the decoded data returned by read() is consistent.r�r>)rr7rJN)r rryr.r[r"rCr�rr�r6r5)r�min_posr#Zdecodedr�rr�)�
CHUNK_SIZEr+rr�test_seek_and_tell_with_data�s 

zJTextIOWrapperTest.test_seek_and_tell.<locals>.test_seek_and_tell_with_datar7rG�.)r)r(rCrJrKr)r+r�r7�_�offsetr�r�r)r�r+rr�sz$TextIOWrapperTest.test_seek_and_tellcCs�d}d}x�|D]�}|��}|j||d�}|�|�|�|�|�d�|�|��|d�|�d�|�|��|d�|�|��|d�|��qWdS)NZ
1234567890)zutf-16z	utf-16-lez	utf-16-bezutf-32z	utf-32-lez	utf-32-be)rrrG)r�r�r.r5r�rCr�r=)r+rr�rr9r#rrr�test_encoded_writes�s




z%TextIOWrapperTest.test_encoded_writescCs0Gdd�d|j�}|�|��}|�t|j�dS)Nc@seZdZdd�ZdS)z5TextIOWrapperTest.test_unreadable.<locals>.UnReadablecSsdS)NFr)r+rrrr2�sz>TextIOWrapperTest.test_unreadable.<locals>.UnReadable.readableN)rrrr2rrrr�
UnReadable�sr�)r�r�r�rZrC)r+r�rxrrr�test_unreadable�sz!TextIOWrapperTest.test_unreadablecCsB|�|�d��}d}x|�d�}|s&P||7}qW|�|d�dS)NsAA
BBrr7zAA
BB)r�r�rCr�)r+rx�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
ZCCrrJ)r�r�r�r�r5)r+rxrrrr��s

z TextIOWrapperTest.test_readlinescCsB|�|�d��}d}x|�d�}|s&P||7}qW|�|d�dS)Ns�AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
Brr�z�AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
B)r�r�rCr�)r+rxr�r�rrr�test_read_by_chunk�s
z$TextIOWrapperTest.test_read_by_chunkcCsBdddg}|��}|�|�}|�|�|��|�|��d�dS)Nr��cd�efsabcdef)r�r�r�rUr�r�)r+r�r9rxrrrr��s


z!TextIOWrapperTest.test_writelinescCsFtdddg�}|��}|�|�}|�|�|��|�|��d�dS)Nr�r�r�sabcdef)rr�r�r�rUr�r�)r+r�r9rxrrrr��s

z*TextIOWrapperTest.test_writelines_userlistcCsH|�|���}|�t|jdddg�|�t|jd�|�t|jd�dS)Nr7rGr�sabc)r�r�r�r�r�)r+rxrrrr��sz'TextIOWrapperTest.test_writelines_errorcCsJ|j|�|j�dd�}d}x|�d�}|s,P||7}qW|�||j�dS)Nr�)rrr7)r�r�rOrCr�rP)r+rxr�r�rrr�test_issue1395_1s
z"TextIOWrapperTest.test_issue1395_1cCsP|j|�|j�dd�}d|_d}x|�d�}|s2P||7}q"W|�||j�dS)Nr�)rr�r)r�r�rOr"rCr�rP)r+rxr�r�rrr�test_issue1395_2s
z"TextIOWrapperTest.test_issue1395_2cCsj|j|�|j�dd�}d|_|�d�}||�d�7}||��7}||��7}||��7}|�||j�dS)Nr�)rr�)r�r�rOr"rCr�r�rP)r+rxr�rrr�test_issue1395_3s
z"TextIOWrapperTest.test_issue1395_3cCsD|j|�|j�dd�}d|_|�d�}||��7}|�||j�dS)Nr�)rr�)r�r�rOr"rCr�rP)r+rxr�rrr�test_issue1395_4#s

z"TextIOWrapperTest.test_issue1395_4cCsX|j|�|j�dd�}d|_|�d�}|��}|�d�|�|�|�|�d�d�dS)Nr�)rr�rzBBB
)r�r�rOr"rCr6r5r�)r+rxr�r
rrr�test_issue1395_5+s


z"TextIOWrapperTest.test_issue1395_5cCs2|�|j�}|j|dd�}|�|��|���dS)Nr�)r)r�rOr�r�r3)r+r�rxrrr�test_issue22825sz TextIOWrapperTest.test_issue2282c
Cs�tj}x�dD]�}|j|d|d��}|�d�|��}WdQRX|�|d��}|�|��d�|��WdQRX|j|d|d��}|�d�WdQRX|�|d��}|�|��d�|��WdQRXqWdS)	N)z	utf-8-sigzutf-16zutf-32r�)r�aaar�r��xxx�aaaxxx)rryr r.r6r�rCr=)r+�filename�charsetr#r
rrr�test_append_bom;s

 z!TextIOWrapperTest.test_append_bomc
Cs�tj}x�dD]�}|j|d|d��}|�d�|��}WdQRX|j|d|d��.}|�|�|�d�|�d�|�d�WdQRX|�|d	��}|�|��d
�|��WdQRXqWdS)N)z	utf-8-sigzutf-16zutf-32r�)rr�zr+ZzzzrZbbbr�Zbbbzzz)	rryr r.r6r5r�rCr=)r+r�r�r#r
rrr�
test_seek_bomJs




zTextIOWrapperTest.test_seek_bomc
Cs�tj}x�dD]�}|j|d|d��}|�d�WdQRX|j|d|d��(}|�d�|�d|j�|�d�WdQRX|�|d��}|�|��d	�|��WdQRXqWdS)
N)z	utf-8-sigzutf-16zutf-32r�)rr�r�rr�r�r�)	rryr r.r5r�r�rCr=)r+r�r�r#rrr�test_seek_append_bomYs

z&TextIOWrapperTest.test_seek_append_bomc	CsX|�tjd��}|�|jd�WdQRX|jtjddd��}|�|jd�WdQRXdS)Nr�r)rl)r�)r rryr�r�)r+r#rrr�test_errors_propertyfsz&TextIOWrapperTest.test_errors_propertyc
s�t���|jtjddd��N���fdd���fdd�td�D�}t�|�j��t�	d	�WdQRXWdQRX|�tj��6���
�}x&td�D]}|�|�d
|�d�q�WWdQRXdS)Nr�r7)r�csd|}�����|�dS)NzThread%03d
)r�r.)r:�text)�eventr#rr�runqsz1TextIOWrapperTest.test_threads_write.<locals>.runcsg|]}tj�|fd��qS))r�re)rOr�)r�r~)r�rrr�usz8TextIOWrapperTest.test_threads_write.<locals>.<listcomp>r�g{�G�z�?zThread%03d
)
rOrPr rryr�r�rRrSrTrCr�r)r+r�Zcontentr:r)r�r#r�r�test_threads_writels
z$TextIOWrapperTest.test_threads_writecs�|j|�|j�dd��g���fdd�}|�_|�t�j�|��j�|��j	j�|���|�
�d�|�
�d�dd��_dS)	Nr�)rcs �j�jjg�dd�<t��dS)N)rYr�rZr)rYrxrrr�sz>TextIOWrapperTest.test_flush_error_on_close.<locals>.bad_flushrr7cSsdS)Nrrrrrr�rAz=TextIOWrapperTest.test_flush_error_on_close.<locals>.<lambda>)r�r�rOrUr�rZr[rrYr�r)r+rr)rYrxrr~s
z+TextIOWrapperTest.test_flush_error_on_closec	Cs�|�|j�}dd�}dd�}||_|j|dd�}||_|�t��}|��WdQRX|�|jj	d�|�
|jjt�|�|jjj	d�|�|j
�dS)	NcSstd��dS)NrU)rZrrrrr�sz>TextIOWrapperTest.test_close_error_on_close.<locals>.bad_flushcSstd��dS)Nr[)rZrrrrrs�sz>TextIOWrapperTest.test_close_error_on_close.<locals>.bad_closer�)r)r[)rU)r�rOr[r�rUr�rZr�r)rertrurrY)r+r�rrsrxrvrrrrw�sz+TextIOWrapperTest.test_close_error_on_closec	Cs�|�|j�}dd�}dd�}||_|j|dd�}||_|�t��}|��WdQRX|�dt|j	��|�
|j	jt�|�dt|j	j��|�|j
�dS)	NcSst�dS)N)rxrrrrr�szLTextIOWrapperTest.test_nonnormalized_close_error_on_close.<locals>.bad_flushcSst�dS)N)ryrrrrrs�szLTextIOWrapperTest.test_nonnormalized_close_error_on_close.<locals>.bad_closer�)rryrx)r�rOr[r�rUr�rzr{r(r)rtrurrY)r+r�rrsrxrvrrrr|�sz9TextIOWrapperTest.test_nonnormalized_close_error_on_closecCs@|j|�|j�dd�}|��|��|��|�t|j�dS)Nr�)r)r�r�rOr[r�rsrU)r+rxrrrr�s
z"TextIOWrapperTest.test_multi_closecCs8|�|�|j��}|�|j|j�|�|j|jd�dS)Nr)r�rcrOr�rdr6r5)r+rxrrrr}�sz!TextIOWrapperTest.test_unseekablec	CsB|j|�|j�dd�}|�|j�}|�t��||_WdQRXdS)Nr�)r)r�r�rOr�r�r�)r+rxr9rrrr�sz*TextIOWrapperTest.test_readonly_attributescCsZ|�dddg�}|j|ddd�}|�|�d�d�|�|��d	�|�t|�d
dg�dS)Nsabcsdefsghi
jkl
opq
r�rW)rr3r�Zabcdzefghi
zjkl
zopq
)r@r�r�rCr�r&)r+rrxrrr�
test_rawio�s
zTextIOWrapperTest.test_rawiocCsX|�dddg�}|j|dddd�}|�d�|�d	�|�d
�|�d�|j�d�dS)
Nsabcsdefsghi
jkl
opq
r�rWT)rr3rU�1z23
4�5rAs123
45)r@r�r.r�rlr()r+rrxrrr�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||�S)NT)r-rHrU)r+rer)rI�flush_calledrrrU�s
zHTextIOWrapperTest.test_bufio_write_through.<locals>.BufferedWriter.flushcs��d�t�j||�S)NT)r-rHr.)r+rer)rI�write_calledrrr.�s
zHTextIOWrapperTest.test_bufio_write_through.<locals>.BufferedWriter.write)rrrrUr.rKr)r�r�)rIrr��sr�r�rGr�T)rrUrAr�r)
r�r�rr�r:r.rrr�r�)r+r�rrr_rtr�r)r�r�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�rW)rr3r�T)rUrArZ23s123FZ45s12345)	r@r�r.r[r�rUrlr(rU)r+rr�rrr�test_reconfigure_write_through�s(



z0TextIOWrapperTest.test_reconfigure_write_throughcCs`|�|�d��}|�t|jd�|�|�d��}|�t|j�|�|�d��}|�t|j�dS)Nr�r7)r�r�r�r�rCr�)r+r�rrr�test_read_nonbytes
sz$TextIOWrapperTest.test_read_nonbytesc	CsLt�d�}t�|dd��tjt�d�dd�}WdQRX|�t|j	d�dS)N�rot13�_is_text_encodingTsfoo)rZbar)
r*rDrrprgr�r�r�r�r.)r+r�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)	Ncs8t�d�}d|_z�j��d�ddd�}Wdd|_X|S)N�quopriTsaaaaaarW)r3rF)r*rDr�r�r�)r�r�)r+rr�_make_illegal_wrapper#
s
zETextIOWrapperTest.test_illegal_decoder.<locals>._make_illegal_wrapperr7c	sHG�fdd�d���fdd�}t�d�}t�|d|����SQRXdS)NcseZdZ�fdd�ZdS)z^TextIOWrapperTest.test_illegal_decoder.<locals>._make_very_illegal_wrapper.<locals>.BadDecodercs�S)Nr)r+)�getstate_ret_valrrr09
szgTextIOWrapperTest.test_illegal_decoder.<locals>._make_very_illegal_wrapper.<locals>.BadDecoder.getstateN)rrrr0r)r�rr�
BadDecoder8
sr�cs��S)Nr)rm)r�rr�_get_bad_decoder;
szdTextIOWrapperTest.test_illegal_decoder.<locals>._make_very_illegal_wrapper.<locals>._get_bad_decoderr�rB)r*rDrrp)r�r�r�)r�)r�r�r�_make_very_illegal_wrapper7
s
zJTextIOWrapperTest.test_illegal_decoder.<locals>._make_very_illegal_wrapperr0r)r7rG)r�r�rCr�)r+r�r�r)r�r+r�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()
            )�iomodrz-c)rgrrr)r+rr��coderrr�_check_create_at_shutdownH
sz+TextIOWrapperTest._check_create_at_shutdowncCs>|��\}}}|r&|�|j|���n|�d|�����dS)N�ok)r�r{�shutdown_errorr:r�ri)r+�rc�outrvrrr�(test_create_at_shutdown_without_encoding]
sz:TextIOWrapperTest.test_create_at_shutdown_without_encodingcCs6|jddd�\}}}|�|�|�d|�����dS)Nzutf-8r))rr�r�)r�rr�r:ri)r+r�r�rvrrr�%test_create_at_shutdown_with_encodingg
s
z7TextIOWrapperTest.test_create_at_shutdown_with_encodingcCs@td�}|�|d�}t|�����}|�|�d�|�d��dS)NsJust some random string
zutf-8r�)�MemviewBytesIOr��_to_memoryviewr�r�r�rCr:)r+rr�Z	bytes_valrrr�test_read_bytesliken
sz%TextIOWrapperTest.test_read_byteslikec	CsjGdd�dt�}x:td�D].}y|j|�dd�Wqtk
rFYqXqWdd�|_|j|�dd�}dS)Nc@s$eZdZdd�Zdd�Zdd�ZdS)z,TextIOWrapperTest.test_issue22849.<locals>.FcSsdS)NTr)r+rrrr2{
rAz5TextIOWrapperTest.test_issue22849.<locals>.F.readablecSsdS)NTr)r+rrrr/|
rAz5TextIOWrapperTest.test_issue22849.<locals>.F.writablecSsdS)NTr)r+rrrr3}
rAz5TextIOWrapperTest.test_issue22849.<locals>.F.seekableN)rrrr2r/r3rrrr�Fz
sr�r�zutf-8)rcSsdS)Nrr)r~rrrr�
rAz3TextIOWrapperTest.test_issue22849.<locals>.<lambda>)�objectr�r�r�r6)r+r�r�r�rrr�test_issue22849y
s

z!TextIOWrapperTest.test_issue22849c	Cs�d�d�d�d�}|�|�}|j|ddd�}|�|��d�|�|j��|jdd�WdQRX|�|j��|jdd	�WdQRXdS)
Nuabcé
rGudéf
�utf8rW)rr3zutf-8)r)r3)r=r�r�r�r�r�rdr[)r+rrrxrrr�test_reconfigure_encoding_read�
s
z0TextIOWrapperTest.test_reconfigure_encoding_readcCsT|��}|j|ddd�}|�d�|jdd�|�d�|��|�|��d�dS)	Nr�rW)rr3zfoo
z	utf-8-sig)rué
sfoo
é
)r�r�r.r[rUr�r�)r+rrxrrr� 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)NrGrW)rr3uabcé
zutf-8)rsabc�
udéf
s
abc�
déf
r�zabc
z	utf-8-sigs	abc
déf
)r�r�r.r[r�r�rU)r+rrxrrr�test_reconfigure_write�
s



z(TextIOWrapperTest.test_reconfigure_writecCsd|��}dd�|_d|_|j|ddd�}|�d�|jdd�|�d	�|��|�|��d
�dS)NcSsdS)NFrrrrrr�
rAzGTextIOWrapperTest.test_reconfigure_write_non_seekable.<locals>.<lambda>r�rW)rr3zabc
z	utf-8-sig)rudéf
sabc
déf
)	r�r3r5r�r.r[rUr�r�)r+rrxrrr�#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�rlrW)rzLF
z
)r3r�)r�zCRLF
zutf-8)rr3r)rzLF
CRLF
s	LF
CRLF
)r�r�r[r�rr�r.r5rCr\r�)r+rxrrr�test_reconfigure_defaults�
s"


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�rW)r3zCR
rzCR
s	CR
LF
EOFrqzCR
LF
s	LF
CR
EOFzLF
CR
sCR
CRLF
EOFz
z	CR
CRLF
zlinesep
zLF
zCRLF
rzzLF
LF
CR
CRLF
)r�r�r[r�r�r.r�rzr\r�r:)r+rrxrrrr�test_reconfigure_newline�
sB









z*TextIOWrapperTest.test_reconfigure_newlinecCsb|j|�d�dd�}|�d�|��|��|j|�d�dd�}|�d�|�d�|��dS)Nstestr�)rr7r~)r�r�rCr6r.)r+r�rrr�test_issue25862�
s


z!TextIOWrapperTest.test_issue25862N)Srrrrzr{r�r�rTr^rorrrYr\r�r�r�r"�	utf8_modergrr�rirkrnrpruryr}r�rcrlr�r�r�r�r�rr�r�r�r�r�r�r�r�r�r�r�r�r�r�r�r�r�r��
no_tracingr�rrwr|rr}rr�r�r�r�r�r�r�r�Zrequires_type_collectingr�r�r�r�r�r�r�r�r�r�r�rrrrrN�	s�	

	*/
	


 
(

$rNcs,eZdZdZ�fdd�Z�fdd�Z�ZS)r�zOA BytesIO object whose read method returns memoryviews
       rather than bytescstt��|��S)N)r�rHr6)r+�len_)rIrrr6
szMemviewBytesIO.read1cstt��|��S)N)r�rHrC)r+r�)rIrrrCszMemviewBytesIO.read)rrrr=r6rCrKrr)rIrr�	sr�cCs:t�d�}t|�t|�|j}|�|d|��t|�S)z6Convert bytes-object *buf* to a non-trivial memoryviewr�N)rr�itemsizeZ	frombytesr)r9Zarr�idxrrrr�s
r�c@s4eZdZeZdZdd�Zdd�Zdd�Zdd	�Zd
S)�CTextIOWrapperTestz,RuntimeError: could not find io module statecCsb|�d�}|�|d�}|�|�}|jt|j|dd�|�t|j�|j�|j�}|�tt	|�dS)Nsé

i�rf)r3)
r�r�r�r�rsr,rCr�r�r])r+rr
r�rrrr� s

z&CTextIOWrapperTest.test_initializationc	Cs�t�dtf��Pt�tjd�}|�|�}|j|dd�}|�d�||_	t
�|�}~t��WdQRX|�
|�|�|�tjd��}|�|��d�WdQRXdS)Nrr�r�)rZ456defr�s456def)rr�r�rgr�ryr�r�r.r~rrr�rr r�rC)r+rr
r�rr#rrrr	*s


z*CTextIOWrapperTest.test_garbage_collectioncCsnx`td�D]T}|�|��|���}|j|dd�}|�|��|���}|j|dd�}||_||_q
Wt��dS)Ni�r�)r)r�r�r@r�Zbuddyrr�)r+r�Zb1Zt1Zb2Zt2rrr�!test_rwpair_cleared_before_textio;s
z4CTextIOWrapperTest.test_rwpair_cleared_before_textioc	Cs0|j|��dd�}|�t��
|`WdQRXdS)Nr�)r)r�r�r�r�r")r+r�rrr� test_del__CHUNK_SIZE_SystemErrorIsz3CTextIOWrapperTest.test_del__CHUNK_SIZE_SystemErrorN)	rrrrgr�r�r	r�r�rrrrr�s
r�c@seZdZeZdZdS)�PyTextIOWrapperTestz$LookupError: unknown encoding: asciiN)rrrrirgr�rrrrr�Osr�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|�|�dS)N)r0r�r:r3)r
rmrr2)�decoderr+rr�
_check_decodeXs
zPIncrementalNewlineDecoderTest.check_newline_decoding_utf8.<locals>._check_decodes袈u袈��r����rAT)r8r$rWrvr�z
as

z

s
as袈
u袈
s袈
)r��UnicodeDecodeErrorr:r,)r+r�r�r)r�r+r�check_newline_decoding_utf8Vs4



















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.x(��|�D]}����t|g���qWdS)N)r=r-r:r)rmr
)r��encoderrDrr�_decode_bytewise�szNIncrementalNewlineDecoderTest.check_newline_decoding.<locals>._decode_bytewisecs"x|D]}����|��qWdS)N)r-r:)rmr�)r�rDrrr��s
zabc

rWz
abc)rWz
zabc
r�)rqrWz
rzabc

abcabc
abcabc)r*�getincrementalencoderr��newlinesrlr,r=r:)r+r�rr�r7r)r�r�rDr�check_newline_decoding�s0
z4IncrementalNewlineDecoderTest.check_newline_decodingcCstd}x6|D].}|ot�|��}|j|dd�}|�||�q
Wt�d��}|j|dd�}|�|�|�t|jd�dS)N)	Nzutf-8zlatin-1zutf-16z	utf-16-lez	utf-16-bezutf-32z	utf-32-lez	utf-32-beT)�	translatezutf-8r0)r*�getincrementaldecoder�IncrementalNewlineDecoderr�r�r�r�r3)r+rsr�r�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:)�dec)r+rr�_check�s
z@IncrementalNewlineDecoderTest.test_newline_bytes.<locals>._checkF)r�T)r�)r+r�r�r)r+r�test_newline_bytes�s
z0IncrementalNewlineDecoderTest.test_newline_bytescCs`x.dD]&}t�d��}|�||�}|�|�qWt�d��}|j|dd�}|�|�d�d�dS)N)r,rqr7rGzutf-8r)r�s

z

)r*r�r�r�r�r:)r+r�r�rrr�test_translate�s
z,IncrementalNewlineDecoderTest.test_translateN)rrrr�r�r�r�r�rrrrr�Ts
*!
r�c@seZdZdS)�CIncrementalNewlineDecoderTestN)rrrrrrrr�src@seZdZdS)�PyIncrementalNewlineDecoderTestN)rrrrrrrr�src@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�dS)N)rrxry)r+rrrr{�szMiscIOTest.tearDowncCs�xz|jjD]n}t|j|d�}|�||�|dkr4q
q
d|��ksH|dkr\|�t|t�|�q
|�d�s
|�t||j	��q
WdS)Nr �errorrdZSEEK_)
rg�__all__r8rj�lowerr�
issubclassr�r�r�)r+rKrrrr�test___all__�s
zMiscIOTest.test___all__c	Csh|jtjddd�}|�|jd�|��t�dtf��|�tjd�}WdQRX|�|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�r)r�r�Ur�zw+zrb+F)r�)r rryr�r�r[r�r�rKr�rr1)r+r#�grrr�test_attributes�s.zMiscIOTest.test_attributescCsNt��\}}|�tj|�|�|d�}|�|j�tjdkrJ|�|���dS)Nr��win32)	r�r�r�r[r r�r�rr3)r+rr�r#rrr�test_open_pipe_with_append�s
z%MiscIOTest.test_open_pipe_with_appendcCs�xddiddiddd�ddd�ddd�ddidd	iddd�ddd�d	dd�dd
iddid
dd�d
dd�ddd�gD�]�}|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��r6|�t|j�t
|d��rV|�t|jtd��t
|d��rv|�t|jtd��|�t|j�|�t|j�|�t|jd�|�t|jd�|�t|j�|�t|j�|�t|jd|dk�r�dnd�|�t|jg�|�tt|�qtWdS)Nr�r�r�r7)r�r�rGrrr�zw+zw+br�r6irAr;r�r
rAr)r rryr[r�rsrUr1r��__iter__r r�rCr6rAr;r�r�r�r�r5r6r<r.r�r�)r+rr#rrr�test_io_after_close	sX

zMiscIOTest.test_io_after_closecCsXGdd�dt�}|d�}|�d|�}||_||_t�|�}~~t��|�|�|�dS)Nc@seZdZdS)z*MiscIOTest.test_blockingioerror.<locals>.CN)rrrrrrr�C:srrr7)	r(rur
r�rrrr�r)r+rr�r
rrrr�test_blockingioerror8s
zMiscIOTest.test_blockingioerrorcCsD|�|jtj�|�|jtj�|�|jtj�|�|jtj�dS)N)rtr�r��ABCMetar�r�r�)r+rrr�	test_abcsEszMiscIOTest.test_abcsc	Cs�|jtjddd��>}|�||j�|�||j�|�||j�|�||j�WdQRX|�tjd��>}|�||j�|�||j�|�||j�|�||j�WdQRX|�tjd��>}|�||j�|�||j�|�||j�|�||j�WdQRXdS)Nr�r)r�r�)	r rryrtr�r�ZassertNotIsInstancer�r�)r+Z	abcmoduler#rrr�_check_abc_inheritanceLsz!MiscIOTest._check_abc_inheritancecCs|�|�dS)N)r)r+rrr�test_abc_inheritance]szMiscIOTest.test_abc_inheritancecCs|�t�dS)N)rrg)r+rrr�test_abc_inheritance_officialasz(MiscIOTest.test_abc_inheritance_officialc	OsPt||�}t|�}|�t��}d}t��WdQRX|�|t|jj	d��dS)Nr)
r r]ZassertWarnsr�rr�r{r(Zwarningre)r+rerr#rr*rrr�_check_warn_on_deallocfs
z!MiscIOTest._check_warn_on_dealloccCs2|jtjddd�|�tjd�|�tjd�dS)Nr�r)r�r�)rrry)r+rrr�test_warn_on_deallocnszMiscIOTest.test_warn_on_deallocc	s�g��fdd�}|�|�t��\}}�||f7�|j|f|�|�t��\}}�||f7�t�|��t|f|�ddi|��WdQRXdS)NcsRxL�D]D}yt�|�Wqtk
rH}z|jtjkr8�Wdd}~XYqXqWdS)N)r�r[rZ�errno�EBADF)rr�)�fdsrr�cleanup_fdsus
z9MiscIOTest._check_warn_on_dealloc_fd.<locals>.cleanup_fdsr�F)r�r�r�rrr1r )r+rerrrr�r)rr�_check_warn_on_dealloc_fdss
z$MiscIOTest._check_warn_on_dealloc_fdcCs&|jddd�|�d�|�d�dS)Nr�r)r�r)r)r+rrr�test_warn_on_dealloc_fd�s
z"MiscIOTest.test_warn_on_dealloc_fdcCs�x�ddiddiddd�ddiddiddd�ddidd	id	dd�g	D]J}xDttjd
�D]2}|jtjf|��}|�ttj||�WdQRXqVWqBWdS)Nr�r�r�r)r�r�rr�zw+zw+br7)	r��pickleZHIGHEST_PROTOCOLr rryr�r��dumps)r+rZprotocolr#rrr�
test_pickling�szMiscIOTest.test_picklingcCs|�d�dS)Ni@)�_test_nonblock_pipe_write)r+rrr�test_nonblock_pipe_write_bigbuf�sz*MiscIOTest.test_nonblock_pipe_write_bigbufcCs|�d�dS)Ni)r!)r+rrr�!test_nonblock_pipe_write_smallbuf�sz,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�}|���|��rx�dD]�}y@d}	x6t|	dd	g�|}
|�|
�|�|
�|	d
7}	qrWWqf|jk
�r4}zh|�|j	dt
j�|�|j	d|j�|dd|j�|d<|�|�
��d
}
|�|
�|�|
�Wdd}~XYqfXqfWx�y|��PWnj|jk
�r�}zH|�|j	dt
j�|�|j	d|j�|�|jd�|�|�
��Wdd}~XYnX�q<W|t|j
d�7}WdQRXWdQRXd�|�d�|�}}|�||�|�|j�|�|j�dS)NFr�T)r�r�r�r�)i'�Ii�r��ar7rGrqsBLOCKEDrA)r�r�r$r rr-r.rur�rerZEAGAINr�rCrU�iterrlrrY)r+r�ZsentZreceivedrr�ZrfZwfr�r�rTr�rrrr!�sL



 &$z$MiscIOTest._test_nonblock_pipe_writec	Cs2|�tjd��WdQRX|�t|jtjd�dS)Nr�r~)r rryr��FileExistsError)r+rrr�test_create_fail�s
zMiscIOTest.test_create_failc	CsR|�tjd��}|�d�WdQRX|�tjd��}|�d|���WdQRXdS)NZxbsspamr�)r rryr.r�rC)r+r#rrr�test_create_writes�szMiscIOTest.test_create_writescCs|�t|jtjd�dS)Nzrwax+)r�rsr rry)r+rrr�test_open_allargs�szMiscIOTest.test_open_allargsN)rrrr{rr
rrrrrrrrrrrr r"r#r�Z
skipUnlessr r�r!r*r+r,rrrrr�s,/
3rc@s0eZdZeZdd�Zdd�Zdd�Zdd�Zd	S)
�CMiscIOTestcCs6Gdd�d|jj�}|�}td�}|�t|j|�dS)Nc@seZdZddd�ZdS)z<CMiscIOTest.test_readinto_buffer_overflow.<locals>.BadReaderrqcSsddS)Nr�i@Br)r+r:rrrrC�szACMiscIOTest.test_readinto_buffer_overflow.<locals>.BadReader.readN)rq)rrrrCrrrr�	BadReader�sr.rG)rgr�r�r�rsr;)r+r.r_r
rrr�test_readinto_buffer_overflow�sz)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()
            z-crz�Fatal Python error: could not acquire lock for <(_io\.)?BufferedWriter name='<{stream_name}>'> at interpreter shutdown, possibly due to daemon threadsz.!)	�
format_map�localsrrvr:r�rnrri)r+Zstream_namer�r`r�rv�patternrrr�&check_daemon_threads_shutdown_deadlock�s

z2CMiscIOTest.check_daemon_threads_shutdown_deadlockcCs|�d�dS)N�stdout)r3)r+rrr�,test_daemon_threads_shutdown_stdout_deadlocksz8CMiscIOTest.test_daemon_threads_shutdown_stdout_deadlockcCs|�d�dS)Nrg)r3)r+rrr�,test_daemon_threads_shutdown_stderr_deadlock sz8CMiscIOTest.test_daemon_threads_shutdown_stderr_deadlockN)rrrrgr/r3r5r6rrrrr-�s
	(r-c@seZdZeZdS)�PyMiscIOTestN)rrrrirgrrrrr7$sr7�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�|_dS)N)�signal�SIGALRM�alarm_interrupt�oldalrm)r+rrrrz+szSignalsTest.setUpcCst�tj|j�dS)N)r:r;r=)r+rrrr{.szSignalsTest.tearDowncCsdddS)Nr7rr)r+�sig�framerrrr<1szSignalsTest.alarm_interruptc
sfg���fdd�}tj|d�}d|_t��\�}d|d<|tjt|�d}z�|jj	|f|�}t
td�r�t�tj
tjg�|��t�tjtjg�n|��t�d�z|�t|j|�Wd	t�d
�|��X��t��d��|��|d
d�|dd�g�Wd	t�|�t���y|��Wn4tk
�r^}	z|	jtjk�rN�Wd	d	}	~	XYnXXd	S)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�}��|�dS)Nr7)r�rCr-)rm)r�read_resultsrrr9sz2SignalsTest.check_interrupted_write.<locals>._read)r�TFr�r7�pthread_sigmaskNrrG)rOr��daemonr�r�r�
PIPE_MAX_SIZErrgr r r:rA�	SIG_BLOCKr;r��SIG_UNBLOCK�alarmr�r�r.rlr-rCr�r[rZrr)
r+�itemr�
fdopen_kwargsrr�r��
large_data�wior�r)rr@r�check_interrupted_write4s8



$

z#SignalsTest.check_interrupted_writecCs|jddddd�dS)Nsxyr�r)r�r�)rK)r+rrr�!test_interrupted_write_unbufferedhsz-SignalsTest.test_interrupted_write_unbufferedcCs|jdddd�dS)Nsxyr�)r�)rK)r+rrr�test_interrupted_write_bufferedksz+SignalsTest.test_interrupted_write_bufferedcCs|jddddd�dS)N�xysxyr�r�)r�r)rK)r+rrr�test_interrupted_write_textnsz'SignalsTest.test_interrupted_write_textc		s���fdd�}t�tj|�t��\}}|jj|f|��z�t�d�|�tt	f��D}x<x"t
d�D]}�������q`Wt�
|t��d�qVWWdQRX|j}t|t	�r�|�t|��d�t|��Wdt�d����t�|�XdS)Ncs����dddS)Nr7r)r.)re)rrJrr�on_alarmss
z3SignalsTest.check_reentrant_write.<locals>.on_alarmr7r�zreentrant callr)r:r;r�r�rgr rFr�r�rqr�r.rUrCrr)r�rr(r�r[)	r+rrHrPrr�r*r�r�r)rrJr�check_reentrant_writeqs$

"

z!SignalsTest.check_reentrant_writecCs|jddd�dS)Nsxyr�)r�)rQ)r+rrr�test_reentrant_write_buffered�sz)SignalsTest.test_reentrant_write_bufferedcCs|jdddd�dS)NrNr�r�)r�r)rQ)r+rrr�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�Wd	t�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.Fr�cst��d�dS)Nsbar)r�r.)r>r?)r�rr�
alarm_handler�sz?SignalsTest.check_interrupted_read_retry.<locals>.alarm_handlersfoor7r|ZfoobarNr)r�r�r:r;rgr r.rFr�rCr[)r+r:rHrrTZrior)r�r�check_interrupted_read_retry�s


z(SignalsTest.check_interrupted_read_retrycCs|jdd�dd�dS)NcSs
|�d�S)NrG)r:)r~rrrr�rAzBSignalsTest.test_interrupted_read_retry_buffered.<locals>.<lambda>r�)r�)rU)r+rrr�$test_interrupted_read_retry_buffered�s
z0SignalsTest.test_interrupted_read_retry_bufferedcCs|jdd�dd�dS)NcSs|S)Nr)r~rrrr�rAz>SignalsTest.test_interrupted_read_retry_text.<locals>.<lambda>r)r�)rU)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�tj	|�zl|j
j|f|�}t�d
�|�
|�}	|�||	�|��d����|���|�|tdd��D���Wdt�d�d�t�|�t���y|��Wn4tk
�rT}
z|
jtjk�rD�Wdd}
~
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.�selectFr�Nc
spyDx>�s@x4����gggd�dkr<t��d�}��|�q
WqWWn&tk
rj}z|�Wdd}~XYnXdS)Ng�?ri)rXr�rCr-�
BaseException)rmr�)rrr@rX�write_finishedrrr�sz8SignalsTest.check_interrupted_write_retry.<locals>._read)r�Tcst�tj��t�d�dS)Nr7)r:r;rF)r>r?)�alarm2rr�alarm1�sz9SignalsTest.check_interrupted_write_retry.<locals>.alarm1cs���dS)N)r�)r>r?)r�rrr[�sz9SignalsTest.check_interrupted_write_retry.<locals>.alarm2r7css|]}t|�VqdS)N)r)r�r~rrr�	<genexpr>�sz<SignalsTest.check_interrupted_write_retry.<locals>.<genexpr>r)r�
import_modulerCr�r�rOr�rBr:r;rgr rFr.r�rUrlr�sumr[rZrr)r+rGrHr�r�rr\rIrJr�r�r)r[rrr@rXr�rZr�check_interrupted_write_retry�sB
	





z)SignalsTest.check_interrupted_write_retrycCs|jddd�dS)Nr�r�)r�)r`)r+rrr�%test_interrupted_write_retry_buffered�sz1SignalsTest.test_interrupted_write_retry_bufferedcCs|jdddd�dS)Nr~r�rG)r�r)r`)r+rrr�!test_interrupted_write_retry_text�sz-SignalsTest.test_interrupted_write_retry_textN)rrrrzr{r<rKrLrMrOrr�rQrRrSrUrVrWr`rarbrrrrr9(s 4Dr9c@seZdZeZdS)�CSignalsTestN)rrrrgrrrrrc�srcc@seZdZeZdZdZdS)�
PySignalsTestN)rrrrirgrRrSrrrrrdsrdc
s,tttttttttt	t
ttt
ttttttf}ttttttttf}tjdg}dd�|D�}dd�|D�}t��|��fdd�|D��|��fdd�|D��t j!|d<xj|D]b}|j"�#d	�r�xP|�$�D]\}}t%|||�q�Wq�|j"�#d
�r�x |�$�D]\}}t%|||�q�Wq�Wt&�'dd�|D��}	|	S)
Nr�cSsi|]}tt|�|�qSr)r8rg)r�rKrrr�
<dictcomp>szload_tests.<locals>.<dictcomp>cSsi|]}tt|�|�qSr)r8ri)r�rKrrrresc3s"|]}|j�d|jfVqdS)rN)r)r�r~)�globsrrr] szload_tests.<locals>.<genexpr>c3s"|]}|j�d|jfVqdS)�PyN)r)r�r~)rfrrr]!sr rrgcSsg|]}t�|��qSr)r�Z	makeSuite)r�r�rrrr�,szload_tests.<locals>.<listcomp>)(rOrQrRr�r�r�r�rrr&r'rJrrr�r�r-r7rcrdr@rFr^rXrjrcr%rNrgr�globalsreri�OpenWrapperrr�r|�setattrr�Z	TestSuite)
rer�ZmocksZall_membersZc_io_nsZpy_io_nsr�rKrZsuiter)rfr�
load_tests
s:

rk�__main__)qr=r�rrrbr�rr�r:r�Z	sysconfigrOrSr�r�r�collectionsrr�	itertoolsrrr�rZtest.support.script_helperrrZtest.supportr	r*rgZ_pyiorir�ImportErrorrZ	StructurerZget_config_varZ_cflagsZ_config_argsr�r$r%r�r>r?r@rDrErFrLrMrNrVrWrXr\r]r^r�rarbrcrfrhrjrtrvZTestCaserwrOrQr�rRrYr�r�r�r�r�r�r�r�rrrr&r'r+r(�registerrHrJrNr�r�r�r�r�rrrr-r7r�rKr9rcrdrkr�mainrrrr�<module>s�
8
	
,7
( 3%0>fW+I
	3u;
V	%