
    e                     ~    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 eD              dkD  sJ d	 Z
 G d
 d      Zy)z)
Common test functionality for backends.
    N   )random_string)errorsuH  זהכיףסתםלשמועאיךתנצחקרפדעץטובבגןξεσκεπάζωτηνψυχοφθόραβδελυγμίαСъешьжеещёэтихмягкихфранцузскихбулокдавыпейчаюЖълтатадюлябешещастливачепухъткойтоцъфназамръзнакатогьонc              #   2   K   | ]  }t        |        y wNord).0chars     9/usr/lib/python3/dist-packages/keyring/testing/backend.py	<genexpr>r      s     
/3t9
/s      c                 &    t        d | D              S )Nc              3   N   K   | ]  }d t        |      cxk  xr dk  nc   yw)    r   Nr   )r
   cs     r   r   z%is_ascii_printable.<locals>.<genexpr>   s!     -arSV!c!!-s   #%)all)ss    r   is_ascii_printabler      s    -1---    c                       e Zd ZdZej
                  ej                  z   Z ej                  d      d        Z
d Zd Zd Zd Zd	 Zd
 Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zy)BackendBasicTestszETest for the keyring's basic functions. password_set and password_getT)autousec                     | j                         | _        t               | _        |j	                  | j
                         y r   )init_keyringkeyringsetcredentials_createdaddfinalizercleanup)selfrequests     r   _init_propertiesz"BackendBasicTests._init_properties&   s.    ((*#&5 T\\*r   c                 X    | j                   D ]  } | j                  j                  |   y r   )r   r   delete_password)r!   items     r   r    zBackendBasicTests.cleanup,   s+    ,, 	0D(DLL(($/	0r   c                 x    | j                   j                  |||       | j                  j                  ||f       y r   )r   set_passwordr   add)r!   serviceusernamepasswords       r   r(   zBackendBasicTests.set_password0   s3     	!!'8X>  $$gx%89r   c                     | j                   }|j                  ||      J | j                  |||       |j                  ||      |k(  sJ | j                  ||d       |j                  ||      dk(  sJ y )N )r   get_passwordr(   )r!   r*   r+   r,   r   s        r   check_set_getzBackendBasicTests.check_set_get6   s    ,, ##GX6>>> 	'8X6##GX6(BBB 	'8R0##GX6"<<<r   c                 l    t        d      }t        d      }t        d      }| j                  |||       y N   )r   r0   r!   r,   r+   r*   s       r   test_password_set_getz'BackendBasicTests.test_password_set_getD   s2     $ $#7Hh7r   c                     t        d      }t        d      }| j                  j                  ||d       | j                  j                  ||d       y )Nr3   r.   z	non-blank)r   r   r(   )r!   r*   r+   s      r   test_set_after_set_blankz*BackendBasicTests.test_set_after_set_blankJ   sB    # $!!'8R8!!'8[Ar   c                     t        d| j                        }t        d| j                        }t        d| j                        }| j                  |||       y r2   )r   DIFFICULT_CHARSr0   r4   s       r   test_difficult_charsz&BackendBasicTests.test_difficult_charsP   sJ     T%9%9: T%9%9:D$8$897Hh7r   c                 6   t        d| j                        }t        d| j                        }t        d| j                        }| j                  j                  |||       | j                  j	                  ||       | j                  j                  ||      J y r2   r   r9   r   r(   r%   r/   r4   s       r   test_delete_presentz%BackendBasicTests.test_delete_presentV   s     T%9%9: T%9%9:D$8$89!!'8X>$$Wh7||(((;CCCr   c                    t        d| j                        }t        d| j                        }t        j                  t        j
                        5  | j                  j                  ||       d d d        y # 1 sw Y   y xY wr2   )r   r9   pytestraisesr   PasswordDeleteErrorr   r%   )r!   r+   r*   s      r   test_delete_not_presentz)BackendBasicTests.test_delete_not_present^   sa     T%9%9:D$8$89]]6556 	<LL(((;	< 	< 	<s   A66A?c                    t        d| j                        }t        d| j                        }t        d| j                        }t        d| j                        }| j                  j                  |||       | j                  |||       | j                  j	                  ||       | j                  j                  ||      |k(  sJ y r2   r<   )r!   	username1	username2r,   r*   s        r   test_delete_one_in_groupz*BackendBasicTests.test_delete_one_in_groupd   s    !"d&:&:;	!"d&:&:;	 T%9%9:D$8$89!!'9h?'9h7$$Wi8||(()<HHHr   c                 F    t        | j                  j                        sJ y r   )r   r   name)r!   s    r   test_name_propertyz$BackendBasicTests.test_name_propertyn   s    !$,,"3"3444r   c                     t        dt              }t        dt              }t        dt              }| j                  |||       y r2   )r   UNICODE_CHARSr0   r4   s       r   test_unicode_charsz$BackendBasicTests.test_unicode_charsq   s8     ]3 ]3M27Hh7r   c                     t        dt              t        d      z   t        d| j                        z   }t        d|      }t        d|      }t        d|      }| j                  |||       y )N
   r3   )r   rK   r9   r0   )r!   sourcer,   r+   r*   s        r   test_unicode_and_ascii_charsz.BackendBasicTests.test_unicode_and_ascii_charsw   sk    "m,B B 4 456 	
 !V, V,F+7Hh7r   c                    | j                   }| j                  ddd       | j                  ddd       |j                  dd      dk(  sJ |j                  dd      dk(  sJ | j                  ddd       |j                  dd      dk(  sJ y	)
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   s     r   test_different_userz%BackendBasicTests.test_different_user   s     ,,*g{;*g{;##J8KGGG##J8KGGG*g{;##J8KGGGr   c                 X   | j                   }|j                  dd       }|J | j                  ddd       | j                  ddd       |j                  dd       }||j                  |j                  fdv sJ |j                  dd      }|J |j                  |j                  fdv sJ y )Nr*   rR   rS   rT   rU   rV   ))rS   rT   )rU   rV   )r   get_credentialr(   r+   r,   )r!   r   creds      r   test_credentialz!BackendBasicTests.test_credential   s    ,,%%i6||*g{;*g{;%%j$7|t}}= B
  
 	
 

 %%j':t}}- 2
 
 	
 
r   c                     t        dd      }|j                  t        d|       | j                  j	                          | j                  j
                  dk(  sJ y )Nz	fizz buzzz	ignore me)KEYRING_PROPERTY_FOO_BAROTHER_SETTINGenviron)dictsetattrosr   set_properties_from_envfoo_bar)r!   monkeypatchenvs      r   test_set_propertiesz%BackendBasicTests.test_set_properties   sH    K{SB	3/,,.||##{222r   c                    | j                   j                  d      }|| j                   usJ |j                  dk(  sJ t        j                  t
              5  | j                   j                   d d d        y # 1 sw Y   y xY w)Nbar)foo)r   with_propertiesrm   r?   r@   AttributeError)r!   alts     r   test_new_with_propertiesz*BackendBasicTests.test_new_with_properties   sk    ll**u*5$,,&&&ww%]]>* 	LL	 	 	s   A77B N)__name__
__module____qualname____doc__string
whitespacepunctuationr9   r?   fixturer#   r    r(   r0   r5   r7   r:   r=   rB   rF   rI   rL   rP   rZ   r^   rj   rq    r   r   r   r   !   s    O''&*<*<<OV^^D!+ "+
0:=8B8D<I58	8H
,3r   r   )ru   re   rv   r?   utilr   r   r   rK   minr   r   rz   r   r   <module>r}      sR    
    w  
/
//#5 55.Q Qr   