"""General behavioral/functional tests. Run with `pytest tests/test_behavior.py`, or `pytest` to run all tests. """ from pyfakefs.fake_filesystem import FakeFilesystem from textual.events import Paste from textual_paint.char_input import CharInput from textual_paint.paint import PaintApp async def test_char_input_paste(): app = PaintApp() async with app.run_test() as pilot: # type: ignore char_input = app.query_one(CharInput) char_input.post_message(Paste("Hello, world!")) await pilot.pause() assert char_input.value == "!" async def test_file_drag_and_drop(my_fs: FakeFilesystem): # File drag and drop is treated as a paste in the terminal. # CharInput often has focus, and needs to propagate the event to the app. my_fs.create_file("/test_file_to_load.txt", contents="Hello, world!") app = PaintApp() async with app.run_test() as pilot: # type: ignore char_input = app.query_one(CharInput) char_input.post_message(Paste("/test_file_to_load.txt")) await pilot.pause() # TODO: fix double handling of Paste event # It should ONLY load the file in this case, not also paste the filename into the char input. # assert char_input.value == " " # default, may become full block (█) in the future assert app.query_one("Canvas").render_line(0).text == "Hello, world!"