U
    ܦ\                     @   st   d Z ddlmZ ddlZddlZddlmZ ddlmZ e	Z
dZedd	 eD d
ksZtdd ZG dd dZdS )z)
Common test functionality for backends.
    )unicode_literalsN   )random_string)errorsuH  זהכיףסתםלשמועאיךתנצחקרפדעץטובבגןξεσκεπάζωτηνψυχοφθόραβδελυγμίαСъешьжеещёэтихмягкихфранцузскихбулокдавыпейчаюЖълтатадюлябешещастливачепухъткойтоцъфназамръзнакатогьонc                 c   s   | ]}t |V  qd S Nord).0char r   </usr/lib/python3/dist-packages/keyring/tests/test_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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 )BackendBasicTestszJTest for the keyring's basic functions. password_set and password_get
    c                 C   s   |   | _t | _d S r   )Zinit_keyringkeyringsetcredentials_createdselfr   r   r   setUp*   s    
zBackendBasicTests.setUpc                 C   s   | j D ]}| jj|  qd S r   )r   r   delete_password)r   itemr   r   r   tearDown.   s    
zBackendBasicTests.tearDownc                 C   s$   | j ||| | j||f d S r   )r   set_passwordr   add)r   serviceusernamepasswordr   r   r   r   2   s    zBackendBasicTests.set_passwordc                 C   sb   | j }|||d kst| ||| ||||ks<t| ||d |||dks^td S )N )r   get_passwordAssertionErrorr   )r   r    r!   r"   r   r   r   r   check_set_get8   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_getF   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_charsL   s    z&BackendBasicTests.test_difficult_charsc                 C   s\   t d| j}t d| j}t d| j}| j||| | j|| | j||d ksXtd S r'   r   r+   r   r   r   r$   r%   r)   r   r   r   test_delete_presentR   s    z%BackendBasicTests.test_delete_presentc              	   C   sB   t d| j}t d| j}ttj | j|| W 5 Q R X d S r'   )r   r+   pytestZraisesr   ZPasswordDeleteErrorr   r   )r   r!   r    r   r   r   test_delete_not_presentZ   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srtd S r'   r-   )r   Z	username1Z	username2r"   r    r   r   r   test_delete_one_in_group`   s    z*BackendBasicTests.test_delete_one_in_groupc                 C   s   t | jjstd S r   )r   r   namer%   r   r   r   r   test_name_propertyj   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_charsm   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   r4   r+   r&   )r   sourcer"   r!   r    r   r   r   test_unicode_and_ascii_charss   s    



z.BackendBasicTests.test_unicode_and_ascii_charsc                 C   sp   | j }| ddd | ddd |dddks6t|dddksJt| ddd |dddkslt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	password2Zservice2Zuser3Z	password3N)r   r   r$   r%   )r   r   r   r   r   test_different_user{   s    z%BackendBasicTests.test_different_userc                 C   s   | j }|dd }|d kst| ddd | ddd |dd }|d ksb|j|jfdksbt|dd}|d k	szt|j|jfdkstd S )Nr    r9   r:   r;   r<   r=   ))r:   r;   )r<   r=   )r   Zget_credentialr%   r   r!   r"   )r   r   Zcredr   r   r   test_credential   s    z!BackendBasicTests.test_credentialN)__name__
__module____qualname____doc__stringZ
whitespaceZpunctuationr+   r   r   r   r&   r*   r,   r.   r0   r1   r3   r5   r8   r>   r?   r   r   r   r   r   $   s    
r   )rC   Z
__future__r   rD   r/   utilr   r   r   typeZ__metaclass__r4   minr%   r   r   r   r   r   r   <module>   s   