o
    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   )ÚshutilÚ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;   ó   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   ó   |   ¡ }|  t|jd¡ d S ©Né*   )r   ÚassertRaisesÚ	TypeErrorr   r   r   r   r   Útest_get_non_string_key[   ó   z.TestFileCacheInterface.test_get_non_string_keyc                 C   r*   r+   )r   r-   r.   r'   r   r   r   r   Útest_delete_non_string_key`   r0   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   r   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#   r6   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#   r6   )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 r8   )r   r#   r6   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Údecoder6   r
   r   r   r   r%   r&   r(   r)   r/   r1   r2   r5   r7   r9   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_typerE   r   ZTEMPFILE_PREFIX)Úxr   r   r   Úprefix_safename   s   


z#TestAtomicFileCache.prefix_safenamec                 C   s0   |   ¡ }|  t|jdd¡ |  d | d¡¡ d S )Nr3   r,   )r   r-   r.   r#   r   r   r   r   r   r   r5   –   s   z-TestAtomicFileCache.test_set_non_string_valuec                 C   ó&   | j }t| j|ƒ}|  t|jd¡ d S r:   )rK   r   r   r-   Ú
ValueErrorr   ©r   r   r   r   r   r   Útest_bad_safename_get¡   ó   z)TestAtomicFileCache.test_bad_safename_getc                 C   s(   | j }t| j|ƒ}|  t|jdd¡ d S r   )rK   r   r   r-   rM   r#   rN   r   r   r   Útest_bad_safename_set¦   s   z)TestAtomicFileCache.test_bad_safename_setc                 C   rL   r:   )rK   r   r   r-   rM   r'   rN   r   r   r   Útest_bad_safename_delete«   rP   z,TestAtomicFileCache.test_bad_safename_deleteN)r@   rA   rB   rC   r   r   ÚstaticmethodrK   r5   rO   rQ   rR   r   r   r   r   rG   ‹   s    
rG   )rC   ÚtypeZ__metaclass__r   r   ZunittestÚsysÚversion_infor;   ÚbytesrI   ÚstrrD   Zlazr.restfulclient._browserr   r   ZTestCaser   rG   r   r   r   r   Ú<module>   s   d