
    g&                        S r SSKJr  SSKJr  SSKrSSKJrJr  SSK	J
r
JrJrJrJrJrJr  SSKJrJrJr   " S S	\5      r " S
 S\5      r " S S\5      r " S S\5      rSSKJrJr   " S S\5      r " S S\5      rg)ztests for passlib.util    )with_statement)partialN)is_ascii_safeto_bytes)irangePY2PY3uunicode
join_bytesPYPY)TestCasehbrun_with_fixed_seedsc                   ~    \ rS rSrSrS rS rS rS rS r	\
" SS	9S
 5       rS rS rS rS rS rS rS rS rSrg)MiscTest   z#tests various parts of utils modulec                     SSK Jn  U R                  [        U5      S5        [	        U5        U R                  S[	        U5      ;   5        U R                  S[	        U5      ;   5        g)ztest compat's lazymoduler   )compatz,^<module 'passlib.utils.compat' from '.*?'>$	UnicodeIOr   N)passlib.utilsr   assertRegexreprdir
assertTrue)selfr   s     Q/home/matz/Project1/venv/lib/python3.13/site-packages/passlib/tests/test_utils.pytest_compatMiscTest.test_compat   sP    (fH	J 	Fs6{23CK/0    c                    ^ SSK Jm   " U4S jS[        5      nU R                  UR                  S5        UR
                  S   nU R                  UR                  UR                  5        g )Nr   classpropertyc                   ,   > \ rS rSrSr Y S 5       rSrg))MiscTest.test_classproperty.<locals>.test'      c                     U R                   $ N)xvar)clss    r   xprop/MiscTest.test_classproperty.<locals>.test.xprop)   s    xxr     N)__name__
__module____qualname____firstlineno__r*   r,   __static_attributes__r"   s   r   testr%   '   s    D   r    r4   r'   r,   )	passlib.utils.decorr#   objectassertEqualr,   __dict__assertIsim_func__func__)r   r4   propr#   s      @r   test_classpropertyMiscTest.test_classproperty$   sL    5	 6 	  	Q'}}W%dllDMM2r    c                    SSK Jn  U" SSS9S 5       nU R                  SUR                  ;   5        U R	                  [        [        SS	95         U R                  U" S
S5      S5        S S S 5        g ! , (       d  f       g = f)Nr   )deprecated_functionz1.6z1.8)
deprecatedremovedc                      U $ )ztest docstringr.   )argss    r   	test_func4MiscTest.test_deprecated_function.<locals>.test_func5   s	     Kr    z.. deprecated::zvthe function passlib.tests.test_utils.test_func() is deprecated as of Passlib 1.6, and will be removed in Passlib 1.8.)categorymessager'      )r'   rI   )r5   r@   r   __doc__assertWarningListdictDeprecationWarningr7   )r   r@   rE   s      r   test_deprecated_function!MiscTest.test_deprecated_function1   s    ; 
u	=	 
>	 	)Y->->>?##D2D2% 
 Yq^U3  s   A22
B c                 h  ^ SSK Jm   " U4S jS[        5      nU" 5       nU R                  UR                  S5        U R                  UR                  S5        U R                  UR
                  S5        UR                  n[        (       d'  U R                  UR                  UR                  5        g g )Nr   memoized_propertyc                   ,   > \ rS rSrSr Y S 5       rSrg).MiscTest.test_memoized_property.<locals>.dummyF   r   c                 2    U R                   nUS-   U l         U$ )Nr'   counter)r   values     r   rY   4MiscTest.test_memoized_property.<locals>.dummy.valueI   s    $Qwr    rW   N)r/   r0   r1   r2   rX   rY   r3   rQ   s   r   dummyrT   F   s    G r    r[   r'   )
r5   rR   r6   r7   rY   rX   r	   r9   r:   r;   )r   r[   dr<   rR   s       @r   test_memoized_propertyMiscTest.test_memoized_propertyC   s    9	F 	 G!$!$A&{{sMM$,,6 r    c                 ^   SSK Jn  [        XR                  5       5      nU R	                  [        U" S5      5      S5        U" S5      nU" S5      nU R                  U[        5        U R	                  [        U5      S5        U R	                  [        U5      S5        U R                  X45        g)zgetrandbytes()r   )getrandbytes
   N)	r   r`   r   	getRandomr7   lenassertIsInstancebytesassertNotEqual)r   r`   wrapperabs        r   test_getrandbytesMiscTest.test_getrandbytesX   s    .,(89WQZ!,BKBKa'Q$Q$A!r    i   )countc           	      2   SSK Jn  [        X R                  US95      nU R	                  U" SS5      S5        U R                  [        USS5        U R                  [        USS5        U R	                  U" SS5      S	5        U" [        S5      S
5      nU" [        S5      S
5      nU R                  U[        5        U R                  XE5        U R	                  [        [        U5      5      [        S5      [        S5      [        S5      /5        U" SS
5      nU" SS
5      nU R                  U[        5        U R                  XE5        U R	                  [        [        UR                  S5      5      5      [        S5      [        S5      [        S5      /5        g)zgetrandstr()r   
getrandstr)seedabc rh      aaaaa    ri   c   abcasciiN)r   ro   r   rb   r7   assertRaises
ValueErrorr
   rd   r   rf   sortedsetre   decode)r   rp   ro   rg   xys         r   test_getrandstrMiscTest.test_getrandstrd   sR    	-*nn$n&?@ 	q)2. 	*gub9 	*gr15 	a'2 AeHb!AeHb!a)A A!C&3#)?@ FBFBa'A AHHW$5 67!C&3#9OPr    c                     SSK Jn  [        R                  " SS5        U R	                  [        U" S5      5      S5        g)zgenerate_password()r   )generate_passwordignorez1The function.*generate_password\(\) is deprecated   N)r   r   warningsfilterwarningsr7   rc   )r   r   s     r   test_generate_passwordMiscTest.test_generate_password   s1    3*]^.r23R8r    c                     SSK Jn  SSKJn  U" S/5      nU R	                  U" U5      5        U R                  U" U5      (       + 5        g)ztest is_crypt_context()r   )is_crypt_context)CryptContext	des_cryptN)r   r   passlib.contextr   r   assertFalse)r   r   r   ccs       r   test_is_crypt_contextMiscTest.test_is_crypt_context   s=    20;-((,--b112r    c                    SSK nSSKJn  UR                  U" 5       5      nUR	                  SS5      nUR                  U" 5       5      nUR	                  SS5      nU R                  XE5        UR                  U" U5      5        g)ztest genseed()r   N)genseedl    d(	 )randomr   r   Randomrandintrf   rp   )r   r   r   rngrh   ri   s         r   test_genseedMiscTest.test_genseed   sf    )mmGI&KK6"mmGI&KK6"A r    c                 R  ^^ SSK JnJnJn  SSKJnJn  U" 5       nU(       dT  U R                  US5        U R                  U" SS5      S5        U R                  U" SS5      5        U R                  S	5      eU(       d  U R                  S
5      eS H
  nXv;   d  M
    O   US   nU" U5      m[        TSS5      (       a  TR                  TR                  S9mU4S jn[        S5      n	U" U	5      n
U" X5      nU R                  U[         5        U R                  X5        U R                  U" [#        U	5      [#        U
5      5      U
5        U
SS S-   nU R                  U" X5      U
5        [        S5      nU" U5      nU R                  U" X5      U5        U R                  U" [#        U5      [#        U5      5      U5        U R%                  [&        USU
5        U R)                  U" SU
5      5        U R                  U" SU5      5        SSK Jn  UR,                  n SmU4S jUl        S H4  mU R                  U" SU
5      S5        U R                  U" SU
5      5        M6     SmU R                  U" SU
5      S5        U R                  U" SU
5      5        UUl        g! UUl        f = f)ztest crypt.crypt() wrappersr   )	has_crypt
safe_crypt
test_crypt)get_supported_os_crypt_schemesget_crypt_handlerr.   r4   aaNzaaqPiZY5xR5l.zcrypt.crypt() not availablez0crypt() present, but no supported schemes found!)	md5_cryptsha256_cryptrs   
min_rounds)roundsc                    > [        U [        5      (       d   eTR                  U 5      n[        U[        5      (       a  UR	                  S5      n[        U[        5      (       d   eU$ )Nutf-8)
isinstancer   hashre   r~   )secretr   hashers     r   get_hash%MiscTest.test_crypt.<locals>.get_hash   sW    fg....;;v&D$&&{{7+dG,,,,Kr    xxu   testሴ c                    > T$ r)   r.   )r   r   retvals     r   <lambda>%MiscTest.test_crypt.<locals>.<lambda>   s    fr    )Nrr   :z:0z*0xxx)r   r   r   r   passlib.registryr   r   r7   r   skipTestfailgetattrusingr   r
   rd   r   r   rz   r{   r   utils_crypt)r   r   r   r   r   r   	supportedschemer   s1h1resulth1xs2h2modorigr   r   s                    @@r   r   MiscTest.test_crypt   sr   CCV 34	Y+Z5t<Z@A-- =>> 
 ))NOO 4F" 4 r]F"6*6<..\\):):\;F	 vYb\B#fg.$HRL(2,?D "gnB,b1 |_b\B+R0HRL(2,?D 	*j&"= 	
62./FC01
 	$zz	F4CJ5  FB!7>  FB!78 6 FZ3U;Z34 CJCJs   A:J 	J&c                    ^^ SSK JmJm  U R                  [        T[        S5      S5        U R                  [        T[        S5      S5        U R                  [        T[        S5      S5        U R                  [        TS[        S5      5        U R                  [        TSS5        U R                  [        TSS5        U R                  [        TS[        S5      5        U R                  [        TSS5        U R                  [        TS[        S5      5        U R                  [        TSS5        UU4S jn[        S5      [        S	5      [        S
5      S-  4 H  nU" U5      (       a  U R                  T" X"5      SU< S35        OU R                  [        TX"5        U R                  T" X"5      SU< S35        UR                  S5      nU R                  T" X"5      SU< S35        M     [        S5      [        S5      4[        S5      [        S5      4[        S5      [        S5      4[        S5      [        S5      4[        S
5      S-  SS [        S5      -   [        S
5      S-  4[        S5      [        S5      4[        S	5      [        S5      4[        S	5      [        S5      4[        S5      [        S	5      44	 GH7  u  p4U" U5      (       aP  U" U5      (       aC  U R                  T" X45      SU< SU< S35        U R                  T" XC5      SU< SU< S35        O.U R                  [        TX45        U R                  [        TXC5        U R                  T" X45      SU< SU< S35        U R                  T" XC5      SU< SU< S35        UR                  S5      nUR                  S5      nU R                  T" X45      SU< SU< S35        U R                  T" XC5      SU< SU< S35        GM:     g)ztest consteq()r   )consteqstr_consteqrr   r    r'   Nc                 J   > TTL =(       d    [         =(       d    [        U 5      $ r)   )r   r   )rY   r   r   s    r   consteq_supports_string6MiscTest.test_consteq.<locals>.consteq_supports_string  s     {*IcI]55IJr    rh   rq   u   ÿ¢ ra   zvalue r   latin-1rw   abcabczbaabcabzabcabcabzrs   abcdefdefabcqwertyuiopasdfghjklzxcvbnmzvalues  )	r   r   r   rz   	TypeErrorr
   r   encoder   )r   r   rY   lrr   r   s        @@r   test_consteqMiscTest.test_consteq   s>    	7 	)WaeS9)WaeQ7)WaeT:)Wc1R59)Wc15)Wc48)WdAbE:)WdC8)Wa27)Wa5	K #%$%b(E
 'u-- 5e7MN!!)WeCOOK5e7MNLL+EOOGE1%3IJ" 33(88-88-88-&'*CR01V9<()",. 2af%5ak*5ak*/0!E(;CA 'q)).Ea.H.H  1Q0GH  1Q0GH!!)Wa;!!)Wa;[.1Q0GH[.1Q0GH#A#AWQ]q,CDWQ]q,CD7r    c                 
   U R                  5         SSKJn  U R                  [        US5        U R                  [        US5        U R                  [        US5        U R                  U" [        S5      5      [        S5      5        U R                  U" [        S5      5      [        S5      5        U R                  U" [        S5      5      [        S	5      5        U R                  U" [        S
5      5      [        S5      5        U R                  U" [        S5      5      [        S5      5        U R                  U" [        S5      5      [        S5      5        U R                  [        U[        S5      5        U R                  [        U[        S5      5        U R                  [        U[        S5      5        U R                  [        U[        S5      5        U R                  [        U[        S5      5        U R                  [        U[        S5      5        U R                  [        U[        S5      5        U R                  [        U[        S5      5        U R                  [        U[        S5      5        U R                  [        U[        S5      5        U R                  [        U[        S5      5        U R                  [        U[        S5      5        U R                  [        U[        S5      5        U R                  [        U[        S5      5        U R                  [        U[        S5      5        U R                  U" [        S5      5      [        S5      5        U R                  U" [        S5      5      [        S5      5        U R                  U" [        S5      5      [        S5      5        U R                  [        U[        S 5      5        U R                  [        U[        S!5      5        U R                  U" [        S"5      5      [        S"5      5        U R                  U" [        S#5      5      [        S$5      5        U R                  U" [        S%5      5      [        S%5      5        U R                  U" [        S&5      5      [        S&5      5        U R                  U" [        S'5      5      [        S(5      5        U R                  U" [        S)5      5      [        S$5      5        U R                  [        U[        S*5      5        U R                  [        U[        S5      5        U R                  [        U[        S5      5        U R                  U" [        S5      5      [        S5      5        g)+z"test saslprep() unicode normalizerr   )saslprepNr'   r    rr      ­u   $­$‍$z$$$u
   $ $ $　$z$ $ $ $u   à   àr   u   ᠎u   ￹u   u   ﷐u   u   �u   ⿰u   ‎u   ⁯u   ऀu   ￸u   󠀁u   ا1u   اu   ابu   ا1بu   اAبu   xاzxAzu   I­XIXuserUSER   ªrh   u   Ⅸ)require_stringprepr   r   rz   r   r7   r
   r{   )r   sps     r   test_saslprepMiscTest.test_saslprepe  s   !0 	)R.)R+)R- 	AbEAbE*AhK!B%0 	A/011U8< 	A123Qy\B 	AiL)1X;7AhK!H+6 	*b!H+6*b!H+6*b!H+6*b!H+6*b!H+6*b!H+6*b!H+6*b!H+6*b!H+6*b!H+6*b!H+6*b!H+6*b!H+6*b!L/: 	*b!N*;<AhK!H+6An-..0ABA234a8L6MN*b!,@*AB*b!J-8AjM*AjM: 	AjM*AdG4AfI&	2AfI&	2AhK!C&1AhK!D'2*b!H+6*b!N*;< 	*b!N*;<A234a8L6MNr    c                 <   SSK Jn  U R                  U" S5      / 5        U R                  U" S5      / 5        U R                  U" S5      S/5        U R                  U" S5      S/5        U R                  U" S5      SS/5        U R                  U" S	5      SS/5        g )
Nr   )
splitcommarr   ,rh   z a , z a , bri   z a, b, )r   r   r7   )r   r   s     r   test_splitcommaMiscTest.test_splitcomma  s    ,B,C"-C3%0G,se4H-Sz:I.c
;r    c           
      n   SSK Jn  S H  nUR                  S5        [        U5      n[	        US-   5       H  nSU< SU< S3nU" X$5      nUR                  S5        U R                  [        U5      X5S	9  U R                  [        U5      [        XC5      US	9  U R                  [        U5      [        US
-   US-   5      US	9  U R                  XbS[        U5       US	9  M     M     S HI  n[        U5      n[	        US-   5       H)  nSU< SU< S3nU" X$5      nU R                  XbSU US	9  M+     MK     S HL  n[        U5      n[	        US-   5       H,  nSU< SU< S3nU" X$5      nU R                  XbSUS-    US	9  M.     MN     SnU R                  U" US5      S5        U R                  U" US5      S5        U R                  U" US5      S5        U R                  U" US5      S5        U R                  U" US
5      S5        U R                  U" US5      S5        U R                  U" US5      S5        U R                  U" US5      S5        U R                  U" US5      S5        U R                  U" US5      S5        U R                  U" US5      S5        U R                  U" US5      S5        g)z
utf8_truncate()
r   )utf8_truncate)	r       1s   123   s
      s
   s   a þþs&   abcdefghjusdfaoiu þþdsfioauweoiruerr      zsource=z index=z: )msg   r'   N)   s
       s
             )   s
      s
   MNOPr       MrI   s   MNs   MNs   MNrt            s   MNO	   ra      )
r   r   r~   rc   rangeassertLessEqualassertGreaterEqualmin
assertLessr7   )r   r   sourceendidxprefixr   s          r   test_utf8_truncateMiscTest.test_utf8_truncate  s    	0
F MM'"f+CS2X393?&v3 g& $$S[#$B ''FS]'OFSq#'-BO   V)=6 J! '#
N
F f+CS2X393?&v3  6 B '
"
F f+CS2X393?&v3  QV D '
" 1vq137vq148vq159vq1.	0 	vq12	4 	vq12	4 	vq12	4 	vq12	4 	vq13	5 	vq18	: 	vr28	: 	vr28	:r    r.   N)r/   r0   r1   r2   rJ   r   r=   rN   r]   rj   r   r   r   r   r   r   r   r   r   r  r3   r.   r    r   r   r      sk    -
134$7*
" %&Q &&QP93TlEELMO^<t:r    r   c                   <    \ rS rSrSrS rS rS rS rS r	S r
S	rg
)	CodecTesti7  z,tests bytes/unicode helpers in passlib.utilsc                    [         (       a%  SSKnU R                  [        UR                  5        O$SSKnU R                  [        UR
                  5        U R                  S[        5        U R                  S[        5        [         (       a"  U R                  SR                  S5      S5        gU R                  SS5        g)z*test b() helper, bytes and native str typer   Nr        r       ÿ)	r	   builtinsr9   re   __builtin__strrd   r7   r~   )r   r  s     r   
test_bytesCodecTest.test_bytes:  s    3MM%0*MM%.c5)k513[//	:JG[*5r    c                 p   SSK Jn  U R                  U" [        S5      5      S5        U R                  U" [        S5      5      S5        U R                  U" [        S5      S5      S5        U R	                  [
        U[        S5      S	5        U R                  U" S5      S5        U R                  U" S5      S5        U R                  U" S5      S5        U R                  U" SS5      S5        U R                  U" SSS
S5      S5        U R	                  [        USS5        U R	                  [        US5        g)ztest to_bytes()r   )r   rq   rx   r      ÿr   r  ry   rr   r   N)r   r   r7   r
   rz   r{   AssertionErrorr   )r   r   s     r   test_to_bytesCodecTest.test_to_bytesJ  s   * 	!E(+fE!J-0oN 	!J-;kJ*h*wG 	&)&A+.+F/2/J 	/9=<K	M 	/9b'J<G	I 	.(E4@)Xt4r    c                 b   SSK Jn  U R                  U" [        S5      5      [        S5      5        U R                  U" [        S5      5      [        S5      5        U R                  U" [        S5      S5      [        S5      5        U R                  U" S5      [        S5      5        U R                  U" S5      [        S5      5        U R                  U" SS	5      [        S5      5        U R	                  [
        US5        U R	                  [        USS
5        U R	                  [        US
5        g
)ztest to_unicode()r   )
to_unicoderq   r  ry   rx   r  r  r   N)r   r!  r7   r
   rz   r{   r  r   )r   r!  s     r   test_to_unicodeCodecTest.test_to_unicodeg  s    , 	AeH-ahGAjM2a
mL 	AjM7;a
mL 	F+!E(CO4!J-HK;<=jM	K*j+> 	.*eTB)Z6r    c                    SSK Jn  U R                  U" [        S5      S5      S5        U R                  U" SS5      S5        [        (       a;  U R                  U" [        S5      S5      S5        U R                  [        USS5        O:U R                  [        U[        S5      S5        U R                  U" SS5      S5        U R                  U" [        S5      S	5      S5        U R                  U" S
S	5      S5        U R                  U" [        S5      S5      [        (       a  SOS5        U R                  U" SS5      [        (       a  SOS5        U R                  [        USS5        g)ztest to_native_str()r   )to_native_strrq   ry   rx   r   s   àu   Ã r      r   N)	r   r%  r7   r
   r	   rz   UnicodeDecodeErrorUnicodeEncodeErrorr   )r   r%  s     r   test_to_native_strCodecTest.test_to_native_str}  s8   / 	qx95Avw7? 3]1V9g>G0-%' 0-6%'];@*M 	qy)<fEw	:FC 	qy':#&3J	8{G<#&3J	8 	)]D'Br    c                     SSK Jn  U R                  U" S5      5        U R                  U" [        S5      5      5        U R	                  U" S5      5        U R	                  U" [        S5      5      5        g)ztest is_ascii_safe()r   )r   s    abcz abcs    abcu    abcN)r   r   r   r
   r   )r   r   s     r   test_is_ascii_safeCodecTest.test_is_ascii_safe  sW    /n56a&678~67q'789r    c                    SSK Jn  U R                  U" SS5      5        U R                  U" SS5      5        U R                  U" SS5      5        U R                  U" SS5      5        U R                  U" SS5      5        U R                  U" SS5      5        U R                  U" SS5      5        U R                  U" SS5      5        g)	ztest is_same_codec()r   )is_same_codecNry   ASCIIr   utf8UTF_8)r   r/  r   r   )r   r/  s     r   test_is_same_codecCodecTest.test_is_same_codec  s    /dD12tW56gw78gw78gw78gv67gw78w89r    r.   N)r/   r0   r1   r2   rJ   r  r  r"  r)  r,  r3  r3   r.   r    r   r  r  7  s$    66 5:7,C>::r    r  c                   6    \ rS rSrSrS rS rS rS rS r	Sr
g	)
Base64EngineTesti  z%test standalone parts of Base64Enginec                     SSK JnJn  U R                  [        US5        U R                  [
        XS S 5        U R                  [
        XS S S-   5        g )Nr   )Base64Engine
AB64_CHARSr'   rs   A)passlib.utils.binaryr8  r9  rz   r   r{   )r   r8  r9  s      r   test_constructor!Base64EngineTest.test_constructor  sN    A 	)\15 	*lsOD 	*lsOc4IJr    c                 <   SSK Jn  U R                  U" S5      [        S5      5        U R                  U" [	        S5      5      [        S5      5        U R                  [        U[	        S5      5        U R                  [        US5        U R                  [        US5        U R                  [        U[	        S	5      5        U R                  U" S
5      [        S5      5        U R                  [        US5        U R                  U" S5      [        S5      5        U R                  U" S5      [        S5      5        U R                  U" S5      [        S5      5        U R                  U" S5      [        S5      5        U R                  U" S5      [        S5      5        g)zab64_decode()r   )ab64_decoderx   69b7rq      abÿ   ab   ab!ab!   abcd69b71d   abcde   abcdef69b71d79   abcdeQ   abcdefg
69b71d79f8   ab+/69bfbf   ab./N)r;  r?  r7   r   r
   rz   r{   r   )r   r?  s     r   test_ab64_decode!Base64EngineTest.test_ab64_decode  s>   4 	V,bj9QuX.6
; 	*k1X;? 	)[)<)[&9)[!E(; 	W-r(|<*k8<Y/J@Y/J@Z0"\2BC 	W-r(|<W-r(|<r    c                    SSK Jn  U R                  U" [        S5      5      S5        U R	                  [
        (       a  [        O[        U[        S5      R                  S5      5        U R                  U" [        S5      5      S5        U R                  U" [        S5      5      S	5        U R                  U" [        S
5      5      S5        U R                  U" [        S5      5      S5        g)zab64_encode()r   )ab64_encoder@  rx   r   rF  rE  rI  rJ  rL  rK  rN  rO  N)	r;  rS  r7   r   rz   r	   r   r(  r~   )r   rS  s     r   test_ab64_encode!Base64EngineTest.test_ab64_encode      4 	RZ0&9 	ss)0B%r&z'8'8'C	E 	R\2G<R
^4i@R%56
C 	R\2G<r    c                    SSK Jn  U R                  U" S5      [        S5      5        U R                  U" [	        S5      5      [        S5      5        U R                  [        U[	        S5      5        U R                  [        US5        U R                  [        US5        U R                  [        U[	        S	5      5        U R                  U" S
5      [        S5      5        U R                  [        US5        U R                  U" S5      [        S5      5        U R                  U" S5      [        S5      5        U R                  U" S5      [        S5      5        g)zb64s_decode()r   )b64s_decoderx   r@  rq   rA  rB  rC  rD  rE  rF  rG  rH  rI  rJ  rK  rL  N)r;  rX  r7   r   r
   rz   r{   r   )r   rX  s     r   test_b64s_decode!Base64EngineTest.test_b64s_decode  s
   4 	V,bj9QuX.6
; 	*k1X;? 	)[)<)[&9)[!E(; 	W-r(|<*k8<Y/J@Y/J@Z0"\2BCr    c                    SSK Jn  U R                  U" [        S5      5      S5        U R	                  [
        (       a  [        O[        U[        S5      R                  S5      5        U R                  U" [        S5      5      S5        U R                  U" [        S5      5      S	5        U R                  U" [        S
5      5      S5        U R                  U" [        S5      5      S5        g)zb64s_encode()r   )b64s_encoder@  rx   r   rF  rE  rI  rJ  rL  rK  rN  rM  N)	r;  r\  r7   r   rz   r	   r   r(  r~   )r   r\  s     r   test_b64s_encode!Base64EngineTest.test_b64s_encode  rV  r    r.   N)r/   r0   r1   r2   rJ   r<  rP  rT  rY  r]  r3   r.   r    r   r6  r6    s     /
K=8=&D.=r    r6  c                       \ rS rSrSrSrSrSrSrS r	S r
S rS rS	 rS
 rS rS rSS/ SQ4SS/ SQ4/rSS/ SQ4/rS rS rS rS rS rS rS rS rS rSrg)_Base64Testi   z+common tests for all Base64Engine instancesN   ?c                 .   ^  [        U 4S jU 5       5      $ )z!generate byte string from offsetsc              3   Z   >#    U  H   nTR                   R                  XS -    v   M"     g7f)r'   N)enginebytemap).0or   s     r   	<genexpr> _Base64Test.m.<locals>.<genexpr>5  s$     Fg$++--a!4gs   (+)r   )r   offsetss   ` r   m_Base64Test.m3  s    FgFFFr    c                     U R                   nUR                  nU R                   H$  u  p4U" U5      nU R                  XTSU< S35        M&     g)z,test encode_bytes() against reference inputszencode r   N)rd  encode_bytesencoded_datar7   )r   rd  r   rawencodedr   s         r   test_encode_bytes_Base64Test.test_encode_bytes:  sF    $$ --LCC[FVWc.CD .r    c                     U R                   nUR                  nU R                  [        U[	        S5      5        U R                  [        US5        g)z"test encode_bytes() with bad inputr   N)rd  rn  rz   r   r
   )r   rd  r   s      r   test_encode_bytes_bad!_Base64Test.test_encode_bytes_badB  s>    $$)VQvY7)VT2r    c                     U R                   nUR                  nU R                   H$  u  p4U" U5      nU R                  XSSU< S35        M&     g)z,test decode_bytes() against reference inputszdecode r   N)rd  decode_bytesro  r7   )r   rd  r~   rp  rq  r   s         r   test_decode_bytes_Base64Test.test_decode_bytesL  sF    $$ --LCG_FVS'*CD .r    c                    [         (       a  S O[        nU R                  nU R                  nUR                  nSnU R                  U" U" SS5      5      U5        [        SS5       Hg  nUR                  (       a  US:  a  UOU" SUS-
  -  5      nOUS:  a  U" SUS-   -  5      OUnU R                  U" U" SSU-  5      5      USU-  5        Mi     U R                  U" U" SSS5      5      US-  5        [        SS5       Hj  nUR                  (       a  US:  a  UOU" SUS-
  -  5      nOUS:  a  U" SUS-   -  5      OUnU R                  U" U" SSSU-  5      5      XW-   S	U-  5        Ml     g
)z(test decode_bytes() ignores padding bitsc                     [        U /5      $ r)   )re   )vs    r   r   7_Base64Test.test_decode_bytes_padding.<locals>.<lambda>V  s
    %*r    r   r   r  r   r'   rI   z
%d/4 bits:z
%d/2 bits:N)r	   chrrd  rk  rx  r7   r  big)r   bchrrd  rk  r~   BNULLicorrects           r   test_decode_bytes_padding%_Base64Test.test_decode_bytes_paddingT  sT   ),$#FF$$ 	!A/qAzz#$q5%d1qs8n,-E$q1Q3x.uVAa1I.9IJ  	!Aa)573qAzz#$q5%d1qs8n,-E$q1Q3x.uVAa!Q$K0%/)A-/ r    c                    U R                   nUR                  nU R                  [        X!R                  SS 5        U R                  U R                  UR                  ;  5        U R                  [        X R                  S-  5        U R                  [        X!R                  SS 5        U R                  [        US5        g)z"test decode_bytes() with bad inputNrt   r   )	rd  rx  rz   r{   re  r   bad_byter   charmap)r   rd  r~   s      r   test_decode_bytes_bad!_Base64Test.test_decode_bytes_bado  s    $$ 	*fnnRa.@A 	V^^;<*fmmAo> 	)V^^BQ-?@)VT2r    c                    U R                   nSSKJnJn  U R	                  5       nSn[        S5       GH9  nUR                  U(       a  SOSS5      nU(       d  SnSU-  S	-   S
-  nU" XG5      n	UR                  U	5      n
U R                  [        U
5      U5        UR                  U
5      nU R                  X5        US-  S:X  a  XtR                  / SQ5      -  nS
U-  S-  nU" XAR                  U5      n
UR                  U
5      n	U R                  [        U	5      USU-  5        UR                  U	5      nUS-  (       a  U R                  USS U
SS 5        GM(  U R                  X5        GM<     g)z2test encode_bytes/decode_bytes against random datar   )r`   ro   Fi  r'      Tr   rI   r   )rs   r'   rI   zencoded %d:Nrs   )rd  r   r`   ro   rb   r   r   rn  r7   rc   rx  choicere  )r   rd  r`   ro   r   saw_zeror  sizeenc_sizerp  rq  r   raw_sizes                r   
test_codec_Base64Test.test_codec  sX   :nnA ;;Hq!R8D$q1}Hs)C ))#.GS\84 ((1FV) ax1}

8,,vqyH nnd;G %%g.CSXx1EF ((-Fax  gcrl;  1O r    c                    SSK Jn  U R                  5       nU R                  nU R                  R                  nSnUS:  Ga-  UR                  SS5      nU" X#R                  U5      R                  S5      nUS-  S:X  a  U R                  [        XG5        M\  UR                  UR                  U5      5      nUR                  5       S:  a"  UR                  S5      nUR                  S5      nXx:X  a-  U" U5      u  pU R                  U	5        U R                  X5        OAU R!                  US	-  S5        U" U5      u  pU R#                  U	5        U R                  X5        US-  nUS:  a  GM,  g
g
)ztest repair_unused()r   rn   i,     ry   r   r'   g      ?r   N)r   ro   rb   rd  check_repair_unusedr   r  r   rz   r{   rn  rx  r   r~   r   r7   rf   r   )r   ro   r   rd  r  r  r  cdatardataokr   s              r   test_repair_unused_Base64Test.test_repair_unused  sD    	-nn"kk==#g;;q$DsNND9@@IEax1}!!*.AI''(;(;E(BCEzz|b W-W-~07
  $  / ##D1Ha007
#  /FA- #ggr    s   3"s   "3)rI   r'   r   s   "3)r'   rI   r   s   ")r   r   r'   c                    U R                   nU R                  U R                  -    H9  u  p#nUR                  X45      nUR	                  U5      nU R                  Xb5        M;     U R                  [        UR                  [        S5      / 5        g)ztest encode_transposed_bytes()rh   N)	rd  
transposedtransposed_dupsencode_transposed_bytesrx  r7   rz   r   r
   )r   rd  r   inputrj  tmpouts          r   test_encode_transposed_bytes(_Base64Test.test_encode_transposed_bytes  sx    &*oo8L8L&L"F700@C%%c*CS) 'M
 	)V%C%CQsVRPr    c                     U R                   nU R                   H9  u  p#nUR                  U5      nUR                  XT5      nU R	                  Xc5        M;     g)ztest decode_transposed_bytes()N)rd  r  rn  decode_transposed_bytesr7   )r   rd  r  r   rj  r  r  s          r   test_decode_transposed_bytes(_Base64Test.test_decode_transposed_bytes  sL    &*oo"E7%%e,C00>CS) '6r    c                     U R                   nU R                   H9  u  p#nUR                  U5      nU R                  [        UR
                  UU5        M;     g)z8test decode_transposed_bytes() fails if map is a one-wayN)rd  r  rn  rz   r   r  )r   rd  r  _rj  r  s         r    test_decode_transposed_bytes_bad,_Base64Test.test_decode_transposed_bytes_bad  sM    !%!5!5Eg%%e,Ci)G)G%' "6r    c                    U R                  5       nU R                  n[        USU-  5      n[        USU-  5      nU* S-  nX-   S-  nSU-  n	U H4  u  pU" U
5      nU R                  U[        5        U R                  X5        M6     U R                  [        US5        U R                  [        XY5        U H#  u  pU R                  U" U5      U
SU< S35        M%     U R                  nU R                  [        Xm" S5      US-   -  5        U R                  [        Xm" S5      US-
  -  5        U R                  [        X`R                  U-  5        U R                  [        XdR                  S   5        U R                  [        US	5        SS
KJn  [        S5       H  nUR                  SU	S-
  5      n
U" U
5      nU R                  [!        U5      U5        U R                  U" U5      U
5        U" X4R"                  U5      nU" U5      n
U R%                  U
SSU-  5        U R'                  XSU-  5        U" U
5      nU(       a  U R                  US	S US	S 5        M  U R                  X5        M     g	)z5helper to check encode_intXX & decode_intXX functionszencode_int%szdecode_int%sr  r'   rs   zencoded r   r   Nrn   d   zdecode %r out of bounds:r   )rb   rd  r   rd   re   r7   rz   r{   rk  r  r   r  r   ro   r   r   rc   re  r  r
  )r   bitsencoded_pairsr   rd  r   r~   padcharsupperrY   rq  r   rk  ro   r  s                   r   check_int_pair_Base64Test.check_int_pair  s6   nn$!67$!67eaiA4 ,NEE]F!!&%0V- , 	*fb1*f4 ,NEVG_eg5OP ,FF*fadE!Gn=*fadE!Gn=*fmmE.AB)V^^A->?)VT2 	-AKK57+EUmGS\51VG_e4 !nne<G7OE##E1.H7.RSOOE*Dw*NOE]F  gcrl;  1! r    c                 |    U R                   nU R                  nU R                  SSU" S5      4SU" S5      4/5        g )Nr  r   ?   )rd  rk  r  r   rd  rk  s      r   	test_int6_Base64Test.test_int6/  s9    FFAAaD	B";78r    c           
          U R                   nU R                  nU R                  SSU" SS5      4SUR                  (       a	  U" SS5      OU" SS5      4SU" SS5      4/5        g )Nr  r   r  i  rd  rk  r  r  r  s      r   
test_int12_Base64Test.test_int124  s`    FFBAaFFJJ1RAbG4ua2h6G I 	Jr    c                     U R                   nU R                  nU R                  SSU" SSSS5      4SUR                  (       a  U" SSSS5      O
U" SSSS5      4SU" SSSS5      4/5        g )N   r   r  i r  r  s      r   
test_int24_Base64Test.test_int24:  so    FFBAa!AJ

1Qq"Qq<qBr"~& ( 	)r    c                 V   U R                   nU R                  nU R                  SSU" SSSSSSSSSSS5      4SUR                  (       a  U" SSSSSSSSSSS5      OU" SSSSSSSSSSS5      4SUR                  (       a  U" SSSSSSSSSSS5      OU" SSSSSSSSSSS5      4/5        g )N@   r   r  r   <   l    r   r  r  s      r   
test_int64_Base64Test.test_int64A  s     FFB!Qq1Q!Aa1Q%?!@FJJQq1Q!Aa1R0r!Aa1Qq!Aa02VZZAbBr2bB2bA2bB2bR2>@!A 	Br    c                 (   U R                   (       d  U R                  S5      eU R                  nU R                    HT  u  p#n[        USU-  5      n[        USU-  5      nU R	                  U" U5      U5        U R	                  U" U5      U5        MV     g)z(test against reference integer encodingsznone defined for classzencode_int%dzdecode_int%dN)encoded_ints	skipTestsrd  r   r7   )r   rd  datarY   r  r   r~   s          r   test_encoded_ints_Base64Test.test_encoded_intsL  s      ..!9::!%!2!2DV^d%:;FV^d%:;FVE]D1VD\51	 "3r    r.   )r/   r0   r1   r2   rJ   rd  ro  r  r  rk  rr  ru  ry  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r3   r.   r    r   r`  r`     s    5 F L L HGE3E/63&-2^P 
/'2	/'2J 
/'2O
Q*'.2`9
J)	B	2r    r`  )h64h64bigc                   0    \ rS rSrSr\rSr/ SQrSS/r	Sr
g)	H64_Testi_  ztest H64 codec functionsz	h64 codec)	r    r    )   Us   J/)   Us   Jd8)   UUs   JdOJ)   UUs   JdOJe0)   UUUs   JdOJeK3)   UUUs   JdOJeKZe)   UUs   JdOJj0)   UU_s   JdOJey3)   z.r  r  )   .z  r  r.   N)r/   r0   r1   r2   rJ   r  rd  descriptionPrefixro  r  r3   r.   r    r   r  r  _  s&    "F#L  	Lr    r  c                   0    \ rS rSrSr\rSr/ SQrSS/r	Sr
g)	H64Big_Testix  ztest H64Big codec functionszh64big codec)	r  )r  s   JE)r  s   JOc)r  s   JOdJ)r  s   JOdJeU)r  s   JOdJeZI)r  s   JOdJeZKe)r  s   JOdJfk)r  s   JOdJeZw)r  r  r  )r  r  r  r.   N)r/   r0   r1   r2   rJ   r  rd  r  ro  r  r3   r.   r    r   r  r  x  s&    %F&L  	Lr    r  )rJ   
__future__r   	functoolsr   r   r   r   r   passlib.utils.compatr   r   r	   r
   r   r   r   passlib.tests.utilsr   r   r   r   r  r6  r`  r;  r  r  r  r  r.   r    r   <module>r     s     &   2 O O O B B
^:x ^:H{: {:@g=x g=Ru2( u2z	 -{ 2+ r    