diff --git a/tests/test_message_handling.py b/tests/test_message_handling.py new file mode 100644 index 0000000000..31edeb2cf4 --- /dev/null +++ b/tests/test_message_handling.py @@ -0,0 +1,45 @@ +from textual.app import App, ComposeResult +from textual.message import Message +from textual.widget import Widget + + +async def test_message_inheritance_namespace(): + """Inherited messages get their correct namespaces. + + Regression test for https://github.com/Textualize/textual/issues/1814. + """ + + class BaseWidget(Widget): + class Fired(Message): + pass + + def trigger(self) -> None: + self.post_message(self.Fired()) + + class Left(BaseWidget): + class Fired(BaseWidget.Fired): + pass + + class Right(BaseWidget): + class Fired(BaseWidget.Fired): + pass + + handlers_called = [] + + class MessageInheritanceApp(App[None]): + def compose(self) -> ComposeResult: + yield Left() + yield Right() + + def on_left_fired(self): + handlers_called.append("left") + + def on_right_fired(self): + handlers_called.append("right") + + app = MessageInheritanceApp() + async with app.run_test(): + app.query_one(Left).trigger() + app.query_one(Right).trigger() + + assert handlers_called == ["left", "right"]