B
    u9a9  ã               @   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   ZTESTFNÚfilenameÚdbmÚndbmÚopenÚdÚclose)Úself© r   ú#/usr/lib/python3.7/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ÚgetZ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libraryZ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   Z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   ÚstrZ	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   r+   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   Úencoder.   )r   r+   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_NONASCIIZ
addCleanupr   r   r   r	   r.   Úanyr   r)   r   )r   r   r+   r   )r   r   Útest_nonascii_filename]   s    
z"DbmTestCase.test_nonascii_filenameN)Ú__name__Ú
__module__Ú__qualname__r   r   r   r"   r(   r-   r/   r1   ÚunittestZ
skipUnlessr   r7   r9   r   r   r   r   r      s   r   Ú__main__)Ztestr   Úimport_moduler2   r=   Zdbm.ndbmr   r   ZTestCaser   r:   Úmainr   r   r   r   Ú<module>   s   
f