diff --git a/src/seedsigner/gui/screens/seed_screens.py b/src/seedsigner/gui/screens/seed_screens.py index 069bd04d..e1b88db0 100644 --- a/src/seedsigner/gui/screens/seed_screens.py +++ b/src/seedsigner/gui/screens/seed_screens.py @@ -1555,6 +1555,7 @@ class SeedSignMessageConfirmAddressScreen(ButtonListScreen): derivation_path_display = IconTextLine( icon_name=SeedSignerIconConstants.DERIVATION, + icon_color=GUIConstants.INFO_COLOR, label_text="derivation path", value_text=self.derivation_path, is_text_centered=True, diff --git a/tests/screenshot_generator/generator.py b/tests/screenshot_generator/generator.py index 037a7905..b498fa2e 100644 --- a/tests/screenshot_generator/generator.py +++ b/tests/screenshot_generator/generator.py @@ -1,7 +1,7 @@ import embit import os import sys -from mock import Mock, patch, MagicMock +from mock import Mock, MagicMock # Prevent importing modules w/Raspi hardware dependencies. # These must precede any SeedSigner imports. @@ -15,16 +15,13 @@ sys.modules['seedsigner.hardware.microsd'] = MagicMock() from seedsigner.controller import Controller from seedsigner.gui.renderer import Renderer -from seedsigner.hardware.buttons import HardwareButtons -from seedsigner.hardware.camera import Camera from seedsigner.models.decode_qr import DecodeQR from seedsigner.models.qr_type import QRType from seedsigner.models.seed import Seed -from seedsigner.models.settings import Settings from seedsigner.models.settings_definition import SettingsConstants, SettingsDefinition from seedsigner.views import (MainMenuView, PowerOptionsView, RestartView, NotYetImplementedView, UnhandledExceptionView, - psbt_views, scan_views, seed_views, settings_views, tools_views) -from seedsigner.views.view import View + psbt_views, seed_views, settings_views, tools_views) +from seedsigner.views.view import NetworkMismatchErrorView, PowerOffView, View from .utils import ScreenshotComplete, ScreenshotRenderer @@ -47,6 +44,9 @@ def test_generate_screenshots(target_locale): Renderer.configure_instance = Mock() Renderer.get_instance = Mock(return_value=screenshot_renderer) + # Additional mocks needed + PowerOffView.PowerOffThread = Mock() # Don't let this View actually send the `shutdown` command! + controller = Controller.get_instance() # Set up some test data that we'll need in the `Controller` for certain Views @@ -71,21 +71,14 @@ def test_generate_screenshots(target_locale): # Multisig wallet descriptor for the multisig in the above PSBT MULTISIG_WALLET_DESCRIPTOR = """wsh(sortedmulti(1,[22bde1a9/48h/1h/0h/2h]tpubDFfsBrmpj226ZYiRszYi2qK6iGvh2vkkghfGB2YiRUVY4rqqedHCFEgw12FwDkm7rUoVtq9wLTKc6BN2sxswvQeQgp7m8st4FP8WtP8go76/{0,1}/*,[73c5da0a/48h/1h/0h/2h]tpubDFH9dgzveyD8zTbPUFuLrGmCydNvxehyNdUXKJAQN8x4aZ4j6UZqGfnqFrD4NqyaTVGKbvEW54tsvPTK2UoSbCC1PJY8iCNiwTL3RWZEheQ/{0,1}/*))#3jhtf6yx""" controller.multisig_wallet_descriptor = embit.descriptor.Descriptor.from_string(MULTISIG_WALLET_DESCRIPTOR) - - def screencap_view(view_cls: View, view_name: str, view_args: dict={}): - screenshot_renderer.set_screenshot_filename(f"{view_name}.png") - try: - print(f"Running {view_name}") - view_cls(**view_args).run() - except ScreenshotComplete: - # Slightly hacky way to exit ScreenshotRenderer as expected - pass - print(f"Completed {view_name}") - except Exception as e: - # Something else went wrong - print(repr(e)) - raise e + # Message signing data + controller.sign_message_data = { + "seed_num": 0, + "derivation_path": "m/84h/0h/0h/0/0", + "message": "I attest that I control this bitcoin address blah blah blah", + } + # Automatically populate all Settings options Views settings_views_list = [] settings_views_list.append(settings_views.SettingsMenuView) @@ -108,10 +101,12 @@ def test_generate_screenshots(target_locale): MainMenuView, PowerOptionsView, RestartView, - #PowerOffView # this test is too real; pi will power-off + PowerOffView, NotYetImplementedView, (UnhandledExceptionView, dict(error=UnhandledExceptionViewFood)), - (settings_views.SettingsIngestSettingsQRView, dict(data="settings::v1 name=factory_reset")) + (settings_views.SettingsIngestSettingsQRView, dict(data="settings::v1 name=factory_reset")), + NetworkMismatchErrorView, + ], "Seed Views": [ @@ -164,6 +159,9 @@ def test_generate_screenshots(target_locale): seed_views.LoadMultisigWalletDescriptorView, seed_views.MultisigWalletDescriptorView, (seed_views.SeedDiscardView, dict(seed_num=0)), + + seed_views.SeedSignMessageConfirmMessageView, + seed_views.SeedSignMessageConfirmAddressView, ], "PSBT Views": [ psbt_views.PSBTSelectSeedView, # this will fail, be rerun below @@ -203,12 +201,25 @@ def test_generate_screenshots(target_locale): "Settings Views": settings_views_list, } - - screenshot_renderer.set_screenshot_path(screenshot_root) - readme = f"""# SeedSigner Screenshots\n""" + def screencap_view(view_cls: View, view_name: str, view_args: dict={}): + screenshot_renderer.set_screenshot_filename(f"{view_name}.png") + try: + print(f"Running {view_name}") + view_cls(**view_args).run() + except ScreenshotComplete: + # Slightly hacky way to exit ScreenshotRenderer as expected + pass + print(f"Completed {view_name}") + except Exception as e: + # Something else went wrong + print(repr(e)) + raise e + for section_name, screenshot_list in screenshot_sections.items(): + subdir = section_name.lower().replace(" ", "_") + screenshot_renderer.set_screenshot_path(os.path.join(screenshot_root, subdir)) readme += "\n\n---\n\n" readme += f"## {section_name}\n\n" readme += """
{view_name}![]() |
{view_name}![]() |