B
    u9aeN                 @   s   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	m
Z
mZ d dlZdZe	 dk r^eZeZe	 dd dkrxeZe ZG dd deZG d	d
 d
ZG dd dZG dd dZdd Zdd ZdS )    N)Scale)AbstractTkTesttcl_versionrequires_tclget_tk_patchlevelpixels_conv
tcl_obj_eqF)            c               @   s   e Zd ZeeZdZdZedd Z	dd Z
dejfddZeddd	d
dZd0ddddZdd Zdd ZedddZdd ZddddZdd Zdd Zdd d!d"Zddd#d$d%Zd&d' Zd(d) Zd*d+ Zd,d- Zd.d/ ZdS )1AbstractWidgetTestNFc             C   s6   y| j S  tk
r0   t| jdd| _ | j S X d S )Ntkscaling)Z_scalingAttributeErrorfloatrootcall)self r   "/usr/lib/python3.7/widget_tests.pyr      s
    zAbstractWidgetTest.scalingc             C   s<   | j s| jrtdkr|S t|tr4dt| j|S t|S )N)r	       )	
_stringifywantobjectsr   
isinstancetuplejoinmap_strstr)r   valuer   r   r   r   &   s
    
zAbstractWidgetTest._strc             C   s    |||rd S |  ||| d S )N)assertEqual)r   actualexpectedmsgeqr   r   r   assertEqual2-   s    
zAbstractWidgetTest.assertEqual2)r$   convr&   c            C   s   |||< |t kr|}|r ||}| js,| jsJt|trBt|}nt|}|d krVt}| j	|| ||d | j	|
|||d t|ts||}| t|d | j	|d ||d d S )N)r&   r
      )	_sentinelr   r   r   r   tkinterZ_joinr    r   r'   Zcgetr   	configurer"   len)r   widgetnamer!   r$   r(   r&   tr   r   r   
checkParam2   s"    


zAbstractWidgetTest.checkParamT)	keep_origc         	   C   s   || }|d k	r| |}| tj}|||< W d Q R X |d k	rT| t|j| |rj| || | n|||< | tj}|||i W d Q R X |d k	r| t|j| |r| || | n|||< d S )N)formatZassertRaisesr+   ZTclErrorr"   r    Z	exceptionr,   )r   r.   r/   r!   errmsgr2   Zorigcmr   r   r   checkInvalidParamH   s"    
z$AbstractWidgetTest.checkInvalidParamc             O   s$   x|D ]}| j |||f| qW d S )N)r1   )r   r.   r/   valueskwargsr!   r   r   r   checkParams^   s    
zAbstractWidgetTest.checkParamsc             O   sN   | j ||f|| | j||ddd | j||ddd | j||ddd d S )N zexpected integer but got "")r4   10pzexpected integer but got "10p"g	@zexpected integer but got "3.2")r9   r6   )r   r.   r/   r7   r8   r   r   r   checkIntegerParamb   s    


z$AbstractWidgetTest.checkIntegerParam)r(   c            O   sP   x&|D ]}| j |||fd|i| qW | j||ddd | j||ddd d S )Nr(   r:   z)expected floating-point number but got "")r4   spamz-expected floating-point number but got "spam")r1   r6   )r   r.   r/   r(   r7   r8   r!   r   r   r   checkFloatParamk   s    


z"AbstractWidgetTest.checkFloatParamc             C   sh   xdD ]}| j |||dd qW xdD ]}| j |||dd q&W | j||ddd | j||d	d
d d S )N)Fr   ZfalsenoZoffr   )r$   )T   trueZyesZonr@   r:   z!expected boolean value but got "")r4   r=   z%expected boolean value but got "spam")r1   r6   )r   r.   r/   r!   r   r   r   checkBooleanParams   s    



z$AbstractWidgetTest.checkBooleanParam)allow_emptyc            K   s:   | j ||ddddddddd	d
f| | j||ddd d S )Nz#ff0000z#00ff00z#0000ffz#123456ZredZgreenZblueZwhiteZblackZgreyr=   zunknown color name "spam")r4   )r9   r6   )r   r.   r/   rC   r8   r   r   r   checkColorParam}   s    
z"AbstractWidgetTest.checkColorParamc             K   sD   | j ||ddddf| tdkr.| ||d | j||ddd	 d S )
NZarrowZwatchZcrossr:   )r	   r
   noner=   zbad cursor spec "spam")r4   )r9   r   r1   r6   )r   r.   r/   r8   r   r   r   checkCursorParam   s
    
z#AbstractWidgetTest.checkCursorParamc             C   s0   dd }|||< |  ||  | ||d d S )Nc              W   s   d S )Nr   )argsr   r   r   command   s    z5AbstractWidgetTest.checkCommandParam.<locals>.commandr:   )Z
assertTruer9   )r   r.   r/   rH   r   r   r   checkCommandParam   s    z$AbstractWidgetTest.checkCommandParam)r4   c            O   s   | j ||f|| |d krld|d|d d t|dkr@dnd|d f }| j||dd| d d	| }| j||d
|d d S )Nz %s "{}": must be %s%s or %sz,    ,r:   Z	ambiguous)r4   Zbadr=   )r9   r   r-   r6   )r   r.   r/   r4   r7   r8   Zerrmsg2r   r   r   checkEnumParam   s    
z!AbstractWidgetTest.checkEnumParam)r(   r2   c      
      O   s   |d kr| j }xX|D ]P}t}|}	t|trH|	rH|	tk	rHt|| j }t}	| j|||f||	d| qW | j||dd|d | j||dd|d d S )N)r$   r(   Z6xzbad screen distance "6x")r4   r2   r=   zbad screen distance "spam")	_conv_pixelsr*   r   r    r   r   roundr1   r6   )
r   r.   r/   r(   r2   r7   r8   r!   r$   Zconv1r   r   r   checkPixelsParam   s    




z#AbstractWidgetTest.checkPixelsParamc          
   C   s>   |  ||dddddd d}tdk r(d }| j||d	|d
 d S )NZflatZgrooveZraisedZridgeZsolidZsunkenzHbad relief "spam": must be flat, groove, raised, ridge, solid, or sunken)r	   r   r=   )r4   )r9   r   r6   )r   r.   r/   r4   r   r   r   checkReliefParam   s    
z#AbstractWidgetTest.checkReliefParamc             C   s@   t j| jdd}| j|||td | j||ddd d||< d S )NZimage1)Zmasterr/   )r(   r=   zimage "spam" doesn't exist)r4   r:   )r+   Z
PhotoImager   r1   r    r6   )r   r.   r/   imager   r   r   checkImageParam   s
    
z"AbstractWidgetTest.checkImageParamc             C   s   | j |||td d S )N)r(   )r1   r    )r   r.   r/   varr   r   r   checkVariableParam   s    z%AbstractWidgetTest.checkVariableParamc             C   s`   |  | | |t t|dkr2| d|f  x(|D ] }t|ts8| d|f  P q8W d S )Nr)   zInvalid bounding box: %r)ZassertIsNotNoneZassertIsInstancer   r-   Zfailr   int)r   Zbboxitemr   r   r   assertIsBoundingBox   s    


z&AbstractWidgetTest.assertIsBoundingBoxc             C   s   |   }| }t|ts2| t|t|  x|D ]}||  q8W tjj	rdddddd}t
|}t
| j}xHt|| D ]8}||kr|| |kr|| |kstd| jj|f  qW d S )Nborderwidth
background
foregroundZinvalidcommandZvalidatecommand)bdbgfgZinvcmdZvcmdz%s.OPTIONS doesn't contain "%s")createkeysr   r   r"   sortedr,   testsupportverbosesetOPTIONSprint	__class____name__)r   r.   r`   kaliasesr$   r   r   r   	test_keys   s(    


zAbstractWidgetTest.test_keys)N) ri   
__module____qualname__staticmethodpixels_roundrN   _conv_pad_pixelsr   propertyr   r   object__eq__r'   r*   r1   r6   r9   r<   r   r>   rB   rD   rF   rI   rM   rP   rQ   rS   rU   rX   rl   r   r   r   r   r      s0   	

r   c               @   s  e Zd 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eejd"kd#d$d% Zd&d' Zd(d) Zd*d+ Zd,d- Zd.d/ Zd0d1 Zd2d3 Zd4d5 Z d6d7 Z!d8d9 Z"d:d; Z#d<d= Z$d>d? Z%d@dA Z&dBdC Z'dDdE Z(dFdG Z)dHdI Z*dJdK Z+dLdM Z,dNdO Z-dPdQ Z.dRdS Z/dTdU Z0dVdW Z1dXdY Z2dZd[ Z3d\d] Z4d^d_ Z5d`da Z6dbdc Z7ddde Z8e9dfdgdhdi Z:e9dfdgdjdk Z;dldm Z<dnS )oStandardOptionsTests)*activebackgroundactiveborderwidthactiveforegroundanchorrZ   bitmaprY   compoundcursordisabledforegroundexportselectionfontr[   highlightbackgroundhighlightcolorhighlightthicknessrR   insertbackgroundinsertborderwidthinsertofftimeinsertontimeinsertwidthjumpjustifyorientpadxpadyreliefrepeatdelayrepeatintervalselectbackgroundselectborderwidthselectforegroundsetgrid	takefocustexttextvariabletroughcolor	underline
wraplengthxscrollcommandyscrollcommandc             C   s   |   }| |d d S )Nrv   )r_   rD   )r   r.   r   r   r   test_activebackground   s    z*StandardOptionsTests.test_activebackgroundc          
   C   s$   |   }| |ddddddd d S )Nrw   r   g?g333333@r   r;   )r_   rP   )r   r.   r   r   r   test_activeborderwidth   s    z+StandardOptionsTests.test_activeborderwidthc             C   s   |   }| |d d S )Nrx   )r_   rD   )r   r.   r   r   r   test_activeforeground  s    z*StandardOptionsTests.test_activeforegroundc             C   s*   |   }| |ddddddddd	d
 d S )Nry   nneeZsesswwZnwcenter)r_   rM   )r   r.   r   r   r   test_anchor  s    z StandardOptionsTests.test_anchorc             C   s.   |   }| |d d| jkr*| |d d S )NrZ   r]   )r_   rD   rf   )r   r.   r   r   r   test_background  s    
z$StandardOptionsTests.test_backgroundc             C   s~   |   }| |dd | |dd tjjddd}| |dd|  d| jjd	d
krhd| j ksz| j	|dddd d S )Nrz   Z	questheadZgray50z
python.xbmZ
imghdrdata)Zsubdir@Zaquar   ZwindowingsystemZAppKitr=   zbitmap "spam" not defined)r4   )
r_   r1   rb   rc   Zfindfiler   r   r   Zwinfo_serverr6   )r   r.   filenamer   r   r   test_bitmap  s    
z StandardOptionsTests.test_bitmapc          
   C   sF   |   }| |ddddddd d| jkrB| |ddddddd d S )	NrY   r   g?g@r   r   r;   r\   )r_   rP   rf   )r   r.   r   r   r   test_borderwidth   s
    
z%StandardOptionsTests.test_borderwidthc          
   C   s$   |   }| |ddddddd d S )Nr{   Zbottomr   leftrE   righttop)r_   rM   )r   r.   r   r   r   test_compound'  s    z"StandardOptionsTests.test_compoundc             C   s   |   }| |d d S )Nr|   )r_   rF   )r   r.   r   r   r   test_cursor,  s    z StandardOptionsTests.test_cursorc             C   s   |   }| |d d S )Nr}   )r_   rD   )r   r.   r   r   r   test_disabledforeground0  s    z,StandardOptionsTests.test_disabledforegroundc             C   s   |   }| |d d S )Nr~   )r_   rB   )r   r.   r   r   r   test_exportselection4  s    z)StandardOptionsTests.test_exportselectionc             C   s,   |   }| |dd | j|dddd d S )Nr   z3-Adobe-Helvetica-Medium-R-Normal--*-120-*-*-*-*-*-*r:   zfont "" doesn't exist)r4   )r_   r1   r6   )r   r.   r   r   r   	test_font8  s
    
zStandardOptionsTests.test_fontc             C   s.   |   }| |d d| jkr*| |d d S )Nr[   r^   )r_   rD   rf   )r   r.   r   r   r   test_foreground?  s    
z$StandardOptionsTests.test_foregroundc             C   s   |   }| |d d S )Nr   )r_   rD   )r   r.   r   r   r   test_highlightbackgroundE  s    z-StandardOptionsTests.test_highlightbackgroundc             C   s   |   }| |d d S )Nr   )r_   rD   )r   r.   r   r   r   test_highlightcolorI  s    z(StandardOptionsTests.test_highlightcolorc          	   C   s8   |   }| |dddddd | j|ddd| jd d S )	Nr   r   g?g@r   r;   r   )r$   r(   )r_   rP   r1   rN   )r   r.   r   r   r   test_highlightthicknessM  s
    z,StandardOptionsTests.test_highlightthicknessdarwinz"crashes with Cocoa Tk (issue19733)c             C   s   |   }| |d d S )NrR   )r_   rS   )r   r.   r   r   r   
test_imageT  s    zStandardOptionsTests.test_imagec             C   s   |   }| |d d S )Nr   )r_   rD   )r   r.   r   r   r   test_insertbackgroundZ  s    z*StandardOptionsTests.test_insertbackgroundc          
   C   s$   |   }| |ddddddd d S )Nr   r   g?g@r   r   r;   )r_   rP   )r   r.   r   r   r   test_insertborderwidth^  s    z+StandardOptionsTests.test_insertborderwidthc             C   s   |   }| |dd d S )Nr   d   )r_   r<   )r   r.   r   r   r   test_insertofftimec  s    z'StandardOptionsTests.test_insertofftimec             C   s   |   }| |dd d S )Nr   r   )r_   r<   )r   r.   r   r   r   test_insertontimeg  s    z&StandardOptionsTests.test_insertontimec             C   s    |   }| |ddddd d S )Nr   g?g@r   r;   )r_   rP   )r   r.   r   r   r   test_insertwidthk  s    z%StandardOptionsTests.test_insertwidthc             C   s   |   }| |d d S )Nr   )r_   rB   )r   r.   r   r   r   	test_jumpo  s    zStandardOptionsTests.test_jumpc             C   s4   |   }| j|dddddd | j|dddd d S )	Nr   r   r   r   z6bad justification "{}": must be left, right, or center)r4   r:   z:ambiguous justification "": must be left, right, or center)r_   rM   r6   )r   r.   r   r   r   test_justifys  s
    
z!StandardOptionsTests.test_justifyc             C   s2   |   }| t|d | j | |ddd d S )Nr   Z
horizontalZvertical)r_   r"   r    Zdefault_orientrM   )r   r.   r   r   r   test_orient|  s    z StandardOptionsTests.test_orientc          
   C   s(   |   }| j|dddddd| jd d S )Nr   r   g@gffffff@r   12m)r(   )r_   rP   rq   )r   r.   r   r   r   	test_padx  s    zStandardOptionsTests.test_padxc          
   C   s(   |   }| j|dddddd| jd d S )Nr   r   g@gffffff@r   r   )r(   )r_   rP   rq   )r   r.   r   r   r   	test_pady  s    zStandardOptionsTests.test_padyc             C   s   |   }| |d d S )Nr   )r_   rQ   )r   r.   r   r   r   test_relief  s    z StandardOptionsTests.test_reliefc             C   s   |   }| |ddd d S )Nr   ii  )r_   r<   )r   r.   r   r   r   test_repeatdelay  s    z%StandardOptionsTests.test_repeatdelayc             C   s   |   }| |ddd d S )Nr   ii  )r_   r<   )r   r.   r   r   r   test_repeatinterval  s    z(StandardOptionsTests.test_repeatintervalc             C   s   |   }| |d d S )Nr   )r_   rD   )r   r.   r   r   r   test_selectbackground  s    z*StandardOptionsTests.test_selectbackgroundc             C   s    |   }| |ddddd d S )Nr   g?g@r   r;   )r_   rP   )r   r.   r   r   r   test_selectborderwidth  s    z+StandardOptionsTests.test_selectborderwidthc             C   s   |   }| |d d S )Nr   )r_   rD   )r   r.   r   r   r   test_selectforeground  s    z*StandardOptionsTests.test_selectforegroundc             C   s   |   }| |d d S )Nr   )r_   rB   )r   r.   r   r   r   test_setgrid  s    z!StandardOptionsTests.test_setgridc             C   s   |   }| |dddd d S )NstateZactiveZdisabledZnormal)r_   rM   )r   r.   r   r   r   
test_state  s    zStandardOptionsTests.test_statec             C   s   |   }| |dddd d S )Nr   01r:   )r_   r9   )r   r.   r   r   r   test_takefocus  s    z#StandardOptionsTests.test_takefocusc             C   s   |   }| |ddd d S )Nr   r:   z
any string)r_   r9   )r   r.   r   r   r   	test_text  s    zStandardOptionsTests.test_textc             C   s&   |   }t| j}| |d| d S )Nr   )r_   r+   Z	StringVarr   rU   )r   r.   rT   r   r   r   test_textvariable  s    z&StandardOptionsTests.test_textvariablec             C   s   |   }| |d d S )Nr   )r_   rD   )r   r.   r   r   r   test_troughcolor  s    z%StandardOptionsTests.test_troughcolorc             C   s   |   }| |dddd d S )Nr   r   r@   
   )r_   r<   )r   r.   r   r   r   test_underline  s    z#StandardOptionsTests.test_underlinec             C   s   |   }| |dd d S )Nr   r   )r_   rP   )r   r.   r   r   r   test_wraplength  s    z$StandardOptionsTests.test_wraplengthc             C   s   |   }| |d d S )Nr   )r_   rI   )r   r.   r   r   r   test_xscrollcommand  s    z(StandardOptionsTests.test_xscrollcommandc             C   s   |   }| |d d S )Nr   )r_   rI   )r   r.   r   r   r   test_yscrollcommand  s    z(StandardOptionsTests.test_yscrollcommandc             C   s   |   }| |d d S )NrH   )r_   rI   )r   r.   r   r   r   test_command  s    z!StandardOptionsTests.test_commandc             C   s   |   }| |d d S )NZindicatoron)r_   rB   )r   r.   r   r   r   test_indicatoron  s    z%StandardOptionsTests.test_indicatoronc             C   s   |   }| |d d S )NZ	offrelief)r_   rQ   )r   r.   r   r   r   test_offrelief  s    z#StandardOptionsTests.test_offreliefc             C   s   |   }| |d d S )NZ
overrelief)r_   rQ   )r   r.   r   r   r   test_overrelief  s    z$StandardOptionsTests.test_overreliefc             C   s   |   }| |d d S )NZselectcolor)r_   rD   )r   r.   r   r   r   test_selectcolor  s    z%StandardOptionsTests.test_selectcolorc             C   s   |   }| |d d S )NZselectimage)r_   rS   )r   r.   r   r   r   test_selectimage  s    z%StandardOptionsTests.test_selectimager	   r
   c             C   s   |   }| |d d S )NZtristateimage)r_   rS   )r   r.   r   r   r   test_tristateimage  s    z'StandardOptionsTests.test_tristateimagec             C   s   |   }| |dd d S )NZtristatevalueZ
unknowable)r_   r1   )r   r.   r   r   r   test_tristatevalue  s    z'StandardOptionsTests.test_tristatevaluec             C   s&   |   }t| j}| |d| d S )Nvariable)r_   r+   Z	DoubleVarr   rU   )r   r.   rT   r   r   r   test_variable  s    z"StandardOptionsTests.test_variableN)=ri   rm   rn   ZSTANDARD_OPTIONSr   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   unittestZskipIfsysplatformr   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   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   ru      sl   	ru   c               @   s   e Zd Zdd Zdd ZdS )IntegerSizeTestsc             C   s   |   }| |dddd d S )Nheightr   ir   )r_   r<   )r   r.   r   r   r   test_height  s    zIntegerSizeTests.test_heightc             C   s   |   }| |dddd d S )Nwidthi  inr   )r_   r<   )r   r.   r   r   r   
test_width  s    zIntegerSizeTests.test_widthN)ri   rm   rn   r   r   r   r   r   r   r     s   r   c               @   s   e Zd Zdd Zdd ZdS )PixelSizeTestsc          
   C   s$   |   }| |ddddddd d S )Nr   r   gLY@gfffffY@ir   Z3c)r_   rP   )r   r.   r   r   r   r     s    zPixelSizeTests.test_heightc          
   C   s$   |   }| |ddddddd d S )Nr   i  gfffff6y@gIy@inr   Z5i)r_   rP   )r   r.   r   r   r   r     s    zPixelSizeTests.test_widthN)ri   rm   rn   r   r   r   r   r   r   r      s   r   c                 s    fdd}|S )Nc                st   xn j D ]d}d| }t |sxLD ]"}t||r$t |t|| P q$W |f fdd	}||_t || qW  S )NZtest_c                s&   |   }||  td| jf d S )NzOption "%s" is not tested in %s)r_   AssertionErrorri   )r   optionr.   )clsr   r   rb     s    z5add_standard_options.<locals>.decorator.<locals>.test)rf   hasattrsetattrgetattrri   )r   r   Z
methodnameZsource_classrb   )source_classes)r   r   	decorator  s    


z'add_standard_options.<locals>.decoratorr   )r   r   r   )r   r   add_standard_options
  s    r   c              C   s&   t jjr"t } td| dd d S )Nzpatchlevel =infoZ
patchlevel)rb   rc   rd   r+   ZTclrg   r   )Ztclr   r   r   setUpModule!  s    r   )r   r   r+   Ztkinter.ttkr   Ztkinter.test.supportr   r   r   r   r   r   Ztest.supportrb   Znoconvr    rO   rp   rV   rs   r*   r   ru   r   r   r   r   r   r   r   r   <module>   s*    
 T  

