
    h                         S 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	  SSK
Jr   " S S	\R                  5      r " S
 S\5      r\\/rg)z
Test cases for dirdbm module.
    N)	b64decode)dirdbm)rebuild)FilePath)unittestc                   n    \ rS rSrSS jrSS jrSS jrSS jrSS jrSS jr	SS	 jr
SS
 jrSS jrSrg)DirDbmTests   Nc                     [        U R                  5       5      U l        [        R                  " U R                  R                  5      U l        SU l        g )N)s   abcs   foos   /lalals    s    
s   baz)r   mktemppathr   opendbmitemsselfs    _/root/1688_scrapy/alibaba-scraper/venv/lib/python3.13/site-packages/twisted/test/test_dirdbm.pysetUpDirDbmTests.setUp   s6    T[[]+	;;tyy~~.X

    c                     [        S5      nSU R                  U'   SU R                  U'   U R                  U R                  U   S5        g )Nz//==   a)r   r   assertEqual)r   ks     r   test_allDirDbmTests.test_all   s>    f!d+r   c                     U R                   R                  SSS.5        U R                  [        U R                   R	                  5       5      SS15        g)zJ
L{DirDBM.update} updates the DBM with values from a bytes:bytes
mapping.
   b   d)r      c)r   r!   )r#   r"   N)r   updater   setr   r   s    r   test_updateDirDbmTests.test_update!   s>    
 	t401TXX^^-.|0LMr   c                 n    [         R                  " S5      nSUS'   [        R                  " [         5        g )Ns   dirdbm.rebuild.test   values   key)r   Shelfr   )r   ss     r   test_rebuildInteraction#DirDbmTests.test_rebuildInteraction)   s&    LL/0&	r   c           
         U R                   n/ n[        5       nU R                   H+  u  pEXQU'   UR                  U5        UR	                  U5        M-     UR                  5         U R                   H*  u  pEU R                  XA5        U R                  X   U5        M,      US      S5       e! [         a     Of = fUR                  5       n[        UR                  5       5      n[        UR                  5       5      nUR                  5         [        U R                  5      n	U R                  UUS[        U5       S[        U5       35        U R                  UUSR                  [        U5      [        U5      5      5        U R                  U	US[        U	5       S[        U5       35        U R                  5       n
UR                  U
5      nUR                  5       n[        UR                  5       5      n[        UR                  5       5      nUR                  5         U R                  UUSR                  [        U5      [        U5      5      5        U R                  UUS	[        U5      < S[        U5      < 35        U R                  UUS
[        U5      < S[        U5      < 35        UR                  5         U R!                  [#        UR                  5       5      [#        UR                  5       5      s=:H  =(       a?    [#        UR                  5       5      s=:H  =(       a    [#        U5      s=:H  =(       a    S:H  Os  S5        U R%                  [#        U5      [#        U5      5        [&        R(                  " U
5        U R                   H  u  pEX	 U R+                  XAS5        M     U R                  [#        UR                  5       5      SS5        U R                  [#        UR                  5       5      SS5        U R                  [#        UR                  5       5      SS5        U R                  [#        U5      SS5        g )Ns   XXXr   z)didn't raise KeyError on non-existent keyz.keys() output didn't match: z != z'.values() output didn't match: {} != {}zitems() didn't match: z'.copyTo().keys() didn't match: {} != {}z!.copyTo().values() didn't match: z .copyTo().items() didn't match: z.clear() failedz3key is still in database, even though we deleted itzdatabase has keyszdatabase has valueszdatabase has items)r   r%   r   appendaddsortassertInr   KeyErrorkeysvaluesreprformatr   copyToclear
assertTruelenassertNotEqualshutilrmtreeassertNotIn)r   dr4   r5   r   vdbkeysdbvaluesdbitemsr   copyPathd2copykeys
copyvalues	copyitemss                  r   test_dbmDirDbmTests.test_dbm.   sh   HH JJDAaDKKNJJqM  			 JJDAMM!QT1% 
	BfI BAA1  		 qxxz?aggi.DJJ+DJ<tDL>J	

 	5<<Vd8n	
 	$T%[Md7m_E	
 ;;=XXh668_
	N	5<<Vd8n	
 	H~tJ/1	
 	F|T)_.	
 	
	Nc"))+.QQ#bhhj/QQSWQQPQQ	
 	CFCG,h JJDAK 
 	QVVX+>?QXXZ!-BCQWWY,@AQ$89s   B+ +
B87B8c                    SS K nSU R                  S'   U R                  [        UR                  5       U R                  R	                  S5      -
  5      S:*  5        U R                  [        U R                  R                  S5        g )Nr      v   k   s   nokey)timer   r:   absgetModificationTimeassertRaisesr3   )r   rP   s     r   test_modificationTime!DirDbmTests.test_modificationTime   sa     DIIK$((*F*Ft*LLMQRRS(DHH$@$@(Kr   c                 j   U R                   R                  S5      nU R                  R                  US-   5      R	                  SS9 nUR                  S5        SSS5        U R                   R                  S5      nU R                  R                  U5      R	                  SS9 nUR                  S5        SSS5        U R                  R                  US-   5      R	                  SS9 nUR                  S	5        SSS5        U R                  R                  S
5      R	                  SS9 nUR                  S5        SSS5        [        R                  " U R                  R                  5      nU R                  US   S5        U R                  US   S5        U R                  U R                  R                  S5      5        U R                  U R                  R                  S5      5        g! , (       d  f       GN= f! , (       d  f       GNQ= f! , (       d  f       GN= f! , (       d  f       N= f)z:
DirDBM: test recovery from directory after a faked crash
s   key1s   .rplw)moder)   Ns   key2s   corrects   wrongzaa.news   deletedz*.newz*.rpl)r   _encoder   childr   writer   DirDBMr   assertFalseglobChildren)r   r   fk2r   s        r   test_recoveryDirDbmTests.test_recovery   s    HHW%YY__Q[)..C.8AGGH 9 XXg&YY__R %%3%/1GGJ 0YY__R'\*//S/9QGGH : YY__X&+++5GGJ 6 mmDIINN+Wx0Wz2//89//89! 98 0/99 65s0   G.$H )H+H$.
G= 
H
H!$
H2c                    U R                  [        U R                  R                  SS5         U R                  [        U R                  R                  SS5        U R                  [        U R                  R                  S5        U R                  [        U R                  R                  S5        U R                  [        U R                  R                  S5        U R                  [        U R                  R                  S5        U R                  [        U R                  R                  S5        g! [        R
                   a.    U R                  U R                  [        R                  5         GNf = f)z`
L{dirdbm.DirDBM} operations only support string keys: other types
should raise a L{TypeError}.
   32rO   N)rS   	TypeErrorr   __setitem__r   FailTestassertIsInstancer   r*   __getitem____delitem__has_key__contains__rR   r   s    r   test_nonStringKeysDirDbmTests.test_nonStringKeys   s   
 	)TXX%9%91cB	:i)=)=sAF 	)TXX%9%91=)TXX%9%91=)TXX%5%5q9)TXX%:%:A>)TXX%A%A1E    	:!!$((FLL9	:s   ,D2 2>E43E4c                     S[         [           S[        SS4S jnSU R                  S'   U R	                  U R                  SU5        U R                  [        U R                  R                  SS	5        g)
z$
Failure path when setting an item.
r   datareturnNc                 :    U R                  U5        [        S5      e)Nzfail to write)
setContentOSError)r   rr   s     r   
_writeFail,DirDbmTests.test_failSet.<locals>._writeFail   s    OOD!/**r   s   tests   failkey
_writeFiles   test2)r   strbytesr   patchrS   IOErrorrh   )r   rw   s     r   test_failSetDirDbmTests.test_failSet   sb    
	+Xc] 	+% 	+D 	+  '

488\:6'488#7#7XNr   r   r   r   rs   N)__name__
__module____qualname____firstlineno__r   r   r&   r,   rJ   rT   ra   ro   r~   __static_attributes__ r   r   r	   r	      s5    
,N 
^:@L :.F"Or   r	   c                       \ rS rSrSS jrSrg)
ShelfTests   Nc                     [        U R                  5       5      U l        [        R                  " U R                  R                  5      U l        SU l        g )N)r   r   r   )s   int   )s   floatg      (@)s   tuple)Nr   )r   r   r   r   r*   r   r   r   s    r   r   ShelfTests.setUp   s5    T[[]+	<<		/

r   r   r   )r   r   r   r   r   r   r   r   r   r   r      s    

r   r   )__doc__r=   base64r   twisted.persistedr   twisted.pythonr   twisted.python.filepathr   twisted.trialr   TestCaser	   r   	testCasesr   r   r   <module>r      sM      $ " , "@O(## @OF
 
 *%	r   