B
    u9aÀL  ã               @   s  d dl Z d dlZ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m	Z	 d dl
mZmZmZmZmZmZmZ d dlmZ d dlZd dl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dd„ Zedkreƒ  dS )é    N)Úarray)Úproxy)Úwraps)ÚTESTFNÚTESTFN_UNICODEÚcheck_warningsÚrun_unittestÚmake_bad_fdÚcpython_onlyÚ	swap_attr)ÚUserListc               @   sz  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d„ Zdd„ Zdd „ Zd!d"„ Zd#d$„ Zd%d&„ Zd'd(„ Ze ejd)kd*¡d+d,„ ƒZd-d.„ Zd/d0„ Zed1d2„ ƒZed3d4„ ƒZed5d6„ ƒZ ed7d8„ ƒZ!ed9d:„ ƒZ"ed;d<„ ƒZ#ed=d>„ ƒZ$ed?d@„ ƒZ%edAdB„ ƒZ&edCdD„ ƒZ'dEdF„ Z(edGdH„ ƒZ)edIdJ„ ƒZ*edKdL„ ƒZ+dMS )NÚAutoFileTestsc             C   s   |   td¡| _d S )NÚw)ÚFileIOr   Úf)Úself© r   ú!/usr/lib/python3.7/test_fileio.pyÚsetUp   s    zAutoFileTests.setUpc             C   s   | j r| j  ¡  t t¡ d S )N)r   ÚcloseÚosÚremover   )r   r   r   r   ÚtearDown   s    
zAutoFileTests.tearDownc             C   sV   t | jƒ}| ttdƒƒ¡ |  | j ¡ | ¡ ¡ | j ¡  d | _|  t	t
|d¡ d S )Né
   Útell)r   r   ÚwriteÚbytesÚrangeÚassertEqualr   r   ÚassertRaisesÚReferenceErrorÚgetattr)r   Úpr   r   r   ÚtestWeakRefs   s    

zAutoFileTests.testWeakRefsc             C   sÆ   | j  ttdƒƒ¡ |  | j  ¡ d¡ | j  d¡ |  | j  ¡ d¡ | j  d¡ |  | j  ¡ d¡ | j  dd¡ |  | j  ¡ d¡ | j  dd¡ |  | j  ¡ d¡ | j  dd¡ |  | j  ¡ d¡ d S )	Né   r   r   é   é   é   éûÿÿÿé   )r   r   r   r   r   r   Úseek)r   r   r   r   ÚtestSeekTell(   s    zAutoFileTests.testSeekTellc             C   sJ   | j }|  |jd¡ |  |jd¡ x"dD ]}|  ttft||d¡ q(W d S )NÚwbF)ÚmodeÚclosedZoops)r   r   r-   r.   r   ÚAttributeErrorÚ	TypeErrorÚsetattr)r   r   Úattrr   r   r   ÚtestAttributes6   s    

zAutoFileTests.testAttributesc             C   s@   t j}ttdƒr,t | j ¡ ¡}t|d|ƒ}|  | jj	|¡ d S )NÚfstatÚ
st_blksize)
ÚioÚDEFAULT_BUFFER_SIZEÚhasattrr   r4   r   Úfilenor!   r   Ú_blksize)r   ZblksizeZfstr   r   r   ÚtestBlksizeB   s
    
zAutoFileTests.testBlksizec          	   C   sh   | j  tddddgƒ¡ | j  ¡  tdƒ}|  td¡}| |¡}W d Q R X |  |d¡ |  |d¡ d S )	Nr&   r)   r   éÿ   s   abcdefghÚrs    ÿefghé   )	r   r   r   r   Ú	bytearrayr   r   Úreadintor   )r   Zbar   Únr   r   r   ÚtestReadintoByteArrayL   s    
z#AutoFileTests.testReadintoByteArrayc          	   C   sÄ   | j  tddddgƒ¡ | j  ¡  ttdƒƒ}|  td¡}| |¡}W d Q R X |  	|d¡ |  	|d¡ ttdƒƒj
d	ddgd
}|  td¡}| |¡}W d Q R X |  	t|ƒd¡ |  	|d¡ d S )Nr&   r)   r   r<   s   abcdefghr=   s    ÿefghr>   ÚH)Úshape)r   r   r   r   Ú
memoryviewr?   r   r   r@   r   Úcast)r   Úmr   rA   r   r   r   Ú_testReadintoMemoryviewV   s    
z%AutoFileTests._testReadintoMemoryviewc             C   s$  | j  tddddgƒ¡ | j  ¡  tddƒ}|  td¡}| |¡}W d Q R X |  |tddddddd	d
dgƒ¡ |  |d¡ tddƒ}|  td¡}| |¡}W d Q R X |  |tddddddd	d
dgƒ¡ |  |d¡ tddƒ}|  td¡}| |¡}W d Q R X |  |tddƒ¡ |  |d¡ d S )Nr&   r)   r   r<   ÚBs   abcdefghr=   ée   éf   ég   éh   r>   ÚbéÿÿÿÿÚIs    ÿefgh)	r   r   r   r   r   r   r   r@   r   )r   Úar   rA   r   r   r   Ú_testReadintoArrayf   s"    

"
"
z AutoFileTests._testReadintoArrayc             C   sF   ddg}| j  |¡ | j  ¡  |  td¡| _ | j  ¡ }|  |d¡ d S )Ns   123s   456Úrbs   123456)r   Ú
writelinesr   r   r   Úreadr   )r   ÚlÚbufr   r   r   ÚtestWritelinesList|   s    

z AutoFileTests.testWritelinesListc             C   sJ   t ddgƒ}| j |¡ | j ¡  |  td¡| _| j ¡ }|  |d¡ d S )Ns   123s   456rS   s   123456)r   r   rT   r   r   r   rU   r   )r   rV   rW   r   r   r   ÚtestWritelinesUserList„   s    

z$AutoFileTests.testWritelinesUserListc             C   s@   |   t| jjdddg¡ |   t| jjd ¡ |   t| jjd¡ d S )Nr&   r)   é   Úabc)r   r0   r   rT   )r   r   r   r   ÚtestWritelinesErrorŒ   s    z!AutoFileTests.testWritelinesErrorc             C   st   | j  d¡ | j  ¡  |  td¡| _ |  | j  d ¡d¡ | j  d¡ |  | j  d ¡d¡ |  | j  	d ¡ddg¡ d S )Ns
   hi
bye
abcr=   r   s   hi
s   bye
s   abc)
r   r   r   r   r   r   rU   r*   ÚreadlineÚ	readlines)r   r   r   r   Útest_none_args‘   s    
zAutoFileTests.test_none_argsc             C   s   |   t| jjd¡ d S )NzHello!)r   r0   r   r   )r   r   r   r   Útest_rejectš   s    zAutoFileTests.test_rejectc             C   s|   |   t| jƒd| j| jj| jjf ¡ | j`|   t| jƒd| j| j ¡ | jjf ¡ | j ¡  |   t| jƒd| jf ¡ d S )Nz(<%s.FileIO name=%r mode=%r closefd=True>z&<%s.FileIO fd=%r mode=%r closefd=True>z<%s.FileIO [closed]>)r   Úreprr   Ú
modulenameÚnamer-   r9   r   )r   r   r   r   ÚtestRepr   s    
zAutoFileTests.testReprc          	   C   s`   t  tt j¡}z@| j|ddd&}|  t|ƒd| j|j|j	f ¡ W d Q R X W d t  
|¡ X d S )Nr=   F)Úclosefdz)<%s.FileIO name=%r mode=%r closefd=False>)r   Úopenr   ÚO_RDONLYr   r   ra   rb   rc   r-   r   )r   Úfdr   r   r   r   ÚtestReprNoCloseFD©   s    
"zAutoFileTests.testReprNoCloseFDc          
   C   s@   t | jd| jƒ& |  t¡ t| jƒ W d Q R X W d Q R X d S )Nrc   )r   r   r   ÚRuntimeErrorra   )r   r   r   r   ÚtestRecursiveRepr³   s    zAutoFileTests.testRecursiveReprc             C   s„   | j }|  | ¡ ¡ |  |j¡ |  t|jd¡ | ¡  |  |j¡ |  	t
d¡}|  t|jd¡ |  |j¡ | ¡  |  |j¡ d S )Nr   r=   Ú )r   ZassertFalseÚisattyr.   r   Ú
ValueErrorrU   r   Ú
assertTruer   r   r0   r@   )r   r   r   r   r   Ú
testErrors¹   s    zAutoFileTests.testErrorsc             C   sê   ddddddddd	d
ddg}| j  ¡  |  | j j¡ x$|D ]}t| j |ƒ}|  t|¡ q:W |  t| j j¡ |  t| j jt	dƒ¡ |  t| j j
¡ |  t| j j
d¡ |  t| j j¡ |  t| j jd¡ |  t| j j¡ |  t| j jd¡ d S )Nr9   rm   ÚseekableÚreadableÚwritablerU   Úreadallr]   r^   r   ÚtruncateÚflushr&   r   ó    )r   r   ro   r.   r!   r   rn   r0   r@   r?   r*   r   rT   )r   ÚmethodsZ
methodnameÚmethodr   r   r   ÚtestMethodsÇ   s     



zAutoFileTests.testMethodsc          
   C   s^   y|   dd¡ W n> tk
rN } z |  |jd¡ |  |jd¡ W d d }~X Y nX |  d¡ d S )NÚ.r=   r   zShould have raised OSError)r   ÚOSErrorZassertNotEqualÚerrnor   ÚfilenameÚfail)r   Úer   r   r   ÚtestOpendirÝ   s     zAutoFileTests.testOpendirÚntz&test only works on a POSIX-like systemc          	   C   sP   t  dt j¡}|  t¡}|  |d¡ W d Q R X t  |¡ |  |jj	t	j
¡ d S )Nr{   r=   )r   rf   rg   r   r|   r   r   r   Z	exceptionr}   ZEISDIR)r   rh   Úcmr   r   r   ÚtestOpenDirFDé   s
    
zAutoFileTests.testOpenDirFDc                s   t ˆ ƒ‡ fdd„ƒ}|S )Nc                sN   | j }t | ¡ ¡ zˆ | |ƒ W d y| j  ¡  W n tk
rF   Y nX X d S )N)r   r   r   r9   r|   )r   r   )Úfuncr   r   Úwrapperô   s    z'AutoFileTests.ClosedFD.<locals>.wrapper)r   )r…   r†   r   )r…   r   ÚClosedFDó   s    zAutoFileTests.ClosedFDc                s   t ˆ ƒ‡ fdd„ƒ}|S )Nc                s   | j }t | ¡ ¡ zPyˆ | |ƒ W n2 tk
rV } z|  |jtj¡ W d d }~X Y nX |  d¡ W d y| j  ¡  W n tk
rˆ   Y nX X d S )NzShould have raised OSError)	r   r   r   r9   r|   r   r}   ZEBADFr   )r   r   r€   )r…   r   r   r†     s    "z-AutoFileTests.ClosedFDRaises.<locals>.wrapper)r   )r…   r†   r   )r…   r   ÚClosedFDRaises  s    zAutoFileTests.ClosedFDRaisesc             C   s   |  ¡  d S )N)r   )r   r   r   r   r   ÚtestErrnoOnClose  s    zAutoFileTests.testErrnoOnClosec             C   s   |  d¡ d S )Nó   a)r   )r   r   r   r   r   ÚtestErrnoOnClosedWrite  s    z$AutoFileTests.testErrnoOnClosedWritec             C   s   |  d¡ d S )Nr   )r*   )r   r   r   r   r   ÚtestErrnoOnClosedSeek  s    z#AutoFileTests.testErrnoOnClosedSeekc             C   s   |  ¡  d S )N)r   )r   r   r   r   r   ÚtestErrnoOnClosedTell!  s    z#AutoFileTests.testErrnoOnClosedTellc             C   s   |  d¡ d S )Nr   )ru   )r   r   r   r   r   ÚtestErrnoOnClosedTruncate%  s    z'AutoFileTests.testErrnoOnClosedTruncatec             C   s   |  ¡  d S )N)rq   )r   r   r   r   r   ÚtestErrnoOnClosedSeekable)  s    z'AutoFileTests.testErrnoOnClosedSeekablec             C   s   |  ¡  d S )N)rr   )r   r   r   r   r   ÚtestErrnoOnClosedReadable-  s    z'AutoFileTests.testErrnoOnClosedReadablec             C   s   |  ¡  d S )N)rs   )r   r   r   r   r   ÚtestErrnoOnClosedWritable1  s    z'AutoFileTests.testErrnoOnClosedWritablec             C   s   |  ¡  d S )N)r9   )r   r   r   r   r   ÚtestErrnoOnClosedFileno5  s    z%AutoFileTests.testErrnoOnClosedFilenoc             C   s   |   | ¡ d¡ d S )NF)r   rm   )r   r   r   r   r   ÚtestErrnoOnClosedIsatty9  s    z%AutoFileTests.testErrnoOnClosedIsattyc             C   sH   y| j  ¡  W n tk
r"   Y nX |  td¡| _ t | j  ¡ ¡ | j S )Nr=   )r   r   r|   r   r   r   r9   )r   r   r   r   ÚReopenForRead=  s    zAutoFileTests.ReopenForReadc             C   s   |   ¡ }| d¡ d S )Nr&   )r”   rU   )r   r   r   r   r   ÚtestErrnoOnClosedReadF  s    z#AutoFileTests.testErrnoOnClosedReadc             C   s   |   ¡ }| ¡  d S )N)r”   rt   )r   r   r   r   r   ÚtestErrnoOnClosedReadallK  s    z&AutoFileTests.testErrnoOnClosedReadallc             C   s    |   ¡ }tddƒ}| |¡ d S )NrN   s
   xxxxxxxxxx)r”   r   r@   )r   r   rQ   r   r   r   ÚtestErrnoOnClosedReadintoP  s    
z'AutoFileTests.testErrnoOnClosedReadintoN),Ú__name__Ú
__module__Ú__qualname__r   r   r#   r+   r3   r;   rB   rH   rR   rX   rY   r\   r_   r`   rd   ri   rk   rp   rz   r   ÚunittestÚskipIfr   rc   r„   r‡   rˆ   r‰   r‹   rŒ   r   rŽ   r   r   r‘   r’   r“   r”   r•   r–   r—   r   r   r   r   r      sJ   	

	

	r   c               @   s   e Zd ZejZdZdS )ÚCAutoFileTestsÚ_ioN)r˜   r™   rš   rž   r   rb   r   r   r   r   r   V  s   r   c               @   s   e Zd ZejZdZdS )ÚPyAutoFileTestsÚ_pyioN)r˜   r™   rš   r    r   rb   r   r   r   r   rŸ   Z  s   rŸ   c               @   s˜   e Zd Zdd„ Zdd„ Zdd„ Zdd„ Zd	d
„ Ze 	e
 ¡ dkd¡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 )"ÚOtherFileTestsc          	   C   s–  z‚|   td¡}|  | ¡ d¡ |  | ¡ d¡ |  | ¡ d¡ | ¡  |   td¡}|  | ¡ d¡ |  | ¡ d¡ |  | ¡ d¡ | ¡  |   td¡}|  | ¡ d¡ |  | ¡ d¡ |  | ¡ d¡ |  | ¡ d¡ | ¡  tj	dkr‚y|   dd¡}W n t
k
r   Y npX |  | ¡ d¡ |  | ¡ d¡ tj	d	krjd
tj	krjtj	 d¡sj|  | ¡ d¡ |  | ¡ d¡ | ¡  W d t t¡ X d S )Nr   FTr=   za+Úwin32z/dev/ttyrQ   ÚdarwinZbsd)ZsunosZaix)r   r   r   rr   rs   rq   r   rm   ÚsysÚplatformr|   Ú
startswithr   Úunlink)r   r   r   r   r   Ú	testAblesa  s>    zOtherFileTests.testAblesc          	   C   sN   xHdD ]@}y|   t|¡}W n tk
r.   Y qX | ¡  |  d| ¡ qW d S )N)rl   ZaUzwU+ÚrwÚrtz%r is an invalid file mode)r   r   rn   r   r   )r   r-   r   r   r   r   ÚtestInvalidModeStrings‹  s    
z%OtherFileTests.testInvalidModeStringsc          
   C   s^   z@x:dD ]2}|   t|d ¡}|  |j|d ¡ W d Q R X qW W d tj t¡rXt t¡ X d S )N))r   r,   )r,   r,   )zwb+zrb+)zw+bzrb+)rQ   Úab)r¬   r¬   )zab+zab+)za+bzab+)r=   rS   )rS   rS   )zrb+zrb+)zr+bzrb+r   r&   )r   r   r   r-   r   ÚpathÚexistsr§   )r   Zmodesr   r   r   r   ÚtestModeStrings–  s    
$zOtherFileTests.testModeStringsc             C   s&   |   ttƒd¡}| ¡  t t¡ d S )Nr   )r   Ústrr   r   r   r§   )r   r   r   r   r   ÚtestUnicodeOpen¥  s    zOtherFileTests.testUnicodeOpenc          	   C   sŒ   yt  d¡}W n" tk
r0   |  dt  ¡ Y nX |  |d¡}z<| d¡ | ¡  tt dƒ}|  | 	¡ d¡ W d Q R X W d t
 t ¡ X d S )NÚasciizcould not encode %r to asciir   s   abcrS   )r   ÚencodeÚUnicodeEncodeErrorÚskipTestr   r   r   rf   r   rU   r   r§   )r   Úfnr   r   r   r   ÚtestBytesOpen«  s    
zOtherFileTests.testBytesOpenzutf-8z%test only works for utf-8 filesystemsc          	   C   sŒ   yt  d¡}W n" tk
r0   |  dt  ¡ Y nX |  |d¡}z<| d¡ | ¡  tt dƒ}|  | 	¡ d¡ W d Q R X W d t
 t ¡ X d S )Nzutf-8zcould not encode %r to utf-8r   s   abcrS   )r   r³   r´   rµ   r   r   r   rf   r   rU   r   r§   )r   r¶   r   r   r   r   ÚtestUtf8BytesOpenº  s    
z OtherFileTests.testUtf8BytesOpenc             C   s2   d}|   t| j|d¡ |   t| jt|dƒd¡ d S )Nzfoo barr   r²   )r   rn   r   r   )r   Zfn_with_NULr   r   r   ÚtestConstructorHandlesNULCharsË  s    z-OtherFileTests.testConstructorHandlesNULCharsc             C   sJ   |   t| jd¡ |   t| jtƒ ¡ tjdkrFdd l}|   t|jtƒ ¡ d S )Niöÿÿÿr¢   r   )	r   rn   r   r|   r	   r¤   r¥   ÚmsvcrtZget_osfhandle)r   rº   r   r   r   ÚtestInvalidFdÐ  s
    
zOtherFileTests.testInvalidFdc          
   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   rn   Úargsr°   r   r   )r   Zbad_moder   ÚmsgÚsr   r   r   ÚtestBadModeArgument×  s     z"OtherFileTests.testBadModeArgumentc             C   sž   |   td¡}| tttdƒƒƒ¡ |  | ¡ d¡ | d¡ |  | ¡ d¡ |  | 	dt
j¡d¡ | d¡ |  | ¡ d¡ |  | 	dt
j¡d¡ | ¡  d S )Nr   r   r%   r   r'   )r   r   r   r   r?   r   r   r   ru   r*   r6   ÚSEEK_ENDr   )r   r   r   r   r   ÚtestTruncateç  s    

zOtherFileTests.testTruncatec          	      s(   ‡ fdd„}z
|ƒ  W d t  t¡ X d S )Nc                 sÌ   ˆ   td¡} |  ttdƒƒ¡ |  ¡  ˆ   td¡} |  d¡}|ttdƒƒkrZˆ  d| ¡ |  ¡ dkrxˆ  d|  ¡  ¡ |  	¡  |  ¡ dkržˆ  d|  ¡  ¡ |  ¡  t
j t¡}|dkrÈˆ  d| ¡ d S )	Nr   é   zr+r%   z(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   r   rU   r   r   ru   r   r­   Úgetsize)r   ÚdataÚsize)r   r   r   Ú	bug801631ô  s     
z7OtherFileTests.testTruncateOnWindows.<locals>.bug801631)r   r§   r   )r   rÆ   r   )r   r   ÚtestTruncateOnWindowsó  s    
z$OtherFileTests.testTruncateOnWindowsc             C   s†   zbt tdƒ}| d¡ | ¡  t tdƒ}| d¡ | ¡  t tdƒ}| ¡ }| ¡  |  |d¡ W d yt t¡ W n   Y nX X d S )Nr,   s   spamr¬   s   eggsrS   s   spameggs)rf   r   r   r   rU   r   r   r§   )r   r   Údr   r   r   Ú
testAppend  s    




zOtherFileTests.testAppendc             C   s   |   t| jddd¡ d S )NÚ1r   )r   r0   r   )r   r   r   r   ÚtestInvalidInit"  s    zOtherFileTests.testInvalidInitc          	   C   sf   t ddR}|  |jg ¡ |  t| jg ¡ |  |jg ¡ |  t| jdd¡ |  |jg ¡ W d Q R X d S )NT)Úquietz/some/invalid/namerª   )r   r   Úwarningsr   r0   r   rn   )r   r   r   r   r   ÚtestWarnings%  s    zOtherFileTests.testWarningsc                sR   G dd„ dt ƒ‰ G ‡ ‡fdd„d| jƒ‰t ttj¡}|  ˆ ˆ|¡ t |¡ d S )Nc               @   s   e Zd ZdS )z=OtherFileTests.testUnclosedFDOnException.<locals>.MyExceptionN)r˜   r™   rš   r   r   r   r   ÚMyException.  s    rÏ   c                   s    e Zd Z‡‡‡ fdd„Z‡  ZS )z:OtherFileTests.testUnclosedFDOnException.<locals>.MyFileIOc                s"   |dkrˆ dƒ‚t ˆ| ƒ ||¡S )Nrc   zblocked setting name)ÚsuperÚ__setattr__)r   rc   Úvalue)rÏ   ÚMyFileIOÚ	__class__r   r   rÑ   0  s    zFOtherFileTests.testUnclosedFDOnException.<locals>.MyFileIO.__setattr__)r˜   r™   rš   rÑ   Ú__classcell__r   )rÏ   rÓ   )rÔ   r   rÓ   /  s   rÓ   )Ú	Exceptionr   r   rf   Ú__file__rg   r   r   )r   rh   r   )rÏ   rÓ   r   ÚtestUnclosedFDOnException-  s
    z(OtherFileTests.testUnclosedFDOnExceptionN)r˜   r™   rš   r¨   r«   r¯   r±   r·   r›   rœ   r¤   Úgetfilesystemencodingr¸   r¹   r»   r¿   rÁ   rÇ   rÉ   rË   rÎ   rØ   r   r   r   r   r¡   _  s    *r¡   c               @   s"   e Zd ZejZdZedd„ ƒZdS )ÚCOtherFileTestsrž   c             C   s8   dd l }|  t| j|jd ¡ |  t| j|jd ¡ d S )Nr   r&   )Ú	_testcapir   r0   r   ZINT_MAXZINT_MIN)r   rÛ   r   r   r   ÚtestInvalidFd_overflow<  s    z&COtherFileTests.testInvalidFd_overflowN)r˜   r™   rš   rž   r   rb   r
   rÜ   r   r   r   r   rÚ   8  s   rÚ   c               @   s   e Zd ZejZdZdS )ÚPyOtherFileTestsr    N)r˜   r™   rš   r    r   rb   r   r   r   r   rÝ   C  s   rÝ   c            	   C   s0   zt ttttƒ W d tj t¡r*t 	t¡ X d S )N)
r   r   rŸ   rÚ   rÝ   r   r­   r®   r   r§   r   r   r   r   Ú	test_mainH  s
    rÞ   Ú__main__)r¤   r   r6   r}   r›   r   Úweakrefr   Ú	functoolsr   Ztest.supportr   r   r   r   r	   r
   r   Úcollectionsr   rž   r    r   ZTestCaser   rŸ   r¡   rÚ   rÝ   rÞ   r˜   r   r   r   r   Ú<module>   s.   $  D Z

