
    bio                         d Z ddlmZ ddlmZ ddlZddlZddlZddlm	Z	  G d de      Z
 G d d	e      Z G d
 de      Z G d de      Zy)zTesting widget layout templates    )TestCase)mockN)LayoutPropertiesc                   R    e Zd ZdZd Zd Zd Z ej                  d      d        Z	y)TestTwoByTwoLayouttest layout templatesc                    t        j                         }t        j                         }t        j                         }t        j                         }t        j                  ||||      }|j                  j                  dk(  sJ |j
                  j                  j                  dk(  sJ |j                  j                  j                  dk(  sJ |j                  j                  j                  dk(  sJ |j                  j                  j                  dk(  sJ t        |j                         d         dk(  sJ t        j                  ||d	|      }|j                  j                  d
k(  sJ |j
                  j                  j                  dk(  sJ |j                  j                  j                  dk(  sJ |j                  J |j                  j                  j                  dk(  sJ t        |j                         d         dk(  sJ t        j                  d	|||      }|j                  j                  dk(  sJ |j
                  J |j                  j                  j                  dk(  sJ |j                  j                  j                  dk(  sJ |j                  j                  j                  dk(  sJ t        |j                         d         dk(  sJ t        j                  d	|d	|      }|j                  j                  dk(  sJ |j
                  J |j                  j                  j                  dk(  sJ |j                  J |j                  j                  j                  dk(  sJ t        |j                         d         dk(  sJ t        j                  |d	||      }|j                  j                  dk(  sJ |j
                  j                  j                  dk(  sJ |j                  J |j                  j                  j                  dk(  sJ |j                  j                  j                  dk(  sJ t        |j                         d         dk(  sJ t        j                  |d	d	d	      }|j                  j                  dk(  sJ |j
                  |u sJ |j
                  j                  j                  dk(  sJ |j                  J |j                  J |j                  J t        |j                         d         dk(  sJ t        j                  d	|d	d	      }|j                  j                  dk(  sJ |j                  |u sJ |j                  j                  j                  dk(  sJ |j
                  J |j                  J |j                  J t        |j                         d         dk(  sJ t        j                  d	d	d	d	      }|j                  j                  J |j
                  J |j                  J |j                  J |j                  J |j                         d   rJ t        j                  d	|d	d	d      }|j                  j                  dk(  sJ |j                  |u sJ |j                  j                  j                  dk(  sJ |j
                  J |j                  J |j                  J t        |j                         d         dk(  sJ y	)z'test merging cells with missing widgetstop_left	top_rightbottom_leftbottom_right/"top-left top-right"
"bottom-left bottom-right"ztop-leftz	top-rightzbottom-leftzbottom-rightchildren   N,"top-left top-right"
"top-left bottom-right"   z2"bottom-left top-right"
"bottom-left bottom-right"z1"top-right top-right"
"bottom-right bottom-right"   z2"top-left bottom-right"
"bottom-left bottom-right"z'"top-left top-left"
"top-left top-left"   z+"top-right top-right"
"top-right top-right"F)r   r   r   r   merge)widgetsButtonTwoByTwoLayoutlayoutgrid_template_areasr   	grid_arear   r   r   len	get_state)selfbutton1button2button3button4boxs         i/home/cdr/jupyterlab/.venv/lib/python3.12/site-packages/ipywidgets/widgets/tests/test_widget_templates.pytest_merge_cellsz#TestTwoByTwoLayout.test_merge_cells   s
    ..".."..".."$$g/61829;
 zz-- 3O P 	P P||"",,
:::}}##--<<<%%//=@@@&&00NBBB3==?:./1444$$g/61529;
 zz-- 3L M 	M M||"",,
:::}}##--<<<&&&&&00NBBB3==?:./1444$$d/61829;
 zz-- 3O P 	P P||###}}##--<<<%%//=@@@&&00NBBB3==?:./1444$$d/61529;
 zz-- 3P Q 	Q Q||###}}##--<<<&&&&&00NBBB3==?:./1444$$g/31829;
 zz-- 3O P 	P P||"",,
:::}}$$$%%//=@@@&&00NBBB3==?:./1444 $$g/315268
 zz-- 3H I 	I I ||w&&&||"",,
:::}}$$$&&&'''3==?:./1444$$d/615268
 zz-- 3J K 	K K }}'''}}##--<<<||###&&&'''3==?:./1444$$d/315268
 zz--555||###}}$$$&&&'''==?:...$$d/61526+0	2 zz-- 3O P 	P P }}'''}}##--<<<||###&&&'''3==?:./1444    c                 :   t        j                  d      }t        j                         }t        j                         }t        j                         }t        j                         }t        j                  |||||      }|j                  j
                  dk(  sJ y)z6test whether layout options are passed down to GridBoxcenteralign_itemsr   r   r   r   r   N)r   Layoutr   r   r   r+   )r   r   r    r!   r"   r#   r$   s          r%   test_keep_layout_optionsz+TestTwoByTwoLayout.test_keep_layout_options   sx     H5..".."..".."$$g18w,24 zz%%111r'   c           	         t        j                         }t        j                         }t        j                         }t        j                         }t        j                  ||||ddd      }|j                  j                  dk(  sJ |j                  j
                  dk(  sJ |j                  j                  dk(  sJ t        j                  ddd      }t        j                  |||||      }|j                  j                  dk(  sJ |j                  j
                  dk(  sJ |j                  j                  dk(  sJ t        j                  ddd      }t        j                  |||||d      }|j                  j                  dk(  sJ |j                  j
                  dk(  sJ |j                  j                  dk(  sJ y)	zgtest whether the extra layout options of the template class are
           passed down to Layout object10pxr)   )r   r   r   r   grid_gapjustify_contentr+   )r1   r2   r+   r,   30px)r   r   r   r   r   r1   N)r   r   r   r   r1   r2   r+   r-   )r   r    r!   r"   r#   r$   r   s          r%   test_pass_layout_optionsz+TestTwoByTwoLayout.test_pass_layout_options   s    ..".."..".."$$g18w.4h19;
 zz""f,,,zz))X555zz%%111 ,46$$g18w,2'
 zz""f,,,zz))X555zz%%111 ,46$$g18w,2V'
 zz""f,,,zz))X555zz%%111r'   zipywidgets.Layout.send_statec                    t        j                         }t        j                         }t        j                         }t        j                         }t        j                  ||d|      }ddlm} |j                         }t        |d         dk(  sJ |j                  j                  dk(  sJ t        j                  |      |j                  j                  _        |j                          ||_        |j                         }t        |d         d	k(  sJ |j                  j                  d
k(  sJ |j                  d       t        j                  ||d|      }|j                  j                  dk(  sJ t        j                  |      |j                  j                  _        |j                          d|_        |j                  j                  d
k(  sJ |j                  d       y)z9test whether it's possible to add widget outside __init__Nr
   r   )Kernelr   r   r   )specr   r   r   )keyF)r   r   r   ipykernel.kernelbaser6   r   r   r   r   r   	MagicMockcommkernel
reset_mockr   assert_called_withr   )	r   
send_stater    r!   r"   r#   r$   r6   states	            r%   test_update_dynamicallyz*TestTwoByTwoLayout.test_update_dynamically   s    ..".."..".."$$g15GM/5$%***zz-- 3L M 	M M "&V!<

!5$%***zz-- 3O P 	P P 	%%*?%@$$g15GMzz-- 3L M 	M M!%V!<

	zz-- 3O P 	P P%%*?%@r'   N)
__name__
__module____qualname____doc__r&   r.   r4   r   patchrA    r'   r%   r   r      s9    B5H2(2V TZZ./%A 0%Ar'   r   c                   (    e Zd ZdZd Zd Zd Zd Zy)TestAppLayoutr   c                    t        j                         }t        j                         }t        j                         }t        j                         }t        j                         }t        j                  |||||      }|j                  j                  dk(  sJ |j
                  j                  j                  dk(  sJ |j                  j                  j                  dk(  sJ |j                  j                  j                  dk(  sJ |j                  j                  j                  dk(  sJ |j                  j                  j                  dk(  sJ t        |j                         d         d	k(  sJ t        j                         }|j                  j                  J |j                  j                  J |j                  j                  J t        |j                         d         dk(  sJ y
)z!test creating with default values)footerheaderr)   left_sidebarright_sidebarQ"header header header"
"left-sidebar center right-sidebar"
"footer footer footer"rK   rL   r)   left-sidebarright-sidebarr      Nr   )r   r   	AppLayoutr   r   rK   r   rL   r)   rM   rN   r   r   grid_template_columnsgrid_template_rowsr   rK   rL   r)   rM   rN   r$   s          r%   test_create_with_defaultsz'TestAppLayout.test_create_with_defaults   s    !!!~~'(%'
 zz-- 3K L 	L L zz  **h666zz  **h666zz  **h666&&00NBBB  ''11_DDD3==?:./1444 !zz--555zz//777zz,,4443==?:./1444r'   c                 `   t        j                         }t        j                         }t        j                         }t        j                         }t        j                         }t        j                  |      }|j                  j                  dk(  sJ |j
                  j                  j                  dk(  sJ t        |j                         d         dk(  sJ t        j                  |      }|j                  j                  dk(  sJ |j                  j                  j                  dk(  sJ t        |j                         d         dk(  sJ t        j                  ||||	      }|j                  j                  d
k(  sJ |j                  j                  j                  dk(  sJ |j                  j                  j                  dk(  sJ |j
                  j                  j                  dk(  sJ |j                  j                  j                  dk(  sJ t        |j                         d         dk(  sJ t        j                  ||||      }|j                  j                  dk(  sJ |j                  j                  j                  dk(  sJ |j                  j                  j                  dk(  sJ |j
                  j                  j                  dk(  sJ |j                  j                  j                  dk(  sJ t        |j                         d         dk(  sJ t        j                  |||      }|j                  j                  dk(  sJ |j                  j                  j                  dk(  sJ |j                  j                  j                  dk(  sJ |j
                  j                  j                  dk(  sJ t        |j                         d         dk(  sJ t        j                  ||d||      }|j                  j                  dk(  sJ |j                  j                  j                  dk(  sJ |j                  j                  j                  dk(  sJ |j                  j                  j                  dk(  sJ |j                  j                  j                  dk(  sJ |j
                  J t        |j                         d         dk(  sJ t        j                  ||dd|      }|j                  j                  dk(  sJ |j                  j                  j                  dk(  sJ |j                  j                  j                  dk(  sJ |j                  J |j                  j                  j                  dk(  sJ |j
                  J t        |j                         d         dk(  sJ t        j                  ||ddd      }|j                  j                  dk(  sJ |j                  j                  j                  dk(  sJ |j                  j                  j                  dk(  sJ |j
                  J |j                  J |j                  J t        |j                         d         dk(  sJ t        j                  |||d      }|j                  j                  dk(  sJ |j                  j                  j                  dk(  sJ |j                  j                  j                  dk(  sJ |j
                  j                  j                  dk(  sJ |j                  J |j                  J t        |j                         d         dk(  sJ t        j                  ||||      }|j                  j                  dk(  sJ |j
                  j                  j                  dk(  sJ |j                  j                  j                  dk(  sJ |j                  j                  j                  dk(  sJ |j                  j                  j                  dk(  sJ |j                  J t        |j                         d         dk(  sJ t        j                  ||||      }|j                  j                  d k(  sJ |j
                  j                  j                  dk(  sJ |j                  j                  j                  dk(  sJ |j                  j                  j                  dk(  sJ |j                  j                  j                  dk(  sJ |j                  J t        |j                         d         dk(  sJ t        j                  |||!      }|j                  j                  d"k(  sJ |j
                  j                  j                  dk(  sJ |j                  j                  j                  dk(  sJ |j                  j                  j                  dk(  sJ |j                  J |j                  J t        |j                         d         dk(  sJ t        j                  |      }|j                  j                  dk(  sJ |j
                  j                  j                  dk(  sJ t        |j                         d         dk(  sJ y)#z"test if cells are correctly merged)r)   zD"center center center"
"center center center"
"center center center"r)   r   r   )rM   zz"left-sidebar left-sidebar left-sidebar"
"left-sidebar left-sidebar left-sidebar"
"left-sidebar left-sidebar left-sidebar"rP   )rL   rK   rM   r)   zJ"header header header"
"left-sidebar center center"
"footer footer footer"rK   rL   r   )rL   rK   rN   r)   zK"header header header"
"center center right-sidebar"
"footer footer footer"rQ   )rL   rK   r)   zD"header header header"
"center center center"
"footer footer footer"r   N)rL   rK   r)   rM   rN   z<"header header"
"left-sidebar right-sidebar"
"footer footer"z="header header"
"right-sidebar right-sidebar"
"footer footer"z"header"
"footer"r   F)rL   rK   r)   r   rO   )rK   r)   rM   rN   z:"left-sidebar center right-sidebar"
"footer footer footer")rL   r)   rM   rN   z:"header header header"
"left-sidebar center right-sidebar")r)   rM   rN   z#"left-sidebar center right-sidebar")r   r   rS   r   r   r)   r   r   r   rM   rK   rL   rN   rV   s          r%   test_merge_empty_cellsz$TestAppLayout.test_merge_empty_cells  s_
    !!!~~'( 
 zz-- 3K L 	L L zz  **h6663==?:./1444%
 zz-- 3] ^ 	^ ^ &&00NBBB3==?:./1444 %	
 zz-- 3K L 	L L zz  **h666zz  **h666zz  **h666&&00NBBB3==?:./1444'	
 zz-- 3K L 	L L zz  **h666zz  **h666zz  **h666  ''11_DDD3==?:./1444
 zz-- 3K L 	L L zz  **h666zz  **h666zz  **h6663==?:./1444 %'
 zz-- 3D E 	E E zz  **h666zz  **h666&&00NBBB  ''11_DDDzz!!!3==?:./1444 '
 zz-- 3D E 	E E zz  **h666zz  **h666'''  ''11_DDDzz!!!3==?:./1444 
 zz-- 3= > 	> >zz  **h666zz  **h666zz!!!'''  (((3==?:./1444
 	
 zz-- 3K L 	L L zz  **h666zz  **h666zz  **h666'''  (((3==?:./1444 %'	
 zz-- 3K L 	L Lzz  **h666&&00NBBB  ''11_DDDzz  **h666zz!!!3==?:./1444%'	
 zz-- 3X Y 	Y Yzz  **h666&&00NBBB  ''11_DDDzz  **h666zz!!!3==?:./1444%'
 zz--1VVVVzz  **h666&&00NBBB  ''11_DDDzz!!!zz!!!3==?:./1444 
 zz-- 3K L 	L L zz  **h6663==?:./1444r'   c                    t        j                         }|j                  d      dk(  sJ |j                  d      dk(  sJ |j                  d      dk(  sJ |j                  d      dk(  sJ |j                  d      dk(  sJ t        j                  t
              5  |j                  d       d d d        y # 1 sw Y   y xY w)N100px1frz2.5frz2.5z25%zthis is not correct size)r   rS   _size_to_csspytestraises	TypeErrorr   r$   s     r%   test_size_to_csszTestAppLayout.test_size_to_css  s    !(G333&%///(G333&'111&%///]]9% 	978	9 	9 	9s   B77C c                 v   t        j                         }t        j                         }t        j                         }t        j                         }t        j                         }t        j                  |||||      }t        j                  t
        j                        5  g d|_        d d d        t        j                  t
        j                        5  ddg|_        d d d        t        j                  t
        j                        5  g d|_        d d d        t        j                  t
        j                        5  ddg|_        d d d        |j                  j                  dk(  sJ |j                  j                  dk(  sJ g d|_        |j                  j                  dk(  sJ |j                  j                  dk(  sJ g d|_        |j                  j                  dk(  sJ |j                  j                  d	k(  sJ y # 1 sw Y   ^xY w# 1 sw Y   6xY w# 1 sw Y   xY w# 1 sw Y   xY w)
N)rL   rK   rM   rN   r)   )1fxrd   rd   rd   rd   z1fr 3fr 1frz1fr 2fr 1fr)3frr[      z3fr 100px 20fr)r   r   r   z3fr 3fr 1fr)r   r   rS   r^   r_   	traitlets
TraitErrorpane_widthspane_heightsr   rU   rT   rV   s          r%   test_set_pane_widths_heightsz*TestAppLayout.test_set_pane_widths_heights  s   !!!~~'(%&
 ]]9//0 	;:CO	;]]9//0 	-$enCO	- ]]9//0 	<;C	<]]9//0 	. %u~C	. zz,,===zz//=@@@/zz,,0@@@@zz//=@@@#zz,,0@@@@zz//=@@@'	; 	;	- 	-	< 	<	. 	.s0   "
H
H
H"
H/HH"H,/H8N)rB   rC   rD   rE   rW   rY   rb   rk   rG   r'   r%   rI   rI      s    "5JV5p
9#Ar'   rI   c                   .    e Zd ZdZd Zd Zd Zd Zd Zy)TestGridspecLayoutztest GridspecLayoutc                 *   t        j                  t        j                        5  t	        j
                         }d d d        t        j                  t        j                        5  t	        j
                  dd      }d d d        t	        j
                  dd      }|j                  dk(  sJ |j                  dk(  sJ t        |j                        dk(  sJ t        |j                  d         dk(  sJ t	        j
                  dd      }|j                  dk(  sJ |j                  dk(  sJ t        j                  t        j                        5  t	        j
                  dd      }d d d        y # 1 sw Y   8xY w# 1 sw Y   xY w# 1 sw Y   y xY w)Nr   )n_rows	n_columnsrR   r   r   r   )
r^   r_   rg   rh   r   GridspecLayoutrp   rq   r   _grid_template_areasra   s     r%   	test_initzTestGridspecLayout.test_init+  sU   ]]9//0 	+((*C	+ ]]9//0 	A((a@C	A $$A;zzQ}}!!!3++,1113++A./1444$$Q*zzQ}}!!!]]9//0 	/((A.C	/ 	/!	+ 	+	A 	A	/ 	/s#   E/$E<F	/E9<F	Fc                    t        j                  dd      }t        j                         }t        j                         }t        j                         }t        j                         }||d<   |j                  j                  }||j
                  v sJ |j                  j                  dj                  |      k(  sJ ||d<   |j                  j                  }||k7  sJ ||j
                  v sJ |j                  j                  dj                  ||      k(  sJ ||d<   |j                  j                  }||k7  sJ ||k7  sJ ||j
                  v sJ |j                  j                  dj                  |||	      k(  sJ ||d<   |j                  j                  }	||	k7  sJ ||	k7  sJ ||j
                  v sJ ||j
                  vsJ |j                  j                  d
j                  |||	      k(  sJ y )Nr   r   r   r   z"{} . ."
". . .")ro   ro   z"{} . ."
". . {}"r   r   z"{b1} . ."
"{b3} . {b2}")b1b2b3z"{b1} . ."
"{b4} . {b2}")rx   ry   b4)r   rr   r   r   r   r   r   format)
r   r$   r    r!   r"   r#   button1_labelbutton2_labelbutton3_labelbutton4_labels
             r%   test_setitem_indexz%TestGridspecLayout.test_setitem_index?  s   $$Q*..".."..".."D	00#,,&&&zz--1H1O1OP]1^^^^F00---#,,&&&zz--1I1P1PQ^Q^2` ` 	` ` D	00------#,,&&&zz--1P1W1W[h[h[h 2X 2j j 	j j
 D	00------#,,&&&cll***zz--1P1W1W[h[h[h 2X 2j j 	j jr'   c                    t        j                  dd      }t        j                         }||d ddf<   t        |j                        dk(  sJ ||j                  v sJ |j
                  j                  }|j
                  j                  dj                  |      k(  sJ t        j                  dd      }t        j                         }t        j                         }||d ddd f<   t        |j                        dk(  sJ ||j                  v sJ |j
                  j                  }|j
                  j                  dj                  |      k(  sJ ||d ddd f<   t        |j                        dk(  sJ ||j                  v sJ |j
                  j                  }|j
                  j                  dj                  |      k(  sJ y )Nr   r   r   r   z"{b1} . ."
"{b1} . .")rx   z". {b1} {b1}"
". {b1} {b1}")	r   rr   r   r   r   r   r   r   r|   )r   r$   r    r}   r!   r~   s         r%   test_setitem_slicesz&TestGridspecLayout.test_setitem_slicesh  s   $$Q*.."BQBE
3<< A%%%#,,&&&00zz--1M1T1TXe1T1ffff$$Q*..".."BQBF3<< A%%%#,,&&&00zz--1S1Z1Z^k1Z1llll BQBF3<< A%%%#,,&&&00zz--1S1Z1Z^k1Z1llllr'   c                 t    t        j                  dd      }t        j                         }||d<   |d   |u sJ y)ztest retrieving widgetr   r   rv   N)r   rr   r   )r   r$   r    s      r%   test_getitem_indexz%TestGridspecLayout.test_getitem_index  s=     $$Q*.."D	4yG###r'   c                    t        j                  dd      }t        j                         }||dddf<   |dddf   |u sJ t        j                  dd      }t        j                         }t        j                         }||d<   ||d<   |d   |u sJ |d   |u sJ t        j                  t
        d      5  |dddf   }ddd       y# 1 sw Y   yxY w)	z#test retrieving widgets with slicesr   r   Nr   rv   rw   zThe slice spans)match)r   rr   r   r^   r_   r`   )r   r$   r    r!   buttons        r%   test_getitem_slicesz&TestGridspecLayout.test_getitem_slices  s     $$Q*.."BQBE
2A2q5zg%%%$$Q*..".."D	D	4yW$$$4yW$$$]]9,=> 	 !QZF	  	  	 s   6
C		CN)	rB   rC   rD   rE   rt   r   r   r   r   rG   r'   r%   rm   rm   (  s!    /('jRm>$ r'   rm   c                   N    e Zd ZdZ G d dej
                  e      Zd Zd Z	d Z
y)TestLayoutPropertiesz!test mixin with layout propertiesc                   H    e Zd Z ej                  ej                  d      Zy)"TestLayoutProperties.DummyTemplateT)
allow_noneN)rB   rC   rD   rg   Instancer   WidgetlocationrG   r'   r%   DummyTemplater     s    %9%%gnnFr'   r   c                     | j                  d      }|j                  dk(  sJ |j                  j                  dk(  sJ d|_        |j                  dk(  sJ |j                  j                  dk(  sJ y)zDtest whether respective layout traits are updated when traits changez100%)widthautoN)r   r   r   r   templates     r%   #test_layout_updated_on_trait_changez8TestLayoutProperties.test_layout_updated_on_trait_change  sr     %%F%3~~'''$$...~~'''$$...r'   c                     | j                  d      }|j                  dk(  sJ |j                  j                  dk(  sJ d|_        |j                  dk(  sJ |j                  j                  dk(  sJ y )Ntopr*   z
flex-startbottomzflex-end)r   r+   r   r   s     r%   test_align_items_extra_optionsz3TestLayoutProperties.test_align_items_extra_options  su    %%%%8##u,,,**l:::'##x///**j888r'   c                    | j                         }t        j                  j                  D ]  }||_        |j                  |k(  rJ  t	        j
                  t        j                        5  d|_        d d d        y # 1 sw Y   y xY w)Nzany default position)r   r   r+   valuesr^   r_   rg   rh   )r   prop_objprops      r%   test_validate_propertiesz-TestLayoutProperties.test_validate_properties  sx    %%'$0077 	0D#'H ''4///	0 ]]9//0 	:#9H 	: 	: 	:s   +A<<BN)rB   rC   rD   rE   r   GridBoxr   r   r   r   r   rG   r'   r%   r   r     s)    +G)9 G	/9:r'   r   )rE   unittestr   r   r^   rg   
ipywidgetsr   #ipywidgets.widgets.widget_templatesr   r   rI   rm   r   rG   r'   r%   <module>r      sW    !      @gA gATpAH pAd	|  | ~#:8 #:r'   