
    e                        d dl Z d dlZd dlZd dlZd dlZd dlZd dlZd dlZd dlm	Z	m
Z
 d dlZ ej        d           d dlmZ d dlmZ d dlmZmZmZ  ej                    r ej                    s ej        dd	           ej        j        Ze j        d
k    rdZndZe j                            dd          Zd e ej         dde                    z   Z!dZ"dZ#dZ$dZ%dZ&dZ'dZ(dZ) ej*        d          d             Z+d+dZ,d Z-ej        .                    dg d           d!             Z/ej        .                    dg d           d"             Z0ej        .                    dg d           d#             Z1ej        .                    dd$d%g          d&             Z2ej        .                    d'g d(          d)             Z3ej        .                    dd$d%g          d*             Z4dS ),    N)PIPEPopen
playwright)expect)config)BOKEH_LOCAL_WHLPANEL_LOCAL_WHLconvert_appszSkipped because pyodide wheels are not available for current version. Build wheels for pyodide using `python scripts/build_pyodide_wheels.py`.T)allow_module_levelwtiI i_ PYTEST_XDIST_WORKER0iP  z\D zw
import panel as pn
button = pn.widgets.Button()
pn.Row(button, pn.bind(lambda c: c, button.param.clicks)).servable();
zo
import panel as pn
slider = pn.widgets.FloatSlider()
pn.Row(slider, pn.bind(lambda v: v, slider)).servable();
z
import panel as pn
slider = pn.widgets.FloatSlider(start=0, end=10)
pn.state.location.sync(slider, ['value'])
pn.Row(slider, pn.bind(lambda v: v, slider)).servable();
z
import panel as pn
import pandas as pd
tabulator = pn.widgets.Tabulator(pd.DataFrame({'a': [1, 2, 3]}))

def on_click(e):
    tabulator.theme = 'fast'

button = pn.widgets.Button()
button.on_click(on_click)

pn.Row(button, tabulator).servable();
z
import pandas as pd
import sys
import panel as pn

df = pd.read_csv('https://raw.githubusercontent.com/holoviz/panel/main/examples/assets/occupancy.csv')
tabulator = pn.widgets.Tabulator(df)

tabulator.servable()
z
import panel as pn

png = pn.pane.PNG('https://upload.wikimedia.org/wikipedia/commons/4/47/PNG_transparency_demonstration_1.png', width=200)

png.servable()
z
import panel as pn

button = pn.widgets.Button()

button.servable()

if pn.state._is_pyodide:
    raise RuntimeError('This app is broken')
zj
import panel as pn
pn.config.raw_css = ['body { background-color: blue; }']
pn.Row('Output').servable();
module)scopec            
   #     K   t          j                    } t          j        | j                  dz                      d           	 t          j        t          t          j        z             n# t          j	        $ r Y nw xY w	 t          j        t          t          j        z             n# t          j	        $ r Y nw xY wt          t          j        ddt          t                    dt                    gt                     }t#          j        d           fd}|V  |                                 |                                 d S )	Nz	test.htmlz<html><body>Test</body></html>z-mzhttp.serverz--directory)stdout
   c                     t          j                    j        }| dz  }t          |d          5 }|                    |            d d d            n# 1 swxY w Y   |S )Nz.pyw)uuiduuid4hexopenwrite)appapp_nameapp_pathf	temp_paths       >lib/python3.11/site-packages/panel/tests/ui/io/test_convert.pyr   zhttp_serve.<locals>.write   s    :<<#(////(C   	AGGCLLL	 	 	 	 	 	 	 	 	 	 	 	 	 	 	s   AAA)tempfileTemporaryDirectorypathlibPathname
write_textshutilcopyr	   SameFileErrorr   r   sys
executablestr	HTTP_PORTr   timesleep	terminatewait)temp_dirprocessr   r    s      @r!   
http_server5   l   sX     *,,HX]++I(()IJJJOY1E%EFFFF   OY1E%EFFFF    	}c)nnmSQZ^^\ei  G 	JrNNN     KKKLLNNNNNs$   	'A1 1BB'B/ /C Cc           	          | |          }t          |g|j        f|ddddd| g |                    dfd           |                    dt           d|j        d d	          d
           dt          j         }t          |	                    d                    
                    |           |r<t          |	                    d                                        |t                     S )NFlocalT)runtime	build_pwa	prerenderpanel_versioninlineconsolec                 .                         |           S )N)append)msgmsgss    r!   <lambda>zwait_for_app.<locals>.<lambda>   s    4;;s#3#3     zhttp://127.0.0.1:/z.htmlzpn-loading pn-bodytimeout)r
   parentongotor.   r&   r   loading_spinnerr   locatorto_have_classnot_to_have_classTIMEOUT)	r5   r   pager8   r2   kwargsr   clsrA   s	           @r!   wait_for_apprT      s   z#H	
HO-4wt ?E  
 DGGI3333444IIG)GGhmCRC.@GGGHHH
361
3
3C
4<<  ..s333 Mt||F##$$66sG6LLLKrC   c                     t          | t          |dd           t          |                    d                                        dt
                     d S )Npyodide-workerF)r2   z.pn-loading-msgz RuntimeError: This app is brokenrG   )rT   	error_appr   rM   to_have_textrP   )r5   rQ   s     r!   'test_pyodide_test_error_handling_workerrY      sR    Y.>UKKKK
4<<)**++889[el8mmmmmrC   r8   )pyodidepyscriptrV   c                 V   t          | t          ||          }t          |                    d                                        d           |                    d           t          |                    d                                        d           d |D             g k    sJ d S )Npre:not([class])r   .bk-btn1c                 F    g | ]}|j         d k    d|j        d         v|S errorfaviconurltypelocation.0r@   s     r!   
<listcomp>z8test_pyodide_test_convert_button_app.<locals>.<listcomp>   6    ```C38w#6#69CLY^L_;_;_C;_;_;_rC   )rT   
button_appr   rM   rX   clickr5   rQ   r8   rA   s       r!   $test_pyodide_test_convert_button_appro      s    
Jg>>D
4<<*++,,99#>>>JJy
4<<*++,,99#>>>``4```dfffffffrC   c                    t          | t          ||          }t          |                    d                                        d           |                    d           |j                            d           t          |                    d                                        d           d |D             g k    sJ d S )Nr]   z0.0z.noUi-handle
ArrowRightz0.1c                 F    g | ]}|j         d k    d|j        d         v|S ra   re   rh   s     r!   rj   z8test_pyodide_test_convert_slider_app.<locals>.<listcomp>   rk   rC   )rT   
slider_appr   rM   rX   rm   keyboardpressrn   s       r!   $test_pyodide_test_convert_slider_apprv      s    
Jg>>D
4<<*++,,99%@@@JJ~M%%%
4<<*++,,99%@@@``4```dfffffffrC   c                     t          | t          ||           |                    d                              d          dk    sJ d S )NrF   zZ(element) =>
        window.getComputedStyle(element).getPropertyValue('background-color')zrgb(0, 0, 255))rT   
config_apprM   evaluate)r5   rQ   r8   s      r!   'test_pyodide_test_convert_custom_configrz      sd    Zw777<<(( *Q R RUef f f f f frC   rZ   rV   c                     t          | t          ||          }|                    d           |                    d           d |D             g k    sJ d S )Nr^      c                 F    g | ]}|j         d k    d|j        d         v|S ra   re   rh   s     r!   rj   z;test_pyodide_test_convert_tabulator_app.<locals>.<listcomp>   rk   rC   )rT   tabulator_apprm   wait_for_timeoutrn   s       r!   'test_pyodide_test_convert_tabulator_appr      sa    
M4AADJJy!``4```dfffffffrC   zruntime, http_patch))rZ   F)rZ   T)rV   F)rV   Tc                 >   t          | t          |||          }g d}|                    d          }t          |                              dt          |          z   d           |                                }|dd          |k    sJ d |D             g k    sJ d S )N)
http_patch)indexdateTemperatureHumidityLightCO2HumidityRatio	Occupancyz.tabulator-col-titler|   i`  rG   c                 F    g | ]}|j         d k    d|j        d         v|S ra   re   rh   s     r!   rj   z5test_pyodide_test_convert_csv_app.<locals>.<listcomp>   rk   rC   )rT   csv_apprM   r   to_have_countlenall_text_contents)r5   rQ   r8   r   rA   expected_titlestitless          r!   !test_pyodide_test_convert_csv_appr      s     
GT7zRRRDpppO\\011F
6NN  S%9%9!99 MMM%%''F!"":((((``4```dfffffffrC   c                     t          | t          ||          }t          |                    d                                        d           d |D             g k    sJ d S )Nimgr|   c                 F    g | ]}|j         d k    d|j        d         v|S ra   re   rh   s     r!   rj   z5test_pyodide_test_convert_png_app.<locals>.<listcomp>   rk   rC   )rT   png_appr   rM   r   rn   s       r!   !test_pyodide_test_convert_png_appr      sc    
GT7;;D
4<<--a000``4```dfffffffrC   )T)5osr$   rer(   r+   r"   r/   r   
subprocessr   r   pytestimportorskipplaywright.sync_apir   panel.configr   panel.io.convertr   r	   r
   is_fileskipmarkui
pytestmarkr&   rP   environget
_worker_idintsubr.   rl   rs   location_appr~   r   r   rW   rx   fixturer5   rT   rY   parametrizero   rv   rz   r   r   r    rC   r!   <module>r      s_   				  				  



    " " " " " " " "   L ! ! ! & & & & & &       K K K K K K K K K K!! &=o&=&?&? FK	\    [^
7d??GGGZ^^1377
CCub*55666	

			
 h   B   ,n n n $M$M$MNN	g 	g ON	g $M$M$MNN
g 
g ON
g $M$M$MNNf f ONf Y0@$ABBg g CBg     
g 
g 
g Y0@$ABBg g CBg g grC   