Keep black happy (again)

Need to sort out the pre-commit hooks for this machine
This commit is contained in:
Dave Pearson
2022-12-13 09:48:09 +00:00
parent c52ea0bdf2
commit 4955a28ab1

View File

@@ -8,16 +8,7 @@ from textual.binding import Binding
############################################################################## ##############################################################################
# These are the movement keys within Textual; they kind of have a special # These are the movement keys within Textual; they kind of have a special
# status in that they will get bound to movement-related methods. # status in that they will get bound to movement-related methods.
MOVEMENT_KEYS = [ MOVEMENT_KEYS = ["up", "down", "left", "right", "home", "end", "pageup", "pagedown"]
"up",
"down",
"left",
"right",
"home",
"end",
"pageup",
"pagedown"
]
############################################################################## ##############################################################################
class NoBindings(App[None]): class NoBindings(App[None]):
@@ -90,6 +81,7 @@ async def test_app_screen_with_bindings() -> None:
async with AppWithScreenThatHasABinding().run_test() as pilot: async with AppWithScreenThatHasABinding().run_test() as pilot:
assert list(pilot.app.screen._bindings.keys.keys()) == ["a"] assert list(pilot.app.screen._bindings.keys.keys()) == ["a"]
############################################################################## ##############################################################################
class NoBindingsAndStaticWidgetNoBindings(App[None]): class NoBindingsAndStaticWidgetNoBindings(App[None]):
"""An app with no bindings, enclosing a widget with no bindings.""" """An app with no bindings, enclosing a widget with no bindings."""
@@ -97,6 +89,7 @@ class NoBindingsAndStaticWidgetNoBindings(App[None]):
def compose(self) -> ComposeResult: def compose(self) -> ComposeResult:
yield Static("Poetry! They should have sent a poet.") yield Static("Poetry! They should have sent a poet.")
@pytest.mark.xfail( @pytest.mark.xfail(
reason="Static is incorrectly starting with bindings for movement keys [issue#1343]" reason="Static is incorrectly starting with bindings for movement keys [issue#1343]"
) )
@@ -106,9 +99,9 @@ async def test_just_app_no_bindings_widget_no_bindings() -> None:
assert list(pilot.app._bindings.keys.keys()) == ["ctrl+c"] assert list(pilot.app._bindings.keys.keys()) == ["ctrl+c"]
assert list(pilot.app.screen.query_one(Static)._bindings.keys.keys()) == [] assert list(pilot.app.screen.query_one(Static)._bindings.keys.keys()) == []
############################################################################## ##############################################################################
class AppKeyRecorder(App[None]): class AppKeyRecorder(App[None]):
def __init__(self) -> None: def __init__(self) -> None:
super().__init__() super().__init__()
self.pressed_keys: list[str] = [] self.pressed_keys: list[str] = []
@@ -116,19 +109,22 @@ class AppKeyRecorder(App[None]):
async def action_record(self, key: str) -> None: async def action_record(self, key: str) -> None:
self.pressed_keys.append(key) self.pressed_keys.append(key)
############################################################################## ##############################################################################
class AppWithMovementKeysBound(AppKeyRecorder): class AppWithMovementKeysBound(AppKeyRecorder):
BINDINGS=[ BINDINGS = [
Binding("x","record('x')","x"), Binding("x", "record('x')", "x"),
*[Binding(key,f"record({key}')",key) for key in MOVEMENT_KEYS] *[Binding(key, f"record({key}')", key) for key in MOVEMENT_KEYS],
] ]
async def test_pressing_alpha_on_app() -> None: async def test_pressing_alpha_on_app() -> None:
"""Test that pressing the an alpha key, when it's bound on the app, results in an action fire.""" """Test that pressing the an alpha key, when it's bound on the app, results in an action fire."""
async with AppWithMovementKeysBound().run_test() as pilot: async with AppWithMovementKeysBound().run_test() as pilot:
await pilot.press(*"xxxxx") await pilot.press(*"xxxxx")
assert "".join(pilot.app.pressed_keys) == "xxxxx" assert "".join(pilot.app.pressed_keys) == "xxxxx"
@pytest.mark.xfail( @pytest.mark.xfail(
reason="Up key isn't firing bound action on an app due to key inheritence of its screen [issue#1343]" reason="Up key isn't firing bound action on an app due to key inheritence of its screen [issue#1343]"
) )
@@ -138,16 +134,18 @@ async def test_pressing_movement_keys_app() -> None:
await pilot.press("x", *MOVEMENT_KEYS, "x") await pilot.press("x", *MOVEMENT_KEYS, "x")
assert pilot.app.pressed_keys == ["x", *MOVEMENT_KEYS, "x"] assert pilot.app.pressed_keys == ["x", *MOVEMENT_KEYS, "x"]
############################################################################## ##############################################################################
class WidgetWithBindings(Static,can_focus=True): class WidgetWithBindings(Static, can_focus=True):
"""A widget that has its own bindings for the movement keys.""" """A widget that has its own bindings for the movement keys."""
BINDINGS=[Binding(key,f"local_record('{key}')",key) for key in MOVEMENT_KEYS] BINDINGS = [Binding(key, f"local_record('{key}')", key) for key in MOVEMENT_KEYS]
async def action_local_record(self, key:str) -> None: async def action_local_record(self, key: str) -> None:
# Sneaky forward reference. Just for the purposes of testing. # Sneaky forward reference. Just for the purposes of testing.
await self.app.action_record(f"locally_{key}") await self.app.action_record(f"locally_{key}")
class AppWithWidgetWithBindings(AppKeyRecorder): class AppWithWidgetWithBindings(AppKeyRecorder):
"""A test app that composes with a widget that has movement bindings.""" """A test app that composes with a widget that has movement bindings."""
@@ -157,6 +155,7 @@ class AppWithWidgetWithBindings(AppKeyRecorder):
def on_mount(self) -> None: def on_mount(self) -> None:
self.query_one(WidgetWithBindings).focus() self.query_one(WidgetWithBindings).focus()
async def test_focused_child_widget_with_movement_bindings() -> None: async def test_focused_child_widget_with_movement_bindings() -> None:
"""A focused child widget with movement bindings should handle its own actions.""" """A focused child widget with movement bindings should handle its own actions."""
async with AppWithWidgetWithBindings().run_test() as pilot: async with AppWithWidgetWithBindings().run_test() as pilot: