1
0
mirror of https://github.com/trezor/trezor-firmware.git synced 2025-07-04 13:52:35 +00:00

WIP - device tests for TT

This commit is contained in:
grdddj 2023-01-19 18:20:03 +01:00
parent 002976e16d
commit fcf7ac5133
10 changed files with 55 additions and 55 deletions

View File

@ -197,7 +197,8 @@ where
.set_page_count(complete_page_count);
// Placing a title and scrollbar in case the title is there
// (scrollbar will be active - counting pages - even when not placed and painted)
// (scrollbar will be active - counting pages - even when not placed and
// painted)
if self.title.is_some() {
let (title_area, scrollbar_area) =
title_area.split_right(self.scrollbar.inner().overall_width() + SCROLLBAR_SPACE);

View File

@ -92,7 +92,7 @@ where
{
fn trace(&self, t: &mut dyn crate::trace::Tracer) {
t.open("Frame");
t.field("title", &self.title);
t.title(&self.title.inner().text().as_ref());
t.field("content", &self.content);
t.close();
}
@ -186,7 +186,7 @@ where
{
fn trace(&self, t: &mut dyn crate::trace::Tracer) {
t.open("NotificationFrame");
t.field("title", &self.title);
t.title(&self.title.as_ref());
t.field("content", &self.content);
t.close();
}

View File

@ -32,14 +32,10 @@ if __debug__:
class RustLayout(ui.Layout):
# pylint: disable=super-init-not-called
def __init__(self, layout: Any, is_backup: bool = False):
def __init__(self, layout: Any):
self.layout = layout
self.timer = loop.Timer()
self.layout.attach_timer_fn(self.set_timer)
self.is_backup = is_backup
if __debug__ and self.is_backup:
self.notify_backup()
def set_timer(self, token: int, deadline: int) -> None:
self.timer.schedule(deadline, token)
@ -110,28 +106,8 @@ class RustLayout(ui.Layout):
if msg is not None:
raise ui.Result(msg)
if self.is_backup:
self.notify_backup()
notify_layout_change(self)
def notify_backup(self):
# TODO: delete this in favor of debuglink::LayoutContent::seed_words
from apps.debug import reset_current_words
content = "\n".join(self.read_content())
start = "< Paragraphs "
end = ">"
start_pos = content.index(start)
end_pos = content.index(end, start_pos)
words: list[str] = []
for line in content[start_pos + len(start) : end_pos].split("\n"):
line = line.strip()
if not line:
continue
space_pos = line.index(" ")
words.append(line[space_pos + 1 :])
reset_current_words.publish(words)
else:
def create_tasks(self) -> tuple[loop.AwaitableTask, ...]:

View File

@ -54,7 +54,6 @@ async def show_share_words(
title=title,
pages=pages,
),
is_backup=True,
),
"backup_words",
ButtonRequestType.ResetDevice,

View File

@ -199,6 +199,7 @@ class LayoutContent(LayoutBase):
********************
Icon:cancel [Cancel], --- [None], CONFIRM [Confirm]
"""
print(self.str_content)
title_separator = f"\n{20*'-'}\n"
btn_separator = f"\n{20*'*'}\n"
@ -222,6 +223,10 @@ class LayoutContent(LayoutBase):
def text_content(self) -> str:
"""Getting text that is displayed in the main part of the screen."""
raw = self.raw_content()
# print("self.str_content", self.str_content)
# print("raw", raw)
# replaved = raw.replace("\n", " ")
# print("replaved", replaved)
return raw.replace("\n", " ")
def raw_content(self) -> str:

View File

@ -80,7 +80,7 @@ def enter_shares(debug: "DebugLink", shares: list[str]) -> None:
remaining -= 1
expected_text = f"{remaining} more share"
assert "You have successfully recovered your wallet" in layout.text_content()
assert "You have finished recovering your wallet" in layout.text_content()
def finalize(debug: "DebugLink") -> None:

View File

@ -276,6 +276,7 @@ def click_through(
def read_and_confirm_mnemonic(
debug: "DebugLink", choose_wrong: bool = False
) -> Generator[None, "ButtonRequest", Optional[str]]:
# TODO: these are very similar, reuse some code
if debug.model == "T":
mnemonic = yield from read_and_confirm_mnemonic_tt(debug, choose_wrong)
elif debug.model == "R":
@ -303,16 +304,26 @@ def read_and_confirm_mnemonic_tt(
mnemonic: list[str] = []
br = yield
assert br.pages is not None
for _ in range(br.pages - 1):
mnemonic.extend(debug.read_reset_word().split())
# TODO: make the below better
for i in range(br.pages - 1):
if i == 0:
layout = debug.wait_layout()
else:
layout = debug.read_layout()
words = layout.seed_words()
mnemonic.extend(words)
debug.swipe_up(wait=True)
# last page is confirmation
mnemonic.extend(debug.read_reset_word().split())
# Last confirmation page is special
layout = debug.read_layout()
words = layout.seed_words()
mnemonic.extend(words)
debug.press_yes()
# check share
for _ in range(3):
for i in range(3):
index = debug.read_reset_word_pos()
if choose_wrong:
debug.input(mnemonic[(index + 1) % len(mnemonic)])

View File

@ -53,7 +53,7 @@ def test_sd_protect_unlock(client: Client):
def input_flow_enable_sd_protect():
yield # Enter PIN to unlock device
assert "< PinKeyboard >" == layout().str_content
assert "PinKeyboard" in layout().str_content
client.debug.input("1234")
yield # do you really want to enable SD protection
@ -61,7 +61,7 @@ def test_sd_protect_unlock(client: Client):
client.debug.press_yes()
yield # enter current PIN
assert "< PinKeyboard >" == layout().str_content
assert "PinKeyboard" in layout().str_content
client.debug.input("1234")
yield # you have successfully enabled SD protection
@ -75,23 +75,27 @@ def test_sd_protect_unlock(client: Client):
def input_flow_change_pin():
yield # do you really want to change PIN?
assert "CHANGE PIN" == layout().title()
assert "PIN SETTINGS" == layout().title()
client.debug.press_yes()
yield # enter current PIN
assert "< PinKeyboard >" == layout().str_content
assert "PinKeyboard" in layout().str_content
client.debug.input("1234")
yield # enter new PIN
assert "< PinKeyboard >" == layout().str_content
assert "PinKeyboard" in layout().str_content
client.debug.input("1234")
yield # re-enter to confirm
assert "re-enter to confirm" in layout().text_content()
client.debug.press_yes()
yield # enter new PIN again
assert "< PinKeyboard >" == layout().str_content
assert "PinKeyboard" in layout().str_content
client.debug.input("1234")
yield # Pin change successful
assert "You have successfully changed your PIN." in layout().text_content()
assert "PIN changed" in layout().text_content()
client.debug.press_yes()
with client:
@ -103,11 +107,11 @@ def test_sd_protect_unlock(client: Client):
def input_flow_change_pin_format():
yield # do you really want to change PIN?
assert "CHANGE PIN" == layout().title()
assert "PIN SETTINGS" == layout().title()
client.debug.press_yes()
yield # enter current PIN
assert "< PinKeyboard >" == layout().str_content
assert "PinKeyboard" in layout().str_content
client.debug.input("1234")
yield # SD card problem

View File

@ -993,7 +993,7 @@ def enter_recovery_seed_dry_run(debug: DebugLink, mnemonic: list[str]) -> Genera
debug.click(buttons.OK)
yield
assert "Select number of words" in debug.wait_layout().text_content()
assert "select the number of words" in debug.wait_layout().text_content()
debug.click(buttons.OK)
yield
@ -1005,12 +1005,12 @@ def enter_recovery_seed_dry_run(debug: DebugLink, mnemonic: list[str]) -> Genera
debug.click(buttons.grid34(index % 3, index // 3))
yield
assert "Enter recovery seed" in debug.wait_layout().text_content()
assert "enter your recovery seed" in debug.wait_layout().text_content()
debug.click(buttons.OK)
yield
for word in mnemonic:
assert debug.wait_layout().str_content == "< MnemonicKeyboard >"
assert "MnemonicKeyboard" in debug.wait_layout().str_content
debug.input(word)
@ -1076,7 +1076,7 @@ class InputFlowBip39RecoveryDryRunInvalid(InputFlowBase):
self.debug.click(buttons.OK)
yield # retry screen
assert "Select number of words" in self.layout().text_content()
assert "select the number of words" in self.layout().text_content()
self.debug.click(buttons.CANCEL)
yield
@ -1137,15 +1137,19 @@ def bip39_recovery_possible_pin(
# PIN when requested
if pin is not None:
yield
assert debug.wait_layout().str_content == "< PinKeyboard >"
assert "PinKeyboard" in debug.wait_layout().str_content
debug.input(pin)
yield
assert debug.wait_layout().str_content == "< PinKeyboard >"
assert "re-enter to confirm" in debug.wait_layout().text_content()
debug.press_yes()
yield
assert "PinKeyboard" in debug.wait_layout().str_content
debug.input(pin)
yield
assert "Select number of words" in debug.wait_layout().text_content()
assert "select the number of words" in debug.wait_layout().text_content()
debug.press_yes()
yield
@ -1153,17 +1157,17 @@ def bip39_recovery_possible_pin(
debug.input(str(len(mnemonic)))
yield
assert "Enter recovery seed" in debug.wait_layout().text_content()
assert "enter your recovery seed" in debug.wait_layout().text_content()
debug.press_yes()
yield
for word in mnemonic:
assert debug.wait_layout().str_content == "< MnemonicKeyboard >"
assert "MnemonicKeyboard" in debug.wait_layout().str_content
debug.input(word)
yield
assert (
"You have successfully recovered your wallet."
"You have finished recovering your wallet."
in debug.wait_layout().text_content()
)
debug.press_yes()

View File

@ -184,7 +184,7 @@ def test_recovery_multiple_resets(emulator: Emulator):
expected_text = "You have entered"
debug = _restart(device_handler, emulator)
assert "You have successfully recovered your wallet" in layout.text_content()
assert "You have finished recovering your wallet" in layout.text_content()
device_handler = BackgroundDeviceHandler(emulator.client)
debug = device_handler.debuglink()