a
    äze¯.  ã                   @   sè   d dl Z d dlZd dlZd dlmZ d dlmZ d dlZd dlZd dl	m
Z
mZ d dlmZ d dlmZ G dd„ dƒZG d	d
„ d
eejƒZG dd„ deejƒZG dd„ dƒZG dd„ deejƒZG dd„ deejƒZedkräe ¡  dS )é    N)Úarray)Úproxy)ÚTESTFNÚ
gc_collect)Úsupport)ÚUserListc                   @   st   e Zd Zdd„ Zdd„ Zdd„ Zdd„ Zd	d
„ Zdd„ Zdd„ Z	dd„ Z
dd„ Zdd„ Zdd„ Zdd„ Zdd„ ZdS )ÚAutoFileTestsc                 C   s   |   td¡| _d S )NÚwb)Úopenr   Úf©Úself© r   ú$/usr/lib/python3.9/test/test_file.pyÚsetUp   s    zAutoFileTests.setUpc                 C   s   | j r| j  ¡  t t¡ d S ©N)r   Úcloser   Úunlinkr   r   r   r   r   ÚtearDown   s    
zAutoFileTests.tearDownc                 C   sT   t | jƒ}| d¡ |  | j ¡ | ¡ ¡ | j ¡  d | _tƒ  |  tt	|d¡ d S )Ns
   teststringÚtell)
r   r   ÚwriteÚassertEqualr   r   r   ÚassertRaisesÚReferenceErrorÚgetattr)r   Úpr   r   r   ÚtestWeakRefs   s    


zAutoFileTests.testWeakRefsc                 C   s   | j }|j |j |j d S r   )r   ÚnameÚmodeÚclosed©r   r   r   r   r   ÚtestAttributes#   s    zAutoFileTests.testAttributesc                 C   sV   | j  d¡ | j  ¡  tddƒ}|  td¡| _ | j  |¡}|  d| ¡ d |… ¡ d S )Nó   12Úbó
   xxxxxxxxxxÚrb)	r   r   r   r   r
   r   Úreadintor   Útobytes)r   ÚaÚnr   r   r   ÚtestReadinto*   s    

zAutoFileTests.testReadintoc                 C   sD   t ddƒ}| j ¡  |  td¡| _t| jdƒr@|  t| jj|¡ d S )Nr#   r$   Úrr&   )	r   r   r   r
   r   Úhasattrr   Ú	TypeErrorr&   )r   r(   r   r   r   ÚtestReadinto_text3   s
    

zAutoFileTests.testReadinto_textc                 C   sJ   t ddgƒ}| j |¡ | j ¡  |  td¡| _| j ¡ }|  |d¡ d S )Nó   1ó   2r%   r"   )r   r   Ú
writelinesr   r
   r   Úreadr   )r   ÚlÚbufr   r   r   ÚtestWritelinesUserList;   s    

z$AutoFileTests.testWritelinesUserListc                 C   s   |   t| jjg d¢¡ d S ©N)é   é   é   ©r   r-   r   r1   r   r   r   r   ÚtestWritelinesIntegersD   s    z$AutoFileTests.testWritelinesIntegersc                 C   s"   t g d¢ƒ}|  t| jj|¡ d S r6   )r   r   r-   r   r1   )r   r3   r   r   r   ÚtestWritelinesIntegersUserListH   s    z,AutoFileTests.testWritelinesIntegersUserListc                 C   s,   G dd„ dƒ}|   t| jj|ƒ |ƒ g¡ d S )Nc                   @   s   e Zd ZdS )z8AutoFileTests.testWritelinesNonString.<locals>.NonStringN)Ú__name__Ú
__module__Ú__qualname__r   r   r   r   Ú	NonStringO   s   r@   r:   )r   r@   r   r   r   ÚtestWritelinesNonStringM   s    
ÿz%AutoFileTests.testWritelinesNonStringc                 C   sd   | j }|  |jt¡ |  | ¡ ¡ |  |j¡ t|dƒrL|  t	t
f|jd¡ | ¡  |  |j¡ d S )Nr&   Ú )r   r   r   r   ZassertFalseÚisattyr   r,   r   ÚOSErrorr-   r&   r   Ú
assertTruer    r   r   r   Ú
testErrorsU   s    
zAutoFileTests.testErrorsc                 C   sÈ   ddddddddd	d
ddg ffdg}|  d¡ | j d d d ¡ |  | jj¡ |D ](\}}t| j|ƒ}| jt|g|¢R Ž  qP|  | j d d d ¡d ¡ zdd  W n$   |  | jjt	 
¡ Ž d ¡ Y n0 d S )N)Úfilenor   )Úflushr   )rC   r   )Ú__next__r   ©r2   r   )r   )ó    ©Úreadliner   ©Ú	readlinesr   )Úseek)r   )r   r   r1   )Ú__iter__r   )Útruncater   r7   r   )Úappendr   Ú__exit__rE   r   r   r   Ú
ValueErrorr   ÚsysÚexc_info)r   ÚmethodsÚ
methodnameÚargsÚmethodr   r   r   ÚtestMethods`   s2    ô
zAutoFileTests.testMethodsc                 C   s   |   t| jj¡ d S r   )r   rD   r   r2   r   r   r   r   ÚtestReadWhenWriting‚   s    z!AutoFileTests.testReadWhenWritingN)r=   r>   r?   r   r   r   r!   r*   r.   r5   r;   r<   rA   rF   r\   r]   r   r   r   r   r      s   
		"r   c                   @   s   e Zd ZejZdS )ÚCAutoFileTestsN©r=   r>   r?   Úior
   r   r   r   r   r^   …   s   r^   c                   @   s   e Zd ZeejƒZdS )ÚPyAutoFileTestsN©r=   r>   r?   ÚstaticmethodÚpyior
   r   r   r   r   ra   ˆ   s   ra   c                   @   sL   e Zd Zdd„ Zdd„ Zdd„ Zdd„ Zd	d
„ Zdd„ Zdd„ Z	dd„ Z
dS )ÚOtherFileTestsc                 C   s   t  t¡ d S r   )r   r   r   r   r   r   r   r   Ž   s    zOtherFileTests.tearDownc              	   C   sX   |   td¡ ¡  dD ]>}z|   t|¡}W n ty:   Y q0 | ¡  |  d| ¡ qd S )Nr	   )rB   ZaUzwU+zU+z+UzrU+z%r is an invalid file mode)r
   r   r   rU   Úfail)r   r   r   r   r   r   ÚtestModeStrings‘   s    zOtherFileTests.testModeStringsc                 C   sž   t jdkr|  d¡ t j ¡ s(|  d¡ |  ttf¡ t j d¡ W d   ƒ n1 sX0    Y  |  ttf¡ t j 	¡  W d   ƒ n1 s0    Y  d S )NZosf1V5zE sys.stdin.seek(-1) may crash the interpreter on OSF1. Test manually.z stdin must be a TTY in this testéÿÿÿÿ)
rV   ÚplatformZskipTestÚstdinrC   r   ÚIOErrorrU   rP   rR   r   r   r   r   Ú	testStdin   s    
ÿ

*zOtherFileTests.testStdinc              
   C   sˆ   d}z|   t|¡}W nX tyl } z@|jd dkrXt|ƒ}t|v sJ||vrX|  d| ¡ W Y d }~n d }~0 0 | ¡  |  d| ¡ d S )NZqwertyr   z&bad error message for invalid mode: %szno error for invalid mode: %s)r
   r   rU   rZ   Ústrrf   r   )r   Zbad_moder   ÚmsgÚsr   r   r   ÚtestBadModeArgument­   s    $z"OtherFileTests.testBadModeArgumentc              
   C   s²   zf|   td|¡}| t|ƒ d¡¡ | ¡  | ¡  |   td|¡}t| ¡  d¡ƒ}| ¡  | ¡  W n: t	y  } z"|  
d|t|ƒf ¡ W Y d }~n
d }~0 0 |  ||¡ d S )Nr	   Úasciir%   z error setting buffer size %d: %s)r
   r   r   rm   Úencoder   Úintr2   ÚdecoderD   rf   r   )r   ro   r   Údrn   r   r   r   Ú_checkBufferSize½   s    ,zOtherFileTests._checkBufferSizec              	   C   s~   dD ]>}t j| dtd |  |¡ W d   ƒ q1 s80    Y  q|  td¡ |  d¡ W d   ƒ n1 sp0    Y  d S )N)rh   r   i   zline buffering)ÚmessageÚcategoryr7   )r   Zcheck_no_warningsÚRuntimeWarningrv   ZassertWarnsRegex)r   ro   r   r   r   ÚtestSetBufferSizeË   s    þ*z OtherFileTests.testSetBufferSizec                 C   sÔ   |   td¡}z¸| d¡ | ¡  |   td¡}| d¡}|dkrL|  d| ¡ | ¡ dkrj|  d| ¡  ¡ | ¡  | ¡ dkr|  d| ¡  ¡ | ¡  tj	 
t¡}|dkrº|  d	| ¡ W | ¡  n
| ¡  0 d S )
Nr	   s   12345678901zrb+é   s   12345z(Read on file opened for update failed %rzFile pos after read wrong %dz!File pos after ftruncate wrong %dz"File size after ftruncate wrong %d)r
   r   r   r   r2   rf   r   rR   ÚosÚpathÚgetsize)r   r   ÚdataÚsizer   r   r   ÚtestTruncateOnWindowsÙ   s$    

z$OtherFileTests.testTruncateOnWindowsc                 C   s¼  d}d}|t |ƒ rJ dƒ‚|t |ƒ }g d¢}ddddtd	d
ƒffg}|  td¡}| || ¡ | |¡ | ¡  |D ]>\}}|  td¡}	|  t|	ƒ|¡ t	|	|ƒ}
|
|Ž  |	 ¡  qx|  td¡}	t
|ƒD ]}t|	ƒ qÌ| d¡}z|	 ¡ }W n ty   |  d¡ Y n0 ||kr,|  d||f ¡ | d¡}td	dt |ƒ ƒ}z|	 |¡ W n tyt   |  d¡ Y n0 | ¡ }||krš|  d||f ¡ | d¡}z|	 t |ƒ¡}W n tyÔ   |  d¡ Y n0 ||krò|  d||f ¡ z|	 ¡ }W n ty   |  d¡ Y n0 ||kr:|  d||f ¡ |	 ¡  |  td¡}	z^|	D ]}qTz&|	 ¡  |	 |¡ |	 ¡  |	 ¡  W n ty    |  d¡ Y n0 W |	 ¡  n
|	 ¡  0 d S )Ni @  s   ham
z*dataoffset must be multiple of len(filler))s   spam, spam and eggs
s   eggs, spam, ham and spam
s   saussages, spam, spam and eggs
s   spam, ham, spam and eggs
s(   spam, spam, spam, spam, spam, ham, spam
s   wonderful spaaaaaam.
rL   rJ   rN   r&   r#   sd                                                                                                       r	   r%   r   zLreadline() after next() with supposedly empty iteration-buffer failed anywayzEreadline() after next() with empty buffer failed. Got %r, expected %ró    zLreadinto() after next() with supposedly empty iteration-buffer failed anywayzEreadinto() after next() with empty buffer failed. Got %r, expected %rzHread() after next() with supposedly empty iteration-buffer failed anywayzAread() after next() with empty buffer failed. Got %r, expected %rzMreadlines() after next() with supposedly empty iteration-buffer failed anywayzFreadlines() after next() with empty buffer failed. Got %r, expected %rz'read* failed after next() consumed file)Úlenr   r
   r   r   r1   r   r   Únextr   ÚrangeÚpoprM   rU   rf   r&   r'   r2   rO   )r   Z
dataoffsetZfillerZnchunksZ	testlinesrX   ZbagrY   rZ   r   ÚmethÚiZtestlineÚliner4   Úlinesr   r   r   ÚtestIterationõ   s’    ÿÿ


	


ÿ

ÿ

ÿ
ÿ
zOtherFileTests.testIterationN)r=   r>   r?   r   rg   rl   rp   rv   rz   r   r‹   r   r   r   r   re   Œ   s   re   c                   @   s   e Zd ZejZdS )ÚCOtherFileTestsNr_   r   r   r   r   rŒ   V  s   rŒ   c                   @   s   e Zd ZeejƒZdS )ÚPyOtherFileTestsNrb   r   r   r   r   r   Y  s   r   Ú__main__)rV   r|   Zunittestr   Úweakrefr   r`   Z_pyiord   Ztest.supportr   r   Útestr   Úcollectionsr   r   ZTestCaser^   ra   re   rŒ   r   r=   Úmainr   r   r   r   Ú<module>   s$   w K