U
    Pe;                     @   s   d Z ddlZddlZddlmZ ddlmZmZ G dd deZG dd deZ	G d	d
 d
eZ
G dd deZG dd deZejdd Zeejjdddgdddd Zeejjdddgdddd Zeejjdddgdddd ZdS )zG
Graphics tests
==============

Testing the simple vertex instructions
    N)Thread)GraphicUnitTestrequires_graphicsc                   @   s,   e Zd Zdd Zdd Zdd Zdd Zd	S )
BoxShadowTestc              
   C   s*  ddl m} ddlm} ddlm} | j}| }|j( |dddd |dddd	d
dd}W 5 Q R X || | }|j* |dddd |ddddd	d
dd}W 5 Q R X || | }|j |dddd | }W 5 Q R X d|_ddg|_	ddg|_
ddg|_ddg|_ddddg|_d|_|| d S )Nr   	BoxShadowWidgetColor   2   r      r   )r   
   r   )r   r   r   r   P   )possizeoffsetspread_radiusborder_radiusblur_radiusT)insetr   r   r   r   r   r   r   r   r   r   (   )kivy.graphics.boxshadowr   kivy.uix.widgetr	   kivy.graphicsr   rendercanvasr   r   r   r   r   r   r   )selfr   r	   r   rwidbs r&   </tmp/pip-unpacked-wheel-xzebddm3/kivy/tests/test_graphics.pytest_create   sR    	



zBoxShadowTest.test_createc                 C   sN  ddl m} d}| }d|_||_d|_d|_td|d |jd  |jd d  td|d	 |jd  |jd	 d  f}|j|kstd
|_|j|kstd|_|j|kst|d
d|ddd}td|d |jd  |jd d  td|d	 |jd  |jd	 d  f}|j|kstd|_|j|ks4td
|_|j|ksJtd S )Nr   r   r   r   r   r   r         r   TFr   )r   r   r   r   r   )	r   r   r   r   r   r   maxAssertionErrorr   )r"   r   raw_sizer%   Zadjusted_sizer&   r&   r'   test_adjusted_sizeA   sT    z BoxShadowTest.test_adjusted_sizec                 C   s^  ddl m} d}d}d}| }||_||_||_d|_d|_|d |jd  |jd  |jd  |d |jd  |jd	  |jd	  f}|j|kstd
|_|j|kstd|_|j|kst|d
|||ddd}|d |jd  |jd  |jd  |d |jd  |jd	  |jd	  f}|j|ks.td|_|j|ksDtd
|_|j|ksZtd S )Nr   r   r   r   r   r   r)   g      ?r   TFr   )r   r   r   r   r   r   )	r   r   r   r   r   r   r   r-   r   )r"   r   Zraw_posr.   r   r%   Zadjusted_posr&   r&   r'   test_adjusted_pos   st    	zBoxShadowTest.test_adjusted_posc                    s   ddl m} |  d _d _d _d _d _d _ jd	ksDt jdksRt jt	t
 fd
d jkstt|ddddddd  jd	kst jdkst jt	t
 fdd jkstd S )Nr   r   r   r   r0   i)i8r1   )r   r   d   r   )r   r   c                    s   t dt| t jd S Ng      ?r+   r,   minr   valuer%   r&   r'   <lambda>       z7BoxShadowTest.test_bounded_properties.<locals>.<lambda>)r   r   r   r   r   r   c                    s   t dt| t jd S r4   r5   r7   r9   r&   r'   r:      r;   )r   r   r   r   r   r   r   r   r-   tuplemap)r"   r   r&   r9   r'   test_bounded_properties   s@    

	
z%BoxShadowTest.test_bounded_propertiesN)__name__
__module____qualname__r(   r/   r2   r>   r&   r&   r&   r'   r      s   1BEr   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 )VertexInstructionTestc              	   C   s   ddl m} ddlm}m} | j}| }|j |ddd |ddd W 5 Q R X || | }|j  |ddd |dddd W 5 Q R X || | }|j  |ddd |ddd| _W 5 Q R X d	| j_|| d S )
Nr   r   Ellipser   r   r3   r3   r   r   r   )r   r   segmentsr   r   )	r   r	   r   rD   r   r    r!   er   r"   r	   rD   r   r#   r$   r&   r&   r'   test_circle   s&    z!VertexInstructionTest.test_circlec              	   C   s`   ddl m} ddlm}m} | j}| }|j  |ddd |ddd| _W 5 Q R X || d S )Nr   r   rC   r   rE   )   r3   rF   )r   r	   r   rD   r   r    r!   rI   rJ   r&   r&   r'   test_ellipse  s    z"VertexInstructionTest.test_ellipsec              	   C   s   ddl m} ddlm}m} | j}| }|j |ddd |dd W 5 Q R X || | }|j* |ddd |dd td	D d W 5 Q R X || d S )
Nr   r   Pointr   r   rH   )Zpointsc                 S   s   g | ]}|d  qS )   r&   ).0xr&   r&   r'   
<listcomp>/  s     z4VertexInstructionTest.test_point.<locals>.<listcomp>r   )r   r	   r   rO   r   r    r!   range)r"   r	   rO   r   r#   r$   r&   r&   r'   
test_point  s    "z VertexInstructionTest.test_pointc              	   C   s   ddl m} ddlm}m} | j}| }|j |ddd |dd}W 5 Q R X |dd |dd |dd |dd |dd |dd || d S )	Nr   r   rN   r   r   )Z	pointsizeZ   r   )r   r	   r   rO   r   r    r!   Z	add_point)r"   r	   rO   r   r#   r$   pr&   r&   r'   test_point_add2  s    z$VertexInstructionTest.test_point_addc              	   C   s  ddl m} ddlm}m} | j}| }|j |ddd |dd}W 5 Q R X || |jdksft| }|j |ddd |dd}W 5 Q R X || |jdkst| }|j |ddd |d	d}W 5 Q R X || |jd
kst| }|j |ddd |dd}W 5 Q R X || |jdks4t| }|j |ddd |dd}W 5 Q R X || |jdkszt| }|j |ddd |dd}W 5 Q R X || |jdkstd S )Nr   r   )Liner   r   )	r3   r3   r3   r3   r         r   r3   rounded_rectangle)	r3   r3   r3   r3   r3   rZ   r   r[   r3   )	r3   r3   r3   r3   F   rZ   r   r[   r3   )	r3   r3   r3   r3   r3      r3   r   r3   )	r3   r3   r3   r3   r   r_   r   r   r3   )	r3   r3   r3   r3   r   r   g㥛  I@3   r3   )	r3   r3   r3   r3   r   r   r   r   r3   )	r3   r3   r3   r3   r   r   r   r   r3   )	r3   r3   r3   r3   r   r   r   r   r3   )	r3   r3   r3   r3   r3   r   r   r   r3   )	r3   r3   r3   r3   c   r   r   r   r3   )	r   r	   r   rY   r   r    r!   r]   r-   )r"   r	   rY   r   r#   r$   liner&   r&   r'   test_line_rounded_rectangleF  sf    z1VertexInstructionTest.test_line_rounded_rectanglec              	   C   sj   ddl m} ddlm}m} | j}| }|j |ddd |dd}W 5 Q R X || |jd ksftd S )Nr   r   )
SmoothLiner   r   )	r3   r3   g      ?gףp=
?r[   r[   r[   r[   r3   r\   )	r   r	   r   rd   r   r    r!   r]   r-   )r"   r	   rd   r   r#   r$   rb   r&   r&   r'   !test_smoothline_rounded_rectangle  s    z7VertexInstructionTest.test_smoothline_rounded_rectangleN)	r?   r@   rA   rK   rM   rU   rX   rc   re   r&   r&   r&   r'   rB      s   ZrB   c                   @   s   e Zd Zdd ZdS )FBOInstructionTestCasec              	   C   sp   ddl m}m}m}m} |dd}|& |dddd |  |ddd W 5 Q R X |  |j}|jd d S )	Nr   )Fbo
ClearColorClearBuffersrD   )   rj   )r   r   rE   rF   zresults.png)	r   rg   rh   ri   rD   ZdrawZpixelsZtexturesave)r"   rg   rh   ri   rD   Zfbodatar&   r&   r'   test_fbo_pixels  s    
z&FBOInstructionTestCase.test_fbo_pixelsN)r?   r@   rA   rm   r&   r&   r&   r'   rf     s   rf   c                   @   s   e Zd Zdd ZdS )TransformationsTestCasec                 C   s"   ddl m} | }| |j d S )Nr   )LoadIdentity)r   ro   
assertTruestack)r"   ro   matr&   r&   r'   test_identity_creation  s    z.TransformationsTestCase.test_identity_creationN)r?   r@   rA   rs   r&   r&   r&   r'   rn     s   rn   c                   @   s   e Zd Zdd ZdS )CallbackInstructionTestc                 C   sH   ddl m} ddlm} ||d}| j}|| | |jdk d S )Nr   )dedent)Builderz        Widget:
            canvas:
                Callback:
                    callback: lambda __: setattr(self, 'callback_test', 'TEST')
        ZTEST)textwrapru   Z	kivy.langrv   load_stringr    rp   Zcallback_test)r"   ru   rv   rootr#   r&   r&   r'   test_from_kv  s    z$CallbackInstructionTest.test_from_kvN)r?   r@   rA   rz   r&   r&   r&   r'   rt     s   rt   c                 c   sX   ddl m} ddlm} |dd}|dd| j | }|| jfV  |dd| d S )Nr   r   )ConfigZgraphicsZverify_gl_main_thread)r   r	   Zkivy.configr{   getsetparam)requestr	   r{   originalwidgetr&   r&   r'   widget_verify_thread  s    r   01T)Zindirectc              	   C   s6   ddl m} | \}}|j | }W 5 Q R X d|_d S )Nr   r
   g?g?g333333?)r   r   r!   rgb)r   r   r   verify_threadcolorr&   r&   r'   test_graphics_main_thread  s
    r   c                    sb   ddl m  | \d  fdd}t|d}|  |  d k	r^d d d S )Nr   r
   c               
      s|   zBj 2 dkr0tt    W 5 Q R X n   W 5 Q R X W n4 tk
rv }  z| t d f W 5 d } ~ X Y nX d S )Nr   r+   )r!   pytestraises	TypeErrorBaseExceptionsysexc_inforI   r   	exceptionr   r   r&   r'   callback  s    z4test_create_graphics_second_thread.<locals>.callbacktargetr   )r   r   r   startjoinwith_traceback)r   r   threadr&   r   r'   "test_create_graphics_second_thread  s    
r   c              	      sx   ddl m} | \}|j |  W 5 Q R X d  fdd}t|d}|  |  d k	rtd d d S )Nr   r
   c               
      sj   z0dkr(t t d _W 5 Q R X nd _W n4 tk
rd }  z| t d f W 5 d } ~ X Y nX d S )Nr   r   r+   )r   r   r   r   r   r   r   r   r   r   r   r&   r'   r     s    
z4test_change_graphics_second_thread.<locals>.callbackr   r   )r   r   r!   r   r   r   r   )r   r   r   r   r   r&   r   r'   "test_change_graphics_second_thread  s    
r   )__doc__r   r   	threadingr   Zkivy.tests.commonr   r   r   rB   rf   rn   rt   Zfixturer   markZparametrizer   r   r   r&   r&   r&   r'   <module>   s,    f ?	
	