mirror of
https://github.com/Textualize/textual.git
synced 2025-10-17 02:38:12 +03:00
Add failing tests.
This commit is contained in:
@@ -1,3 +1,5 @@
|
|||||||
|
import pytest
|
||||||
|
|
||||||
from textual.app import App
|
from textual.app import App
|
||||||
from textual.screen import Screen
|
from textual.screen import Screen
|
||||||
from textual.widget import Widget
|
from textual.widget import Widget
|
||||||
@@ -15,6 +17,28 @@ class ChildrenFocusableOnly(Widget, can_focus=False, can_focus_children=True):
|
|||||||
pass
|
pass
|
||||||
|
|
||||||
|
|
||||||
|
@pytest.fixture
|
||||||
|
def screen() -> Screen:
|
||||||
|
app = App()
|
||||||
|
app._set_active()
|
||||||
|
app.push_screen(Screen())
|
||||||
|
|
||||||
|
screen = app.screen
|
||||||
|
|
||||||
|
# The classes even/odd alternate along the focus chain.
|
||||||
|
# The classes in/out identify nested widgets.
|
||||||
|
screen._add_children(
|
||||||
|
Focusable(id="foo", classes="a"),
|
||||||
|
NonFocusable(id="bar"),
|
||||||
|
Focusable(Focusable(id="Paul", classes="c"), id="container1", classes="b"),
|
||||||
|
NonFocusable(Focusable(id="Jessica", classes="a"), id="container2"),
|
||||||
|
Focusable(id="baz", classes="b"),
|
||||||
|
ChildrenFocusableOnly(Focusable(id="child", classes="c")),
|
||||||
|
)
|
||||||
|
|
||||||
|
return screen
|
||||||
|
|
||||||
|
|
||||||
def test_focus_chain():
|
def test_focus_chain():
|
||||||
app = App()
|
app = App()
|
||||||
app._set_active()
|
app._set_active()
|
||||||
@@ -38,22 +62,7 @@ def test_focus_chain():
|
|||||||
assert focus_chain == ["foo", "container1", "Paul", "baz", "child"]
|
assert focus_chain == ["foo", "container1", "Paul", "baz", "child"]
|
||||||
|
|
||||||
|
|
||||||
def test_focus_next_and_previous():
|
def test_focus_next_and_previous(screen: Screen):
|
||||||
app = App()
|
|
||||||
app._set_active()
|
|
||||||
app.push_screen(Screen())
|
|
||||||
|
|
||||||
screen = app.screen
|
|
||||||
|
|
||||||
screen._add_children(
|
|
||||||
Focusable(id="foo"),
|
|
||||||
NonFocusable(id="bar"),
|
|
||||||
Focusable(Focusable(id="Paul"), id="container1"),
|
|
||||||
NonFocusable(Focusable(id="Jessica"), id="container2"),
|
|
||||||
Focusable(id="baz"),
|
|
||||||
ChildrenFocusableOnly(Focusable(id="child")),
|
|
||||||
)
|
|
||||||
|
|
||||||
assert screen.focus_next().id == "foo"
|
assert screen.focus_next().id == "foo"
|
||||||
assert screen.focus_next().id == "container1"
|
assert screen.focus_next().id == "container1"
|
||||||
assert screen.focus_next().id == "Paul"
|
assert screen.focus_next().id == "Paul"
|
||||||
@@ -64,3 +73,95 @@ def test_focus_next_and_previous():
|
|||||||
assert screen.focus_previous().id == "Paul"
|
assert screen.focus_previous().id == "Paul"
|
||||||
assert screen.focus_previous().id == "container1"
|
assert screen.focus_previous().id == "container1"
|
||||||
assert screen.focus_previous().id == "foo"
|
assert screen.focus_previous().id == "foo"
|
||||||
|
|
||||||
|
|
||||||
|
def test_focus_next_and_previous_with_type_selector(screen: Screen):
|
||||||
|
"""Move focus with a selector that matches the currently focused node."""
|
||||||
|
screen.set_focus(screen.query_one("#Paul"))
|
||||||
|
assert screen.focused.id == "Paul"
|
||||||
|
|
||||||
|
assert screen.focus_next(Focusable).id == "Jessica"
|
||||||
|
assert screen.focus_next(Focusable).id == "baz"
|
||||||
|
assert screen.focus_next(Focusable).id == "child"
|
||||||
|
|
||||||
|
assert screen.focus_previous(Focusable).id == "baz"
|
||||||
|
assert screen.focus_previous(Focusable).id == "Jessica"
|
||||||
|
assert screen.focus_previous(Focusable).id == "Paul"
|
||||||
|
assert screen.focus_previous(Focusable).id == "container1"
|
||||||
|
assert screen.focus_previous(Focusable).id == "foo"
|
||||||
|
|
||||||
|
|
||||||
|
def test_focus_next_and_previous_with_str_selector(screen: Screen):
|
||||||
|
"""Move focus with a selector that matches the currently focused node."""
|
||||||
|
screen.set_focus(screen.query_one("#foo"))
|
||||||
|
assert screen.focused.id == "foo"
|
||||||
|
|
||||||
|
assert screen.focus_next(".a").id == "Jessica"
|
||||||
|
assert screen.focus_next("Focusable").id == "baz"
|
||||||
|
|
||||||
|
assert screen.focus_previous(".b").id == "container1"
|
||||||
|
|
||||||
|
assert screen.focus_next("Focusable").id == "Paul"
|
||||||
|
assert screen.focus_next(".c").id == "child"
|
||||||
|
|
||||||
|
assert screen.focus_previous(".c").id == "Paul"
|
||||||
|
|
||||||
|
|
||||||
|
def test_focus_next_and_previous_with_type_selector_without_self():
|
||||||
|
"""Test moving the focus with a selector that does not match the currently focused node."""
|
||||||
|
app = App()
|
||||||
|
app._set_active()
|
||||||
|
app.push_screen(Screen())
|
||||||
|
|
||||||
|
screen = app.screen
|
||||||
|
|
||||||
|
from textual.containers import Horizontal, Vertical
|
||||||
|
from textual.widgets import Input, Label, Static
|
||||||
|
|
||||||
|
screen._add_children(
|
||||||
|
Vertical(
|
||||||
|
Horizontal(
|
||||||
|
Input(id="w3"),
|
||||||
|
Label(id="w4"),
|
||||||
|
Input(id="w5"),
|
||||||
|
Static(id="w6"),
|
||||||
|
Label(id="w7"),
|
||||||
|
id="w2",
|
||||||
|
),
|
||||||
|
Horizontal(
|
||||||
|
Static(id="w9"),
|
||||||
|
Label(id="w10"),
|
||||||
|
Static(id="w11"),
|
||||||
|
Input(id="w12"),
|
||||||
|
Input(id="w13"),
|
||||||
|
id="w8",
|
||||||
|
),
|
||||||
|
id="w1",
|
||||||
|
)
|
||||||
|
)
|
||||||
|
|
||||||
|
screen.set_focus(screen.query_one("#w3"))
|
||||||
|
assert screen.focused.id == "w3"
|
||||||
|
|
||||||
|
assert screen.focus_next(Static).id == "w6"
|
||||||
|
assert screen.focus_next(Label).id == "w7"
|
||||||
|
assert screen.focus_next(Input).id == "w12"
|
||||||
|
|
||||||
|
assert screen.focus_previous(Static).id == "w11"
|
||||||
|
assert screen.focus_previous(Label).id == "w10"
|
||||||
|
assert screen.focus_previous(Static).id == "w9"
|
||||||
|
assert screen.focus_previous(Input).id == "w5"
|
||||||
|
|
||||||
|
|
||||||
|
def test_focus_next_and_previous_with_str_selector_without_self(screen: Screen):
|
||||||
|
"""Test moving the focus with a selector that does not match the currently focused node."""
|
||||||
|
screen.set_focus(screen.query_one("#foo"))
|
||||||
|
assert screen.focused.id == "foo"
|
||||||
|
|
||||||
|
assert screen.focus_next(".c").id == "Paul"
|
||||||
|
assert screen.focus_next(".b").id == "baz"
|
||||||
|
assert screen.focus_next(".c").id == "child"
|
||||||
|
|
||||||
|
assert screen.focus_previous(".a").id == "Jessica"
|
||||||
|
assert screen.focus_previous(".b").id == "container1"
|
||||||
|
assert screen.focus_previous(".a").id == "foo"
|
||||||
|
|||||||
Reference in New Issue
Block a user