U
    jð[Ä  ã                   @   s‚   d Z eZddlZddlZddlZddlZejd dkZer@e	Z
neZ
ddlZddlmZmZ G dd„ dejƒZG dd„ deƒZdS )	z Tests for the atomic file cache.é    Né   )ÚAtomicFileCacheÚsafenamec                       s°   e Zd ZdZejZdZe d¡Z	‡ fdd„Z
‡ f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d d!„ Zd"d#„ Z‡  ZS )$ÚTestFileCacheInterfaceúTests for ``AtomicFileCache``.s	   paÉªÎ¸É™núutf-8c                    s   t t| ƒ ¡  t ¡ | _d S ©N)Úsuperr   ÚsetUpÚtempfileZmkdtempÚ	cache_dir©Úself©Ú	__class__© úO/usr/lib/python3/dist-packages/lazr/restfulclient/tests/test_atomicfilecache.pyr
   /   s    zTestFileCacheInterface.setUpc                    s   t  | j¡ tt| ƒ ¡  d S r   )ÚshutilZrmtreer   r	   r   ÚtearDownr   r   r   r   r   3   s    zTestFileCacheInterface.tearDownc                 C   s   |   | jt¡S )z*Make a FileCache-like object to be tested.)Úfile_cache_factoryr   r   r   r   r   r   Úmake_file_cache7   s    z&TestFileCacheInterface.make_file_cachec                 C   s   |   ¡ }|  d | d¡¡ d S ©NZnonexistent)r   ÚassertIsÚget©r   Úcacher   r   r   Útest_get_non_existent_key;   s    z0TestFileCacheInterface.test_get_non_existent_keyc                 C   s*   |   ¡ }| dd¡ |  d| d¡¡ d S ©NÚkeyó   value©r   ÚsetÚassertEqualr   r   r   r   r   Útest_set_key@   s    z#TestFileCacheInterface.test_set_keyc                 C   s6   |   ¡ }| dd¡ | dd¡ |  d| d¡¡ d S )Nr   r   s	   new-valuer    r   r   r   r   Útest_set_twice_overridesF   s    z/TestFileCacheInterface.test_set_twice_overridesc                 C   s(   |   ¡ }| d¡ |  d | d¡¡ d S r   )r   Údeleter   r   r   r   r   r   Útest_delete_absent_keyM   s    
z-TestFileCacheInterface.test_delete_absent_keyc                 C   s4   |   ¡ }| dd¡ | d¡ |  d | d¡¡ d S r   )r   r!   r%   r   r   r   r   r   r   Útest_delete_keyS   s    
z&TestFileCacheInterface.test_delete_keyc                 C   s   |   ¡ }|  t|jd¡ d S ©Né*   )r   ÚassertRaisesÚ	TypeErrorr   r   r   r   r   Útest_get_non_string_key[   s    z.TestFileCacheInterface.test_get_non_string_keyc                 C   s   |   ¡ }|  t|jd¡ d S r(   )r   r*   r+   r%   r   r   r   r   Útest_delete_non_string_key`   s    z1TestFileCacheInterface.test_delete_non_string_keyc                 C   s   |   ¡ }|  t|jdd¡ d S )Nr)   z
the answer)r   r*   r+   r!   r   r   r   r   Útest_set_non_string_keye   s    z.TestFileCacheInterface.test_set_non_string_keyc                 C   s0   |   ¡ }|  t|jdd¡ |  d| d¡¡ d S )NÚanswerr)   ó    )r   r*   r+   r!   r"   r   r   r   r   r   Útest_set_non_string_valuej   s    z0TestFileCacheInterface.test_set_non_string_valuec                 C   s    |   ¡ }|  d | | j¡¡ d S r   )r   r   r   Úunicode_textr   r   r   r   Útest_get_unicoder   s    z'TestFileCacheInterface.test_get_unicodec                 C   s.   |   ¡ }| | jd¡ |  d| | j¡¡ d S ©Nr   )r   r!   r2   r"   r   r   r   r   r   Útest_set_unicode_keysw   s    z,TestFileCacheInterface.test_set_unicode_keysc                 C   s,   |   ¡ }trtnt}|  ||jd| j¡ d S ©Nr   )r   ÚPY3r+   ÚUnicodeEncodeErrorr*   r!   r2   )r   r   Úerrorr   r   r   Útest_set_unicode_value|   s       ÿz-TestFileCacheInterface.test_set_unicode_valuec                 C   s:   |   ¡ }| | jd¡ | | j¡ |  d | | j¡¡ d S r4   )r   r!   r2   r%   r   r   r   r   r   r   Útest_delete_unicodeƒ   s    z*TestFileCacheInterface.test_delete_unicode)Ú__name__Ú
__module__Ú__qualname__Ú__doc__Úhttplib2Z	FileCacher   Zunicode_bytesÚdecoder2   r
   r   r   r   r#   r$   r&   r'   r,   r-   r.   r1   r3   r5   r:   r;   Ú__classcell__r   r   r   r   r   '   s(   
r   c                   @   s@   e Zd ZdZeZedd„ ƒZdd„ Zdd„ Z	dd	„ Z
d
d„ ZdS )ÚTestAtomicFileCacher   c                 C   s   t | tƒr|  d¡} tj|  S )Nr   )Ú
isinstanceÚbinary_typerA   r   ZTEMPFILE_PREFIX)Úxr   r   r   Úprefix_safename   s    

z#TestAtomicFileCache.prefix_safenamec                 C   s0   |   ¡ }|  t|jdd¡ |  d | d¡¡ d S )Nr/   r)   )r   r*   r+   r!   r   r   r   r   r   r   r1   –   s    z-TestAtomicFileCache.test_set_non_string_valuec                 C   s&   | j }t| j|ƒ}|  t|jd¡ d S r6   )rG   r   r   r*   Ú
ValueErrorr   ©r   r   r   r   r   r   Útest_bad_safename_get¡   s    z)TestAtomicFileCache.test_bad_safename_getc                 C   s(   | j }t| j|ƒ}|  t|jdd¡ d S r   )rG   r   r   r*   rH   r!   rI   r   r   r   Útest_bad_safename_set¦   s    z)TestAtomicFileCache.test_bad_safename_setc                 C   s&   | j }t| j|ƒ}|  t|jd¡ d S r6   )rG   r   r   r*   rH   r%   rI   r   r   r   Útest_bad_safename_delete«   s    z,TestAtomicFileCache.test_bad_safename_deleteN)r<   r=   r>   r?   r   r   ÚstaticmethodrG   r1   rJ   rK   rL   r   r   r   r   rC   ‹   s   
rC   )r?   ÚtypeZ__metaclass__r   r   ZunittestÚsysÚversion_infor7   ÚbytesrE   Ústrr@   Zlazr.restfulclient._browserr   r   ZTestCaser   rC   r   r   r   r   Ú<module>   s   d