B
    u9aC                 @   s   d Z ddlZddlZddlZddlZddddddd	gZd
ddddddg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edkre  dS )zTest the binascii C module.    N
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	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d Zdd Zd d! Z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.7/test_binascii.pysetUp   s    zBinASCIITest.setUpc             C   s(   |  ttjt |  ttjt d S )N)
assertTrue
issubclassbinasciiError	ExceptionZ
Incomplete)r   r   r   r   test_exceptions   s    zBinASCIITest.test_exceptionsc             C   s:   x4t D ],}| ttt|d | ttt| qW d S )N__call__)all_functionsr   hasattrgetattrr   assertRaises	TypeError)r   namer   r   r   test_functions!   s    
zBinASCIITest.test_functionsc             C   s  d}| j d | }xtttD ]\}}tt|}tt|}y || |}|| |}W n6 tk
r }	 z| d	|||	 W d d }	~	X Y nX |dkr|\}}
| 
||d	|||| | |t | |t | t|d qW | t|dt | t|t d S )N-   z{}/{} conversion raises {!r}r   z{}/{} 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 }xFt dt| j|D ]0}| | j|||  }t|}|| qW t }x(|D ] }| |}t|}||7 }q\W | 	|| j d S )N9   r   )
rangelenr   r   r   r   appendr2   r	   r0   )r   
MAX_BASE64linesibr;   r<   liner   r   r   test_base64valid>   s    



zBinASCIITest.test_base64validc       
         s   d}g }xFt dt| j|D ]0}| | j|||  }t|}|| qW t  d}x"t dD ]}||krd | qdW  fdd}t }x.t	||D ] }	| |	}t
|}||7 }qW | || j | t
|  d d S )Nr@   r   s@   abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789+/r   c                s    }t | t | }t }xX| rr|rrt | t | |krP| d | dd   }} n|d |dd   }}|| qW || |  S )Nr      )rB   	bytearrayrC   )rH   ZnoiseZratior<   c)fillersr   r   addnoise\   s    
z1BinASCIITest.test_base64invalid.<locals>.addnoise    )rA   rB   r   r   r   r   r   rC   rK   mapr	   r0   )
r   rD   rE   rF   rG   r;   ZvalidrN   r<   rH   r   )rM   r   test_base64invalidM   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          	      s.     tjd t |  W d Q R X d S )Nz(?i)Incorrect padding)assertRaisesRegexr   r   r	   r   )r   )r   r   r   assertIncorrectPaddingt   s    z>BinASCIITest.test_base64errors.<locals>.assertIncorrectPaddings   abs   ab=s   abcs   abcdefs   abcdef=s   abcdefgs   a=b=s   a
b=c          	      sL   t tdd| }dt| } tj| t |  W d Q R X d S )Ns   [^A-Za-z0-9/+]rO   z((?i)Invalid.+number of data characters.+)	rB   resubstrrR   r   r   r	   r   )r   Zn_data_charsZexpected_errmsg_re)r   r   r   assertInvalidLength   s    z;BinASCIITest.test_base64errors.<locals>.assertInvalidLength   as   a=s   a==s   a===s   aaaaas]  aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaas
   A	B
C ??DEr   )r   rS   rW   r   )r   r   test_base64errorsr   s"    zBinASCIITest.test_base64errorsc       	   	   C   s  d}xdD ]}g }xJt dt| j|D ]4}| | j|||  }tj||d}|| q&W t }x(|D ] }| |}t	|}||7 }qjW | 
|| j q
W | 
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 Q R X d S )Nr)   )TFr   )backtick   s                                     s                                       s    s   !!!!s.   !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!   xs   !>   
rO   s    
Ts   `
s    Cats
   $ $-A=   
s
   $`$-A=```
)rA   rB   r   r   r   r   r   rC   r2   r   r0   r%   r   r&   )	r   ZMAX_UUrZ   rE   rF   rG   r;   r<   rH   r   r   r   test_uu   s>    



zBinASCIITest.test_uuc             C   s   t | dd}t | d|}| |d | tt j | tt j| d x*dD ]"}| t | d||d@  qZW d S )Ns   Test the CRC-32 ofr   s    this string.i7  rO   )r   rJ   i4  iE# ixV4i  )r   r   r   r0   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 )Ns   Test the CRC-32 ofs    this string.ij])r   r   r   r0   r%   r&   )r   ra   r   r   r   
test_crc32   s    zBinASCIITest.test_crc32c             C   sL   t | j}t | |}t | |\}}t |}| || j d S )N)	r   r   r   r   r   r   r   r0   r   )r   Zrler;   rG   r>   r<   r   r   r   test_hqx   s
    
zBinASCIITest.test_hqxc             C   s4   d}t |}| |d t |}| || d S )Ns  aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccs
   adbcc-)r   r   r0   r   )r   r   Z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 | || | t | || d S )Ns    {s   worldi   s   helloi   0r`      q)	r   r   r   r
   r0   r%   r   r   r   )r   stur   r   r   test_hex   s    zBinASCIITest.test_hexc             C   s  | j }tj}tj}|ddd y|dUddi W n tk
rD   Y nX | 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 )VNrO   F)r   headerrJ   z/binascii.a2b_qp(**{1:1}) didn't raise TypeError   =s   = s   ==s   =
ABs   ABs   =
ABs   =ABs   =AB
CDs   CDs   =AB   s   =abs   =AXs   =XAr`   s   =A   _T)rk       Zbar)Zfoos   =00
=00s    
 s   

s   =FF
=FF
=FFsR   000000000000000000000000000000000000000000000000000000000000000000000000000

s[   000000000000000000000000000000000000000000000000000000000000000000000000000=
=FF
=FF
=FFr[   s   =7Fs   =3Ds   =5Fs   x ys   x_ys   x s   x=20)rk   	quotetabss   x=20ys   x	ys   =20   	s   =09s    xs   	x    s   =00s    
s   =00
)rp   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)rO   )r   r   r   r   r&   r.   r0   r%   )r   r   r   r   r   r   r   test_qp   s    
zBinASCIITest.test_qpc             C   s   |  d}xptD ]h}|dkr*t|d qtt|}y|| W q tk
rv } z| d||| W d d }~X Y qX qW d S )NrO   r   r   z{}({!r}) raises {!r})r   r"   r   r   r$   r   r.   r/   )r   emptyfuncfr=   r   r   r   test_empty_stringT  s    


zBinASCIITest.test_empty_stringc             C   s   xlt tt t dhB D ]R}y| ttt|d W q tk
rh } z| d	|| W d d }~X Y qX qW | ttj
dd d S )Nr   Ztestz{}("test") raises {!r}r   )setr"   r,   r%   r&   r$   r   r   r.   r/   r   )r   rw   r=   r   r   r   test_unicode_b2ab  s    (zBinASCIITest.test_unicode_b2ac             C   s  d}| j d | }xtttD ]\}}|dkr0qtt|}tt|}y,|| |}||}|d}||}	W n6 tk
r }
 z| 	d
|||
 W d d }
~
X Y nX |dkr|	\}	}|\}}| |	|d
|||	| | |	| | |	t | t|d qW d S )Nr)   r   asciiz{}/{} conversion raises {!r}r   z{}/{} conversion: {!r} != {!r}   )r   r+   r,   r-   r$   r   r   decoder   r.   r/   r0   r1   r2   r%   
ValueError)r   r5   r6   r7   r8   r9   r:   r;   Z
binary_resr<   r=   r>   r   r   r   test_unicode_a2bl  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   r0   r   r   )r   rG   r   r   r   test_b2a_base64_newline  s    
z$BinASCIITest.test_b2a_base64_newlineN)__name__
__module____qualname__r2   r   r   rA   r   r    r(   r?   rI   rQ   rY   r_   rb   rc   rd   re   rj   ru   ry   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   rg   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   rK   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   __main__)__doc__Zunittestr   r   rT   r-   r,   r"   ZTestCaser   r   r   r   r   mainr   r   r   r   <module>   s$   

   