o
    ÞñÐaê  ã                   @   sl   d Z ddlZddlZddlZddlmZ ddlmZ dZe	dd„ eD ƒƒd	ks)J ‚d
d„ Z
G dd„ dƒZdS )z)
Common test functionality for backends.
é    Né   )Úrandom_string)ÚerrorsuH  ×–×”×›×™×£×¡×ª×�×œ×©×ž×•×¢×�×™×š×ª× ×¦×—×§×¨×¤×“×¢×¥×˜×•×‘×‘×’×ŸÎ¾ÎµÏƒÎºÎµÏ€Î¬Î¶Ï‰Ï„Î·Î½ÏˆÏ…Ï‡Î¿Ï†Î¸ÏŒÏ�Î±Î²Î´ÎµÎ»Ï…Î³Î¼Î¯Î±Ð¡ÑŠÐµÑˆÑŒÐ¶ÐµÐµÑ‰Ñ‘Ñ�Ñ‚Ð¸Ñ…Ð¼Ñ�Ð³ÐºÐ¸Ñ…Ñ„Ñ€Ð°Ð½Ñ†ÑƒÐ·Ñ�ÐºÐ¸Ñ…Ð±ÑƒÐ»Ð¾ÐºÐ´Ð°Ð²Ñ‹Ð¿ÐµÐ¹Ñ‡Ð°ÑŽÐ–ÑŠÐ»Ñ‚Ð°Ñ‚Ð°Ð´ÑŽÐ»Ñ�Ð±ÐµÑˆÐµÑ‰Ð°Ñ�Ñ‚Ð»Ð¸Ð²Ð°Ñ‡ÐµÐ¿ÑƒÑ…ÑŠÑ‚ÐºÐ¾Ð¹Ñ‚Ð¾Ñ†ÑŠÑ„Ð½Ð°Ð·Ð°Ð¼Ñ€ÑŠÐ·Ð½Ð°ÐºÐ°Ñ‚Ð¾Ð³ÑŒÐ¾Ð½c                 c   s   � | ]}t |ƒV  qd S ©N©Úord)Ú.0Úchar© r
   ú9/usr/lib/python3/dist-packages/keyring/testing/backend.pyÚ	<genexpr>   s   € r   é   c                 C   s   t dd„ | D ƒƒS )Nc                 s   s,   � | ]}d t |ƒ  kodk n  V  qdS )é    r   Nr   )r   Úcr
   r
   r   r      s   €* z%is_ascii_printable.<locals>.<genexpr>)Úall)Úsr
   r
   r   Úis_ascii_printable   s   r   c                   @   s    e Zd ZdZejej Zej	d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d„ Zdd„ Zdd„ Zdd„ Zd d!„ Zd"S )#ÚBackendBasicTestszETest for the keyring's basic functions. password_set and password_getT)Úautousec                 C   s"   |   ¡ | _tƒ | _| | j¡ d S r   )Úinit_keyringÚkeyringÚsetÚcredentials_createdÚaddfinalizerÚcleanup)ÚselfÚrequestr
   r
   r   Ú_init_properties&   s   
z"BackendBasicTests._init_propertiesc                 C   s   | j D ]}| jj|Ž  qd S r   )r   r   Údelete_password)r   Úitemr
   r
   r   r   ,   s   
ÿzBackendBasicTests.cleanupc                 C   s$   | j  |||¡ | j ||f¡ d S r   )r   Úset_passwordr   Úadd)r   ÚserviceÚusernameÚpasswordr
   r
   r   r    0   s   zBackendBasicTests.set_passwordc                 C   sb   | j }| ||¡d u sJ ‚|  |||¡ | ||¡|ksJ ‚|  ||d¡ | ||¡dks/J ‚d S )NÚ )r   Úget_passwordr    )r   r"   r#   r$   r   r
   r
   r   Úcheck_set_get6   s   zBackendBasicTests.check_set_getc                 C   s*   t dƒ}t dƒ}t dƒ}|  |||¡ d S ©Né   )r   r'   ©r   r$   r#   r"   r
   r
   r   Útest_password_set_getD   s   z'BackendBasicTests.test_password_set_getc                 C   s6   t d| jƒ}t d| jƒ}t d| jƒ}|  |||¡ d S r(   )r   ÚDIFFICULT_CHARSr'   r*   r
   r
   r   Útest_difficult_charsJ   s   z&BackendBasicTests.test_difficult_charsc                 C   s\   t d| jƒ}t d| jƒ}t d| jƒ}| j |||¡ | j ||¡ | j ||¡d u s,J ‚d S r(   ©r   r,   r   r    r   r&   r*   r
   r
   r   Útest_delete_presentP   s   z%BackendBasicTests.test_delete_presentc                 C   sX   t d| jƒ}t d| jƒ}t tj¡� | j ||¡ W d   ƒ d S 1 s%w   Y  d S r(   )r   r,   ÚpytestÚraisesr   ÚPasswordDeleteErrorr   r   )r   r#   r"   r
   r
   r   Útest_delete_not_presentX   s
   "ÿz)BackendBasicTests.test_delete_not_presentc                 C   sv   t d| jƒ}t d| jƒ}t d| jƒ}t d| jƒ}| j |||¡ |  |||¡ | j ||¡ | j ||¡|ks9J ‚d S r(   r.   )r   Ú	username1Ú	username2r$   r"   r
   r
   r   Útest_delete_one_in_group^   s   z*BackendBasicTests.test_delete_one_in_groupc                 C   s   t | jjƒsJ ‚d S r   )r   r   Úname)r   r
   r
   r   Útest_name_propertyh   s   z$BackendBasicTests.test_name_propertyc                 C   s0   t dtƒ}t dtƒ}t dtƒ}|  |||¡ d S r(   )r   ÚUNICODE_CHARSr'   r*   r
   r
   r   Útest_unicode_charsk   s   


z$BackendBasicTests.test_unicode_charsc                 C   sN   t dtƒt dƒ t d| jƒ }t d|ƒ}t d|ƒ}t d|ƒ}|  |||¡ d S )Né
   r)   )r   r9   r,   r'   )r   Úsourcer$   r#   r"   r
   r
   r   Útest_unicode_and_ascii_charsq   s   ÿ
þÿ


z.BackendBasicTests.test_unicode_and_ascii_charsc                 C   sp   | j }|  ddd¡ |  ddd¡ | dd¡dksJ ‚| dd¡dks%J ‚|  ddd¡ | dd¡dks6J ‚d	S )
z¥
        Issue #47 reports that WinVault isn't storing passwords for
        multiple users. This test exercises that test for each of the
        backends.
        Úservice1Úuser1Ú	password1Úuser2Ú	password2Úservice2Úuser3Ú	password3N)r   r    r&   )r   r   r
   r
   r   Útest_different_user|   s   z%BackendBasicTests.test_different_userc                 C   s’   | j }| dd ¡}|d u sJ ‚|  ddd¡ |  ddd¡ | dd ¡}|d u s1|j|jfdv s1J ‚| dd¡}|d us=J ‚|j|jfdv sGJ ‚d S )Nr"   r>   r?   r@   rA   rB   ))r?   r@   )rA   rB   )r   Úget_credentialr    r#   r$   )r   r   Úcredr
   r
   r   Útest_credential‹   s   z!BackendBasicTests.test_credentialc                 C   s8   t ddd�}| td|¡ | j ¡  | jjdksJ ‚d S )Nz	fizz buzzz	ignore me)ÚKEYRING_PROPERTY_FOO_BARÚOTHER_SETTINGÚenviron)ÚdictÚsetattrÚosr   Úset_properties_from_envÚfoo_bar)r   ÚmonkeypatchÚenvr
   r
   r   Útest_set_properties¡   s   
z%BackendBasicTests.test_set_propertiesN)Ú__name__Ú
__module__Ú__qualname__Ú__doc__ÚstringÚ
whitespaceÚpunctuationr,   r0   Úfixturer   r   r    r'   r+   r-   r/   r3   r6   r8   r:   r=   rF   rI   rT   r
   r
   r
   r   r   !   s&    


r   )rX   rO   rY   r0   Úutilr   r   r   r9   Úminr   r   r
   r
   r
   r   Ú<module>   s   ÿ