mirror of
https://github.com/Textualize/textual.git
synced 2025-10-17 02:38:12 +03:00
Up until now there doesn't seem to have been any unit tests aimed squarely at setting up bindings, as part of a running application, which are only about testing the bindings. As such there was no way of slotting in tests for how inheritance of bindings works. This starts that process with a view to testing how inheriting likely *should* work. See #1343 for some background to this.
78 lines
2.5 KiB
Python
78 lines
2.5 KiB
Python
import pytest
|
|
|
|
from textual.app import App, ComposeResult
|
|
from textual.widgets import Static
|
|
from textual.screen import Screen
|
|
from textual.binding import Binding
|
|
|
|
##############################################################################
|
|
class NoBindings(App[None]):
|
|
"""An app with zero bindings."""
|
|
|
|
|
|
async def test_just_app_no_bindings() -> None:
|
|
"""An app with no bindings should have no bindings, other than ctrl+c."""
|
|
async with NoBindings().run_test() as pilot:
|
|
assert list(pilot.app._bindings.keys.keys()) == ["ctrl+c"]
|
|
|
|
|
|
##############################################################################
|
|
class AlphaBinding(App[None]):
|
|
"""An app with a simple alpha key binding."""
|
|
|
|
BINDINGS = [Binding("a", "a", "a")]
|
|
|
|
|
|
async def test_just_app_alpha_binding() -> None:
|
|
"""An app with a single binding should have just the one binding."""
|
|
async with AlphaBinding().run_test() as pilot:
|
|
assert sorted(pilot.app._bindings.keys.keys()) == sorted(["ctrl+c", "a"])
|
|
|
|
|
|
##############################################################################
|
|
class ScreenNoBindings(Screen):
|
|
"""A screen with no added bindings."""
|
|
|
|
|
|
class AppWithScreenNoBindings(App[None]):
|
|
"""An app with no extra bindings but with a custom screen."""
|
|
|
|
SCREENS = {"main": ScreenNoBindings}
|
|
|
|
def on_mount(self) -> None:
|
|
self.push_screen("main")
|
|
|
|
|
|
@pytest.mark.xfail(
|
|
reason="Screen is incorrectly starting with bindings for movement keys [issue#1343]"
|
|
)
|
|
async def test_app_screen_no_bindings() -> None:
|
|
"""An screen with no bindings should have no bindings."""
|
|
async with AppWithScreenNoBindings().run_test() as pilot:
|
|
assert list(pilot.app.screen._bindings.keys.keys()) == []
|
|
|
|
|
|
##############################################################################
|
|
class ScreenWithBindings(Screen):
|
|
"""A screen with a simple alpha key binding."""
|
|
|
|
BINDINGS = [Binding("a", "a", "a")]
|
|
|
|
|
|
class AppWithScreenThatHasABinding(App[None]):
|
|
"""An app with no extra bindings but with a custom screen with a binding."""
|
|
|
|
SCREENS = {"main": ScreenWithBindings}
|
|
|
|
def on_mount(self) -> None:
|
|
self.push_screen("main")
|
|
|
|
|
|
@pytest.mark.xfail(
|
|
reason="Screen is incorrectly starting with bindings for movement keys [issue#1343]"
|
|
)
|
|
async def test_app_screen_with_bindings() -> None:
|
|
"""An app with a screen and a binding should only have ctrl+c as a binding."""
|
|
async with AppWithScreenThatHasABinding().run_test() as pilot:
|
|
assert list(pilot.app.screen._bindings.keys.keys()) == ["a"]
|