a
    äze7  ã                   @   s`   d dl mZ e d¡ d dlZd dlZd dlZd dlmZ G dd„ dejƒZ	e
dkr\e ¡  dS )é    )Úsupportzdbm.ndbmN)Úerrorc                   @   sr   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e ejd¡dd„ ƒZdd„ ZdS )ÚDbmTestCasec                 C   s(   t j| _tj | jd¡| _| j ¡  d S )NÚc)r   ZTESTFNÚfilenameÚdbmÚndbmÚopenÚdÚclose©Úself© r   ú(/usr/lib/python3.9/test/test_dbm_ndbm.pyÚsetUp
   s    zDbmTestCase.setUpc                 C   s   dD ]}t  | j| ¡ qd S )N©Ú z.pagz.dirz.db)r   Úunlinkr   )r   Úsuffixr   r   r   ÚtearDown   s    zDbmTestCase.tearDownc                 C   s   t j | jd¡| _|  | j ¡ g ¡ d| jd< d| jd< d| jd< | j ¡  |  d| j¡ |  d| j¡ |  | jd d¡ |  | j d¡d	¡ |  	| j d
¡¡ |  | j d
d¡d¡ |  
t¡ | jd  W d   ƒ n1 sà0    Y  |  | j d
d¡d¡ |  | jd
 d¡ | j ¡  d S )Nr   ÚbÚas   datas   bytesZ019237410982340912840198242Z12345678910ó   aó   bs   xxxs   fooZxxx)r   r   r	   r   r
   ÚassertEqualÚkeysÚassertInÚgetZassertIsNoneÚassertRaisesÚKeyErrorÚ
setdefaultr   r   r   r   r   Ú	test_keys   s"    



(zDbmTestCase.test_keysc                 C   s®   t jjdkr|  d¡ t j | jd¡| _|  | j ¡ g ¡ d| jd< |  | j ¡ dg¡ |  	d| j¡ |  | jd d¡ |  | j 
d¡d¡ |  | j d¡d¡ | j ¡  d S )NzBerkeley DBzCBerkeley DB doesn't distinguish the empty value from the absent oner   r   Úemptys   emptyó    )r   r   ZlibraryZskipTestr	   r   r
   r   r   r   r   r    r   r   r   r   r   Útest_empty_value'   s    

zDbmTestCase.test_empty_valuec              	   C   sJ   dD ]@}z t j | j|¡| _| j ¡  W q tyB   |  ¡  Y q0 qd S )N)ÚrÚrwÚwÚn)r   r   r	   r   r
   r   r   Zfail)r   Úmoder   r   r   Ú
test_modes5   s    zDbmTestCase.test_modesc                 C   sÊ   t j | jd¡}d|d< W d   ƒ n1 s.0    Y  t j | jd¡&}|  t| ¡ ƒdg¡ W d   ƒ n1 st0    Y  |  t jj¡}| ¡  W d   ƒ n1 sª0    Y  |  t	|j
ƒd¡ d S )Nr   zcontext managerzndbm context managerr%   s   ndbm context managerz"DBM object has already been closed)r   r   r	   r   r   Úlistr   r   r   ÚstrÚ	exception)r   ÚdbÚcmr   r   r   Útest_context_manager=   s    &4&ÿz DbmTestCase.test_context_managerc                 C   s    t j | jd¡}d|d< W d   ƒ n1 s.0    Y  t j | jd¡D}|  t| ¡ ƒdg¡ |  d|v ¡ |  |d d¡ W d   ƒ n1 s’0    Y  d S )Nr   s   bytes value ½s   bytes key ½r%   )r   r   r	   r   r   r+   r   Ú
assertTrue©r   r.   r   r   r   Ú
test_bytesI   s    &zDbmTestCase.test_bytesc                 C   sÒ   t j | jd¡}d|d< W d   ƒ n1 s.0    Y  t j | jd¡v}|  t| ¡ ƒd ¡ g¡ |  d ¡ |v ¡ |  d|v ¡ |  |d ¡  d ¡ ¡ |  |d d ¡ ¡ W d   ƒ n1 sÄ0    Y  d S )Nr   u   Unicode value ðŸu   Unicode key ðŸr%   )	r   r   r	   r   r   r+   r   Úencoder1   r2   r   r   r   Útest_unicodeQ   s    &ÿ
ÿzDbmTestCase.test_unicodec              	   C   sþ   t j | jd¡}d|d< W d   ƒ n1 s.0    Y  t j | jd¡¢}|  t¡ |d= W d   ƒ n1 sp0    Y  |  t¡ |d= W d   ƒ n1 s 0    Y  |  t¡ d|d< W d   ƒ n1 sÒ0    Y  W d   ƒ n1 sð0    Y  d S )Nr   s   bytes values	   bytes keyr%   s   not exist keys   not exist value)r   r   r	   r   r   r   r2   r   r   r   Útest_write_readonly_file]   s    &$$z$DbmTestCase.test_write_readonly_filez*requires OS support of non-ASCII encodingsc                    sÚ   t j‰ dD ]}|  t jˆ | ¡ q
tj ˆ d¡}d|d< W d   ƒ n1 sN0    Y  |  t‡ fdd„dD ƒƒ¡ tj ˆ d¡D}|  	t
| ¡ ƒdg¡ |  d|v ¡ |  	|d d¡ W d   ƒ n1 sÌ0    Y  d S )Nr   r   s   values   keyc                 3   s   | ]}t j ˆ | ¡V  qd S )N)ÚosÚpathÚexists)Ú.0r   ©r   r   r   Ú	<genexpr>p   s   ÿz5DbmTestCase.test_nonascii_filename.<locals>.<genexpr>r%   )r   ÚTESTFN_NONASCIIZ
addCleanupr   r   r   r	   r1   Úanyr   r+   r   )r   r   r.   r   r;   r   Útest_nonascii_filenameh   s    &ÿ
z"DbmTestCase.test_nonascii_filenamec                 C   sd   d}|   tjj¡}tj |¡ W d   ƒ n1 s40    Y  |  |t|jƒ¡ |  |jj	|¡ d S )Nznonexisting-file)
r   r   r   r   r	   r   r,   r-   r   r   )r   Znonexisting_filer/   r   r   r   Útest_nonexisting_filew   s
    *z!DbmTestCase.test_nonexisting_fileN)Ú__name__Ú
__module__Ú__qualname__r   r   r!   r$   r*   r0   r3   r5   r6   ÚunittestZ
skipUnlessr   r=   r?   r@   r   r   r   r   r      s   ÿ
r   Ú__main__)Útestr   Úimport_moduler7   rD   Zdbm.ndbmr   r   ZTestCaser   rA   Úmainr   r   r   r   Ú<module>   s   
w