mirror of
https://github.com/Textualize/textual.git
synced 2025-10-17 02:38:12 +03:00
Merge branch 'main' into get-treenode-by-id
This commit is contained in:
File diff suppressed because one or more lines are too long
@@ -137,6 +137,7 @@ PATHS = [
|
||||
@pytest.mark.parametrize("file_name", PATHS)
|
||||
def test_css_property(file_name, snap_compare):
|
||||
path_to_app = STYLES_EXAMPLES_DIR / file_name
|
||||
Placeholder.reset_color_cycle()
|
||||
assert snap_compare(path_to_app)
|
||||
|
||||
|
||||
|
||||
@@ -3,7 +3,6 @@ import pytest
|
||||
from typing import Sequence
|
||||
from textual._immutable_sequence_view import ImmutableSequenceView
|
||||
|
||||
|
||||
def wrap(source: Sequence[int]) -> ImmutableSequenceView[int]:
|
||||
"""Wrap a sequence of integers inside an immutable sequence view."""
|
||||
return ImmutableSequenceView[int](source)
|
||||
|
||||
78
tests/tree/test_tree_messages.py
Normal file
78
tests/tree/test_tree_messages.py
Normal file
@@ -0,0 +1,78 @@
|
||||
from __future__ import annotations
|
||||
|
||||
from typing import Any
|
||||
from textual.app import App, ComposeResult
|
||||
from textual.widgets import Tree
|
||||
from textual.message import Message
|
||||
|
||||
|
||||
class MyTree(Tree[None]):
|
||||
pass
|
||||
|
||||
|
||||
class TreeApp(App[None]):
|
||||
"""Test tree app."""
|
||||
|
||||
def __init__(self, *args: Any, **kwargs: Any) -> None:
|
||||
super().__init__(*args, **kwargs)
|
||||
self.messages: list[str] = []
|
||||
|
||||
def compose(self) -> ComposeResult:
|
||||
"""Compose the child widgets."""
|
||||
yield MyTree("Root")
|
||||
|
||||
def on_mount(self) -> None:
|
||||
self.query_one(MyTree).root.add("Child")
|
||||
self.query_one(MyTree).focus()
|
||||
|
||||
def record(self, event: Message) -> None:
|
||||
self.messages.append(event.__class__.__name__)
|
||||
|
||||
def on_tree_node_selected(self, event: Tree.NodeSelected[None]) -> None:
|
||||
self.record(event)
|
||||
|
||||
def on_tree_node_expanded(self, event: Tree.NodeExpanded[None]) -> None:
|
||||
self.record(event)
|
||||
|
||||
def on_tree_node_collapsed(self, event: Tree.NodeCollapsed[None]) -> None:
|
||||
self.record(event)
|
||||
|
||||
def on_tree_node_highlighted(self, event: Tree.NodeHighlighted[None]) -> None:
|
||||
self.record(event)
|
||||
|
||||
|
||||
async def test_tree_node_selected_message() -> None:
|
||||
"""Selecting a node should result in a selected message being emitted."""
|
||||
async with TreeApp().run_test() as pilot:
|
||||
await pilot.press("enter")
|
||||
await pilot.pause(2 / 100)
|
||||
assert pilot.app.messages == ["NodeExpanded", "NodeSelected"]
|
||||
|
||||
|
||||
async def test_tree_node_expanded_message() -> None:
|
||||
"""Expanding a node should result in an expanded message being emitted."""
|
||||
async with TreeApp().run_test() as pilot:
|
||||
await pilot.press("enter")
|
||||
await pilot.pause(2 / 100)
|
||||
assert pilot.app.messages == ["NodeExpanded", "NodeSelected"]
|
||||
|
||||
|
||||
async def test_tree_node_collapsed_message() -> None:
|
||||
"""Collapsing a node should result in a collapsed message being emitted."""
|
||||
async with TreeApp().run_test() as pilot:
|
||||
await pilot.press("enter", "enter")
|
||||
await pilot.pause(2 / 100)
|
||||
assert pilot.app.messages == [
|
||||
"NodeExpanded",
|
||||
"NodeSelected",
|
||||
"NodeCollapsed",
|
||||
"NodeSelected",
|
||||
]
|
||||
|
||||
|
||||
async def test_tree_node_highlighted_message() -> None:
|
||||
"""Highlighting a node should result in a highlighted message being emitted."""
|
||||
async with TreeApp().run_test() as pilot:
|
||||
await pilot.press("enter", "down")
|
||||
await pilot.pause(2 / 100)
|
||||
assert pilot.app.messages == ["NodeExpanded", "NodeSelected", "NodeHighlighted"]
|
||||
Reference in New Issue
Block a user