Навигация стрелками по полям диалогов
Оба диалога наследуются от FormScreen с action_walk: у Screen нет готового action_focus_next, поэтому биндинг стрелок на него молча ничего не делал. Вверх и вниз ходят по полям, влево и вправо остаются за курсором внутри поля ввода — биндинги намеренно без priority.
This commit is contained in:
@@ -998,3 +998,39 @@ def test_op_dialog_fits_and_keeps_buttons_visible(cfg, monkeypatch):
|
||||
await pilot.press("escape")
|
||||
await pilot.pause()
|
||||
asyncio.run(scenario())
|
||||
|
||||
|
||||
def test_arrows_walk_dialog_fields(cfg, monkeypatch):
|
||||
"""В диалоге операции стрелки должны ходить по полям, а не только Tab."""
|
||||
app = make_app(cfg, monkeypatch)
|
||||
|
||||
async def scenario():
|
||||
async with app.run_test(size=(120, 40)) as pilot:
|
||||
await settle(app, pilot)
|
||||
app.dashboard.open_db_op(autorestore=True)
|
||||
for _ in range(40):
|
||||
await pilot.pause()
|
||||
if isinstance(app.screen, tui.DbOpModal):
|
||||
break
|
||||
seen = []
|
||||
for _ in range(6):
|
||||
await pilot.press("down")
|
||||
await pilot.pause()
|
||||
seen.append(app.focused.id)
|
||||
assert len(set(seen)) > 1, f"фокус не двигается: {seen}"
|
||||
|
||||
back = app.focused.id
|
||||
await pilot.press("up")
|
||||
await pilot.pause()
|
||||
assert app.focused.id != back # вверх возвращает на предыдущее поле
|
||||
|
||||
# стрелки внутри поля ввода остаются за курсором: значение не должно меняться
|
||||
field = app.screen.query_one("#compress", Input)
|
||||
field.focus()
|
||||
await pilot.pause()
|
||||
await pilot.press("left", "right")
|
||||
await pilot.pause()
|
||||
assert field.value == "6"
|
||||
await pilot.press("escape")
|
||||
await pilot.pause()
|
||||
asyncio.run(scenario())
|
||||
|
||||
Reference in New Issue
Block a user