o
    HXîhx  ã                   @   sp   d dl mZ 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r6e ¡  dS dS )	é    )Úimport_helper)Ú	os_helperz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   ú</opt/python-3.10.19/usr/lib/python3.10/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 spw   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   sH   dD ]}zt j | j|¡| _| j ¡  W q ty!   |  ¡  Y qw d S )N)ÚrÚrwÚwÚn)r   r	   r
   r   r   r   r   Zfail)r   Úmoder   r   r   Ú
test_modes6   s   ÿüzDbmTestCase.test_modesc                 C   sÊ   t j | jd¡}d|d< W d   ƒ n1 sw   Y  t j | jd¡}|  t| ¡ ƒdg¡ W d   ƒ n1 s:w   Y  |  t jj¡}| ¡  W d   ƒ n1 sUw   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   
ÿÿ
ÿÿz DbmTestCase.test_context_managerc                 C   s¢   t j | jd¡}d|d< W d   ƒ n1 sw   Y  t j | jd¡#}|  t| ¡ ƒdg¡ |  d|v ¡ |  |d d¡ W d   ƒ d S 1 sJw   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_bytesJ   s   
ÿ"ýzDbmTestCase.test_bytesc                 C   sÔ   t j | jd¡}d|d< W d   ƒ n1 sw   Y  t j | jd¡<}|  t| ¡ ƒd ¡ g¡ |  d ¡ |v ¡ |  d|v ¡ |  |d ¡  d ¡ ¡ |  |d d ¡ ¡ W d   ƒ d S 1 scw   Y  d S )Nr   u   Unicode value ðŸu   Unicode key ðŸr&   )	r   r	   r
   r   r   r,   r   Úencoder2   r3   r   r   r   Útest_unicodeR   s   
ÿÿ
ÿ"úzDbmTestCase.test_unicodec              	   C   s  t j | jd¡}d|d< W d   ƒ n1 sw   Y  t j | jd¡Z}|  t¡ |d= W d   ƒ n1 s8w   Y  |  t¡ |d= W d   ƒ n1 sPw   Y  |  t¡ d|d< W d   ƒ n1 siw   Y  W d   ƒ d S W d   ƒ d S 1 sw   Y  d S )Nr   s   bytes values	   bytes keyr&   s   not exist keys   not exist value)r   r	   r
   r   r   r   r3   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 s'w   Y  |  t‡ fdd„dD ƒƒ¡ tj ˆ d¡#}|  	t
| ¡ ƒdg¡ |  d|v ¡ |  	|d d¡ W d   ƒ d S 1 sgw   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>q   s   € ÿz5DbmTestCase.test_nonascii_filename.<locals>.<genexpr>r&   )r   ÚTESTFN_NONASCIIZ
addCleanupr   r   r	   r
   r2   Úanyr   r,   r   )r   r   r/   r   r<   r   Útest_nonascii_filenamei   s   
ÿ
ÿ"ýz"DbmTestCase.test_nonascii_filenamec                 C   sd   d}|   tjj¡}tj |¡ W d   ƒ n1 sw   Y  |  |t|jƒ¡ |  |jj	|¡ d S )Nznonexisting-file)
r   r   r	   r   r
   r   r-   r.   r   r   )r   Znonexisting_filer0   r   r   r   Útest_nonexisting_filex   s   ÿz!DbmTestCase.test_nonexisting_fileN)Ú__name__Ú
__module__Ú__qualname__r   r   r"   r%   r+   r1   r4   r6   r7   ÚunittestZ
skipUnlessr   r>   r@   rA   r   r   r   r   r   	   s    ÿ
r   Ú__main__)Ztest.supportr   r   Úimport_moduler8   rE   Zdbm.ndbmr   r   ZTestCaser   rB   Úmainr   r   r   r   Ú<module>   s    
wÿ