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   