Your IP : 216.73.216.213


Current Path : /proc/242857/root/opt/alt/python34/lib64/python3.4/test/__pycache__/
Upload File :
Current File : //proc/242857/root/opt/alt/python34/lib64/python3.4/test/__pycache__/test_io.cpython-34.pyc

�
f fZ�@s�dZddlZddlZddlZddlZddlZddlZddlZddlZddl	Z	ddl
Z
ddlZddlZddl
Z
ddlmZmZddlmZmZddlmZddlmZmZddlZddlZddlZyddlZWnek
rBdZYnXyddlZWnek
rmdZYnXdd�Z Gd	d
�d
�Z!Gdd�de!ej"�Z#Gd
d�de!ej"�Z$Gdd�de!�Z%Gdd�de%ej"�Z&Gdd�de%ej"�Z'Gdd�de%�Z(Gdd�de(ej"�Z)Gdd�de(ej"�Z*Gdd�de%�Z+Gdd�de+ej"�Z,Gdd �d e+ej"�Z-Gd!d"�d"�Z.Gd#d$�d$e.ej/�Z0Gd%d&�d&e.ej/�Z1Gd'd(�d(�Z2Gd)d*�d*e2ej/�Z3Gd+d,�d,e2ej/�Z4Gd-d.�d.�Z5Gd/d0�d0e5ej"�Z6Gd1d2�d2e5ej"�Z7Gd3d4�d4ej8�Z9Gd5d6�d6e9�Z:Gd7d8�d8e9�Z;Gd9d:�d:�Z<Gd;d<�d<�Z=Gd=d>�d>ej8e<�Z>Gd?d@�d@e>e=�Z?GdAdB�dBe>�Z@GdCdD�dDej8e<�ZAGdEdF�dFeAe=�ZBGdGdH�dHeA�ZCGdIdJ�dJej8�ZDGdKdL�dLeD�ZEGdMdN�dNeD�ZFGdOdP�dPe>eA�ZGGdQdR�dReGe=�ZHGdSdT�dTeG�ZIGdUdV�dVejJ�ZKejLeKjM�GdWdX�dXej8�ZNGdYdZ�dZej8�ZOGd[d\�d\eO�ZPGd]d^�d^eO�ZQGd_d`�d`ej8�ZRGdadb�dbeR�ZSGdcdd�ddeR�ZTGdedf�dfej8�ZUGdgdh�dheU�ZVGdidj�djeU�ZWejXejYdkkdl�Gdmdn�dnej8��ZZGdodp�dpeZ�Z[Gdqdr�dreZ�Z\dsdt�Z]e^dukr�ej_�ndS)vzUnit tests for the io module.�N)�deque�UserList)�cycle�count)�support)�assert_python_ok�run_python_until_endcCs)ttddd��}|jSWdQXdS)z(Get the default TextIOWrapper chunk size�r�encodingzlatin-1N)�open�__file__�_CHUNK_SIZE)�f�r�1/opt/alt/python34/lib64/python3.4/test/test_io.py�_default_chunk_size4src@s�eZdZdZfdd�Zdd�Zdd�Zdd	�Zd
d�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().cCs.t|�|_g|_d|_d|_dS)Nr)�list�_read_stack�_write_stack�_reads�_extraneous_reads)�selfZ
read_stackrrr�__init__>s		zMockRawIOWithoutRead.__init__cCs |jjt|��t|�S)N)r�append�bytes�len)r�brrr�writeDszMockRawIOWithoutRead.writecCsdS)NTr)rrrr�writableHszMockRawIOWithoutRead.writablecCsdS)N�*r)rrrr�filenoKszMockRawIOWithoutRead.filenocCsdS)NTr)rrrr�readableNszMockRawIOWithoutRead.readablecCsdS)NTr)rrrr�seekableQszMockRawIOWithoutRead.seekablecCsdS)Nrr)r�pos�whencerrr�seekTszMockRawIOWithoutRead.seekcCsdS)Nrr)rrrr�tellWszMockRawIOWithoutRead.tellcCs�|jd7_t|�}y|jd}Wn%tk
rS|jd7_dSYnX|dkrn|jd=dSt|�}t|�|kr�|jd=||d|�<|S|d|�|dd�<||d�|jd<|SdS)N�r)rrr�
IndexErrorr)r�bufZmax_len�data�nrrr�readintoZs$
	

zMockRawIOWithoutRead.readintoNcCs|S)Nr)rr$rrr�truncateoszMockRawIOWithoutRead.truncate)�__name__�
__module__�__qualname__�__doc__rrrr!r"r#r&r'r-r.rrrrr:src@seZdZdS)�CMockRawIOWithoutReadN)r/r0r1rrrrr3rsr3c@seZdZdS)�PyMockRawIOWithoutReadN)r/r0r1rrrrr4usr4c@seZdZddd�ZdS)�	MockRawIONc	CsE|jd7_y|jjd�SWn|jd7_dSYnXdS)Nr(r�)rr�popr)rr,rrr�read{szMockRawIO.read)r/r0r1r8rrrrr5ysr5c@seZdZdS)�
CMockRawION)r/r0r1rrrrr9�sr9c@seZdZdS)�PyMockRawION)r/r0r1rrrrr:�sr:csaeZdZ�fdd�Zd�fdd�Zdd�Zdd	�Z�fd
d�Z�S)�MisbehavedRawIOcst�j|�dS)N�)�superr)rr)�	__class__rrr�szMisbehavedRawIO.writeNcst�j|�dS)Nr<)r=r8)rr,)r>rrr8�szMisbehavedRawIO.readcCsdS)N�{i����r)rr$r%rrrr&�szMisbehavedRawIO.seekcCsdS)Ni�i8���r)rrrrr'�szMisbehavedRawIO.tellcst�j|�t|�dS)N�)r=r-r)rr*)r>rrr-�szMisbehavedRawIO.readinto)r/r0r1rr8r&r'r-rr)r>rr;�s
r;c@seZdZdS)�CMisbehavedRawION)r/r0r1rrrrrA�srAc@seZdZdS)�PyMisbehavedRawION)r/r0r1rrrrrB�srBc@s"eZdZdZdd�ZdS)�CloseFailureIOrcCs|jsd|_t�ndS)Nr()�closed�OSError)rrrr�close�s		zCloseFailureIO.closeN)r/r0r1rDrFrrrrrC�srCc@seZdZdS)�CCloseFailureION)r/r0r1rrrrrG�srGc@seZdZdS)�PyCloseFailureION)r/r0r1rrrrrH�srHcsIeZdZ�fdd�Zd�fdd�Z�fdd�Z�S)�
MockFileIOcsg|_t�j|�dS)N)�read_historyr=r)rr+)r>rrr�s	zMockFileIO.__init__Ncs>t�j|�}|jj|dkr-dn	t|��|S)N)r=r8rJrr)rr,�res)r>rrr8�s(zMockFileIO.readcs&t�j|�}|jj|�|S)N)r=r-rJr)rrrK)r>rrr-�szMockFileIO.readinto)r/r0r1rr8r-rr)r>rrI�srIc@seZdZdS)�CMockFileION)r/r0r1rrrrrL�srLc@seZdZdS)�PyMockFileION)r/r0r1rrrrrM�srMc@s4eZdZdd�Zdd�Zdd�ZdS)�MockUnseekableIOcCsdS)NFr)rrrrr#�szMockUnseekableIO.seekablecGs|jd��dS)Nznot seekable)�UnsupportedOperation)r�argsrrrr&�szMockUnseekableIO.seekcGs|jd��dS)Nznot seekable)rO)rrPrrrr'�szMockUnseekableIO.tellN)r/r0r1r#r&r'rrrrrN�srNc@seZdZejZdS)�CMockUnseekableION)r/r0r1�iorOrrrrrQ�srQc@seZdZejZdS)�PyMockUnseekableION)r/r0r1�pyiorOrrrrrS�srSc@sdeZdZdd�Zdd�Zdd�Zdd�Zd	d
�Zdd�Zd
d�Z	dS)�MockNonBlockWriterIOcCsg|_d|_dS)N)r�
_blocker_char)rrrrr�s	zMockNonBlockWriterIO.__init__cCs)dj|j�}g|jdd�<|S)Nr6)�joinr)r�srrr�pop_written�sz MockNonBlockWriterIO.pop_writtencCs
||_dS)z'Block when a given char is encountered.N)rV)r�charrrr�block_on�szMockNonBlockWriterIO.block_oncCsdS)NTr)rrrrr"�szMockNonBlockWriterIO.readablecCsdS)NTr)rrrrr#�szMockNonBlockWriterIO.seekablecCsdS)NTr)rrrrr�szMockNonBlockWriterIO.writablecCs�t|�}d}|jr�y|j|j�}Wntk
rEYq�X|dkrp|jj|d|��|Sd|_dSn|jj|�t|�S)Nr(r���)rrV�index�
ValueErrorrrr)rrr,rrrr�s	
	zMockNonBlockWriterIO.writeN)
r/r0r1rrYr[r"r#rrrrrrrU�srUc@seZdZejZdS)�CMockNonBlockWriterION)r/r0r1rR�BlockingIOErrorrrrrr_sr_c@seZdZejZdS)�PyMockNonBlockWriterION)r/r0r1rTr`rrrrrasrac@s�eZdZdd�Zdd�Zdd�Zddd	�ZdOZdd
�Zdd�Z	dd�Z
dd�Zdd�Zdd�Z
dd�Zdd�Zdd�Zdd�Zd d!�Zd"d#�Zd$d%�Zd&d'�Zd(d)�Zd*d+�Zd,d-�Zd.d/�Zd0d1�Zd2d3�Zd4d5�Zd6d7�Zd8d9�Zd:d;�Zd<d=�Z d>d?�Z!d@dA�Z"dBdC�Z#dDdE�Z$dFdG�Z%dHdI�Z&dJdK�Z'dLdM�Z(dNS)P�IOTestcCstjtj�dS)N)r�unlink�TESTFN)rrrr�setUpszIOTest.setUpcCstjtj�dS)N)rrcrd)rrrr�tearDownszIOTest.tearDowncCs�|j|jd�d�|jd�|j|j�d�|jd�|j|jd�d�|j|jd�d�|j|jd�d�|j|j�d�|j|jdd�d�|j|j�d�|j|jtd��d�|j|jd�d�|j|jd	�d�|j|jdd
�d�|j|j�d�|j|jd�d�|j|j�d�|jt|jd
�dS)Nsblah.r@rsHello.�r(s	 world


�	�hr<�
�gr\r\)�assertEqualrr.r'r&�	bytearray�assertRaises�	TypeError)rrrrr�	write_opss$

zIOTest.write_opsFcCs;|jd�}|j|d�t|�}|j|j|�d�|j|d�|j|j|�d�|jt|�d�|j|dd�d�|j|jd�d�|j|jd�d�|j|jd	�d
�|j|jtd��d�|j|jdd�d�|j|jd�d
�|j|jd�d
�|j|jt��d�|j|jdd	�d�|j|jd�d�|j|j�d�|jt|jd�|r7|jd�|j|j�d�|jd�|j|j�d�|j|j�d
�ndS)Nr@shellos worlr<sd
r�shello world
r(r6�xrgsworld�
gsworld
i����i����)	r8rlrmr-rr&r'rnro)rrZbufferedr+rrr�read_ops*s4

zIOTest.read_opsr<�cCs�|j�st�|j�s$t�|j|j|j�|j�|j|j�|j�|j|jd�d�|j|j�|jd�|j|jdd�|jd�|j|j�|jd�|j|j�|jd�|j|jdd�|jd�|j|j|jd�|jd�|j|j�|jd�|j|jdd�|jd�|j|jdd�|j�|j|j	d�d�dS)	Nsxxx�r(r<rrrr\r\)
r"�AssertionErrorrrlr&�LARGEr'rr.r8)rrrrr�large_file_opsHs##'#zIOTest.large_file_opscCs�|j}xRdD]J}|jtj|��-}|j||j�|j||j�WdQXqW|jtjddd��-}|j||j�|j||j�WdQX|jtjddd��6}|j||jd�|j||jdg�WdQX|jtjd��6}|j||jd�|j||jdg�WdQX|jtjd��n}|j||jd	�|j||jd
g�|j||j	d|j
�|j||j	d
|j�WdQXdS)N�w�wb�	bufferingr�rbsblahsblah
r	Zblahzblah
r()rzzwbr\)rOrrrdrnr8�readliner�
writelinesr&�SEEK_CUR�SEEK_END)r�exc�mode�fprrr�test_invalid_operationsYs&	
zIOTest.test_invalid_operationscCsEd}|jt|j|d�|jt|jt|d�d�dS)NZfoobarrz�ascii)rnrorr)rZfn_with_NULrrr�test_open_handles_NUL_charspsz"IOTest.test_open_handles_NUL_charscCs�|jtjddd��V}|j|j�d�|j|j�d�|j|j�d�|j|�WdQX|jtjddd��V}|j|j�d�|j|j�d�|j|j�d�|j|�WdQXdS)Nr{r|rFTr})	rrrdrlr"rr#rprt)rrrrr�test_raw_file_iouszIOTest.test_raw_file_iocCs�|jtjd��V}|j|j�d�|j|j�d�|j|j�d�|j|�WdQX|jtjd��Y}|j|j�d�|j|j�d�|j|j�d�|j|d�WdQXdS)Nr{FTr})	rrrdrlr"rr#rprt)rrrrr�test_buffered_file_io�szIOTest.test_buffered_file_iocCs'|jtjd��}|jd�WdQX|jtjd���}|j|j�d�|j|jd�d�|j|jd�d�|j|jd	�d
�|j|j�d�|j|jd�d�|jt|jd
�WdQX|jtjd��}|jt|jd
�WdQXdS)Nr{s"abc
def
xyzzy
foobar
another liner}sabc
rssdef
r<sxy�szzy
sfoobar
sanother lineg333333@r	)rrrdrrlr~rnro)rrrrr�
test_readline�szIOTest.test_readlinecCsX|j�}|j|�|j�}|j|d�|j|�}|j|d�dS)Nshello world
T)�BytesIOrp�getvaluerlrt)rrr+rrr�test_raw_bytes_io�s
zIOTest.test_raw_bytes_iocCs�tjdd�dks(tjdkrBtjdd|j�n|jtjdd��}|j|�WdQX|jtjd��}|j|�WdQXdS)Nrv�win�darwinZ	largefilez-test requires %s bytes and a long time to runzw+br)�sys�platformrZrequiresrxrrdry)rrrrr�test_large_file_ops�s(zIOTest.test_large_file_opscCs�x�dD]�}d}|jtjd|��}|jd�WdQX|j|jd�d}y-|jtjd|��}ddWdQXWn%tk
r�|j|jd�YqX|jd�qWdS)	Nrr(�dr{sxxxTz1/0 didn't raise an exception)rr(r�)rrrdrrlrD�ZeroDivisionError�fail)r�bufsizerrrr�test_with_open�s

zIOTest.test_with_opencCs�|jtjd��}|jd�WdQX|jtjddd��}|j|j�d�WdQX|jtjd��}|j|j�d�WdQX|jtjd��}|j|j�d�WdQXdS)Nr{sxxx�abr|rrv�a)rrrdrrlr'Z
assertGreater)rrrrr�test_append_mode_tell�szIOTest.test_append_mode_tellcs�g�G�fdd�d|j�}tjdtf��~|tjd�}|jd�~tj�|j�dddg�|jtjd	��}|j|j	�d�WdQXWdQXdS)
NcsOeZdZ��fdd�Z��fdd�Z��fdd�Z�S)z(IOTest.test_destructor.<locals>.MyFileIOcs=�jd�yt�j}Wntk
r1YnX|�dS)Nr()rr=�__del__�AttributeError)rr)r>�recordrrr��s

z0IOTest.test_destructor.<locals>.MyFileIO.__del__cs�jd�t�j�dS)Nr<)rr=rF)r)r>r�rrrF�s
z.IOTest.test_destructor.<locals>.MyFileIO.closecs�jd�t�j�dS)Nrv)rr=�flush)r)r>r�rrr��s
z.IOTest.test_destructor.<locals>.MyFileIO.flush)r/r0r1r�rFr�r)r�)r>r�MyFileIO�sr��r{sxxxr(r<rvr})
�FileIOr�check_warnings�ResourceWarningrdr�
gc_collectrlrr8)rr�rr)r�r�test_destructor�s

zIOTest.test_destructorcsUg�G�fdd�d|�}|�}~tj�|j�dddg�dS)Ncs[eZdZdd�Z��fdd�Z��fdd�Z��fdd�Z�S)	z+IOTest._check_base_destructor.<locals>.MyIOcSsd|_d|_d|_dS)Nr(r<rv)�on_del�on_close�on_flush)rrrrr�s		z4IOTest._check_base_destructor.<locals>.MyIO.__init__cs@�j|j�yt�j}Wntk
r4YnX|�dS)N)rr�r=r�r�)rr)r>r�rrr��s
z3IOTest._check_base_destructor.<locals>.MyIO.__del__cs!�j|j�t�j�dS)N)rr�r=rF)r)r>r�rrrF�sz1IOTest._check_base_destructor.<locals>.MyIO.closecs!�j|j�t�j�dS)N)rr�r=r�)r)r>r�rrr��sz1IOTest._check_base_destructor.<locals>.MyIO.flush)r/r0r1rr�rFr�r)r�)r>r�MyIO�sr�r(r<rv)rr�rl)r�baser�rr)r�r�_check_base_destructor�s	
zIOTest._check_base_destructorcCs|j|j�dS)N)r��IOBase)rrrr�test_IOBase_destructorszIOTest.test_IOBase_destructorcCs|j|j�dS)N)r��	RawIOBase)rrrr�test_RawIOBase_destructorsz IOTest.test_RawIOBase_destructorcCs|j|j�dS)N)r��BufferedIOBase)rrrr�test_BufferedIOBase_destructorsz%IOTest.test_BufferedIOBase_destructorcCs|j|j�dS)N)r��
TextIOBase)rrrr�test_TextIOBase_destructorsz!IOTest.test_TextIOBase_destructorcCsc|jtjd��}|jd�WdQX|jtjd��}|j|j�d�WdQXdS)Nr{sxxxr})rrrdrrlr8)rrrrr�test_close_flushesszIOTest.test_close_flushescCs�tjdtd��}t|j��}|jtjdd�� }|j|j|�|�WdQX|jtjd�� }|j|j|�|�WdQXdS)N�irsr{r)	�array�ranger�tobytesrrrdrlr)rr�r,rrrr�test_array_writesszIOTest.test_array_writescCs&|jt|jtjddd�dS)Nrz�closefdF)rnr^rrrd)rrrr�test_closefdszIOTest.test_closefdcCs�|jtjd��}|jd�WdQX|jtjd��e}|j|j�ddd�}|j|j�d�|jd�|j�|j	t
|j�WdQXdS)Nrzzegg
r	r�Fr)rrrdrr!rlr8r&rFrnr^)rr�filerrr�test_read_closed s

zIOTest.test_read_closedcCs&|jt|jtjddd�dS)Nr	r�F)rnr^rrrd)rrrr�test_no_closefd_with_filename*sz$IOTest.test_no_closefd_with_filenamecCs�|jtjd��}|jd�WdQX|jtjd��W}|j|jjjd�|j|j�ddd�}|j|jjjd�WdQXdS)Nr{segg
r	Tr�F)	rrrdrrl�buffer�rawr�r!)rrr�rrr�test_closefd_attr.szIOTest.test_closefd_attrcCs�tjdtf��L|jtjd�}|jd�||_tj|�}~tj	�WdQX|j
|�|�|jtjd��}|j|j
�d�WdQXdS)Nr�r{sabcxxxr})rr�r�r�rdrr�weakref�refr��assertIsNonerrlr8)rr�wrrrr�test_garbage_collection6s
	zIOTest.test_garbage_collectioncCsd}tjj|�s1|jdj|��ntjdkrP|jd�ntjtj	krr|jd�n|j
|ddd��}|jt|j
�WdQX|j
|d��}|jt|j
�WdQX|j
|d	��}|jt|j
�WdQXdS)
Nz	/dev/zeroz{0} does not existi���z+test can only run in a 32-bit address spacez$test requires at least 2GB of memoryr}r|rr	)�os�path�existsZskipTest�formatr��maxsizerZreal_max_memuseZ_2Grrn�
OverflowErrorr8)rZzerorrrr�test_unbounded_fileDszIOTest.test_unbounded_filecs�|j||��g���fdd�}|�_|jt�j�|j�j�|j��|j�d�dd��_dS)Ncs#�jg�dd�<t��dS)N)rDrEr)rDrrr�	bad_flushYsz4IOTest.check_flush_error_on_close.<locals>.bad_flushrcSsdS)Nrrrrr�<lambda>asz3IOTest.check_flush_error_on_close.<locals>.<lambda>)rr�rnrErF�
assertTruerD�assertFalse)rrP�kwargsr�r)rDrr�check_flush_error_on_closeTs	
z!IOTest.check_flush_error_on_closecCs�|jtjddd�tjtjtjtjB�}|j|ddd�tjtjtjtjB�}|j|ddddd�tj|�|jtjd�tjtjtjtjB�}|j|d�tjtjtjtjB�}|j|ddd�tj|�|jtjd�tjtjtjtjB�}|j|d�tjtjtjtjB�}|j|ddd�tj|�dS)Nr{r|rr�Frz)r�rrdr�r�O_WRONLY�O_CREATrF)r�fdrrr�test_flush_error_on_closecs$

z IOTest.test_flush_error_on_closecCsP|jtjddd�}|j�|j�|j�|jt|j�dS)Nr{r|r)rrrdrFrnr^r�)rrrrr�test_multi_close{s



zIOTest.test_multi_closecCs�|jd
�}|j|jd�d�|j|jd�d�|j|jd�d�|j|jd�d�|j|jd�d�|j|jd�d�|j|jd�d�|j|jd�d	�dS)N�abc�d�efgr<sab�csef�gr6)r�r�Nr�N)rrlr8)r�rawiorrr�test_RawIOBase_read�szIOTest.test_RawIOBase_readcCs^|j�|j�|j�|j�|j�f}x$|D]}|jt|d��q:WdS)N�__dict__)r�r�r��StringIOr�r��hasattr)r�test�objrrr�test_types_have_dict�s				
zIOTest.test_types_have_dictcs�|jtjd��}|jd�WdQXtjtjtj���fdd�}|jddd|��}|j|j�d�WdQXdS)Nrzzegg
cs�S)Nr)r��flags)r�rr�opener�sz"IOTest.test_opener.<locals>.openerznon-existentr	r�)rrrdrr��O_RDONLYrlr8)rrr�r)r�r�test_opener�szIOTest.test_openercCs�|jtd��t}|jtd��Y}|j|j�dd�}|j|j�dd�|j�|j�|j�WdQXWdQXdS)Nr}r�F)rrr�r!rr~rF)r�f1�f2Zfileiorrr�test_fileio_closefd�s

zIOTest.test_fileio_closefdcCshtjdd��@}|jt��|jtjddd�WdQXtj�WdQX|j|g�dS)Nr�Trzr|r)	�warnings�catch_warningsrnr^rrrdr�rl)r�recordedrrr�test_nonbuffered_textio�s
zIOTest.test_nonbuffered_textiocCshtjdd��@}|jt��|jtjddd�WdQXtj�WdQX|j|g�dS)Nr�Trz�newlineZinvalid)	r�r�rnr^rrrdr�rl)rr�rrr�test_invalid_newline�s
zIOTest.test_invalid_newlineNl))r/r0r1rerfrprtrxryr�r�r�r�r�r�r�r�r�r�r�r�r�r�r�r�r�r�r�r�r�r�r�r�r�r�r�r�r�r�r�r�rrrrrbsL



	rbc@seZdZdd�ZdS)�CIOTestcCshGdd�d|j�}|�|�}||_tj|�}~~tj�|j|�|�dS)Nc@seZdZdd�ZdS)z*CIOTest.test_IOBase_finalize.<locals>.MyIOcSsdS)Nr)rrrrrF�sz0CIOTest.test_IOBase_finalize.<locals>.MyIO.closeN)r/r0r1rFrrrrr��sr�)r�r�r�r�rr�r�)rr�r�r�rrr�test_IOBase_finalize�s		
zCIOTest.test_IOBase_finalizeN)r/r0r1r�rrrrr��sr�c@seZdZdS)�PyIOTestN)r/r0r1rrrrr��sr�c@s�eZdZdd�Zdd�Zejd�dd��Zdd	�Zd
d�Z	dd
�Z
dd�Zdd�Zdd�Z
dd�Zdd�Zdd�Zdd�Zdd�ZdS)�CommonBufferedTestscCsR|j�}|j|�}|j|j�|�|jt|j�t|�dS)N)r5�tp�assertIs�detachrnr^�repr)rr�r*rrr�test_detach�s
zCommonBufferedTests.test_detachcCs5|j�}|j|�}|jd|j��dS)Nr )r5r�rlr!)rr��bufiorrr�test_fileno�szCommonBufferedTests.test_filenoztest having existential crisiscCsdS)Nr)rrrr�test_no_fileno�sz"CommonBufferedTests.test_no_filenocCsQ|j�}|j|�}|jt|jdd�|jt|jdd�dS)Nrr(rhr\)r5r�rnr^r&)rr�r�rrr�test_invalid_args�sz%CommonBufferedTests.test_invalid_argscs�|j}g�G�fdd�d|�}|j�}||�}|j�}~tj�|r~|j�dddg�n|j�ddg�dS)NcsOeZdZ��fdd�Z��fdd�Z��fdd�Z�S)zBCommonBufferedTests.test_override_destructor.<locals>.MyBufferedIOcs=�jd�yt�j}Wntk
r1YnX|�dS)Nr()rr=r�r�)rr)r>r�rrr��s

zJCommonBufferedTests.test_override_destructor.<locals>.MyBufferedIO.__del__cs�jd�t�j�dS)Nr<)rr=rF)r)r>r�rrrFs
zHCommonBufferedTests.test_override_destructor.<locals>.MyBufferedIO.closecs�jd�t�j�dS)Nrv)rr=r�)r)r>r�rrr�s
zHCommonBufferedTests.test_override_destructor.<locals>.MyBufferedIO.flush)r/r0r1r�rFr�r)r�)r>r�MyBufferedIO�srr(r<rv)r�r5rrr�rl)rr�rr�r�rr)r�r�test_override_destructor�s	
z,CommonBufferedTests.test_override_destructorcsH|j�}|j|���fdd�}|�|jt|�dS)Ncs��WdQXdS)Nrr)r�rr�_withsz7CommonBufferedTests.test_context_manager.<locals>._with)r5r�rnr^)rr�rr)r�r�test_context_managers
z(CommonBufferedTests.test_context_managerc
s��j����fdd�}tjd��}�jt|�WdQX|j�j�}|r��jt|j	��d��j
|jd�|��j
|jd�|�ndS)Ncs�j��jdS)N)r��xyzzyr)r�rrrr sz<CommonBufferedTests.test_error_through_destructor.<locals>.f�stderrr(zException OSError: z ignored)
rCr�captured_outputrnr�r��striprlr�
splitlinesr��
startswith�endswith)rrrXr)r�rr�test_error_through_destructorsz1CommonBufferedTests.test_error_through_destructorcCs�|j�}|j|�}d|jj|jjf}|jt|�d|�d|_|jt|�d|�d|_|jt|�d|�dS)Nz%s.%sz<%s>�dummyz<%s name='dummy'>sdummyz<%s name=b'dummy'>)r5r�r0r/rlr��name)rr�rZclsnamerrr�	test_repr+s		zCommonBufferedTests.test_reprcs�|j��g����fdd�}|�_|j���|jt�j�|j�j�|j�j�|j��|j�d�|j�d�dd��_dS)Ncs)�j�jg�dd�<t��dS)N)rDrEr)rrDr�rrr�:sz@CommonBufferedTests.test_flush_error_on_close.<locals>.bad_flushrr(cSsdS)Nrrrrrr�Esz?CommonBufferedTests.test_flush_error_on_close.<locals>.<lambda>)	r5r�r�rnrErFr�rDr�)rr�r)rrDr�rr�5s	
z-CommonBufferedTests.test_flush_error_on_closec	Cs�|j�}dd�}dd�}||_|j|�}||_|jt��}|j�WdQX|j|jjd�|j	|jj
t�|j|jj
jd�|j|j�dS)	NcSstd��dS)Nr�)rErrrrr�Isz@CommonBufferedTests.test_close_error_on_close.<locals>.bad_flushcSstd��dS)NrF)rErrrr�	bad_closeKsz@CommonBufferedTests.test_close_error_on_close.<locals>.bad_closerFr�)zclose)zflush)
r5rFr�r�rnrErl�	exceptionrP�assertIsInstance�__context__r�rD)rr�r�rr�errrrr�test_close_error_on_closeGs		z-CommonBufferedTests.test_close_error_on_closec
Cs�|j�}dd�}dd�}||_|j|�}||_|jt��}|j�WdQX|jdt|j��|j	|jj
t�|jdt|jj
��|j|j�dS)NcSs
t�dS)N)�non_existing_flushrrrrr�ZszNCommonBufferedTests.test_nonnormalized_close_error_on_close.<locals>.bad_flushcSs
t�dS)N)�non_existing_closerrrrr\szNCommonBufferedTests.test_nonnormalized_close_error_on_close.<locals>.bad_closerr)
r5rFr�r�rn�	NameError�assertIn�strrrrr�rD)rr�r�rrrrrr�'test_nonnormalized_close_error_on_closeWs		z;CommonBufferedTests.test_nonnormalized_close_error_on_closecCsP|j�}|j|�}|j�|j�|j�|jt|j�dS)N)r5r�rFrnr^r�)rr�rrrrr�hs


z$CommonBufferedTests.test_multi_closecCsK|j|jd��}|j|j|j�|j|j|jd�dS)N�Arsrs
AAAAAAAAAA)r�rNrnrOr'r&)rr�rrr�test_unseekablepsz#CommonBufferedTests.test_unseekablec	CsJ|j�}|j|�}|j�}|jt��||_WdQXdS)N)r5r�rnr�r�)rr�r*�xrrr�test_readonly_attributesus
z,CommonBufferedTests.test_readonly_attributesN)r/r0r1r�r��unittest�skipr�rrrrrr�rrr�rrrrrrr��s
r�c@s:eZdZejdd��Zejdd��ZdS)�
SizeofTestcCs�d}d}|j�}|j|d|�}tj|�|}|j�}|j|d|�}|jtj|�||�dS)Nii �buffer_size)r5r�r��	getsizeofrl)rZbufsize1Zbufsize2r�r��sizerrr�test_sizeofszSizeofTest.test_sizeofcCsad}|j�}|j|d|�}tj|�|}|j�|jtj|�|�dS)Nir#)r5r�r�r$rFrl)rr�r�r�r%rrr�test_buffer_freeing�s
zSizeofTest.test_buffer_freeingN)r/r0r1r�cpython_onlyr&r'rrrrr"}sr"c@s�eZdZdZdd�Zdd�Zdd�Zdd	�Zd
d�Zdd
�Z	dd�Z
dd�Zdd�Zdd�Z
ejed�ejd�dd���Zdd�Zdd�Zdd�Zd d!�Zd"S)#�BufferedReaderTestr}cCs�|jdg�}|j|�}|j|�|j|dd�|j|dd�|jd|j��|jt|j|dd�|jt|j|dd�|jt|j|dd�|jdg�}|j|�|jd|j��dS)	Nsabcr#i�rr(i�r\)r5r�rrlr8rnr^)rr�r�rrr�test_constructor�s

z#BufferedReaderTest.test_constructorcCs||jj|j�}~|jj|j�}|jttfd|jd�|j|j��|j|jd�d�dS)Nzuninitialized|has no attributerr6)	r��__new__�assertRaisesRegexr^r�r8rr5rl)rr�rrr�test_uninitialized�s
z%BufferedReaderTest.test_uninitializedcCsbxEdD]=}|jd�}|j|�}|jd|j|��qW|jt|jd	�dS)
N��abcr��efgsabcdefgr<)Nr/)r0r�r1���)r5r�rlr8rnr^)r�argr�r�rrr�	test_read�s

zBufferedReaderTest.test_readcCs-|jd
�}|j|�}|jd|jd��|jd|jd��|j|jd�|jd|jd��|j|jd�|jd|jd��|j|jd	�|jd|jd��|j|jd
�|jd|jd��|j|jd�|jt|jd�dS)N�abcr��efg�ar(�br�r�r<rvr6r�)r5r�r6r\)r5r�rlr8�read1rrnr^)rr�r�rrr�
test_read1�szBufferedReaderTest.test_read1cCsk|jd�}|j|�}td�}|j|j|�d�|j|d�|j|j|�d�|j|d�|j|j|�d�|j|d�|j|j|�d�|j|d	�|j|j|�d
�|j|d	�|jd
�}|j|�}|j|j|�d�|j|d�|j|j|�d�|j|d�dS)N�abcr��efgr<sabscdsefr(sgfrscb)r;r�r<)r;N)r5r�rmrlr-)rr�r�rrrr�
test_readinto�s&z BufferedReaderTest.test_readintocs�fdd�}�j|�j�dddg��j|�jd�ddg��j|�jd�dddg�dS)Ncs�jd�}�j|�S)N�abc
�d
�ef)r>r?r@)r5r�)r�)rrrr��sz0BufferedReaderTest.test_readlines.<locals>.bufiosabc
sd
sefr@)rl�	readlines)rr�r)rr�test_readlines�s""z!BufferedReaderTest.test_readlinescCsd}t|�}dddddg|dggddddg|ggdddddgdddggg}x�|D]�\}}}|j|�}|j|d	|�}d}	x?|D]7}
|j|j|
�||	|	|
��|	|
7}	q�W|j|j|�qvWdS)
Ns	abcdefghir�rvr(r��rr<r#)rrIr�rlr8rJ)rr+Zdlen�testsr�Zbuf_read_sizesZraw_read_sizesr�r�r$�nbytesrrr�test_buffering�s'
'z!BufferedReaderTest.test_bufferingcCs�|jd�}|j|�}|jd|jd��|jd|jd��|jd|j��|jd	|jd��|j|j��|jd	|j��|jd�}|jd
|j��|j|j��dS)
N�abcr��efgsabcdrg�er(sfgr6r7)rGr�NrHNNN)r7NN)r5r�rlr8�peekr��readall)rr�r�rrr�test_read_non_blocking�sz)BufferedReaderTest.test_read_non_blockingcCs;|jd�}|j|�}|jd|jd��dS)N�abcr��efgsabcdefgi(#)rMr�rN)r5r�rlr8)rr�r�rrr�test_read_past_eofsz%BufferedReaderTest.test_read_past_eofcCs8|jd�}|j|�}|jd|j��dS)N�abcr��efgsabcdefg)rPr�rQ)r5r�rlr8)rr�r�rrr�
test_read_all
sz BufferedReaderTest.test_read_allz!Threading required for this test.�cpucs�zqd}ttd��|}tj|�tt|��}|jtjd����j	|�WdQX|jtj|j
dd���}|j|d��g�g����fdd���fd	d
�td�D�}tj|��t
jd�WdQX|j�d
��dj��}xBtd�D]4}tt|g��}|j|j|�|�q2WWdQXWdtjtj�XdS)Ni��r{r|rrCcs�yGx@tddg�D],}�j|�}|s5Pn�j|�qWWn5tk
r~}z�j|��WYdd}~XnXdS)Nr(�)rr8r�	Exception)r,rX�e)r��errors�resultsrrr$s
z*BufferedReaderTest.test_threads.<locals>.fcs"g|]}tjd���qS)�target)�	threading�Thread)�.0r)rrr�
<listcomp>0s	z3BufferedReaderTest.test_threads.<locals>.<listcomp>rqg{�G�z�?z(the following exceptions were caught: %rr6)rr��randomZshufflerrmrrrdr�	read_moder��
start_threads�time�sleepr�rWrlrrc)r�N�lrXr��threadsr��cr)r�rXrrYr�test_threadss,
!	'zBufferedReaderTest.test_threadscCs�|j|jd��}|j|j|j�|j|j|jd�|jd�|j|j|jd�|j|j|j�dS)Nrrsrr(s
AAAAAAAAAA)r�rNrnrOr'r&r8)rr�rrrr<s
z"BufferedReaderTest.test_unseekablecCsK|jd�}|j|�}|jt|jd�|jt|j�dS)N�abcr��efgr)rir�rj)r;r�rnrEr&r')rr�r�rrr�test_misbehaved_ioDsz%BufferedReaderTest.test_misbehaved_iocCsd}xd|d||d|dfD]�}|jd|g�}|j||�}|j|j|�d|�|j|jddj||j��|jd|ddg�}|j||�}|j|j|�d|�|j|jddj||j��q(WdS)Nr*r<r(rrrzfailed for {}: {} != 0)r5r�rlr8rr�)rr�r,r�r�rrr�test_no_extraneous_readJs(z*BufferedReaderTest.test_no_extraneous_readcCs\tjtjd��}|jd�|j�|jt|j�|jt|jd�dS)Ns12r()	rR�BufferedReaderr�r8rFrnr^rJr9)rrrrr�test_read_on_closed^s


z&BufferedReaderTest.test_read_on_closedN)r/r0r1r`r+r.r4r:r=rBrFrLrOrRr �
skipUnlessr[r�requires_resourcerhrrkrlrnrrrrr)�s"
(r)c@sUeZdZejZdd�Zdd�Zdd�Zdd�Z	d	d
�Z
dS)�CBufferedReaderTestcCsctj|�tjdkr_|j�}|j|�}|jttt	f|j
|tj�ndS)Ni���)r)r+r�r�r5r�rnr��MemoryErrorr^r)rr�r�rrrr+js
z$CBufferedReaderTest.test_constructorcCs�|jdg�}|j|�}|jt|j|dd�|jt|j�|jt|j|dd�|jt|j�|jt|j|dd�|jt|j�dS)Nsabcr#rr*r(i�r\)r5r�rnr^rr8)rr�r�rrr�test_initializationtsz'CBufferedReaderTest.test_initializationcCs8|jd�}|j|�}|jt|jd�dS)N�abcr��efgrs)rtr�ru)r;r�rnrEr8)rr�r�rrr�test_misbehaved_io_read~sz+CBufferedReaderTest.test_misbehaved_io_readc
Cs|tjdtf��N|jtjd�}|j|�}||_tj|�}~tj	�WdQX|j
|�|�dS)Nr�zw+b)rr�r�r�rdr�rr�r�r�r�)rr�rr�rrrr��s	z+CBufferedReaderTest.test_garbage_collectioncCs9|jtd��!|jtj�ddd�WdQXdS)Nrmi)r-ror�rRr�)rrrr�test_args_error�sz#CBufferedReaderTest.test_args_errorN)r/r0r1rRrmr�r+rsrvr�rwrrrrrqgs	

rqc@seZdZejZdS)�PyBufferedReaderTestN)r/r0r1rTrmr�rrrrrx�srxc@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%�Zejed&�ejd'�d(d)���Zd*d+�Zd,d-�Zd.d/�Zd0S)1�BufferedWriterTestr{cCs|j�}|j|�}|j|�|j|dd�|j|dd�|jd|jd��|j�|jt|j|dd�|jt|j|dd�|jt|j|dd�|j|�|jd|jd��|j�|jd	j|j	�d
�dS)
Nr#ir*rvsabcrr(sghir6sabcghii�r\)
r5r�rrlrr�rnr^rWr)rr�r�rrrr+�s



z#BufferedWriterTest.test_constructorcCs||jj|j�}~|jj|j�}|jttfd|jd�|j|j��|j|jd�d�dS)Nzuninitialized|has no attributer6r)	r�r,r-r^r�rrr5rl)rr�rrrr.�s
z%BufferedWriterTest.test_uninitializedcCs\|j�}|j|�}|jd�|j|j�|j�|j|jdg�dS)Nshowdy!)r5r�rr�rr�rl)rr�r*rrr�test_detach_flush�s

z$BufferedWriterTest.test_detach_flushcCs?|j�}|j|d�}|jd�|j|j�dS)NrCsabc)r5r�rr�r)r�writerr�rrr�
test_write�s
zBufferedWriterTest.test_writecCs�|j�}|j|d�}d}x;tdt|�d�D]!}|j|||d��q=Wdj|j�}|j|j|dd��|�dS)NrCsabcdefghijklmnoprrvr6i����)	r5r�r�rrrWrr�r
)rr{r��contentsr,Zflushedrrr�test_write_overflow�sz&BufferedWriterTest.test_write_overflowc	Cs�ttd��d}d}|j�}|j|d�}dd�}|�}xp|t|�kr�tt|�t|�|�}|j|j||||��|�||�||7}qRW|j	�|j|dj
|j��dS)NrTi�rrjcss7x0td�D]"}xtd�D]}|Vq Wq
WdS)Nr(�)rr�)r%r�rrr�	gen_sizes�sz2BufferedWriterTest.check_writes.<locals>.gen_sizesr6)rr�r5r�r�min�nextrlrr�rWr)	rZintermediate_funcr}r,r{r�r��sizesr%rrr�check_writes�s	'

zBufferedWriterTest.check_writescCs|jdd��dS)NcSsdS)Nr)r�rrrr��sz0BufferedWriterTest.test_writes.<locals>.<lambda>)r�)rrrr�test_writes�szBufferedWriterTest.test_writescCs|jdd��dS)NcSs
|j�S)N)r�)r�rrrr��sz<BufferedWriterTest.test_writes_and_flushes.<locals>.<lambda>)r�)rrrr�test_writes_and_flushes�sz*BufferedWriterTest.test_writes_and_flushescCs6dd�}|j|�dd�}|j|�dS)NcSsH|j�}|j|dd�|j|dd�|j|d�dS)Nr(r)r'r&)r�r$rrr�_seekabs�sz:BufferedWriterTest.test_writes_and_seeks.<locals>._seekabscSsF|jdd�}|jdd�|jdd�|j|d�dS)Nrr(r(r\)r&)r�r$rrr�_seekrel�sz:BufferedWriterTest.test_writes_and_seeks.<locals>._seekrel)r�)rr�r�rrr�test_writes_and_seeks�s
z(BufferedWriterTest.test_writes_and_seekscCs|jdd��dS)NcSs|j|j��S)N)r.r')r�rrrr��sz>BufferedWriterTest.test_writes_and_truncates.<locals>.<lambda>)r�)rrrr�test_writes_and_truncates�sz,BufferedWriterTest.test_writes_and_truncatescCs=|j�}|j|d�}|j|jd�d�|j|jd�d�|jd�|j|jd�d�|jd�y|jd	�Wn1|jk
r�}z|j}WYdd}~XnX|jd
�|j|d�|j|j�d�|j|jd
�d�|j�}|j	|j
d�|�dS)NrCsabcdr�sefghir@�ksjklmn�0sopqrwxyz0123456789z'BlockingIOError should have been raisedr*sabcdefghijklmnopqrwxyzs	ABCDEFGHIrhs	01234567A)rUr�rlrr[r`�characters_writtenr�rYr�r
)rr�r�rWZwrittenrXrrr�test_write_non_blocking�s$


z*BufferedWriterTest.test_write_non_blockingcCs�tj�}|j|d�}|j|jd�d�|j|j�d�|jdd�|j|jd�d�|jdd�|j|j�d�|j|jd�d�|j�|j|j�d	�dS)
Nr�sabcdefrgrsXYr<sXYcdefs123456sXYcdef123456)	rRr�r�rlrr'r&r�r�)rr�r�rrr�test_write_and_rewinds
z(BufferedWriterTest.test_write_and_rewindcCsP|j�}|j|d�}|jd�|j�|jd|jd�dS)NrCsabcr)r5r�rr�rlr)rr{r�rrr�
test_flush%s


zBufferedWriterTest.test_flushcCsddddg}|j�}|j|d�}|j|�|j�|jdj|j�d�dS)NsabscdsefrCr6sabcdef)r5r�rr�rlrWr)rrer{r�rrr�test_writelines,s

z"BufferedWriterTest.test_writelinescCsjtdddg�}|j�}|j|d�}|j|�|j�|jdj|j�d�dS)NsabscdsefrCr6sabcdef)rr5r�rr�rlrWr)rrer{r�rrr�test_writelines_userlist4s

z+BufferedWriterTest.test_writelines_userlistcCsm|j�}|j|d�}|jt|jdddg�|jt|jd�|jt|jd�dS)NrCr(r<rv�abc)r5r�rnror)rr{r�rrr�test_writelines_error<s
z(BufferedWriterTest.test_writelines_errorcCsS|j�}|j|d�}|jd�~tj�|jd|jd�dS)NrCsabcr)r5r�rrr�rlr)rr{r�rrrr�Cs

z"BufferedWriterTest.test_destructorcCs�|jtj|jdd��U}|j|d�}|jd�|j|jd�d�|j|j�d�WdQX|jtjddd��}|j|j	�d�WdQXdS)	Nr|rrCsabcdefrvrgr}sabc)
rrrd�
write_moder�rrlr.r'r8)rr�r�rrrr�
test_truncateKs!
z BufferedWriterTest.test_truncatez!Threading required for this test.rSc
s�z�d}ttd��|}tddg�}d}t��xG|t|�kr�t|�}�j||||��||7}qCW~|jtj	|j
dd���}|j|d��g����fdd	���fd
d�td�D�}tj|��t
jd
�WdQX|j�d���j�WdQX|jtj	d����j�}WdQXx6td�D](}	|j|jt|	g��|�q{WWdtjtj	�XdS)Ni�rTr(rUrr|rCcs}yAx:y�j�}Wntk
r.dSYnX�j|�qWWn5tk
rx}z�j|��WYdd}~XnXdS)N)�popleftr)rrVr)rXrW)r�rX�queuerrrms
	
z*BufferedWriterTest.test_threads.<locals>.fcs"g|]}tjd���qS)rZ)r[r\)r]r)rrrr^xs	z3BufferedWriterTest.test_threads.<locals>.<listcomp>rqg{�G�z�?z(the following exceptions were caught: %rr})rr�rrrr�rrrrdr�r�rarbrcr�rFr8rlrrc)
rrdr}r�r,r%r�rfrXr�r)r�rXrr�rrhUs4	!	*zBufferedWriterTest.test_threadscCsa|j�}|j|d�}|jt|jd�|jt|j�|jt|jd�dS)Nr@rsabcdef)r;r�rnrEr&r'r)rr�r�rrrrk�s
z%BufferedWriterTest.test_misbehaved_iocCs3|jt��|j|j�dd�WdQXdS)NrCrk)rnror�r5)rrrr�test_max_buffer_size_removal�sz/BufferedWriterTest.test_max_buffer_size_removalcCsd|j�}dd�}||_|j|�}|jd�|jt|j�|j|j�dS)NcSs
t��dS)N)rE)rrrr�	bad_write�sz?BufferedWriterTest.test_write_error_on_close.<locals>.bad_writesspam)r5rr�rnrErFr�rD)rr�r�rrrr�test_write_error_on_close�s	
z,BufferedWriterTest.test_write_error_on_closeN)r/r0r1r�r+r.rzr|r~r�r�r�r�r�r�r�r�r�r�r�r�r�r ror[rrprhrkr�r�rrrrry�s0


/ryc@sIeZdZejZdd�Zdd�Zdd�Zdd�Z	d	S)
�CBufferedWriterTestcCsctj|�tjdkr_|j�}|j|�}|jttt	f|j
|tj�ndS)Ni���)ryr+r�r�r5r�rnr�rrr^r)rr�r�rrrr+�s
z$CBufferedWriterTest.test_constructorcCs�|j�}|j|�}|jt|j|dd�|jt|jd�|jt|j|dd�|jt|jd�|jt|j|dd�|jt|jd�dS)Nr#rsdefr*r(i�r\)r5r�rnr^rr)rr�r�rrrrs�sz'CBufferedWriterTest.test_initializationcCs�tjdtf��[|jtjd�}|j|�}|jd�||_tj	|�}~tj
�WdQX|j|�|�|jtjd��}|j
|j�d�WdQXdS)Nr�zw+bs123xxxr})rr�r�r�rdr�rrr�r�r�r�rrlr8)rr�rr�rrrr��s
	z+CBufferedWriterTest.test_garbage_collectioncCs9|jtd��!|jtj�ddd�WdQXdS)N�BufferedWriteri)r-ror�rRr�)rrrrrw�sz#CBufferedWriterTest.test_args_errorN)
r/r0r1rRr�r�r+rsr�rwrrrrr��s
	

r�c@seZdZejZdS)�PyBufferedWriterTestN)r/r0r1rTr�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�Zdd�Zdd �Zd!d"�Zd#d$�Zd%d&�Zd'd(�Zd)d*�Zd+S),�BufferedRWPairTestcCs2|j|j�|j��}|j|j�dS)N)r�r5r�rD)r�pairrrrr+�sz#BufferedRWPairTest.test_constructorcCs�|jj|j�}~|jj|j�}|jttfd|jd�|jttfd|jd�|j|j�|j��|j	|jd�d�|j	|jd�d�dS)Nzuninitialized|has no attributerr6)
r�r,r-r^r�r8rrr5rl)rr�rrrr.�s

z%BufferedRWPairTest.test_uninitializedcCs8|j|j�|j��}|j|j|j�dS)N)r�r5rnrOr�)rr�rrrr��szBufferedRWPairTest.test_detachcCs<|jt��'|j|j�|j�dd�WdQXdS)NrCrk)rnror�r5)rrrr�(test_constructor_max_buffer_size_removal�sz;BufferedRWPairTest.test_constructor_max_buffer_size_removalcCs<Gdd�dt�}|jt|j|�|j��dS)Nc@seZdZdd�ZdS)zJBufferedRWPairTest.test_constructor_with_not_readable.<locals>.NotReadablecSsdS)NFr)rrrrr"�szSBufferedRWPairTest.test_constructor_with_not_readable.<locals>.NotReadable.readableN)r/r0r1r"rrrr�NotReadable�sr�)r5rnrEr�)rr�rrr�"test_constructor_with_not_readable�sz5BufferedRWPairTest.test_constructor_with_not_readablecCs<Gdd�dt�}|jt|j|j�|��dS)Nc@seZdZdd�ZdS)zLBufferedRWPairTest.test_constructor_with_not_writeable.<locals>.NotWriteablecSsdS)NFr)rrrrr�szUBufferedRWPairTest.test_constructor_with_not_writeable.<locals>.NotWriteable.writableN)r/r0r1rrrrr�NotWriteable�sr�)r5rnrEr�)rr�rrr�#test_constructor_with_not_writeable�sz6BufferedRWPairTest.test_constructor_with_not_writeablecCs�|j|jd�|j��}|j|jd�d�|j|jd�d�|j|j�d�|j|jd�|j��}|j|jd�d�dS)Nsabcdefrvsabcr(r�sef)r�r�r5rlr8)rr�rrrr4�s!!zBufferedRWPairTest.test_readcs|�fdd�}�j|�j�dddg��j|�j�dddg��j|�jd�ddg�dS)Ncs�j�jd��j��S)Ns	abc
def
h)r�r�r5r)rrrr��sz3BufferedRWPairTest.test_readlines.<locals>.<lambda>sabc
sdef
rir@)rlrA)rr�r)rrrB�s""z!BufferedRWPairTest.test_readlinescCs>|j|jd�|j��}|j|jd�d�dS)Nsabcdefrvsabc)r�r�r5rlr9)rr�rrrr:s!zBufferedRWPairTest.test_read1cCsZ|j|jd�|j��}td�}|j|j|�d�|j|d�dS)Nsabcdefr@sabcde)r�r�r5rmrlr-)rr�r+rrrr=s!z BufferedRWPairTest.test_readintocCso|j�}|j|j�|�}|jd�|j�|jd�|j�|j|jddg�dS)Nsabcsdef)r5r�rr�rlr)rrzr�rrrr|s



zBufferedRWPairTest.test_writecCs]|j|jd�|j��}|j|jd�jd��|j|jd�d�dS)Nsabcdefrvsabc)r�r�r5r�rJr
rlr8)rr�rrr�	test_peeks!zBufferedRWPairTest.test_peekcCs5|j|j�|j��}|j|j��dS)N)r�r5r�r")rr�rrr�
test_readable"sz BufferedRWPairTest.test_readablecCs5|j|j�|j��}|j|j��dS)N)r�r5r�r)rr�rrr�test_writeable&sz!BufferedRWPairTest.test_writeablecCs5|j|j�|j��}|j|j��dS)N)r�r5r�r#)rr�rrr�
test_seekable*sz BufferedRWPairTest.test_seekablecCsL|j|j�|j��}|j|j�|j�|j|j�dS)N)r�r5r�rDrFr�)rr�rrr�test_close_and_closed3s
z(BufferedRWPairTest.test_close_and_closedc
Cs�dd�}|j�}||_|j�}|j||�}|jt��}|j�WdQX|jdt|j��|j|j	�|j
|j	�|j|j	�dS)NcSstdS)N)�reader_non_existingrrrr�reader_close:szIBufferedRWPairTest.test_reader_close_error_on_close.<locals>.reader_closer�)r5rFr�rnrrrrr�rDr�)rr��readerr{r�rrrr� test_reader_close_error_on_close9s	z3BufferedRWPairTest.test_reader_close_error_on_closec
Cs�dd�}|j�}|j�}||_|j||�}|jt��}|j�WdQX|jdt|j��|j|j	�|j
|j	�|j|j	�dS)NcSstdS)N)�writer_non_existingrrrr�writer_closeHszIBufferedRWPairTest.test_writer_close_error_on_close.<locals>.writer_closer�)r5rFr�rnrrrrr�rDr�)rr�r�r{r�rrrr� test_writer_close_error_on_closeGs	z3BufferedRWPairTest.test_writer_close_error_on_closec
Cs�dd�}dd�}|j�}||_|j�}||_|j||�}|jt��}|j�WdQX|jdt|j��|j|jj	t�|jdt|jj	��|j
|j�|j
|j�|j
|j�dS)NcSstdS)N)r�rrrrr�VszPBufferedRWPairTest.test_reader_writer_close_error_on_close.<locals>.reader_closecSstdS)N)r�rrrrr�XszPBufferedRWPairTest.test_reader_writer_close_error_on_close.<locals>.writer_closer�r�)r5rFr�rnrrrrrrr�rD)rr�r�r�r{r�rrrr�'test_reader_writer_close_error_on_closeUs		z:BufferedRWPairTest.test_reader_writer_close_error_on_closecCs�Gdd�dt�}|j|d�|d��}|j|j��|j|d�|d��}|j|j��|j|d�|d��}|j|j��|j|d�|d��}|j|j��dS)Nc@s(eZdZdd�Zdd�ZdS)z8BufferedRWPairTest.test_isatty.<locals>.SelectableIsAttycSstj|�||_dS)N)r5r�_isatty)r�isattyrrrrjs
zABufferedRWPairTest.test_isatty.<locals>.SelectableIsAtty.__init__cSs|jS)N)r�)rrrrr�nsz?BufferedRWPairTest.test_isatty.<locals>.SelectableIsAtty.isattyN)r/r0r1rr�rrrr�SelectableIsAttyisr�FT)r5r�r�r�r�)rr�r�rrr�test_isattyhszBufferedRWPairTest.test_isattycCs=|j|j�|j��}tj|�}d}d}dS)N)r�r5r�r�)rZbrwr�rrr�test_weakref_clearing}sz(BufferedRWPairTest.test_weakref_clearingN)r/r0r1r+r.r�r�r�r�r4rBr:r=r|r�r�r�r�r�r�r�r�r�r�rrrrr��s*	
	r�c@seZdZejZdS)�CBufferedRWPairTestN)r/r0r1rR�BufferedRWPairr�rrrrr��sr�c@seZdZejZdS)�PyBufferedRWPairTestN)r/r0r1rTr�r�rrrrr��sr�c@seZdZdZdZdd�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+cCstj|�tj|�dS)N)r)r+ry)rrrrr+�s
z#BufferedRandomTest.test_constructorcCstj|�tj|�dS)N)r)r.ry)rrrrr.�s
z%BufferedRandomTest.test_uninitializedcCs�|jd
�}|j|d�}|jd|jd��|jd�|jd�|j|j�|jd|j��|jd|jd	�dS)N�asdf�ghjkrCsasr<sdddseeesdddeeer)r�r�)r5r�rlr8rr�r)rr��rwrrr�test_read_and_write�s

z&BufferedRandomTest.test_read_and_writecCs^|jd�}|j|�}|jd|jd��|jd|j��|jdd�|jd|jd��|jd�|jdd�|jd|j��|jd	|j��|jdd�|jd
|j��|jdd�|jd|j��|jd
|jd��|j�|jd|j��|j	t
|jd�dS)Ns	asdfghjklsasr<rsasdfr�s123fs	asdf123flrhr@r(r/sfl�g���)r�r�rlr8r'r&rr�r�rnro)rr�r�rrr�test_seek_and_tell�s$

z%BufferedRandomTest.test_seek_and_tellcCs�|jd�}|j|�}|jd||d��|jd�|jd||d��|jd|j��|j�|jd|j��|jd||��|jdd�|jd	�|j�|jdd�|jd	||d
��dS)Ns	abcdefghisabr<s12sefrgsghirsXYZrv)r�r�rlrr'r�r&)rZ	read_funcr�r�rrr�check_flush_and_read�s



z'BufferedRandomTest.check_flush_and_readcCs|jdd��dS)NcWs
|j|�S)N)r8)r�rPrrrr��sz8BufferedRandomTest.test_flush_and_read.<locals>.<lambda>)r�)rrrr�test_flush_and_read�sz&BufferedRandomTest.test_flush_and_readcCs ddd�}|j|�dS)Nr(cSsAt|dkr|nd�}|j|�}t|d|��S)Nri')rmr-r)r�r,rrrr�	_readinto�sz=BufferedRandomTest.test_flush_and_readinto.<locals>._readintor\)r�)rr�rrr�test_flush_and_readinto�sz*BufferedRandomTest.test_flush_and_readintocCs ddd�}|j|�dS)Nr(cSsH|j|�}|dkr.|d|�}n|jt|�d�|S)Nr(r\)rJr&r)r�r,rrrr�_peek�s
z5BufferedRandomTest.test_flush_and_peek.<locals>._peekr\)r�)rr�rrr�test_flush_and_peek�sz&BufferedRandomTest.test_flush_and_peekcCs�|jd�}|j|�}|jd�|j�|jd�|j�|jdd�|jd|j��|jd|j��dS)Ns	abcdefghis123s45rs	12345fghi)r�r�rr�r&rlr�r8)rr�r�rrr�test_flush_and_write�s



z'BufferedRandomTest.test_flush_and_writecCstj|�tj|�dS)N)r)rhry)rrrrrh�s
zBufferedRandomTest.test_threadscCs6dd�}|j|�dd�}|j|�dS)NcSs|jd�dS)Nr()rJ)r�rrrr��sz6BufferedRandomTest.test_writes_and_peek.<locals>._peekcSs=|j�}|jdd�|jd�|j|d�dS)Nr(rr\)r'r&rJ)r�r$rrrr��s
)r�)rr�rrr�test_writes_and_peek�s
z'BufferedRandomTest.test_writes_and_peekcCsdd�}|j|�dS)NcSs!|jdd�|jd�dS)Nr(r\)r&r8)r�rrr�_read�sz7BufferedRandomTest.test_writes_and_reads.<locals>._read)r�)rr�rrr�test_writes_and_reads�sz(BufferedRandomTest.test_writes_and_readscCsdd�}|j|�dS)NcSs!|jdd�|jd�dS)Nr(r\)r&r9)r�rrr�_read1sz9BufferedRandomTest.test_writes_and_read1s.<locals>._read1)r�)rr�rrr�test_writes_and_read1ssz)BufferedRandomTest.test_writes_and_read1scCsdd�}|j|�dS)NcSs'|jdd�|jtd��dS)Nr(r\)r&r-rm)r�rrrr�sz;BufferedRandomTest.test_writes_and_readintos.<locals>._read)r�)rr�rrr�test_writes_and_readintossz,BufferedRandomTest.test_writes_and_readintoscCs�x�ddgD]�}|jd�}|j|d�}|j|jd�d�|j|j�d�|jd|�|j|j�|d�|j�|j|j�|d�|j�}|j|dd|dd|�q
WdS)	Nr(r@rrsr��Brhs
AAAAAAAAAA)r�r�rlr8r'rr�r�)rZoverwrite_sizer�r�rXrrr�test_write_after_readaheads
	z-BufferedRandomTest.test_write_after_readaheadcCs�dd�}d}x�tdt|��D]�}x�t|t|��D]�}|j|�}|j|d�}||||�|j�t|�}d||<d||<|j|j�|d||f�qDWq(WdS)	NcSs[||kst�|j|�|j||�|jd�|j|�|jd�dS)Nss)rwr&r8r)r�Zpos1Zpos2rrr�mutate"s


z:BufferedRandomTest.test_write_rewind_write.<locals>.mutates�����rr�r<r(zfailed result for i=%d, j=%d)r�rr�r�r�rmrlr�)rr�rr��jr�r��expectedrrr�test_write_rewind_write s


z*BufferedRandomTest.test_write_rewind_writecCs�|jd�}|j|d�}|j|jd�d�|j|j�d�|j|jd�d�|j|j�d�dS)	Nrrsr�r<sAAsBBr�s
AAAAAAAAAA)r�r�rlr8r.r)rr�r�rrr�!test_truncate_after_read_or_write:sz4BufferedRandomTest.test_truncate_after_read_or_writecCstj|�tj|�dS)N)r)rkry)rrrrrkBs
z%BufferedRandomTest.test_misbehaved_iocCs�|jd���}|j|d���}|jd�|j|jd�d�|jd�|j|jd�d�|jd�td�}|j|�|j|d	�|jd
�|j|jd�d�|j	�|j|j
�d�WdQXWdQX|jd
���}|j|d��f}|j|jd�d�|jd�|j|jd�d�|j	�|j|j
�d�WdQXWdQXdS)Nsabcdefghr��1r(r8�2r��3�f�4ris1b2d3f4hsabcr7r�sa2c)r�r�rrlr8r9rmr-rJr�r�)rr�rr*rrr�test_interleaved_read_writeFs*





"

z.BufferedRandomTest.test_interleaved_read_writecCs�|jd���}|j|���}|jd�|j|j�d�|jd�|j|j�d�|jd�|j|j�d�|j�|j|j�d�WdQXWdQXdS)	Ns
ab
cdef
g
r�sb
r�sdef
r�s
s
1b
2def
3
)r�r�rrlr~r�r�)rr�rrrr�test_interleaved_readline_write_s



z2BufferedRandomTest.test_interleaved_readline_writeN)r/r0r1r`r�r+r.r�r�r�r�r�r�r�rhr�r�r�r�r�r�r�rkr�r�rrrrrr��s.
r�c@s=eZdZejZdd�Zdd�Zdd�ZdS)�CBufferedRandomTestcCsctj|�tjdkr_|j�}|j|�}|jttt	f|j
|tj�ndS)Ni���)r�r+r�r�r5r�rnr�rrr^r)rr�r�rrrr+rs
z$CBufferedRandomTest.test_constructorcCstj|�tj|�dS)N)rqr�r�)rrrrr�|s
z+CBufferedRandomTest.test_garbage_collectioncCs9|jtd��!|jtj�ddd�WdQXdS)N�BufferedRandomi)r-ror�rRr�)rrrrrw�sz#CBufferedRandomTest.test_args_errorN)	r/r0r1rRr�r�r+r�rwrrrrr�os	
r�c@seZdZejZdS)�PyBufferedRandomTestN)r/r0r1rTr�r�rrrrr��sr�c@s�eZdZdZddd�Zdd�Zdd�Zd	d
�Zdd�Zd
dd�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.
    �strictcCs!tjj||�|j�dS)N)�codecs�IncrementalDecoderr�reset)rrXrrrr�sz#StatefulIncrementalDecoder.__init__cCsdt|�S)Nz<SID %x>)�id)rrrr�__repr__�sz#StatefulIncrementalDecoder.__repr__cCs"d|_d|_t�|_dS)Nr()r��ormr�)rrrrr��s		z StatefulIncrementalDecoder.resetcCs6|jdA|jdA}}t|j�|d|fS)Nr(r�)r�r�rr�)rr�r�rrr�getstate�sz#StatefulIncrementalDecoder.getstatecCsO|\}}t|�|_t|d�\}}|dA|dA|_|_dS)Nr�r()rmr��divmodr�r�)r�stater�rRr�r�rrr�setstate�sz#StatefulIncrementalDecoder.setstateFcCs�d}x�|D]�}|jdkrf|td�krS|jrc||j�7}qcq�|jj|�q
|jj|�t|j�|jkr
||j�7}q
q
W|r�|jr�||j�7}n|S)Nr�r�.)r��ordr��process_wordrr)r�input�final�outputrrrr�decode�s
	z!StatefulIncrementalDecoder.decodecCsd}|jdtd�krMtdt|jdd�p>d��|_n�|jdtd�kr�tdt|jdd�p�d��|_nd|jjd�}t|�|jkr�|d|j7}n|jr�|d|j�}n|d	7}t�|_|S)
Nr�rr��cr(r�r��-r�)	r�r�r��intr�r�r�rrm)rr�rrrr��s..	
z'StatefulIncrementalDecoder.process_wordcCs_|jr[|dkr[tjd�}tjddd|jddddddddd	|�SdS)
N�test_decoderzlatin-1r�encoder��incrementalencoder�streamreader�streamwriter�incrementaldecoder)�codecEnabledr��lookup�	CodecInfor�)�clsr�latin1rrr�lookupTestDecoder�s	z,StatefulIncrementalDecoder.lookupTestDecoderN)r/r0r1r2rr�r�r�r�r�r�r��classmethodrrrrrr��sr�c
@sjeZdZdZdddd d!d"ddddddddddddfgZdd�ZdS)#�StatefulIncrementalDecoderTestzB
    Make sure the StatefulIncrementalDecoder actually works.
    �abcdF�a.b.c.d.�oiabcdT�abcd.�oi...abcd...�i.o6.x.xyz.toolongtofit.�x-----.xyz---.toolon.�
i.i2.o6xyz�xy----.z-----.�i.o3.i6.abcdefghijklmnop�abc.ghi.mno.s;i.o29.a.b.cde.o15.abcdefghijabcdefghij.i3.a.b.c.d.ei00k.l.mza----------------------------.zb----------------------------.zcde--------------------------.zabcdefghijabcde.za.b------------.z.c.------------.zd.e------------.zk--------------.zl--------------.zm--------------.cCs�x?|jD]4\}}}t�}|j|j||�|�q
Wt�}|j|jd�d�|j|jdd�d�dS)Nsoiabcdr�r6r(zabcd.)�
test_casesr�rlr�)rr��eofr��drrrr�s	 	z+StatefulIncrementalDecoderTest.test_decoderN)rFr)rTr)r	Tr)r
Fr)rTr
)rTr)r/r0r1r2rr�rrrrr�s	#
rc@s.eZdZdd�Zdd�Zdd�Zdd�Zd	d
�Zdd�Zd
d�Z	dd�Z
dd�Zej
dd��Zdd�Zdd�Zdd�Zdd�Zdd�Zdd �Zd!d"�Zd#d$�Zd%d&�Zd'd(�Zd)d*�Zd+d,�Zd-d.�Zd/d0�Zd1d2�Zd3d4�Zd5d6�Zd7d8�Z d9d:�Z!d;d<�Z"d=d>�Z#d?d@�Z$dAdB�Z%dCdD�Z&dEdF�Z'dGdH�Z(dIdJ�Z)dKdL�Z*dMdN�Z+dOdP�Z,dQdR�Z-dSdT�Z.dUdV�Z/ej0e1j2e3dW�dXdY���Z4dZd[�Z5d\d]�Z6d^d_�Z7d`da�Z8dbdc�Z9ddde�Z:dfdg�Z;dhdi�Z<djdk�Z=dldm�Z>dndo�Z?dpdq�Z@e1jAeBeCdr�ds�dtdu��ZDe1jAeBeCdr�ds�dvdw��ZEdxdy�ZFdzS){�TextIOWrapperTestcCs/d|_djd�|_tjtj�dS)NsAAA
BBB
CCC
DDD
EEE
sAAA
BBB
CCC
DDD
EEE
r�)�testdatar��
normalizedrrcrd)rrrrres	zTextIOWrapperTest.setUpcCstjtj�dS)N)rrcrd)rrrrrf!szTextIOWrapperTest.tearDowncCs|jd�}|j|d�}|j|�}|j|dddd�|j|jd�|j|jd�|j|ddd	d
�|j|jd�|j|jd
�|jd|j��|jt	|j|dd�|jt
|j|dd
�dS)Nsé

i�r
zlatin-1r�z
Fzutf-8�line_bufferingTué
r r)r�rm�
TextIOWrapperrrlr
rr~rnror^)rr	r�trrrr+$sz"TextIOWrapperTest.test_constructorcCs�|jj|j�}~|jj|j�}|jtt|�|jttfd|jd�|j	|j
��|j|jd�d�dS)Nzuninitialized|has no attributerr�)rr,rnrVr�r-r^r�r8rr5rl)rrrrrr.2s
z$TextIOWrapperTest.test_uninitializedcCsK|j�}|j|�}|jtd��|j|dd�WdQXdS)Nzis not a text encodingr
�hex)r�r�r-�LookupErrorr)rr	rrrr�*test_non_text_encoding_codecs_are_rejected=sz<TextIOWrapperTest.test_non_text_encoding_codecs_are_rejectedcCs�|j�}|j|�}|j|�}|j|j�|�|j|dd�}|jd�|j|j��|j�|j|j�d�|j	t
|j�t|�|j|jd�|j|j
d�|j|j�dS)Nr
r�Zhowdyshowdyr�)r�r�rr�r�rr�r�rlrnr^r�r
rXr)rr	rrrrrr�Fs


zTextIOWrapperTest.test_detachcCs�|jdjd��}|j|�}|j|dd�}|jj}|jt|�d|�d|_|jt|�d|�d|_|jt|�d|�d	|_|jt|�d
|�|j	j
�t|�dS)NZhellozutf-8r
z#<%s.TextIOWrapper encoding='utf-8'>r
z0<%s.TextIOWrapper name='dummy' encoding='utf-8'>r	z9<%s.TextIOWrapper name='dummy' mode='r' encoding='utf-8'>sdummyz:<%s.TextIOWrapper name=b'dummy' mode='r' encoding='utf-8'>)r�r�rmrr0rlr�rr�r�r�)rr�rr�modnamerrrrYs"			
zTextIOWrapperTest.test_reprcCs�|j�}|j|d�}|j|dddd�}|jd�|j|j�d�|jd�|j|j�d	�|jd
�|j|j�d�dS)Ni�r��
rT�Xr6zY
ZsXY
ZzA
BsXY
ZA
B)r�r�rrrlr�)rr	rrrrr�test_line_bufferingms


z%TextIOWrapperTest.test_line_bufferingcCs�ttj�}znx*dD]"}|tjkrtj|=qqWtjd�}|j�}|j|�}|j|j|�Wdtjj	�tjj
|�XdS)N�LC_ALL�LANG�LC_CTYPEF)zLC_ALLr!zLC_CTYPE)�dictr��environ�locale�getpreferredencodingr�rrlr
�clear�update)rZold_environ�keyZcurrent_locale_encodingrrrrr�test_default_encodingxs

z'TextIOWrapperTest.test_default_encodingcsrddl�|j�}�fdd�|_|jt|j|��fdd�|_|jt|j|�dS)Nrcs�jdS)Nr()ZINT_MAXr)�	_testcapirrr��sz8TextIOWrapperTest.test_device_encoding.<locals>.<lambda>cs�jdS)Nr()ZUINT_MAXr)r+rrr��s)r+r�r!rnr�r)rrr)r+r�test_device_encoding�sz&TextIOWrapperTest.test_device_encodingcCsg|j�}|j|dd�}|j|jd�|j|�}|j|j�tj|j�dS)Nr
zutf-8)r�rrlr
�assertIsNotNoner�r�)rrrrrr�
test_encoding�szTextIOWrapperTest.test_encodingcCs�|jd�}|j|dd�}|jt|j�|jd�}|j|dddd�}|jt|j�|jd�}|j|dddd�}|j|j�d�|jd�}|j|dddd�}|j|j�d	�dS)
Nsabc
�
r
r�rXr��ignorezabc

�replaceuabc
�
)r�rrn�UnicodeErrorr8rl)rrrrrr�test_encoding_errors_reading�sz.TextIOWrapperTest.test_encoding_errors_readingcCs,|j�}|j|dd�}|jt|jd�|j�}|j|dddd�}|jt|jd�|j�}|j|dddddd�}|jd	�|j�|j|j�d
�|j�}|j|dddddd�}|jd	�|j�|j|j�d�dS)
Nr
r��ÿrXr�r/r�ru	abcÿdef
sabcdef
r0sabc?def
)r�rrnr1rr�rlr�)rrrrrr�test_encoding_errors_writing�s$	

	

z.TextIOWrapperTest.test_encoding_errors_writingc
Cs�dddddg}ddddddggd|gd	ddd
dggddd
ggddddggg}d!}x^|D]V}tdj|�j|��}x/d"D]'}xtdd�D]
}x|D]�\}}	|j|j|�|�}
|j|
d|d|�}|rqg}x_|jd �}
|
dkr=Pn|jt	|
�d �|j
|
|j��qWnt|�}x-t
||	�D]\}}|j||�q�W|jt	|�t	|	��q�Wq�Wq�WqWdS)#Nzunix
z	windows
zos9
zlast
Znonlzwindows
zos9
r�rz	os9
last
z
zunix
windows
z
os9
last
nonl�
z
unix
windows
z
os9
z	last
nonl�utf-8�latin-1�utf-16�	utf-16-le�	utf-16-be�utf-32�	utf-32-le�	utf-32-beFTr(rsr�r
r<)r6r7r8r9r:r;r<r=)FT)rrWr�r�rmr�rr8rlrrr~r�zip)rZinput_linesrD�	encodingsr
r+Zdo_readsr�r�Z	exp_linesr��textioZ	got_linesZc2Zgot_lineZexp_linerrr�
test_newlines�s:	

	zTextIOWrapperTest.test_newlinesc
Cs)d}|jdd�jdd�}x�d|jd�jdd�fd|jd�jdd�fd	d
ddd
dgfddd
dgfddddddgfgD]x\}}|j|�}|j|ddd|�}|j|j�|�|jd�|j|j�dj	|��q�WdS)NsAAA
BBB
CCC
DDD
EEE
FFF
GGGs
s
s
r��keependsTr�rzAAA
ZBBB
z
CCC
DDD
EEE
zFFF
ZGGGz
zAAA
BBB
CCC
DDD
EEE
r5z
AAA
BBB
CCC
zDDD
zEEE
z
FFF
z
GGGr
r�r)
r0r�r	r�rrlrAr&r8rW)rrrr�r�r*�txtrrr�test_newlines_input�s(
z%TextIOWrapperTest.test_newlines_inputcCs�idd6dd6dd6dd6}d|tjfgt|j��}x�|D]�\}}|j�}|j|dd	d
|�}|jd�|jd�|jd
�|j�|j|j	d�|j|j
�|�qOWdS)NsAAA
BBB
CCC
X
Y
Zr�rsAAA
BBB
CCC
X
Y

Zr5sAAA
BBB
CCC
X
Y

Zz
r
r�r�zAAA
BzBB
CCC
zX
Y
ZF)r��linesep�sorted�itemsr�rrr�rlrDr�)rZtestdictrDr�r�r*rCrrr�test_newlines_output	s
&



z&TextIOWrapperTest.test_newlines_outputcs}g�|j�G��fdd�d��}|�}|j|dd�}|jd�~tj�|jdg��dS)Ncs%eZdZ��fdd�ZdS)z4TextIOWrapperTest.test_destructor.<locals>.MyBytesIOcs$�j|j���j|�dS)N)rr�rF)r)r�rerrrF	sz:TextIOWrapperTest.test_destructor.<locals>.MyBytesIO.closeN)r/r0r1rFr)r�rerr�	MyBytesIO	srIr
r�r�sabc)r�rrrr�rl)rrIrrr)r�rerr�	s		

z!TextIOWrapperTest.test_destructorcsmg�G�fdd�d|j�}|j�}||dd�}~tj�|j�dddg�dS)NcsOeZdZ��fdd�Z��fdd�Z��fdd�Z�S)z<TextIOWrapperTest.test_override_destructor.<locals>.MyTextIOcs=�jd�yt�j}Wntk
r1YnX|�dS)Nr()rr=r�r�)rr)r>r�rrr�$	s

zDTextIOWrapperTest.test_override_destructor.<locals>.MyTextIO.__del__cs�jd�t�j�dS)Nr<)rr=rF)r)r>r�rrrF,	s
zBTextIOWrapperTest.test_override_destructor.<locals>.MyTextIO.closecs�jd�t�j�dS)Nrv)rr=r�)r)r>r�rrr�/	s
zBTextIOWrapperTest.test_override_destructor.<locals>.MyTextIO.flush)r/r0r1r�rFr�r)r�)r>r�MyTextIO#	srJr
r�r(r<rv)rr�rr�rl)rrJrrr)r�rr!	s
z*TextIOWrapperTest.test_override_destructorc
s��j����fdd�}tjd��}�jt|�WdQX|j�j�}|r��jt|j	��d��j
|jd�|��j
|jd�|�ndS)Ncs�j��jdS)N)rrr)r�rrrr<	sz:TextIOWrapperTest.test_error_through_destructor.<locals>.frr(zException OSError: z ignored)
rCrrrnr�r�rrlrr	r�r
r)rrrXr)r�rrr8	sz/TextIOWrapperTest.test_error_through_destructorcCs(x!dD]}xdD]}|jtjdd|�}||_|j|jd�d�|j�|jtjdd|�}||_|j|j�d�|j|j�d�|j�}|j|j	d�d�|j|jd�d�|j	d�|j|jd�d�|j|jd�d�|j|jd�d�|j|j�d�|j|j�|�|j|j	d�d�|j|j	dd�|�|j|jd�d�|j|j	|�|�|j|j�d�|j
d�r|j||�n|j�qWqWdS)Nr(r<rvr�r@rr*�ru� �!�?�@�Ar��latin-1�utf-8zw+r
r�zr+rr�rgr��def�utf)r(r<rvr�r@rr*rKrurLrMrNrOrP)zasciirQrR)rrrdr
rlrrFr'r8r&r
�multi_line_test)rZ	chunksize�encr�cookierrr�
test_basic_ioI	s6

	
	
zTextIOWrapperTest.test_basic_iocCs|jd�|j�d}g}xdD]w}g}x/t|�D]!}|j||t|��qCWdj|�d}|j|j�|f�|j|�q*W|jd�g}	x9|j�}
|j�}|s�Pn|	j|
|f�q�W|j	|	|�dS)Nru	sÿ࿿￿r(r<rvr�r@�rurLrM�>rNrOrP��r�r)rr(r<rvr�r@rYrurLrMrZrNrOrPr[)
r&r.r�rrrWr'rr~rl)rrrVZsampleZwlinesr%�charsr��lineZrlinesr$rrrrUf	s(



z!TextIOWrapperTest.multi_line_testcCs9|jtjddd�}|j�}|jd�|j�}|jd�|j�}|jd�|j|j�|�|j|j�d�|j|j�|�|j|j�d�|j|j�|�|jd�x1|D])}|j|d�|jt	|j�q�W|j|j�|�|j
�dS)Nzw+r
zutf-8uÿ
r)rrrdr'rr&rlr~rnrErF)rrZp0Zp1Zp2r]rrr�test_telling|	s$




zTextIOWrapperTest.test_tellingc
Cst�}|d}d|}t|jd��}|jt|�t|��d}t|jd��}||}|jtjd��}|j|d�WdQX|jtjddd��[}|j	|�}	|j|	t
|d��|j|j�|�|j|j�|�WdQXdS)	Nr<r�zutf-8u袈
r{r	r
r�)
rrr�rlrrrrdrr8rr'r~)
rZ
chunk_sizeZprefix_sizeZu_prefix�prefixZu_suffix�suffixr]rrXrrr�test_seeking�	s	


zTextIOWrapperTest.test_seekingcCs}d}|jtjd��}|j|�WdQX|jtjddd��+}|jd|_|j�|j�WdQXdS)Ns࿿
r{r	r
zutf-8r<)rrrdrr
r~r')rr+rrrr�test_seeking_too�	s	
z"TextIOWrapperTest.test_seeking_toocs�d�d��fdd�}dt_z�x$tjD]\}}}||�q4WxStjD]H\}}}�t|�d}d|}|d}||||�q[WWddt_XdS)N�rcsT�jtjd�}|j|�|j��jtjdd�}�|_|j�}|j�x�t|t|�d�D]�}x�ddt|�|gD]�}�jtjdd�}�j	|j|�|d|��|j
�}�j	|j|�||||��|j|��j	|j�||d��|j�q�Wq}WdS)zTell/seek to various points within a data stream and ensure
            that the decoded data returned by read() is consistent.r{r
r�r(r@N)rrrdrrFr
r8r�rrlr'r&)r+�min_posrZdecodedr�r�rW)�
CHUNK_SIZErrr�test_seek_and_tell_with_data�	s 

	
  #'
 zJTextIOWrapperTest.test_seek_and_tell.<locals>.test_seek_and_tell_with_datar(r<�.)r�r�rrr)rrfr��_�offsetr_rdr)rerrr��	s	

z$TextIOWrapperTest.test_seek_and_tellcCs�d}d}x�|D]�}|j�}|j|d|�}|j|�|j|�|jd	�|j|j�|d
�|jd	�|j|j�|d
�|j|j�|d
j|��qWdS)NZ
1234567890�utf-16�	utf-16-le�	utf-16-be�utf-32�	utf-32-le�	utf-32-ber
rr<)rjrkrlrmrnro)r�rrr&rlr8r�r�)rr+rDr
r*rrrr�test_encoded_writes�	s"




z%TextIOWrapperTest.test_encoded_writescCsBGdd�d|j�}|j|��}|jt|j�dS)Nc@seZdZdd�ZdS)z5TextIOWrapperTest.test_unreadable.<locals>.UnReadablecSsdS)NFr)rrrrr"�	sz>TextIOWrapperTest.test_unreadable.<locals>.UnReadable.readableN)r/r0r1r"rrrr�
UnReadable�	srq)r�rrnrEr8)rrqrCrrr�test_unreadable�	sz!TextIOWrapperTest.test_unreadablecCs\|j|jd��}d}x'|jd�}|s:Pn||7}q!W|j|d�dS)NsAA
BBr�r(zAA
BB)rr�r8rl)rrC�readsrgrrr�test_read_one_by_one�	sz&TextIOWrapperTest.test_read_one_by_onecCs�|j|jd��}|j|j�dddg�|jd�|j|jd�dddg�|jd�|j|jd�ddg�dS)NsAA
BB
CCzAA
zBB
�CCrr@)rr�rlrAr&)rrCrrrrB
s
"
z TextIOWrapperTest.test_readlinescCsl|j|jddd��}d}x'|jd�}|sBPn||7}q)W|j|ddd�dS)Nr�s
Br�rc�Az
B)rr�r8rl)rrCrsrgrrr�test_read_by_chunk	
s z$TextIOWrapperTest.test_read_by_chunkcCs[dddg}|j�}|j|�}|j|�|j�|j|j�d�dS)Nr��cd�efsabcdef)r�rrr�rlr�)rrer*rCrrrr�
s

z!TextIOWrapperTest.test_writelinescCsatdddg�}|j�}|j|�}|j|�|j�|j|j�d�dS)Nr�ryrzsabcdef)rr�rrr�rlr�)rrer*rCrrrr�
s

z*TextIOWrapperTest.test_writelines_userlistcCsd|j|j��}|jt|jdddg�|jt|jd�|jt|jd�dS)Nr(r<rvsabc)rr�rnror)rrCrrrr�$
sz'TextIOWrapperTest.test_writelines_errorcCsh|j|j|j�dd�}d}x'|jd�}|sCPn||7}q*W|j||j�dS)Nr
r�r�r()rr�rr8rlr)rrCrsrgrrr�test_issue1395_1*
s!z"TextIOWrapperTest.test_issue1395_1cCsq|j|j|j�dd�}d|_d}x'|jd�}|sLPn||7}q3W|j||j�dS)Nr
r�r�r�)rr�rr
r8rlr)rrCrsrgrrr�test_issue1395_26
s!	z"TextIOWrapperTest.test_issue1395_2cCs�|j|j|j�dd�}d|_|jd�}||jd�7}||j�7}||j�7}||j�7}|j||j�dS)Nr
r�r�)rr�rr
r8r~rlr)rrCrsrrr�test_issue1395_3B
s!	z"TextIOWrapperTest.test_issue1395_3cCs`|j|j|j�dd�}d|_|jd�}||j�7}|j||j�dS)Nr
r�r�)rr�rr
r8rlr)rrCrsrrr�test_issue1395_4M
s
!	z"TextIOWrapperTest.test_issue1395_4cCs||j|j|j�dd�}d|_|jd�}|j�}|jd�|j|�|j|jd�d�dS)Nr
r�r�rzBBB
)rr�rr
r8r'r&rl)rrCrsr$rrr�test_issue1395_5U
s!	

z"TextIOWrapperTest.test_issue1395_5cCsG|j|j�}|j|dd�}|j|j�|j��dS)Nr
r�)r�rrrlr#)rr�rCrrr�test_issue2282_
sz TextIOWrapperTest.test_issue2282cCs�tj}x�dD]�}|j|dd|�� }|jd�|j�}WdQX|j|d��&}|j|j�dj|��WdQX|j|dd|��}|jd	�WdQX|j|d��&}|j|j�d
j|��WdQXqWdS)N�	utf-8-sig�utf-16�utf-32rzr
�aaar}r��xxx�aaaxxx)r�r�r�)rrdrrr'rlr8r�)r�filename�charsetrr$rrr�test_append_bome
s	

%z!TextIOWrapperTest.test_append_bomcCs�tj}x�d
D]�}|j|dd|�� }|jd�|j�}WdQX|j|dd|��;}|j|�|jd�|jd	�|jd
�WdQX|j|d��&}|j|j�dj|��WdQXqWdS)N�	utf-8-sig�utf-16�utf-32rzr
r�zr+ZzzzrZbbbr}Zbbbzzz)r�r�r�)	rrdrrr'r&rlr8r�)rr�r�rr$rrr�
test_seek_bomt
s	




zTextIOWrapperTest.test_seek_bomcCs�tj}x�dD]�}|j|dd|��}|jd�WdQX|j|dd|��4}|jd�|jd|j�|jd	�WdQX|j|d
��&}|j|j�dj|��WdQXqWdS)
N�	utf-8-sig�utf-16�utf-32rzr
r�r�rr�r}r�)r�r�r�)	rrdrrr&r�rlr8r�)rr�r�rrrr�test_seek_append_bom�
s	

z&TextIOWrapperTest.test_seek_append_bomcCsl|jtjd��}|j|jd�WdQX|jtjddd��}|j|jd�WdQXdS)Nrzr�rXr0)rrrdrlrX)rrrrr�test_errors_property�
sz&TextIOWrapperTest.test_errors_propertyz!Threading required for this test.cs�tj��|jtjddd��d���fdd���fdd�td�D�}tj|�j��tj	d	�WdQXWdQX|jtj��G��j
�}x1td�D]#}|j|jd
|�d�q�WWdQXdS)Nrzr|r(cs%d|}�j��j|�dS)NzThread%03d
)�waitr)r,�text)�eventrrr�run�
s

z1TextIOWrapperTest.test_threads_write.<locals>.runcs+g|]!}tjd�d|f��qS)rZrP)r[r\)r]r)r�rrr^�
s	z8TextIOWrapperTest.test_threads_write.<locals>.<listcomp>rqg{�G�z�?zThread%03d
)
r[ZEventrrrdr�ra�setrbrcr8rlr)rrfZcontentr,r)r�rr�r�test_threads_write�
sz$TextIOWrapperTest.test_threads_writecs�|j|j|j�dd��g���fdd�}|�_|jt�j�|j�j�|j�j	j�|j��|j
�d�|j
�d�dd��_dS)	Nr
r�cs,�j�jjg�dd�<t��dS)N)rDr�rEr)rDrCrrr��
sz>TextIOWrapperTest.test_flush_error_on_close.<locals>.bad_flushrr(cSsdS)Nrrrrrr��
sz=TextIOWrapperTest.test_flush_error_on_close.<locals>.<lambda>)rr�rr�rnrErFr�rDr�r�)rr�r)rDrCrr��
s!	
z+TextIOWrapperTest.test_flush_error_on_closec	Cs�|j|j�}dd�}dd�}||_|j|dd�}||_|jt��}|j�WdQX|j|jj	d	�|j
|jjt�|j|jjj	d
�|j|j
�dS)NcSstd��dS)Nr�)rErrrrr��
sz>TextIOWrapperTest.test_close_error_on_close.<locals>.bad_flushcSstd��dS)NrF)rErrrrr�
sz>TextIOWrapperTest.test_close_error_on_close.<locals>.bad_closer
r�rFr�)zclose)zflush)r�rrFrr�rnrErlrrPrrr�rD)rr�r�rrCrrrrr�
s		z+TextIOWrapperTest.test_close_error_on_closec
Cs�|j|j�}dd�}dd�}||_|j|dd�}||_|jt��}|j�WdQX|jdt|j	��|j
|j	jt�|jdt|j	j��|j|j
�dS)	NcSs
t�dS)N)rrrrrr��
szLTextIOWrapperTest.test_nonnormalized_close_error_on_close.<locals>.bad_flushcSs
t�dS)N)rrrrrr�
szLTextIOWrapperTest.test_nonnormalized_close_error_on_close.<locals>.bad_closer
r�rr)r�rrFrr�rnrrrrrrr�rD)rr�r�rrCrrrrr�
s		z9TextIOWrapperTest.test_nonnormalized_close_error_on_closecCsV|j|j|j�dd�}|j�|j�|j�|jt|j�dS)Nr
r�)rr�rrFrnr^r�)rrCrrrr��
s
!


z"TextIOWrapperTest.test_multi_closecCsN|j|j|j��}|j|j|j�|j|j|jd�dS)Nr)rrNrrnrOr'r&)rrCrrrr�
sz!TextIOWrapperTest.test_unseekablec	CsV|j|j|j�dd�}|j|j�}|jt��||_WdQXdS)Nr
r�)rr�rrnr�r�)rrCr*rrrr�
s!z*TextIOWrapperTest.test_readonly_attributescCs�|jdddg�}|j|dddd�}|j|jd�d	�|j|j�d
�|jt|�ddg�dS)
Nsabcsdefsghi
jkl
opq
r
r�r�rr�Zabcdzefghi
zjkl
zopq
)r5rrlr8r~r)rr�rCrrr�
test_rawio�
s
zTextIOWrapperTest.test_rawiocCs�|jdddg�}|j|dddddd	�}|jd
�|jd�|jd�|jd
j|j�d�dS)Nsabcsdefsghi
jkl
opq
r
r�r�r�
write_throughT�1z23
4�5r6s123
45)r5rrrlrWr)rr�rCrrr�test_rawio_write_through�
s	


z*TextIOWrapperTest.test_rawio_write_throughcsgg��G��fdd�d|j�}|j�}d}||t|�d�}|j|dddd�}|jd�}|j|�|j��|j��|j|j	�d	�g�|j|d
�|j��|j|j	�|d�dS)Ncs:eZdZ��fdd�Z��fdd�Z�S)zBTextIOWrapperTest.test_bufio_write_through.<locals>.BufferedWritercs �jd�t�j||�S)NT)rr=r�)rrPr�)r>�flush_calledrrr�s
zHTextIOWrapperTest.test_bufio_write_through.<locals>.BufferedWriter.flushcs �jd�t�j||�S)NT)rr=r)rrPr�)r>�write_calledrrr
s
zHTextIOWrapperTest.test_bufio_write_through.<locals>.BufferedWriter.write)r/r0r1r�rr)r�r�)r>rr�sr�r7r<r
r�r�Tr6rsr�)
r�r�rrr�rr�r�rlr�)rr�r�r+r�r@r�r)r�r�r�test_bufio_write_throughs 
"	



z*TextIOWrapperTest.test_bufio_write_throughcCs�|j|jd��}|jt|jd�|j|jd��}|jt|j�|j|jd��}|jt|j�dS)Nr�r()rr�rnror8r~)rrrrr�test_read_nonbytes"sz$TextIOWrapperTest.test_read_nonbytescsm�fdd�}|�}�jt|jd�|�}�jt|j�|�}�jt|j�dS)NcsQtjd�}d|_z(�j�jd�dddd�}Wdd|_X|S)N�quopriTsaaaaaar�rr
F)r�r��_is_text_encodingrr�)r�r)rrr�_make_illegal_wrapper/s	
zETextIOWrapperTest.test_illegal_decoder.<locals>._make_illegal_wrapperr()rnror8r~)rr�rr)rr�test_illegal_decoder,s
			z&TextIOWrapperTest.test_illegal_decodercKs1|jj}djd|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()
            �iomodr�z-c)rRr/r�r)rr�r��coderrr�_check_create_at_shutdown@sz+TextIOWrapperTest._check_create_at_shutdown�getrefcountz*types are immortal if COUNT_ALLOCS is usedcCsW|j�\}}}|r7|j|j|j��n|jd|j�j��dS)N�ok)r�r�shutdown_errorr�rlr)r�rc�outrrrr�(test_create_at_shutdown_without_encodingUsz:TextIOWrapperTest.test_create_at_shutdown_without_encodingcCsN|jdddd�\}}}|j|�|jd|j�j��dS)Nr
zutf-8rXr�r�)r�r�rlr�r)rr�r�rrrr�%test_create_at_shutdown_with_encoding`s
z7TextIOWrapperTest.test_create_at_shutdown_with_encodingcCs�Gdd�dt�}xCtd�D]5}y|j|�dd�Wq#tk
rWYq#Xq#Wdd�|_|j|�dd�}dS)Nc@s4eZdZdd�Zdd�Zdd�ZdS)z,TextIOWrapperTest.test_issue22849.<locals>.FcSsdS)NTr)rrrrr"jsz5TextIOWrapperTest.test_issue22849.<locals>.F.readablecSsdS)NTr)rrrrrksz5TextIOWrapperTest.test_issue22849.<locals>.F.writablecSsdS)NTr)rrrrr#lsz5TextIOWrapperTest.test_issue22849.<locals>.F.seekableN)r/r0r1r"rr#rrrr�Fisr�rsr
zutf-8cSsdS)Nrr)rrrrr�tsz3TextIOWrapperTest.test_issue22849.<locals>.<lambda>)�objectr�rrVr')rr�r�rrrr�test_issue22849hs
	z!TextIOWrapperTest.test_issue22849N)Gr/r0r1rerfr+r.rr�rrr*rr(r,r.r2r4rArDrHr�rrrXrUr^rarbr�rprrrtrBrxr�r�r�r{r|r}r~rr�r�r�r�r��
no_tracingr ror[r�r�rrr�rrr�r�r�r�r�r��skipIfr�r�r�r�r�rrrrrs|	
	*/
	

!
 

rc@s@eZdZeZdZdd�Zdd�Zdd�ZdS)	�CTextIOWrapperTestz,RuntimeError: could not find io module statecCs�|jd�}|j|d�}|j|�}|jt|j|dd�|jt|j�|jt|j|dd�|jt|j�|jj|j�}|jt	t
|�dS)Nsé

i�r�r r)r�rmrrnrorr^r8r,rVr�)rr	rrrrrrs|sz&CTextIOWrapperTest.test_initializationcCs�tjdtf��ptjtjd�}|j|�}|j|dd�}|jd�||_	t
j|�}~tj�WdQX|j
|�|�|jtjd��}|j|j�d�WdQXdS)Nr�r{r
r�Z456defr}s456def)rr�r�rRr�rdr�rrrr�r�r�r�rrlr8)rr�rrr�rrrrr��s
	z*CTextIOWrapperTest.test_garbage_collectioncCs�x�td�D]~}|j|j�|j��}|j|dd�}|j|j�|j��}|j|dd�}||_||_q
Wtj�dS)Ni�r
r�)r�r�r5rZbuddyrr�)rr�Zb1Zt1Zb2Zt2rrr�!test_rwpair_cleared_before_textio�s	
z4CTextIOWrapperTest.test_rwpair_cleared_before_textioN)r/r0r1rRr�rsr�r�rrrrr�xs
r�c@seZdZeZdZdS)�PyTextIOWrapperTestz,TypeError: 'NoneType' object is not iterableN)r/r0r1rTrRr�rrrrr��sr�c@s@eZdZdd�Zdd�Zdd�Zdd�Zd	S)
�IncrementalNewlineDecoderTestcsv��fdd�}|dd�|dd�|dd�|dd�|dd�|dd�|dd�|dd��jt�jd	d
d��j�|dd
�|dd�|d	d
d
d�|dd
d
d�|dd�|dd�|dd�|dd�|dd
�|dd�|dd�|dd�|dd
�|dd�|dd
�dS)NcsU�j�}�j�j||�|��j|��j�j||�|�dS)N)r�rlr�r�)rrXr�r�)�decoderrrr�
_check_decode�s
zPIncrementalNewlineDecoderTest.check_newline_decoding_utf8.<locals>._check_decodes袈u袈s�r�s�s�r6r�Ts
rs
r7z
as

z

s
as袈
u袈
s袈
)rn�UnicodeDecodeErrorr�r�)rr�r�r)r�rr�check_newline_decoding_utf8�s4




















z9IncrementalNewlineDecoderTest.check_newline_decoding_utf8cslg�|dk	r?tj|������fdd�}nd���fdd�}|j�jd�|d�|j�jd�|d�|j�jd
�|d�|j�jd�|d	�|j�jd�|d�|jdj��d��j�d	}�dk	r<�j��j|�}n|j�j|�d	�|j�jd�dS)Ncs=x6�j|�D]%}�j�jt|g���qWdS)N)r�rr�r)rXr)r��encoder�resultrr�_decode_bytewise�szNIncrementalNewlineDecoderTest.check_newline_decoding.<locals>._decode_bytewisecs+x$|D]}�j�j|��qWdS)N)rr�)rXrg)r�r�rrr��s
zabc

rz
abc�
zabc
r�r5r�zabc

abcabc
abcabc)rr�)rr�)r5rr�)r��getincrementalencoderrl�newlinesrWr�r�r�)rr�r
r�r�r)r�r�r�r�check_newline_decoding�s0






z4IncrementalNewlineDecoderTest.check_newline_decodingc	Cs�d}xK|D]C}|o(tj|��}|j|d	d
�}|j||�q
Wtjd��}|j|d	d
�}|j|�dS)N�utf-8�latin-1�utf-16�	utf-16-le�	utf-16-be�utf-32�	utf-32-le�	utf-32-be�	translateT)	Nr�r�r�r�r�r�r�r�)r��getincrementaldecoder�IncrementalNewlineDecoderr�r�)rr?rVr�rrr�test_newline_decoder�s
z2IncrementalNewlineDecoderTest.test_newline_decodercsT�fdd�}�jddd�}||��jddd�}||�dS)Ncso�j|jd��j|jd�d��j|jd��j|jd�d��j|jd�dS)Nuഀu਀)rlr�r�)�dec)rrr�_check
s
z@IncrementalNewlineDecoderTest.test_newline_bytes.<locals>._checkr�FT)r�)rr�r�r)rr�test_newline_bytess

z0IncrementalNewlineDecoderTest.test_newline_bytesN)r/r0r1r�r�r�r�rrrrr��s*!r�c@seZdZdS)�CIncrementalNewlineDecoderTestN)r/r0r1rrrrr�sr�c@seZdZdS)�PyIncrementalNewlineDecoderTestN)r/r0r1rrrrr�sr�c@s0eZdZdd�Zdd�Zdd�Zdd�Zd	d
�Zdd�Zd
d�Z	dd�Z
dd�Zdd�Zdd�Z
dd�Zdd�Zdd�Zejed�dd��Zejed�d d!��Zd"d#�Zd$d%�Zd&d'�Zd(d)�Zd*d+�Zd,S)-�
MiscIOTestcCstjtj�dS)N)rrcrd)rrrrrf#szMiscIOTest.tearDowncCs�x�|jjD]�}t|j|d�}|j||�|dkrJq
q
d|j�ksh|dkr�|jt|t�|�q
|jd�s
|jt||j	��q
q
WdS)Nr�errorrOZSEEK_)
rR�__all__�getattrr-�lowerr��
issubclassrVr
r�)rrr�rrr�test___all__&szMiscIOTest.test___all__cCs�|jtjddd�}|j|jd�|j�tjdtf��|jtjd�}WdQX|j|jtj�|j|j	jtj�|j|j	j
jtj�|j|jd�|j|j	jd�|j|j	j
jd�|j�|jtjd�}|j|jd�|j|j	jd�|j|j	j
jd�|j|j�dd	d
�}|j|jd�|j|j
jd�|j|j|j��|j|j
j|j��|j�|j�dS)Nr{r|rr��Ur}zw+zrb+r�F)rrrdrlr�rFr��DeprecationWarningrr�r�r!)rr�grrr�test_attributes1s.


zMiscIOTest.test_attributescCs�x�idd6idd6idd6dd6idd6dd6idd6dd6idd6id	d6idd6dd6idd6dd6id	d6dd6id
d6idd6id
d6dd6id
d6dd6idd6dd6gD]�}|jtj|�}|j�|jt|j�|jt|j�|jt|j�|jt|j	�t
|d�ru|jt|jd�n|jt|j�t
|d
�r�|jt|j
d�nt
|d�r�|jt|j�nt
|d�r|jt|jtd��n|jt|j�|jt|j�|jt|jd�|jt|j�|jt|j�|jt|jd|dkr�dnd�|jt|jg�|jtt|�q�WdS)Nrzr�r{r(r|r<rr	r}zw+zw+brJr9irKr-rr6r�)rrrdrFrnr^r�r!r��__iter__r�rJr8r9rKr-rmr~rAr&r'r.rrr�)rr�rrrr�test_io_after_closeMsP






zMiscIOTest.test_io_after_closecCs|Gdd�dt�}|d�}|jd|�}||_||_tj|�}~~tj�|j|�|�dS)Nc@seZdZdS)z*MiscIOTest.test_blockingioerror.<locals>.CN)r/r0r1rrrr�Czsr�r�r()	rr`rrgr�r�rr�r�)rr�rgrr�rrr�test_blockingioerrorxs		
zMiscIOTest.test_blockingioerrorcCs\|j|jtj�|j|jtj�|j|jtj�|j|jtj�dS)N)rr�r��ABCMetar�r�r�)rrrr�	test_abcs�szMiscIOTest.test_abcscCsH|jtjddd��S}|j||j�|j||j�|j||j�|j||j�WdQX|jtjd��S}|j||j�|j||j�|j||j�|j||j�WdQX|jtjd��S}|j||j�|j||j�|j||j�|j||j�WdQXdS)Nr{r|rrz)	rrrdrr�r�ZassertNotIsInstancer�r�)rZ	abcmodulerrrr�_check_abc_inheritance�sz!MiscIOTest._check_abc_inheritancecCs|j|�dS)N)r�)rrrr�test_abc_inheritance�szMiscIOTest.test_abc_inheritancecCs|jt�dS)N)r�rR)rrrr�test_abc_inheritance_official�sz(MiscIOTest.test_abc_inheritance_officialcOsgt||�}t|�}|jt��}d}tj�WdQX|j|t|jj	d��dS)Nr)
rr�ZassertWarnsr�rr�rrZwarningrP)rrPr�rr	�cmrrr�_check_warn_on_dealloc�sz!MiscIOTest._check_warn_on_dealloccCsC|jtjddd�|jtjd�|jtjd�dS)Nr{r|rrz)r�rrd)rrrr�test_warn_on_dealloc�szMiscIOTest.test_warn_on_deallocc
s�g��fdd�}|j|�tj�\}}�||f7�|j|||�tj�\}}�||f7�tjdd��'}t|dd||�tj�WdQX|j	|g�dS)Ncsfx_�D]W}ytj|�Wqtk
r]}z|jtjkrK�nWYdd}~XqXqWdS)N)r�rFrE�errno�EBADF)r�rW)�fdsrr�cleanup_fds�s
z9MiscIOTest._check_warn_on_dealloc_fd.<locals>.cleanup_fdsr�Tr�F)
Z
addCleanupr��piper�r�r�rrr�rl)rrPr�r�r	rzr�r)r�r�_check_warn_on_dealloc_fd�s
z$MiscIOTest._check_warn_on_dealloc_fdcCs1|jddd�|jd�|jd�dS)Nr}r|rr	)r�)rrrr�test_warn_on_dealloc_fd�s
z"MiscIOTest.test_warn_on_dealloc_fdcCs�x�idd6idd6idd6dd6idd6idd6idd6dd6idd6id	d6id	d6dd6g	D][}xRttjd
�D]=}|jtj|�� }|jttj||�WdQXq�WqvWdS)Nrzr�r{rr|r	r}zw+zw+br()	r��pickleZHIGHEST_PROTOCOLrrrdrnro�dumps)rr�Zprotocolrrrr�
test_pickling�s





zMiscIOTest.test_picklingzfcntl required for this testcCs|jd�dS)Nr*ii@)�_test_nonblock_pipe_write)rrrr�test_nonblock_pipe_write_bigbuf�sz*MiscIOTest.test_nonblock_pipe_write_bigbufcCs|jd�dS)Ni)r�)rrrr�!test_nonblock_pipe_write_smallbuf�sz,MiscIOTest.test_nonblock_pipe_write_smallbufcCsXtj|tj�}|j|d�tj|tj|tjB�}|j|d�dS)Nr(rr\)�fcntlZF_GETFLZassertNotEqualZF_SETFLr��
O_NONBLOCKrl)rr�r�rKrrr�_set_non_blocking�szMiscIOTest._set_non_blockingcCs�g}g}tj�\}}|j|�|j|�|j|ddddd|�}|j|ddddd|�}|��|��xdD]}yPd
}	xCt|	ddg�|}
|j|
�|j|
�|	d
7}	q�WWq�|jk
r�}z�|j|j	d
t
j�|j|j	d|j�|dd|j�|d<|j|j
��d}
|j|
�|j|
�WYdd}~Xq�Xq�Wx�y|j�PWq�|jk
r,}z_|j|j	d
t
j�|j|j	d|j�|j|jd
�|j|j
��WYdd}~Xq�Xq�W|t|j
d�7}WdQXWdQXdj|�dj|�}}|j||�|j|j�|j|j�dS)Nr�r}r�Tr|r{�'�I�r��ar(r<sBLOCKEDr6)r�r�r�r\r\)r�r�r�rrrrr`rlrPr�ZEAGAINr�r8r��iterrWr�rD)rr�ZsentZreceivedr	rzZrfZwfrdr��msgrWrrrr��sL

!!



$
*"z$MiscIOTest._test_nonblock_pipe_writecCs<|jtjd��WdQX|jt|jtjd�dS)Nrzr)rrrdrn�FileExistsError)rrrr�test_create_fail
szMiscIOTest.test_create_failcCsc|jtjd��}|jd�WdQX|jtjd��}|jd|j��WdQXdS)NZxbsspamr})rrrdrrlr8)rrrrr�test_create_writes%
szMiscIOTest.test_create_writescCs |jt|jtjd�dS)Nzrwax+)rnr^rrrd)rrrr�test_open_allargs,
szMiscIOTest.test_open_allargsN)r/r0r1rfr�r�r�r�r�r�r�r�r�r�r�r�r�r ror�r�r�r�r�rrrrrrrr�!s*+
2r�c@sXeZdZeZdd�Zejed�dd��Zdd�Z	dd	�Z
d
S)�CMiscIOTestcCsKGdd�d|jj�}|�}td�}|jt|j|�dS)Nc@seZdZddd�ZdS)z<CMiscIOTest.test_readinto_buffer_overflow.<locals>.BadReaderr(cSsddS)Nrrrsrgi@Br)rr,rrrr87
szACMiscIOTest.test_readinto_buffer_overflow.<locals>.BadReader.readNr\)r/r0r1r8rrrr�	BadReader6
srr<)rRr�rmrnr^r-)rrr�rrrr�test_readinto_buffer_overflow4
s	z)CMiscIOTest.test_readinto_buffer_overflowz!Threading required for this test.cCs~djt��}td|�\}}|jj�}|jdkrd|jdjt��|�n|j|jd��dS)Na�if 1:
            import sys
            import time
            import threading

            file = sys.{stream_name}

            def run():
                while True:
                    file.write('.')
                    file.flush()

            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�localsrrr�r�rr�r)rZstream_namer�rKrhrrrr�&check_daemon_threads_shutdown_deadlock=
s	
z2CMiscIOTest.check_daemon_threads_shutdown_deadlockcCs|jd�dS)N�stdout)r)rrrr�,test_daemon_threads_shutdown_stdout_deadlocka
sz8CMiscIOTest.test_daemon_threads_shutdown_stdout_deadlockcCs|jd�dS)Nr)r)rrrr�,test_daemon_threads_shutdown_stderr_deadlockd
sz8CMiscIOTest.test_daemon_threads_shutdown_stderr_deadlockN)r/r0r1rRr	r ror[rrrrrrrr1
s
	$rc@seZdZeZdS)�PyMiscIOTestN)r/r0r1rTrRrrrrrh
sr�ntz%POSIX signals required for this test.c@seZdZdd�Zdd�Zdd�Zejed�dd	��Z	d
d�Z
dd
�Zej
d�dd��Zejdd��Zdd�Zdd�Zdd�Zdd�Zdd�Zejed�dd��Zdd �Zd!d"�Zd#S)$�SignalsTestcCstjtj|j�|_dS)N)�signal�SIGALRM�alarm_interrupt�oldalrm)rrrrreo
szSignalsTest.setUpcCstjtj|j�dS)N)rrr)rrrrrfr
szSignalsTest.tearDowncCsdddS)Nr(rr)r�sig�framerrrru
szSignalsTest.alarm_interruptz!Threading required for this test.c	#s�g���fdd�}tjd|�}d|_tj�\�}d|d<z�|jj||�}|j�tj	d�z<|j
t��'|j|t
jt|�d�WdQXWdtj	d	�|j�X�jtj�d��|j�|d	d�|dd
�g�Wdtj|�tj��y|j�Wn=tk
r�}z|jtjkrt�nWYdd}~XnXXdS)z�Check that a partial write, when it gets interrupted, properly
        invokes the signal handler, and bubbles up the exception raised
        in the latter.csNttd�r+tjtjtjg�ntj�d�}�j|�dS)N�pthread_sigmaskr()r�rr�	SIG_BLOCKrr�r8r)rX)r	�read_resultsrrr�~
sz2SignalsTest.check_interrupted_write.<locals>._readrZTFr�r(Nrr<)r[r\�daemonr�r�rRr�startr�alarmrnr�rr�
PIPE_MAX_SIZErrWrr8rlrFrEr�r�)	r�itemr�
fdopen_kwargsr�rrz�wiorWr)r	rr�check_interrupted_writex
s0	


,
.

z#SignalsTest.check_interrupted_writecCs |jdddddd�dS)Nsxyr�r{r|r)r#)rrrr�!test_interrupted_write_unbuffered�
sz-SignalsTest.test_interrupted_write_unbufferedcCs|jdddd�dS)Nsxyr�r{)r#)rrrr�test_interrupted_write_buffered�
sz+SignalsTest.test_interrupted_write_bufferedrCcCs |jdddddd�dS)N�xysxyr�rzr
r�)r#)rrrr�test_interrupted_write_text�
sz'SignalsTest.test_interrupted_write_textc	s,��fdd�}tjtj|�tj�\}}|jj||��z�tjd�|jtt	f��V}xLx+t
d�D]}�j���j�q�Wtj
|t��d�qzWWdQX|j}t|t	�r|jt|�jd�t|��nWd�j�tj|�XdS)Ncs�j��dddS)Nr(r)r)rP)r+r"rr�on_alarm�
s
z3SignalsTest.check_reentrant_write.<locals>.on_alarmr(r�zreentrant call)rrr�r�rRrrrnr��RuntimeErrorr�rr�r8rr�
isinstancer�rr
rF)	rr+r!r(r	rzr�r�r�r)r+r"r�check_reentrant_write�
s"

$	,
z!SignalsTest.check_reentrant_writecCs|jddd�dS)Nsxyr�r{)r+)rrrr�test_reentrant_write_buffered�
sz)SignalsTest.test_reentrant_write_bufferedcCs|jddddd�dS)Nr&r�rzr
r�)r+)rrrr�test_reentrant_write_text�
sz%SignalsTest.test_reentrant_write_textcs�tj�\}�d|d<�fdd�}tjtj|�zU|jj||�}tj�d�tjd�|j||j	d��d�Wd	|j
�tj
��tj
|�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�cstj�d�dS)Nsbar)r�r)rr)rzrr�
alarm_handler�
sz?SignalsTest.check_interrupted_read_retry.<locals>.alarm_handlersfoor(rgZfoobarN)r�r�rrrRrrrrlr8rF)rr�r!r	r.Zrior)rzr�check_interrupted_read_retry�
s

#

z(SignalsTest.check_interrupted_read_retrycCs|jdd�dd�dS)NcSs
|jd�S)Nr)r�)rrrrr��
szBSignalsTest.test_interrupted_read_retry_buffered.<locals>.<lambda>r�r})r/)rrrr�$test_interrupted_read_retry_buffered�
sz0SignalsTest.test_interrupted_read_retry_bufferedcCs|jdd�dd�dS)NcSs|S)Nr)rrrrr��
sz>SignalsTest.test_interrupted_read_retry_text.<locals>.<lambda>r�r	)r/)rrrr� test_interrupted_read_retry_text�
sz,SignalsTest.test_interrupted_read_retry_textc	s�tjd��tj}tj�\�}d|d<g�d�d������fdd�}tjd|��d�_�fd	d
�}�fdd��tjtj	|�z�|j
j||�}tjd
�|j
||j||��|j�d��j�|j��|j
|tdd��D���Wdd�tj|�tj��y|j�Wn=tk
r�}z|jtjkr��nWYdd}~XnXXdS)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�Ncs�y\xU�sZxH��j�gggd�dkrVtj�d�}�j|�qWqWWn+tk
r�}z|�WYdd}~XnXdS)Ng�?ri)r2r�r8r�
BaseException)rXr�)r�r	rr2�write_finishedrrr�s	(z8SignalsTest.check_interrupted_write_retry.<locals>._readrZTcs$tjtj��tjd�dS)Nr()rrr)rr)�alarm2rr�alarm1sz9SignalsTest.check_interrupted_write_retry.<locals>.alarm1cs�j�dS)N)r)rr)rrrr5sz9SignalsTest.check_interrupted_write_retry.<locals>.alarm2r(css|]}t|�VqdS)N)r)r]rrrr�	<genexpr>"sz<SignalsTest.check_interrupted_write_retry.<locals>.<genexpr>)r�
import_modulerr�r�r[r\rrrrRrrrlrr�rWr��sumrFrEr�r�)	rr r!rdrzr�r6r"rWr)r5r�r	rr2rr4r�check_interrupted_write_retry�
s<	
		



'

z)SignalsTest.check_interrupted_write_retrycCs|jddd�dS)Nrrr�r{)r:)rrrr�%test_interrupted_write_retry_buffered0sz1SignalsTest.test_interrupted_write_retry_bufferedcCs|jddddd�dS)Nrr�rzr
r)r:)rrrr�!test_interrupted_write_retry_text3sz-SignalsTest.test_interrupted_write_retry_textN)r/r0r1rerfrr ror[r#r$r%rZrequires_freebsd_versionr'r�r+r,r-r/r0r1r:r;r<rrrrrl
s />rc@seZdZeZdS)�CSignalsTestN)r/r0r1rRrrrrr=7sr=c@s"eZdZeZdZdZdS)�
PySignalsTestN)r/r0r1rTrRr,r-rrrrr>:sr>c
s�tttttttttt	t
ttt
tttttf}tttttttf}tjdg}dd�|D�}dd�|D�}t��|j�fdd�|D��|j�fdd�|D��tj|d<x�|D]�}|j j!d	�r5xo|j"�D]\}}t#|||�qWq�|j j!d
�r�x-|j"�D]\}}t#|||�qTWq�q�Wt$j%dd�|D��}	|	S)
Nr�cSs"i|]}tt|�|�qSr)r�rR)r]rrrr�
<dictcomp>Us	zload_tests.<locals>.<dictcomp>cSs"i|]}tt|�|�qSr)r�rT)r]rrrrr?Vs	c3s)|]}|j�d|jfVqdS)r�N)r/)r]r)�globsrrr7Xszload_tests.<locals>.<genexpr>c3s)|]}|j�d|jfVqdS)�PyN)r/)r]r)r@rrr7Ysrr�rAcSsg|]}tj|��qSr)r Z	makeSuite)r]r�rrrr^ds	zload_tests.<locals>.<listcomp>)&r�r�rqrxr�r�r�r�r�r�rr�r�r�r�rrr=r>r5r;rIrCrUrNrrRr��globalsr(rT�OpenWrapperr/r
rG�setattrr Z	TestSuite)
rPrDZmocksZall_membersZc_io_nsZpy_io_nsr�rr�Zsuiter)r@r�
load_testsCs8	  

rE�__main__)`r2r�r�r�r%r�r�r_rr�rbr r�r��collectionsrr�	itertoolsrrr�rZtest.script_helperrrr�rRZ_pyiorTr[�ImportErrorr�rrr�r3r4r5r9r:r;rArBrCrGrHrIr�rLrMrNrQrSrUr_raZTestCaserbr�r�r�r"r)rqrxryr�r�r�r�r�r�r�r�r�r��registerrrrr�r�r�r�r�r�rrr�rrr=r>rEr/�mainrrrr�<module>s�

8

,����0�-��W+���a0j�7%�	$