a
    äzeùL  ã                   @   sÌ   d dl Z d dlZd dlZd dlZd dlmZ d dlmZmZm	Z	m
Z
 g d¢Zg d¢Zee ddg ZG dd	„ d	e jƒZG d
d„ deƒZG dd„ deƒZG dd„ deƒZG dd„ de jƒZedkrÈe  ¡  dS )é    N)Úsupport)Ú
bigmemtestÚ_1GÚ_4GÚwarnings_helper)Ú
b2a_base64Úb2a_hexÚb2a_hqxÚb2a_qpÚb2a_uuÚhexlifyÚrlecode_hqx)Ú
a2b_base64Úa2b_hexÚa2b_hqxÚa2b_qpÚa2b_uuÚ	unhexlifyÚrledecode_hqxÚcrc32Úcrc_hqxc                   @   s  e Zd ZeZdZeeedƒƒ7 Zed7 Zdd„ Zdd„ Zdd	„ Z	e
jed
dd„ ƒZdd„ Zdd„ Zdd„ Zdd„ Ze
jed
dd„ ƒZdd„ Ze
jed
dd„ ƒZe
jed
dd„ ƒZdd„ Zdd „ Zd!d"„ Ze
jed
d#d$„ ƒZd%d&„ Ze
jed
d'd(„ ƒZd)d*„ Zd+d,„ Zd-S ).ÚBinASCIITests.   The quick brown fox jumps over the lazy dog.
é   s   
Hello world.
c                 C   s   |   | j¡| _d S ©N)Ú	type2testÚrawdataÚdata©Úself© r   ú(/usr/lib/python3.9/test/test_binascii.pyÚsetUp   s    zBinASCIITest.setUpc                 C   s(   |   ttjtƒ¡ |   ttjtƒ¡ d S r   )Ú
assertTrueÚ
issubclassÚbinasciiÚErrorÚ	ExceptionZ
Incompleter   r   r   r    Útest_exceptions   s    zBinASCIITest.test_exceptionsc                 C   s6   t D ],}|  ttt|ƒdƒ¡ |  ttt|ƒ¡ qd S )NÚ__call__)Úall_functionsr"   ÚhasattrÚgetattrr$   ÚassertRaisesÚ	TypeError)r   Únamer   r   r    Útest_functions$   s    zBinASCIITest.test_functions)Úcategoryc                 C   s  d}| j d |… }tttƒD ]È\}}tt|ƒ}tt|ƒ}z ||  |¡ƒ}||  |¡ƒ}W n8 ty }	 z |  d 	|||	¡¡ W Y d }	~	n
d }	~	0 0 |dkr¢|\}}
|  
||d 	||||¡¡ |  |t¡ |  |t¡ |  t|ƒd¡ q|  t |d¡t¡ |  t |¡t¡ d S )Né-   ú{}/{} conversion raises {!r}r	   ú{}/{} conversion: {!r} != {!r}é€   r   )r   ÚzipÚa2b_functionsÚb2a_functionsr+   r$   r   r&   ÚfailÚformatÚassertEqualÚassertIsInstanceÚbytesZ
assertLessÚmaxr   Úintr   )r   ÚMAX_ALLÚrawÚfaÚfbÚa2bÚb2aÚaÚresÚerrÚ_r   r   r    Útest_returned_value*   s(    

*ÿz BinASCIITest.test_returned_valuec                 C   sŠ   d}g }t dt| jƒ|ƒD ]0}|  | j||| … ¡}t |¡}| |¡ qtƒ }|D ] }|  |¡}t |¡}||7 }qV|  	|| j¡ d S )Né9   r   )
ÚrangeÚlenr   r   r$   r   Úappendr<   r   r:   )r   Ú
MAX_BASE64ÚlinesÚiÚbrE   rF   Úliner   r   r    Útest_base64validB   s    



zBinASCIITest.test_base64validc           
         sÞ   d}g }t dt| jƒ|ƒD ]0}|  | j||| … ¡}t |¡}| |¡ qtƒ ‰ d}t dƒD ]}||vr^ˆ  |¡ q^‡ fdd„}tƒ }t	||ƒD ] }	|  |	¡}t 
|¡}||7 }q’|  || j¡ |  t 
|  ˆ ¡¡d¡ d S )NrJ   r   s@   abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789+/r   c                    s|   ˆ }t | ƒt |ƒ }tƒ }| rp|rpt | ƒt |ƒ |krN| d | dd …  }} n|d |dd …  }}| |¡ q|| |  S )Nr   é   )rL   Ú	bytearrayrM   )rR   ZnoiseZratiorF   Úc©Zfillersr   r    Úaddnoise`   s    z1BinASCIITest.test_base64invalid.<locals>.addnoiseó    )rK   rL   r   r   r   r$   r   rM   rU   Úmapr   r:   )
r   rN   rO   rP   rQ   rE   ZvalidrX   rF   rR   r   rW   r    Útest_base64invalidQ   s&    



zBinASCIITest.test_base64invalidc                    s”   ‡ fdd„}|dƒ |dƒ |dƒ |dƒ |dƒ |dƒ |d	ƒ |d
ƒ ‡ fdd„}|dƒ |dƒ |dƒ |dƒ |dƒ |dƒ |dƒ d S )Nc                    sB   ˆ   tjd¡  t ˆ  | ¡¡ W d   ƒ n1 s40    Y  d S )Nz(?i)Incorrect padding)ÚassertRaisesRegexr$   r%   r   r   )r   r   r   r    ÚassertIncorrectPaddingx   s    z>BinASCIITest.test_base64errors.<locals>.assertIncorrectPaddings   abs   ab=ó   abcs   abcdefs   abcdef=s   abcdefgs   a=b=s   a
b=c                    s`   t t dd| ¡ƒ}dt|ƒ }ˆ  tj|¡  t ˆ  | ¡¡ W d   ƒ n1 sR0    Y  d S )Ns   [^A-Za-z0-9/+]rY   z((?i)Invalid.+number of data characters.+)	rL   ÚreÚsubÚstrr\   r$   r%   r   r   )r   Zn_data_charsZexpected_errmsg_rer   r   r    ÚassertInvalidLength†   s
    
ÿz;BinASCIITest.test_base64errors.<locals>.assertInvalidLengthó   as   a=s   a==s   a===s   aaaaas]  aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaas
   A	B
C ??DEr   )r   r]   rb   r   r   r    Útest_base64errorsv   s"    zBinASCIITest.test_base64errorsc           	      C   sÚ  d}dD ]Š}g }t dt| jƒ|ƒD ]4}|  | j||| … ¡}tj||d}| |¡ q"tƒ }|D ] }|  |¡}t 	|¡}||7 }qb|  
|| j¡ q|  
t 	d¡d¡ |  
t 	d¡d¡ |  
t 	d	¡d¡ |  tjtj	d
¡ |  tjtj	d¡ |  tjtjd¡ |  
t d¡d¡ |  
t d¡d¡ |  
tjdddd¡ |  
t 	d¡d¡ |  
t 	d¡d¡ |  
t d¡d¡ |  
tjdddd¡ |  
t 	d¡t 	d¡¡ |  t¡ t dd¡ W d   ƒ n1 sÌ0    Y  d S )Nr1   )TFr   )Úbacktickó   s                                  ó   €s                                    ó   ÿs   ÿ s   !!!!s.   !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!ó   xs   !>   
rY   s    
Ts   `
s    Cats
   $ $-A=   
s
   $`$-A=```
)rK   rL   r   r   r   r$   r   rM   r<   r   r:   r,   r%   r-   )	r   ZMAX_UUre   rO   rP   rQ   rE   rF   rR   r   r   r    Útest_uu•   sB    


ÿÿzBinASCIITest.test_uuc                 C   s€   t  |  d¡d¡}t  |  d¡|¡}|  |d¡ |  tt j¡ |  tt j|  d¡¡ dD ]"}|  t  |  d¡|¡|d@ ¡ qXd S )Nó   Test the CRC-32 ofr   ó    this string.iÒ7  rY   )r   rT   i4  iE# ixV4éÿÿÿÿiÿÿ  )r$   r   r   r:   r,   r-   ©r   Úcrcr   r   r    Útest_crc_hqxº   s    ÿzBinASCIITest.test_crc_hqxc                 C   s@   t  |  d¡¡}t  |  d¡|¡}|  |d¡ |  tt j¡ d S )Nrk   rl   ijë¦])r$   r   r   r:   r,   r-   rn   r   r   r    Ú
test_crc32Ç   s    zBinASCIITest.test_crc32c                 C   sL   t  | j¡}t  |  |¡¡}t  |  |¡¡\}}t  |¡}|  || j¡ d S r   )	r$   r   r   r	   r   r   r   r:   r   )r   ZrlerE   rQ   rH   rF   r   r   r    Útest_hqxÎ   s
    
zBinASCIITest.test_hqxc                 C   s4   d}t  |¡}|  |d¡ t  |¡}|  ||¡ d S )Ns‘  aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccs
   adbcÿc-)r$   r   r:   r   )r   r   ÚencodedZdecodedr   r   r    Útest_rleÙ   s    
ÿ
zBinASCIITest.test_rlec                 C   sþ   d}t  |  |¡¡}t  |  |¡¡}|  ||¡ |  t jt j|d d… ¡ |  t jt j|d d… d ¡ |  t jt jtddgƒ¡ |  t jt jd¡ |  t jt jd¡ |  t jt jd¡ |  t jt jd¡ |  t  |  |¡¡|¡ |  t  	|  |¡¡|¡ d S )	Nó    {s   worldi   s   helloi   0rm   ó   qéÿ   s   0Gs   0gs   G0s   g0)
r$   r   r   r   r:   r,   r%   r<   r   r   )r   ÚsÚtÚur   r   r    Útest_hexè   s    zBinASCIITest.test_hexc                 C   s‚   d}|   t |  |¡¡| ¡  d¡¡ | dd¡ d¡}|   t |  |¡dd¡|¡ | d¡ d¡}|   t |  |¡d¡|¡ d S )Nru   ÚasciiÚ.é   ú:)r:   r$   r   r   ÚhexÚencoder   )r   rx   Z	expected8Z	expected1r   r   r    Útest_hex_separatorú   s    "zBinASCIITest.test_hex_separatorc                 C   sŒ  | j }tj}tj}|ddd z|dUi ddi¤Ž W n tyF   Y n0 |  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 d… ƒd¡ |  ||dƒƒd¡ |  ||dƒddd¡ | jt|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d)¡ |  ||d&ƒddd*d+¡ |  ||d,ƒddd,¡ |  ||dƒƒd-¡ |  ||d.ƒƒd/¡ |  ||d0ƒƒd0¡ |  ||d1ƒƒd1¡ |  ||d0ƒd d… ƒd-¡ |  ||d1ƒd d… ƒd/¡ |  ||d2ƒƒd3¡ |  ||d4ƒƒd5¡ |  ||d4ƒdd6d5¡ |  ||d7ƒƒd7¡ |  ||d7ƒdd6d8¡ |  ||d7ƒdd9d7¡ |  ||d:ƒƒd;¡ |  ||d:ƒdd6d;¡ |  ||d:ƒdd9d<¡ |  ||d=ƒƒd=¡ |  ||d=ƒdd6d>¡ |  ||d=ƒdd9d?¡ |  ||d@ƒƒdA¡ |  ||d@ƒdd6dA¡ |  ||d@ƒdd9dB¡ |  ||dCƒd d… ƒdD¡ |  ||dEƒd d… ƒdF¡ |  ||dCƒd d… dd6dG¡ |  ||dEƒd d… dd6dH¡ |  ||dCƒd d… dd9dI¡ |  ||dEƒd d… dd9dJ¡ |  ||dKƒƒdL¡ |  ||dMƒƒdN¡ |  ||dOƒƒdP¡ |  ||dQƒƒdR¡ |  ||dSƒƒdS¡ |  ||dTƒd d… ƒdL¡ d S )VNrY   F)r   ÚheaderrT   z/binascii.a2b_qp(**{1:1}) didn't raise TypeErroró   =s   = s   ==s   =
ABs   ABs   =
ABs   =ABs   =AB
CDs   CDs   =ABó   «s   =abs   =AXs   =XArm   s   =Aó   _T)rƒ   ó    Zbar)Zfoos   =00
=00s    
 s   ÿ
ÿ
ÿs   =FF
=FF
=FFsR   000000000000000000000000000000000000000000000000000000000000000000000000000ÿ
ÿ
ÿs[   000000000000000000000000000000000000000000000000000000000000000000000000000=
=FF
=FF
=FFrf   s   =7Fs   =3Ds   =5Fs   x ys   x_ys   x s   x=20)rƒ   Ú	quotetabss   x=20ys   x	ys   =20ó   	s   =09s    xs   	xó    s   =00s    
s   =00
)rˆ   s   x y	zs	   x=20y=09z)Úistexts   x 
y	
s
   x=20
y=09
s
   x =0Ay	=0As   x y	s
   x=20y=09s
   x =0Dy	=0Ds   x 
y	
s   x=20
y=09
s   x =0D=0Ay	=0D=0As   x 
s   x s   x	
s   x	s   x=20s   x=09s   x =0Ds   x	=0Dó   .s   =2Es   .
s   =2E
s   .s   =2Es   . s   =2E=00s   a.
s   .a)rY   )r   r$   r   r
   r-   r8   r:   r,   )r   r   r   r
   r   r   r    Útest_qp  sÐ    
ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿzBinASCIITest.test_qpc                 C   s~   |   d¡}tD ]j}|dkr(t |d¡ qtt|ƒ}z||ƒ W q tyv } z |  d |||¡¡ W Y d }~qd }~0 0 qd S )NrY   r   r   z{}({!r}) raises {!r})r   r)   r$   r   r+   r&   r8   r9   )r   ÚemptyÚfuncÚfrG   r   r   r    Útest_empty_stringl  s    

zBinASCIITest.test_empty_stringc                 C   s‚   t tƒt tƒ dhB D ]T}z|  ttt|ƒd¡ W q tyh } z|  d 	||¡¡ W Y d }~qd }~0 0 q|  ttj
dd¡ d S )Nr   Útestz{}("test") raises {!r}r   )Úsetr)   r6   r,   r-   r+   r$   r&   r8   r9   r   )r   r   rG   r   r   r    Útest_unicode_b2a{  s    *zBinASCIITest.test_unicode_b2ac                 C   s  d}| j d |… }tttƒD ]ä\}}|dkr.qtt|ƒ}tt|ƒ}z,||  |¡ƒ}||ƒ}| d¡}||ƒ}	W n8 ty¦ }
 z |  	d 
|||
¡¡ W Y d }
~
n
d }
~
0 0 |dkrÀ|	\}	}|\}}|  |	|d 
|||	|¡¡ |  |	|¡ |  |	t¡ |  t|d¡ qd S )Nr1   r   r|   r2   r	   r3   õ   Â€)r   r5   r6   r7   r+   r$   r   Údecoder&   r8   r9   r:   r;   r<   r,   Ú
ValueError)r   r?   r@   rA   rB   rC   rD   rE   Z
binary_resrF   rG   rH   r   r   r    Útest_unicode_a2b…  s.    


*ÿzBinASCIITest.test_unicode_a2bc                 C   sL   |   d¡}|  t |¡d¡ |  tj|ddd¡ |  tj|ddd¡ d S )Ns   hellos	   aGVsbG8=
T)ÚnewlineFs   aGVsbG8=)r   r:   r$   r   )r   rQ   r   r   r    Útest_b2a_base64_newline¢  s    
ÿÿÿz$BinASCIITest.test_b2a_base64_newlinec                 C   sô   |   t¡" |  t d¡d¡ W d   ƒ n1 s20    Y  |   t¡" |  t d¡d¡ W d   ƒ n1 sn0    Y  |   t¡" |  t d¡d¡ W d   ƒ n1 sª0    Y  |   t¡" |  t d¡d¡ W d   ƒ n1 sæ0    Y  d S )Nr^   s   B@*M)r^   r   s
   aaaaaaaaaas   a
)ZassertWarnsÚDeprecationWarningr:   r$   r	   r   r   r   r   r   r   r    Útest_deprecated_warnings¬  s    000z%BinASCIITest.test_deprecated_warningsN)Ú__name__Ú
__module__Ú__qualname__r<   r   r   rK   r!   r'   r/   r   Zignore_warningsr›   rI   rS   r[   rd   rj   rp   rq   rr   rt   r{   r‚   r   r‘   r”   r˜   rš   rœ   r   r   r   r    r      s<   

%%






f





r   c                   @   s   e Zd Zdd„ ZdS )ÚArrayBinASCIITestc                 C   s   t   dt|ƒ¡S )NÚB)ÚarrayÚlist)r   rx   r   r   r    r   º  s    zArrayBinASCIITest.type2testN)r   rž   rŸ   r   r   r   r   r    r    ¹  s   r    c                   @   s   e Zd ZeZdS )ÚBytearrayBinASCIITestN)r   rž   rŸ   rU   r   r   r   r   r    r¤   ¾  s   r¤   c                   @   s   e Zd ZeZdS )ÚMemoryviewBinASCIITestN)r   rž   rŸ   Ú
memoryviewr   r   r   r   r    r¥   Â  s   r¥   c                   @   s&   e Zd Zeed ddddd„ ƒZdS )ÚChecksumBigBufferTestCaseé   rT   F)ÚsizeZmemuseÚdry_runc                 C   s"   dt d  }|  t |¡d¡ d S )Ns   nyanrT   iM"B>)r   r:   r$   r   )r   r©   r   r   r   r    Útest_big_bufferÈ  s    z)ChecksumBigBufferTestCase.test_big_bufferN)r   rž   rŸ   r   r   r«   r   r   r   r    r§   Å  s   r§   Ú__main__)Zunittestr$   r¢   r_   r’   r   Ztest.supportr   r   r   r   r7   r6   r)   ZTestCaser   r    r¤   r¥   r§   r   Úmainr   r   r   r    Ú<module>   s$      )	