49 lines
1.8 KiB
Python
49 lines
1.8 KiB
Python
"""Let's ensure the `prevent_default_tab` and `prevent_default_enter` options work as expected."""
|
|
|
|
from __future__ import annotations
|
|
|
|
from typing import Any
|
|
from textual.app import App, ComposeResult
|
|
from textual.widgets import Button, Input
|
|
from textual_autocomplete import AutoComplete
|
|
|
|
|
|
class PreventDefaultTab(App[None]):
|
|
"""Test that the default tab key is permitted if `prevent_default_tab` is `False`."""
|
|
|
|
def __init__(
|
|
self, prevent_default_tab: bool = False, *args: Any, **kwargs: Any
|
|
) -> None:
|
|
super().__init__(*args, **kwargs)
|
|
self.prevent_default_tab = prevent_default_tab
|
|
|
|
def compose(self) -> ComposeResult:
|
|
input = Input(placeholder="Type something...")
|
|
input.cursor_blink = False
|
|
yield input
|
|
yield AutoComplete(
|
|
input,
|
|
candidates=["foo", "bar"],
|
|
prevent_default_tab=self.prevent_default_tab,
|
|
)
|
|
yield Button("I'm here to test focus.")
|
|
|
|
|
|
async def test_switch_focus_on_completion_via_tab_key__prevent_default_tab_is_false():
|
|
"""The default tab key should not be prevented if `prevent_default_tab` is `False`."""
|
|
app = PreventDefaultTab(prevent_default_tab=False)
|
|
async with app.run_test() as pilot:
|
|
await pilot.press("f", "tab")
|
|
assert app.query_one(Input).value == "foo"
|
|
assert app.query_one(Button).has_focus
|
|
|
|
|
|
async def test_no_focus_switch_via_tab_key__prevent_default_tab_is_true():
|
|
"""`prevent_default_tab` is `True`, so focus should switch on completion with tab."""
|
|
app = PreventDefaultTab(prevent_default_tab=True)
|
|
async with app.run_test() as pilot:
|
|
await pilot.press("f", "tab")
|
|
input_widget = app.query_one(Input)
|
|
assert input_widget.value == "foo"
|
|
assert input_widget.has_focus
|
|
assert not app.query_one(Button).has_focus
|