a
    äzeF  ã                   @   s  d Z ddlZddlZddlZddlZzddlmZ W n eyJ   dZY n0 ejj	Z
ej e
ejj	¡Zdd„ Zdd„ Zdd	„ ZG d
d„ dƒZG dd„ dejƒZeƒ D ]HZej d¡s¸J ‚ejdd… Zde› Zeeeejfdeiƒeƒ e< q¤edkrþe ¡  dS )z=Test script for the dbm.open function based on testdumbdbm.pyé    N)Úndbmc               	   c   sJ   t jD ]>} zt| dgd}W n ty2   Y qY n0 |t j| < |V  qd S )NÚopen)Úfromlist)ÚdbmZ_namesÚ
__import__ÚImportErrorZ_modules)ÚnameÚmod© r
   ú#/usr/lib/python3.9/test/test_dbm.pyÚdbm_iterator   s    


r   c                   C   s   t j t¡ d S ©N)ÚtestÚsupportÚrmtreeÚdirnamer
   r
   r
   r   Úcleaunup_test_dir   s    r   c                   C   s   t ƒ  t t¡ d S r   )r   ÚosÚmkdirr   r
   r
   r
   r   Úsetup_test_dir"   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 )%ÚAnyDBMTestCaseó   Python:s   Programmings   thes   ways   Guidos   intended)ÚaÚbÚcÚdÚfÚgc                 C   s8   t  td¡}| jD ]}| j| || d¡< q| ¡  d S )NÚnÚascii)r   r   Ú_fnameÚ_dictÚencodeÚclose)Úselfr   Úkr
   r
   r   Úinit_db0   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>7   ó    z-AnyDBMTestCase.keys_helper.<locals>.<genexpr>)ÚsortedÚkeysr!   ÚassertEqual)r$   r   r,   Zdkeysr
   r
   r   Úkeys_helper6   s    zAnyDBMTestCase.keys_helperc                 C   s   |   t| jjtƒ¡ d S r   )Z
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 r   )ÚassertRaisesr   r1   r   r    r3   r
   r
   r   Útest_anydbm_not_existing?   s    z'AnyDBMTestCase.test_anydbm_not_existingc                 C   sV   t  td¡}|  t| ¡ ƒg ¡ | jD ]}| j| || d¡< q&|  |¡ | 	¡  d S )Nr   r   )
r   r   r    r-   Úlistr,   r!   r"   Úread_helperr#   ©r$   r   Úkeyr
   r
   r   Útest_anydbm_creationB   s    

z#AnyDBMTestCase.test_anydbm_creationc                 C   sL   t j t¡ t td¡ }|  t|ƒd¡ W d   ƒ n1 s>0    Y  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_contentsJ   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   ó   gó   xxxó   foo)	r&   r   r   r    r!   r8   r-   Ú
setdefaultr#   r=   r
   r
   r   Útest_anydbm_modificationP   s    
z'AnyDBMTestCase.test_anydbm_modificationc                 C   s˜   |   ¡  t td¡}|  |¡ |  | d¡| jd ¡ |  | dd¡d¡ |  | d¡¡ |  	t
¡ |d  W d   ƒ n1 s‚0    Y  | ¡  d S )NÚró   ar   r@   rA   )r&   r   r   r    r8   r-   Úgetr!   ÚassertIsNoner5   ÚKeyErrorr#   r=   r
   r
   r   Útest_anydbm_readZ   s    
&zAnyDBMTestCase.test_anydbm_readc                 C   s*   |   ¡  t td¡}|  |¡}| ¡  d S )NrD   )r&   r   r   r    r.   r#   )r$   r   r,   r
   r
   r   Útest_anydbm_keysf   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   r*   s   empty)Úgetattrr   Ú_defaultmodZskipTestr   r    r-   r,   ÚassertInrF   rB   r#   r=   r
   r
   r   Útest_empty_valuel   s    
zAnyDBMTestCase.test_empty_valuec                 C   sF   |   ¡  t td¡}d d¡}|  ||¡ || dks:J ‚| ¡  d S )NrD   r   r   r   )r&   r   r   r    r"   rM   r#   r9   r
   r
   r   Útest_anydbm_accessz   s    
z!AnyDBMTestCase.test_anydbm_accessc                 C   s6   |   |¡}| jD ] }|  | j| || d¡ ¡ qd S )Nr   )r.   r!   r-   r"   )r$   r   r,   r:   r
   r
   r   r8   ‚   s    

zAnyDBMTestCase.read_helperc                    sÊ   t  td¡ª‰ |  ˆ  ¡ g ¡ ddg}|D ]\}}|ˆ |< q*|  tˆ  ¡ ƒtdd„ |D ƒƒ¡ |D ]$\}}|  |ˆ ¡ |  ˆ | |¡ qb|  dˆ ¡ |  t	‡ fdd„¡ W d   ƒ n1 s¼0    Y  d S )	Nr   )rE   ó   b)s   12345678910s   019237410982340912840198242c                 s   s   | ]\}}|V  qd S r   r
   )r(   r%   Úvr
   r
   r   r)      r*   z+AnyDBMTestCase.test_keys.<locals>.<genexpr>r@   c                      s   ˆ d S )Nr@   r
   r
   ©r   r
   r   Ú<lambda>’   r*   z*AnyDBMTestCase.test_keys.<locals>.<lambda>)
r   r   r    r-   r,   r+   rM   ZassertNotInr5   rH   )r$   r   r%   rQ   r
   rR   r   Ú	test_keys‡   s    
"zAnyDBMTestCase.test_keysc                 C   s.   |   ttdtj¡ | jt_|   t¡ tƒ  d S )NrL   )Ú
addCleanupÚsetattrr   rL   r0   r   r   r3   r
   r
   r   ÚsetUp”   s    
zAnyDBMTestCase.setUpN)Ú__name__Ú
__module__Ú__qualname__r!   r&   r.   r4   r6   r;   r>   rC   rI   rJ   rN   rO   r8   rT   rW   r
   r
   r
   r   r   '   s*   û
r   c                   @   s2   e Zd Zdd„ Zejedddd„ ƒZdd„ Zd	S )
ÚWhichDBTestCasec              	   C   sØ   |   ttdtj¡ tƒ D ]º}|j}tƒ  |t_| td¡ W d   ƒ n1 sP0    Y  |  	|| j 
t¡¡ | td¡4}d|d< |  d|¡ |  	|d d¡ W d   ƒ n1 s´0    Y  |  	|| j 
t¡¡ qd S )NrL   r   Úwó   1)rU   rV   r   rL   r   rX   r   r   r    r-   ÚwhichdbrM   )r$   r0   r   r   r
   r
   r   Útest_whichdbœ   s    
,.zWhichDBTestCase.test_whichdbzTest requires ndbm)Úreasonc                 C   sD   t td dƒ W d   ƒ n1 s$0    Y  |  | j t¡¡ d S )Nz.dbÚwb)r   r    rG   r   r^   r3   r
   r
   r   Útest_whichdb_ndbm°   s    .z!WhichDBTestCase.test_whichdb_ndbmc                 C   s"   |   t¡ tƒ  tj d¡| _d S )Nr   )rU   r   r   r   r   Zimport_fresh_moduler   r3   r
   r
   r   rW   ¶   s    
zWhichDBTestCase.setUpN)	rX   rY   rZ   r_   ÚunittestZ
skipUnlessr   rb   rW   r
   r
   r
   r   r[   ›   s   
r[   zdbm.é   Z	TestCase_r0   Ú__main__)Ú__doc__rc   r   r   Ztest.supportr   r   r   r   ZTESTFNr   ÚpathÚjoinr    r   r   r   r   ZTestCaser[   r	   rX   Ú
startswithÚsuffixZtestnameÚtypeÚglobalsÚmainr
   r
   r
   r   Ú<module>   s2   
t!

þ