mirror of
https://github.com/trezor/trezor-firmware.git
synced 2025-07-07 15:18:08 +00:00
WIP - click and persistence tests for TT
This commit is contained in:
parent
fcf7ac5133
commit
a37cb1c49b
@ -198,8 +198,8 @@ where
|
|||||||
{
|
{
|
||||||
fn trace(&self, t: &mut dyn crate::trace::Tracer) {
|
fn trace(&self, t: &mut dyn crate::trace::Tracer) {
|
||||||
t.open("SwipePage");
|
t.open("SwipePage");
|
||||||
t.field("active_page", &self.scrollbar.active_page);
|
t.kw_pair("active_page", &self.scrollbar.active_page);
|
||||||
t.field("page_count", &self.scrollbar.page_count);
|
t.kw_pair("page_count", &self.scrollbar.page_count);
|
||||||
t.field("content", &self.content);
|
t.field("content", &self.content);
|
||||||
t.field("buttons", &self.buttons);
|
t.field("buttons", &self.buttons);
|
||||||
t.close();
|
t.close();
|
||||||
|
@ -1169,10 +1169,15 @@ async def confirm_set_new_pin(
|
|||||||
br_code=br_code,
|
br_code=br_code,
|
||||||
)
|
)
|
||||||
|
|
||||||
|
if "wipe_code" in br_type:
|
||||||
|
title = "WIPE CODE INFO"
|
||||||
|
else:
|
||||||
|
title = "PIN INFORMATION"
|
||||||
|
|
||||||
return await confirm_action(
|
return await confirm_action(
|
||||||
ctx,
|
ctx,
|
||||||
br_type,
|
br_type,
|
||||||
title="PIN INFO",
|
title=title,
|
||||||
description="\n\n".join(information),
|
description="\n\n".join(information),
|
||||||
br_code=br_code,
|
br_code=br_code,
|
||||||
)
|
)
|
||||||
|
@ -174,6 +174,17 @@ class LayoutButtons(LayoutBase):
|
|||||||
|
|
||||||
return None
|
return None
|
||||||
|
|
||||||
|
def select_word_button_texts(self) -> List[str]:
|
||||||
|
"""Get text of all buttons in the layout.
|
||||||
|
|
||||||
|
Example button: "< Button text : LADYBUG >"
|
||||||
|
-> ["LADYBUG"]
|
||||||
|
|
||||||
|
Only for TT.
|
||||||
|
"""
|
||||||
|
print("self.str_content", self.str_content)
|
||||||
|
return re.findall(r"< Button +text : +(.*?) +>", self.str_content)
|
||||||
|
|
||||||
|
|
||||||
class LayoutContent(LayoutBase):
|
class LayoutContent(LayoutBase):
|
||||||
"""Stores content of a layout as returned from Trezor.
|
"""Stores content of a layout as returned from Trezor.
|
||||||
@ -223,10 +234,6 @@ class LayoutContent(LayoutBase):
|
|||||||
def text_content(self) -> str:
|
def text_content(self) -> str:
|
||||||
"""Getting text that is displayed in the main part of the screen."""
|
"""Getting text that is displayed in the main part of the screen."""
|
||||||
raw = self.raw_content()
|
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", " ")
|
return raw.replace("\n", " ")
|
||||||
|
|
||||||
def raw_content(self) -> str:
|
def raw_content(self) -> str:
|
||||||
|
@ -62,7 +62,7 @@ def enter_share(
|
|||||||
if legacy_ui:
|
if legacy_ui:
|
||||||
assert layout.str_content == "Slip39Keyboard"
|
assert layout.str_content == "Slip39Keyboard"
|
||||||
else:
|
else:
|
||||||
assert layout.str_content == "< MnemonicKeyboard >"
|
assert "MnemonicKeyboard" in layout.str_content
|
||||||
|
|
||||||
for word in share.split(" "):
|
for word in share.split(" "):
|
||||||
layout = enter_word(debug, word, is_slip39=True)
|
layout = enter_word(debug, word, is_slip39=True)
|
||||||
|
@ -58,13 +58,13 @@ def read_words(debug: "DebugLink", is_advanced: bool = False) -> list[str]:
|
|||||||
|
|
||||||
def confirm_words(debug: "DebugLink", words: list[str]) -> None:
|
def confirm_words(debug: "DebugLink", words: list[str]) -> None:
|
||||||
layout = debug.wait_layout()
|
layout = debug.wait_layout()
|
||||||
assert "Select word" in layout.str_content
|
assert "Select word" in layout.text_content()
|
||||||
for _ in range(3):
|
for _ in range(3):
|
||||||
# "Select word 3 of 20"
|
# "Select word 3 of 20"
|
||||||
# ^
|
# ^
|
||||||
word_pos = int(layout.text_content().split()[2])
|
word_pos = int(layout.text_content().split()[2])
|
||||||
# Unifying both the buttons and words to lowercase
|
# Unifying both the buttons and words to lowercase
|
||||||
btn_texts = [text.lower() for text in layout.buttons()]
|
btn_texts = [text.lower() for text in layout.buttons.select_word_button_texts()]
|
||||||
wanted_word = words[word_pos - 1].lower()
|
wanted_word = words[word_pos - 1].lower()
|
||||||
button_pos = btn_texts.index(wanted_word)
|
button_pos = btn_texts.index(wanted_word)
|
||||||
layout = debug.click(buttons.RESET_WORD_CHECK[button_pos], wait=True)
|
layout = debug.click(buttons.RESET_WORD_CHECK[button_pos], wait=True)
|
||||||
|
@ -46,7 +46,7 @@ def set_autolock_delay(device_handler: "BackgroundDeviceHandler", delay_ms: int)
|
|||||||
device_handler.run(device.apply_settings, auto_lock_delay_ms=delay_ms)
|
device_handler.run(device.apply_settings, auto_lock_delay_ms=delay_ms)
|
||||||
|
|
||||||
layout = debug.wait_layout()
|
layout = debug.wait_layout()
|
||||||
assert layout.str_content == "< PinKeyboard >"
|
assert "PinKeyboard" in layout.str_content
|
||||||
debug.input("1234")
|
debug.input("1234")
|
||||||
|
|
||||||
layout = debug.wait_layout()
|
layout = debug.wait_layout()
|
||||||
@ -131,7 +131,7 @@ def test_dryrun_locks_at_number_of_words(device_handler: "BackgroundDeviceHandle
|
|||||||
layout = debug.wait_layout()
|
layout = debug.wait_layout()
|
||||||
assert "Do you really want to check the recovery seed?" in layout.text_content()
|
assert "Do you really want to check the recovery seed?" in layout.text_content()
|
||||||
layout = debug.click(buttons.OK, wait=True)
|
layout = debug.click(buttons.OK, wait=True)
|
||||||
assert layout.str_content == "< PinKeyboard >"
|
assert "PinKeyboard" in layout.str_content
|
||||||
layout = debug.input(PIN4, wait=True)
|
layout = debug.input(PIN4, wait=True)
|
||||||
assert "select the number of words " in layout.text_content()
|
assert "select the number of words " in layout.text_content()
|
||||||
|
|
||||||
@ -144,7 +144,7 @@ def test_dryrun_locks_at_number_of_words(device_handler: "BackgroundDeviceHandle
|
|||||||
|
|
||||||
# unlock
|
# unlock
|
||||||
layout = debug.click(buttons.OK, wait=True)
|
layout = debug.click(buttons.OK, wait=True)
|
||||||
assert layout.str_content == "< PinKeyboard >"
|
assert "PinKeyboard" in layout.str_content
|
||||||
layout = debug.input(PIN4, wait=True)
|
layout = debug.input(PIN4, wait=True)
|
||||||
|
|
||||||
# we are back at homescreen
|
# we are back at homescreen
|
||||||
@ -162,7 +162,7 @@ def test_dryrun_locks_at_word_entry(device_handler: "BackgroundDeviceHandler"):
|
|||||||
layout = debug.wait_layout()
|
layout = debug.wait_layout()
|
||||||
assert "Do you really want to check the recovery seed?" in layout.text_content()
|
assert "Do you really want to check the recovery seed?" in layout.text_content()
|
||||||
layout = debug.click(buttons.OK, wait=True)
|
layout = debug.click(buttons.OK, wait=True)
|
||||||
assert layout.str_content == "< PinKeyboard >"
|
assert "PinKeyboard" in layout.str_content
|
||||||
layout = debug.input(PIN4, wait=True)
|
layout = debug.input(PIN4, wait=True)
|
||||||
|
|
||||||
# select 20 words
|
# select 20 words
|
||||||
@ -170,7 +170,7 @@ def test_dryrun_locks_at_word_entry(device_handler: "BackgroundDeviceHandler"):
|
|||||||
|
|
||||||
layout = debug.click(buttons.OK, wait=True)
|
layout = debug.click(buttons.OK, wait=True)
|
||||||
# make sure keyboard locks
|
# make sure keyboard locks
|
||||||
assert layout.str_content == "< MnemonicKeyboard >"
|
assert "MnemonicKeyboard" in layout.str_content
|
||||||
time.sleep(10.1)
|
time.sleep(10.1)
|
||||||
layout = debug.wait_layout()
|
layout = debug.wait_layout()
|
||||||
assert layout.str_content.startswith("< Lockscreen")
|
assert layout.str_content.startswith("< Lockscreen")
|
||||||
@ -189,7 +189,7 @@ def test_dryrun_enter_word_slowly(device_handler: "BackgroundDeviceHandler"):
|
|||||||
layout = debug.wait_layout()
|
layout = debug.wait_layout()
|
||||||
assert "Do you really want to check the recovery seed?" in layout.text_content()
|
assert "Do you really want to check the recovery seed?" in layout.text_content()
|
||||||
layout = debug.click(buttons.OK, wait=True)
|
layout = debug.click(buttons.OK, wait=True)
|
||||||
assert layout.str_content == "< PinKeyboard >"
|
assert "PinKeyboard" in layout.str_content
|
||||||
layout = debug.input(PIN4, wait=True)
|
layout = debug.input(PIN4, wait=True)
|
||||||
|
|
||||||
# select 20 words
|
# select 20 words
|
||||||
@ -197,11 +197,11 @@ def test_dryrun_enter_word_slowly(device_handler: "BackgroundDeviceHandler"):
|
|||||||
|
|
||||||
layout = debug.click(buttons.OK, wait=True)
|
layout = debug.click(buttons.OK, wait=True)
|
||||||
# type the word OCEAN slowly
|
# type the word OCEAN slowly
|
||||||
assert layout.str_content == "< MnemonicKeyboard >"
|
assert "MnemonicKeyboard" in layout.str_content
|
||||||
for coords in buttons.type_word("ocea", is_slip39=True):
|
for coords in buttons.type_word("ocea", is_slip39=True):
|
||||||
time.sleep(9)
|
time.sleep(9)
|
||||||
debug.click(coords)
|
debug.click(coords)
|
||||||
layout = debug.click(buttons.CONFIRM_WORD, wait=True)
|
layout = debug.click(buttons.CONFIRM_WORD, wait=True)
|
||||||
# should not have locked, even though we took 9 seconds to type each letter
|
# should not have locked, even though we took 9 seconds to type each letter
|
||||||
assert layout.str_content == "< MnemonicKeyboard >"
|
assert "MnemonicKeyboard" in layout.str_content
|
||||||
device_handler.kill_task()
|
device_handler.kill_task()
|
||||||
|
@ -41,7 +41,7 @@ def test_hold_to_lock(device_handler: "BackgroundDeviceHandler"):
|
|||||||
# unlock with message
|
# unlock with message
|
||||||
device_handler.run(common.get_test_address)
|
device_handler.run(common.get_test_address)
|
||||||
layout = debug.wait_layout()
|
layout = debug.wait_layout()
|
||||||
assert layout.str_content == "< PinKeyboard >"
|
assert "PinKeyboard" in layout.str_content
|
||||||
debug.input("1234", wait=True)
|
debug.input("1234", wait=True)
|
||||||
assert device_handler.result()
|
assert device_handler.result()
|
||||||
|
|
||||||
@ -57,7 +57,7 @@ def test_hold_to_lock(device_handler: "BackgroundDeviceHandler"):
|
|||||||
|
|
||||||
# unlock by touching
|
# unlock by touching
|
||||||
layout = debug.click(buttons.INFO, wait=True)
|
layout = debug.click(buttons.INFO, wait=True)
|
||||||
assert layout.str_content == "< PinKeyboard >"
|
assert "PinKeyboard" in layout.str_content
|
||||||
debug.input("1234", wait=True)
|
debug.input("1234", wait=True)
|
||||||
|
|
||||||
assert device_handler.features().unlocked is True
|
assert device_handler.features().unlocked is True
|
||||||
|
@ -78,6 +78,7 @@ def test_reset_slip39_basic_1of1(device_handler: "BackgroundDeviceHandler"):
|
|||||||
|
|
||||||
# read words
|
# read words
|
||||||
words = reset.read_words(debug)
|
words = reset.read_words(debug)
|
||||||
|
print("words", words)
|
||||||
|
|
||||||
# confirm words
|
# confirm words
|
||||||
reset.confirm_words(debug, words)
|
reset.confirm_words(debug, words)
|
||||||
|
@ -74,6 +74,8 @@ class InputFlowSetupDevicePINWIpeCode(InputFlowBase):
|
|||||||
def input_flow_common(self) -> GeneratorType:
|
def input_flow_common(self) -> GeneratorType:
|
||||||
yield # do you want to set/change the wipe_code?
|
yield # do you want to set/change the wipe_code?
|
||||||
self.debug.press_yes()
|
self.debug.press_yes()
|
||||||
|
yield # wipe code info
|
||||||
|
self.debug.press_yes()
|
||||||
yield # enter current pin
|
yield # enter current pin
|
||||||
self.debug.input(self.pin)
|
self.debug.input(self.pin)
|
||||||
yield # enter new wipe code
|
yield # enter new wipe code
|
||||||
|
@ -53,7 +53,7 @@ def test_abort(emulator: Emulator):
|
|||||||
assert layout.title() == "RECOVERY MODE"
|
assert layout.title() == "RECOVERY MODE"
|
||||||
|
|
||||||
layout = debug.click(buttons.OK, wait=True)
|
layout = debug.click(buttons.OK, wait=True)
|
||||||
assert "select the number of words" in layout.str_content
|
assert "select the number of words" in layout.text_content()
|
||||||
|
|
||||||
device_handler.restart(emulator)
|
device_handler.restart(emulator)
|
||||||
debug = device_handler.debuglink()
|
debug = device_handler.debuglink()
|
||||||
@ -63,7 +63,7 @@ def test_abort(emulator: Emulator):
|
|||||||
|
|
||||||
# no waiting for layout because layout doesn't change
|
# no waiting for layout because layout doesn't change
|
||||||
layout = debug.read_layout()
|
layout = debug.read_layout()
|
||||||
assert "select the number of words" in layout.str_content
|
assert "select the number of words" in layout.text_content()
|
||||||
layout = debug.click(buttons.CANCEL, wait=True)
|
layout = debug.click(buttons.CANCEL, wait=True)
|
||||||
|
|
||||||
assert layout.title() == "ABORT RECOVERY"
|
assert layout.title() == "ABORT RECOVERY"
|
||||||
@ -139,7 +139,7 @@ def test_recovery_on_old_wallet(emulator: Emulator):
|
|||||||
assert "Enter any share" in layout.str_content
|
assert "Enter any share" in layout.str_content
|
||||||
debug.press_yes()
|
debug.press_yes()
|
||||||
layout = debug.wait_layout()
|
layout = debug.wait_layout()
|
||||||
assert layout.str_content == "< MnemonicKeyboard >"
|
assert "MnemonicKeyboard" in layout.str_content
|
||||||
|
|
||||||
# enter first word
|
# enter first word
|
||||||
debug.input(words[0])
|
debug.input(words[0])
|
||||||
@ -151,7 +151,7 @@ def test_recovery_on_old_wallet(emulator: Emulator):
|
|||||||
|
|
||||||
# try entering remaining 19 words
|
# try entering remaining 19 words
|
||||||
for word in words[1:]:
|
for word in words[1:]:
|
||||||
assert layout.str_content == "< MnemonicKeyboard >"
|
assert "MnemonicKeyboard" in layout.str_content
|
||||||
debug.input(word)
|
debug.input(word)
|
||||||
layout = debug.wait_layout()
|
layout = debug.wait_layout()
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user