
     h&                        d Z ddlmZ ddlmZ ddlZddlmZmZ ddl	m
Z
mZmZmZmZmZmZ ddlmZmZmZ  G d d	e      Z G d
 de      Z G d de      Z G d de      ZddlmZmZ  G d de      Z G d de      Zy)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                   |    e Zd ZdZd Zd Zd Zd Zd Z e	d      d	        Z
d
 Zd Zd Zd Zd Zd Zd Zd Zy)MiscTestz#tests various parts of utils modulec                     ddl m} | j                  t        |      d       t	        |       | j                  dt	        |      v        | j                  dt	        |      v        y)ztest compat's lazymoduler   )compatz,^<module 'passlib.utils.compat' from '.*?'>$	UnicodeIOr   N)passlib.utilsr   assertRegexreprdir
assertTrue)selfr   s     Z/var/www/html/Resume-Scraper/venv/lib/python3.12/site-packages/passlib/tests/test_utils.pytest_compatzMiscTest.test_compat   sP    (fH	J 	Fs6{23CK/0    c                     ddl m  G fddt              }| j                  |j                  d       |j
                  d   }| j                  |j                  |j                         y )Nr   classpropertyc                   $    e Zd ZdZW  d        Zy))MiscTest.test_classproperty.<locals>.test   c                     | j                   S N)xvar)clss    r   xpropz/MiscTest.test_classproperty.<locals>.test.xprop)   s    xxr   N)__name__
__module____qualname__r'   r)   r    s   r   testr#   '   s    D   r   r-   r$   r)   )	passlib.utils.decorr!   objectassertEqualr)   __dict__assertIsim_func__func__)r   r-   propr!   s      @r   test_classpropertyzMiscTest.test_classproperty$   sL    5	 6 	  	Q'}}W%dllDMM2r   c                    ddl m}  |dd      d        }| j                  d|j                  v        | j	                  t        t        d	            5  | j                   |d
d      d       d d d        y # 1 sw Y   y xY w)Nr   )deprecated_functionz1.6z1.8)
deprecatedremovedc                      | S )ztest docstring )argss    r   	test_funcz4MiscTest.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$   rA   )r.   r8   r   __doc__assertWarningListdictDeprecationWarningr0   )r   r8   r>   s      r   test_deprecated_functionz!MiscTest.test_deprecated_function1   s    ; 
u	=	 
>	 	)Y->->>?##D2D2%  	4
 Yq^U3	4 	4 	4s   A77B c                 \   ddl m  G fddt              } |       }| j                  |j                  d       | j                  |j                  d       | j                  |j
                  d       |j                  }t        s'| j                  |j                  |j                         y y )Nr   memoized_propertyc                   $    e Zd ZdZW  d        Zy).MiscTest.test_memoized_property.<locals>.dummyr   c                 2    | j                   }|dz   | _         |S )Nr$   )counter)r   values     r   rN   z4MiscTest.test_memoized_property.<locals>.dummy.valueI   s    $Qwr   N)r*   r+   r,   rM   rN   rH   s   r   dummyrK   F   s    G r   rO   r$   )
r.   rI   r/   r0   rN   rM   r	   r2   r3   r4   )r   rO   dr5   rI   s       @r   test_memoized_propertyzMiscTest.test_memoized_propertyC   s~    9	F 	 G!$!$A&{{MM$,,6 r   c                 b   ddl m} t        || j                               }| j	                  t         |d            d        |d      } |d      }| j                  |t               | j	                  t        |      d       | j	                  t        |      d       | j                  ||       y)zgetrandbytes()r   )getrandbytes
   N)	r   rS   r   	getRandomr0   lenassertIsInstancebytesassertNotEqual)r   rS   wrapperabs        r   test_getrandbyteszMiscTest.test_getrandbytesX   s    .,(89WQZ!,BKBKa'Q$Q$Aq!r   i   )countc           	      >   ddl m} t        || j                  |            }| j	                   |dd      d       | j                  t        |dd       | j                  t        |dd       | j	                   |dd      d	        |t        d      d
      } |t        d      d
      }| j                  |t               | j                  ||       | j	                  t        t        |            t        d      t        d      t        d      g        |dd
      } |dd
      }| j                  |t               | j                  ||       | j	                  t        t        |j                  d                  t        d      t        d      t        d      g       y)zgetrandstr()r   
getrandstr)seedabc r[      aaaaa    r\   c   abcasciiN)r   ra   r   rU   r0   assertRaises
ValueErrorr
   rW   r   rY   sortedsetrX   decode)r   rb   ra   rZ   xys         r   test_getrandstrzMiscTest.test_getrandstrd   sX    	-*dnn$n&?@ 	q)2. 	*gub9 	*gr15 	a'2 AeHb!AeHb!a)Aa A!C&3#)?@ FBFBa'Aa AHHW$5 67!C&3#9OPr   c                 ~    ddl m} t        j                  dd       | j	                  t         |d            d       y)zgenerate_password()r   )generate_passwordignorez1The function.*generate_password\(\) is deprecated   N)r   ru   warningsfilterwarningsr0   rV   )r   ru   s     r   test_generate_passwordzMiscTest.test_generate_password   s1    3*]^.r23R8r   c                     ddl m} ddlm}  |dg      }| j	                   ||             | j                   ||              y)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_contextzMiscTest.test_is_crypt_context   s=    20;-((,--b112r   c                 
   ddl }ddlm} |j                   |             }|j	                  dd      }|j                   |             }|j	                  dd      }| j                  ||       |j                   ||             y)ztest genseed()r   N)genseedl    d(	 )randomr   r   RandomrandintrY   rb   )r   r   r   rngr[   r\   s         r   test_genseedzMiscTest.test_genseed   sh    )mmGI&KK6"mmGI&KK6"Aa r   c                 4   ddl m}m}m} ddlm}m}  |       }|sT| j                  |d       | j                   |dd      d       | j                   |dd             | j                  d	      |s| j                  d
      dD ]  }||v s n |d   } ||      t        dd      rj                  j                        fd}t        d      }	 ||	      }
 ||	|
      }| j                  |t                | j                  ||
       | j                   |t#        |	      t#        |
            |
       |
dd dz   }| j                   ||	|      |
       t        d      } ||      }| j                   |||      |       | j                   |t#        |      t#        |            |       | j%                  t&        |d|
       | j)                   |d|
             | j                   |d|             ddl m} |j,                  }	 dfd|_        dD ]3  | j                   |d|
      d       | j                   |d|
             5 d| j                   |d|
      d       | j                   |d|
             ||_        y# ||_        w xY w)ztest crypt.crypt() wrappersr   )	has_crypt
safe_crypt
test_crypt)get_supported_os_crypt_schemesget_crypt_handlerr<   r-   aaNzaaqPiZY5xR5l.zcrypt.crypt() not availablez0crypt() present, but no supported schemes found!)	md5_cryptsha256_cryptre   
min_rounds)roundsc                     t        | t              sJ j                  |       }t        |t              r|j	                  d      }t        |t              sJ |S )Nutf-8)
isinstancer   hashrX   rp   )secretr   hashers     r   get_hashz%MiscTest.test_crypt.<locals>.get_hash   sH    fg..;;v&D$&{{7+dG,,Kr   xxu   testሴ c                     S r&   r<   )r   r   retvals     r   <lambda>z%MiscTest.test_crypt.<locals>.<lambda>   s    f r   )Nrd   :z:0z*0xxx)r   r   r   r   passlib.registryr   r   r0   r   skipTestfailgetattrusingr   r
   rW   r   r   rl   rm   r   utils_crypt)r   r   r   r   r   r   	supportedschemer   s1h1resulth1xs2h2modorigr   r   s                    @@r   r   zMiscTest.test_crypt   s   CCV 34	Y+Z5t<Z@A-- =>> 
 ))NOO 4 	#F"	# 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 9  FB!7>  FB!789 FZ3U;Z34 CJCJs   A7J 	Jc                    ddl mm | j                  t        t        d      d       | j                  t        t        d      d       | j                  t        t        d      d       | j                  t        dt        d             | j                  t        dd       | j                  t        dd       | j                  t        dt        d             | j                  t        dd       | j                  t        dt        d             | j                  t        dd       fd}t        d      t        d	      t        d
      dz  fD ]  } ||      r| j                   ||      d|d       n| j                  t        ||       | j                   ||      d|d       |j                  d      }| j                   ||      d|d        t        d      t        d      ft        d      t        d      ft        d      t        d      ft        d      t        d      ft        d
      dz  dd t        d      z   t        d
      dz  ft        d      t        d      ft        d	      t        d      ft        d	      t        d      ft        d      t        d	      ff	D ])  \  }} ||      rI ||      rA| j                   ||      d|d|d       | j                   ||      d|d|d       n0| j                  t        ||       | j                  t        ||       | j                   ||      d|d|d       | j                   ||      d|d|d       |j                  d      }|j                  d      }| j                   ||      d|d|d       | j                   ||      d|d|d       , y)ztest consteq()r   )consteqstr_consteqrd   r   r$   Nc                 6    u xs t         xs t        |       S r&   )r   r   )rN   r   r   s    r   consteq_supports_stringz6MiscTest.test_consteq.<locals>.consteq_supports_string  s     {*IcI]55IJr   r[   rc   u   ÿ¢ rT   zvalue r   latin-1ri   abcabczbaabcabzabcabcabzre   abcdefdefabcqwertyuiopasdfghjklzxcvbnmzvalues  )	r   r   r   rl   	TypeErrorr
   r   encoder   )r   r   rN   lrr   r   s        @@r   test_consteqz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( 	KE
 'u-u 5e7MN!!)WeUCOOKu5e7MNLL+EOOGE51%3IJ	K" 33(88-88-88-&'*CR01V9<()",. 2af%5ak*5ak*/0!E(; 	ECAa 'q).Ea.H  A1Q0GH  A1Q0GH!!)Wa;!!)Wa;[A.1Q0GH[A.1Q0GH#A#AWQ]q,CDWQ]q,CD7	Er   c                 
   | j                          ddlm} | j                  t        |d       | j                  t        |d       | j                  t        |d       | j                   |t        d            t        d             | j                   |t        d            t        d             | j                   |t        d            t        d	             | j                   |t        d
            t        d             | j                   |t        d            t        d             | j                   |t        d            t        d             | j                  t        |t        d             | j                  t        |t        d             | j                  t        |t        d             | j                  t        |t        d             | j                  t        |t        d             | j                  t        |t        d             | j                  t        |t        d             | j                  t        |t        d             | j                  t        |t        d             | j                  t        |t        d             | j                  t        |t        d             | j                  t        |t        d             | j                  t        |t        d             | j                  t        |t        d             | j                  t        |t        d             | j                   |t        d            t        d             | j                   |t        d            t        d             | j                   |t        d            t        d             | j                  t        |t        d              | j                  t        |t        d!             | j                   |t        d"            t        d"             | j                   |t        d#            t        d$             | j                   |t        d%            t        d%             | j                   |t        d&            t        d&             | j                   |t        d'            t        d(             | j                   |t        d)            t        d$             | j                  t        |t        d*             | j                  t        |t        d             | j                  t        |t        d             | j                   |t        d            t        d             y)+z"test saslprep() unicode normalizerr   )saslprepNr$   r   rd      ­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   ªr[   u   Ⅸ)require_stringprepr   r   rl   r   r0   r
   rm   )r   sps     r   test_saslprepz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                 <   ddl m} | j                   |d      g        | j                   |d      g        | j                   |d      dg       | j                   |d      dg       | j                   |d      ddg       | j                   |d	      ddg       y )
Nr   )
splitcommard   ,r[   z a , z a , br\   z a, b, )r   r   r0   )r   r   s     r   test_splitcommazMiscTest.test_splitcomma  s    ,B,C"-C3%0G,se4H-Sz:I.c
;r   c           
      ~   ddl m} dD ]  }|j                  d       t        |      }t	        |dz         D ]  }d|d|d} |||      }|j                  d       | j                  t        |      ||	       | j                  t        |      t        ||      |	       | j                  t        |      t        |d
z   |dz         |	       | j                  ||dt        |       |	         dD ]I  }t        |      }t	        |dz         D ]+  }d|d|d} |||      }| j                  ||d| |	       - K dD ]L  }t        |      }t	        |dz         D ].  }d|d|d} |||      }| j                  ||d|dz    |	       0 N d}| j                   ||d      d       | j                   ||d      d       | j                   ||d      d       | j                   ||d      d       | j                   ||d
      d       | j                   ||d      d       | j                   ||d      d       | j                   ||d      d       | j                   ||d      d       | j                   ||d      d       | j                   ||d      d       | j                   ||d      d       y)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      MrA   s   MNs   MNs   MNrf            s   MNO	   rT      )
r   r   rp   rV   rangeassertLessEqualassertGreaterEqualmin
assertLessr0   )r   r   sourceendidxprefixr   s          r   test_utf8_truncatezMiscTest.test_utf8_truncate  s    	0
 !	KF MM'"f+CS2X K393?&vs3 g& $$S[#6$B ''FSc]'OFSq#'-BO   V)=6 J!K#!	KN
 	CF f+CS2X C393?&vs3  6 BC	C"
 	EF f+CS2X E393?&vs3  QV DE	E" 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   N)r*   r+   r,   rB   r   r6   rF   rQ   r]   r   rs   rz   r   r   r   r   r   r   r   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                   4    e Zd ZdZd Zd Zd Zd Zd Zd Z	y)		CodecTestz,tests bytes/unicode helpers in passlib.utilsc                 n   t         r%ddl}| j                  t        |j                         n$ddl}| j                  t        |j
                         | j                  dt               | j                  dt               t         r"| j                  dj                  d      d       y| j                  dd       y)z*test b() helper, bytes and native str typer   Nr       r       ÿ)	r	   builtinsr2   rX   __builtin__strrW   r0   rp   )r   r   s     r   
test_byteszCodecTest.test_bytes:  s}    MM%0*MM%.c5)k51[//	:JG[*5r   c                 p   ddl m} | j                   |t        d            d       | j                   |t        d            d       | j                   |t        d      d      d       | j	                  t
        |t        d      d	       | j                   |d      d       | j                   |d      d       | j                   |d      d       | j                   |dd      d       | j                   |ddd
d      d       | j	                  t        |dd       | j	                  t        |d       y)ztest to_bytes()r   )r   rc   rj   r       ÿr   r   rk   rd   r   N)r   r   r0   r
   rl   rm   AssertionErrorr   )r   r   s     r   test_to_bytesz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   ddl m} | j                   |t        d            t        d             | j                   |t        d            t        d             | j                   |t        d      d      t        d             | j                   |d      t        d             | j                   |d      t        d             | j                   |dd	      t        d             | j	                  t
        |d       | j	                  t        |dd
       | j	                  t        |d
       y
)ztest to_unicode()r   )
to_unicoderc   r   rk   rj   r  r   r   N)r   r  r0   r
   rl   rm   r  r   )r   r  s     r   test_to_unicodez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                    ddl m} | j                   |t        d      d      d       | j                   |dd      d       t        r;| j                   |t        d      d      d       | j                  t        |dd       n:| j                  t        |t        d      d       | j                   |dd      d       | j                   |t        d      d	      d       | j                   |d
d	      d       | j                   |t        d      d      t        rdnd       | j                   |dd      t        rdnd       | j                  t        |dd       y)ztest to_native_str()r   )to_native_strrc   rk   rj   r   s   àu   Ã r      r   N)	r   r  r0   r
   r	   rl   UnicodeDecodeErrorUnicodeEncodeErrorr   )r   r  s     r   test_to_native_strzCodecTest.test_to_native_str}  s2   / 	qx95Avw7? ]1V9g>G0-%' 0-6%'];@*M 	qy)<fEw	:FC 	qy':#&J	8{G<#&J	8 	)]D'Br   c                     ddl m} | j                   |d             | j                   |t        d                   | j	                   |d             | j	                   |t        d                   y)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_safezCodecTest.test_is_ascii_safe  sW    /n56a&678~67q'789r   c                    ddl m} | j                   |dd             | j                   |dd             | j                   |dd             | j                   |dd             | j                   |dd             | j                   |dd             | j                   |dd             | j                   |dd             y)	ztest is_same_codec()r   )is_same_codecNrk   ASCIIr   utf8UTF_8)r   r  r   r   )r   r  s     r   test_is_same_codecz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   N)
r*   r+   r,   rB   r   r  r  r  r  r  r<   r   r   r   r   7  s$    66 5:7,C>::r   r   c                   .    e Zd ZdZd Zd Zd Zd Zd Zy)Base64EngineTestz%test standalone parts of Base64Enginec                     ddl m}m} | j                  t        |d       | j                  t
        ||d d        | j                  t
        ||d d dz          y )Nr   )Base64Engine
AB64_CHARSr$   re   A)passlib.utils.binaryr  r  rl   r   rm   )r   r  r  s      r   test_constructorz!Base64EngineTest.test_constructor  sR    A 	)\15 	*lJsOD 	*lJsOc4IJr   c                 <   ddl m} | j                   |d      t        d             | j                   |t	        d            t        d             | j                  t        |t	        d             | j                  t        |d       | j                  t        |d       | j                  t        |t	        d	             | j                   |d
      t        d             | j                  t        |d       | j                   |d      t        d             | j                   |d      t        d             | j                   |d      t        d             | j                   |d      t        d             | j                   |d      t        d             y)zab64_decode()r   )ab64_decoderj   69b7rc      abÿ   ab   ab!ab!   abcd69b71d   abcde   abcdef69b71d79   abcdeQ   abcdefg
69b71d79f8   ab+/69bfbf   ab./N)r  r  r0   r   r
   rl   rm   r   )r   r  s     r   test_ab64_decodez!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                    ddl m} | j                   |t        d            d       | j	                  t
        rt        nt        |t        d      j                  d             | j                   |t        d            d       | j                   |t        d            d	       | j                   |t        d
            d       | j                   |t        d            d       y)zab64_encode()r   )ab64_encoder  rj   r   r%  r$  r(  r)  r+  r*  r-  r.  N)	r  r1  r0   r   rl   r	   r   r  rp   )r   r1  s     r   test_ab64_encodez!Base64EngineTest.test_ab64_encode      4 	RZ0&9 	s)0B%r&z'8'8'C	E 	R\2G<R
^4i@R%56
C 	R\2G<r   c                    ddl m} | j                   |d      t        d             | j                   |t	        d            t        d             | j                  t        |t	        d             | j                  t        |d       | j                  t        |d       | j                  t        |t	        d	             | j                   |d
      t        d             | j                  t        |d       | j                   |d      t        d             | j                   |d      t        d             | j                   |d      t        d             y)zb64s_decode()r   )b64s_decoderj   r  rc   r   r!  r"  r#  r$  r%  r&  r'  r(  r)  r*  r+  N)r  r5  r0   r   r
   rl   rm   r   )r   r5  s     r   test_b64s_decodez!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                    ddl m} | j                   |t        d            d       | j	                  t
        rt        nt        |t        d      j                  d             | j                   |t        d            d       | j                   |t        d            d	       | j                   |t        d
            d       | j                   |t        d            d       y)zb64s_encode()r   )b64s_encoder  rj   r   r%  r$  r(  r)  r+  r*  r-  r,  N)	r  r8  r0   r   rl   r	   r   r  rp   )r   r8  s     r   test_b64s_encodez!Base64EngineTest.test_b64s_encode  r3  r   N)	r*   r+   r,   rB   r  r/  r2  r6  r9  r<   r   r   r  r    s     /
K=8=&D.=r   r  c                       e 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dg dfddg dfgZddg dfgZd Zd Zd Zd Zd Zd Zd Zd Zd Zy)_Base64Testz+common tests for all Base64Engine instancesN   ?c                 ,     t         fd|D              S )z!generate byte string from offsetsc              3   V   K   | ]   }j                   j                  ||d z     " yw)r$   N)enginebytemap).0or   s     r   	<genexpr>z _Base64Test.m.<locals>.<genexpr>5  s&     F$++--a!4Fs   &))r   )r   offsetss   ` r   mz_Base64Test.m3  s    FgFFFr   c                     | j                   }|j                  }| j                  D ]$  \  }} ||      }| j                  ||d|d       & y)z,test encode_bytes() against reference inputszencode r   N)r?  encode_bytesencoded_datar0   )r   r?  r   rawencodedr   s         r   test_encode_bytesz_Base64Test.test_encode_bytes:  sO    $$ -- 	ELCC[FVWc.CD	Er   c                     | j                   }|j                  }| j                  t        |t	        d             | j                  t        |d       y)z"test encode_bytes() with bad inputr   N)r?  rG  rl   r   r
   )r   r?  r   s      r   test_encode_bytes_badz!_Base64Test.test_encode_bytes_badB  s>    $$)VQvY7)VT2r   c                     | j                   }|j                  }| j                  D ]$  \  }} ||      }| j                  ||d|d       & y)z,test decode_bytes() against reference inputszdecode r   N)r?  decode_bytesrH  r0   )r   r?  rp   rI  rJ  r   s         r   test_decode_bytesz_Base64Test.test_decode_bytesL  sO    $$ -- 	ELCG_FVS'*CD	Er   c                    t         rd nt        }| j                  }| j                  }|j                  }d}| j                   | |dd            |       t        dd      D ]_  }|j                  r|dk  r|n |d|dz
  z        }n|dk  r |d|dz   z        n|}| j                   | |dd|z              |d|z         a | j                   | |ddd            |dz         t        dd      D ]c  }|j                  r|dk  r|n |d|dz
  z        }n|dk  r |d|dz   z        n|}| j                   | |ddd|z              ||z   d	|z         e y
)z(test decode_bytes() ignores padding bitsc                     t        | g      S r&   )rX   )vs    r   r   z7_Base64Test.test_decode_bytes_padding.<locals>.<lambda>V  s    %* r   r   r   r   r   r$   rA   z
%d/4 bits:z
%d/2 bits:N)r	   chrr?  rE  rO  r0   r   big)r   bchrr?  rE  rp   BNULLicorrects           r   test_decode_bytes_paddingz%_Base64Test.test_decode_bytes_paddingT  s`   ),$#FF$$ 	!A/q 	KAzz#$q5%d1qs8n,-E$q1Q3x.uVAa1I.9IJ	K 	!Aa)573q 	/Azz#$q5%d1qs8n,-E$q1Q3x.uVAa!Q$K0%'/)A-/	/r   c                    | j                   }|j                  }| j                  t        ||j                  dd        | j                  | j                  |j                  v       | j                  t        || j                  dz         | j                  t        ||j                  dd        | j                  t        |d       y)z"test decode_bytes() with bad inputNrf   r   )	r?  rO  rl   rm   r@  r   bad_byter   charmap)r   r?  rp   s      r   test_decode_bytes_badz!_Base64Test.test_decode_bytes_bado  s    $$ 	*ffnnRa.@A 	V^^;<*fdmmAo> 	)VV^^BQ-?@)VT2r   c                    | j                   }ddlm}m} | j	                         }d}t        d      D ],  }|j                  |rdndd      }|sd}d|z  d	z   d
z  } |||      }	|j                  |	      }
| j                  t        |
      |       |j                  |
      }| j                  ||	       |dz  dk(  r||j                  g d      z  }d
|z  dz  } |||j                  |      }
|j                  |
      }	| j                  t        |	      |d|z         |j                  |	      }|dz  r| j                  |dd |
dd        | j                  ||
       / y)z2test encode_bytes/decode_bytes against random datar   )rS   ra   Fi  r$      Tr   rA   r   )re   r$   rA   zencoded %d:Nre   )r?  r   rS   ra   rU   r   r   rG  r0   rV   rO  choicer@  )r   r?  rS   ra   r   saw_zerorX  sizeenc_sizerI  rJ  r   raw_sizes                r   
test_codecz_Base64Test.test_codec  sg   :nn '	2A ;;Hq!R8D$q1}HsD)C ))#.GS\84 ((1FVS) ax1}

8,,vqyH fnnd;G %%g.CSXx1EF ((-Fax  gcrl;  1O'	2r   c                    ddl m} | j                         }| j                  }| j                  j                  }d}|dk  r.|j                  dd      } |||j                  |      j                  d      }|dz  dk(  r| j                  t        ||       [|j                  |j                  |            }|j                         dk  r"|j                  d      }|j                  d      }||k(  r/ ||      \  }	}
| j                  |	       | j                  |
|       nC| j!                  |d	z  d        ||      \  }	}
| j#                  |	       | j                  |
|       |dz  }|dk  r-y
y
)ztest repair_unused()r   r`   i,     rk   r   r$   g      ?r   N)r   ra   rU   r?  check_repair_unusedr   r]  r   rl   rm   rG  rO  r   rp   r   r0   rY   r   )r   ra   r   r?  ri  rX  rc  cdatardataokr   s              r   test_repair_unusedz_Base64Test.test_repair_unused  sP    	-nn"kk==#g;;q$DsFNND9@@IEax1}!!*.A5I''(;(;E(BCEzz|b W-W-~07
F  $  / ##D1Ha007
F#  /FA- #gr   s   3"s   "3)rA   r$   r   s   "3)r$   rA   r   s   ")r   r   r$   c                     | j                   }| j                  | j                  z   D ];  \  }}}|j                  ||      }|j	                  |      }| j                  ||       = | j                  t        |j                  t        d      g        y)ztest encode_transposed_bytes()r[   N)	r?  
transposedtransposed_dupsencode_transposed_bytesrO  r0   rl   r   r
   )r   r?  r   inputrD  tmpouts          r   test_encode_transposed_bytesz(_Base64Test.test_encode_transposed_bytes  s    &*oo8L8L&L 	*"FE700@C%%c*CS&)	*
 	)V%C%CQsVRPr   c                     | j                   }| j                  D ];  \  }}}|j                  |      }|j                  ||      }| j	                  ||       = y)ztest decode_transposed_bytes()N)r?  ro  rG  decode_transposed_bytesr0   )r   r?  rr  r   rD  rs  rt  s          r   test_decode_transposed_bytesz(_Base64Test.test_decode_transposed_bytes  sW    &*oo 	*"E67%%e,C00g>CS&)	*r   c                     | j                   }| j                  D ]9  \  }}}|j                  |      }| j                  t        |j
                  ||       ; y)z8test decode_transposed_bytes() fails if map is a one-wayN)r?  rp  rG  rl   r   rw  )r   r?  rr  _rD  rs  s         r    test_decode_transposed_bytes_badz,_Base64Test.test_decode_transposed_bytes_bad  sT    !%!5!5 	'E1g%%e,Ci)G)G%'	'r   c                    | j                         }| j                  }t        |d|z        }t        |d|z        }| dz  }||z   dz  }d|z  }	|D ]5  \  }
} ||
      }| j                  |t               | j                  ||       7 | j                  t        |d       | j                  t        ||	       |D ]"  \  }
}| j                   ||      |
d|d       $ | j                  }| j                  t        | |d      |dz   z         | j                  t        | |d      |dz
  z         | j                  t        || j                  |z         | j                  t        ||j                  d          | j                  t        |d	       dd
lm} t        d      D ]  }|j                  d|	dz
        }
 ||
      }| j                  t!        |      |       | j                   ||      |
        |||j"                  |      } ||      }
| j%                  |
dd|z         | j'                  |
|	d|z          ||
      }|r| j                  |d	d |d	d        | j                  ||        y	)z5helper to check encode_intXX & decode_intXX functionszencode_int%szdecode_int%sr   r$   re   zencoded r   r   Nr`   d   zdecode %r out of bounds:r   )rU   r?  r   rW   rX   r0   rl   rm   rE  r\  r   r]  r   ra   r   r   rV   r@  r   r   )r   bitsencoded_pairsr   r?  r   rp   padcharsupperrN   rJ  r   rE  ra   rX  s                   r   check_int_pairz_Base64Test.check_int_pair  s[   nn$!67$!67eaicA4 , 	.NE7E]F!!&%0VW-	. 	*fb1*fe4 , 	QNE7VG_eg5OP	QFF*fadE!Gn=*fadE!Gn=*fdmmE.AB)VV^^A->?)VT2 	- 	2AKK57+EUmGS\51VG_e4 !fnne<G7OE##E1.H7.RSOOE5*Dw*NOE]F  gcrl;  1!	2r   c                 |    | j                   }| j                  }| j                  dd |d      fd |d      fg       y )Nr   r   ?   )r?  rE  r  r   r?  rE  s      r   	test_int6z_Base64Test.test_int6/  s9    FFAAaD	B";78r   c           
          | j                   }| j                  }| j                  dd |dd      fd|j                  r	 |dd      n |dd      fd |dd      fg       y )Nr`  r   r  i  r?  rE  r  rU  r  s      r   
test_int12z_Base64Test.test_int124  s`    FFBAaFFJJ1RAbG4ua2h6G I 	Jr   c                     | j                   }| j                  }| j                  dd |dddd      fd|j                  r |dddd      n
 |dddd      fd |dddd      fg       y )N   r   r  i r  r  s      r   
test_int24z_Base64Test.test_int24:  so    FFBAa!AJ

1Qq"Qq<qBr"~& ( 	)r   c                 B   | j                   }| j                  }| j                  dd |ddddddddddd      fd|j                  r |ddddddddddd      n |ddddddddddd      fd|j                  r |ddddddddddd      n |ddddddddddd      fg       y )N@   r   r  r   <   l    rw   r  r  s      r   
test_int64z_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                    | j                   s| j                  d      | j                  }| j                   D ]T  \  }}}t        |d|z        }t        |d|z        }| j	                   ||      |       | j	                   ||      |       V y)z(test against reference integer encodingsznone defined for classzencode_int%dzdecode_int%dN)encoded_ints	skipTestsr?  r   r0   )r   r?  datarN   r~  r   rp   s          r   test_encoded_intsz_Base64Test.test_encoded_intsL  s      ..!9::!%!2!2 	2D%V^d%:;FV^d%:;FVE]D1VD\51		2r   )r*   r+   r,   rB   r?  rH  r  r\  rE  rK  rM  rP  rZ  r^  rf  rm  ro  rp  ru  rx  r{  r  r  r  r  r  r  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                   (    e Zd ZdZeZdZg dZddgZy)H64_Testz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`  N)	r*   r+   r,   rB   r  r?  descriptionPrefixrH  r  r<   r   r   r  r  _  s&    "F#L  	Lr   r  c                   (    e Zd ZdZeZdZg dZddgZy)H64Big_Testz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`  N)	r*   r+   r,   rB   r  r?  r  rH  r  r<   r   r   r  r  x  s&    %F&L  	Lr   r  )rB   
__future__r   	functoolsr   rx   r   r   r   passlib.utils.compatr   r   r	   r
   r   r   r   passlib.tests.utilsr   r   r   r   r   r  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   