o
    HXîh´*  ã                   @   sš   	 d dl Z d dlZd dlZd dlZd dlZd dlZd dlmZ d dl	m
Z
 d dlmZ d dlmZ ejZdd„ ZG dd„ dejƒZed	krKe ¡  dS dS )
é    N)Úsupport)Ú	os_helper)Úpartialc               	   C   s2   dD ]} z	t  t|  ¡ W q ty   Y qw d S )N©ú.dirú.datú.bak)ÚosÚunlinkÚ_fnameÚOSError)Úext© r   ú</opt/python-3.10.19/usr/lib/python3.10/test/test_dbm_dumb.pyÚ_delete_files   s   ÿýr   c                   @   s&  e Zd Zddddddddd	d
ddddd d¡diZdd„ Ze ee	dƒd¡dd„ ƒZ
dd„ Zdd„ Zdd„ Zdd„ Zd d!„ Zd"d#„ Zd$d%„ Zd&d'„ Zd(d)„ Zd*d+„ Zd,d-„ Zd.d/„ Zd0d1„ Zd2d3„ Zd4d5„ Zd6d7„ Zd8d9„ Zd:d;„ Zd<d=„ Zd>d?„ Zd@dA„ Ze e j!dB¡dCdD„ ƒZ"dEdF„ Z#dGdH„ Z$dIS )JÚDumbDBMTestCaseó   0ó    ó   as   Python:ó   bs   Programmingó   cs   theó   ds   wayó   fs   Guidoó   gs   intendedõ   Ã¼úutf-8ó   !c                 C   sp   t  t td¡¡%}|  t| ¡ ƒg ¡ | jD ]	}| j| ||< q|  	|¡ W d   ƒ d S 1 s1w   Y  d S )NÚc)
Ú
contextlibÚclosingÚdumbdbmÚopenr   ÚassertEqualÚlistÚkeysÚ_dictÚread_helper)ÚselfÚfÚkeyr   r   r   Útest_dumbdbm_creation%   s   
"üz%DumbDBMTestCase.test_dumbdbm_creationÚumaskztest needs os.umask()c              	   C   sž   zt  d¡}t tdd¡}| ¡  W t  |¡ nt  |¡ w d}t jdkr'd}dd l}t  td ¡}|  | 	|j
¡|¡ t  td	 ¡}|  | 	|j
¡|¡ d S )
Né   r   iŸ  i  Úposixi¶  r   r   r   )r	   r+   r    r!   r   ÚcloseÚnameÚstatr"   ÚS_IMODEÚst_mode)r'   Z	old_umaskr(   Zexpected_moder0   Ústr   r   r   Útest_dumbdbm_creation_mode,   s   


z*DumbDBMTestCase.test_dumbdbm_creation_modec                 C   s6   t  t¡}d|d< |  |d d¡ | ¡  | ¡  d S )Nr   r   )r    r!   r   r"   r.   ©r'   r(   r   r   r   Útest_close_twiceA   s
   
z DumbDBMTestCase.test_close_twicec                 C   s€   |   ¡  t t td¡¡)}d | jd< |d< |  |¡ |  | 	dd¡d¡ |  |d d¡ W d   ƒ d S 1 s9w   Y  d S )NÚws   indentedr   ó   xxxó   foo)
Úinit_dbr   r   r    r!   r   r%   r&   r"   Ú
setdefaultr5   r   r   r   Útest_dumbdbm_modificationH   s   
"ûz)DumbDBMTestCase.test_dumbdbm_modificationc              	   C   s2  |   ¡  t t td¡¡‚}|  |¡ |  tjd¡ d|d< W d   ƒ n1 s)w   Y  |  tjd¡ |d= W d   ƒ n1 sCw   Y  |  	| 
d¡| jd ¡ |  	| 
dd¡d¡ |  | 
d¡¡ |  t¡ |d  W d   ƒ n1 szw   Y  W d   ƒ d S W d   ƒ d S 1 s’w   Y  d S )NÚrz'The database is opened for reading onlyó   xr   r   r8   r9   )r:   r   r   r    r!   r   r&   ÚassertRaisesRegexÚerrorr"   Úgetr%   ZassertIsNoneÚassertRaisesÚKeyErrorr5   r   r   r   Útest_dumbdbm_readQ   s,   
ÿ
þÿþ
ÿô"ôz!DumbDBMTestCase.test_dumbdbm_readc                 C   sH   |   ¡  t t t¡¡}|  |¡}W d   ƒ d S 1 sw   Y  d S ©N)r:   r   r   r    r!   r   Úkeys_helper)r'   r(   r$   r   r   r   Útest_dumbdbm_keysb   s   "ÿz!DumbDBMTestCase.test_dumbdbm_keysc                 C   sJ   t  t t¡¡}d|d< |  d|¡ W d   ƒ d S 1 sw   Y  d S )Nó   helloó   1)r   r   r    r!   r   ÚassertInr5   r   r   r   Útest_write_containsg   s   "þz#DumbDBMTestCase.test_write_containsc                 C   s†   t  t t¡¡}d|d< d|d< W d   ƒ n1 sw   Y  t  t t¡¡}|  |d d¡ W d   ƒ d S 1 s<w   Y  d S )NrH   rI   ó   hello2)r   r   r    r!   r   r"   r5   r   r   r   Útest_write_write_readl   s   
þ"ÿz%DumbDBMTestCase.test_write_write_readc                 C   s\   |   ¡  t t td¡¡}|  |d | jd d¡ ¡ W d   ƒ d S 1 s'w   Y  d S )Nr=   r   r   )	r:   r   r   r    r!   r   r"   r%   Úencoder5   r   r   r   Útest_str_readt   s   "ÿzDumbDBMTestCase.test_str_readc                 C   s¾   |   ¡  t t t¡¡}d|d< d|d< W d   ƒ n1 sw   Y  t t td¡¡(}|  d|¡ |  |d d¡ | j	d d¡ ¡ |  |d d¡ W d   ƒ d S 1 sXw   Y  d S )	Nr   r   ÚaÚ1r=   r   rI   r   )
r:   r   r   r    r!   r   rJ   r"   rN   r%   r5   r   r   r   Útest_str_write_containsy   s   
þÿ"üz'DumbDBMTestCase.test_str_write_containsc                 C   s  t  t t¡¡}d|d< d|d< W d   ƒ n1 sw   Y  t td d¡}| ¡ }W d   ƒ n1 s7w   Y  tjdkrH| 	dd	¡}n| 	d	d¡}t td d
¡}| 
|¡ W d   ƒ n1 sfw   Y  t t¡}|  |d d¡ |  |d d¡ d S )NrH   rI   rL   ó   2r   ÚrbÚ
ó   
s   
Úwb)r   r   r    r!   r   ÚioÚreadr	   ÚlinesepÚreplaceÚwriter"   )r'   r(   ÚfileÚdatar   r   r   Útest_line_endings„   s    
þ
ÿ
ÿ
z!DumbDBMTestCase.test_line_endingsc                 C   s0   |   |¡}| jD ]}|  | j| || ¡ qd S rE   )rF   r%   r"   )r'   r(   r$   r)   r   r   r   r&   š   s   

ÿzDumbDBMTestCase.read_helperc                 C   sR   t  t td¡¡}| jD ]	}| j| ||< qW d   ƒ d S 1 s"w   Y  d S ©NÚn)r   r   r    r!   r   r%   ©r'   r(   Úkr   r   r   r:   Ÿ   s
   
ÿ"ÿzDumbDBMTestCase.init_dbc                 C   s*   t | ¡ ƒ}t | j ¡ ƒ}|  ||¡ |S rE   )Úsortedr$   r%   r"   )r'   r(   r$   Zdkeysr   r   r   rF   ¤   s   zDumbDBMTestCase.keys_helperc           	   	   C   s  dd l }i }tdƒD ]€}t t t¡¡?}tdƒD ]2}| d¡}|  ¡ dk r1||v r0||= ||= q| d¡| d¡ }|||< |||< |  	|| |¡ qW d   ƒ n1 sVw   Y  t t t¡¡}t
dd	„ | ¡ D ƒƒ}t
| ¡ ƒ}|  	||¡ W d   ƒ n1 s…w   Y  q
d S )
Nr   é   éd   Zabcdefghijklmgš™™™™™É?)r   r   r   i'  c                 s   s"    | ]\}}|  d ¡|fV  qdS )zlatin-1N)rN   )Ú.0rc   Úvr   r   r   Ú	<genexpr>¾   s   €  z.DumbDBMTestCase.test_random.<locals>.<genexpr>)ÚrandomÚranger   r   r    r!   r   ÚchoiceÚ	randranger"   rd   Úitems)	r'   rj   ÚdZdummyr(   rc   rh   ZexpectedZgotr   r   r   Útest_random¬   s0   
€öÿý€òzDumbDBMTestCase.test_randomc                 C   s°   t  td¡}d|d< W d   ƒ n1 sw   Y  t  td¡}|  t| ¡ ƒdg¡ W d   ƒ n1 s6w   Y  |  t j¡ | ¡  W d   ƒ d S 1 sQw   Y  d S )Nr   zcontext managerzdumbdbm context managerr=   s   dumbdbm context manager)r    r!   r   r"   r#   r$   rB   r@   )r'   Údbr   r   r   Útest_context_managerÂ   s   
ÿÿ
"ÿz$DumbDBMTestCase.test_context_managerc              	   C   sü   t  td¡}| ¡  ttj|ƒttj|dƒttj|ƒttj	|ƒfD ]%}|  
t j¡}|dƒ W d   ƒ n1 s8w   Y  |  t|jƒd¡ q!t d¡t d¡t d¡tfD ]%}|  
t j¡}||ƒ W d   ƒ n1 smw   Y  |  t|jƒd¡ qVd S )Nr   ÚbÚtestz"DBM object has already been closedr$   Ziterkeysrn   )r    r!   r   r.   r   ÚoperatorÚdelitemÚsetitemÚgetitemÚcontainsrB   r@   r"   ÚstrÚ	exceptionÚmethodcallerÚlen)r'   r(   ÚmethÚcmr   r   r   Útest_check_closedÌ   s2   


ý
ÿÿý
ÿÿúz!DumbDBMTestCase.test_check_closedc                 C   sˆ   t  td¡}| jD ]	}| j| ||< q
W d   ƒ n1 sw   Y  t  td¡}|  | ¡ g ¡ W d   ƒ d S 1 s=w   Y  d S r`   )r    r!   r   r%   r"   r$   rb   r   r   r   Útest_create_newâ   s   
ÿÿ"ÿzDumbDBMTestCase.test_create_newc              
   C   sÎ   t td ddd}| d¡ W d   ƒ n1 sw   Y  t ¡ ;}|  t¡ t  t¡}W d   ƒ n1 s9w   Y  W d   ƒ n1 sHw   Y  |  | 	¡ d¡ W d   ƒ d S 1 s`w   Y  d S )Nr   r7   r   )Úencodingzstr(print('Hacked!')), 0
Ú )
r!   r   r\   r   Zcaptured_stdoutrB   Ú
ValueErrorr    r"   Úgetvalue)r'   ÚstreamÚstdoutr(   r   r   r   Ú	test_evalê   s   ÿ
ÿ€ÿ"üzDumbDBMTestCase.test_evalc              	   C   sv   dD ]6}t ƒ  |  t¡ t t|¡ W d   ƒ n1 sw   Y  |  tj 	td ¡¡ |  tj 	td ¡¡ qd S )N©r=   r7   r   r   )
r   rB   ÚFileNotFoundErrorr    r!   r   ÚassertFalser	   ÚpathÚexists)r'   Úvaluer   r   r   Útest_missing_dataó   s   ÿûz!DumbDBMTestCase.test_missing_datac              	   C   sª   t  td¡}W d   ƒ n1 sw   Y  t td ¡ dD ]3}|  t¡ t  t|¡ W d   ƒ n1 s7w   Y  |  tj 	td ¡¡ |  tj 	td ¡¡ qd S )Nra   r   r‰   r   )
r    r!   r   r	   r
   rB   rŠ   r‹   rŒ   r   )r'   r(   rŽ   r   r   r   Útest_missing_indexû   s   ÿÿüz"DumbDBMTestCase.test_missing_indexc              	   C   sF   dD ]}|   td¡ t t|¡ W d   ƒ n1 sw   Y  qd S )N)ÚxZrfNz)Flag must be one of 'r', 'w', 'c', or 'n')r?   r„   r    r!   r   )r'   Úflagr   r   r   Útest_invalid_flag  s   ÿý€ÿz!DumbDBMTestCase.test_invalid_flagc              	   C   s,  t  ¡ ˆ}tj |d¡}t |d¡}|  t| 	¡ ƒg ¡ | j
D ]	}| j
| ||< q W d   ƒ n1 s4w   Y  t |d tj¡ t |d tj¡ t |tjtjB ¡ t |d¡}|  t| 	¡ ƒt| j
ƒ¡ | ¡  W d   ƒ n1 sww   Y  W d   ƒ d S W d   ƒ d S 1 sw   Y  d S )Nrq   ra   r   r   r=   )r   Ztemp_dirr	   rŒ   Újoinr    r!   r"   r#   r$   r%   Úchmodr0   ÚS_IRUSRÚS_IXUSRrd   r.   )r'   ÚdirZfnamer(   r)   r   r   r   Útest_readonly_files  s$   

ÿþ
þ÷	"÷z#DumbDBMTestCase.test_readonly_filesz*requires OS support of non-ASCII encodingsc                 C   sè   t j}dD ]}|  t j|| ¡ qt |d¡}d|d< W d   ƒ n1 s&w   Y  |  tj 	|d ¡¡ |  tj 	|d ¡¡ t |d¡#}|  
t| ¡ ƒdg¡ |  d|v ¡ |  
|d d¡ W d   ƒ d S 1 smw   Y  d S )Nr   r   s   values   keyr   r   r=   )r   ÚTESTFN_NONASCIIZ
addCleanupr
   r    r!   Z
assertTruer	   rŒ   r   r"   r#   r$   )r'   ÚfilenameÚsuffixrq   r   r   r   Útest_nonascii_filename  s   
ÿ"ýz&DumbDBMTestCase.test_nonascii_filenamec                 C   ó
   t ƒ  d S rE   ©r   ©r'   r   r   r   ÚtearDown)  ó   
zDumbDBMTestCase.tearDownc                 C   rž   rE   rŸ   r    r   r   r   ÚsetUp,  r¢   zDumbDBMTestCase.setUpN)%Ú__name__Ú
__module__Ú__qualname__rN   r%   r*   ÚunittestZ
skipUnlessÚhasattrr	   r4   r6   r<   rD   rG   rK   rM   rO   rR   r_   r&   r:   rF   rp   rr   r€   r   rˆ   r   r   r“   r™   r   rš   r   r¡   r£   r   r   r   r   r      sP    
ù

	
	
ÿ
r   Ú__main__)r   rX   ru   r	   r0   r§   Zdbm.dumbZdumbr    rt   r   Ztest.supportr   Ú	functoolsr   ZTESTFNr   r   ZTestCaser   r¤   Úmainr   r   r   r   Ú<module>   s&      ÿ