diff --git a/panel/tests/widgets/test_tables.py b/panel/tests/widgets/test_tables.py index bc7f8da089..cdaef99e4c 100644 --- a/panel/tests/widgets/test_tables.py +++ b/panel/tests/widgets/test_tables.py @@ -23,6 +23,7 @@ from panel.depends import bind from panel.io.server import serve +from panel.io.state import set_curdoc from panel.models.tabulator import CellClickEvent, TableEditEvent from panel.widgets import Button, TextInput from panel.widgets.tables import DataFrame, Tabulator @@ -1693,6 +1694,8 @@ def test_tabulator_patch_event(): table._process_event(event) assert values[-1] == (col, row, df[col].iloc[row]) + + def test_server_edit_event(): df = makeMixedDataFrame() table = Tabulator(df) @@ -1735,6 +1738,42 @@ def test_tabulator_cell_click_event(): table._process_event(event) assert values[-1] == (col, row, data[col].iloc[row]) +def test_server_cell_click_async_event(): + df = makeMixedDataFrame() + table = Tabulator(df) + + counts = [] + async def cb(event, count=[0]): + import asyncio + count[0] += 1 + counts.append(count[0]) + await asyncio.sleep(1) + count[0] -= 1 + + table.on_click(cb) + + port = 7002 + serve(table, port=port, threaded=True, show=False) + + # Wait for server to start + time.sleep(1) + + requests.get(f"http://localhost:{port}/") + + data = df.reset_index() + doc = list(table._models.values())[0][0].document + with set_curdoc(doc): + for col in data.columns: + for row in range(len(data)): + event = CellClickEvent(model=None, column=col, row=row) + table._process_event(event) + + # Wait for callbacks to be scheduled + time.sleep(2) + + # Ensure multiple callbacks started concurrently + assert max(counts) > 1 + def test_tabulator_pagination_remote_cell_click_event(): df = makeMixedDataFrame() table = Tabulator(df, pagination='remote', page_size=2)