From 5328d774733feabbe5fc8e04a2c3e17a15dc7a8c Mon Sep 17 00:00:00 2001 From: Will McGugan Date: Thu, 18 Aug 2022 10:37:11 +0100 Subject: [PATCH] headless driver and tests --- src/textual/drivers/headless_driver.py | 17 +++++++++++++++ tests/test_auto_refresh.py | 30 ++++++++++++++++++++++++++ 2 files changed, 47 insertions(+) create mode 100644 src/textual/drivers/headless_driver.py create mode 100644 tests/test_auto_refresh.py diff --git a/src/textual/drivers/headless_driver.py b/src/textual/drivers/headless_driver.py new file mode 100644 index 000000000..ede6c4e8a --- /dev/null +++ b/src/textual/drivers/headless_driver.py @@ -0,0 +1,17 @@ +from __future__ import annotations + + +from ..driver import Driver + + +class HeadlessDriver(Driver): + """A do-nothing driver for testing.""" + + def start_application_mode(self) -> None: + pass + + def disable_input(self) -> None: + pass + + def stop_application_mode(self) -> None: + pass diff --git a/tests/test_auto_refresh.py b/tests/test_auto_refresh.py new file mode 100644 index 000000000..601c0aab8 --- /dev/null +++ b/tests/test_auto_refresh.py @@ -0,0 +1,30 @@ +from time import time + +from textual.app import App + + +class RefreshApp(App[float]): + def __init__(self): + self.count = 0 + super().__init__() + + def on_mount(self): + self.start = time() + self.auto_refresh = 0.1 + + def _automatic_refresh(self): + self.count += 1 + super()._automatic_refresh() + + def refresh(self, *, repaint: bool = True, layout: bool = False) -> None: + super().refresh(repaint=repaint, layout=layout) + if self.count == 3: + self.exit(time() - self.start) + + +def test_auto_refresh(): + app = RefreshApp() + + elapsed = app.run(quit_after=0.5, headless=True) + assert elapsed is not None + assert elapsed >= 0.3 and elapsed < 0.31