a
    zeL                     @   s   d Z 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re  dS )zTest the binascii C module.    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 )N9   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 s0    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.i7  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
   adbcc-)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 )z?Test that hexlify and b2a_hex are binary versions of bytes.hex.ru   ascii.   :N)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 s0    Y  |  t" | tdd W d    n1 s0    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dZeed ddddd ZdS )	ChecksumBigBufferTestCasez<bpo-38256 - check that inputs >=4 GiB are handled correctly.   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   __doc__r   r   r   r   r   r   r    r     s   r   __main__)r   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&      )	