a
    ze                     @   sx  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 ZG dd de	ZG d	d
 d
e jZG dd dZG dd deZG dd deZd dlmZ eejd D ]ZeejfZde dZeeeddeiie e< eejfZe D ]TZejds J ejdd Zde de dZeeeedeide e< q
qedkrte   dS )    N)support)MutableMapping)dbm_iteratorc                 C   s
   |  dS Nlatin-1)decode)s r	   &/usr/lib/python3.9/test/test_shelve.pyL1   s    r   c                   @   sT   e Zd ZdZdd Zdd Zdd Zdd	 Zd
d Zdd Z	e	Z
dd Zdd ZdS )byteskeydictz Mapping that supports bytes keysc                 C   s
   i | _ d S N)dselfr	   r	   r
   __init__   s    zbyteskeydict.__init__c                 C   s   | j t| S r   r   r   r   keyr	   r	   r
   __getitem__   s    zbyteskeydict.__getitem__c                 C   s   || j t|< d S r   r   )r   r   valuer	   r	   r
   __setitem__   s    zbyteskeydict.__setitem__c                 C   s   | j t|= d S r   r   r   r	   r	   r
   __delitem__   s    zbyteskeydict.__delitem__c                 C   s
   t | jS r   )lenr   r   r	   r	   r
   __len__   s    zbyteskeydict.__len__c                 c   s    | j  D ]}|dV  q
d S r   )r   keysencode)r   kr	   r	   r
   iterkeys    s    zbyteskeydict.iterkeysc                 C   s   t |  S r   )listr   r   r	   r	   r
   r   &   s    zbyteskeydict.keysc                 C   s
   t | jS r   )r   r   r   r	   r	   r
   copy)   s    zbyteskeydict.copyN)__name__
__module____qualname____doc__r   r   r   r   r   r   __iter__r   r    r	   r	   r	   r
   r      s   r   c                   @   s|   e Zd ZejZejejdZ	dd Z
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S )TestCaseshelftemp.dbc                 C   s   i }t j|ddd}g d|d< | |d g d | t|d |  | tt| z|d  W n tyx   Y n0 | d d S N   Fprotocol	writeback   r)         key1r.   z"Closed shelf should not find a key)shelveShelfassertEqualr   closeassertRaises
ValueErrorfailr   d1r   r	   r	   r
   
test_close1   s    zTestCase.test_closeNc                 C   s`   t | j | tj| j tj| j|d}z$d|d< | 	|d d W |
  n
|
  0 d S )Nr+   r-   r1   )osmkdirdirname
addCleanupr   rmtreer2   openfnr4   r5   )r   r+   r   r	   r	   r
   test_open_template@   s    zTestCase.test_open_templatec                 C   s   | j dd d S )Nr   r<   rD   r   r	   r	   r
   test_ascii_file_shelfJ   s    zTestCase.test_ascii_file_shelfc                 C   s   | j dd d S )Nr.   r<   rE   r   r	   r	   r
   test_binary_file_shelfM   s    zTestCase.test_binary_file_shelfc                 C   s   | j dd d S )Nr)   r<   rE   r   r	   r	   r
   test_proto2_file_shelfP   s    zTestCase.test_proto2_file_shelfc                 C   s   t  }tj|dd(}d|d< | |d d W d    n1 sB0    Y  t  }tj|dd(}d|d< | |d d W d    n1 s0    Y  | t|d | t|d | | |  d S )Nr   r<   r-   r1   r.   )r   r2   r3   r4   r   assertNotEqualitemsr   r:   r   Zd2r	   r	   r
   test_in_memory_shelfS   s    ..zTestCase.test_in_memory_shelfc                 C   s  t  }tj|dddR}g d|d< | |d g d |d d | |d g d W d    n1 sn0    Y  t  }tj|dddR}g d|d< | |d g d |d d | |d g d W d    n1 s0    Y  | t|d	 | t|d	 d S )
Nr)   Fr*   r-   r1      T)r.   r)   r/   r0   rM   r.   )r   r2   r3   r4   appendr   rK   r	   r	   r
   test_mutable_entrya   s    22zTestCase.test_mutable_entryc                 C   sv   i }d}dgt ||< | |d| dgt j|dd|< | |d| t j|dd}| t|j|dg d S )Nu   PÃ¶pr.   utf-8r   )Zkeyencodingascii)r2   r3   ZassertInr   r6   UnicodeEncodeErrorr   )r   r   r   r   r	   r	   r
   test_keyencodings   s    zTestCase.test_keyencodingc                 C   sx   i }d}| d}tj|dd0}dg||< || }|d d W d    n1 sV0    Y  || }| || d S )Nr   rP   T)r,   r.   r)   )r   r2   r3   rN   rI   )r   r   r   
encodedkeyr   Zp1Zp2r	   r	   r
   &test_writeback_also_writes_immediately   s    

,z/TestCase.test_writeback_also_writes_immediatelyc                 C   s   i }t j|ddd@}g d|d< | |d g d | t|d W d    n1 sZ0    Y  | tt| z|d  W n ty   Y n0 | d d S r(   )r2   r3   r4   r   r6   r7   r8   r9   r	   r	   r
   	test_with   s    .zTestCase.test_withc                 C   s<   t i }| |jd W d    n1 s.0    Y  d S )Nr/   )r2   r3   r4   Z	_protocol)r   r   r	   r	   r
   test_default_protocol   s    zTestCase.test_default_protocol)N)r!   r"   r#   r   TESTFNr?   r=   pathjoinrC   r;   rD   rF   rG   rH   rL   rO   rS   rU   rV   rW   r	   r	   r	   r
   r&   -   s   

r&   c                   @   s   e Zd ZejZdd ZdS )TestShelveBasec                 C   s   ddddS )NZvalue1r)   )r.   r)   r/   )r1   Zkey2Zkey3r	   r   r	   r	   r
   
_reference   s    zTestShelveBase._referenceN)r!   r"   r#   r2   r3   Z	type2testr\   r	   r	   r	   r
   r[      s   r[   c                   @   s   e Zd Zdd ZdS )TestShelveInMemBasec                 C   s   t jt fi | jS r   )r2   r3   r   _argsr   r	   r	   r
   _empty_mapping   s    z"TestShelveInMemBase._empty_mappingN)r!   r"   r#   r_   r	   r	   r	   r
   r]      s   r]   c                   @   s    e Zd ZdZdd Zdd ZdS )TestShelveFileBaser   c                 C   s>   |  j d7  _ tj| jt| j  fi | j}| |j |S )Nr.   )counterr2   rB   	base_pathstrr^   r@   r5   )r   xr	   r	   r
   r_      s     z!TestShelveFileBase._empty_mappingc                 C   sL   t j}t| | t j| tj|d| _| t	t
dt
j | jt
_d S )Nr'   _defaultmod)r   rX   r=   r>   r@   rA   rY   rZ   rb   setattrdbmre   dbm_mod)r   r?   r	   r	   r
   setUp   s    
zTestShelveFileBase.setUpN)r!   r"   r#   ra   r_   ri   r	   r	   r	   r
   r`      s   r`   )mapping_testsr.   Z	TestProtoZ	MemShelver^   r+   zdbm.r0   ZFile_ZShelve)rh   r^   __main__) Zunittestrg   r=   r2   globpickletestr   collections.abcr   Ztest.test_dbmr   r   r   r&   r[   r]   r`   rj   rangeHIGHEST_PROTOCOLprotoZBasicTestMappingProtocolbasesnametypeglobalsrh   r!   
startswithsuffixmainr	   r	   r	   r
   <module>   s>   r





