+
    ei  c                   s    R t ^ RIt^ RIt^ RIt^ RIHt ^RIHt Rt]	! R ] 4       4      ^8  g   Q hR t
 ! R R4      tR# )	z)
Common test functionality for backends.
N)errors)random_stringuH  זהכיףסתםלשמועאיךתנצחקרפדעץטובבגןξεσκεπάζωτηνψυχοφθόραβδελυγμίαСъешьжеещёэтихмягкихфранцузскихбулокдавыпейчаюЖълтатадюлябешещастливачепухъткойтоцъфназамръзнакатогьонc              #   s8   "   T F  p\        V4      x  K  	  R # 5iNZord).0Zchar   & </usr/lib/python3.14/site-packages/keyring/testing/backend.py	<genexpr>r      s     
/3t99s   c                 sj    \         ;QJ d    R  V  4       F  '       d   K   R# 	  R# ! R  V  4       4      # )c              3   s`   "   T F$  p^ \        V4      u;8*  ;'       d    ^8  Mu x  K&  	  R# 5i)i    Nr   )r   Zcr   r   r   Z%is_ascii_printable.<locals>.<genexpr>   s$     -1arSV!!c!!1s   ,.FT)Zall)Zs   &r   is_ascii_printabler	      s+    3-1-33-3-3-1---    c                   s<  a  ] tR t^ t o Rt]P                  ]P                  ,           t]	P                  ! RR7      R 4       tR tR tR tR tR	 tR
 tR tR tR tR tR tR tR tR t]	P4                  P7                  RRR7      R 4       tR tR tR tRt V t!R# )BackendBasicTestszETest for the keyring's basic functions. password_set and password_getT)Zautousec                s    V P                  4       V n        \        4       V n        VP	                  V P
                  4       R # r   )Zinit_keyringkeyringZsetcredentials_createdZaddfinalizercleanup)selfZrequests   &&r   _init_propertiesZ"BackendBasicTests._init_properties%   s.    ((*#&5 T\\*r
   c                s`    V P                    F  pV P                  P                  ! V!   K  	  R # r   )r   r   delete_password)r   Zitemr   r   r   ZBackendBasicTests.cleanup+   s$    ,,DLL(($/ -r
   c                sv    V P                   P                  WV4       V P                  P                  W34       R # r   )r   set_passwordr   Zadd)r   serviceusernamepasswords   &&&&r   r   ZBackendBasicTests.set_password/   s/     	!!'X>  $$g%89r
   c                s    V P                   pVP                  W4      e   Q hV P                  WV4       VP                  W4      V8X  g   Q hV P                  WR4       VP                  W4      R8X  g   Q hR # )N )r   get_passwordr   )r   r   r   r   r   s   &&&& r   check_set_getZBackendBasicTests.check_set_get5   sz    ,, ##G6>>> 	'X6##G6(BBB 	'R0##G6"<<<r
   c                sl    \        ^4      p\        ^4      p\        ^4      pV P                  W2V4       R#    N)r   r   r   r   r   r      &   r   test_password_set_getZ'BackendBasicTests.test_password_set_getC   s0     $ $#7h7r
   c                s    \        ^4      p\        ^4      pV P                  P                  WR4       V P                  P                  WR4       R# )r   r   z	non-blankN)r   r   r   )r   r   r      &  r   test_set_after_set_blankZ*BackendBasicTests.test_set_after_set_blankI   s>    # $!!'R8!!'[Ar
   c                s    \        ^V P                  4      p\        ^V P                  4      p\        ^V P                  4      pV P                  W2V4       R# r   )r   DIFFICULT_CHARSr   r   r   r   test_difficult_charsZ&BackendBasicTests.test_difficult_charsO   sH     T%9%9: T%9%9:D$8$897h7r
   c                s6   \        ^V P                  4      p\        ^V P                  4      p\        ^V P                  4      pV P                  P                  W2V4       V P                  P	                  W24       V P                  P                  W24      e   Q hR# r   r   r    r   r   r   r   r   r   r   test_delete_presentZ%BackendBasicTests.test_delete_presentU   sy     T%9%9: T%9%9:D$8$89!!'X>$$W7||((;CCCr
   c                s&   \        ^V P                  4      p\        ^V P                  4      p\        P                  ! \        P
                  4      ;_uu_ 4        V P                  P                  W!4       RRR4       R#   + '       g   i     R# ; ir   )r   r    pytestraisesr    ZPasswordDeleteErrorr   r   )r   r   r   r   r   test_delete_not_presentZ)BackendBasicTests.test_delete_not_present]   s\     T%9%9:D$8$89]]65566LL((; 7666s   A??B	c                s   \        ^V P                  4      p\        ^V P                  4      p\        ^V P                  4      p\        ^V P                  4      pV P                  P                  WAV4       V P                  WBV4       V P                  P	                  WA4       V P                  P                  WB4      V8X  g   Q hR# r   r"   )r   Z	username1Z	username2r   r      &    r   test_delete_one_in_groupZ*BackendBasicTests.test_delete_one_in_groupc   s    !"d&:&:;	!"d&:&:;	 T%9%9:D$8$89!!'h?'h7$$W8||((<HHHr
   c                sT    \        V P                  P                  4      '       g   Q hR # r   )r	   r   Znamer   r   r   test_name_propertyZ$BackendBasicTests.test_name_propertym   s    !$,,"3"34444r
   c                s    \        ^\        4      p\        ^\        4      p\        ^\        4      pV P                  W2V4       R# r   )r   UNICODE_CHARSr   r   r   r   test_unicode_charsZ$BackendBasicTests.test_unicode_charsp   s6     ]3 ]3M27h7r
   c                s    \        ^
\        4      \        ^
4      ,           \        ^
V P                  4      ,           p\        ^V4      p\        ^V4      p\        ^V4      pV P                  WCV4       R# )i
   N)r   r+   r    r   )r   Zsourcer   r   r   r'   r   test_unicode_and_ascii_charsZ.BackendBasicTests.test_unicode_and_ascii_charsv   si    "m,B B 4 456 	
 !V, V,F+7h7r
   c                s&   V P                   pV P                  RRR4       V P                  RRR4       VP                  RR4      R8X  g   Q hVP                  RR4      R8X  g   Q hV P                  RRR4       VP                  RR4      R8X  g   Q hR	# )
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   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                sr   V P                   pVP                  R R4      pVe   Q hV P                  RRR4       V P                  RRR4       VP                  RR4      pVe    VP                  VP                  3R9   g   Q hVP                  RR4      pVf   Q hVP                  VP                  3R9   g   Q hR# )r   Nr.   r/   r0   r1   r2   ))r/   r0   )r1   r2   )r   get_credentialr   r   r   )r   r   credr   r   test_credentialZ!BackendBasicTests.test_credential   s    ,,%%i6||*g{;*g{;%%j$7|t}}= B
  
 	
 

 %%j':t}}- 2
 
 	
 
r
   zplatform.system() == 'Windows'z#668)Zreasonc                s    \         P                  ! 4       ;_uu_ 4        V P                  R RR4       RRR4       V P                  P	                  R R4      R8X  g   Q hR#   + '       g   i     L5; i)r.   r   r0   N)r$   Zdeprecated_callr   r   r   r)   r   r   test_empty_usernameZ%BackendBasicTests.test_empty_username   sP    ##%%j"k: &||((R8KGGG &%s   AA/	c                s    \        R RR7      pVP                  \        RV4       V P                  P	                  4        V P                  P
                  R 8X  g   Q hR# )z	fizz buzzz	ignore me)ZKEYRING_PROPERTY_FOO_BARZOTHER_SETTINGZenvironN)ZdictZsetattrosr   Zset_properties_from_envZfoo_bar)r   ZmonkeypatchZenvs   && r   test_set_propertiesZ%BackendBasicTests.test_set_properties   sH    K{SB	3/,,.||##{222r
   c                s0   V P                   P                  R R7      pWP                   Jg   Q hVP                  R 8X  g   Q h\        P                  ! \
        4      ;_uu_ 4        V P                   P                   RRR4       R#   + '       g   i     R# ; i)Zbar)fooN)r   Zwith_propertiesr:   r$   r%   ZAttributeError)r   Zaltr   r   test_new_with_propertiesZ*BackendBasicTests.test_new_with_properties   sf    ll**u*5,,&&&ww%]]>**LL +***s   #BB	c                s^   V P                   pR pVP                  VR4      pVe   Q hRpRpV P                  VRV4       V P                  VRV4       VP                  VR4      P                  V8X  g   Q hVP                  VR4      P                  V8X  g   Q hVP                  VR4      e   Q hR# ) test_wrong_username_returns_noneNr0   r2   r/   r1   znobody!)r   r4   r   r   )r   r   r   r5   Z
password_1Z
password_2s   &     r   r<   Z2BackendBasicTests.test_wrong_username_returns_none   s    ,,4%%gt4|| 
 
'7J7'7J7%%gw7@@JNNN%%gw7@@JNNN %%gy9AAAr
   )r   r   N)"Z__name__Z
__module__Z__qualname__Z__firstlineno____doc__stringZ
whitespaceZpunctuationr    r$   Zfixturer   r   r   r   r   r   r!   r#   r&   r(   r*   r,   r-   r3   r6   ZmarkZxfailr7   r9   r;   r<   Z__static_attributes__Z__classdictcell__)Z__classdict__s   @r   r   r       s     O''&*<*<<O^^D!+ "+
0:=8B8D<I58	8H
, [[7GH HH
3B Br
   r   )r=   r8   r>   r$   r   r    Zutilr   r+   Zminr	   r   ) r
   r   <module>r?      sT    
    w  
/
//#5 55.hB hBr
   