
    ;e                         d dl mZ d dl mZ  ej        d           d dlZd dlZd dlZd dlmZ  G d dej	                  Z
edk    r ej                     dS dS )	    )import_helper)	os_helperzdbm.ndbmN)errorc                       e Zd Zd Zd Zd Zd Zd Zd Zd Z	d Z
d	 Z ej        ej        d
          d             Zd Zd Zd Zd ZdS )DbmTestCasec                     t           j        | _        t          j                            | j        d          | _        | j                                         d S Nc)r   TESTFNfilenamedbmndbmopendcloseselfs    )/usr/lib/python3.11/test/test_dbm_ndbm.pysetUpzDbmTestCase.setUp   s8    !(t}c22    c                 H    dD ]}t          j        | j        |z              d S )N z.pagz.dirz.db)r   unlinkr   )r   suffixs     r   tearDownzDbmTestCase.tearDown   s6    1 	5 	5FT]V34444	5 	5r   c                 4   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                    5  | j        d          d d d            n# 1 swxY w Y   |                     | j                            d
d          d           |                     | j        d
         d           | j                                         d S )Nr
   bas   datas   bytes01923741098234091284019824212345678910   a   bs   xxxs   fooxxx)r   r   r   r   r   assertEqualkeysassertIngetassertIsNoneassertRaisesKeyError
setdefaultr   r   s    r   	test_keyszDbmTestCase.test_keys   s   t}c22+++s"x =}c46"""dDF###)7333D))4000$&**V,,---FF33V<<<x(( 	 	F5MM	 	 	 	 	 	 	 	 	 	 	 	 	 	 	**66::FCCC000s   
F$$F(+F(c                    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   emptyr   )r   r   libraryskipTestr   r   r   r%   r&   r'   r(   r,   r   r   s    r   test_empty_valuezDbmTestCase.test_empty_value(   s#   8},,MM 0 1 1 1t}c22+++w
333h''')3///H--s333**844c:::r   c                     dD ]j}	 t           j                            | j        |          | _        | j                                         G# t          $ r |                                  Y gw xY wd S )N)rrwwn)r   r   r   r   r   r   r   fail)r   modes     r   
test_modeszDbmTestCase.test_modes6   sv    ) 	 	Dt}d;;   				 	s   AA

A+*A+c                 `   t           j                            | j        d          5 }d|d<   d d d            n# 1 swxY w Y   t           j                            | j        d          5 }|                     t          |                                          dg           d d d            n# 1 swxY w Y   |                     t           j        j                  5 }|                                 d d d            n# 1 swxY w Y   |                     t          |j
                  d           d S )Nr
   zcontext managerzndbm context managerr4   s   ndbm context managerz"DBM object has already been closed)r   r   r   r   r%   listr&   r*   r   str	exception)r   dbcms      r   test_context_managerz DbmTestCase.test_context_manager>   s   X]]4=#.. 	;"):B%&	; 	; 	; 	; 	; 	; 	; 	; 	; 	; 	; 	; 	; 	; 	; X]]4=#.. 	I"T"''))__/F.GHHH	I 	I 	I 	I 	I 	I 	I 	I 	I 	I 	I 	I 	I 	I 	I sx~.. 	"GGIII	 	 	 	 	 	 	 	 	 	 	 	 	 	 	R\**=	? 	? 	? 	? 	?s0   8<<(7B++B/2B/C;;C?C?c                    t           j                            | j        d          5 }d|d<   d d d            n# 1 swxY w Y   t           j                            | j        d          5 }|                     t          |                                          dg           |                     d|v            |                     |d         d           d d d            d S # 1 swxY w Y   d S )Nr
   s   bytes value s   bytes key r4   )r   r   r   r   r%   r<   r&   
assertTruer   r?   s     r   
test_byteszDbmTestCase.test_bytesJ   s`   X]]4=#.. 	8"$7B !	8 	8 	8 	8 	8 	8 	8 	8 	8 	8 	8 	8 	8 	8 	8X]]4=#.. 	I"T"''))__/@.ABBBOO-3444R 124GHHH	I 	I 	I 	I 	I 	I 	I 	I 	I 	I 	I 	I 	I 	I 	I 	I 	I 	Is   8<<(A*CC#&C#c                    t           j                            | j        d          5 }d|d<   d d d            n# 1 swxY w Y   t           j                            | j        d          5 }|                     t          |                                          d                                g           |                     d                                |v            |                     d|v            |                     |d                                         d                                           |                     |d         d                                           d d d            d S # 1 swxY w Y   d S )Nr
   u   Unicode value 🐍u   Unicode key 🐍r4   )	r   r   r   r   r%   r<   r&   encoderC   rD   s     r   test_unicodezDbmTestCase.test_unicodeR   s   X]]4=#.. 	F"+EB'(	F 	F 	F 	F 	F 	F 	F 	F 	F 	F 	F 	F 	F 	F 	FX]]4=#.. 	B"T"''))__/G/N/N/P/P.QRRROO4;;==CDDDOO4:;;;R 8 ? ? A AB7>>@@B B BR 897>>@@B B B	B 	B 	B 	B 	B 	B 	B 	B 	B 	B 	B 	B 	B 	B 	B 	B 	B 	Bs   8<<(C7E,,E03E0c                 H   t           j                            | j        d          5 }d|d<   d d d            n# 1 swxY w Y   t           j                            | j        d          5 }|                     t
                    5  |d= d d d            n# 1 swxY w Y   |                     t
                    5  |d= d d d            n# 1 swxY w Y   |                     t
                    5  d|d<   d d d            n# 1 swxY w Y   d d d            d S # 1 swxY w Y   d S )Nr
   s   bytes values	   bytes keyr4   s   not exist keys   not exist value)r   r   r   r   r*   r   rD   s     r   test_write_readonly_filez$DbmTestCase.test_write_readonly_file^   sF   X]]4=#.. 	."-B|	. 	. 	. 	. 	. 	. 	. 	. 	. 	. 	. 	. 	. 	. 	.X]]4=#.. 	:"""5)) ) )'() ) ) ) ) ) ) ) ) ) ) ) ) ) )""5)) % %|$% % % % % % % % % % % % % % %""5)) : :'9#$: : : : : : : : : : : : : : :	: 	: 	: 	: 	: 	: 	: 	: 	: 	: 	: 	: 	: 	: 	: 	: 	: 	:s   8<<(DBDB	DB	D8C<DC	DC	D-C?3D?D	DD	DDDz*requires OS support of non-ASCII encodingsc                    t           j        dD ]%}|                     t           j        |z              &t          j                            d          5 }d|d<   d d d            n# 1 swxY w Y   |                     t          fddD                                  t          j                            d          5 }| 	                    t          |                                          dg           |                     d|v            | 	                    |d         d           d d d            d S # 1 swxY w Y   d S )Nr   r
   s   values   keyc              3   \   K   | ]&}t           j                            |z             V  'd S )N)ospathexists).0r   r   s     r   	<genexpr>z5DbmTestCase.test_nonascii_filename.<locals>.<genexpr>q   sR       G G & GNN8f+<== G G G G G Gr   r4   )r   TESTFN_NONASCII
addCleanupr   r   r   r   rC   anyr%   r<   r&   )r   r   r?   r   s      @r   test_nonascii_filenamez"DbmTestCase.test_nonascii_filenamei   s    ,1 	A 	AFOOI,h.?@@@@X]]8S)) 	"R!BvJ	" 	" 	" 	" 	" 	" 	" 	" 	" 	" 	" 	" 	" 	" 	" G G G G*EG G G G G 	H 	H 	HX]]8S)) 	3RT"''))__vh777OOFbL)))RZ222	3 	3 	3 	3 	3 	3 	3 	3 	3 	3 	3 	3 	3 	3 	3 	3 	3 	3s%   A((A,/A,A*D88D<?D<c                 P   d}|                      t          j        j                  5 }t          j                            |           d d d            n# 1 swxY w Y   |                     |t          |j                             |                     |j        j	        |           d S )Nznonexisting-file)
r*   r   r   r   r   r'   r=   r>   r%   r   )r   nonexisting_filer@   s      r   test_nonexisting_filez!DbmTestCase.test_nonexisting_filex   s    -sx~.. 	,"HMM*+++	, 	, 	, 	, 	, 	, 	, 	, 	, 	, 	, 	, 	, 	, 	,&BL(9(9:::.0@AAAAAs    AAAc                     t           j                            t          j        | j                  d                                           d S r	   )r   r   r   r   FakePathr   r   r   s    r   test_open_with_pathlib_pathz'DbmTestCase.test_open_with_pathlib_path   s7    i(77==CCEEEEEr   c                     t           j                            t          j        | j                  d                                           d S r	   )r   r   r   rM   fsencoder   r   r   s    r   test_open_with_bytes_pathz%DbmTestCase.test_open_with_bytes_path   s6    bk$-00#66<<>>>>>r   c                     t           j                            t          j        t          j        | j                            d                                           d S r	   )	r   r   r   r   rZ   rM   r]   r   r   r   s    r   !test_open_with_pathlib_bytes_pathz-DbmTestCase.test_open_with_pathlib_bytes_path   sA    i(T])C)CDDcJJPPRRRRRr   N)__name__
__module____qualname__r   r   r-   r2   r:   rA   rE   rH   rJ   unittest
skipUnlessr   rR   rU   rX   r[   r^   r`    r   r   r   r   	   s!         
5 5 5  (    
? 
? 
?I I I
B 
B 
B	: 	: 	: X2EG G3 3G G3B B BF F F? ? ?S S S S Sr   r   __main__)test.supportr   r   import_modulerM   rd   dbm.ndbmr   r   TestCaser   ra   mainrf   r   r   <module>rm      s    & & & & & & " " " " " "  J ' ' ' 				        }S }S }S }S }S(# }S }S }S@ zHMOOOOO r   