o
    GXhM                     @   s   d Z ddlZddlZddlZddl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rbe  dS dS )zTest the binascii C module.    N)
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   </opt/python-3.10.19/usr/lib/python3.10/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 ]d\}}tt|}tt|}z|| |}|| |}W n tyH }	 z| d	|||	 W Y d }	~	nd }	~	ww |dkrQ|\}}
| 
||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 ]}| | j|||  }t|}|| qt }|D ]}| |}t|}||7 }q+| 	|| j d S )N9   r   )
rangelenr   r   r#   r   appendr;   r   r9   )r   
MAX_BASE64linesibrD   rE   liner   r   r   test_base64validA   s   



zBinASCIITest.test_base64validc           
         s   d}g }t dt| j|D ]}| | j|||  }t|}|| qt  d}t dD ]}||vr: | q/ fdd}t }t	||D ]}	| |	}t
|}||7 }qI| || j | t
|  d d S )NrI   r   s@   abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789+/r   c                    s    }t | t | }t }| r;|r;t | t | |kr'| d | dd  }} n|d |dd  }}|| | r;|s|| |  S )Nr      )rK   	bytearrayrL   )rQ   ZnoiseZratiorE   cZfillersr   r   addnoise_   s   
z1BinASCIITest.test_base64invalid.<locals>.addnoise    )rJ   rK   r   r   r   r#   r   rL   rT   mapr   r9   )
r   rM   rN   rO   rP   rD   ZvalidrW   rE   rQ   r   rV   r   test_base64invalidP   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                    sD     tjd t |  W d    d S 1 sw   Y  d S )Nz(?i)Incorrect padding)assertRaisesRegexr#   r$   r   r   )r   r   r   r   assertIncorrectPaddingw   s   "z>BinASCIITest.test_base64errors.<locals>.assertIncorrectPaddings   abs   ab=   abcs   abcdefs   abcdef=s   abcdefgs   a=b=s   a
b=c                    sb   t tdd| }dt| } tj| t |  W d    d S 1 s*w   Y  d S )Ns   [^A-Za-z0-9/+]rX   z((?i)Invalid.+number of data characters.+)	rK   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\   ra   r   r   r   test_base64errorsu   s"   zBinASCIITest.test_base64errorsc           	      C   s  d}dD ]E}g }t dt| j|D ]}| | j|||  }tj||d}|| qt }|D ]}| |}t	|}||7 }q1| 
|| 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    d S 1 sw   Y  d S )Nr0   )TFr   )backtick   s                                     s                                       s    s   !!!!s.   !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!   xs   !>   
rX   s    
Ts   `
s    Cats
   $ $-A=   
s
   $`$-A=```
)rJ   rK   r   r   r   r#   r
   rL   r;   r   r9   r+   r$   r,   )	r   ZMAX_UUrd   rN   rO   rP   rD   rE   rQ   r   r   r   test_uu   sD   


"zBinASCIITest.test_uuc                 C   s   t | dd}t | d|}| |d | tt j | tt j| d dD ]}| t | d||d@  q,d S )N   Test the CRC-32 ofr       this string.i7  rX   )r   rS   i4  iE# ixV4i  )r#   r   r   r9   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 )Nrj   rk   ij])r#   r   r   r9   r+   r,   rm   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   r9   r   )r   ZrlerD   rP   rG   rE   r   r   r   test_hqx   s
   
zBinASCIITest.test_hqxc                 C   s4   d}t |}| |d t |}| || d S )Ns  aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccs
   adbcc-)r#   r   r9   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   0rl      q   s   0Gs   0gs   G0s   g0)
r#   r   r   r   r9   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.rt   ascii.   :N)r9   r#   r   r   hexencoder   )r   rw   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y#   Y nw | 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 )VNrX   F)r   headerrS   z/binascii.a2b_qp(**{1:1}) didn't raise TypeError   =s   = s   ==s   =
ABs   ABs   =
ABs   =ABs   =AB
CDs   CDs   =AB   s   =abs   =AXs   =XArl   s   =A   _T)r       Zbar)Zfoos   =00
=00s    
 s   

s   =FF
=FF
=FFsR   000000000000000000000000000000000000000000000000000000000000000000000000000

s[   000000000000000000000000000000000000000000000000000000000000000000000000000=
=FF
=FF
=FFre   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)rX   )r   r#   r   r	   r,   r7   r9   r+   )r   r   r   r	   r   r   r   test_qp  s   
 zBinASCIITest.test_qpc                 C   s|   |  d}tD ]4}|dkrt|d qtt|}z|| W q ty; } z| d||| W Y d }~qd }~ww d S )NrX   r   r   z{}({!r}) raises {!r})r   r(   r#   r   r*   r%   r7   r8   )r   emptyfuncfrF   r   r   r   test_empty_stringk  s   

 zBinASCIITest.test_empty_stringc                 C   s   t tt t dhB D ])}z| ttt|d W q ty4 } z| d	|| W Y d }~qd }~ww | ttj
dd d S )Nr   testz{}("test") raises {!r}r   )setr(   r5   r+   r,   r*   r#   r%   r7   r8   r   )r   r   rF   r   r   r   test_unicode_b2az  s   zBinASCIITest.test_unicode_b2ac                 C   s  d}| j d | }tttD ]r\}}|dkrqtt|}tt|}z|| |}||}|d}||}	W n tyS }
 z| 	d
|||
 W Y d }
~
nd }
~
ww |dkr`|	\}	}|\}}| |	|d
|||	| | |	| | |	t | t|d qd S )Nr0   r   r{   r1   r   r2      )r   r4   r5   r6   r*   r#   r   decoder%   r7   r8   r9   r:   r;   r+   
ValueError)r   r>   r?   r@   rA   rB   rC   rD   Z
binary_resrE   rF   rG   r   r   r   test_unicode_a2b  s4   


 
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   r9   r#   r   )r   rP   r   r   r   test_b2a_base64_newline  s   
z$BinASCIITest.test_b2a_base64_newlinec                 C   s   |  t | tdd W d    n1 sw   Y  |  t | tdd W d    n1 s7w   Y  |  t | tdd W d    n1 sUw   Y  |  t | tdd W d    d S 1 stw   Y  d S )Nr]   s   B@*M)r]   r   s
   aaaaaaaaaas   a
)ZassertWarnsDeprecationWarningr9   r#   r   r   r   r   r   r   r   r   test_deprecated_warnings  s   "z%BinASCIITest.test_deprecated_warningsN)__name__
__module____qualname__r;   r   r   rJ   r    r&   r.   r   Zignore_warningsr   rH   rR   rZ   rc   ri   ro   rp   rq   rs   rz   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   rw   r   r   r   r     s   zArrayBinASCIITest.type2testN)r   r   r   r   r   r   r   r   r     s    r   c                   @      e Zd ZeZdS )BytearrayBinASCIITestN)r   r   r   rT   r   r   r   r   r   r         r   c                   @   r   )MemoryviewBinASCIITestN)r   r   r   
memoryviewr   r   r   r   r   r     r   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.   rS   F)sizeZmemusedry_runc                 C   s"   dt d  }| t|d d S )Ns   nyanrS   iM"B>)r   r9   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^   Ztest.supportr   r   r   r   r6   r5   r(   ZTestCaser   r   r   r   r   r   mainr   r   r   r   <module>   s(       )	