B
    u9a¾  ã               @   s¦   d Z ddlZddlZddlZej d¡ZyddlmZ W n e	k
rP   dZY nX ejj
Zdd„ Zdd„ ZG d	d
„ d
ƒZG dd„ dejƒZdd„ Zedkr¢e ¡  dS )z=Test script for the dbm.open function based on testdumbdbm.pyé    NÚdbm)Úndbmc           	   c   sN   xHt jD ]>} yt| dgd}W n tk
r4   wY nX |t j| < |V  qW d S )NÚopen)Úfromlist)r   Z_namesÚ
__import__ÚImportErrorZ_modules)ÚnameÚmod© r
   ú/usr/lib/python3.7/test_dbm.pyÚdbm_iterator   s    
r   c              C   s(   x"t   td ¡D ]} tj | ¡ qW d S )NÚ*)ÚglobÚ_fnameÚtestÚsupportÚunlink)Úfr
   r
   r   Údelete_files!   s    r   c               @   sŽ   e Zd Zdddd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d„ Zdd„ Zdd„ Zd d!„ Zd"d#„ Zd$S )%ÚAnyDBMTestCases   Python:s   Programmings   thes   ways   Guidos   intended)ÚaÚbÚcÚdr   Úgc             C   s<   t  td¡}x"| jD ]}| j| || d¡< qW | ¡  d S )NÚnÚascii)r   r   r   Ú_dictÚencodeÚclose)Úselfr   Úkr
   r
   r   Úinit_db1   s    zAnyDBMTestCase.init_dbc             C   s4   t dd„ | ¡ D ƒƒ}t | j ¡ ƒ}|  ||¡ |S )Nc             s   s   | ]}|  d ¡V  qdS )r   N)Údecode)Ú.0r!   r
   r
   r   ú	<genexpr>8   s    z-AnyDBMTestCase.keys_helper.<locals>.<genexpr>)ÚsortedÚkeysr   ÚassertEqual)r    r   r'   Zdkeysr
   r
   r   Úkeys_helper7   s    zAnyDBMTestCase.keys_helperc             C   s   |   t| jjtƒ¡ d S )N)Ú
assertTrueÚ
issubclassÚmoduleÚerrorÚOSError)r    r
   r
   r   Ú
test_error=   s    zAnyDBMTestCase.test_errorc             C   s   |   tjtjt¡ d S )N)ÚassertRaisesr   r-   r   r   )r    r
   r
   r   Útest_anydbm_not_existing@   s    z'AnyDBMTestCase.test_anydbm_not_existingc             C   sZ   t  td¡}|  t| ¡ ƒg ¡ x"| jD ]}| j| || d¡< q(W |  |¡ | 	¡  d S )Nr   r   )
r   r   r   r(   Úlistr'   r   r   Úread_helperr   )r    r   Úkeyr
   r
   r   Útest_anydbm_creationC   s    
z#AnyDBMTestCase.test_anydbm_creationc          	   C   s8   t j t¡ t td¡}|  t|ƒd¡ W d Q R X d S )Nr   r   )r   r   Zcreate_empty_filer   r   r   r(   Úlen)r    r   r
   r
   r   Ú8test_anydbm_creation_n_file_exists_with_invalid_contentsK   s    zGAnyDBMTestCase.test_anydbm_creation_n_file_exists_with_invalid_contentsc             C   s`   |   ¡  t td¡}d | jd< |d< |  |¡ |  | dd¡d¡ |  |d d¡ | ¡  d S )Nr   s   indentedr   ó   gs   xxxs   foo)	r"   r   r   r   r   r3   r(   Ú
setdefaultr   )r    r   r
   r
   r   Útest_anydbm_modificationQ   s    
z'AnyDBMTestCase.test_anydbm_modificationc          	   C   s„   |   ¡  t td¡}|  |¡ |  | d¡| jd ¡ |  | dd¡d¡ |  | d¡¡ |  	t
¡ |d  W d Q R X | ¡  d S )NÚró   ar   s   xxxs   foo)r"   r   r   r   r3   r(   Úgetr   ÚassertIsNoner0   ÚKeyErrorr   )r    r   r
   r
   r   Útest_anydbm_read[   s    
zAnyDBMTestCase.test_anydbm_readc             C   s*   |   ¡  t td¡}|  |¡}| ¡  d S )Nr;   )r"   r   r   r   r)   r   )r    r   r'   r
   r
   r   Útest_anydbm_keysg   s    
zAnyDBMTestCase.test_anydbm_keysc             C   sž   t tjdd ƒdkr|  d¡ t td¡}|  | ¡ g ¡ d|d< |  | ¡ dg¡ |  d|¡ |  |d d¡ |  | 	d¡d¡ |  | 
d¡d¡ | ¡  d S )NZlibraryzBerkeley DBzCBerkeley DB doesn't distinguish the empty value from the absent oner   ó    s   empty)Úgetattrr   Ú_defaultmodZskipTestr   r   r(   r'   ÚassertInr=   r9   r   )r    r   r
   r
   r   Útest_empty_valuem   s    
zAnyDBMTestCase.test_empty_valuec             C   s6   |   ¡  t td¡}d d¡}|  ||¡ | ¡  d S )Nr;   r   r   )r"   r   r   r   r   rE   r   )r    r   r4   r
   r
   r   Útest_anydbm_access{   s
    
z!AnyDBMTestCase.test_anydbm_accessc             C   s:   |   |¡}x*| jD ] }|  | j| || d¡ ¡ qW d S )Nr   )r)   r   r(   r   )r    r   r'   r4   r
   r
   r   r3   ƒ   s    
zAnyDBMTestCase.read_helperc             C   s
   t ƒ  d S )N)r   )r    r
   r
   r   ÚtearDownˆ   s    zAnyDBMTestCase.tearDownc             C   s   | j t_tƒ  d S )N)r,   r   rD   r   )r    r
   r
   r   ÚsetUp‹   s    zAnyDBMTestCase.setUpN)Ú__name__Ú
__module__Ú__qualname__r   r"   r)   r/   r1   r5   r7   r:   r@   rA   rF   rG   r3   rH   rI   r
   r
   r
   r   r   (   s(   
r   c               @   sB   e Zd Zdd„ Zejedddd„ ƒZdd„ Zd	d
„ Z	dd„ Z
dS )ÚWhichDBTestCasec             C   s    xšt ƒ D ]}|j}|dkrqtƒ  | td¡}| ¡  |  || j t¡¡ | td¡}d|d< |  	d|¡ |  
|d dk¡ | ¡  |  || j t¡¡ qW d S )Nzdbm.dumbr   Úwó   1)r   rJ   r   r   r   r   r(   r   ÚwhichdbrE   r*   )r    r,   r   r   r
   r
   r   Útest_whichdb‘   s    zWhichDBTestCase.test_whichdbzTest requires ndbm)Úreasonc          	   C   sN   d  t¡}t|dƒ |  tjj|¡ W d Q R X |  | j 	|d d… ¡¡ d S )Nz
{}_ndbm.dbrN   éýÿÿÿ)
Úformatr   r   Z
addCleanupr   r   r   r>   r   rP   )r    Zdb_filer
   r
   r   Útest_whichdb_ndbm§   s    
z!WhichDBTestCase.test_whichdb_ndbmc             C   s
   t ƒ  d S )N)r   )r    r
   r
   r   rH   ¯   s    zWhichDBTestCase.tearDownc             C   s<   t ƒ  tjj| _t | jd¡| _| j ¡  tj 	d¡| _d S )Nr   r   )
r   r   r   ÚTESTFNÚfilenamer   r   r   r   Zimport_fresh_module)r    r
   r
   r   rI   ²   s
    

zWhichDBTestCase.setUpc                sÌ   t  ˆ jd¡ˆ _ˆ  ˆ j ¡ g ¡ ddg}x|D ]\}}|ˆ j|< q0W ˆ  tˆ j ¡ ƒtdd„ |D ƒƒ¡ x0|D ](\}}ˆ  |ˆ j¡ ˆ  ˆ j| |¡ qpW ˆ  dˆ j¡ ˆ  	t
‡ fdd„¡ ˆ j ¡  d S )	Nr   )r<   ó   b)s   12345678910s   019237410982340912840198242c             s   s   | ]\}}|V  qd S )Nr
   )r$   r!   Úvr
   r
   r   r%   ¿   s    z,WhichDBTestCase.test_keys.<locals>.<genexpr>s   xxxc                  s
   ˆ j d S )Ns   xxx)r   r
   )r    r
   r   Ú<lambda>Ä   rB   z+WhichDBTestCase.test_keys.<locals>.<lambda>)r   r   rW   r   r(   r'   r&   rE   ZassertNotInr0   r?   r   )r    r   r!   rY   r
   )r    r   Ú	test_keys¹   s    $zWhichDBTestCase.test_keysN)rJ   rK   rL   rQ   ÚunittestZ
skipUnlessr   rU   rH   rI   r[   r
   r
   r
   r   rM      s
   rM   c             C   sR   g }x0t ƒ D ]&}| td|j ttjfd|iƒ¡ qW dd„ |D ƒ}| |¡ |S )Nz	TestCase-r,   c             S   s   g | ]}t  |¡‘qS r
   )r\   Z	makeSuite)r$   r   r
   r
   r   ú
<listcomp>Î   s    zload_tests.<locals>.<listcomp>)r   ÚappendÚtyperJ   r   r\   ÚTestCaseZaddTests)ÚloaderZtestsÚpatternÚclassesr	   Zsuitesr
   r
   r   Ú
load_testsÈ   s    
rd   Ú__main__)Ú__doc__r\   r   Ztest.supportr   r   Úimport_moduler   r   r   rV   r   r   r   r   r`   rM   rd   rJ   Úmainr
   r
   r
   r   Ú<module>   s    
h8