a
    zew                     @   s   d dl Z d dlmZ d dlZd dlZd dlZd dlmZ d dlmZ G dd de j	Z
G dd de j	ZG d	d
 d
e j	Zedkre   dS )    N)support)array)script_helperc                   @   s4   e Zd Zdd Zdd Zdd Zdd Zd	d
 ZdS )LegacyBase64TestCasec                 C   sZ   |  t|d |  t|g  tddd}|  t|| tdd}|  t|| d S )N s   1234B)   r   I)assertRaises	TypeError
memoryviewcast)selffmultidimensionalint_data r   &/usr/lib/python3.9/test/test_base64.pycheck_type_errors   s    z&LegacyBase64TestCase.check_type_errorsc                 C   s   | j }|tdd |tdd |tdd |tdd |td	d	 |td
d |ttdd |ttdd |ttddd | tj d S )N   www.python.org   d3d3LnB5dGhvbi5vcmc=
   a   YQ==
   ab   YWI=
   abc   YWJj
    R   abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789!@#0^&*();:<>,. []{}r   YWJjZGVmZ2hpamtsbW5vcHFyc3R1dnd4eXpBQkNERUZHSElKS0xNTk9QUVJTVFVWV1hZWjAxMjM0
NTY3ODkhQCMwXiYqKCk7Ojw+LC4gW117fQ==
r   )assertEqualbase64Zencodebytes	bytearrayr   r   r   r   eqr   r   r   test_encodebytes   s    
z%LegacyBase64TestCase.test_encodebytesc                 C   s   | j }|tdd |tdd |tdd |tdd |td	d
 |tdd |ttdd |ttdd |ttddd | tj d S )Nr   r   r   r   r   r   r   r   r   r   r   r   )r    r!   Zdecodebytesr"   r   r   r   r#   r   r   r   test_decodebytes(   s    
z%LegacyBase64TestCase.test_decodebytesc                 C   s   | j }ddlm}m} |d}| }t|| || d | ttj|d|  | ttj|d|  | ttj|d|  d S )Nr   BytesIOStringIOr   r   abcr   )	r    ior(   r)   r!   encodegetvaluer
   r   )r   r$   r(   r)   infpoutfpr   r   r   test_encode;   s    z LegacyBase64TestCase.test_encodec                 C   s   ddl m}m} |d}| }t|| | | d | ttj	|d|  | ttj	|d|  | ttj	|d|  d S )Nr   r'      d3d3LnB5dGhvbi5vcmc=r   zYWJj
r   )
r+   r(   r)   r!   decoder    r-   r
   r   r,   )r   r(   r)   r.   r/   r   r   r   test_decodeL   s    z LegacyBase64TestCase.test_decodeN)__name__
__module____qualname__r   r%   r&   r0   r3   r   r   r   r   r   
   s
   r   c                   @   s   e 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 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/d0 Zd1d2 Zd3S )4BaseXYTestCasec                 C   s    |  t|d |  t|g  d S )Nr   r
   r   r   r   r   r   r   check_encode_type_errors\   s    z'BaseXYTestCase.check_encode_type_errorsc                 C   s   |  t|g  d S Nr8   r9   r   r   r   check_decode_type_errors`   s    z'BaseXYTestCase.check_decode_type_errorsc                 C   sl   | j }t|}|||| ||| ||t|| ||td|| | tj| | tj| d S )Nr   )r    r"   r   r   check_nonbyte_element_formatr!   	b64encodecheck_multidimensional)r   r   
bytes_dataZexpectedr$   br   r   r   check_other_typesc   s    
z BaseXYTestCase.check_other_typesc                 C   sT   t |d rdnd}|| }t |d df}t|d|}| |||| d S )Nr       r   r   lenr   r   r    )r   r   datapaddingr@   shaper   r   r   r   r?   o   s
    z%BaseXYTestCase.check_multidimensionalc                 C   sB   ddt | d  }|| }t|d}| |||| d S )NrC      r	   rD   )r   r   rF   rG   r@   r   r   r   r   r=   v   s    z+BaseXYTestCase.check_nonbyte_element_formatc                 C   s  | j }|tdd |tdd |tdd |tdd |td	d
 |tdd |tdd |tjdddd |tjdtddd |tjdtddd |tjdtdddd | tjdd | tj | jt	tjddd |t
dd |t
dd |t
dd |t
d	d
 |t
dd |t
dd | tj
dd | tj
 |tdd | tjdd | tj d S )Nr   r1   rC      AA==r      YQ==r      YWI=r      YWJjr   r   sp   YWJjZGVmZ2hpamtsbW5vcHFyc3R1dnd4eXpBQkNERUZHSElKS0xNTk9QUVJTVFVWV1hZWjAxMjM0NTY3ODkhQCMwXiYqKCk7Ojw+LC4gW117fQ==   Vo   *$altchars   01a*b$cdr      abcds   YWJjZA==z*$   01a-b_cd)r    r!   r>   r"   r   r   rB   r:   r
   r   Zstandard_b64encodeZurlsafe_b64encoder#   r   r   r   test_b64encode}   sP    

zBaseXYTestCase.test_b64encodec           
      C   s  | j }dddddddd}| D ].\}}|t|| |t|d	| q"| tjd
d | tj ddi}| D ]p\\}}}|d	}|d	}|tj||d| |tj||d| |tj||d| |tj||d| q~| D ].\}}|t|| |t|d	| q| tjd
d | tj ddd}	|	 D ]0\}}|t|| |t|d	| qV| tjdd | tj d S )Nr   rC   r   r   r   r   r   )r1   rJ   rK   rL   rM   sq   YWJjZGVmZ2hpamtsbW5vcHFyc3R1dnd4eXpBQkNERUZHSElKS0xNTk9QUVJTVFVWV1hZWjAxMjM0
NTY3ODkhQCMwXiYqKCk7Ojw+LC4gW117fQ==r   asciirM   )rR   rO   rN   rP   )rT   r   rT   )	r    itemsr!   	b64decoder2   rB   r<   standard_b64decodeurlsafe_b64decode)
r   r$   testsrF   resZtests_altcharsrQ   data_strZaltchars_strZtests_urlsafer   r   r   test_b64decode   sJ    


zBaseXYTestCase.test_b64decodec                 C   s(   |  tjtjd |  tjtjd d S )Nr   r*   )r
   binasciiErrorr!   rX   r   r   r   r   test_b64decode_padding_error   s    z+BaseXYTestCase.test_b64decode_padding_errorc              
   C   s(  d}t jt jt jf}|D ]\}}|D ]X}| j||d6 | ||| | ||d| W d    q$1 sr0    Y  q$| tj	 t j|dd W d    n1 s0    Y  | tj	$ t j|ddd W d    q1 s0    Y  qd}| t dd| | t d	| d S )
N)
)s   %3d==   )s   $3d==rc   )s   [==r   )s   YW]3=s   am)s   3{d==rc   )s   3d}==rc   )s   @@r   )   !r   )r   r   )s	   YWJj
YWI=s   abcab)bstrfuncrV   T)validates   s   ++[[//]]s   []s   ++--//__)
r!   rX   rY   rZ   subTestr    r2   r
   r_   r`   )r   r[   Zfuncsre   r\   rf   r   r   r   test_b64decode_invalid_chars   s"    6,4z+BaseXYTestCase.test_b64decode_invalid_charsc                 C   s   | j }|tdd |tdd |tdd |tdd |tdd	 |td
d |tdd | tjd
d | tj d S )Nr   rC      AA======r      ME======r      MFRA====r      MFRGG===rS      MFRGGZA=   abcde   MFRGGZDF)r    r!   Z	b32encoderB   r:   r#   r   r   r   test_b32encode  s    zBaseXYTestCase.test_b32encodec                 C   sr   | j }dddddddd}| D ].\}}|t|| |t|d	| q"| tjd
d | tj d S )Nr   rC   r   r   r   rS   ro   )r   rj   rk   rl   rm   rn   rp   rV   rm   )r    rW   r!   	b32decoder2   rB   r<   r   r$   r[   rF   r\   r   r   r   test_b32decode  s    zBaseXYTestCase.test_b32decodec           	      C   sN  | j }dddddddddddd}| D ]2\}}|t|d| |t|d	d| q*| tjtjd
 | tjtjd |tdd |tdd ddd}| D ]\\}}}|d	}|d	}|tj||d| |tj||d| |tj||d| |tj||d| | tjtj| | tjtj| qd S )Nr   r   r   r   rS   ro   )r   rk   rl   rm   rn   rp      me======s   mfra====s   mfrgg===s   mfrggza=s   mfrggzdfTrV   ru   zme======s   MLO23456s   bݭZMLO23456s   b))   M1023456   L)rv      I)map01)r    rW   r!   rr   r2   r
   r_   r`   )	r   r$   r[   rF   r\   Z	map_testsry   r]   Z	map01_strr   r   r   test_b32decode_casefold)  s@    

z&BaseXYTestCase.test_b32decode_casefoldc              
   C   s
  g d}g d}t ddD ]B}|r0|d|  |D ]&}t|| dkr4||d|   q4q|D ]}| j|d | tj t| W d    n1 s0    Y  | tj  t|	d W d    n1 s0    Y  W d    qb1 s0    Y  qbd S )	N)r   s   ABCDEF==s   ==ABCDEF)   Ms   MEs   MFRAs   MFRGGs   MFRGGZArp   r         =   )rF   rV   )
rangeappendrE   rh   r
   r_   r`   r!   rr   r2   )r   r[   prefixesiprefixrF   r   r   r   test_b32decode_errorR  s    (z#BaseXYTestCase.test_b32decode_errorc                 C   sF   | j }|tdd |tdd | tjdd | tj d S )N   
   0102ABCDEFrC      00)r    r!   Z	b16encoderB   r:   r#   r   r   r   test_b16encodeb  s    
zBaseXYTestCase.test_b16encodec                 C   s  | j }|tdd |tdd |tdd |tdd | tjtjd | tjtjd |tdd	d |tdd	d | tjdd | tj |ttdd	d |tt	dd	d |tt
d
dd	d | tjtjd | tjtjd d S )Nr   r   Z
0102ABCDEFr   rC   Z00s
   0102abcdefZ
0102abcdefTr   Z0102AGZ010)r    r!   	b16decoder
   r_   r`   rB   r<   r"   r   r   r#   r   r   r   test_b16decodek  s0    
zBaseXYTestCase.test_b16decodec                 C   s\  | j }ddddttdddddd	d
dddddddddddddddi}| D ]N\}}|t||| |tj|dd|| |tj|ddd| d | qN| tjdd | ttjd |tjdd dd!d" |tjd#d dd!d$ |tjdd dd!d% |tjd&ddd'd( |tjd)ddd'd* |tjd+ddd'd, |tjd-ddd'd. d S )/Nr   r      GB\6`E-ZP=Df.1GEb>   s?  !!*-'"9eu7#RLhG$k3[W&.oNg'GVB"(`=52*$$(B+<_pR,UFcb-n-Vr/1iJ-0JP==1c70M3&s#]4?Ykm5X@_(6q'R884cEH9MJ8X:f1+h<)lt#=BSg3>[:ZC?t!MSA7]@cBPD3sCi+'.E,fo>FEMbNG^4U^I!pHnJ:W<)KS>/9Ll%"IN/`jYOHG]iPa.Q$R$jD4S=Q7DTV8*TUnsrdW2ZetXKAY/Yd(L?['d?O\@K2_]Y2%o^qmn*`5Ta:aN;TJbg"GZd*^:jeCE.%f\,!5gtgiEi8N\UjQ5OekiqBum-X60nF?)@o_%qPq"ad`r;HTr   g   @:E_WAS,RgBkhF"D/O92EH6,BF`qtRH$VbC6UX@47n?3D92&&T:Jand;cHat='/U/0JP==1c70M3&r-I,;<FN.OZ`-3]oSW/g+A(H[P   no padding..   DJpY:@:Wn_DJ(RS   zero compression       H=_,8+Cf>,E,oN2F(oQ1z   zero compression      H=_,8+Cf>,E,oN2F(oQ1!!!!   Boundary:       6>q!aA79M(3WK-[!!   Space compr:       ;fH/TAKYK$D/aMV+<VdL      rr      s8N      s8W*      s8W-!FadobeT   <~   ~>r      )Zwrapcolr   s   GB\6`E-
ZP=Df.1
GEb>s       www.python.orgs   zGB\6`E
-ZP=Df.
1GEb>s   <~GB\6`
E-ZP=Df
.1GEb>
~>           Z
foldspacesr      yy             y+<Vd            y+<U           y+9)	r    bytesr   rW   r!   	a85encoderB   r
   r   rs   r   r   r   test_a85encode  sJ     
zBaseXYTestCase.test_a85encodec                 C   s|   | j }ddddttdddddd	d
dddddddddddddddi}| D ]\}}|t|| qN| tjdd d S )Nr   r      cXxL#aCvlSZ*DGca%Tr   ?  009C61O)~M2nh-c3=Iws5D^j+6crX17#SKH9337XAR!_nBqb&%C@Cr{EG;fCFflSSG&MFiI5|2yJUu=?KtV!7L`6nNNJ&adOifNtP*GA-R8>}2SXo+ITwPvYU}0ioWMyV&XlZI|Y;A6DaB*^Tbai%jczJqze0_d@fPsR8goTEOh>41ejE#<ukdcy;l$Dm3n3<ZJoSmMZprN9pq@|{(sHv)}tgWuEu(7hUw6(UkxVgH!yuH4^z`?@9#Kp$P$jQpf%+1cv(9zP<)YaD4*xB0K+}+;a;Njxq<mKk)=;`X~?CtLF@bU8V^!4`l`1$(#{Qdpr   g   VPa!sWoBn+X=-b1ZEkOHadLBXb#`}nd3r%YLqtVJM@UIZOH55pPf$@(Q&d$}S6EqEFflSSG&MFiI5{CeBQRbjDkv#CIy^osE+AW7dwlr      Zf_uPVPs@!Zf7nor      dS!BNAY*TBaB^jHb7^mG00000r      dS!BNAY*TBaB^jHb7^mG0000r      LT`0$WMOi7IsgCw00r      Q*dEpWgug3ZE$irARr(hr      {{r      |Njr      |Ns9r      |NsC0)r    r   r   rW   r!   	b85encoderB   rs   r   r   r   test_b85encode  s*    
zBaseXYTestCase.test_b85encodec                 C   sH  | j }ddttddddddd	d
dddd}| D ]\}}|t||| |tj|dd|| |tj|ddd|| |tjd| d dd|| |tj|d dd|| |tjd|d dd|| q6|tjddddd |tjddddd |tjddddd |tjddddd | tjdd d S ) Nr   r   r   r   r   r   r   r   r   r   r   r   r   )r   r   sJ  ! ! * -'"
		9eu
7#  RLhG$k3[W&.oNg'GVB"(`=52*$$(B+<_pR,UFcb-n-Vr/1iJ-0JP==1c70M3&s#]4?Ykm5X@_(6q'R884cEH9MJ8X:f1+h<)lt#=BSg3>[:ZC?t!MSA7]@cBPD3sCi+'.E,fo>FEMbNG^4U^I!pHnJ:W<)KS>/9Ll%"IN/`jYOHG]iPa.Q$R$jD4S=Q7DTV8*TUnsrdW2ZetXKAY/Yd(L?['d?O\@K2_]Y2%o^qmn*`5Ta:aN;TJbg"GZd*^:jeCE.%f\,!5gtgiEi8N\UjQ5OekiqBum-X60nF?)@o_%qPq"ad`r;HTr   r   r   r   r   r   r   r   r   r   Fr   rV   r   r   Tz<~%s~>r   r   r   r   r   r   r   r   r   r   )r    r   r   rW   r!   	a85decoder2   rB   rs   r   r   r   test_a85decode  s>    

zBaseXYTestCase.test_a85decodec                 C   sz   | j }ddttddddddd	d
dddd}| D ].\}}|t|| |t|d| q6| tjdd d S )Nr   r   r   r   r   r   r   r   r   r   r   r   r   )r   r   r   r   r   r   r   r   r   r   r   r   r   rV   r   )r    r   r   rW   r!   	b85decoder2   rB   rs   r   r   r   test_b85decode  s*    

zBaseXYTestCase.test_b85decodec                 C   s   | j }|tjdddd |tjdddd |tjdddd |tjd	ddd
 |tjdddd |tdd |tdd |tdd |td
d	 |tdd d S )N   xTZpads   GQ7^D   xxs   G^'2g   xxxs   G^+H5   xxxxs   G^+IX   xxxxxs
   G^+IXGQ7^D   x      xx     xxx    xxxxx   )r    r!   r   r   r#   r   r   r   test_a85_padding*  s    zBaseXYTestCase.test_a85_paddingc                 C   s   | j }|tjdddd |tjdddd |tjdddd |tjd	ddd
 |tjdddd |tdd |tdd |tdd |td
d	 |tdd d S )Nr   Tr   s   cmMzZr   s   cz6H+r   s   czAdKr   s   czAetr   s
   czAetcmMzZr   r   r   r   )r    r!   r   r   r#   r   r   r   test_b85_padding9  s    zBaseXYTestCase.test_b85_paddingc              	   C   s  t tdt tddB t d }|D ]}| jtt|gd$ tdt|g  W d    n1 sh0    Y  | jtt|gd( tjdt|g dd W d    n1 s0    Y  | jtt|gd, tjd	t|g d
 dd W d    q&1 s0    Y  q&| jttjddd | jttjddd | ttjd | jttjddd tjddd | jttjddd | jttjddd | jttjdddd | jttjddd | jttjddd | jttjddd | jttjddd | jttjddd d S )N    v      s    	
msgs   !!!!Fr   s   <~!!!!r   Ts	   malformeds   <~still malformeds   <~~>s   abcxs   abcdeys   a b
cr   )r   Zignorechars   ss   s8s   s8Ws   s8W-s   s8W-")setr   r
   
ValueErrorr   r!   r   r   Zillegalcr   r   r   test_a85decode_errorsH  sF    "26>






z$BaseXYTestCase.test_a85decode_errorsc              	   C   s   t tdt d t tdd }|D ]L}| jtt|gd$ tdt|g  W d    q&1 sh0    Y  q&| ttjd | ttjd | ttjd	 | ttjd
 | ttjd d S )N!   s	   "',./:[\]   r   r   s   0000   |s   |Ns   |Nss   |NsCs   |NsC1)listr   r
   r   r   r!   r   r   r   r   r   test_b85decode_errorsk  s    
4z$BaseXYTestCase.test_b85decode_errorsc                 C   s<   t jt jt jt jt jt jt jf}|D ]}| t	|d q$d S )Nu   with non-ascii Ë)
r!   rX   rY   rZ   rr   r   r   r   r
   r   )r   Zdecode_funcsr   r   r   r   test_decode_nonascii_stry  s    z'BaseXYTestCase.test_decode_nonascii_strc                 C   s   |  ttjt d S r;   )Z
assertTrue
issubclassr_   r`   r   ra   r   r   r   test_ErrorHeritage  s    z!BaseXYTestCase.test_ErrorHeritageN)r4   r5   r6   r:   r<   rB   r?   r=   rU   r^   rb   ri   rq   rt   rz   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r7   X   s2   28 )	2"-##r7   c                   @   s<   e Zd Zdd Zdd Zdd Zdd Zd	d
 Zdd ZdS )TestMainc                 C   s   t jtjrt tj d S r;   )ospathexistsr   TESTFNunlinkra   r   r   r   tearDown  s    zTestMain.tearDownc                 G   s   t jddg|R  jS )N-mr!   )r   Zassert_python_okout)r   argsr   r   r   
get_output  s    zTestMain.get_outputc                 C   s   |  d}| | d d S )Nz-t)   b'Aladdin:open sesame's!   b'QWxhZGRpbjpvcGVuIHNlc2FtZQ==\n'r   )r   ZassertSequenceEqual
splitlines)r   outputr   r   r   test_encode_decode  s    
zTestMain.test_encode_decodec                 C   sX   t tjd}|d W d    n1 s,0    Y  | dtj}| | d d S )Nwb   ab
-e   Yf9iCg==openr   r   writer   r    rstripr   fpr   r   r   r   test_encode_file  s    (zTestMain.test_encode_filec                 C   sZ   t ddd}|d\}}W d    n1 s20    Y  | | d | | d S )Nr   r!   r   r   r   )r   Zspawn_pythoncommunicater    r   ZassertIsNone)r   procr   errr   r   r   test_encode_from_stdin  s    ,zTestMain.test_encode_from_stdinc                 C   sX   t tjd}|d W d    n1 s,0    Y  | dtj}| | d d S )Nr   r   z-ds   abr   r   r   r   r   r3     s    (zTestMain.test_decodeN)	r4   r5   r6   r   r   r   r   r   r3   r   r   r   r   r     s   r   __main__)Zunittesttestr   r!   r_   r   r   Ztest.supportr   ZTestCaser   r7   r   r4   mainr   r   r   r   <module>   s   N    4"