import asyncio from rich.text import Text from textual.app import App, ComposeResult from textual.widgets import DataTable class TableApp(App): def compose(self) -> ComposeResult: yield DataTable() async def test_table_clear() -> None: """Check DataTable.clear""" app = TableApp() async with app.run_test() as pilot: table = app.query_one(DataTable) table.add_columns("foo", "bar") assert table.row_count == 0 table.add_row("Hello", "World!") assert [col.label for col in table.columns] == [Text("foo"), Text("bar")] assert table.data == {0: ["Hello", "World!"]} assert table.row_count == 1 table.clear() assert [col.label for col in table.columns] == [Text("foo"), Text("bar")] assert table.data == {} assert table.row_count == 0 async def test_table_clear_with_columns() -> None: """Check DataTable.clear(columns=True)""" app = TableApp() async with app.run_test() as pilot: table = app.query_one(DataTable) table.add_columns("foo", "bar") assert table.row_count == 0 table.add_row("Hello", "World!") assert [col.label for col in table.columns] == [Text("foo"), Text("bar")] assert table.data == {0: ["Hello", "World!"]} assert table.row_count == 1 table.clear(columns=True) assert [col.label for col in table.columns] == [] assert table.data == {} assert table.row_count == 0 async def test_table_add_row() -> None: app = TableApp() async with app.run_test(): table = app.query_one(DataTable) table.add_columns("foo", "bar") assert table.columns[0].width == 3 assert table.columns[1].width == 3 table.add_row("Hello", "World!") await asyncio.sleep(0) assert table.columns[0].content_width == 5 assert table.columns[1].content_width == 6 table.add_row("Hello World!!!", "fo") await asyncio.sleep(0) assert table.columns[0].content_width == 14 assert table.columns[1].content_width == 6