ragger 1.40.1__tar.gz → 1.40.3__tar.gz
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- {ragger-1.40.1 → ragger-1.40.3}/.github/workflows/build_and_tests.yml +33 -3
- {ragger-1.40.1 → ragger-1.40.3}/.github/workflows/codeql-analysis.yml +4 -7
- {ragger-1.40.1 → ragger-1.40.3}/.github/workflows/fast-checks.yml +1 -1
- {ragger-1.40.1 → ragger-1.40.3}/CHANGELOG.md +12 -0
- {ragger-1.40.1/src/ragger.egg-info → ragger-1.40.3}/PKG-INFO +1 -1
- {ragger-1.40.1 → ragger-1.40.3}/ledger_app.toml +1 -1
- {ragger-1.40.1 → ragger-1.40.3}/src/ragger/__version__.py +3 -3
- {ragger-1.40.1 → ragger-1.40.3}/src/ragger/firmware/touch/positions.py +287 -5
- {ragger-1.40.1 → ragger-1.40.3}/src/ragger/navigator/navigation_scenario.py +23 -30
- {ragger-1.40.1 → ragger-1.40.3/src/ragger.egg-info}/PKG-INFO +1 -1
- {ragger-1.40.1 → ragger-1.40.3}/src/ragger.egg-info/SOURCES.txt +5 -0
- ragger-1.40.3/tests/snapshots/apex_p/waiting_screen/00000.png +0 -0
- ragger-1.40.3/tests/snapshots/apex_p/waiting_screen/00001.png +0 -0
- ragger-1.40.3/tests/snapshots/apex_p/waiting_screen/00002.png +0 -0
- ragger-1.40.3/tests/snapshots/apex_p/waiting_screen/00003.png +0 -0
- ragger-1.40.3/tests/snapshots/apex_p/waiting_screen/00004.png +0 -0
- ragger-1.40.3/tests/snapshots/flex/waiting_screen/00001.png +0 -0
- ragger-1.40.3/tests/snapshots/stax/waiting_screen/00001.png +0 -0
- {ragger-1.40.1 → ragger-1.40.3}/tests/unit/backend/test_physical_backend.py +1 -1
- {ragger-1.40.1 → ragger-1.40.3}/tests/unit/utils/test_misc.py +1 -1
- ragger-1.40.1/tests/snapshots/flex/waiting_screen/00001.png +0 -0
- ragger-1.40.1/tests/snapshots/stax/waiting_screen/00001.png +0 -0
- {ragger-1.40.1 → ragger-1.40.3}/.codeql-config.yaml +0 -0
- {ragger-1.40.1 → ragger-1.40.3}/.gitattributes +0 -0
- {ragger-1.40.1 → ragger-1.40.3}/.github/workflows/documentation.yml +0 -0
- {ragger-1.40.1 → ragger-1.40.3}/.github/workflows/force-rebase.yml +0 -0
- {ragger-1.40.1 → ragger-1.40.3}/.gitignore +0 -0
- {ragger-1.40.1 → ragger-1.40.3}/LICENSE +0 -0
- {ragger-1.40.1 → ragger-1.40.3}/MANIFEST.in +0 -0
- {ragger-1.40.1 → ragger-1.40.3}/README.md +0 -0
- {ragger-1.40.1 → ragger-1.40.3}/doc/Makefile +0 -0
- {ragger-1.40.1 → ragger-1.40.3}/doc/_static/layout.css +0 -0
- {ragger-1.40.1 → ragger-1.40.3}/doc/_templates/layout.html +0 -0
- {ragger-1.40.1 → ragger-1.40.3}/doc/architecture.rst +0 -0
- {ragger-1.40.1 → ragger-1.40.3}/doc/conf.py +0 -0
- {ragger-1.40.1 → ragger-1.40.3}/doc/faq.rst +0 -0
- {ragger-1.40.1 → ragger-1.40.3}/doc/glossary.rst +0 -0
- {ragger-1.40.1 → ragger-1.40.3}/doc/images/navigate.draw +0 -0
- {ragger-1.40.1 → ragger-1.40.3}/doc/images/navigate.svg +0 -0
- {ragger-1.40.1 → ragger-1.40.3}/doc/images/ragger.png +0 -0
- {ragger-1.40.1 → ragger-1.40.3}/doc/images/stax_infos.png +0 -0
- {ragger-1.40.1 → ragger-1.40.3}/doc/images/stax_welcome.png +0 -0
- {ragger-1.40.1 → ragger-1.40.3}/doc/images/usage.draw +0 -0
- {ragger-1.40.1 → ragger-1.40.3}/doc/images/usage.svg +0 -0
- {ragger-1.40.1 → ragger-1.40.3}/doc/index.rst +0 -0
- {ragger-1.40.1 → ragger-1.40.3}/doc/installation.rst +0 -0
- {ragger-1.40.1 → ragger-1.40.3}/doc/rationale.rst +0 -0
- {ragger-1.40.1 → ragger-1.40.3}/doc/source.rst +0 -0
- {ragger-1.40.1 → ragger-1.40.3}/doc/tutorial.rst +0 -0
- {ragger-1.40.1 → ragger-1.40.3}/doc/tutorial_conftest.rst +0 -0
- {ragger-1.40.1 → ragger-1.40.3}/doc/tutorial_installation.rst +0 -0
- {ragger-1.40.1 → ragger-1.40.3}/doc/tutorial_screen.rst +0 -0
- {ragger-1.40.1 → ragger-1.40.3}/pyproject.toml +0 -0
- {ragger-1.40.1 → ragger-1.40.3}/setup.cfg +0 -0
- {ragger-1.40.1 → ragger-1.40.3}/src/ragger/__init__.py +0 -0
- {ragger-1.40.1 → ragger-1.40.3}/src/ragger/backend/__init__.py +0 -0
- {ragger-1.40.1 → ragger-1.40.3}/src/ragger/backend/interface.py +0 -0
- {ragger-1.40.1 → ragger-1.40.3}/src/ragger/backend/ledgercomm.py +0 -0
- {ragger-1.40.1 → ragger-1.40.3}/src/ragger/backend/ledgerwallet.py +0 -0
- {ragger-1.40.1 → ragger-1.40.3}/src/ragger/backend/physical_backend.py +0 -0
- {ragger-1.40.1 → ragger-1.40.3}/src/ragger/backend/speculos.py +0 -0
- {ragger-1.40.1 → ragger-1.40.3}/src/ragger/backend/stub.py +0 -0
- {ragger-1.40.1 → ragger-1.40.3}/src/ragger/bip/__init__.py +0 -0
- {ragger-1.40.1 → ragger-1.40.3}/src/ragger/bip/path.py +0 -0
- {ragger-1.40.1 → ragger-1.40.3}/src/ragger/bip/seed.py +0 -0
- {ragger-1.40.1 → ragger-1.40.3}/src/ragger/conftest/__init__.py +0 -0
- {ragger-1.40.1 → ragger-1.40.3}/src/ragger/conftest/base_conftest.py +0 -0
- {ragger-1.40.1 → ragger-1.40.3}/src/ragger/conftest/configuration.py +0 -0
- {ragger-1.40.1 → ragger-1.40.3}/src/ragger/error.py +0 -0
- {ragger-1.40.1 → ragger-1.40.3}/src/ragger/firmware/__init__.py +0 -0
- {ragger-1.40.1 → ragger-1.40.3}/src/ragger/firmware/structs.py +0 -0
- {ragger-1.40.1 → ragger-1.40.3}/src/ragger/firmware/touch/__init__.py +0 -0
- {ragger-1.40.1 → ragger-1.40.3}/src/ragger/firmware/touch/element.py +0 -0
- {ragger-1.40.1 → ragger-1.40.3}/src/ragger/firmware/touch/layouts.py +0 -0
- {ragger-1.40.1 → ragger-1.40.3}/src/ragger/firmware/touch/screen.py +0 -0
- {ragger-1.40.1 → ragger-1.40.3}/src/ragger/firmware/touch/use_cases.py +0 -0
- {ragger-1.40.1 → ragger-1.40.3}/src/ragger/gui/__init__.py +0 -0
- {ragger-1.40.1 → ragger-1.40.3}/src/ragger/gui/assets/nanos_body.png +0 -0
- {ragger-1.40.1 → ragger-1.40.3}/src/ragger/gui/assets/nanos_leftbutton.png +0 -0
- {ragger-1.40.1 → ragger-1.40.3}/src/ragger/gui/assets/nanos_rightbutton.png +0 -0
- {ragger-1.40.1 → ragger-1.40.3}/src/ragger/gui/assets/nanosp_body.png +0 -0
- {ragger-1.40.1 → ragger-1.40.3}/src/ragger/gui/assets/nanosp_leftbutton.png +0 -0
- {ragger-1.40.1 → ragger-1.40.3}/src/ragger/gui/assets/nanosp_rightbutton.png +0 -0
- {ragger-1.40.1 → ragger-1.40.3}/src/ragger/gui/assets/nanox_body.png +0 -0
- {ragger-1.40.1 → ragger-1.40.3}/src/ragger/gui/assets/nanox_leftbutton.png +0 -0
- {ragger-1.40.1 → ragger-1.40.3}/src/ragger/gui/assets/nanox_rightbutton.png +0 -0
- {ragger-1.40.1 → ragger-1.40.3}/src/ragger/gui/assets/stax_body.png +0 -0
- {ragger-1.40.1 → ragger-1.40.3}/src/ragger/gui/assets/swipe_left_action.png +0 -0
- {ragger-1.40.1 → ragger-1.40.3}/src/ragger/gui/assets/swipe_right_action.png +0 -0
- {ragger-1.40.1 → ragger-1.40.3}/src/ragger/gui/assets/touch_action.png +0 -0
- {ragger-1.40.1 → ragger-1.40.3}/src/ragger/gui/interface.py +0 -0
- {ragger-1.40.1 → ragger-1.40.3}/src/ragger/gui/process.py +0 -0
- {ragger-1.40.1 → ragger-1.40.3}/src/ragger/logger.py +0 -0
- {ragger-1.40.1 → ragger-1.40.3}/src/ragger/navigator/__init__.py +0 -0
- {ragger-1.40.1 → ragger-1.40.3}/src/ragger/navigator/instruction.py +0 -0
- {ragger-1.40.1 → ragger-1.40.3}/src/ragger/navigator/nano_navigator.py +0 -0
- {ragger-1.40.1 → ragger-1.40.3}/src/ragger/navigator/navigator.py +0 -0
- {ragger-1.40.1 → ragger-1.40.3}/src/ragger/navigator/touch_navigator.py +0 -0
- {ragger-1.40.1 → ragger-1.40.3}/src/ragger/py.typed +0 -0
- {ragger-1.40.1 → ragger-1.40.3}/src/ragger/utils/__init__.py +0 -0
- {ragger-1.40.1 → ragger-1.40.3}/src/ragger/utils/misc.py +0 -0
- {ragger-1.40.1 → ragger-1.40.3}/src/ragger/utils/packing.py +0 -0
- {ragger-1.40.1 → ragger-1.40.3}/src/ragger/utils/structs.py +0 -0
- {ragger-1.40.1 → ragger-1.40.3}/src/ragger.egg-info/dependency_links.txt +0 -0
- {ragger-1.40.1 → ragger-1.40.3}/src/ragger.egg-info/requires.txt +0 -0
- {ragger-1.40.1 → ragger-1.40.3}/src/ragger.egg-info/top_level.txt +0 -0
- {ragger-1.40.1 → ragger-1.40.3}/template/.dispatch_to_your_test_folder +0 -0
- {ragger-1.40.1 → ragger-1.40.3}/template/conftest.py +0 -0
- {ragger-1.40.1 → ragger-1.40.3}/template/usage.md +0 -0
- {ragger-1.40.1 → ragger-1.40.3}/tests/__init__.py +0 -0
- {ragger-1.40.1 → ragger-1.40.3}/tests/functional/__init__.py +0 -0
- {ragger-1.40.1 → ragger-1.40.3}/tests/functional/backend/__init__.py +0 -0
- {ragger-1.40.1 → ragger-1.40.3}/tests/functional/backend/test_speculos.py +0 -0
- {ragger-1.40.1 → ragger-1.40.3}/tests/functional/conftest.py +0 -0
- {ragger-1.40.1 → ragger-1.40.3}/tests/functional/navigator/__init__.py +0 -0
- {ragger-1.40.1 → ragger-1.40.3}/tests/functional/navigator/test_navigator.py +0 -0
- {ragger-1.40.1 → ragger-1.40.3}/tests/functional/test_boilerplate.py +0 -0
- {ragger-1.40.1 → ragger-1.40.3}/tests/pytest.ini +0 -0
- {ragger-1.40.1 → ragger-1.40.3}/tests/snapshots/flex/waiting_screen/00000.png +0 -0
- {ragger-1.40.1 → ragger-1.40.3}/tests/snapshots/flex/waiting_screen/00002.png +0 -0
- {ragger-1.40.1 → ragger-1.40.3}/tests/snapshots/flex/waiting_screen/00003.png +0 -0
- {ragger-1.40.1 → ragger-1.40.3}/tests/snapshots/flex/waiting_screen/00004.png +0 -0
- {ragger-1.40.1 → ragger-1.40.3}/tests/snapshots/nanos/generic/00000.png +0 -0
- {ragger-1.40.1 → ragger-1.40.3}/tests/snapshots/nanos/generic/00001.png +0 -0
- {ragger-1.40.1 → ragger-1.40.3}/tests/snapshots/nanos/generic/00002.png +0 -0
- {ragger-1.40.1 → ragger-1.40.3}/tests/snapshots/nanos/generic/00003.png +0 -0
- {ragger-1.40.1 → ragger-1.40.3}/tests/snapshots/nanos/generic/00004.png +0 -0
- {ragger-1.40.1 → ragger-1.40.3}/tests/snapshots/nanos/test_navigate_and_compare/00000.png +0 -0
- {ragger-1.40.1 → ragger-1.40.3}/tests/snapshots/nanos/test_navigate_and_compare/00001.png +0 -0
- {ragger-1.40.1 → ragger-1.40.3}/tests/snapshots/nanos/test_navigate_and_compare/00002.png +0 -0
- {ragger-1.40.1 → ragger-1.40.3}/tests/snapshots/nanos/test_navigate_and_compare/00003.png +0 -0
- {ragger-1.40.1 → ragger-1.40.3}/tests/snapshots/nanos/test_navigate_and_compare/00004.png +0 -0
- {ragger-1.40.1 → ragger-1.40.3}/tests/snapshots/nanos/test_navigate_and_compare/00005.png +0 -0
- {ragger-1.40.1 → ragger-1.40.3}/tests/snapshots/nanos/test_navigate_and_compare/00006.png +0 -0
- {ragger-1.40.1 → ragger-1.40.3}/tests/snapshots/nanos/test_navigate_and_compare/00007.png +0 -0
- {ragger-1.40.1 → ragger-1.40.3}/tests/snapshots/nanos/test_navigate_and_compare_no_golden/00000.png +0 -0
- {ragger-1.40.1 → ragger-1.40.3}/tests/snapshots/nanos/test_navigate_and_compare_wrong_golden/00000.png +0 -0
- {ragger-1.40.1 → ragger-1.40.3}/tests/snapshots/nanos/test_navigate_and_compare_wrong_golden/00001.png +0 -0
- {ragger-1.40.1 → ragger-1.40.3}/tests/snapshots/nanos/test_navigate_until_text_and_compare/00000.png +0 -0
- {ragger-1.40.1 → ragger-1.40.3}/tests/snapshots/nanos/test_navigate_until_text_and_compare/00001.png +0 -0
- {ragger-1.40.1 → ragger-1.40.3}/tests/snapshots/nanos/test_navigate_until_text_and_compare/00002.png +0 -0
- {ragger-1.40.1 → ragger-1.40.3}/tests/snapshots/nanos/test_navigate_until_text_and_compare/00003.png +0 -0
- {ragger-1.40.1 → ragger-1.40.3}/tests/snapshots/stax/waiting_screen/00000.png +0 -0
- {ragger-1.40.1 → ragger-1.40.3}/tests/snapshots/stax/waiting_screen/00002.png +0 -0
- {ragger-1.40.1 → ragger-1.40.3}/tests/snapshots/stax/waiting_screen/00003.png +0 -0
- {ragger-1.40.1 → ragger-1.40.3}/tests/snapshots/stax/waiting_screen/00004.png +0 -0
- {ragger-1.40.1 → ragger-1.40.3}/tests/stubs.py +0 -0
- {ragger-1.40.1 → ragger-1.40.3}/tests/unit/__init__.py +0 -0
- {ragger-1.40.1 → ragger-1.40.3}/tests/unit/backend/__init__.py +0 -0
- {ragger-1.40.1 → ragger-1.40.3}/tests/unit/backend/test_interface.py +0 -0
- {ragger-1.40.1 → ragger-1.40.3}/tests/unit/backend/test_ledgercomm.py +0 -0
- {ragger-1.40.1 → ragger-1.40.3}/tests/unit/backend/test_ledgerwallet.py +0 -0
- {ragger-1.40.1 → ragger-1.40.3}/tests/unit/backend/test_speculos.py +0 -0
- {ragger-1.40.1 → ragger-1.40.3}/tests/unit/backend/test_stub.py +0 -0
- {ragger-1.40.1 → ragger-1.40.3}/tests/unit/bip/test_path.py +0 -0
- {ragger-1.40.1 → ragger-1.40.3}/tests/unit/bip/test_seed.py +0 -0
- {ragger-1.40.1 → ragger-1.40.3}/tests/unit/conftests/__init__.py +0 -0
- {ragger-1.40.1 → ragger-1.40.3}/tests/unit/conftests/test_base_conftest.py +0 -0
- {ragger-1.40.1 → ragger-1.40.3}/tests/unit/firmware/test_structs_Firmware.py +0 -0
- {ragger-1.40.1 → ragger-1.40.3}/tests/unit/firmware/touch/test_element.py +0 -0
- {ragger-1.40.1 → ragger-1.40.3}/tests/unit/firmware/touch/test_screen_FullScreen.py +0 -0
- {ragger-1.40.1 → ragger-1.40.3}/tests/unit/firmware/touch/test_screen_MetaScreen.py +0 -0
- {ragger-1.40.1 → ragger-1.40.3}/tests/unit/helpers.py +0 -0
- {ragger-1.40.1 → ragger-1.40.3}/tests/unit/navigator/__init__.py +0 -0
- {ragger-1.40.1 → ragger-1.40.3}/tests/unit/navigator/test_nano_navigator.py +0 -0
- {ragger-1.40.1 → ragger-1.40.3}/tests/unit/navigator/test_navigation_scenario.py +0 -0
- {ragger-1.40.1 → ragger-1.40.3}/tests/unit/navigator/test_navigator.py +0 -0
- {ragger-1.40.1 → ragger-1.40.3}/tests/unit/navigator/test_touch_navigator.py +0 -0
- {ragger-1.40.1 → ragger-1.40.3}/tests/unit/test_error_ApplicationError.py +0 -0
- {ragger-1.40.1 → ragger-1.40.3}/tests/unit/utils/__init__.py +0 -0
- {ragger-1.40.1 → ragger-1.40.3}/tests/unit/utils/test_packing.py +0 -0
- {ragger-1.40.1 → ragger-1.40.3}/tests/unit/utils/test_path.py +0 -0
- {ragger-1.40.1 → ragger-1.40.3}/tests/unit/utils/test_structs.py +0 -0
|
@@ -36,14 +36,36 @@ jobs:
|
|
|
36
36
|
app_branch_name: nanos_baseline
|
|
37
37
|
upload_app_binaries_artifact: boilerplate_binaries_nanos
|
|
38
38
|
|
|
39
|
+
prepare_matrix:
|
|
40
|
+
name: Prepare matrix from TOML file
|
|
41
|
+
runs-on: ubuntu-latest
|
|
42
|
+
outputs:
|
|
43
|
+
devices: ${{ steps.get_devices.outputs.devices }}
|
|
44
|
+
env:
|
|
45
|
+
APP_MANIFEST: "ledger_app.toml"
|
|
46
|
+
|
|
47
|
+
steps:
|
|
48
|
+
- name: Clone
|
|
49
|
+
uses: actions/checkout@v4
|
|
50
|
+
- name: Install ledgered
|
|
51
|
+
run: pip install ledgered
|
|
52
|
+
- name: Get devices from TOML
|
|
53
|
+
id: get_devices
|
|
54
|
+
run: |
|
|
55
|
+
# get device list as a single line json formatted value
|
|
56
|
+
compatible_devices="$(ledger-manifest --output-devices "${APP_MANIFEST}" -j | jq -rc '.devices')"
|
|
57
|
+
|
|
58
|
+
echo "devices=${compatible_devices}" | sed 's/+/p/' >> "${GITHUB_OUTPUT}"
|
|
59
|
+
|
|
39
60
|
build_install_test:
|
|
40
61
|
name: Install and test the library
|
|
41
|
-
needs: [build_boilerplate_application, build_boilerplate_application_nanos]
|
|
62
|
+
needs: [prepare_matrix, build_boilerplate_application, build_boilerplate_application_nanos]
|
|
42
63
|
runs-on: ubuntu-latest
|
|
43
64
|
strategy:
|
|
44
65
|
fail-fast: false
|
|
45
66
|
matrix:
|
|
46
67
|
python_version: ['3.9', '3.10', '3.11', '3.12', '3.13']
|
|
68
|
+
device: ${{ fromJson(needs.prepare_matrix.outputs.devices) }}
|
|
47
69
|
|
|
48
70
|
steps:
|
|
49
71
|
- name: Clone
|
|
@@ -64,13 +86,20 @@ jobs:
|
|
|
64
86
|
pip install -U .[tests,all_backends]
|
|
65
87
|
pip install -U "click>=8"
|
|
66
88
|
|
|
89
|
+
- name: Install speculos for Nanos
|
|
90
|
+
if: ${{ matrix.device == 'nanos' }}
|
|
91
|
+
run: |
|
|
92
|
+
pip install -U speculos==v0.25.5
|
|
93
|
+
|
|
67
94
|
- name: Download app binaries
|
|
95
|
+
if: ${{ matrix.device != 'nanos' }}
|
|
68
96
|
uses: actions/download-artifact@v4
|
|
69
97
|
with:
|
|
70
98
|
name: boilerplate_binaries
|
|
71
99
|
path: ./build/
|
|
72
100
|
|
|
73
101
|
- name: Download app binaries for Nano S
|
|
102
|
+
if: ${{ matrix.device == 'nanos' }}
|
|
74
103
|
uses: actions/download-artifact@v4
|
|
75
104
|
with:
|
|
76
105
|
name: boilerplate_binaries_nanos
|
|
@@ -83,7 +112,7 @@ jobs:
|
|
|
83
112
|
run: pytest -v --tb=short tests/unit --cov ragger --cov-report xml
|
|
84
113
|
|
|
85
114
|
- name: Run functional tests and generate coverage
|
|
86
|
-
run: pytest -v --tb=short tests/functional --cov ragger --cov-report xml --cov-append --device
|
|
115
|
+
run: pytest -v --tb=short tests/functional --cov ragger --cov-report xml --cov-append --device ${{ matrix.device }}
|
|
87
116
|
|
|
88
117
|
- name: Upload to codecov.io
|
|
89
118
|
uses: codecov/codecov-action@v5
|
|
@@ -91,6 +120,7 @@ jobs:
|
|
|
91
120
|
CODECOV_TOKEN: ${{ secrets.CODECOV_TOKEN }}
|
|
92
121
|
with:
|
|
93
122
|
name: codecov-ragger
|
|
123
|
+
flags: ${{ matrix.device }}-py${{ matrix.python_version }}
|
|
94
124
|
|
|
95
125
|
package_and_deploy:
|
|
96
126
|
name: Build and deploy the Ragger Python package
|
|
@@ -100,4 +130,4 @@ jobs:
|
|
|
100
130
|
package_name: ragger
|
|
101
131
|
publish: ${{ startsWith(github.ref, 'refs/tags/') }}
|
|
102
132
|
secrets:
|
|
103
|
-
pypi_token: ${{ secrets.PYPI_PUBLIC_API_TOKEN
|
|
133
|
+
pypi_token: ${{ secrets.PYPI_PUBLIC_API_TOKEN }}
|
|
@@ -27,16 +27,13 @@ jobs:
|
|
|
27
27
|
contents: read
|
|
28
28
|
security-events: write
|
|
29
29
|
|
|
30
|
-
strategy:
|
|
31
|
-
fail-fast: false
|
|
32
|
-
|
|
33
30
|
steps:
|
|
34
31
|
- name: Checkout repository
|
|
35
32
|
uses: actions/checkout@v4
|
|
36
33
|
|
|
37
34
|
# Initializes the CodeQL tools for scanning.
|
|
38
35
|
- name: Initialize CodeQL
|
|
39
|
-
uses: github/codeql-action/init@
|
|
36
|
+
uses: github/codeql-action/init@v3
|
|
40
37
|
with:
|
|
41
38
|
languages: "python"
|
|
42
39
|
# If you wish to specify custom queries, you can do so here or in a config file.
|
|
@@ -45,10 +42,10 @@ jobs:
|
|
|
45
42
|
# queries: ./path/to/local/query, your-org/your-repo/queries@main
|
|
46
43
|
queries: +security-and-quality
|
|
47
44
|
|
|
48
|
-
# Autobuild attempts to build any compiled languages
|
|
45
|
+
# Autobuild attempts to build any compiled languages (C/C++, C#, or Java).
|
|
49
46
|
# If this step fails, then you should remove it and run the build manually (see below)
|
|
50
47
|
- name: Autobuild
|
|
51
|
-
uses: github/codeql-action/autobuild@
|
|
48
|
+
uses: github/codeql-action/autobuild@v3
|
|
52
49
|
|
|
53
50
|
# ℹ️ Command-line programs to run using the OS shell.
|
|
54
51
|
# 📚 https://git.io/JvXDl
|
|
@@ -62,6 +59,6 @@ jobs:
|
|
|
62
59
|
# make release
|
|
63
60
|
|
|
64
61
|
- name: Perform CodeQL Analysis
|
|
65
|
-
uses: github/codeql-action/analyze@
|
|
62
|
+
uses: github/codeql-action/analyze@v3
|
|
66
63
|
with:
|
|
67
64
|
config-file: .codeql-config.yaml
|
|
@@ -5,6 +5,18 @@ All notable changes to this project will be documented in this file.
|
|
|
5
5
|
The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/),
|
|
6
6
|
and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html).
|
|
7
7
|
|
|
8
|
+
## [1.40.3] - 2025-11-06
|
|
9
|
+
|
|
10
|
+
### Fixed
|
|
11
|
+
|
|
12
|
+
- Add new parameter in `navigation_scenario` functions `xxx_with_warning` to specify the number of warning screens
|
|
13
|
+
|
|
14
|
+
## [1.40.2] - 2025-09-09
|
|
15
|
+
|
|
16
|
+
### Fixed
|
|
17
|
+
|
|
18
|
+
- Fix APEX keyboards positions
|
|
19
|
+
|
|
8
20
|
## [1.40.1] - 2025-09-03
|
|
9
21
|
|
|
10
22
|
### Fixed
|
|
@@ -28,7 +28,7 @@ version_tuple: VERSION_TUPLE
|
|
|
28
28
|
commit_id: COMMIT_ID
|
|
29
29
|
__commit_id__: COMMIT_ID
|
|
30
30
|
|
|
31
|
-
__version__ = version = '1.40.
|
|
32
|
-
__version_tuple__ = version_tuple = (1, 40,
|
|
31
|
+
__version__ = version = '1.40.3'
|
|
32
|
+
__version_tuple__ = version_tuple = (1, 40, 3)
|
|
33
33
|
|
|
34
|
-
__commit_id__ = commit_id = '
|
|
34
|
+
__commit_id__ = commit_id = 'g21c065416'
|
|
@@ -125,7 +125,7 @@ POSITIONS = {
|
|
|
125
125
|
# indexes for left to right, from up to down
|
|
126
126
|
1: Position(100, 280),
|
|
127
127
|
2: Position(290, 280),
|
|
128
|
-
3: Position(
|
|
128
|
+
3: Position(100, 350),
|
|
129
129
|
4: Position(290, 350),
|
|
130
130
|
},
|
|
131
131
|
DeviceType.FLEX: {
|
|
@@ -134,6 +134,16 @@ POSITIONS = {
|
|
|
134
134
|
1: Position(140, 300),
|
|
135
135
|
2: Position(350, 300),
|
|
136
136
|
},
|
|
137
|
+
DeviceType.APEX_P: {
|
|
138
|
+
# On Apex, suggestions are on a single line
|
|
139
|
+
1: Position(80, 190),
|
|
140
|
+
2: Position(220, 300),
|
|
141
|
+
},
|
|
142
|
+
DeviceType.APEX_M: {
|
|
143
|
+
# On Apex, suggestions are on a single line
|
|
144
|
+
1: Position(80, 190),
|
|
145
|
+
2: Position(220, 300),
|
|
146
|
+
},
|
|
137
147
|
},
|
|
138
148
|
"LetterOnlyKeyboard": {
|
|
139
149
|
DeviceType.STAX: {
|
|
@@ -199,7 +209,71 @@ POSITIONS = {
|
|
|
199
209
|
"n": Position(264, 565),
|
|
200
210
|
"m": Position(312, 565),
|
|
201
211
|
"back": Position(400, 565),
|
|
202
|
-
}
|
|
212
|
+
},
|
|
213
|
+
DeviceType.APEX_P: {
|
|
214
|
+
# first line
|
|
215
|
+
"q": Position(15, 270),
|
|
216
|
+
"w": Position(45, 270),
|
|
217
|
+
"e": Position(75, 270),
|
|
218
|
+
"r": Position(105, 270),
|
|
219
|
+
"t": Position(135, 270),
|
|
220
|
+
"y": Position(165, 270),
|
|
221
|
+
"u": Position(195, 270),
|
|
222
|
+
"i": Position(225, 270),
|
|
223
|
+
"o": Position(255, 270),
|
|
224
|
+
"p": Position(285, 270),
|
|
225
|
+
# second line
|
|
226
|
+
"a": Position(30, 320),
|
|
227
|
+
"s": Position(60, 320),
|
|
228
|
+
"d": Position(90, 320),
|
|
229
|
+
"f": Position(120, 320),
|
|
230
|
+
"g": Position(150, 320),
|
|
231
|
+
"h": Position(180, 320),
|
|
232
|
+
"j": Position(210, 320),
|
|
233
|
+
"k": Position(240, 320),
|
|
234
|
+
"l": Position(270, 320),
|
|
235
|
+
# third and last line
|
|
236
|
+
"z": Position(15, 370),
|
|
237
|
+
"x": Position(45, 370),
|
|
238
|
+
"c": Position(75, 370),
|
|
239
|
+
"v": Position(105, 370),
|
|
240
|
+
"b": Position(135, 370),
|
|
241
|
+
"n": Position(165, 370),
|
|
242
|
+
"m": Position(195, 370),
|
|
243
|
+
"back": Position(255, 370),
|
|
244
|
+
},
|
|
245
|
+
DeviceType.APEX_M: {
|
|
246
|
+
# first line
|
|
247
|
+
"q": Position(15, 270),
|
|
248
|
+
"w": Position(45, 270),
|
|
249
|
+
"e": Position(75, 270),
|
|
250
|
+
"r": Position(105, 270),
|
|
251
|
+
"t": Position(135, 270),
|
|
252
|
+
"y": Position(165, 270),
|
|
253
|
+
"u": Position(195, 270),
|
|
254
|
+
"i": Position(225, 270),
|
|
255
|
+
"o": Position(255, 270),
|
|
256
|
+
"p": Position(285, 270),
|
|
257
|
+
# second line
|
|
258
|
+
"a": Position(30, 320),
|
|
259
|
+
"s": Position(60, 320),
|
|
260
|
+
"d": Position(90, 320),
|
|
261
|
+
"f": Position(120, 320),
|
|
262
|
+
"g": Position(150, 320),
|
|
263
|
+
"h": Position(180, 320),
|
|
264
|
+
"j": Position(210, 320),
|
|
265
|
+
"k": Position(240, 320),
|
|
266
|
+
"l": Position(270, 320),
|
|
267
|
+
# third and last line
|
|
268
|
+
"z": Position(15, 370),
|
|
269
|
+
"x": Position(45, 370),
|
|
270
|
+
"c": Position(75, 370),
|
|
271
|
+
"v": Position(105, 370),
|
|
272
|
+
"b": Position(135, 370),
|
|
273
|
+
"n": Position(165, 370),
|
|
274
|
+
"m": Position(195, 370),
|
|
275
|
+
"back": Position(255, 370),
|
|
276
|
+
},
|
|
203
277
|
},
|
|
204
278
|
"FullKeyboardLetters": {
|
|
205
279
|
DeviceType.STAX: {
|
|
@@ -273,7 +347,79 @@ POSITIONS = {
|
|
|
273
347
|
# fourth and last line
|
|
274
348
|
"change_layout": Position(72, 560),
|
|
275
349
|
" ": Position(312, 560),
|
|
276
|
-
}
|
|
350
|
+
},
|
|
351
|
+
DeviceType.APEX_P: {
|
|
352
|
+
# first line
|
|
353
|
+
"q": Position(15, 225),
|
|
354
|
+
"w": Position(45, 225),
|
|
355
|
+
"e": Position(75, 225),
|
|
356
|
+
"r": Position(105, 225),
|
|
357
|
+
"t": Position(135, 225),
|
|
358
|
+
"y": Position(165, 225),
|
|
359
|
+
"u": Position(195, 225),
|
|
360
|
+
"i": Position(225, 225),
|
|
361
|
+
"o": Position(255, 225),
|
|
362
|
+
"p": Position(285, 225),
|
|
363
|
+
# second line
|
|
364
|
+
"a": Position(30, 270),
|
|
365
|
+
"s": Position(60, 270),
|
|
366
|
+
"d": Position(90, 270),
|
|
367
|
+
"f": Position(120, 270),
|
|
368
|
+
"g": Position(150, 270),
|
|
369
|
+
"h": Position(180, 270),
|
|
370
|
+
"j": Position(210, 270),
|
|
371
|
+
"k": Position(240, 270),
|
|
372
|
+
"l": Position(270, 270),
|
|
373
|
+
# third and last line
|
|
374
|
+
"z": Position(60, 325),
|
|
375
|
+
"x": Position(90, 325),
|
|
376
|
+
"c": Position(120, 325),
|
|
377
|
+
"v": Position(150, 325),
|
|
378
|
+
"b": Position(180, 325),
|
|
379
|
+
"n": Position(210, 325),
|
|
380
|
+
"m": Position(240, 325),
|
|
381
|
+
"change_case": Position(20, 325),
|
|
382
|
+
"back": Position(280, 325),
|
|
383
|
+
# fourth and last line
|
|
384
|
+
"change_layout": Position(5, 370),
|
|
385
|
+
" ": Position(190, 370),
|
|
386
|
+
},
|
|
387
|
+
DeviceType.APEX_M: {
|
|
388
|
+
# first line
|
|
389
|
+
"q": Position(15, 225),
|
|
390
|
+
"w": Position(45, 225),
|
|
391
|
+
"e": Position(75, 225),
|
|
392
|
+
"r": Position(105, 225),
|
|
393
|
+
"t": Position(135, 225),
|
|
394
|
+
"y": Position(165, 225),
|
|
395
|
+
"u": Position(195, 225),
|
|
396
|
+
"i": Position(225, 225),
|
|
397
|
+
"o": Position(255, 225),
|
|
398
|
+
"p": Position(285, 225),
|
|
399
|
+
# second line
|
|
400
|
+
"a": Position(30, 270),
|
|
401
|
+
"s": Position(60, 270),
|
|
402
|
+
"d": Position(90, 270),
|
|
403
|
+
"f": Position(120, 270),
|
|
404
|
+
"g": Position(150, 270),
|
|
405
|
+
"h": Position(180, 270),
|
|
406
|
+
"j": Position(210, 270),
|
|
407
|
+
"k": Position(240, 270),
|
|
408
|
+
"l": Position(270, 270),
|
|
409
|
+
# third and last line
|
|
410
|
+
"z": Position(60, 325),
|
|
411
|
+
"x": Position(90, 325),
|
|
412
|
+
"c": Position(120, 325),
|
|
413
|
+
"v": Position(150, 325),
|
|
414
|
+
"b": Position(180, 325),
|
|
415
|
+
"n": Position(210, 325),
|
|
416
|
+
"m": Position(240, 325),
|
|
417
|
+
"change_case": Position(20, 325),
|
|
418
|
+
"back": Position(280, 325),
|
|
419
|
+
# fourth and last line
|
|
420
|
+
"change_layout": Position(5, 370),
|
|
421
|
+
" ": Position(190, 370),
|
|
422
|
+
},
|
|
277
423
|
},
|
|
278
424
|
"FullKeyboardSpecialCharacters1": {
|
|
279
425
|
DeviceType.STAX: {
|
|
@@ -343,7 +489,75 @@ POSITIONS = {
|
|
|
343
489
|
# fourth and last line
|
|
344
490
|
"change_layout": Position(72, 560),
|
|
345
491
|
" ": Position(312, 560),
|
|
346
|
-
}
|
|
492
|
+
},
|
|
493
|
+
DeviceType.APEX_P: {
|
|
494
|
+
# first line
|
|
495
|
+
"1": Position(15, 220),
|
|
496
|
+
"2": Position(45, 220),
|
|
497
|
+
"3": Position(75, 220),
|
|
498
|
+
"4": Position(105, 220),
|
|
499
|
+
"5": Position(135, 220),
|
|
500
|
+
"6": Position(165, 220),
|
|
501
|
+
"7": Position(195, 220),
|
|
502
|
+
"8": Position(225, 220),
|
|
503
|
+
"9": Position(255, 220),
|
|
504
|
+
"0": Position(285, 220),
|
|
505
|
+
# second line
|
|
506
|
+
"-": Position(30, 270),
|
|
507
|
+
"/": Position(60, 270),
|
|
508
|
+
":": Position(90, 270),
|
|
509
|
+
";": Position(120, 270),
|
|
510
|
+
"(": Position(150, 270),
|
|
511
|
+
")": Position(180, 270),
|
|
512
|
+
"&": Position(210, 270),
|
|
513
|
+
"@": Position(240, 270),
|
|
514
|
+
"\"": Position(270, 270),
|
|
515
|
+
# third line
|
|
516
|
+
"more_specials": Position(35, 320),
|
|
517
|
+
".": Position(90, 320),
|
|
518
|
+
",": Position(120, 320),
|
|
519
|
+
"?": Position(150, 320),
|
|
520
|
+
"!": Position(180, 320),
|
|
521
|
+
"'": Position(210, 320),
|
|
522
|
+
"back": Position(265, 320),
|
|
523
|
+
# fourth and last line
|
|
524
|
+
"change_layout": Position(50, 370),
|
|
525
|
+
" ": Position(190, 370),
|
|
526
|
+
},
|
|
527
|
+
DeviceType.APEX_M: {
|
|
528
|
+
# first line
|
|
529
|
+
"1": Position(15, 220),
|
|
530
|
+
"2": Position(45, 220),
|
|
531
|
+
"3": Position(75, 220),
|
|
532
|
+
"4": Position(105, 220),
|
|
533
|
+
"5": Position(135, 220),
|
|
534
|
+
"6": Position(165, 220),
|
|
535
|
+
"7": Position(195, 220),
|
|
536
|
+
"8": Position(225, 220),
|
|
537
|
+
"9": Position(255, 220),
|
|
538
|
+
"0": Position(285, 220),
|
|
539
|
+
# second line
|
|
540
|
+
"-": Position(30, 270),
|
|
541
|
+
"/": Position(60, 270),
|
|
542
|
+
":": Position(90, 270),
|
|
543
|
+
";": Position(120, 270),
|
|
544
|
+
"(": Position(150, 270),
|
|
545
|
+
")": Position(180, 270),
|
|
546
|
+
"&": Position(210, 270),
|
|
547
|
+
"@": Position(240, 270),
|
|
548
|
+
"\"": Position(270, 270),
|
|
549
|
+
# third line
|
|
550
|
+
"more_specials": Position(35, 320),
|
|
551
|
+
".": Position(90, 320),
|
|
552
|
+
",": Position(120, 320),
|
|
553
|
+
"?": Position(150, 320),
|
|
554
|
+
"!": Position(180, 320),
|
|
555
|
+
"'": Position(210, 320),
|
|
556
|
+
"back": Position(265, 320),
|
|
557
|
+
# fourth and last line
|
|
558
|
+
"change_layout": Position(50, 370),
|
|
559
|
+
" ": Position(190, 370),
|
|
560
|
+
},
|
|
347
561
|
},
|
|
348
562
|
"FullKeyboardSpecialCharacters2": {
|
|
349
563
|
DeviceType.STAX: {
|
|
@@ -413,7 +627,75 @@ POSITIONS = {
|
|
|
413
627
|
# fourth and last line
|
|
414
628
|
"change_layout": Position(72, 560),
|
|
415
629
|
" ": Position(312, 560),
|
|
416
|
-
}
|
|
630
|
+
},
|
|
631
|
+
DeviceType.APEX_P: {
|
|
632
|
+
# first line
|
|
633
|
+
"[": Position(15, 220),
|
|
634
|
+
"]": Position(45, 220),
|
|
635
|
+
"{": Position(75, 220),
|
|
636
|
+
"}": Position(105, 220),
|
|
637
|
+
"#": Position(135, 220),
|
|
638
|
+
"%": Position(165, 220),
|
|
639
|
+
"^": Position(195, 220),
|
|
640
|
+
"*": Position(225, 220),
|
|
641
|
+
"+": Position(255, 220),
|
|
642
|
+
"=": Position(285, 220),
|
|
643
|
+
# second line
|
|
644
|
+
"_": Position(30, 270),
|
|
645
|
+
"\\": Position(60, 270),
|
|
646
|
+
"|": Position(90, 270),
|
|
647
|
+
"~": Position(120, 270),
|
|
648
|
+
">": Position(150, 270),
|
|
649
|
+
"<": Position(180, 270),
|
|
650
|
+
"$": Position(210, 270),
|
|
651
|
+
"`": Position(240, 270),
|
|
652
|
+
"\"": Position(270, 270),
|
|
653
|
+
# third line
|
|
654
|
+
"more_specials": Position(35, 320),
|
|
655
|
+
".": Position(90, 320),
|
|
656
|
+
",": Position(120, 320),
|
|
657
|
+
"?": Position(150, 320),
|
|
658
|
+
"!": Position(180, 320),
|
|
659
|
+
"'": Position(210, 320),
|
|
660
|
+
"back": Position(265, 320),
|
|
661
|
+
# fourth and last line
|
|
662
|
+
"change_layout": Position(50, 370),
|
|
663
|
+
" ": Position(190, 370),
|
|
664
|
+
},
|
|
665
|
+
DeviceType.APEX_M: {
|
|
666
|
+
# first line
|
|
667
|
+
"[": Position(15, 220),
|
|
668
|
+
"]": Position(45, 220),
|
|
669
|
+
"{": Position(75, 220),
|
|
670
|
+
"}": Position(105, 220),
|
|
671
|
+
"#": Position(135, 220),
|
|
672
|
+
"%": Position(165, 220),
|
|
673
|
+
"^": Position(195, 220),
|
|
674
|
+
"*": Position(225, 220),
|
|
675
|
+
"+": Position(255, 220),
|
|
676
|
+
"=": Position(285, 220),
|
|
677
|
+
# second line
|
|
678
|
+
"_": Position(30, 270),
|
|
679
|
+
"\\": Position(60, 270),
|
|
680
|
+
"|": Position(90, 270),
|
|
681
|
+
"~": Position(120, 270),
|
|
682
|
+
">": Position(150, 270),
|
|
683
|
+
"<": Position(180, 270),
|
|
684
|
+
"$": Position(210, 270),
|
|
685
|
+
"`": Position(240, 270),
|
|
686
|
+
"\"": Position(270, 270),
|
|
687
|
+
# third line
|
|
688
|
+
"more_specials": Position(35, 320),
|
|
689
|
+
".": Position(90, 320),
|
|
690
|
+
",": Position(120, 320),
|
|
691
|
+
"?": Position(150, 320),
|
|
692
|
+
"!": Position(180, 320),
|
|
693
|
+
"'": Position(210, 320),
|
|
694
|
+
"back": Position(265, 320),
|
|
695
|
+
# fourth and last line
|
|
696
|
+
"change_layout": Position(50, 370),
|
|
697
|
+
" ": Position(190, 370),
|
|
698
|
+
},
|
|
417
699
|
},
|
|
418
700
|
"TappableCenter": {
|
|
419
701
|
DeviceType.STAX: STAX_CENTER,
|
|
@@ -19,17 +19,22 @@ class NavigationScenarioData:
|
|
|
19
19
|
dismiss_warning: Sequence[InstructionType]
|
|
20
20
|
pattern: str = ""
|
|
21
21
|
|
|
22
|
-
def __init__(self,
|
|
22
|
+
def __init__(self,
|
|
23
|
+
device: Device,
|
|
24
|
+
backend: BackendInterface,
|
|
25
|
+
use_case: UseCase,
|
|
26
|
+
approve: bool,
|
|
27
|
+
nb_warnings: int = 1):
|
|
23
28
|
if device.is_nano:
|
|
24
29
|
self.navigation = NavInsID.RIGHT_CLICK
|
|
25
30
|
self.validation = [NavInsID.BOTH_CLICK]
|
|
26
31
|
|
|
27
32
|
if backend.sdk_graphics == GraphicalLibrary.BAGL:
|
|
28
|
-
self.dismiss_warning = [NavInsID.RIGHT_CLICK]
|
|
33
|
+
self.dismiss_warning = [NavInsID.RIGHT_CLICK] * nb_warnings
|
|
29
34
|
# Legacy navigation scenario when running an App compiled with bagl sdk library
|
|
30
35
|
self.pattern = r"^(Accept risk|Accept|Approve|Sign|Confirm)$" if approve else r"^(Cancel|Reject)$"
|
|
31
36
|
else:
|
|
32
|
-
self.dismiss_warning = [NavInsID.BOTH_CLICK]
|
|
37
|
+
self.dismiss_warning = [NavInsID.BOTH_CLICK] * nb_warnings
|
|
33
38
|
# navigation scenario when running an App compiled with nbgl sdk library
|
|
34
39
|
if use_case == UseCase.ADDRESS_CONFIRMATION:
|
|
35
40
|
self.pattern = r"^(Accept risk|Accept|Approve|Sign|Confirm)$" if approve else r"^(Cancel|Reject)$"
|
|
@@ -54,7 +59,7 @@ class NavigationScenarioData:
|
|
|
54
59
|
|
|
55
60
|
elif device.touchable:
|
|
56
61
|
self.navigation = NavInsID.SWIPE_CENTER_TO_LEFT
|
|
57
|
-
self.dismiss_warning = [NavInsID.USE_CASE_CHOICE_REJECT]
|
|
62
|
+
self.dismiss_warning = [NavInsID.USE_CASE_CHOICE_REJECT] * nb_warnings
|
|
58
63
|
|
|
59
64
|
if use_case == UseCase.ADDRESS_CONFIRMATION:
|
|
60
65
|
if approve:
|
|
@@ -133,10 +138,7 @@ class NavigateWithScenario:
|
|
|
133
138
|
test_name: Optional[str] = None,
|
|
134
139
|
custom_screen_text: Optional[str] = None,
|
|
135
140
|
do_comparison: bool = True):
|
|
136
|
-
scenario = NavigationScenarioData(self.device,
|
|
137
|
-
self.backend,
|
|
138
|
-
UseCase.TX_REVIEW,
|
|
139
|
-
approve=True)
|
|
141
|
+
scenario = NavigationScenarioData(self.device, self.backend, UseCase.TX_REVIEW, True)
|
|
140
142
|
self._navigate_with_scenario(scenario, path, test_name, custom_screen_text, do_comparison)
|
|
141
143
|
|
|
142
144
|
def review_approve_with_warning(self,
|
|
@@ -144,11 +146,10 @@ class NavigateWithScenario:
|
|
|
144
146
|
test_name: Optional[str] = None,
|
|
145
147
|
custom_screen_text: Optional[str] = None,
|
|
146
148
|
do_comparison: bool = True,
|
|
147
|
-
warning_path: str = "warning"
|
|
148
|
-
|
|
149
|
-
|
|
150
|
-
|
|
151
|
-
approve=True)
|
|
149
|
+
warning_path: str = "warning",
|
|
150
|
+
nb_warnings: int = 1):
|
|
151
|
+
scenario = NavigationScenarioData(self.device, self.backend, UseCase.TX_REVIEW, True,
|
|
152
|
+
nb_warnings)
|
|
152
153
|
self._navigate_warning(scenario, test_name, do_comparison, warning_path)
|
|
153
154
|
self._navigate_with_scenario(scenario, path, test_name, custom_screen_text, do_comparison)
|
|
154
155
|
|
|
@@ -157,10 +158,7 @@ class NavigateWithScenario:
|
|
|
157
158
|
test_name: Optional[str] = None,
|
|
158
159
|
custom_screen_text: Optional[str] = None,
|
|
159
160
|
do_comparison: bool = True):
|
|
160
|
-
scenario = NavigationScenarioData(self.device,
|
|
161
|
-
self.backend,
|
|
162
|
-
UseCase.TX_REVIEW,
|
|
163
|
-
approve=False)
|
|
161
|
+
scenario = NavigationScenarioData(self.device, self.backend, UseCase.TX_REVIEW, False)
|
|
164
162
|
self._navigate_with_scenario(scenario, path, test_name, custom_screen_text, do_comparison)
|
|
165
163
|
|
|
166
164
|
def review_reject_with_warning(self,
|
|
@@ -168,11 +166,10 @@ class NavigateWithScenario:
|
|
|
168
166
|
test_name: Optional[str] = None,
|
|
169
167
|
custom_screen_text: Optional[str] = None,
|
|
170
168
|
do_comparison: bool = True,
|
|
171
|
-
warning_path: str = "warning"
|
|
172
|
-
|
|
173
|
-
|
|
174
|
-
|
|
175
|
-
approve=False)
|
|
169
|
+
warning_path: str = "warning",
|
|
170
|
+
nb_warnings: int = 1):
|
|
171
|
+
scenario = NavigationScenarioData(self.device, self.backend, UseCase.TX_REVIEW, False,
|
|
172
|
+
nb_warnings)
|
|
176
173
|
self._navigate_warning(scenario, test_name, do_comparison, warning_path)
|
|
177
174
|
self._navigate_with_scenario(scenario, path, test_name, custom_screen_text, do_comparison)
|
|
178
175
|
|
|
@@ -181,10 +178,8 @@ class NavigateWithScenario:
|
|
|
181
178
|
test_name: Optional[str] = None,
|
|
182
179
|
custom_screen_text: Optional[str] = None,
|
|
183
180
|
do_comparison: bool = True):
|
|
184
|
-
scenario = NavigationScenarioData(self.device,
|
|
185
|
-
|
|
186
|
-
UseCase.ADDRESS_CONFIRMATION,
|
|
187
|
-
approve=True)
|
|
181
|
+
scenario = NavigationScenarioData(self.device, self.backend, UseCase.ADDRESS_CONFIRMATION,
|
|
182
|
+
True)
|
|
188
183
|
self._navigate_with_scenario(scenario, path, test_name, custom_screen_text, do_comparison)
|
|
189
184
|
|
|
190
185
|
def address_review_reject(self,
|
|
@@ -192,8 +187,6 @@ class NavigateWithScenario:
|
|
|
192
187
|
test_name: Optional[str] = None,
|
|
193
188
|
custom_screen_text: Optional[str] = None,
|
|
194
189
|
do_comparison: bool = True):
|
|
195
|
-
scenario = NavigationScenarioData(self.device,
|
|
196
|
-
|
|
197
|
-
UseCase.ADDRESS_CONFIRMATION,
|
|
198
|
-
approve=False)
|
|
190
|
+
scenario = NavigationScenarioData(self.device, self.backend, UseCase.ADDRESS_CONFIRMATION,
|
|
191
|
+
False)
|
|
199
192
|
self._navigate_with_scenario(scenario, path, test_name, custom_screen_text, do_comparison)
|
|
@@ -104,6 +104,11 @@ tests/functional/backend/__init__.py
|
|
|
104
104
|
tests/functional/backend/test_speculos.py
|
|
105
105
|
tests/functional/navigator/__init__.py
|
|
106
106
|
tests/functional/navigator/test_navigator.py
|
|
107
|
+
tests/snapshots/apex_p/waiting_screen/00000.png
|
|
108
|
+
tests/snapshots/apex_p/waiting_screen/00001.png
|
|
109
|
+
tests/snapshots/apex_p/waiting_screen/00002.png
|
|
110
|
+
tests/snapshots/apex_p/waiting_screen/00003.png
|
|
111
|
+
tests/snapshots/apex_p/waiting_screen/00004.png
|
|
107
112
|
tests/snapshots/flex/waiting_screen/00000.png
|
|
108
113
|
tests/snapshots/flex/waiting_screen/00001.png
|
|
109
114
|
tests/snapshots/flex/waiting_screen/00002.png
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
@@ -22,7 +22,7 @@ class StubPhysicalBackend(PhysicalBackend):
|
|
|
22
22
|
def receive(self) -> RAPDU:
|
|
23
23
|
return RAPDU(0x9000, b"")
|
|
24
24
|
|
|
25
|
-
def exchange_raw(self, data: bytes = b"") -> RAPDU:
|
|
25
|
+
def exchange_raw(self, data: bytes = b"", tick_timeout: int = 0) -> RAPDU:
|
|
26
26
|
return RAPDU(0x9000, b"")
|
|
27
27
|
|
|
28
28
|
@contextmanager
|