B
    u9ax                 @   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               @   sD   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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.7/test_base64.pycheck_type_errors   s    z&LegacyBase64TestCase.check_type_errorsc          	   C   s$   |  t td W d Q R X d S )Ns   www.python.org)assertWarnsDeprecationWarningbase64Zencodestring)r   r   r   r   test_encodestring_warns   s    z,LegacyBase64TestCase.test_encodestring_warnsc          	   C   s$   |  t td W d Q R X d S )Ns   d3d3LnB5dGhvbi5vcmc=
)r   r   r   Zdecodestring)r   r   r   r   test_decodestring_warns   s    z,LegacyBase64TestCase.test_decodestring_warnsc             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 )Ns   www.python.orgs   d3d3LnB5dGhvbi5vcmc=
   as   YQ==
s   abs   YWI=
s   abcs   YWJj
    sR   abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789!@#0^&*();:<>,. []{}sr   YWJjZGVmZ2hpamtsbW5vcHFyc3R1dnd4eXpBQkNERUZHSElKS0xNTk9QUVJTVFVWV1hZWjAxMjM0
NTY3ODkhQCMwXiYqKCk7Ojw+LC4gW117fQ==
r   )assertEqualr   Z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 )Ns   d3d3LnB5dGhvbi5vcmc=
s   www.python.orgs   YQ==
r   s   YWI=
s   abs   YWJj
s   abcsr   YWJjZGVmZ2hpamtsbW5vcHFyc3R1dnd4eXpBQkNERUZHSElKS0xNTk9QUVJTVFVWV1hZWjAxMjM0
NTY3ODkhQCMwXiYqKCk7Ojw+LC4gW117fQ==
sR   abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789!@#0^&*();:<>,. []{}r   r   )r   r   Zdecodebytesr   r   r   r   )r   r   r   r   r   test_decodebytes0   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StringIOsR   abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789!@#0^&*();:<>,. []{}sr   YWJjZGVmZ2hpamtsbW5vcHFyc3R1dnd4eXpBQkNERUZHSElKS0xNTk9QUVJTVFVWV1hZWjAxMjM0
NTY3ODkhQCMwXiYqKCk7Ojw+LC4gW117fQ==
abcs   abc)	r   ior!   r"   r   encodegetvaluer
   r   )r   r   r!   r"   infpoutfpr   r   r   test_encodeC   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!   r"   s   d3d3LnB5dGhvbi5vcmc=s   www.python.orgzYWJj
s   YWJj
)
r$   r!   r"   r   decoder   r&   r
   r   r%   )r   r!   r"   r'   r(   r   r   r   test_decodeT   s    z LegacyBase64TestCase.test_decodeN)
__name__
__module____qualname__r   r   r   r   r    r)   r+   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_errorsd   s    z'BaseXYTestCase.check_encode_type_errorsc             C   s   |  t|g  d S )N)r
   r   )r   r   r   r   r   check_decode_type_errorsh   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_typesk   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paddingr5   shaper   r   r   r   r4   w   s
    z%BaseXYTestCase.check_multidimensionalc             C   sB   ddt | d  }|| }t|d}| |||| d S )Nr8      r	   )r9   r   r   r   )r   r   r:   r;   r5   r   r   r   r   r2   ~   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 )Ns   www.python.orgs   d3d3LnB5dGhvbi5vcmc=r8   s   AA==r   s   YQ==s   abs   YWI=s   abcs   YWJjr   sR   abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789!@#0^&*();:<>,. []{}sp   YWJjZGVmZ2hpamtsbW5vcHFyc3R1dnd4eXpBQkNERUZHSElKS0xNTk9QUVJTVFVWV1hZWjAxMjM0NTY3ODkhQCMwXiYqKCk7Ojw+LC4gW117fQ==s   Vos   *$)altcharss   01a*b$cdr   s   abcds   YWJjZA==z*$s   01a-b_cd)r   r   r3   r   r   r   r7   r0   r
   r   Zstandard_b64encodeZurlsafe_b64encode)r   r   r   r   r   test_b64encode   sB    

zBaseXYTestCase.test_b64encodec       
      C   s  | j }dddddddd}x:| D ].\}}|t|| |t|d	| q$W | tjd
d | tj ddi}x|| D ]p\\}}}|d	}|d	}|tj||d| |tj||d| |tj||d| |tj||d| qW x<| D ]0\}}|t|| |t|d	| qW | tjd
d | tj ddd}	x<|	 D ]0\}}|t|| |t|d	| qfW | tjdd | tj d S )Ns   www.python.orgr8   r   s   abs   abcsR   abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789!@#0^&*();:<>,. []{}r   )s   d3d3LnB5dGhvbi5vcmc=s   AA==s   YQ==s   YWI=s   YWJjsq   YWJjZGVmZ2hpamtsbW5vcHFyc3R1dnd4eXpBQkNERUZHSElKS0xNTk9QUVJTVFVWV1hZWjAxMjM0
NTY3ODkhQCMwXiYqKCk7Ojw+LC4gW117fQ==r   asciis   YWJj)s   01a*b$cds   *$s   Vo)r>   )s   01a-b_cdr   s   01a-b_cd)	r   itemsr   	b64decoder*   r7   r1   standard_b64decodeurlsafe_b64decode)
r   r   testsr:   resZtests_altcharsr>   data_strZaltchars_strZtests_urlsafer   r   r   test_b64decode   sD    


zBaseXYTestCase.test_b64decodec             C   s(   |  tjtjd |  tjtjd d S )Ns   abcr#   )r
   binasciiErrorr   rB   )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}x|D ]\}}xL|D ]D}| j||d, | ||| | ||d| W d Q R X q(W | tj	 t j|dd W d Q R X | tj	 t j|ddd W d Q R X qW d}| t dd| | t d	| d S )
N)	)s   %3d==   )s   $3d==rL   )s   [==r   )s   YW]3=s   am)s   3{d==rL   )s   3d}==rL   )s   @@r   )   !r   )s	   YWJj
YWI=s   abcab)bstrfuncr@   T)Zvalidates   s   ++[[//]]s   []s   ++--//__)
r   rB   rC   rD   subTestr   r*   r
   rI   rJ   )r   rE   ZfuncsrN   rF   rO   r   r   r   test_b64decode_invalid_chars   s     

$"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   r8   s   AA======r   s   ME======s   abs   MFRA====s   abcs   MFRGG===s   abcds   MFRGGZA=s   abcdes   MFRGGZDF)r   r   Z	b32encoder7   r0   )r   r   r   r   r   test_b32encode  s    zBaseXYTestCase.test_b32encodec             C   sv   | j }dddddddd}x:| D ].\}}|t|| |t|d	| q$W | tjd
d | tj d S )Nr   r8   r   s   abs   abcs   abcds   abcde)r   s   AA======s   ME======s   MFRA====s   MFRGG===s   MFRGGZA=s   MFRGGZDFr@   s   MFRGG===)r   rA   r   	b32decoder*   r7   r1   )r   r   rE   r:   rF   r   r   r   test_b32decode  s    zBaseXYTestCase.test_b32decodec       	      C   sV  | j }dddddddddddd}x>| D ]2\}}|t|d| |t|d	d| q,W | tjtjd
 | tjtjd |tdd |tdd ddd}x| D ]\\}}}|d	}|d	}|tj||d| |tj||d| |tj||d| |tj||d| | tjtj| | tjtj| qW d S )Nr   r   s   abs   abcs   abcds   abcde)r   s   ME======s   MFRA====s   MFRGG===s   MFRGGZA=s   MFRGGZDFs   me======s   mfra====s   mfrgg===s   mfrggza=s   mfrggzdfTr@   s   me======zme======s   MLO23456s   bݭZMLO23456s   b))s   M1023456   L)s   M1023456   I)map01)r   rA   r   rS   r*   r
   rI   rJ   )	r   r   rE   r:   rF   Z	map_testsrW   rG   Z	map01_strr   r   r   test_b32decode_casefold0  s<    

z&BaseXYTestCase.test_b32decode_casefoldc             C   s   dddg}dddddd	g}xTt d
dD ]F}|r<|d|  x.|D ]&}t|| dkrB||d|   qBW q&W xn|D ]f}| j|dP | tj t| W d Q R X | tj t|	d W d Q R X W d Q R X qvW d S )Ns   abcs   ABCDEF==s   ==ABCDEF   Ms   MEs   MFRAs   MFRGGs   MFRGGZAs   MFRGGZDFr         =   )r:   r@   )
rangeappendr9   rP   r
   rI   rJ   r   rS   r*   )r   rE   prefixesiprefixr:   r   r   r   test_b32decode_errorY  s    


z#BaseXYTestCase.test_b32decode_errorc             C   sF   | j }|tdd |tdd | tjdd | tj d S )Ns   s
   0102ABCDEFr8   s   00)r   r   Z	b16encoder7   r0   )r   r   r   r   r   test_b16encodei  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 )Ns
   0102ABCDEFs   Z
0102ABCDEFs   00r8   Z00s
   0102abcdefZ
0102abcdefTr   Z0102AGZ010)r   r   	b16decoder
   rI   rJ   r7   r1   r   r   r   )r   r   r   r   r   test_b16decoder  s(    
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}xZ| D ]N\}}|t||| |tj|dd|| |tj|ddd| d | qPW | 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   s   www.python.orgs   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;HTsR   abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789!@#0^&*();:<>,. []{}sg   @: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[Ps   no padding..s   DJpY:@:Wn_DJ(RSs   zero compression    s   H=_,8+Cf>,E,oN2F(oQ1zs   zero compression   s   H=_,8+Cf>,E,oN2F(oQ1!!!!s   Boundary:    s   6>q!aA79M(3WK-[!!s   Space compr:    s   ;fH/TAKYK$D/aMV+<VdL   s   rrs   s   s8Ns   s   s8W*s   s   s8W-!F)adobeTs   <~s   ~>r      )Zwrapcolrh   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>
~>s           )
foldspacesrh   s   yys          s   y+<Vds         s   y+<Us        s   y+9)	r   bytesr]   rA   r   	a85encoder7   r
   r   )r   r   rE   r:   rF   r   r   r   test_a85encode  s@    "
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}x$| D ]\}}|t|| qPW | tjdd d S )Nr   s   www.python.orgs   cXxL#aCvlSZ*DGca%Trf   s?  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$(#{QdpsR   abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789!@#0^&*();:<>,. []{}sg   VPa!sWoBn+X=-b1ZEkOHadLBXb#`}nd3r%YLqtVJM@UIZOH55pPf$@(Q&d$}S6EqEFflSSG&MFiI5{CeBQRbjDkv#CIy^osE+AW7dwls   no padding..s   Zf_uPVPs@!Zf7nos   zero compression    s   dS!BNAY*TBaB^jHb7^mG00000s   zero compression   s   dS!BNAY*TBaB^jHb7^mG0000s   Boundary:    s   LT`0$WMOi7IsgCw00s   Space compr:    s   Q*dEpWgug3ZE$irARr(hrg   s   {{s   s   |Njs   s   |Ns9s   s   |NsC0)r   rk   r]   rA   r   	b85encoder7   )r   r   rE   r:   rF   r   r   r   test_b85encode  s&    
zBaseXYTestCase.test_b85encodec             C   sL  | j }ddttddddddd	d
dddd}x| 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|| q8W |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   s   www.python.orgrf   sR   abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789!@#0^&*();:<>,. []{}s   no padding..s   zero compression    s   zero compression   s   Boundary:    s   Space compr:    rg   s   s   s   )r   s   GB\6`E-ZP=Df.1GEb>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;HTsg   @: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[Ps   DJpY:@:Wn_DJ(RSs   H=_,8+Cf>,E,oN2F(oQ1zs   H=_,8+Cf>,E,oN2F(oQ1!!!!s   6>q!aA79M(3WK-[!!s   ;fH/TAKYK$D/aMV+<VdLs   rrs   s8Ns   s8W*s   s8W-!F)rh   r@   s   <~s   ~>Tz<~%s~>s   yy)rj   rh   s           s   y+<Vds          s   y+<Us         s   y+9s        s   GB\6`E-ZP=Df.1GEb>)r   rk   r]   rA   r   	a85decoder*   r7   )r   r   rE   r:   rF   r   r   r   test_a85decode  s8    

zBaseXYTestCase.test_a85decodec             C   s~   | j }ddttddddddd	d
dddd}x:| D ].\}}|t|| |t|d| q8W | tjdd d S )Nr   s   www.python.orgrf   sR   abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789!@#0^&*();:<>,. []{}s   no padding..s   zero compression    s   zero compression   s   Boundary:    s   Space compr:    rg   s   s   s   )r   s   cXxL#aCvlSZ*DGca%Ts?  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$(#{Qdpsg   VPa!sWoBn+X=-b1ZEkOHadLBXb#`}nd3r%YLqtVJM@UIZOH55pPf$@(Q&d$}S6EqEFflSSG&MFiI5{CeBQRbjDkv#CIy^osE+AW7dwls   Zf_uPVPs@!Zf7nos   dS!BNAY*TBaB^jHb7^mG00000s   dS!BNAY*TBaB^jHb7^mG0000s   LT`0$WMOi7IsgCw00s   Q*dEpWgug3ZE$irARr(hs   {{s   |Njs   |Ns9s   |NsC0r@   s   cXxL#aCvlSZ*DGca%T)r   rk   r]   rA   r   	b85decoder*   r7   )r   r   rE   r:   rF   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)pads   GQ7^Ds   xxs   G^'2gs   xxxs   G^+H5s   xxxxs   G^+IXs   xxxxxs
   G^+IXGQ7^Ds   x   s   xx  s   xxx s   xxxxx   )r   r   rl   rp   )r   r   r   r   r   test_a85_padding1  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 )Nrt   T)ru   s   cmMzZs   xxs   cz6H+s   xxxs   czAdKs   xxxxs   czAets   xxxxxs
   czAetcmMzZs   x   s   xx  s   xxx s   xxxxx   )r   r   rn   rr   )r   r   r   r   r   test_b85_padding@  s    zBaseXYTestCase.test_b85_paddingc          
   C   s  t tdt tddB t d }x|D ]}| jtt|gd tdt|g  W d Q R X | jtt|gd tjdt|g dd W d Q R X | jtt|gd" tjd	t|g d
 dd W d Q R X q(W | 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   !!!!F)rh   s   <~!!!!s   ~>Ts	   malformeds   <~still malformeds   <~~>s   abcxs   abcdeys   a b
cr   )rh   Zignorechars   ss   s8s   s8Ws   s8W-s   s8W-")setr]   r
   
ValueErrorrk   r   rp   )r   illegalcr   r   r   test_a85decode_errorsO  s8    "
"*











z$BaseXYTestCase.test_a85decode_errorsc          
   C   s   t tdt d t tdd }x@|D ]8}| jtt|gd tdt|g  W d Q R X q(W | ttjd | ttjd | ttjd	 | ttjd
 | ttjd d S )N!   s	   "',./:[\]   rz   )r{   s   0000   |s   |Ns   |Nss   |NsCs   |NsC1)listr]   r
   r~   rk   r   rr   )r   r   r   r   r   r   test_b85decode_errorsr  s    
"z$BaseXYTestCase.test_b85decode_errorsc             C   s@   t jt jt jt jt jt jt jf}x|D ]}| t	|d q&W d S )Nu   with non-ascii Ë)
r   rB   rC   rD   rS   rd   rr   rp   r
   r~   )r   Zdecode_funcsr   r   r   r   test_decode_nonascii_str  s    
z'BaseXYTestCase.test_decode_nonascii_strc             C   s   |  ttjt d S )N)Z
assertTrue
issubclassrI   rJ   r~   )r   r   r   r   test_ErrorHeritage  s    z!BaseXYTestCase.test_ErrorHeritageN)r,   r-   r.   r0   r1   r7   r4   r2   r?   rH   rK   rQ   rR   rT   rX   rb   rc   re   rm   ro   rq   rs   rv   rw   r   r   r   r   r   r   r   r   r/   `   s2   28)	2"-##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S )TestMainc             C   s   t jtjrt tj d S )N)ospathexistsr   TESTFNunlink)r   r   r   r   tearDown  s    zTestMain.tearDownc             G   s   t jd| jS )N-mr   )r   r   )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)s   b'Aladdin:open sesame's!   b'QWxhZGRpbjpvcGVuIHNlc2FtZQ==\n's   b'Aladdin:open sesame')r   ZassertSequenceEqual
splitlines)r   outputr   r   r   test_encode_decode  s    

zTestMain.test_encode_decodec          	   C   sD   t tjd}|d W d Q R X | dtj}| | d d S )Nwbs   ab
z-es   Yf9iCg==)openr   r   writer   r   rstrip)r   fpr   r   r   r   test_encode_file  s    zTestMain.test_encode_filec          	   C   sF   t ddd}|d\}}W d Q R X | | d | | d S )Nz-mr   z-es   ab
s   Yf9iCg==)r   Zspawn_pythonZcommunicater   r   ZassertIsNone)r   procr   errr   r   r   test_encode_from_stdin  s    zTestMain.test_encode_from_stdinc          	   C   sD   t tjd}|d W d Q R X | dtj}| | d d S )Nr   s   Yf9iCg==z-ds   ab)r   r   r   r   r   r   r   )r   r   r   r   r   r   r+     s    zTestMain.test_decodeN)	r,   r-   r.   r   r   r   r   r   r+   r   r   r   r   r     s   r   __main__)ZunittestZtestr   r   rI   r   r   Ztest.supportr   ZTestCaser   r/   r   r,   mainr   r   r   r   <module>   s   V    3"