o
    _6d&                     @   s   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	 d	eZG d
d deZG dd deZG dd deZddlmZmZ G dd deZG dd deZdS )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                   @   s   e Zd ZdZdd Zdd Zdd Zdd	 Zd
d Ze	dddd Z
dd Zdd Zdd Zdd Zdd Zdd Zdd Zdd Zd S )!MiscTestz#tests various parts of utils modulec                 C   sL   ddl m} | t|d t| | dt|v  | dt|v  dS )ztest compat's lazymoduler   )compatz,^<module 'passlib.utils.compat' from '.*?'>$Z	UnicodeIOr   N)passlib.utilsr   assertRegexreprdir
assertTrue)selfr    r   oC:\Users\jesus\OneDrive\Desktop\erpjis_fastapi\backend\jisbackend\Lib\site-packages\passlib/tests/test_utils.pytest_compat   s   
zMiscTest.test_compatc                    sL   ddl m  G  fdddt}| |jd |jd }| |j|j d S )Nr   classpropertyc                          e Zd ZdZ dd ZdS )z)MiscTest.test_classproperty.<locals>.test   c                 S   s   | j S N)xvar)clsr   r   r   xprop)   s   z/MiscTest.test_classproperty.<locals>.test.xpropN)__name__
__module____qualname__r    r"   r   r   r   r   test'   s    r&   r   r"   )	passlib.utils.decorr   objectassertEqualr"   __dict__assertIsim_func__func__)r   r&   propr   r   r   test_classproperty$   s
   
zMiscTest.test_classpropertyc                 C   sz   ddl m} |ddddd }| d|jv  | ttd	d
 | |ddd W d    d S 1 s6w   Y  d S )Nr   )deprecated_functionz1.6z1.8)
deprecatedremovedc                  W   s   | S )ztest docstringr   )argsr   r   r   	test_func5   s   z4MiscTest.test_deprecated_function.<locals>.test_funcz.. 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   r7   )r'   r0   r   __doc__ZassertWarningListdictDeprecationWarningr)   )r   r0   r4   r   r   r   test_deprecated_function1   s   


"z!MiscTest.test_deprecated_functionc                    sr   ddl m  G  fdddt}| }| |jd | |jd | |jd |j}ts7| |j|j	 d S d S )Nr   memoized_propertyc                       r   )z.MiscTest.test_memoized_property.<locals>.dummyr   c                 S   s   | j }|d | _ |S )Nr   )counter)r   valuer   r   r   r?   I   s   
z4MiscTest.test_memoized_property.<locals>.dummy.valueN)r#   r$   r%   r>   r?   r   r<   r   r   dummyF   s    r@   r   )
r'   r=   r(   r)   r?   r>   r   r+   r,   r-   )r   r@   dr.   r   r<   r   test_memoized_propertyC   s   	zMiscTest.test_memoized_propertyc                 C   sz   ddl m} t||  }| t|dd |d}|d}| |t | t|d | t|d | || dS )zgetrandbytes()r   )getrandbytes
   N)	r   rC   r   	getRandomr)   lenassertIsInstancebytesassertNotEqual)r   rC   wrapperabr   r   r   test_getrandbytesX   s   zMiscTest.test_getrandbytesi   )countc                 C   s  ddl m} t|| j|d}| |ddd | t|dd | t|dd | |ddd	 |tdd
}|tdd
}| |t	 | 
|| | tt|tdtdtdg |dd
}|dd
}| |t | 
|| | tt|dtdtdtdg dS )zgetrandstr()r   
getrandstr)seedabc rK      Zaaaaa    rL   c   abcasciiN)r   rP   r   rE   r)   assertRaises
ValueErrorr	   rG   r
   rI   sortedsetrH   decode)r   rQ   rP   rJ   xyr   r   r   test_getrandstrd   s    
&

0zMiscTest.test_getrandstrc                 C   s0   ddl m} tdd | t|dd dS )zgenerate_password()r   )generate_passwordignorez1The function.*generate_password\(\) is deprecated   N)r   rb   warningsfilterwarningsr)   rF   )r   rb   r   r   r   test_generate_password   s   zMiscTest.test_generate_passwordc                 C   sD   ddl m} ddlm} |dg}| || | ||  dS )ztest is_crypt_context()r   )is_crypt_context)CryptContextZ	des_cryptN)r   rh   Zpasslib.contextri   r   assertFalse)r   rh   ri   ccr   r   r   test_is_crypt_context   s
   
zMiscTest.test_is_crypt_contextc                 C   sb   ddl }ddlm} || }|dd}|| }|dd}| || ||| dS )ztest genseed()r   N)genseedl    d(	 )randomr   rm   RandomrandintrI   rQ   )r   rn   rm   rngrK   rL   r   r   r   test_genseed   s   zMiscTest.test_genseedc                    s&  ddl m}m}m} ddlm}m} | }|s3| |d | |ddd | |dd | 	d	|s:| 
d
dD ]}||v rD nq<|d }|| t ddrZ j jd  fdd}td}	||	}
||	|
}| |t | ||
 | |t|	t|
|
 |
dd d }| ||	||
 td}||}| |||| | |t|t|| | t|d|
 | |d|
 | |d| ddl m} |j}z8dfdd|_dD ]| |d|
d | |d|
 qd| |d|
d | |d|
 W ||_dS ||_w )ztest crypt.crypt() wrappersr   )	has_crypt
safe_crypt
test_crypt)get_supported_os_crypt_schemesget_crypt_handlerr   r&   ZaaNzaaqPiZY5xR5l.zcrypt.crypt() not availablez0crypt() present, but no supported schemes found!)Z	md5_cryptZsha256_cryptrT   
min_rounds)roundsc                    s>   t | tsJ  | }t |tr|d}t |tsJ |S )Nutf-8)
isinstancer
   hashrH   r^   secretr|   )hasherr   r   get_hash   s   


z%MiscTest.test_crypt.<locals>.get_hashxxu   testሴ c                    s    S r   r   r}   )retvalr   r   <lambda>   s    z%MiscTest.test_crypt.<locals>.<lambda>)NrS   :z:0z*0Zxxx)r   rs   rt   ru   Zpasslib.registryrv   rw   r)   rj   ZskipTestZfailgetattrusingrx   r	   rG   r
   r   rZ   r[   r   utilsZ_crypt)r   rs   rt   ru   rv   rw   	supportedschemer   s1h1resultZh1xs2h2modorigr   )r   r   r   ru      s\   

	
zMiscTest.test_cryptc                    s  ddl m m | t tdd | t tdd | t tdd | t dtd | t dd | t dd | t dtd | t dd | t dtd | t dd  fdd}td	td
tdd fD ]8}||r|  ||d|f  n| t || | ||d|f  |d}|  ||d|f  qxtd	tdftdtdftdtdftdtdftdd dd td tdd ftdtd	ftd
tdftd
tdftdtd
ff	D ]w\}}||r'||r'|  ||d||f  |  ||d||f  n| t || | t || | ||d||f  | ||d||f  |d}|d}|  ||d||f  |  ||d||f  qdS )ztest consteq()r   consteqstr_consteqrS       r   Nc                    s    u p	t p	t| S r   )r   r   )r?   r   r   r   consteq_supports_string  s   z6MiscTest.test_consteq.<locals>.consteq_supports_stringrK   rR   u   ÿ¢ rD   z	value %r:latin-1rW   ZabcabcZzbaabcZabzabcZabcabzrT   ZabcdefZdefabcZqwertyuiopasdfghjklzxcvbnmzvalues %r %r:)	r   r   r   rZ   	TypeErrorr	   r   encoderj   )r   r   r?   lrr   r   r   test_consteq   s\   




zMiscTest.test_consteqc                 C   s*  |    ddlm} | t|d | t|d | t|d | |tdtd | |tdtd | |tdtd	 | |td
td | |tdtd | |tdtd | t|td | t|td | t|td | t|td | t|td | t|td | t|td | t|td | t|td | t|td | t|td | t|td | t|td | t|td | t|td | |tdtd | |tdtd | |tdtd | t|td  | t|td! | |td"td" | |td#td$ | |td%td% | |td&td& | |td'td( | |td)td$ | t|td* | t|td | t|td | |tdtd dS )+z"test saslprep() unicode normalizerr   )saslprepNr   r   rS      ­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اzZxAzu   I­XZIXuserUSER   ªrK   u   Ⅸ)Zrequire_stringprepr   r   rZ   r   r)   r	   r[   )r   spr   r   r   test_saslprepe  sR   zMiscTest.test_saslprepc                 C   s|   ddl m} | |dg  | |dg  | |ddg | |ddg | |dddg | |d	ddg d S )
Nr   )
splitcommarS   ,rK   z a , z a , brL   z a, b, )r   r   r)   )r   r   r   r   r   test_splitcomma  s   zMiscTest.test_splitcommac                 C   sN  ddl m} dD ]Z}|d t|}t|d D ]H}d||f }|||}|d | jt|||d | jt|t|||d | jt|t|d |d	 |d | j	||d
t| |d qqdD ]&}t|}t|d D ]}d||f }|||}| j	||d
| |d qqqedD ](}t|}t|d D ]}d||f }|||}| j	||d
|d  |d qqd}| 	||dd | 	||d	d | 	||dd | 	||dd | 	||dd | 	||dd | 	||dd | 	||dd | 	||dd | 	||dd | 	||dd | 	||dd d
S )z!
        utf8_truncate()
        r   )utf8_truncate)	r      1s   123   s
      s
   s   a þþs&   abcdefghjusdfaoiu þþdsfioauweoiruerrz      zsource=%r index=%r: )msg   r   N)   s
       s
             )   s
      s
   MNOPr      Mr7   s   MNs   MNs   MNrU            s   MNO	   rD      )
r   r   r^   rF   rangeZassertLessEqualassertGreaterEqualmin
assertLessr)   )r   r   sourceendidxprefixr   r   r   r   test_utf8_truncate  st   


"
	
zMiscTest.test_utf8_truncateN)r#   r$   r%   r8   r   r/   r;   rB   rM   r   ra   rg   rl   rr   ru   r   r   r   r   r   r   r   r   r      s"    
(VfO	r   c                   @   s@   e Zd ZdZdd Zdd Zdd Zdd	 Zd
d Zdd Z	dS )	CodecTestz,tests bytes/unicode helpers in passlib.utilsc                 C   st   t rddl}| t|j nddl}| t|j | dt | dt t r2| ddd dS | dd dS )z*test b() helper, bytes and native str typer   Nr       r       ÿ)	r   builtinsr+   rH   __builtin__strrG   r)   r^   )r   r   r   r   r   
test_bytes:  s   zCodecTest.test_bytesc                 C   s   ddl m} | |tdd | |tdd | |tddd | t|tdd	 | |dd | |dd | |dd | |ddd | |ddd
dd | t|dd | t|d dS )ztest to_bytes()r   )r   rR   rX   r       ÿr   r   rY   rS   rz   N)r   r   r)   r	   rZ   r[   AssertionErrorr   )r   r   r   r   r   test_to_bytesJ  s    zCodecTest.test_to_bytesc                 C   s   ddl m} | |tdtd | |tdtd | |tddtd | |dtd | |dtd | |dd	td | t|d | t|dd
 | t|d
 d
S )ztest to_unicode()r   )
to_unicoderR   r   rY   rX   r   r   r   N)r   r   r)   r	   rZ   r[   r   r   )r   r   r   r   r   test_to_unicodeg  s   zCodecTest.test_to_unicodec                 C   s   ddl m} | |tddd | |ddd tr0| |tddd | t|dd n| t|tdd | |ddd | |tdd	d | |d
d	d | |tddtrcdnd | |ddtrpdnd | t|dd dS )ztest to_native_str()r   )to_native_strrR   rY   rX   r   s   àu   Ã r      rz   N)	r   r   r)   r	   r   rZ   UnicodeDecodeErrorUnicodeEncodeErrorr   )r   r   r   r   r   test_to_native_str}  s*   


zCodecTest.test_to_native_strc                 C   sP   ddl m} | |d | |td | |d | |td dS )ztest is_ascii_safe()r   )r   s    abcz abcs    abcu    abcN)r   r   r   r	   rj   )r   r   r   r   r   test_is_ascii_safe  s
   zCodecTest.test_is_ascii_safec                 C   s   ddl m} | |dd | |dd | |dd | |dd | |dd | |dd | |dd | |dd dS )	ztest is_same_codec()r   )is_same_codecNrY   ASCIIrz   utf8ZUTF_8)r   r   r   rj   )r   r   r   r   r   test_is_same_codec  s   zCodecTest.test_is_same_codecN)
r#   r$   r%   r8   r   r   r   r   r   r   r   r   r   r   r   7  s    r   c                   @   s8   e Zd ZdZdd Zdd Zdd Zdd	 Zd
d ZdS )Base64EngineTestz%test standalone parts of Base64Enginec                 C   sR   ddl m}m} | t|d | t||d d  | t||d d d  d S )Nr   )Base64Engine
AB64_CHARSr   rT   A)passlib.utils.binaryr   r   rZ   r   r[   )r   r   r   r   r   r   test_constructor  s   z!Base64EngineTest.test_constructorc                 C   s  ddl m} | |dtd | |tdtd | t|td | t|d | t|d | t|td	 | |d
td | t|d | |dtd | |dtd | |dtd | |dtd | |dtd dS )zab64_decode()r   )ab64_decoderX   69b7rR      abÿ   ab   ab!ab!   abcd69b71d   abcde   abcdef69b71d79   abcdeQ   abcdefg
69b71d79f8   ab+/69bfbf   ab./N)r   r   r)   r   r	   rZ   r[   r   )r   r   r   r   r   test_ab64_decode  s   z!Base64EngineTest.test_ab64_decodec                 C      ddl m} | |tdd | trtnt|tdd | |tdd | |tdd	 | |td
d | |tdd dS )zab64_encode()r   )ab64_encoder   rX   r   r   r   r   r   r   r   r   r   N)	r   r   r)   r   rZ   r   r   r   r^   )r   r   r   r   r   test_ab64_encode     z!Base64EngineTest.test_ab64_encodec                 C   s   ddl m} | |dtd | |tdtd | t|td | t|d | t|d | t|td	 | |d
td | t|d | |dtd | |dtd | |dtd dS )zb64s_decode()r   )b64s_decoderX   r   rR   r   r   r   r   r   r   r   r   r   r   r   r   N)r   r   r)   r   r	   rZ   r[   r   )r   r   r   r   r   test_b64s_decode  s   z!Base64EngineTest.test_b64s_decodec                 C   r   )zb64s_encode()r   )b64s_encoder   rX   r   r   r   r   r   r   r   r   r   N)	r   r   r)   r   rZ   r   r   r   r^   )r   r   r   r   r   test_b64s_encode  r   z!Base64EngineTest.test_b64s_encodeN)	r#   r$   r%   r8   r   r   r   r   r   r   r   r   r   r     s    r   c                   @   s   e Zd ZdZdZdZdZdZdd Zdd Z	dd	 Z
d
d Zdd Zdd Zdd Zdd Zddg dfddg dfgZddg dfgZdd Zdd Zdd  Zd!d" Zd#d$ Zd%d& Zd'd( Zd)d* Zd+d, ZdS )-_Base64Testz+common tests for all Base64Engine instancesN   ?c                    s   t  fdd|D S )z!generate byte string from offsetsc                 3   s$    | ]} j j||d   V  qdS )r   N)enginebytemap).0or   r   r   	<genexpr>5  s   " z _Base64Test.m.<locals>.<genexpr>)r   )r   offsetsr   r  r   m3  s   z_Base64Test.mc                 C   s<   | j }|j}| jD ]\}}||}| ||d|f  q	dS )z,test encode_bytes() against reference inputsz
encode %r:N)r   encode_bytesencoded_datar)   )r   r   r   rawencodedr   r   r   r   test_encode_bytes:     z_Base64Test.test_encode_bytesc                 C   s0   | j }|j}| t|td | t|d dS )z"test encode_bytes() with bad inputr   N)r   r  rZ   r   r	   )r   r   r   r   r   r   test_encode_bytes_badB  s   z!_Base64Test.test_encode_bytes_badc                 C   s<   | j }|j}| jD ]\}}||}| ||d|f  q	dS )z,test decode_bytes() against reference inputsz
decode %r:N)r   decode_bytesr  r)   )r   r   r^   r  r	  r   r   r   r   test_decode_bytesL  r  z_Base64Test.test_decode_bytesc              	   C   sB  t rdd nt}| j}| j}|j}d}| ||dd| tddD ]2}|jr7|dk r.|n|d|d > }n|dk rC|d|d > n|}| ||dd|> |d	|  q#| ||ddd|d  tddD ]5}|jr}|dk rt|n|d|d > }n|dk r|d|d > n|}| ||ddd|> || d
|  qidS )z(test decode_bytes() ignores padding bitsc                 S   s
   t | gS r   )rH   )vr   r   r   r   V  s   
 z7_Base64Test.test_decode_bytes_padding.<locals>.<lambda>r   r   r   r   r   r7   z
%d/4 bits:z
%d/2 bits:N)r   chrr   r  r  r)   r   big)r   Zbchrr   r  r^   ZBNULLiZcorrectr   r   r   test_decode_bytes_paddingT  s(   "z%_Base64Test.test_decode_bytes_paddingc                 C   st   | j }|j}| t||jdd  | | j|jv | t|| jd  | t||jdd  | t|d dS )z"test decode_bytes() with bad inputNrU   r   )	r   r  rZ   r[   r   r   bad_byter   charmap)r   r   r^   r   r   r   test_decode_bytes_bado  s   z!_Base64Test.test_decode_bytes_badc                 C   s.  | j }ddlm}m} |  }d}tdD ]}||rdndd}|s%d}d| d	 d
 }|||}	||	}
| t	|
| |
|
}| ||	 |d dkrY||g d7 }d
| d }|||j|}
|
|
}	| t	|	|d|  ||	}|d r| |dd |
dd  q| ||
 qdS )z2test encode_bytes/decode_bytes against random datar   )rC   rP   Fi  r      Tr   r7   r   )rT   r   r7   zencoded %d:NrT   )r   r   rC   rP   rE   r   rp   r  r)   rF   r  choicer   )r   r   rC   rP   rq   Zsaw_zeror  sizeZenc_sizer  r	  r   Zraw_sizer   r   r   
test_codec  s2   




z_Base64Test.test_codecc                 C   s  ddl m} |  }| j}| jj}d}|dk r|dd}|||j|d}|d@ dkr5| t	|| q|
||}| dk rM|d}|d}||krc||\}	}
| |	 | |
| n| |d	 d ||\}	}
| |	 | |
| |d7 }|dk sd
S d
S )ztest repair_unused()r   rO   i,     rY   r   r   g      ?r   N)r   rP   rE   r   check_repair_unusedrp   r  r   rZ   r[   r  r  rn   r^   rj   r)   rI   r   )r   rP   rq   r   r  r  r  cdataZrdataokr   r   r   r   test_repair_unused  s2   



z_Base64Test.test_repair_unuseds   3"s   "3)r7   r   r   s   "3)r   r7   r   s   ")r   r   r   c                 C   sZ   | j }| j| j D ]\}}}|||}||}| || q	| t|jtdg  dS )ztest encode_transposed_bytes()rK   N)	r   
transposedtransposed_dupsZencode_transposed_bytesr  r)   rZ   r   r	   )r   r   r   inputr  tmpoutr   r   r   test_encode_transposed_bytes  s   
z(_Base64Test.test_encode_transposed_bytesc                 C   s>   | j }| jD ]\}}}||}|||}| || qdS )ztest decode_transposed_bytes()N)r   r   r  decode_transposed_bytesr)   )r   r   r"  r   r  r#  r$  r   r   r   test_decode_transposed_bytes  s   
z(_Base64Test.test_decode_transposed_bytesc                 C   s8   | j }| jD ]\}}}||}| t|j|| qdS )z8test decode_transposed_bytes() fails if map is a one-wayN)r   r!  r  rZ   r   r&  )r   r   r"  _r  r#  r   r   r    test_decode_transposed_bytes_bad  s   
z,_Base64Test.test_decode_transposed_bytes_badc                 C   s  |   }| j}t|d| }t|d| }| d }|| d }d|> }	|D ]\}
}||
}| |t | || q&| t|d | t||	 |D ]\}
}| |||
d|f  qK| j}| t||d|d   | t||d|d   | t|| j	|  | t
||jd  | t
|d dd	lm} td
D ]V}|d|	d }
||
}| t|| | |||
 |||j|}||}
| |
dd|  | |
|	d|  ||
}|r| |dd |dd  q| || qdS )z5helper to check encode_intXX & decode_intXX functionszencode_int%szdecode_int%sr   r   rT   zencoded %r:r   NrO   d   zdecode %r out of bounds:r   )rE   r   r   rG   rH   r)   rZ   r[   r  r  r   r  r   rP   r   rp   rF   r   r   r   )r   bitsZencoded_pairsrq   r   r   r^   padcharsupperr?   r	  r   r  rP   r  r   r   r   check_int_pair  sH   
z_Base64Test.check_int_pairc                 C   s0   | j }| j}| dd|dfd|dfg d S )Nr   r   ?   )r   r  r/  r   r   r  r   r   r   	test_int6/  s   $z_Base64Test.test_int6c              	   C   sP   | j }| j}| dd|ddfd|jr|ddn|ddfd|ddfg d S )Nr  r   r0  i  r   r  r/  r  r1  r   r   r   
test_int124  s
   (
z_Base64Test.test_int12c                 C   s`   | 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 d S )N   r   r0  i r3  r1  r   r   r   
test_int24:  s   $
z_Base64Test.test_int24c                 C   s   | 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rJ|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 d S )N@   r   r0  r   <   l    rd   r3  r1  r   r   r   
test_int64A  s   $$$
z_Base64Test.test_int64c                 C   sh   | j s| d| j}| j D ]#\}}}t|d| }t|d| }| ||| | ||| qdS )z(test against reference integer encodingsznone defined for classzencode_int%dzdecode_int%dN)encoded_intsZ	skipTestsr   r   r)   )r   r   datar?   r+  r   r^   r   r   r   test_encoded_intsL  s   
z_Base64Test.test_encoded_ints)r#   r$   r%   r8   r   r  r:  r  r  r
  r  r  r  r  r  r  r   r!  r%  r'  r)  r/  r2  r4  r6  r9  r<  r   r   r   r   r      s8    
/(
0r   )h64h64bigc                   @   (   e Zd ZdZeZdZg dZddgZdS )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.r0  r  )   .z  r  N)	r#   r$   r%   r8   r=  r   descriptionPrefixr  r:  r   r   r   r   r@  _      r@  c                   @   r?  )H64Big_Testztest H64Big codec functionszh64big codec)	rA  )rB  s   JE)rC  s   JOc)rD  s   JOdJ)rE  s   JOdJeU)rF  s   JOdJeZI)rG  s   JOdJeZKe)rH  s   JOdJfk)rI  s   JOdJeZw)rK  r0  r  )rJ  rL  r  N)	r#   r$   r%   r8   r>  r   rM  r  r:  r   r   r   r   rO  x  rN  rO  )r8   
__future__r   	functoolsr   re   r   r   r   Zpasslib.utils.compatr   r   r   r	   r
   r   r   Zpasslib.tests.utilsr   r   r   r   r   r   r   r   r=  r>  r@  rO  r   r   r   r   <module>   s*    $    ( i  ?