B
    u9at*  ã               @   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
 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)Ú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.7/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   sN   t | jƒ}| d¡ |  | j ¡ | ¡ ¡ | j ¡  d | _|  tt|d¡ d S )Ns
   teststringÚtell)	r   r
   ÚwriteÚassertEqualr   r   ÚassertRaisesÚReferenceErrorÚgetattr)r   Úpr   r   r   ÚtestWeakRefs   s    


zAutoFileTests.testWeakRefsc             C   s   | j }|j |j |j d S )N)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 )Ns   12Úbs
   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   s
   xxxxxxxxxxÚrr    )	r   r
   r   r	   r   Úhasattrr   Ú	TypeErrorr    )r   r"   r   r   r   ÚtestReadinto_text2   s
    

zAutoFileTests.testReadinto_textc             C   sJ   t ddgƒ}| j |¡ | j ¡  |  td¡| _| j ¡ }|  |d¡ d S )Nó   1ó   2r   s   12)r   r
   Ú
writelinesr   r	   r   Úreadr   )r   ÚlÚbufr   r   r   ÚtestWritelinesUserList:   s    

z$AutoFileTests.testWritelinesUserListc             C   s   |   t| jjdddg¡ d S )Né   é   é   )r   r'   r
   r+   )r   r   r   r   ÚtestWritelinesIntegersC   s    z$AutoFileTests.testWritelinesIntegersc             C   s$   t dddgƒ}|  t| jj|¡ d S )Nr0   r1   r2   )r   r   r'   r
   r+   )r   r-   r   r   r   ÚtestWritelinesIntegersUserListG   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   Ú	NonStringN   s   r8   )r   r'   r
   r+   )r   r8   r   r   r   ÚtestWritelinesNonStringL   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   Ú
assertTrue)r   r
   r   r   r   Ú
testErrorsT   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¡ x.|D ]&\}}t| j|ƒ}| jt|f|žŽ  qRW |  | j d d d ¡d ¡ ydd  W n$   |  | jjt	 
¡ Ž d ¡ Y nX d S )N)Úfilenor   )Úflushr   )r;   r   )Ú__next__r   )r,   r   )r   )ó    )Úreadliner   )Ú	readlinesr   )Úseek)r   )r   r   r+   )Ú__iter__r   )Útruncater   r0   r   )Úappendr
   Ú__exit__r=   r   r   r   Ú
ValueErrorr   ÚsysÚexc_info)r   ÚmethodsÚ
methodnameÚargsÚmethodr   r   r   ÚtestMethods_   s0    
zAutoFileTests.testMethodsc             C   s   |   t| jj¡ d S )N)r   r<   r
   r,   )r   r   r   r   ÚtestReadWhenWriting   s    z!AutoFileTests.testReadWhenWritingN)r5   r6   r7   r   r   r   r   r$   r(   r/   r3   r4   r9   r>   rQ   rR   r   r   r   r   r      s   			"r   c               @   s   e Zd ZejZdS )ÚCAutoFileTestsN)r5   r6   r7   Úior	   r   r   r   r   rS   „   s   rS   c               @   s   e Zd ZeejƒZdS )ÚPyAutoFileTestsN)r5   r6   r7   ÚstaticmethodÚpyior	   r   r   r   r   rU   ‡   s   rU   c               @   s<   e Z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 )N)r   r   r   )r   r   r   r   r      s    zOtherFileTests.tearDownc          	   C   s^   |   td¡ ¡  xHdD ]@}y|   t|¡}W n tk
r>   Y qX | ¡  |  d| ¡ qW d S )Nr   )r:   ZaUzwU+zU+z+UzrU+z%r is an invalid file mode)r	   r   r   rJ   Úfail)r   r   r
   r   r   r   ÚtestModeStrings   s    
zOtherFileTests.testModeStringsc          
   C   s†   d}y|   t|¡}W nV tk
rj } z8|jd dkrZt|ƒ}t|ksL||krZ|  d| ¡ W d d }~X Y nX | ¡  |  d| ¡ d S )NZqwertyr   z&bad error message for invalid mode: %szno error for invalid mode: %s)r	   r   rJ   rO   ÚstrrY   r   )r   Zbad_moder
   ÚmsgÚsr   r   r   ÚtestBadModeArgumentœ   s     z"OtherFileTests.testBadModeArgumentc             C   s¾   x¸dD ]°}yf|   td|¡}| t|ƒ d¡¡ | ¡  | ¡  |   td|¡}t| ¡  d¡ƒ}| ¡  | ¡  W n8 t	k
r¨ } z|  
d|t|ƒf ¡ W d d }~X Y nX |  ||¡ qW d S )N)éÿÿÿÿr   r0   i   r   Úasciir   z error setting buffer size %d: %s)r	   r   r   r[   Úencoder   Úintr,   Údecoder<   rY   r   )r   r]   r
   Údr\   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 d | ¡  X 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   r,   rY   r   rG   ÚosÚpathÚgetsize)r   r
   ÚdataÚsizer   r   r   ÚtestTruncateOnWindows½   s$    

z$OtherFileTests.testTruncateOnWindowsc             C   s¾  d}d}|t |ƒ }ddddddg}d	d
ddtddƒffg}|  td¡}| || ¡ | |¡ | ¡  xF|D ]>\}}|  td¡}	|  t|	ƒ|¡ t	|	|ƒ}
|
|Ž  |	 ¡  qnW |  td¡}	xt
|ƒD ]}t|	ƒ qÆW | d¡}y|	 ¡ }W n  tk
r   |  d¡ Y nX ||kr*|  d||f ¡ | d¡}tddt |ƒ ƒ}y|	 |¡ W n  tk
rt   |  d¡ Y nX | ¡ }||krš|  d||f ¡ | d¡}y|	 t |ƒ¡}W n  tk
rÖ   |  d¡ Y nX ||krô|  d||f ¡ y|	 ¡ }W n  tk
r    |  d¡ Y nX ||kr>|  d||f ¡ |	 ¡  |  td¡}	z\x|	D ]}qZW y&|	 ¡  |	 |¡ |	 ¡  |	 ¡  W n  tk
rª   |  d¡ Y nX W d |	 ¡  X d S )Ni @  s   ham
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.
)rC   r   )r,   r   )rD   r   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   r+   r   r   Únextr   ÚrangeÚpoprC   rJ   rY   r    r!   r,   rD   )r   Z
dataoffsetZfillerZnchunksZ	testlinesrM   ZbagrN   rO   r
   ZmethÚiZtestlineÚliner.   Úlinesr   r   r   ÚtestIterationÙ   sŒ    

	








zOtherFileTests.testIterationN)	r5   r6   r7   r   rZ   r^   re   rl   ru   r   r   r   r   rX   ‹   s   rX   c               @   s   e Zd ZejZdS )ÚCOtherFileTestsN)r5   r6   r7   rT   r	   r   r   r   r   rv   :  s   rv   c               @   s   e Zd ZeejƒZdS )ÚPyOtherFileTestsN)r5   r6   r7   rV   rW   r	   r   r   r   r   rw   =  s   rw   Ú__main__)rK   rg   Zunittestr   Úweakrefr   rT   Z_pyiorW   Ztest.supportr   Ztestr   Úcollectionsr   r   ZTestCaserS   rU   rX   rv   rw   r5   Úmainr   r   r   r   Ú<module>   s$   v 0