
    /hh-9                         S r SSKrSSKrSSKrSSKrSSKrSSKrSSKJr	  SSK
Jr  SSKJr  SSKJr  \R                   rS r " S S\R&                  5      r\S	:X  a  \R,                  " 5         gg)
z>Test script for the dumbdbm module
Original by Roger E. Masse
    N)support)	os_helper)partialc                  t    S H!  n  [         R                  " [        U -   5        M#     g ! [         a     M3  f = f)N.dir.dat.bak)osunlink_fnameOSError)exts    ;/opt/python-3.13.8/usr/lib/python3.13/test/test_dbm_dumb.py_delete_filesr      s5    '	IIfsl# (  		s   )
77c                      \ rS rSrSSSSSSSS	S
SSSSSSR	                  S5      S0rS r\R                  " \	" \
S5      S5      \R                  S 5       5       rS rS rS rS rS rS rS rS rS rS  rS! rS" rS# rS$ rS% rS& rS' rS( rS) r S* r!S+ r"S, r#\R                  S- 5       r$\R                  " \RJ                  S.5      S/ 5       r&S0 r'S1 r(S2 r)S3 r*S4 r+S5r,g6)7DumbDBMTestCase      0       as   Python:   bs   Programming   cs   the   ds   way   fs   Guido   gs   intended   üutf-8   !c                 R   [         R                  " [        R                  " [        S5      5       nU R                  [        UR                  5       5      / 5        U R                   H  nU R                  U   X'   M     U R                  U5        S S S 5        g ! , (       d  f       g = fNc)

contextlibclosingdumbdbmopenr   assertEquallistkeys_dictread_helper)selffkeys      r   test_dumbdbm_creation%DumbDBMTestCase.test_dumbdbm_creation%   sn    VS 9:aT!&&(^R0zzC "Q	 ;::s   AB
B&umaskztest needs os.umask()c                 H    [         R                  " S5      n[        R                  " [        SS5      nUR                  5         [         R                  " U5        Sn[         R                  S:w  a  SnSS Kn[         R                  " [        S-   5      nU R                  UR                  " UR                  5      U5        [         R                  " [        S	-   5      nU R                  UR                  " UR                  5      U5        g ! [         R                  " W5        f = f)
N   r"   i  i  posixi  r   r	   r   )r   r1   r%   r&   r   closenamestatr'   S_IMODEst_mode)r,   	old_umaskr-   expected_moder7   sts         r   test_dumbdbm_creation_mode*DumbDBMTestCase.test_dumbdbm_creation_mode,   s    	 IVS%0AGGIHHY77g "MWWVf_%bjj1=AWWVf_%bjj1=A HHYs   AD	 	D!c                     [         R                  " [        5      nSUS'   U R                  US   S5        UR	                  5         UR	                  5         g )Nr   r   )r%   r&   r   r'   r5   r,   r-   s     r   test_close_twice DumbDBMTestCase.test_close_twiceB   s?    LL $4$'				r   c                 n   U R                  5         [        R                  " [        R                  " [
        S5      5       nS=U R                  S'   US'   U R                  U5        U R                  UR                  SS5      S5        U R                  US   S5        S S S 5        g ! , (       d  f       g = f)Nws   indentedr      xxx   foo)
init_dbr#   r$   r%   r&   r   r*   r+   r'   
setdefaultr@   s     r   test_dumbdbm_modification)DumbDBMTestCase.test_dumbdbm_modificationI   s    VS 9:a)44DJJtqwQQ\\&&96BQvY/ ;::s    AB&&
B4c                    U R                  5         [        R                  " [        R                  " [
        S5      5       nU R                  U5        U R                  [        R                  S5         SUS'   S S S 5        U R                  [        R                  S5         US	 S S S 5        U R                  UR                  S5      U R                  S   5        U R                  UR                  SS5      S5        U R                  UR                  S5      5        U R                  [        5         US     S S S 5        S S S 5        g ! , (       d  f       N= f! , (       d  f       N= f! , (       d  f       N9= f! , (       d  f       g = f)Nrz'The database is opened for reading only   xr   r   rE   rF   )rG   r#   r$   r%   r&   r   r+   assertRaisesRegexerrorr'   getr*   assertIsNoneassertRaisesKeyErrorr@   s     r   test_dumbdbm_read!DumbDBMTestCase.test_dumbdbm_readR   s$   VS 9:aQ''$MO$O ''$MOdGO QUU4[$**T*:;QUU662F;aeeFm,""8,&	 - ;:O OO O -, ;:sU    2E;2E8(E; E$BE;1E*7E;
E	E;
E'	#E;*
E8	4E;;
F	c                     U R                  5         [        R                  " [        R                  " [
        5      5       nU R                  U5      nS S S 5        g ! , (       d  f       g = fN)rG   r#   r$   r%   r&   r   keys_helper)r,   r-   r)   s      r   test_dumbdbm_keys!DumbDBMTestCase.test_dumbdbm_keysc   s@    V 45##A&D 655s   A
A(c                     [         R                  " [        R                  " [        5      5       nSUS'   U R                  SU5        S S S 5        g ! , (       d  f       g = f)N   hello   1)r#   r$   r%   r&   r   assertInr@   s     r   test_write_contains#DumbDBMTestCase.test_write_containsh   s>    V 45AdGMM$" 655s   A
Ac                 b   [         R                  " [        R                  " [        5      5       nSUS'   SUS'   S S S 5        [         R                  " [        R                  " [        5      5       nU R                  US   S5        S S S 5        g ! , (       d  f       N[= f! , (       d  f       g = f)Nr\   r]      hello2)r#   r$   r%   r&   r   r'   r@   s     r   test_write_write_read%DumbDBMTestCase.test_write_write_readm   s{    V 45AdGAdG 6 V 45QtWi0 65 65 65s   B0B 
B 
B.c                    U R                  5         [        R                  " [        R                  " [
        S5      5       nU R                  US   U R                  SR                  S5         5        S S S 5        g ! , (       d  f       g = f)NrL   r   r   )	rG   r#   r$   r%   r&   r   r'   r*   encoder@   s     r   test_str_readDumbDBMTestCase.test_str_readu   sX    VS 9:aQx[$**X__W5M*NO ;::s    2A;;
B	c                 (   U R                  5         [        R                  " [        R                  " [
        5      5       nSUS'   SUS'   S S S 5        [        R                  " [        R                  " [
        S5      5       nU R                  SU5        U R                  USR                  S5         U R                  SR                  S5         5        U R                  US   S5        S S S 5        g ! , (       d  f       N= f! , (       d  f       g = f)	Nr   r   a1rL   r   r]   r   )
rG   r#   r$   r%   r&   r   r^   r'   rf   r*   r@   s     r   test_str_write_contains'DumbDBMTestCase.test_str_write_containsz   s    V 45AhKAcF 6 VS 9:aMM(A&Qxw78!ZZ(@ACQtWd+	 ;: 65 ;:s   C2A(D2
D 
Dc                    [         R                  " [        R                  " [        5      5       nSUS'   SUS'   S S S 5        [
        R                  " [        S-   S5       nUR                  5       nS S S 5        [        R                  S:X  a  WR                  SS	5      nOWR                  S	S5      n[
        R                  " [        S-   S
5       nUR                  U5        S S S 5        [        R                  " [        5      nU R                  US   S5        U R                  US   S5        g ! , (       d  f       N= f! , (       d  f       N= f! , (       d  f       Nu= f)Nr\   r]   rb      2r   rb
   
s   
wb)r#   r$   r%   r&   r   ioreadr   linesepreplacewriter'   )r,   r-   filedatas       r   test_line_endings!DumbDBMTestCase.test_line_endings   s     V 45AdGAdG 6
 WWVf_d+t99;D ,::<<w/D<</DWWVf_d+tJJt , LL 4(+4),! 65
 ,+ ,+s#   D/ E E/
D= 
E
Ec                     U R                  U5      nU R                   H$  nU R                  U R                  U   X   5        M&     g rW   )rX   r*   r'   )r,   r-   r)   r.   s       r   r+   DumbDBMTestCase.read_helper   s:    "::CTZZ_af5 r   c                     [         R                  " [        R                  " [        S5      5       nU R
                   H  nU R
                  U   X'   M     S S S 5        g ! , (       d  f       g = fNn)r#   r$   r%   r&   r   r*   r,   r-   ks      r   rG   DumbDBMTestCase.init_db   sF    VS 9:aZZzz!}   ;::s   %A
A,c                     [        UR                  5       5      n[        U R                  R                  5       5      nU R                  X#5        U$ rW   )sortedr)   r*   r'   )r,   r-   r)   dkeyss       r   rX   DumbDBMTestCase.keys_helper   s:    affhtzz()%r   c                    SS K n0 n[        S5       GH?  n[        R                  " [        R
                  " [        5      5       n[        S5       Ht  nUR                  S5      nUR                  5       S:  a  XR;   a  X%	 XE	 M3  M5  UR                  S5      UR                  S5      -  nXbU'   XdU'   U R                  XE   U5        Mv     S S S 5        [        R                  " [        R
                  " [        5      5       n[        S UR                  5        5       5      n[        UR                  5       5      nU R                  Xx5        S S S 5        GMB     g ! , (       d  f       N= f! , (       d  f       GMf  = f)	Nr      d   abcdefghijklmg?)r   r   r   i'  c              3   L   #    U  H  u  pUR                  S 5      U4v   M     g7f)zlatin-1N)rf   ).0r   vs      r   	<genexpr>.DumbDBMTestCase.test_random.<locals>.<genexpr>   s      !Qytq188I#6":ys   "$)randomranger#   r$   r%   r&   r   choice	randranger'   r   items)	r,   r   ddummyr-   r   r   expectedgots	            r   test_randomDumbDBMTestCase.test_random   s   1XE##GLL$89Q"3ZEo6A}},6 ! ! " #MM*<=@P@PQV@WW ! !((q1 ( : ##GLL$89Q!!Qqwwy!QQQWWY'  / :9 99 :9s   BE>AE(
E%	(
E8	c                    [         R                  " [        S5       nSUS'   S S S 5        [         R                  " [        S5       nU R                  [	        UR                  5       5      S/5        S S S 5        U R                  [         R                  5         WR                  5         S S S 5        g ! , (       d  f       N= f! , (       d  f       NX= f! , (       d  f       g = f)Nr"   zcontext managerzdumbdbm context managerrL   s   dumbdbm context manager)r%   r&   r   r'   r(   r)   rR   rO   )r,   dbs     r   test_context_manager$DumbDBMTestCase.test_context_manager   s    \\&#&",=B() ' \\&#&"T"'')_/I.JK ' w}}-GGI .- '& '& .-s#   B1+CC1
B?
C
C!c                 h   [         R                  " [        S5      nUR                  5         [	        [
        R                  U5      [	        [
        R                  US5      [	        [
        R                  U5      [	        [
        R                  U5      4 HX  nU R                  [         R                  5       nU" S5        S S S 5        U R                  [        WR                  5      S5        MZ     [
        R                  " S5      [
        R                  " S5      [
        R                  " S5      [         4 HX  nU R                  [         R                  5       nU" U5        S S S 5        U R                  [        WR                  5      S5        MZ     g ! , (       d  f       N= f! , (       d  f       NI= f)Nr"   btestz"DBM object has already been closedr)   iterkeysr   )r%   r&   r   r5   r   operatordelitemsetitemgetitemcontainsrR   rO   r'   str	exceptionmethodcallerlen)r,   r-   methcms       r   test_check_closed!DumbDBMTestCase.test_check_closed   s4   LL%		X--q1X--q#6X--q1X..24D ""7==1RV 2S.AC4 **62**:6**73D ""7==1RQ 2S.AC 21 21s   5	F	F#
F 	#
F1	c                 `   [         R                  " [        S5       nU R                   H  nU R                  U   X'   M     S S S 5        [         R                  " [        S5       nU R	                  UR                  5       / 5        S S S 5        g ! , (       d  f       NS= f! , (       d  f       g = fr   )r%   r&   r   r*   r'   r)   r   s      r   test_create_newDumbDBMTestCase.test_create_new   sv    \\&#&!ZZzz!}   ' \\&#&!QVVXr* '&	 '& '&s   %B$!B
B
B-c                    [        [        S-   SSS9 nUR                  S5        S S S 5        [        R                  " 5        nU R                  [        5         [        R                   " [        5       n S S S 5        S S S 5        U R                  UR                  5       S5        S S S 5        g ! , (       d  f       N= f! , (       d  f       NP= f! , (       d  f       NY= f! , (       d  f       g = f)Nr   rD   r   )encodingzstr(print('Hacked!')), 0
 )
r&   r   rx   r   captured_stdoutrR   
ValueErrorr%   r'   getvalue)r,   streamstdoutr-   s       r   	test_evalDumbDBMTestCase.test_eval   s    &6/39VLL56 :$$&&"":.\\&)Q * / V__.3	 '& :9 *) /. '&sG   B.C!C3B?5C=(C!.
B<?
C	C
C	C!!
C/c                    S H  n[        5         U R                  [        5         [        R                  " [
        U5        S S S 5        U R                  [        R                  R                  [
        S-   5      5        U R                  [        R                  R                  [
        S-   5      5        U R                  [        R                  R                  [
        S-   5      5        M     S GH  n[        5         [        R                  " [
        U5       nU R                  [        R                  R                  [
        S-   5      5        U R                  [        R                  R                  [
        S-   5      5        U R                  [        R                  R                  [
        S-   5      5        S S S 5        U R                  [        R                  R                  [
        S-   5      5        GM	     S GH  n[        5         [        R                  " [
        U5       nSUS'   U R                  [        R                  R                  [
        S-   5      5        U R                  [        R                  R                  [
        S-   5      5        U R                  [        R                  R                  [
        S-   5      5        S S S 5        U R                  [        R                  R                  [
        S-   5      5        GM     g ! , (       d  f       GN= f! , (       d  f       GNn= f! , (       d  f       Nm= f)NrL   rD   r	   r   r
   r"   r   valuer.   )r   rR   FileNotFoundErrorr%   r&   r   assertFalser   pathexists
assertTrue)r,   r   r-   s      r   test_missing_data!DumbDBMTestCase.test_missing_data   s   EO""#45VU+ 6RWW^^FVO<=RWW^^FVO<=RWW^^FVO<=    EOfe,v ?@v ?@  !@A - RWW^^FVO<=    EOfe,"%v ?@v ?@  !@A	 -
 OOBGGNN6F?;<   65 -, -,s%   LB L$B%L0
L	
L-	0
L>	c                 Z   [         R                  " [        S5       n S S S 5        [        R                  " [        S-   5        S H  nU R                  [        5         [         R                  " [        U5        S S S 5        U R                  [        R                  R                  [        S-   5      5        U R                  [        R                  R                  [        S-   5      5        M     S H  n[         R                  " [        U5       nU R                  [        R                  R                  [        S-   5      5        U R                  [        R                  R                  [        S-   5      5        S S S 5        U R                  [        R                  R                  [        S-   5      5        [        R                  " [        S-   5        M     S GH  n[         R                  " [        U5       nSUS'   U R                  [        R                  R                  [        S-   5      5        U R                  [        R                  R                  [        S-   5      5        S S S 5        U R                  [        R                  R                  [        S-   5      5        [        R                  " [        S-   5        [        R                  " [        S-   5        GM	     g ! , (       d  f       GN= f! , (       d  f       GN= f! , (       d  f       GN= f! , (       d  f       N= f)Nr   r   r   r
   r   r   r.   )r%   r&   r   r   r   rR   r   r   r   r   r   r,   r-   r   s      r   test_missing_index"DumbDBMTestCase.test_missing_index  s   \\&#&! '
		&6/"E""#45VU+ 6RWW^^FVO<=RWW^^FVO<=	    Efe,v ?@  !@A - RWW^^FVO<=IIfvo&    Efe,"%v ?@  !@A - OOBGGNN6F?;<IIfvo&IIfvo&  ! '& 65 -, -,s1   K&K8A+L
9A0L&
K58
L	

L	
L*	c                    [         R                  " [        S5       n S S S 5        [        R                  " [        S-   5        S GH  n[         R                  " [        U5       nU R                  [        R                  R                  [        S-   5      5        U R                  [        R                  R                  [        S-   5      5        UR                  5         U R                  [        R                  R                  [        S-   5      5        U R                  [        R                  R                  [        S-   5      5        [        R                  " [        S-   5        UR                  5         U R                  [        R                  R                  [        S-   5      5        U R                  [        R                  R                  [        S-   5      5        S S S 5        U R                  [        R                  R                  [        S-   5      5        U R                  [        R                  R                  [        S-   5      5        GM     g ! , (       d  f       GNA= f! , (       d  f       N= f)Nr   r   r   r
   
r%   r&   r   r   r   r   r   r   r   syncr   s      r   test_sync_empty_unmodified*DumbDBMTestCase.test_sync_empty_unmodified(  ss   \\&#&! '
		&6/"Efe,v ?@  !@Av ?@  !@A		&6/*  !@A  !@A - RWW^^FVO<=RWW^^FVO<=   '& -,s   I$E<I*
I'*
I8	c                 :   [         R                  " [        S5       n S S S 5        [        R                  " [        S-   5        S GH/  n[         R                  " [        U5       nSUS'   U R                  [        R                  R                  [        S-   5      5        U R                  [        R                  R                  [        S-   5      5        UR                  5         U R                  [        R                  R                  [        S-   5      5        U R                  [        R                  R                  [        S-   5      5        [        R                  " [        S-   5        [        R                  " [        S-   5        UR                  5         U R                  [        R                  R                  [        S-   5      5        U R                  [        R                  R                  [        S-   5      5        S S S 5        U R                  [        R                  R                  [        S-   5      5        U R                  [        R                  R                  [        S-   5      5        GM2     g ! , (       d  f       GNc= f! , (       d  f       N= f)Nr   r   r   r   r.   r
   r   r   s      r   test_sync_nonempty_unmodified-DumbDBMTestCase.test_sync_nonempty_unmodified:  s   \\&#&! '
		&6/"Efe,"%v ?@  !@Av ?@v ?@		&6/*		&6/*  !@A  !@A - RWW^^FVO<=RWW^^FVO<=   '& -,s   I:$FJ:
J	
J	c                     S H=  nU R                  [        S5         [        R                  " [        U5        S S S 5        M?     g ! , (       d  f       MQ  = f)N)xrfNz)Flag must be one of 'r', 'w', 'c', or 'n')rN   r   r%   r&   r   )r,   flags     r   test_invalid_flag!DumbDBMTestCase.test_invalid_flagN  sL    %D''
)@A VT*A A &A As   A
A	c                    [         R                  " 5        n[        R                  R	                  US5      n[
        R                  " US5       nU R                  [        UR                  5       5      / 5        U R                   H  nU R                  U   X4'   M     S S S 5        [        R                  " US-   [        R                  5        [        R                  " US-   [        R                  5        [        R                  " U[        R                  [        R                  -  5        [
        R                  " US5       nU R                  [        UR                  5       5      [        U R                  5      5        UR!                  5         S S S 5        S S S 5        g ! , (       d  f       GN
= f! , (       d  f       N)= f! , (       d  f       g = f)Nr   r   r   r	   rL   )r   temp_dirr   r   joinr%   r&   r'   r(   r)   r*   chmodr7   S_IRUSRS_IXUSRr   r5   )r,   dirfnamer-   r.   s        r   test_readonly_files#DumbDBMTestCase.test_readonly_filesU  s   !SGGLLd+EeS)Q  affh4::C!ZZ_AF & * HHUV^T\\2HHUV^T\\2HHS$,,t||34eS)Q  !16$**3EF	 * "!)) *) "!s>   8GAFB%GAF1G
F.	)G1
F?	;G
Gz*requires OS support of non-ASCII encodingsc                    [         R                  nS H%  nU R                  [         R                  X-   5        M'     [        R
                  " US5       nSUS'   S S S 5        U R                  [        R                  R                  US-   5      5        U R                  [        R                  R                  US-   5      5        [        R
                  " US5       nU R                  [        UR                  5       5      S/5        U R                  SU;   5        U R                  US   S5        S S S 5        g ! , (       d  f       N= f! , (       d  f       g = f)Nr   r"   s   values   keyr	   r   rL   )r   TESTFN_NONASCII
addCleanupr   r%   r&   r   r   r   r   r'   r(   r)   )r,   filenamesuffixr   s       r   test_nonascii_filename&DumbDBMTestCase.test_nonascii_filenamed  s     ,,.FOOI,,h.?@ /\\(C(B!BvJ )x&'89:x&'89:\\(C(BT"'')_vh7OOFbL)RZ2 )(	 )( )(s   D7AE7
E
Ec                 ~    [         R                  " [        R                  " [        5      S5      R                  5         g r!   )r%   r&   r   FakePathr   r5   r,   s    r   test_open_with_pathlib_path+DumbDBMTestCase.test_open_with_pathlib_paths  s$    Y''/5;;=r   c                 ~    [         R                  " [        R                  " [        5      S5      R                  5         g r!   )r%   r&   r   fsencoder   r5   r   s    r   test_open_with_bytes_path)DumbDBMTestCase.test_open_with_bytes_pathv  s"    R[[(#.446r   c                     [         R                  " [        R                  " [        R
                  " [        5      5      S5      R                  5         g r!   )r%   r&   r   r   r   r   r   r5   r   s    r   !test_open_with_pathlib_bytes_path1DumbDBMTestCase.test_open_with_pathlib_bytes_pathy  s-    Y''F(;<cBHHJr   c                     [        5         g rW   r   r   s    r   tearDownDumbDBMTestCase.tearDown|      r   c                     [        5         g rW   r   r   s    r   setUpDumbDBMTestCase.setUp  r   r    N)-__name__
__module____qualname____firstlineno__rf   r*   r/   unittest
skipUnlesshasattrr   r   skip_unless_working_chmodr=   rA   rI   rT   rY   r_   rc   rg   rl   r{   r+   rG   rX   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   __static_attributes__r  r   r   r   r      sI   3:>668;__W%E  W-/FG((B ) HB(0"'
#
1P
	,-,6
%
0,C,+4=4'4>$>(+ (( ) 22EG3G3>7Kr   r   __main__)__doc__r#   rt   r   r   r7   r  dbm.dumbdumbr%   r   r   test.supportr   	functoolsr   TESTFNr   r   TestCaser   r  mainr  r   r   <module>r     sg     	  	     " 			fh'' fR zMMO r   