
    6bh                         d dl Z d dlZd dlmZ d dlmZmZ d dlmZm	Z	m
Z
mZmZmZ  ej                  d      ZeZ G d dej"                        Zedk(  r ej(                          yy)	    N)support)cpython_onlyimport_helper)TESTFNTESTFN_NONASCIIFakePathcreate_empty_filetemp_dirunlinkzdbm.gnuc            	           e Zd Zed        Zd Zd Zed        Zd Z	d Z
d Zd Zd	 Zd
 Zd Zd Zd Zd Zd Z ej*                  ed      d        Zd Zd Zd Zd Z ej:                  ddddddd      d        Zy)TestGdbmc                  n    t         j                  r	 ddlm}  t	        d|         y y # t
        $ r Y y w xY w)Nr   )_GDBM_VERSIONzgdbm version: )r   verbose_gdbmr   printImportError)versions    ;/opt/python-3.12.12/usr/lib/python3.12/test/test_dbm_gnu.py
setUpClasszTestGdbm.setUpClass   s;    ??2: wi01   s   ( 	44c                     d | _         y Ngselfs    r   setUpzTestGdbm.setUp   s	        c                 n    | j                   | j                   j                          t        t               y r   )r   closer   filenamer   s    r   tearDownzTestGdbm.tearDown   s!    66FFLLNxr   c                     t         j                  t        d      | _        t	        j
                  | t        | j                               y Nc)gdbmopenr!   r   r   check_disallow_instantiationtyper   s    r   test_disallow_instantiationz$TestGdbm.test_disallow_instantiation   s.     8S),,T4<@r   c                    t         j                  t        d      | _        | j	                  | j                  j                         g        d| j                  d<   d| j                  d<   d| j                  d<   t        | j                  j                               }| j	                  |t        g d             | j                  d| j                         | j                  d	| j                         | j	                  | j                  d   d       | j                  j                         }|rA| j                  ||       |j                  |       | j                  j                  |      }|rA| j	                  | j                  j                  d	      d
       | j                  | j                  j                  d             | j	                  | j                  j                  dd      d       | j                  t              5  | j                  d    d d d        | j	                  | j                  j                  dd      d       | j	                  | j                  d   d       y # 1 sw Y   UxY w)Nr%   ba01923741098234091284019824212345678910s   data   bytes)   ar0   s   12345678910r1      bs   xxxs   fooxxx)r&   r'   r!   r   assertEqualkeyssetassertInfirstkeyremovenextkeygetassertIsNoneassertRaisesKeyError
setdefault)r   key_setkeys      r   test_key_methodszTestGdbm.test_key_methods%   s   8S)+s =}"xdffkkm$#&F"GHc466"dDFF#)73ffooMM#w'NN3&&..%C 
 	D)40$&&**V,-FF3V<x(FF5M )**66:FC0 )(s   I%%I.c                     t        t                j                  t        j                  t        j
                  t        d       t        j                  t        d       _         j                  j                           j                  t        j                   fd        j                  t        j                  d        y )Nrr%   c                  "     j                   d   S )Nr-   r   r   s   r   <lambda>z0TestGdbm.test_error_conditions.<locals>.<lambda>E   s    dffSkr   c                  R    t         j                  t        d      j                         S )Nrx)r&   r'   r!   r     r   r   rF   z0TestGdbm.test_error_conditions.<locals>.<lambda>G   s    dii$.G.M.M.Or   )r   r!   r=   r&   errorr'   r   r    r   s   `r   test_error_conditionszTestGdbm.test_error_conditions>   sp    x$**dii3?8S)$**&9:$**&OPr   c                    t        t        j                        }|t        d      z
  }t        |      D ];  }t        j	                  t
        |      | _        | j                  j                          = |t        d      z
  }|D ]E  }|D ]>  }t        j	                  t
        ||z         | _        | j                  j                          @ G y )Nfsucrwn)r6   r&   
open_flagssortedr'   r!   r   r    )r   allmodesmodeflagsflags         r   
test_flagszTestGdbm.test_flagsI   s    $//"c%j 5MDYYx.DFFFLLN "
 c&k!D8TD[9  r   c                 p   t         j                  t        d      | _        t        j
                  j                  t              }t        |d      }d|z  | j                  d<   t        j
                  j                  t              }| j                  ||       | j                  d= | j                  t        j
                  j                  t              |       | j                  j                          t        j
                  j                  t              }| j                  ||       | j                  ||       y )Nr%   i'  x)r&   r'   r!   r   ospathgetsizemaxassertGreaterr4   
reorganize
assertLessassertGreaterEqual)r   size0
value_sizesize1size2s        r   test_reorganizezTestGdbm.test_reorganizeY   s    8S))
 &
J&s)5%(FF3K2E:)u%u-r   c                    t         j                  t        d      5 }d|d<   d d d        t         j                  t        d      5 }| j                  t	        |j                               dg       d d d        | j                  t         j                        5 }j                          d d d        | j                  t        j                        d       y # 1 sw Y   xY w# 1 sw Y   sxY w# 1 sw Y   GxY w)Nr%   zcontext managerzgdbm context managerrD   s   gdbm context managerz#GDBM object has already been closed)
r&   r'   r!   r4   listr5   r=   rJ   str	exception)r   dbcms      r   test_context_managerzTestGdbm.test_context_managern   s    YYx%):B%& & YYx%T"'')_/F.GH & tzz*bGGI +R\\*>	@ &% &% +*s#   C+C C,C C),C5c                     t         j                  t        d      5 }| j                  t	        |             d d d        y # 1 sw Y   y xY wr$   )r&   r'   r!   assertFalseboolr   rj   s     r   test_bool_emptyzTestGdbm.test_bool_emptyz   s0    YYx%T"X& &%%s	   ?Ac                     t         j                  t        d      5 }d|d<   | j                  t	        |             d d d        y # 1 sw Y   y xY wNr%   r,   r-   )r&   r'   r!   
assertTruero   rp   s     r   test_bool_not_emptyzTestGdbm.test_bool_not_empty~   s7    YYx%BsGOODH% &%%s    AAc                     t         j                  t        d      5 }d|d<   d d d        | j                  t         j                  t
               y # 1 sw Y   /xY wrs   )r&   r'   r!   r=   rJ   ro   rp   s     r   test_bool_on_closed_db_raisesz&TestGdbm.test_bool_on_closed_db_raises   s?    YYx%BsG &$**dB/ &%s   AAc                 n   t         j                  t        d      5 }d|d<   d d d        t         j                  t        d      5 }| j                  t	        |j                               dg       | j                  d|v        | j                  |d   d       d d d        y # 1 sw Y   xY w# 1 sw Y   y xY w)Nr%   s   bytes value s   bytes key rD   )r&   r'   r!   r4   rg   r5   rt   rp   s     r   
test_byteszTestGdbm.test_bytes   s    YYx%$7B ! &YYx%T"'')_/@.ABOO-34R 124GH &% &%%%s   BAB+B(+B4c                 J   t         j                  t        d      5 }d|d<   d d d        t         j                  t        d      5 }| j                  t	        |j                               dj                         g       | j                  dj                         |v        | j                  d|v        | j                  |dj                            dj                                | j                  |d   dj                                d d d        y # 1 sw Y   xY w# 1 sw Y   y xY w)Nr%   u   Unicode value 🐍u   Unicode key 🐍rD   )r&   r'   r!   r4   rg   r5   encodert   rp   s     r   test_unicodezTestGdbm.test_unicode   s    YYx%+EB'( &YYx%T"'')_/G/N/N/P.QROO4;;=CDOO4:;R 8 ? ? AB7>>@BR 897>>@B &% &%%%s   DCDDD"c                    t         j                  t        d      5 }d|d<   d d d        t         j                  t        d      5 }| j                  t         j                        5  |d= d d d        | j                  t         j                        5  |d= d d d        | j                  t         j                        5  d|d<   d d d        d d d        y # 1 sw Y   xY w# 1 sw Y   vxY w# 1 sw Y   WxY w# 1 sw Y   6xY w# 1 sw Y   y xY w)Nr%   s   bytes values	   bytes keyrD   s   not exist keys   not exist value)r&   r'   r!   r=   rJ   rp   s     r   test_write_readonly_filez!TestGdbm.test_write_readonly_file   s    YYx%-B| &YYx%""4::.'( /""4::.|$ /""4::.'9#$ / &% &% /..... &%s_   C D #C''D C('D 9C4?D CC%	!D (C1	-D 4C=	9D  D	z*requires OS support of non-ASCII encodingsc                    t         }| j                  t        |       t        j	                  |d      5 }d|d<   d d d        | j                  t        j                  j                  |             t        j	                  |d      5 }| j                  t        |j                               dg       | j                  d|v        | j                  |d   d       d d d        y # 1 sw Y   xY w# 1 sw Y   y xY w)Nr%   s   values   keyrD   )r   
addCleanupr   r&   r'   rt   rY   rZ   existsr4   rg   r5   )r   r!   rj   s      r   test_nonascii_filenamezTestGdbm.test_nonascii_filename   s     #)YYx%!BvJ &x01YYx%T"'')_vh7OOFbL)RZ2 &% &% &%s   C!AC-!C*-C6c                 0   d}| j                  t        j                        5 }t        j                  |       d d d        | j	                  |t        j                               | j                  |j                  j                  |       y # 1 sw Y   UxY w)Nznonexisting-file)	r=   r&   rJ   r'   r7   rh   ri   r4   r!   )r   nonexisting_filerk   s      r   test_nonexisting_filezTestGdbm.test_nonexisting_file   sj    -tzz*bII&' +&BLL(9:..0@A +*s   BBc                 f    t         j                  t        t              d      j	                          y r$   )r&   r'   r   r!   r    r   s    r   test_open_with_pathlib_pathz$TestGdbm.test_open_with_pathlib_path   s    		(8$c*002r   c                 z    t         j                  t        j                  t              d      j                          y r$   )r&   r'   rY   fsencoder!   r    r   s    r   test_open_with_bytes_pathz"TestGdbm.test_open_with_bytes_path   s"    		"++h'-335r   c                     t         j                  t        t        j                  t
                    d      j                          y r$   )r&   r'   r   rY   r   r!   r    r   s    r   !test_open_with_pathlib_bytes_pathz*TestGdbm.test_open_with_pathlib_bytes_path   s'    		(2;;x0137==?r   LC_ALLzfr_FR.iso88591z
ja_JP.sjisz	zh_CN.gbkz
fr_FR.utf8z
en_US.utf8 c                     t               5 }t        t        j                  j	                  |d             | j                  t        j                  t        j                  t        d       d d d        y # 1 sw Y   y xY w)NtestrD   )
r
   r	   rY   rZ   joinr=   r&   rJ   r'   r!   )r   ds     r   test_localized_errorzTestGdbm.test_localized_error   sH     Z1bggll1f56djj$))XsC ZZs   AA22A;N)__name__
__module____qualname__staticmethodr   r   r"   r   r*   rB   rK   rV   re   rl   rq   ru   rw   ry   r|   r~   unittest
skipUnlessr   r   r   r   r   r   r   run_with_localer   rI   r   r   r   r      s    2 2
 A A
12	Q .*
@'&
0
I
B	: XEG	3G	3B36@ W,l
	DDr   r   __main__)rY   r   r   r   test.supportr   r   test.support.os_helperr   r   r   r	   r
   r   import_moduler&   r!   TestCaser   r   mainrI   r   r   <module>r      sg    	   4I I #}""9-ADx   ADH zHMMO r   