a
    äzeÞ  ã                   @   sd   d dl mZ e d¡Zd dlZd dlZd dlmZmZm	Z	 eZ
G dd„ dejƒZedkr`e ¡  dS )é    )Úsupportzdbm.gnuN)ÚTESTFNÚTESTFN_NONASCIIÚunlinkc                   @   s„   e Zd Ze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d¡dd„ ƒZdd„ ZdS )ÚTestGdbmc                  C   s<   t jr8zddlm}  W n ty(   Y n0 td| › ƒ d S )Nr   )Ú_GDBM_VERSIONzgdbm version: )r   ÚverboseÚ_gdbmr   ÚImportErrorÚprint)Úversion© r   ú'/usr/lib/python3.9/test/test_dbm_gnu.pyÚ
setUpClass   s    zTestGdbm.setUpClassc                 C   s
   d | _ d S ©N©Úg©Úselfr   r   r   ÚsetUp   s    zTestGdbm.setUpc                 C   s    | j d ur| j  ¡  ttƒ d S r   )r   Úcloser   Úfilenamer   r   r   r   ÚtearDown   s    

zTestGdbm.tearDownc                 C   s^  t  td¡| _|  | j ¡ g ¡ d| jd< d| jd< d| jd< t| j ¡ ƒ}|  |tg d¢ƒ¡ |  d| j¡ |  d	| j¡ |  | jd d¡ | j ¡ }|rÀ|  ||¡ | 	|¡ | j 
|¡}q˜|  | 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¡ d S )NÚcÚbÚaZ019237410982340912840198242Z12345678910s   dataó   bytes)ó   ar   s   12345678910r   ó   bs   xxxs   fooZxxx)ÚgdbmÚopenr   r   ÚassertEqualÚkeysÚsetÚassertInZfirstkeyÚremoveZnextkeyÚgetZassertIsNoneÚassertRaisesÚKeyErrorÚ
setdefault)r   Zkey_setÚkeyr   r   r   Útest_key_methods   s,    




*zTestGdbm.test_key_methodsc                    s`   t tƒ ˆ  tjtjtd¡ t td¡ˆ _ˆ j ¡  ˆ  tj‡ fdd„¡ ˆ  tjdd„ ¡ d S )NÚrr   c                      s
   ˆ j d S )Nr   r   r   r   r   r   Ú<lambda>=   ó    z0TestGdbm.test_error_conditions.<locals>.<lambda>c                   S   s   t  td¡ ¡ S )NÚrx)r   r    r   r   r   r   r   r   r-   ?   r.   )r   r   r'   r   Úerrorr    r   r   r   r   r   r   Útest_error_conditions6   s    
zTestGdbm.test_error_conditionsc                 C   s|   t tjƒ}|t dƒ }t|ƒD ]}t t|¡| _| j ¡  q|t dƒ }|D ]*}|D ] }t t|| ¡| _| j ¡  qTqLd S )NZfsuZcrwn)r#   r   Z
open_flagsÚsortedr    r   r   r   )r   ÚallZmodesÚmodeÚflagsÚflagr   r   r   Ú
test_flagsA   s    
zTestGdbm.test_flagsc                 C   s˜   t  td¡| _tj t¡}t|dƒ}d| | jd< tj t¡}|  ||¡ | jd= |  	tj t¡|¡ | j 
¡  tj t¡}|  ||¡ |  ||¡ d S )Nr   i'  Úx)r   r    r   r   ÚosÚpathÚgetsizeÚmaxZassertGreaterr!   Z
reorganizeZ
assertLessZassertGreaterEqual)r   Zsize0Z
value_sizeZsize1Zsize2r   r   r   Útest_reorganizeQ   s    

zTestGdbm.test_reorganizec                 C   sÀ   t  td¡}d|d< W d   ƒ n1 s*0    Y  t  td¡&}|  t| ¡ ƒdg¡ W d   ƒ n1 sl0    Y  |  t j¡}| ¡  W d   ƒ n1 s 0    Y  |  t|j	ƒd¡ d S )Nr   zcontext managerzgdbm context managerr,   s   gdbm context managerz#GDBM object has already been closed)
r   r    r   r!   Úlistr"   r'   r0   ÚstrÚ	exception)r   ÚdbÚcmr   r   r   Útest_context_managerf   s    &4&ÿzTestGdbm.test_context_managerc                 C   s˜   t  td¡}d|d< W d   ƒ n1 s*0    Y  t  t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"   Ú
assertTrue©r   rA   r   r   r   Ú
test_bytesr   s    &zTestGdbm.test_bytesc                 C   sÊ   t  td¡}d|d< W d   ƒ n1 s*0    Y  t  t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"   ÚencoderD   rE   r   r   r   Útest_unicodez   s    &ÿ
ÿzTestGdbm.test_unicodec              	   C   sü   t  td¡}d|d< W d   ƒ n1 s*0    Y  t  td¡¨}|  t j¡ |d= W d   ƒ n1 sj0    Y  |  t j¡ |d= W d   ƒ n1 sœ0    Y  |  t j¡ 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'   r0   rE   r   r   r   Útest_write_readonly_file†   s    &$$z!TestGdbm.test_write_readonly_filez*requires OS support of non-ASCII encodingsc                 C   sº   t }|  t|¡ t |d¡}d|d< W d   ƒ n1 s:0    Y  |  tj |¡¡ t |d¡D}|  	t
| ¡ ƒdg¡ |  d|v ¡ |  	|d d¡ W d   ƒ n1 s¬0    Y  d S )Nr   s   values   keyr,   )r   Z
addCleanupr   r   r    rD   r9   r:   Úexistsr!   r>   r"   )r   r   rA   r   r   r   Útest_nonascii_filename‘   s    &zTestGdbm.test_nonascii_filenamec                 C   s`   d}|   tj¡}t |¡ W d   ƒ n1 s00    Y  |  |t|jƒ¡ |  |jj|¡ d S )Nznonexisting-file)	r'   r   r0   r    r$   r?   r@   r!   r   )r   Znonexisting_filerB   r   r   r   Útest_nonexisting_filež   s
    (zTestGdbm.test_nonexisting_fileN)Ú__name__Ú
__module__Ú__qualname__Ústaticmethodr   r   r   r+   r1   r7   r=   rC   rF   rH   rI   ÚunittestZ
skipUnlessr   rK   rL   r   r   r   r   r   
   s"   
	ÿ
r   Ú__main__)Útestr   Úimport_moduler   rQ   r9   Ztest.supportr   r   r   r   ZTestCaser   rM   Úmainr   r   r   r   Ú<module>   s   
 