+
    Z8i                         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              #   8   "   T F  p\        V4      x  K  	  R # 5iNord).0chars   & 7lib/python3.14/site-packages/keyring/testing/backend.py	<genexpr>r      s     
/3t99s   c                 j    \         ;QJ d    R  V  4       F  '       d   K   R# 	  R# ! R  V  4       4      # )c              3   `   "   T F$  p^ \        V4      u;8*  ;'       d    ^8  Mu x  K&  	  R# 5i)    Nr   )r   cs   & r
   r   %is_ascii_printable.<locals>.<genexpr>   s$     -1arSV!!c!!1s   ,.FT)all)ss   &r
   is_ascii_printabler      s+    3-1-33-3-3-1---    c                   <  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)autousec                    V P                  4       V n        \        4       V n        VP	                  V P
                  4       R # r   )init_keyringkeyringsetcredentials_createdaddfinalizercleanup)selfrequests   &&r
   _init_properties"BackendBasicTests._init_properties%   s.    ((*#&5 T\\*r   c                `    V P                    F  pV P                  P                  ! V!   K  	  R # r   )r   r   delete_password)r   items   & r
   r   BackendBasicTests.cleanup+   s$    ,,DLL(($/ -r   c                v    V P                   P                  WV4       V P                  P                  W34       R # r   )r   set_passwordr   add)r   serviceusernamepasswords   &&&&r
   r(   BackendBasicTests.set_password/   s/     	!!'X>  $$g%89r   c                    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_getBackendBasicTests.check_set_get5   sz    ,, ##G6>>> 	'X6##G6(BBB 	'R0##G6"<<<r   c                l    \        ^4      p\        ^4      p\        ^4      pV P                  W2V4       R#    N)r   r1   r   r,   r+   r*   s   &   r
   test_password_set_get'BackendBasicTests.test_password_set_getC   s0     $ $#7h7r   c                    \        ^4      p\        ^4      pV P                  P                  WR4       V P                  P                  WR4       R# )r5   r/   z	non-blankN)r   r   r(   )r   r*   r+   s   &  r
   test_set_after_set_blank*BackendBasicTests.test_set_after_set_blankI   s>    # $!!'R8!!'[Ar   c                    \        ^V P                  4      p\        ^V P                  4      p\        ^V P                  4      pV P                  W2V4       R# r4   )r   DIFFICULT_CHARSr1   r6   s   &   r
   test_difficult_chars&BackendBasicTests.test_difficult_charsO   sH     T%9%9: T%9%9:D$8$897h7r   c                6   \        ^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# r4   r   r=   r   r(   r$   r0   r6   s   &   r
   test_delete_present%BackendBasicTests.test_delete_presentU   sy     T%9%9: T%9%9:D$8$89!!'X>$$W7||((;CCCr   c                &   \        ^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r4   )r   r=   pytestraisesr   PasswordDeleteErrorr   r$   )r   r+   r*   s   &  r
   test_delete_not_present)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                   \        ^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# r4   rA   )r   	username1	username2r,   r*   s   &    r
   test_delete_one_in_group*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                T    \        V P                  P                  4      '       g   Q hR # r   )r   r   namer   s   &r
   test_name_property$BackendBasicTests.test_name_propertym   s    !$,,"3"34444r   c                    \        ^\        4      p\        ^\        4      p\        ^\        4      pV P                  W2V4       R# r4   )r   UNICODE_CHARSr1   r6   s   &   r
   test_unicode_chars$BackendBasicTests.test_unicode_charsp   s6     ]3 ]3M27h7r   c                    \        ^
\        4      \        ^
4      ,           \        ^
V P                  4      ,           p\        ^V4      p\        ^V4      p\        ^V4      pV P                  WCV4       R# )
   N)r   rU   r=   r1   )r   sourcer,   r+   r*   s   &    r
   test_unicode_and_ascii_chars.BackendBasicTests.test_unicode_and_ascii_charsv   si    "m,B B 4 456 	
 !V, V,F+7h7r   c                &   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	password2service2user3	password3N)r   r(   r0   )r   r   s   & r
   test_different_user%BackendBasicTests.test_different_user   s     ,,*g{;*g{;##J8KGGG##J8KGGG*g{;##J8KGGGr   c                r   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_   r`   ra   rb   ))r_   r`   )ra   rb   )r   get_credentialr(   r+   r,   )r   r   creds   &  r
   test_credential!BackendBasicTests.test_credential   s    ,,%%i6||*g{;*g{;%%j$7|t}}= B
  
 	
 

 %%j':t}}- 2
 
 	
 
r   zplatform.system() == 'Windows'z#668)reasonc                    \         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/   r`   N)rE   deprecated_callr(   r   r0   rQ   s   &r
   test_empty_username%BackendBasicTests.test_empty_username   sP    ##%%j"k: &||((R8KGGG &%s   AA/	c                    \        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)KEYRING_PROPERTY_FOO_BAROTHER_SETTINGenvironN)dictsetattrosr   set_properties_from_envfoo_bar)r   monkeypatchenvs   && r
   test_set_properties%BackendBasicTests.test_set_properties   sH    K{SB	3/,,.||##{222r   c                0   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)bar)fooN)r   with_propertiesr   rE   rF   AttributeError)r   alts   & r
   test_new_with_properties*BackendBasicTests.test_new_with_properties   sf    ll**u*5,,&&&ww%]]>**LL +***s   #BB	c                ^   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_noneNr`   rb   r_   ra   znobody!)r   ri   r(   r,   )r   r   r*   rj   
password_1
password_2s   &     r
   r   2BackendBasicTests.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)"__name__
__module____qualname____firstlineno____doc__string
whitespacepunctuationr=   rE   fixturer!   r   r(   r1   r7   r:   r>   rB   rH   rM   rR   rV   r[   rf   rk   markxfailrp   r}   r   r   __static_attributes____classdictcell__)__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   rx   r   rE   r   r   utilr   rU   minr   r    r   r
   <module>r      sT    
    w  
/
//#5 55.hB hBr   