a
    äzet*  ã                   @   sŒ   d Z 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 ejZdd„ ZG dd„ dejƒZed	krˆe ¡  dS )
zATest script for the dumbdbm module
   Original by Roger E. Masse
é    N)Úsupport)Úpartialc               	   C   s4   dD ]*} zt  t|  ¡ W q ty,   Y q0 qd S )N©ú.dirú.datú.bak)ÚosÚunlinkÚ_fnameÚOSError)Úext© r   ú(/usr/lib/python3.9/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   sn   t  t td¡¡H}|  t| ¡ ƒg ¡ | jD ]}| j| ||< q.|  	|¡ W d   ƒ n1 s`0    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  |¡ 0 d}t jdkrNd}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_moder/   Ú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_twice?   s
    
z DumbDBMTestCase.test_close_twicec                 C   s~   |   ¡  t t td¡¡P}d | jd< |d< |  |¡ |  | 	dd¡d¡ |  |d d¡ W d   ƒ n1 sp0    Y  d S )NÚws   indentedr   ó   xxxó   foo)
Úinit_dbr   r   r   r    r
   r$   r%   r!   Ú
setdefaultr4   r   r   r   Útest_dumbdbm_modificationF   s    
z)DumbDBMTestCase.test_dumbdbm_modificationc              	   C   s"  |   ¡  t t td¡¡ò}|  |¡ |  tjd¡ d|d< W d   ƒ n1 sR0    Y  |  tjd¡ |d= W d   ƒ n1 s†0    Y  |  	| 
d¡| jd ¡ |  	| 
dd¡d¡ |  | 
d¡¡ |  t¡ |d  W d   ƒ n1 sô0    Y  W d   ƒ n1 s0    Y  d S )NÚrz'The database is opened for reading onlyó   xr   r   r7   r8   )r9   r   r   r   r    r
   r%   ÚassertRaisesRegexÚerrorr!   Úgetr$   ZassertIsNoneÚassertRaisesÚKeyErrorr4   r   r   r   Útest_dumbdbm_readO   s     
ÿ&ÿ$z!DumbDBMTestCase.test_dumbdbm_readc                 C   sF   |   ¡  t t t¡¡}|  |¡}W d   ƒ n1 s80    Y  d S ©N)r9   r   r   r   r    r
   Úkeys_helper)r&   r'   r#   r   r   r   Útest_dumbdbm_keys`   s    z!DumbDBMTestCase.test_dumbdbm_keysc                 C   sH   t  t t¡¡$}d|d< |  d|¡ W d   ƒ n1 s:0    Y  d S )Nó   helloó   1)r   r   r   r    r
   ÚassertInr4   r   r   r   Útest_write_containse   s    z#DumbDBMTestCase.test_write_containsc                 C   s„   t  t t¡¡ }d|d< d|d< W d   ƒ n1 s60    Y  t  t t¡¡ }|  |d d¡ W d   ƒ n1 sv0    Y  d S )NrG   rH   ó   hello2)r   r   r   r    r
   r!   r4   r   r   r   Útest_write_write_readj   s
    &z%DumbDBMTestCase.test_write_write_readc                 C   sZ   |   ¡  t t td¡¡,}|  |d | jd d¡ ¡ W d   ƒ n1 sL0    Y  d S )Nr<   r   r   )	r9   r   r   r   r    r
   r!   r$   Úencoder4   r   r   r   Útest_str_readr   s    zDumbDBMTestCase.test_str_readc                 C   s¼   |   ¡  t t t¡¡ }d|d< d|d< W d   ƒ n1 s>0    Y  t t td¡¡N}|  d|¡ |  |d d¡ | j	d d¡ ¡ |  |d d¡ W d   ƒ n1 s®0    Y  d S )	Nr   r   ÚaÚ1r<   r   rH   r   )
r9   r   r   r   r    r
   rI   r!   rM   r$   r4   r   r   r   Útest_str_write_containsw   s    &ÿz'DumbDBMTestCase.test_str_write_containsc                 C   s  t  t t¡¡ }d|d< d|d< W d   ƒ n1 s60    Y  t td d¡}| ¡ }W d   ƒ n1 sn0    Y  tjdkr| 	dd	¡}n| 	d	d¡}t td d
¡}| 
|¡ W d   ƒ n1 sÌ0    Y  t t¡}|  |d d¡ |  |d d¡ d S )NrG   rH   rK   ó   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 rD   )rE   r$   r!   )r&   r'   r#   r(   r   r   r   r%   ˜   s    

zDumbDBMTestCase.read_helperc                 C   sP   t  t td¡¡*}| jD ]}| j| ||< qW d   ƒ n1 sB0    Y  d S ©NÚn)r   r   r   r    r
   r$   ©r&   r'   Úkr   r   r   r9      s    
zDumbDBMTestCase.init_dbc                 C   s*   t | ¡ ƒ}t | j ¡ ƒ}|  ||¡ |S rD   )Úsortedr#   r$   r!   )r&   r'   r#   Zdkeysr   r   r   rE   ¢   s    zDumbDBMTestCase.keys_helperc           	   	   C   s  dd l }i }tdƒD ]}t t t¡¡~}tdƒD ]d}| d¡}|  ¡ dk rd||v r˜||= ||= q4| d¡| d¡ }|||< |||< |  	|| |¡ q4W d   ƒ n1 s®0    Y  t t t¡¡>}t
dd	„ | ¡ D ƒƒ}t
| ¡ ƒ}|  	||¡ W d   ƒ q1 s0    Y  qd S )
Nr   é   éd   Zabcdefghijklmgš™™™™™É?)r   r   r   i'  c                 s   s    | ]\}}|  d ¡|fV  qdS )zlatin-1N)rM   )Ú.0rb   Úvr   r   r   Ú	<genexpr>¼   r   z.DumbDBMTestCase.test_random.<locals>.<genexpr>)ÚrandomÚranger   r   r   r    r
   ÚchoiceÚ	randranger!   rc   Úitems)	r&   ri   ÚdÚdummyr'   rb   rg   ZexpectedZgotr   r   r   Útest_randomª   s$    
0zDumbDBMTestCase.test_randomc                 C   s®   t  td¡}d|d< W d   ƒ n1 s*0    Y  t  td¡&}|  t| ¡ ƒdg¡ W d   ƒ n1 sl0    Y  |  t j¡ | ¡  W d   ƒ n1 s 0    Y  d S )Nr   zcontext managerzdumbdbm context managerr<   s   dumbdbm context manager)r   r    r
   r!   r"   r#   rA   r?   )r&   Údbr   r   r   Útest_context_managerÀ   s    &4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 ]J}|  
t j¡}|dƒ W d   ƒ n1 sp0    Y  |  t|jƒd¡ qBt d¡t d¡t d¡tfD ]J}|  
t j¡}||ƒ W d   ƒ n1 sÚ0    Y  |  t|jƒd¡ q¬d S )Nr   ÚbÚtestz"DBM object has already been closedr#   Ziterkeysrm   )r   r    r
   r-   r   ÚoperatorÚdelitemÚsetitemÚgetitemÚcontainsrA   r?   r!   ÚstrÚ	exceptionÚmethodcallerÚlen)r&   r'   ÚmethÚcmr   r   r   Útest_check_closedÊ   s,    


ý&ÿý&ÿz!DumbDBMTestCase.test_check_closedc                 C   s†   t  td¡*}| jD ]}| j| ||< qW d   ƒ n1 s<0    Y  t  td¡ }|  | ¡ g ¡ W d   ƒ n1 sx0    Y  d S r_   )r   r    r
   r$   r!   r#   ra   r   r   r   Útest_create_newà   s
    
.zDumbDBMTestCase.test_create_newc              
   C   sÈ   t td dƒ}| d¡ W d   ƒ n1 s.0    Y  t ¡ t}|  t¡: t  t¡}W d   ƒ n1 sn0    Y  W d   ƒ n1 sŒ0    Y  |  | 	¡ d¡ W d   ƒ n1 sº0    Y  d S )Nr   r6   zstr(print('Hacked!')), 0
Ú )
r    r
   r[   r   Zcaptured_stdoutrA   Ú
ValueErrorr   r!   Úgetvalue)r&   ÚstreamÚstdoutr'   r   r   r   Ú	test_evalè   s    (
<zDumbDBMTestCase.test_evalc              	   C   sv   dD ]l}t ƒ  |  t¡ t t|¡ W d   ƒ n1 s:0    Y  |  tj 	td ¡¡ |  tj 	td ¡¡ qd S )N©r<   r6   r   r   )
r   rA   Ú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"0    Y  t td ¡ dD ]f}|  t¡ t  t|¡ W d   ƒ n1 sn0    Y  |  tj 	td ¡¡ |  tj 	td ¡¡ q>d S )Nr`   r   rˆ   r   )
r   r    r
   r   r	   rA   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   ƒ q1 s60    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 sh0    Y  t |d tj¡ t |d tj¡ t |tjtjB ¡ t |d¡2}|  t| 	¡ ƒt| j
ƒ¡ | ¡  W d   ƒ n1 sî0    Y  W d   ƒ n1 s0    Y  d S )Nrq   r`   r   r   r<   )r   Ztemp_dirr   r‹   Újoinr   r    r!   r"   r#   r$   Úchmodr/   ÚS_IRUSRÚS_IXUSRrc   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 sL0    Y  |  tj 	|d ¡¡ |  tj 	|d ¡¡ t |d¡D}|  
t| ¡ ƒdg¡ |  d|v ¡ |  
|d d¡ W d   ƒ n1 sØ0    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   s
   t ƒ  d S rD   ©r   ©r&   r   r   r   ÚtearDown'  s    zDumbDBMTestCase.tearDownc                 C   s
   t ƒ  d S rD   r   rž   r   r   r   ÚsetUp*  s    zDumbDBMTestCase.setUpN)%Ú__name__Ú
__module__Ú__qualname__rM   r$   r)   ÚunittestZ
skipUnlessÚhasattrr   r3   r5   r;   rC   rF   rJ   rL   rN   rQ   r^   r%   r9   rE   rp   rr   r€   r   r‡   rŽ   r   r’   r˜   r   r™   rœ   rŸ   r    r   r   r   r   r      sN   
ù

	
	
ÿ
r   Ú__main__)Ú__doc__r   rW   ru   r   r/   r¤   Zdbm.dumbZdumbr   rt   r   Ú	functoolsr   ZTESTFNr
   r   ZTestCaser   r¡   Úmainr   r   r   r   Ú<module>   s      