1
0
mirror of https://github.com/trezor/trezor-firmware.git synced 2025-06-30 11:52:34 +00:00

feat(tests): allow for saving text layout of all screens during UI tests

[no changelog]
This commit is contained in:
grdddj 2023-01-18 11:57:32 +01:00
parent c77cdfcd02
commit a04bc35ef8
2 changed files with 25 additions and 6 deletions

View File

@ -312,17 +312,24 @@ class DebugLink:
hold_ms=hold_ms, hold_ms=hold_ms,
) )
# Optionally saving the textual screen output
if self.screen_text_file is not None:
layout = self.read_layout()
self.save_debug_screen(layout.lines)
ret = self._call(decision, nowait=not wait) ret = self._call(decision, nowait=not wait)
if ret is not None: if ret is not None:
return LayoutContent(ret.lines) return LayoutContent(ret.lines)
# Getting the current screen after the (nowait) decision
self.save_current_screen_if_relevant(wait=False)
return None return None
def save_current_screen_if_relevant(self, wait: bool = True) -> None:
"""Optionally saving the textual screen output."""
if self.screen_text_file is not None:
if wait:
layout = self.wait_layout()
else:
layout = self.read_layout()
self.save_debug_screen(layout.lines)
def save_debug_screen(self, lines: List[str]) -> None: def save_debug_screen(self, lines: List[str]) -> None:
if self.screen_text_file is not None: if self.screen_text_file is not None:
if not self.screen_text_file.exists(): if not self.screen_text_file.exists():
@ -503,6 +510,12 @@ class DebugUI:
self.debuglink.take_t1_screenshot_if_relevant() self.debuglink.take_t1_screenshot_if_relevant()
if self.input_flow is None: if self.input_flow is None:
# Only calling screen-saver when not in input-flow
# as it collides with wait-layout of input flows.
# All input flows call debuglink.input(), so
# recording their screens that way (as well as
# possible swipes below).
self.debuglink.save_current_screen_if_relevant(wait=True)
if br.code == messages.ButtonRequestType.PinEntry: if br.code == messages.ButtonRequestType.PinEntry:
self.debuglink.input(self.get_pin()) self.debuglink.input(self.get_pin())
else: else:
@ -774,7 +787,6 @@ class TrezorClientDebugLink(TrezorClient):
def __exit__(self, exc_type: Any, value: Any, traceback: Any) -> None: def __exit__(self, exc_type: Any, value: Any, traceback: Any) -> None:
__tracebackhide__ = True # for pytest # pylint: disable=W0612 __tracebackhide__ = True # for pytest # pylint: disable=W0612
self.watch_layout(False)
# copy expected/actual responses before clearing them # copy expected/actual responses before clearing them
expected_responses = self.expected_responses expected_responses = self.expected_responses
actual_responses = self.actual_responses actual_responses = self.actual_responses

View File

@ -158,6 +158,10 @@ def screen_recording(
screen_path.mkdir() screen_path.mkdir()
try: try:
if record_text_layout:
screen_text_file = screens_test_path / "screens.txt"
client.debug.watch_layout(True)
client.debug.set_screen_text_file(screen_text_file)
client.debug.start_recording(str(screen_path)) client.debug.start_recording(str(screen_path))
client.debug.set_screen_text_file(screen_text_file) client.debug.set_screen_text_file(screen_text_file)
yield yield
@ -165,6 +169,9 @@ def screen_recording(
# Wait for response to Initialize, which gives the emulator time to catch up # Wait for response to Initialize, which gives the emulator time to catch up
# and redraw the homescreen. Otherwise there's a race condition between that # and redraw the homescreen. Otherwise there's a race condition between that
# and stopping recording. # and stopping recording.
if record_text_layout:
client.debug.set_screen_text_file(None)
client.debug.watch_layout(False)
client.init_device() client.init_device()
client.debug.stop_recording() client.debug.stop_recording()
client.debug.set_screen_text_file(None) client.debug.set_screen_text_file(None)