1
0
Fork 0
textual-textarea/tests/functional_tests/test_open.py
Daniel Baumann c6da052ee9
Adding upstream version 0.15.0.
Signed-off-by: Daniel Baumann <daniel@debian.org>
2025-02-24 11:29:34 +01:00

70 lines
2.2 KiB
Python

from pathlib import Path
from typing import List
import pytest
from textual.app import App
from textual.message import Message
from textual.widgets import Input
from textual_textarea import TextAreaSaved, TextEditor
@pytest.mark.parametrize("filename", ["foo.py", "empty.py"])
@pytest.mark.asyncio
async def test_open(data_dir: Path, app: App, filename: str) -> None:
p = data_dir / "test_open" / filename
with open(p, "r") as f:
contents = f.read()
async with app.run_test() as pilot:
ta = app.query_one("#ta", expect_type=TextEditor)
assert ta.text == ""
starting_text = "123"
for key in starting_text:
await pilot.press(key)
assert ta.text == starting_text
await pilot.press("ctrl+o")
open_input = ta.query_one(Input)
assert open_input.id and "open" in open_input.id
assert open_input.has_focus
for key in str(p):
await pilot.press(key)
await pilot.press("enter")
assert ta.text == contents
assert ta.text_input is not None
assert ta.text_input.has_focus
# make sure the end of the buffer is formatted properly.
# these previously caused a crash.
await pilot.press("ctrl+end")
assert ta.selection.end[1] >= 0
await pilot.press("enter")
@pytest.mark.asyncio
async def test_save(app: App, tmp_path: Path) -> None:
TEXT = "select\n 1 as a,\n 2 as b,\n 'c' as c"
p = tmp_path / "text.sql"
print(p)
messages: List[Message] = []
async with app.run_test(message_hook=messages.append) as pilot:
ta = app.query_one("#ta", expect_type=TextEditor)
ta.text = TEXT
await pilot.press("ctrl+s")
save_input = ta.query_one(Input)
assert save_input.id and "save" in save_input.id
assert save_input.has_focus
save_input.value = str(p)
await pilot.press("enter")
await pilot.pause()
assert len(messages) > 1
assert Input.Submitted in [msg.__class__ for msg in messages]
assert TextAreaSaved in [msg.__class__ for msg in messages]
with open(p, "r") as f:
saved_text = f.read()
assert saved_text == TEXT