B
    18™\9  ã               @   s`   d dl mZ e d¡ d dlZd dlZd dlZd dlmZ G dd„ dejƒZ	e
dkr\e ¡  dS )é    )Úsupportzdbm.ndbmN)Úerrorc               @   sb   e Z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
e ejd¡dd„ ƒZdS )ÚDbmTestCasec             C   s(   t j| _tj | jd¡| _| j ¡  d S )NÚc)r   ÚTESTFNÚfilenameÚdbmÚndbmÚopenÚdÚclose)Úself© r   úV/oak/stanford/groups/akundaje/marinovg/programs/Python-3.7.3/Lib/test/test_dbm_ndbm.pyÚsetUp
   s    zDbmTestCase.setUpc             C   s"   xdD ]}t  | j| ¡ qW d S )N)Ú z.pagz.dirz.db)r   Úunlinkr   )r   Úsuffixr   r   r   ÚtearDown   s    
zDbmTestCase.tearDownc          	   C   s  t j | jd¡| _|  | j ¡ g ¡ d| jd< d| jd< d| jd< | j ¡  |  d| j¡ |  d| j¡ |  | jd d¡ |  | j d¡d	¡ |  	| j d
¡¡ |  | j d
d¡d¡ |  
t¡ | jd  W d Q R X |  | j d
d¡d¡ |  | jd
 d¡ | j ¡  d S )Nr   ÚbÚas   datas   bytesZ019237410982340912840198242Z12345678910ó   aó   bs   xxxs   fooZxxx)r   r	   r
   r   r   ÚassertEqualÚkeysÚassertInÚgetÚassertIsNoneÚassertRaisesÚKeyErrorÚ
setdefaultr   )r   r   r   r   Ú	test_keys   s"    



zDbmTestCase.test_keysc             C   s®   t jjdkr|  d¡ t j | jd¡| _|  | j ¡ g ¡ d| jd< |  | j ¡ dg¡ |  	d| j¡ |  | jd d¡ |  | j 
d¡d¡ |  | j d¡d¡ | j ¡  d S )NzBerkeley DBzCBerkeley DB doesn't distinguish the empty value from the absent oner   r   Úemptys   emptyó    )r   r	   ZlibraryÚskipTestr
   r   r   r   r   r   r   r    r   )r   r   r   r   Útest_empty_value'   s    

zDbmTestCase.test_empty_valuec          	   C   sP   xJdD ]B}y t j | j|¡| _| j ¡  W q tk
rF   |  ¡  Y qX qW d S )N)ÚrÚrwÚwÚn)r   r	   r
   r   r   r   r   Úfail)r   Úmoder   r   r   Ú
test_modes5   s    
zDbmTestCase.test_modesc          	   C   sŽ   t j | jd¡}d|d< W d Q R X t j | jd¡}|  t| ¡ ƒdg¡ W d Q R X |  t jj¡}| ¡  W d Q R X |  t	|j
ƒd¡ d S )Nr   zcontext managerzndbm context managerr&   s   ndbm context managerz"DBM object has already been closed)r   r	   r
   r   r   Úlistr   r   r   ÚstrÚ	exception)r   ÚdbÚcmr   r   r   Útest_context_manager=   s     z DbmTestCase.test_context_managerc          	   C   sx   t j | jd¡}d|d< W d Q R X t j | jd¡:}|  t| ¡ ƒdg¡ |  d|k¡ |  |d d¡ W d Q R X d S )Nr   s   bytes value ½s   bytes key ½r&   )r   r	   r
   r   r   r-   r   Ú
assertTrue)r   r0   r   r   r   Ú
test_bytesI   s    zDbmTestCase.test_bytesc          	   C   sª   t j | jd¡}d|d< W d Q R X t j | jd¡l}|  t| ¡ ƒd ¡ g¡ |  d ¡ |k¡ |  d|k¡ |  |d ¡  d ¡ ¡ |  |d d ¡ ¡ W d Q R X d S )Nr   u   Unicode value ðŸu   Unicode key ðŸr&   )	r   r	   r
   r   r   r-   r   Úencoder3   )r   r0   r   r   r   Útest_unicodeQ   s    

zDbmTestCase.test_unicodez*requires OS support of non-ASCII encodingsc          	      s¶   t j‰ xdD ]}|  t jˆ | ¡ qW tj ˆ d¡}d|d< W d Q R X |  t‡ fdd„dD ƒƒ¡ tj ˆ d¡:}|  	t
| ¡ ƒdg¡ |  d|k¡ |  	|d d¡ W d Q R X d S )N)r   z.pagz.dirz.dbr   s   values   keyc             3   s   | ]}t j ˆ | ¡V  qd S )N)ÚosÚpathÚexists)Ú.0r   )r   r   r   ú	<genexpr>e   s   z5DbmTestCase.test_nonascii_filename.<locals>.<genexpr>r&   )r   ÚTESTFN_NONASCIIÚ
addCleanupr   r   r	   r
   r3   Úanyr   r-   r   )r   r   r0   r   )r   r   Útest_nonascii_filename]   s    
z"DbmTestCase.test_nonascii_filenameN)Ú__name__Ú
__module__Ú__qualname__r   r   r!   r%   r,   r2   r4   r6   ÚunittestÚ
skipUnlessr   r<   r?   r   r   r   r   r      s   r   Ú__main__)Útestr   Úimport_moduler7   rC   Zdbm.ndbmr   r   ÚTestCaser   r@   Úmainr   r   r   r   Ú<module>   s   
f