o
    HXîh  ã                   @   sx   d dl mZ d dlmZ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 dS )	é    )Úsupport)Úimport_helperÚcpython_onlyzdbm.gnuN)ÚTESTFNÚTESTFN_NONASCIIÚunlinkc                   @   s   e Zd Zedd„ ƒZdd„ Zd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e ed¡dd„ ƒZdd„ ZdS )ÚTestGdbmc                  C   sB   t jrzddlm}  W n
 ty   Y d S w td| › ƒ d S d S )Nr   )Ú_GDBM_VERSIONzgdbm version: )r   ÚverboseÚ_gdbmr	   ÚImportErrorÚprint)Úversion© r   ú;/opt/python-3.10.19/usr/lib/python3.10/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¡| _t | t| jƒ¡ d S )NÚc)ÚgdbmÚopenr   r   r   Zcheck_disallow_instantiationÚtyper   r   r   r   Útest_disallow_instantiation   s   z$TestGdbm.test_disallow_instantiationc                 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 ¡ }|ra|  ||¡ | 	|¡ | j 
|¡}|sN|  | j d	¡d
¡ |  | j d¡¡ |  | j dd¡d¡ |  t¡ | jd  W d   ƒ n1 s”w   Y  |  | j dd¡d¡ |  | jd d¡ d S )Nr   ÚbÚaZ019237410982340912840198242Z12345678910s   dataó   bytes)ó   ar"   s   12345678910r#   ó   bs   xxxs   fooZxxx)r   r   r   r   ÚassertEqualÚkeysÚsetÚassertInZfirstkeyÚremoveZnextkeyÚgetZassertIsNoneÚassertRaisesÚKeyErrorÚ
setdefault)r   Zkey_setÚkeyr   r   r   Útest_key_methods$   s0   




ýÿ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>D   s   
 z0TestGdbm.test_error_conditions.<locals>.<lambda>c                   S   s   t  td¡ ¡ S )NÚrx)r   r   r   r   r   r   r   r   r1   F   s    )r   r   r+   r   Úerrorr   r   r   r   r   r   r   Útest_error_conditions=   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 ¡  q*q&d S )NZfsuZcrwn)r'   r   Z
open_flagsÚsortedr   r   r   r   )r   ÚallZmodesÚmodeÚflagsÚflagr   r   r   Ú
test_flagsH   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_reorganizeX   s   

zTestGdbm.test_reorganizec                 C   sÀ   t  td¡}d|d< W d   ƒ n1 sw   Y  t  td¡}|  t| ¡ ƒdg¡ W d   ƒ n1 s6w   Y  |  t j¡}| ¡  W d   ƒ n1 sPw   Y  |  t|j	ƒd¡ d S )Nr   zcontext managerzgdbm context managerr0   s   gdbm context managerz#GDBM object has already been closed)
r   r   r   r%   Úlistr&   r+   r3   ÚstrÚ	exception)r   ÚdbÚcmr   r   r   Útest_context_managerm   s   
ÿÿ
ÿÿzTestGdbm.test_context_managerc                 C   sš   t  td¡}d|d< W d   ƒ n1 sw   Y  t  td¡#}|  t| ¡ ƒdg¡ |  d|v ¡ |  |d d¡ W d   ƒ d S 1 sFw   Y  d S )Nr   s   bytes value ½s   bytes key ½r0   )r   r   r   r%   rA   r&   Ú
assertTrue©r   rD   r   r   r   Ú
test_bytesy   s   
ÿ"ýzTestGdbm.test_bytesc                 C   sÌ   t  td¡}d|d< W d   ƒ n1 sw   Y  t  td¡<}|  t| ¡ ƒd ¡ g¡ |  d ¡ |v ¡ |  d|v ¡ |  |d ¡  d ¡ ¡ |  |d d ¡ ¡ W d   ƒ d S 1 s_w   Y  d S )Nr   u   Unicode value ðŸu   Unicode key ðŸr0   )r   r   r   r%   rA   r&   ÚencoderG   rH   r   r   r   Útest_unicode   s   
ÿÿ
ÿ"úzTestGdbm.test_unicodec              	   C   s  t  td¡}d|d< W d   ƒ n1 sw   Y  t  td¡]}|  t j¡ |d= W d   ƒ n1 s5w   Y  |  t j¡ |d= W d   ƒ n1 sNw   Y  |  t j¡ d|d< W d   ƒ n1 shw   Y  W d   ƒ d S W d   ƒ d S 1 s€w   Y  d S )Nr   s   bytes values	   bytes keyr0   s   not exist keys   not exist value)r   r   r   r+   r3   rH   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w   Y  |  tj |¡¡ t |d¡#}|  	t
| ¡ ƒdg¡ |  d|v ¡ |  	|d d¡ W d   ƒ d S 1 sWw   Y  d S )Nr   s   values   keyr0   )r   Z
addCleanupr   r   r   rG   r<   r=   Úexistsr%   rA   r&   )r   r   rD   r   r   r   Útest_nonascii_filename˜   s   
ÿ"ýzTestGdbm.test_nonascii_filenamec                 C   s`   d}|   tj¡}t |¡ W d   ƒ n1 sw   Y  |  |t|jƒ¡ |  |jj|¡ d S )Nznonexisting-file)	r+   r   r3   r   r(   rB   rC   r%   r   )r   Znonexisting_filerE   r   r   r   Útest_nonexisting_file¥   s   ÿzTestGdbm.test_nonexisting_fileN)Ú__name__Ú
__module__Ú__qualname__Ústaticmethodr   r   r   r   r   r/   r4   r:   r@   rF   rI   rK   rL   ÚunittestZ
skipUnlessr   rN   rO   r   r   r   r   r      s(    
	
ÿ
r   Ú__main__)Útestr   Ztest.supportr   r   Úimport_moduler   rT   r<   Ztest.support.os_helperr   r   r   r   ZTestCaser   rP   Úmainr   r   r   r   Ú<module>   s    
 #ÿ