mirror of
https://github.com/Textualize/textual.git
synced 2025-10-17 02:38:12 +03:00
Testing that data inside DataTable events correct on click
This commit is contained in:
@@ -9,7 +9,6 @@ from .case import camel_to_snake
|
|||||||
from ._types import MessageTarget as MessageTarget
|
from ._types import MessageTarget as MessageTarget
|
||||||
|
|
||||||
if TYPE_CHECKING:
|
if TYPE_CHECKING:
|
||||||
from .widget import Widget
|
|
||||||
from .message_pump import MessagePump
|
from .message_pump import MessagePump
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
@@ -7,6 +7,7 @@ from textual.app import App
|
|||||||
from textual.coordinate import Coordinate
|
from textual.coordinate import Coordinate
|
||||||
from textual.events import Click
|
from textual.events import Click
|
||||||
from textual.message import Message
|
from textual.message import Message
|
||||||
|
from textual.message_pump import MessagePump
|
||||||
from textual.widgets import DataTable
|
from textual.widgets import DataTable
|
||||||
from textual.widgets._data_table import CellKey
|
from textual.widgets._data_table import CellKey
|
||||||
from textual.widgets.data_table import (
|
from textual.widgets.data_table import (
|
||||||
@@ -420,26 +421,99 @@ async def test_coordinate_to_cell_key_invalid_coordinate():
|
|||||||
table.coordinate_to_cell_key(Coordinate(9999, 9999))
|
table.coordinate_to_cell_key(Coordinate(9999, 9999))
|
||||||
|
|
||||||
|
|
||||||
async def test_datatable_on_click_cell_cursor():
|
def click_in_app(sender: MessagePump):
|
||||||
app = DataTableApp()
|
return Click(
|
||||||
async with app.run_test():
|
sender=sender,
|
||||||
table = app.query_one(DataTable)
|
|
||||||
click = Click(
|
|
||||||
sender=app,
|
|
||||||
x=1,
|
x=1,
|
||||||
y=1,
|
y=2,
|
||||||
delta_x=3,
|
delta_x=0,
|
||||||
delta_y=3,
|
delta_y=0,
|
||||||
button=0,
|
button=0,
|
||||||
shift=False,
|
shift=False,
|
||||||
meta=False,
|
meta=False,
|
||||||
ctrl=False,
|
ctrl=False,
|
||||||
)
|
)
|
||||||
|
|
||||||
|
|
||||||
|
async def test_datatable_on_click_cell_cursor():
|
||||||
|
app = DataTableApp()
|
||||||
|
async with app.run_test():
|
||||||
|
table = app.query_one(DataTable)
|
||||||
|
click = click_in_app(app)
|
||||||
|
column_key = table.add_column("ABC")
|
||||||
|
table.add_row("123")
|
||||||
|
row_key = table.add_row("456")
|
||||||
|
table.on_click(event=click)
|
||||||
|
await wait_for_idle(0)
|
||||||
|
# There's two CellHighlighted events since a cell is highlighted on initial load,
|
||||||
|
# then when we click, another cell is highlighted (and selected).
|
||||||
|
assert app.message_names == [
|
||||||
|
"CellHighlighted",
|
||||||
|
"CellHighlighted",
|
||||||
|
"CellSelected",
|
||||||
|
]
|
||||||
|
cell_highlighted_event: DataTable.CellHighlighted = app.messages[1]
|
||||||
|
assert cell_highlighted_event.sender is table
|
||||||
|
assert cell_highlighted_event.value == "456"
|
||||||
|
assert cell_highlighted_event.cell_key == CellKey(row_key, column_key)
|
||||||
|
assert cell_highlighted_event.coordinate == Coordinate(1, 0)
|
||||||
|
|
||||||
|
cell_selected_event: DataTable.CellSelected = app.messages[2]
|
||||||
|
assert cell_selected_event.sender is table
|
||||||
|
assert cell_selected_event.value == "456"
|
||||||
|
assert cell_selected_event.cell_key == CellKey(row_key, column_key)
|
||||||
|
assert cell_selected_event.coordinate == Coordinate(1, 0)
|
||||||
|
|
||||||
|
|
||||||
|
async def test_datatable_on_click_row_cursor():
|
||||||
|
app = DataTableApp()
|
||||||
|
async with app.run_test():
|
||||||
|
table = app.query_one(DataTable)
|
||||||
|
table.cursor_type = "row"
|
||||||
|
click = click_in_app(app)
|
||||||
table.add_column("ABC")
|
table.add_column("ABC")
|
||||||
table.add_row("123")
|
table.add_row("123")
|
||||||
|
row_key = table.add_row("456")
|
||||||
|
table.on_click(event=click)
|
||||||
|
await wait_for_idle(0)
|
||||||
|
assert app.message_names == ["RowHighlighted", "RowHighlighted", "RowSelected"]
|
||||||
|
|
||||||
|
row_highlighted: DataTable.RowHighlighted = app.messages[1]
|
||||||
|
assert row_highlighted.sender is table
|
||||||
|
assert row_highlighted.row_key == row_key
|
||||||
|
assert row_highlighted.cursor_row == 1
|
||||||
|
|
||||||
|
row_selected: DataTable.RowSelected = app.messages[2]
|
||||||
|
assert row_selected.sender is table
|
||||||
|
assert row_selected.row_key == row_key
|
||||||
|
assert row_highlighted.cursor_row == 1
|
||||||
|
|
||||||
|
|
||||||
|
async def test_datatable_on_click_column_cursor():
|
||||||
|
app = DataTableApp()
|
||||||
|
async with app.run_test():
|
||||||
|
table = app.query_one(DataTable)
|
||||||
|
table.cursor_type = "column"
|
||||||
|
click = click_in_app(app)
|
||||||
|
column_key = table.add_column("ABC")
|
||||||
|
table.add_row("123")
|
||||||
|
table.add_row("123")
|
||||||
table.on_click(event=click)
|
table.on_click(event=click)
|
||||||
await wait_for_idle(0)
|
await wait_for_idle(0)
|
||||||
assert app.message_names == ["CellHighlighted", "CellSelected"]
|
assert app.message_names == [
|
||||||
|
"ColumnHighlighted",
|
||||||
|
"ColumnHighlighted",
|
||||||
|
"ColumnSelected",
|
||||||
|
]
|
||||||
|
column_highlighted: DataTable.ColumnHighlighted = app.messages[1]
|
||||||
|
assert column_highlighted.sender is table
|
||||||
|
assert column_highlighted.column_key == column_key
|
||||||
|
assert column_highlighted.cursor_column == 0
|
||||||
|
|
||||||
|
column_selected: DataTable.ColumnSelected = app.messages[2]
|
||||||
|
assert column_selected.sender is table
|
||||||
|
assert column_selected.column_key == column_key
|
||||||
|
assert column_highlighted.cursor_column == 0
|
||||||
|
|
||||||
|
|
||||||
def test_key_equals_equivalent_string():
|
def test_key_equals_equivalent_string():
|
||||||
|
|||||||
Reference in New Issue
Block a user