
    /hh[+                     ,   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JrJr  \R                  " S5      rS SKrS SKJr  Sr\" \ S	5      (       a  \ R,                  " 5       S :H  r " S
 S\R.                  5      r " S S\R.                  5      r " S S\5      r\R6                  " \S5       " S S\R.                  5      5       r " S S\5      r " S S\5      r " S S\5      r " S S\5      r \!S:X  a  \RD                  " 5         gg)    N)closing)partial)Path)cpython_onlyimport_helper	os_helperzdbm.sqlite3)_normalize_uriFgeteuidc                        \ rS rSrS rS rSrg)_SQLiteDbmTests   c                     [         R                  U l        [        R	                  U R                  S5      nUR                  5         g )Nc)r   TESTFNfilenamedbm_sqlite3opencloseselfdbs     >/opt/python-3.13.8/usr/lib/python3.13/test/test_dbm_sqlite3.pysetUp_SQLiteDbmTests.setUp   s.    !((dmmS1

    c                 \    S H&  n[         R                  " U R                  U-   5        M(     g )N) z-walz-shm)r   unlinkr   )r   suffixs     r   tearDown_SQLiteDbmTests.tearDown    s#    (FT]]V34 )r   )r   N)__name__
__module____qualname____firstlineno__r   r    __static_attributes__ r   r   r   r      s    
5r   r   c                   f    \ rS rSrS r\R                  " \R                  S:H  S5      S 5       r	Sr
g)URI%   c                     SnU HF  u  p#U R                  X#S9   U R                  [        U5      R                  U5      5        S S S 5        MH     g ! , (       d  f       MZ  = f)N))z/absolute/////b/cz/absolute/b/c)zPRE#MID##ENDzPRE%23MID%23%23END)z%#?%%#z%25%23%3F%25%25%23path
normalized)subTest
assertTruer	   endswithr   datasetr-   r.   s       r   test_uri_substitutionsURI.test_uri_substitutions'   sR    

 !(D4?t 4 = =j IJ @? !(??s   *A
A	win32zrequires Windowsc                 *   SnU Hy  u  p#U R                  X#S9   [        U5      R                  5       (       d  U R                  SU< 35        U R	                  [        U5      R                  U5      5        S S S 5        M{     g ! , (       d  f       M  = f)N))z2018\January.xlsxz2018/January.xlsx)z%C:\Projects\apilibrary\apilibrary.slnz&/C:/Projects/apilibrary/apilibrary.sln)z$C:Projects\apilibrary\apilibrary.slnz%/C:Projects/apilibrary/apilibrary.slnr,   zskipping relative path: )r/   r   is_absoluteskipTestr0   r	   r1   r2   s       r   test_uri_windowsURI.test_uri_windows1   sy    

 !(D4?Dz--//MM$<TH"EFt 4 = =j IJ @? !(??s   AB
B	r'   N)r"   r#   r$   r%   r4   unittest
skipUnlesssysplatformr:   r&   r'   r   r   r)   r)   %   s6    K 02DEK FKr   r)   c                   R   ^  \ rS rSrU 4S jrU 4S jrS rS rS rS r	S r
S	rU =r$ )
ReadOnlyE   c                    > [         TU ]  5         [        R                  U R                  S5       nSUS'   SUS'   S S S 5        [        R                  U R                  S5      U l        g ! , (       d  f       N4= f)Nwvalue1   key1value2   key2rsuperr   r   r   r   r   )r   r   	__class__s     r   r   ReadOnly.setUpG   s\    dmmS1R"BwK"BwK 2 ""4==#6 21s   A))
A7c                 V   > U R                   R                  5         [        TU ]  5         g Nr   r   rK   r    r   rL   s    r   r    ReadOnly.tearDownN       r   c                     U R                  U R                  S   S5        U R                  U R                  S   S5        g )NrF   s   value1rH   s   value2assertEqualr   r   s    r   test_readonly_readReadOnly.test_readonly_readR   s4    )95)95r   c                     U R                  [        R                  5         SU R                  S'   S S S 5        g ! , (       d  f       g = f)Nvalue   newassertRaisesr   errorr   rW   s    r   test_readonly_writeReadOnly.test_readonly_writeV   s/    {001%DGGFO 211	   9
Ac                     U R                  [        R                  5         U R                  S	 S S S 5        g ! , (       d  f       g = f)NrF   r]   rW   s    r   test_readonly_deleteReadOnly.test_readonly_deleteZ   s.    {001  211s	   7
Ac                 \    U R                  U R                  R                  5       SS/5        g NrF   rH   )rV   r   keysrW   s    r   test_readonly_keysReadOnly.test_readonly_keys^   s!    '7);<r   c                 j    U R                  U R                   Vs/ s H  oPM     snSS/5        g s  snf rg   rU   )r   ks     r   test_readonly_iterReadOnly.test_readonly_itera   s-    TWW-W!W-/AB-s   0r   )r"   r#   r$   r%   r   r    rX   r`   rd   ri   rm   r&   __classcell__rL   s   @r   rA   rA   E   s-    76&!=C Cr   rA   z$test is meanless with root privilegec                   2    \ rS rSrS rS rS rS rS rSr	g)	ReadOnlyFilesysteme   c                    [         R                  U l        U R                  [         R                  U R                  5        [
        R                  " U R                  5        [
        R                  R                  U R                  S5      U l	        [        R                  U R                  S5      nSUS'   UR                  5         g )Nztest.dbr      value   key)r   r   test_dir
addCleanuprmtreeosmkdirr-   joindb_pathr   r   r   r   s     r   r   ReadOnlyFilesystem.setUph   sy    !((	(($--8
ww||DMM9=dllC06


r   c                     [         R                  " U R                  [        R                  5        [
        R                  U R                  S5       nU R                  US   S5        S S S 5        g ! , (       d  f       g = fNrI   rw   rv   )r{   chmodr~   statS_IREADr   r   rV   r   s     r   test_readonly_file_read*ReadOnlyFilesystem.test_readonly_file_readr   sN    
t||,dllC0BRZ2 100s   A//
A=c                 R   [         R                  " U R                  [        R                  5        [
        R                  U R                  S5       nU R                  [
        R                  5         SUS'   S S S 5        S S S 5        g ! , (       d  f       N= f! , (       d  f       g = f)NrD      newvalue   newkey)	r{   r   r~   r   r   r   r   r^   r_   r   s     r   test_readonly_file_write+ReadOnlyFilesystem.test_readonly_file_writew   sh    
t||,dllC0B"";#4#45 +9 6 1055 10s$    B0B6B
B	B
B&c                 "   [         R                  " U R                  [        R                  [        R
                  -  5        [        R                  U R                  S5       nU R                  US   S5        S S S 5        g ! , (       d  f       g = fr   )
r{   r   rx   r   r   S_IEXECr   r   r~   rV   r   s     r   test_readonly_dir_read)ReadOnlyFilesystem.test_readonly_dir_read}   sW    
t|| ;<dllC0BRZ2 100s   !B  
Bc                    [         R                  " U R                  [        R                  [        R
                  -  5        [        R                  U R                  S5       n SUS'   SnS S S 5        [        R                  U R                  S5       nW(       a  U R                  US   S5        OU R                  SU5        S S S 5        g ! [        R                   a    Sn Nyf = f! , (       d  f       N= f! , (       d  f       g = f)NrD   r   r   TFrI   )r{   r   rx   r   r   r   r   r   r~   r_   rV   assertNotIn)r   r   modifieds      r   test_readonly_dir_write*ReadOnlyFilesystem.test_readonly_dir_write   s    
t|| ;<dllC0B! +9 1 dllC0B  I<  B/	 10 $$ ! !	 10 10s6   !C'#C0C8C$!C'#C$$C''
C58
D)r~   rx   N)
r"   r#   r$   r%   r   r   r   r   r   r&   r'   r   r   rs   rs   e   s    3
,3
0r   rs   c                   R   ^  \ rS rSrU 4S jrU 4S jrS rS rS rS r	S r
S	rU =r$ )
	ReadWrite   c                 l   > [         TU ]  5         [        R                  U R                  S5      U l        g NrD   rJ   rQ   s    r   r   ReadWrite.setUp   $    ""4==#6r   c                 V   > U R                   R                  5         [        TU ]  5         g rO   rP   rQ   s    r   r    ReadWrite.tearDown   rS   r   c                 4   [        [        R                  " U R                  5      5       nUR	                  S5       Vs/ s H  o"S   PM	     nnUR	                  S5       Vs/ s H  o"S   PM	     nnS S S 5        X44$ s  snf s  snf ! , (       d  f       WW4$ = f)NzSELECT key FROM Dictr   zSELECT value FROM Dict)r   sqlite3connectr   execute)r   cxrI   rh   valss        r   
db_contentReadWrite.db_content   s    W__T]]34"$**-C"DE"DQaD"DDE"$**-E"FG"FQaD"FDG 5 z FG 54 Tzs(   BA<B!B/B<
B
Bc                     SU R                   S'   SU R                   S'   U R                  5       u  pU R                  US/5        U R                  US/5        g )Nr[   keyotherrw   s   otherr   r   rV   r   rh   r   s      r   test_readwrite_unique_key#ReadWrite.test_readwrite_unique_key   sN      __&
x(z*r   c                 P   SU R                   S'   SU R                   S'   U R                   S	 U R                  5       u  pU R                  US/5        U R                  US/5        U R                   S	 U R                  5       u  pU R                  U/ 5        U R                  U/ 5        g )Nr[   r   r   newr\   rw   rv   r   r   s      r   test_readwrite_deleteReadWrite.test_readwrite_delete   s      GGFO__&
x(z*GGFO__&
r"r"r   c                     U R                  [        R                  5         SU R                  S '   S S S 5        g ! , (       d  f       g = f)Nr[   r]   rW   s    r   test_readwrite_null_key!ReadWrite.test_readwrite_null_key   s/    {001#DGGDM 211rb   c                     U R                  [        R                  5         S U R                  S'   S S S 5        g ! , (       d  f       g = fNrw   r]   rW   s    r   test_readwrite_null_value#ReadWrite.test_readwrite_null_value   s/    {001"DGGFO 211rb   ro   )r"   r#   r$   r%   r   r    r   r   r   r   r   r&   rp   rq   s   @r   r   r      s+    7+#$# #r   r   c                   p   ^  \ rS rSrU 4S jrU 4S jrS rS rS rS r	S r
S	 rS
 rS rS rS rSrU =r$ )Misuse   c                 l   > [         TU ]  5         [        R                  U R                  S5      U l        g r   rJ   rQ   s    r   r   Misuse.setUp   r   r   c                 V   > U R                   R                  5         [        TU ]  5         g rO   rP   rQ   s    r   r    Misuse.tearDown   rS   r   c                     SU R                   S'   [        R                  U R                  S5       nU R	                  US   S5        S S S 5        g ! , (       d  f       g = f)Nr[   r   r   rw   rv   )r   r   r   r   rV   r   s     r   test_misuse_double_create Misuse.test_misuse_double_create   sE     dmmS1RRZ2 211s   A
Ac                 8    U R                   R                  5         g rO   )r   r   rW   s    r   test_misuse_double_closeMisuse.test_misuse_double_close   s    r   c                     SnU R                  [        U5         [        R                  U R                  SS9  S S S 5        g ! , (       d  f       g = f)Nz*must be.*'r'.*'w'.*'c'.*'n', not 'invalid'invalidflag)assertRaisesRegex
ValueErrorr   r   r   )r   regexs     r   test_misuse_invalid_flagMisuse.test_misuse_invalid_flag   s:    <##J6T]]; 766s   A
Ac                     SU R                   S'   U R                   S	 U R                  [        5         U R                   S	 S S S 5        g ! , (       d  f       g = f)Nr[   r   rw   )r   r^   KeyErrorrW   s    r   test_misuse_double_delete Misuse.test_misuse_double_delete   s?     GGFOx( )((s   A		
Ac                     U R                  [        5         U R                  S     S S S 5        g ! , (       d  f       g = fr   )r^   r   r   rW   s    r   test_misuse_invalid_keyMisuse.test_misuse_invalid_key   s'    x(GGFO )((s   /
=c                    SU R                   S'   [        U R                   5      nU R                   R                  5         U R                  [        R
                  5         [        U5        S S S 5        g ! , (       d  f       g = f)N   1)r   iterr   r^   r   r_   nextr   its     r   test_misuse_iter_close1Misuse.test_misuse_iter_close1   sP    $'']{001H 211s   A33
Bc                 <   SU R                   S'   SU R                   S'   [        U R                   5      n[        U5        U R                   R                  5         U R	                  [
        R                  5         [        U5        S S S 5        g ! , (       d  f       g = f)Nr   r      2)r   r   r   r   r^   r   r_   r   s     r   test_misuse_iter_close2Misuse.test_misuse_iter_close2   sd    $'']R{001H 211s   8B
Bc                 &   U R                   R                  5         U R                  [        R                  5         U R                   S     S S S 5        U R                  [        R                  5         SU R                   S'   S S S 5        U R                  [        R                  5         U R                   S	 S S S 5        U R                  [        R                  5         [        U R                   5        S S S 5        U R                  [        R                  5         U R                   R                  5         S S S 5        g ! , (       d  f       N= f! , (       d  f       N= f! , (       d  f       N= f! , (       d  f       N= f! , (       d  f       g = f)Ns   readr[   s   writes   del)r   r   r^   r   r_   lenrh   rW   s    r   test_misuse_use_after_close"Misuse.test_misuse_use_after_close   s    {001GGG 2{001 'DGGH 2{001 2{001L 2{001GGLLN 21 2111111111s;   D>1E(E E1F>
E
E 
E.1
E?
Fc                     U R                  [        R                  5         U R                  R	                  SSSS9  S S S 5        g ! , (       d  f       g = f)Nznew.dbni  )r   mode)r^   r   r_   r   __init__rW   s    r   test_misuse_reinitMisuse.test_misuse_reinit   s;    {001GGXCe< 211s   A
Ac                     S H?  nU R                  [        R                  5         [        R                  SSS9nS S S 5        MA     g ! , (       d  f       MS  = f)N)rI   rD   r   r   r   r   r   )r^   r   r_   r   )r   r   r   s      r   test_misuse_empty_filename!Misuse.test_misuse_empty_filename  sD    &D"";#4#45 %%bs%3 65 '55s   A
A	ro   )r"   r#   r$   r%   r   r    r   r   r   r   r   r   r   r   r   r   r&   rp   rq   s   @r   r   r      sD    73
<
 =4 4r   r   c                   J   ^  \ rS rSrSrU 4S jrU 4S jrS rS rS r	Sr
U =r$ )		DataTypesi  ))*   s   42)gQ	@s   3.14)strings   string)   bytesr   c                 l   > [         TU ]  5         [        R                  U R                  S5      U l        g r   rJ   rQ   s    r   r   DataTypes.setUp  r   r   c                 V   > U R                   R                  5         [        TU ]  5         g rO   rP   rQ   s    r   r    DataTypes.tearDown  rS   r   c                     U R                    HJ  u  pU R                  XS9   XR                  S'   U R                  U R                  S   U5        S S S 5        ML     g ! , (       d  f       M^  = f)Nrawcoercedr   rw   r3   r/   r   rV   r   r   r   s      r   test_datatypes_valuesDataTypes.test_datatypes_values  sR     LLLC#7!$  ': 87 )77s   .A
A+	c                 6   U R                    Hw  u  pU R                  XS9   SU R                  U'   U R                  U R                  U   S5        U R                  U R                  U   S5        U R                  U	 S S S 5        My     g ! , (       d  f       M  = f)Nr   r[   rv   r   r   s      r   test_datatypes_keysDataTypes.test_datatypes_keys  sx     LLLC#7&  !18<  x8GGCL 87 )77s   AB		
B	c                     SU R                   S'   SU R                   S'   SU R                   S'   U R                  U R                   R                  5       S/5        g )Nr[   10s   10
   )r   rV   rh   rW   s    r   test_datatypes_replace_coerced(DataTypes.test_datatypes_replace_coerced(  sE     %1r   ro   )r"   r#   r$   r%   r3   r   r    r   r  r  r&   rp   rq   s   @r   r   r     s(    G7;!2 2r   r   c                      ^  \ rS rSrSrU 4S jrSS jr\S 5       r\S 5       r	\S 5       r
\S 5       r\S	 5       r\S
 5       rS rS rSrU =r$ )CorruptDatabasei/  z@Verify that database exceptions are raised as dbm.sqlite3.error.c                 $  > [         TU ]  5         [        [        R                  " U R
                  5      5       nU   UR                  S5        UR                  S5        S S S 5        S S S 5        g ! , (       d  f       N= f! , (       d  f       g = f)NzDROP TABLE IF EXISTS Dictz"CREATE TABLE Dict (invalid_schema))rK   r   r   r   r   r   r   )r   r   rL   s     r   r   CorruptDatabase.setUp2  s\    W__T]]34

67

?@  54 54s"   B#A0B0
A>	:B
Bc                    [        [        R                  U R                  U5      5       nU R	                  [        R
                  5         U" U5        S S S 5        S S S 5        g ! , (       d  f       N= f! , (       d  f       g = frO   )r   r   r   r   r^   r_   )r   r   fnshould_succeedr   s        r   checkCorruptDatabase.check9  sU    [%%dmmT:;r"";#4#452 6 <;55 <;s#    A5
	A$A5$
A2	.A55
Bc                     U S   $ Nr   r'   ro   s    r   readCorruptDatabase.read>  s    %yr   c                     SU S'   g )Nr[   r   r'   ro   s    r   writeCorruptDatabase.writeB  s    5	r   c                 ,    [        [        U 5      5        g rO   )r   r   ro   s    r   r   CorruptDatabase.iterF  s    T"Xr   c                 $    U R                  5         g rO   )rh   ro   s    r   rh   CorruptDatabase.keysJ  s    
	r   c                 
    U S	 g r  r'   ro   s    r   del_CorruptDatabase.del_N  s	    uIr   c                     [        U 5        g rO   )r   ro   s    r   len_CorruptDatabase.len_R  s	    Br   c                 R   S H  nU R                  US9   [        U R                  US9nU" U R                  S9  U" U R                  S9  U" U R
                  S9  U" U R                  S9  U" U R                  S9  U" U R                  S9  S S S 5        M     g ! , (       d  f       M  = f)N)rI   rD   r   r   )r  )	r/   r   r  r  r  r   rh   r  r!  )r   r   r  s      r   test_corrupt_readwrite&CorruptDatabase.test_corrupt_readwriteV  s    !D4(

6#$#### )( "((s   A5B
B&	c                     [        [        R                  U R                  S5      5       nSUS'   US   n[	        [        U5      5        US	 S S S 5        g ! , (       d  f       g = f)Nr   r  foos   foo)r   r   r   r   r   r   )r   r   _s      r   test_corrupt_force_new&CorruptDatabase.test_corrupt_force_newa  sM    [%%dmmS9:bBuI6
AbN6
	 ;::s   "A
A#r'   )F)r"   r#   r$   r%   __doc__r   r  staticmethodr  r  r   rh   r  r!  r$  r)  r&   rp   rq   s   @r   r
  r
  /  s    JA
            	$ r   r
  __main__)#r{   r   r>   test.supporttestr<   
contextlibr   	functoolsr   pathlibr   r   r   r   import_moduler   r   dbm.sqlite3r	   root_in_posixhasattrr
   TestCaser   r)   rA   skipIfrs   r   r   r   r
  r"   mainr'   r   r   <module>r:     s   	  
      ? ?))-8
  & 
2yZZ\Q&M	5h'' 	5K(

 K@C C@ 
 FG(0** (0 H(0V+# +#\E4_ E4P%2 %2P7o 7t zMMO r   