From 1e6a322dbf47c1a48fc3b3fd0087050ecf808d3c Mon Sep 17 00:00:00 2001 From: Will McGugan Date: Thu, 23 May 2024 08:35:42 +0100 Subject: [PATCH] test --- src/textual/app.py | 5 ++++- tests/test_links.py | 21 +++++++++++++++++---- 2 files changed, 21 insertions(+), 5 deletions(-) diff --git a/src/textual/app.py b/src/textual/app.py index dbf0fcde7..dee96f5af 100644 --- a/src/textual/app.py +++ b/src/textual/app.py @@ -3051,10 +3051,13 @@ class App(Generic[ReturnType], DOMNode): Returns: A tuple of (node or None, action name, tuple of parameters). """ + print(action, default_namespace) if isinstance(action, tuple): destination, action_name, params = action else: destination, action_name, params = actions.parse(action) + + print("parse action", destination, action_name, params) action_target: DOMNode | None = None if destination: if destination not in self._action_targets: @@ -3101,7 +3104,7 @@ class App(Generic[ReturnType], DOMNode): Returns: True if the event has been handled. """ - + print("r", action, default_namespace) action_target, action_name, params = self._parse_action( action, self if default_namespace is None else default_namespace ) diff --git a/tests/test_links.py b/tests/test_links.py index e88c3f49d..37cb286a4 100644 --- a/tests/test_links.py +++ b/tests/test_links.py @@ -3,13 +3,24 @@ from textual.screen import Screen from textual.widgets import Label -async def test_links(): +async def test_links() -> None: """Regression test for https://github.com/Textualize/textual/issues/4536""" messages: list[str] = [] + class LinkLabel(Label): + def action_bell_message(self, message: str) -> None: + nonlocal messages + messages.append(f"label {message}") + class HomeScreen(Screen[None]): def compose(self) -> ComposeResult: - yield Label("[@click=app.bell_message('hi')]Ring the bell![/]") + yield LinkLabel("[@click=app.bell_message('foo')]Ring the bell![/]") + yield LinkLabel("[@click=screen.bell_message('bar')]Ring the bell![/]") + yield LinkLabel("[@click=bell_message('baz')]Ring the bell![/]") + + def action_bell_message(self, message: str) -> None: + nonlocal messages + messages.append(f"screen {message}") class ScreenNamespace(App[None]): def get_default_screen(self) -> HomeScreen: @@ -17,8 +28,10 @@ async def test_links(): def action_bell_message(self, message: str) -> None: nonlocal messages - messages.append(message) + messages.append(f"app {message}") async with ScreenNamespace().run_test() as pilot: await pilot.click(offset=(5, 0)) - assert messages == ["hi"] + await pilot.click(offset=(5, 1)) + await pilot.click(offset=(5, 2)) + assert messages == ["app foo", "screen bar", "label baz"]