B
    oh\                 @   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	   9lib/python3.7/site-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   N)r   )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 )N)Zinit_keyringkeyringsetcredentials_created)selfr	   r	   r
   setUp*   s    
zBackendBasicTests.setUpc             C   s    x| j D ]}| jj|  qW d S )N)r   r   delete_password)r   itemr	   r	   r
   tearDown.   s    zBackendBasicTests.tearDownc             C   s$   | j ||| | j||f d S )N)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 )Nr$   )r   DIFFICULT_CHARSr#   )r   r   r   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 )Nr$   )r   r&   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 d Q R X d S )Nr$   )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 )Nr$   )r   r&   r   r   r   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 )N)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 )Nr$   )r   UNICODE_CHARSr#   )r   r   r   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   r.   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   r3   r4   r5   r6   r7   ))r4   r5   )r6   r7   )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(   r*   r+   r-   r/   r2   r8   r9   r	   r	   r	   r
   r   $   s    
r   )r=   Z
__future__r   r>   r)   utilr   r   r   typeZ__metaclass__r.   minr"   r   r   r	   r	   r	   r
   <module>   s   