ledgered 0.9.1.dev4__tar.gz → 0.10.0__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.
- {ledgered-0.9.1.dev4 → ledgered-0.10.0}/.github/workflows/build_and_tests.yml +11 -9
- {ledgered-0.9.1.dev4 → ledgered-0.10.0}/.github/workflows/codeql-analysis.yml +4 -0
- {ledgered-0.9.1.dev4 → ledgered-0.10.0}/.github/workflows/fast-checks.yml +4 -0
- {ledgered-0.9.1.dev4 → ledgered-0.10.0}/CHANGELOG.md +8 -0
- ledgered-0.10.0/MANIFEST.in +1 -0
- {ledgered-0.9.1.dev4/src/ledgered.egg-info → ledgered-0.10.0}/PKG-INFO +3 -2
- {ledgered-0.9.1.dev4 → ledgered-0.10.0}/pyproject.toml +2 -1
- {ledgered-0.9.1.dev4 → ledgered-0.10.0}/src/ledgered/__version__.py +2 -2
- ledgered-0.10.0/src/ledgered/devices/__init__.py +71 -0
- ledgered-0.10.0/src/ledgered/devices/devices.json +7 -0
- ledgered-0.10.0/src/ledgered/manifest/__init__.py +6 -0
- {ledgered-0.9.1.dev4 → ledgered-0.10.0}/src/ledgered/manifest/app.py +2 -7
- {ledgered-0.9.1.dev4 → ledgered-0.10.0}/src/ledgered/manifest/constants.py +0 -1
- {ledgered-0.9.1.dev4 → ledgered-0.10.0/src/ledgered.egg-info}/PKG-INFO +3 -2
- {ledgered-0.9.1.dev4 → ledgered-0.10.0}/src/ledgered.egg-info/SOURCES.txt +5 -0
- {ledgered-0.9.1.dev4 → ledgered-0.10.0}/src/ledgered.egg-info/requires.txt +2 -1
- ledgered-0.10.0/tests/unit/devices/test___init__.py +63 -0
- ledgered-0.10.0/tests/unit/manifest/__init__.py +0 -0
- {ledgered-0.9.1.dev4 → ledgered-0.10.0}/tests/unit/manifest/test_app.py +3 -5
- ledgered-0.9.1.dev4/src/ledgered/manifest/__init__.py +0 -6
- {ledgered-0.9.1.dev4 → ledgered-0.10.0}/.codecov.yml +0 -0
- {ledgered-0.9.1.dev4 → ledgered-0.10.0}/.gitignore +0 -0
- {ledgered-0.9.1.dev4 → ledgered-0.10.0}/.pre-commit-config.yaml +0 -0
- {ledgered-0.9.1.dev4 → ledgered-0.10.0}/LICENSE +0 -0
- {ledgered-0.9.1.dev4 → ledgered-0.10.0}/README.md +0 -0
- {ledgered-0.9.1.dev4 → ledgered-0.10.0}/doc/binary.md +0 -0
- {ledgered-0.9.1.dev4 → ledgered-0.10.0}/doc/manifest.md +0 -0
- {ledgered-0.9.1.dev4 → ledgered-0.10.0}/setup.cfg +0 -0
- {ledgered-0.9.1.dev4 → ledgered-0.10.0}/src/ledgered/__init__.py +0 -0
- {ledgered-0.9.1.dev4 → ledgered-0.10.0}/src/ledgered/binary.py +0 -0
- {ledgered-0.9.1.dev4 → ledgered-0.10.0}/src/ledgered/github.py +0 -0
- {ledgered-0.9.1.dev4 → ledgered-0.10.0}/src/ledgered/manifest/cli.py +0 -0
- {ledgered-0.9.1.dev4 → ledgered-0.10.0}/src/ledgered/manifest/errors.py +0 -0
- {ledgered-0.9.1.dev4 → ledgered-0.10.0}/src/ledgered/manifest/manifest.py +0 -0
- {ledgered-0.9.1.dev4 → ledgered-0.10.0}/src/ledgered/manifest/tests.py +0 -0
- {ledgered-0.9.1.dev4 → ledgered-0.10.0}/src/ledgered/manifest/use_cases.py +0 -0
- {ledgered-0.9.1.dev4 → ledgered-0.10.0}/src/ledgered/manifest/utils.py +0 -0
- {ledgered-0.9.1.dev4 → ledgered-0.10.0}/src/ledgered/serializers.py +0 -0
- {ledgered-0.9.1.dev4 → ledgered-0.10.0}/src/ledgered/utils/__init__.py +0 -0
- {ledgered-0.9.1.dev4 → ledgered-0.10.0}/src/ledgered.egg-info/dependency_links.txt +0 -0
- {ledgered-0.9.1.dev4 → ledgered-0.10.0}/src/ledgered.egg-info/entry_points.txt +0 -0
- {ledgered-0.9.1.dev4 → ledgered-0.10.0}/src/ledgered.egg-info/top_level.txt +0 -0
- {ledgered-0.9.1.dev4 → ledgered-0.10.0}/tests/_data/Cargo.toml +0 -0
- {ledgered-0.9.1.dev4 → ledgered-0.10.0}/tests/_data/Makefile +0 -0
- {ledgered-0.9.1.dev4 → ledgered-0.10.0}/tests/_data/full_correct.toml +0 -0
- {ledgered-0.9.1.dev4 → ledgered-0.10.0}/tests/_data/ledger_app.toml +0 -0
- {ledgered-0.9.1.dev4 → ledgered-0.10.0}/tests/_data/minimal.toml +0 -0
- {ledgered-0.9.1.dev4 → ledgered-0.10.0}/tests/_data/one_leaf.toml +0 -0
- {ledgered-0.9.1.dev4 → ledgered-0.10.0}/tests/functional/__init__.py +0 -0
- {ledgered-0.9.1.dev4 → ledgered-0.10.0}/tests/functional/conftest.py +0 -0
- {ledgered-0.9.1.dev4 → ledgered-0.10.0}/tests/functional/manifest/__init__.py +0 -0
- {ledgered-0.9.1.dev4 → ledgered-0.10.0}/tests/functional/manifest/test_cli.py +0 -0
- {ledgered-0.9.1.dev4 → ledgered-0.10.0}/tests/functional/test_github.py +0 -0
- {ledgered-0.9.1.dev4 → ledgered-0.10.0}/tests/unit/__init__.py +0 -0
- {ledgered-0.9.1.dev4/tests/unit/manifest → ledgered-0.10.0/tests/unit/devices}/__init__.py +0 -0
- {ledgered-0.9.1.dev4 → ledgered-0.10.0}/tests/unit/manifest/test_manifest.py +0 -0
- {ledgered-0.9.1.dev4 → ledgered-0.10.0}/tests/unit/manifest/test_tests.py +0 -0
- {ledgered-0.9.1.dev4 → ledgered-0.10.0}/tests/unit/manifest/test_use_cases.py +0 -0
- {ledgered-0.9.1.dev4 → ledgered-0.10.0}/tests/unit/test_binary.py +0 -0
- {ledgered-0.9.1.dev4 → ledgered-0.10.0}/tests/unit/test_github.py +0 -0
- {ledgered-0.9.1.dev4 → ledgered-0.10.0}/tests/unit/test_github_AppRepository.py +0 -0
- {ledgered-0.9.1.dev4 → ledgered-0.10.0}/tests/unit/test_serializers.py +0 -0
|
@@ -16,6 +16,11 @@ on:
|
|
|
16
16
|
- 'src/**'
|
|
17
17
|
- 'tests/**'
|
|
18
18
|
- .github/workflows/build_and_tests.yml
|
|
19
|
+
# Cancel previous runs on this reference
|
|
20
|
+
concurrency:
|
|
21
|
+
group: ${{ github.workflow }}-${{ github.ref }}
|
|
22
|
+
cancel-in-progress: true
|
|
23
|
+
|
|
19
24
|
|
|
20
25
|
jobs:
|
|
21
26
|
|
|
@@ -40,9 +45,6 @@ jobs:
|
|
|
40
45
|
pip install -U pip
|
|
41
46
|
pip install -U .[dev]
|
|
42
47
|
|
|
43
|
-
- name: Run tests and generate coverage
|
|
44
|
-
run: pytest -v --tb=short tests/ --cov ledgered --cov-report xml
|
|
45
|
-
|
|
46
48
|
- name: Run unit tests and generate coverage
|
|
47
49
|
run: pytest -v --tb=short tests/unit --cov ledgered --cov-report xml
|
|
48
50
|
|
|
@@ -94,7 +96,7 @@ jobs:
|
|
|
94
96
|
echo "- Tag version: ${{ env.TAG_VERSION }}"
|
|
95
97
|
|
|
96
98
|
- name: Check version against CHANGELOG
|
|
97
|
-
if: startsWith(github.ref, 'refs/tags/')
|
|
99
|
+
if: success() && github.event_name == 'push' && startsWith(github.ref, 'refs/tags/')
|
|
98
100
|
run: |
|
|
99
101
|
CHANGELOG_VERSION=$(grep -Po '(?<=## \[)(\d+\.)+[^\]]' CHANGELOG.md | head -n 1)
|
|
100
102
|
if [ "${{ env.TAG_VERSION }}" == "${CHANGELOG_VERSION}" ]; \
|
|
@@ -106,7 +108,7 @@ jobs:
|
|
|
106
108
|
fi
|
|
107
109
|
|
|
108
110
|
- name: Publish Python package on pypi.org
|
|
109
|
-
if: success() && github.event_name == 'push'
|
|
111
|
+
if: success() && github.event_name == 'push' && startsWith(github.ref, 'refs/tags/')
|
|
110
112
|
run: python -m twine upload dist/*
|
|
111
113
|
env:
|
|
112
114
|
TWINE_USERNAME: __token__
|
|
@@ -114,13 +116,13 @@ jobs:
|
|
|
114
116
|
TWINE_NON_INTERACTIVE: 1
|
|
115
117
|
|
|
116
118
|
- name: Login to Ledger Artifactory
|
|
117
|
-
if: success() && github.event_name == 'push'
|
|
119
|
+
if: success() && github.event_name == 'push' && startsWith(github.ref, 'refs/tags/')
|
|
118
120
|
timeout-minutes: 10
|
|
119
121
|
id: jfrog-login
|
|
120
122
|
uses: LedgerHQ/actions-security/actions/jfrog-login@actions/jfrog-login-1
|
|
121
123
|
|
|
122
124
|
- name: Publish Python package on Ledger Artifactory
|
|
123
|
-
if: success() && github.event_name == 'push'
|
|
125
|
+
if: success() && github.event_name == 'push' && startsWith(github.ref, 'refs/tags/')
|
|
124
126
|
run: python -m twine upload dist/*
|
|
125
127
|
env:
|
|
126
128
|
TWINE_REPOSITORY_URL: https://jfrog.ledgerlabs.net/artifactory/api/pypi/embedded-apps-pypi-prod-green
|
|
@@ -129,14 +131,14 @@ jobs:
|
|
|
129
131
|
TWINE_NON_INTERACTIVE: 1
|
|
130
132
|
|
|
131
133
|
- name: Generate library build attestations
|
|
132
|
-
if: success() && github.event_name == 'push'
|
|
134
|
+
if: success() && github.event_name == 'push' && startsWith(github.ref, 'refs/tags/')
|
|
133
135
|
timeout-minutes: 10
|
|
134
136
|
uses: LedgerHQ/actions-security/actions/attest@actions/attest-1
|
|
135
137
|
with:
|
|
136
138
|
subject-path: dist/*
|
|
137
139
|
|
|
138
140
|
- name: Sign library artifacts
|
|
139
|
-
if: success() && github.event_name == 'push'
|
|
141
|
+
if: success() && github.event_name == 'push' && startsWith(github.ref, 'refs/tags/')
|
|
140
142
|
timeout-minutes: 10
|
|
141
143
|
uses: LedgerHQ/actions-security/actions/sign-blob@actions/sign-blob-1
|
|
142
144
|
with:
|
|
@@ -5,6 +5,14 @@ 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
|
+
## [0.10.0] - 2025-05-09
|
|
9
|
+
|
|
10
|
+
### Added
|
|
11
|
+
|
|
12
|
+
- Added `devices` module, declaring Ledger devices as class / enum, dynamically generated from a
|
|
13
|
+
JSON configuration file. This should enable to add new devices more easily, and device
|
|
14
|
+
characteristics are now reachable from a centralized place.
|
|
15
|
+
|
|
8
16
|
## [0.9.1] - 2025-03-26
|
|
9
17
|
|
|
10
18
|
### Fixed
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
include src/ledgered/devices.json
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: ledgered
|
|
3
|
-
Version: 0.
|
|
3
|
+
Version: 0.10.0
|
|
4
4
|
Summary: Python tools, utils, libraries, to be used with Ledger cryptodevices
|
|
5
5
|
Author-email: Ledger <hello@ledger.fr>
|
|
6
6
|
License: MIT License
|
|
@@ -40,9 +40,10 @@ Classifier: Typing :: Typed
|
|
|
40
40
|
Requires-Python: >=3.9
|
|
41
41
|
Description-Content-Type: text/markdown
|
|
42
42
|
License-File: LICENSE
|
|
43
|
-
Requires-Dist:
|
|
43
|
+
Requires-Dist: pydantic
|
|
44
44
|
Requires-Dist: pyelftools
|
|
45
45
|
Requires-Dist: pygithub
|
|
46
|
+
Requires-Dist: toml
|
|
46
47
|
Provides-Extra: dev
|
|
47
48
|
Requires-Dist: pytest; extra == "dev"
|
|
48
49
|
Requires-Dist: pytest-cov; extra == "dev"
|
|
@@ -17,5 +17,5 @@ __version__: str
|
|
|
17
17
|
__version_tuple__: VERSION_TUPLE
|
|
18
18
|
version_tuple: VERSION_TUPLE
|
|
19
19
|
|
|
20
|
-
__version__ = version = '0.
|
|
21
|
-
__version_tuple__ = version_tuple = (0,
|
|
20
|
+
__version__ = version = '0.10.0'
|
|
21
|
+
__version_tuple__ = version_tuple = (0, 10, 0)
|
|
@@ -0,0 +1,71 @@
|
|
|
1
|
+
import dataclasses
|
|
2
|
+
import json
|
|
3
|
+
from enum import IntEnum, auto
|
|
4
|
+
from pathlib import Path
|
|
5
|
+
from pydantic.dataclasses import dataclass
|
|
6
|
+
|
|
7
|
+
|
|
8
|
+
class DeviceType(IntEnum):
|
|
9
|
+
NANOS = auto()
|
|
10
|
+
NANOSP = auto()
|
|
11
|
+
NANOX = auto()
|
|
12
|
+
STAX = auto()
|
|
13
|
+
FLEX = auto()
|
|
14
|
+
|
|
15
|
+
|
|
16
|
+
@dataclass
|
|
17
|
+
class Resolution:
|
|
18
|
+
x: int
|
|
19
|
+
y: int
|
|
20
|
+
|
|
21
|
+
|
|
22
|
+
@dataclass
|
|
23
|
+
class Device:
|
|
24
|
+
type: DeviceType
|
|
25
|
+
resolution: Resolution
|
|
26
|
+
touchable: bool = True
|
|
27
|
+
deprecated: bool = False
|
|
28
|
+
names: list[str] = dataclasses.field(default_factory=lambda: [])
|
|
29
|
+
|
|
30
|
+
@property
|
|
31
|
+
def name(self) -> str:
|
|
32
|
+
"""
|
|
33
|
+
Returns the name of the current firmware's device
|
|
34
|
+
"""
|
|
35
|
+
return self.type.name.lower()
|
|
36
|
+
|
|
37
|
+
@property
|
|
38
|
+
def is_nano(self):
|
|
39
|
+
"""
|
|
40
|
+
States if the firmware's name starts with 'nano' or not.
|
|
41
|
+
"""
|
|
42
|
+
return self.type in [DeviceType.NANOS, DeviceType.NANOSP, DeviceType.NANOX]
|
|
43
|
+
|
|
44
|
+
@classmethod
|
|
45
|
+
def from_dict(cls, dico: dict) -> "Device":
|
|
46
|
+
type = dico.pop("type")
|
|
47
|
+
dico["type"] = DeviceType[type.upper()]
|
|
48
|
+
return Device(**dico)
|
|
49
|
+
|
|
50
|
+
|
|
51
|
+
class Devices:
|
|
52
|
+
_devices_file = Path(__file__).absolute().parent / "devices.json"
|
|
53
|
+
with _devices_file.open() as filee:
|
|
54
|
+
_devices = json.load(filee)
|
|
55
|
+
|
|
56
|
+
DEVICE_DATA = {item.type: item for item in [Device.from_dict(i) for i in _devices]}
|
|
57
|
+
|
|
58
|
+
def __iter__(self):
|
|
59
|
+
for d in self.DEVICE_DATA.values():
|
|
60
|
+
yield d
|
|
61
|
+
|
|
62
|
+
@classmethod
|
|
63
|
+
def get_by_type(cls, device_type: DeviceType) -> Device:
|
|
64
|
+
return cls.DEVICE_DATA[device_type]
|
|
65
|
+
|
|
66
|
+
@classmethod
|
|
67
|
+
def get_by_name(cls, name: str) -> Device:
|
|
68
|
+
for device in cls.DEVICE_DATA.values():
|
|
69
|
+
if name.lower() == device.name or name.lower() in device.names:
|
|
70
|
+
return device
|
|
71
|
+
raise KeyError(f"Device named '{name}' unknown")
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
[
|
|
2
|
+
{"type": "nanos", "resolution": {"x": 128, "y": 32}, "touchable": false, "deprecated": true},
|
|
3
|
+
{"type": "nanosp", "resolution": {"x": 128, "y": 64}, "touchable": false, "names": ["nanos+", "nanos2", "nanosplus"]},
|
|
4
|
+
{"type": "nanox", "resolution": {"x": 128, "y": 64}, "touchable": false},
|
|
5
|
+
{"type": "flex", "resolution": {"x": 480, "y": 600}},
|
|
6
|
+
{"type": "stax", "resolution": {"x": 400, "y": 670}}
|
|
7
|
+
]
|
|
@@ -3,7 +3,7 @@ from pathlib import Path
|
|
|
3
3
|
from typing import Iterable, Union
|
|
4
4
|
|
|
5
5
|
from ledgered.serializers import Jsonable, JsonSet
|
|
6
|
-
from .
|
|
6
|
+
from ledgered.devices import Devices
|
|
7
7
|
|
|
8
8
|
|
|
9
9
|
@dataclass
|
|
@@ -18,12 +18,7 @@ class AppConfig(Jsonable):
|
|
|
18
18
|
raise ValueError(f"'{sdk}' unknown. Must be either 'C' or 'Rust'")
|
|
19
19
|
self.sdk = sdk
|
|
20
20
|
self.build_directory = Path(build_directory)
|
|
21
|
-
devices = JsonSet(
|
|
22
|
-
unknown_devices = devices.difference(EXISTING_DEVICES)
|
|
23
|
-
if unknown_devices:
|
|
24
|
-
unknown_devices_str = "', '".join(unknown_devices)
|
|
25
|
-
raise ValueError(f"Unknown devices: '{unknown_devices_str}'")
|
|
26
|
-
self.devices = devices
|
|
21
|
+
self.devices = JsonSet(Devices.get_by_name(device).name for device in devices)
|
|
27
22
|
|
|
28
23
|
@property
|
|
29
24
|
def is_rust(self) -> bool:
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: ledgered
|
|
3
|
-
Version: 0.
|
|
3
|
+
Version: 0.10.0
|
|
4
4
|
Summary: Python tools, utils, libraries, to be used with Ledger cryptodevices
|
|
5
5
|
Author-email: Ledger <hello@ledger.fr>
|
|
6
6
|
License: MIT License
|
|
@@ -40,9 +40,10 @@ Classifier: Typing :: Typed
|
|
|
40
40
|
Requires-Python: >=3.9
|
|
41
41
|
Description-Content-Type: text/markdown
|
|
42
42
|
License-File: LICENSE
|
|
43
|
-
Requires-Dist:
|
|
43
|
+
Requires-Dist: pydantic
|
|
44
44
|
Requires-Dist: pyelftools
|
|
45
45
|
Requires-Dist: pygithub
|
|
46
|
+
Requires-Dist: toml
|
|
46
47
|
Provides-Extra: dev
|
|
47
48
|
Requires-Dist: pytest; extra == "dev"
|
|
48
49
|
Requires-Dist: pytest-cov; extra == "dev"
|
|
@@ -3,6 +3,7 @@
|
|
|
3
3
|
.pre-commit-config.yaml
|
|
4
4
|
CHANGELOG.md
|
|
5
5
|
LICENSE
|
|
6
|
+
MANIFEST.in
|
|
6
7
|
README.md
|
|
7
8
|
pyproject.toml
|
|
8
9
|
.github/workflows/build_and_tests.yml
|
|
@@ -21,6 +22,8 @@ src/ledgered.egg-info/dependency_links.txt
|
|
|
21
22
|
src/ledgered.egg-info/entry_points.txt
|
|
22
23
|
src/ledgered.egg-info/requires.txt
|
|
23
24
|
src/ledgered.egg-info/top_level.txt
|
|
25
|
+
src/ledgered/devices/__init__.py
|
|
26
|
+
src/ledgered/devices/devices.json
|
|
24
27
|
src/ledgered/manifest/__init__.py
|
|
25
28
|
src/ledgered/manifest/app.py
|
|
26
29
|
src/ledgered/manifest/cli.py
|
|
@@ -47,6 +50,8 @@ tests/unit/test_binary.py
|
|
|
47
50
|
tests/unit/test_github.py
|
|
48
51
|
tests/unit/test_github_AppRepository.py
|
|
49
52
|
tests/unit/test_serializers.py
|
|
53
|
+
tests/unit/devices/__init__.py
|
|
54
|
+
tests/unit/devices/test___init__.py
|
|
50
55
|
tests/unit/manifest/__init__.py
|
|
51
56
|
tests/unit/manifest/test_app.py
|
|
52
57
|
tests/unit/manifest/test_manifest.py
|
|
@@ -0,0 +1,63 @@
|
|
|
1
|
+
from ledgered.devices import Device, DeviceType, Devices, Resolution
|
|
2
|
+
from unittest import TestCase
|
|
3
|
+
|
|
4
|
+
|
|
5
|
+
class TestDevice(TestCase):
|
|
6
|
+
def setUp(self):
|
|
7
|
+
self.res = Resolution(x=10, y=20)
|
|
8
|
+
|
|
9
|
+
def test___init__simple(self):
|
|
10
|
+
type = DeviceType.NANOS
|
|
11
|
+
device = Device(type, self.res)
|
|
12
|
+
self.assertEqual(device.type, type)
|
|
13
|
+
self.assertEqual(device.touchable, True)
|
|
14
|
+
self.assertFalse(device.deprecated)
|
|
15
|
+
self.assertEqual(device.name, type.name.lower())
|
|
16
|
+
self.assertEqual(device.resolution, self.res)
|
|
17
|
+
|
|
18
|
+
def test_is_nano(self):
|
|
19
|
+
device = Device(DeviceType.NANOS, self.res)
|
|
20
|
+
self.assertTrue(device.is_nano)
|
|
21
|
+
device = Device(DeviceType.STAX, self.res)
|
|
22
|
+
self.assertFalse(device.is_nano)
|
|
23
|
+
|
|
24
|
+
def test_from_dict(self):
|
|
25
|
+
type, touchable, deprecated = "flex", False, True
|
|
26
|
+
device = Device.from_dict(
|
|
27
|
+
{
|
|
28
|
+
"type": type,
|
|
29
|
+
"resolution": {"x": self.res.x, "y": self.res.y},
|
|
30
|
+
"touchable": touchable,
|
|
31
|
+
"deprecated": deprecated,
|
|
32
|
+
}
|
|
33
|
+
)
|
|
34
|
+
self.assertEqual(device.type, DeviceType[type.upper()])
|
|
35
|
+
self.assertEqual(device.touchable, touchable)
|
|
36
|
+
self.assertEqual(device.deprecated, deprecated)
|
|
37
|
+
self.assertEqual(device.name, type)
|
|
38
|
+
self.assertEqual(device.resolution, Resolution(x=self.res.x, y=self.res.y))
|
|
39
|
+
|
|
40
|
+
|
|
41
|
+
class TestDevices(TestCase):
|
|
42
|
+
def test_get_type_ok(self):
|
|
43
|
+
type = DeviceType.STAX
|
|
44
|
+
device = Devices.get_by_type(type)
|
|
45
|
+
self.assertIsInstance(device, Device)
|
|
46
|
+
self.assertEqual(device.type, type)
|
|
47
|
+
|
|
48
|
+
def test_get_type_nok(self):
|
|
49
|
+
with self.assertRaises(KeyError):
|
|
50
|
+
Devices.get_by_type(9)
|
|
51
|
+
|
|
52
|
+
def test_get_by_name_ok(self):
|
|
53
|
+
device = Devices.get_by_name("nanos+")
|
|
54
|
+
self.assertIsInstance(device, Device)
|
|
55
|
+
self.assertEqual(device.type, DeviceType.NANOSP)
|
|
56
|
+
|
|
57
|
+
def test_get_by_name_nok(self):
|
|
58
|
+
with self.assertRaises(KeyError):
|
|
59
|
+
Devices.get_by_name("non existent")
|
|
60
|
+
|
|
61
|
+
def test___iter__(self):
|
|
62
|
+
for d in Devices():
|
|
63
|
+
self.assertIsInstance(d, Device)
|
|
File without changes
|
|
@@ -12,7 +12,7 @@ class TestAppConfig(TestCase):
|
|
|
12
12
|
config = AppConfig(sdk=sdk, build_directory=str(bd), devices=devices)
|
|
13
13
|
self.assertEqual(config.sdk, sdk.lower())
|
|
14
14
|
self.assertEqual(config.build_directory, bd)
|
|
15
|
-
self.assertEqual(config.devices, {
|
|
15
|
+
self.assertEqual(config.devices, {"nanos", "nanosp"})
|
|
16
16
|
self.assertTrue(config.is_rust)
|
|
17
17
|
self.assertFalse(config.is_c)
|
|
18
18
|
|
|
@@ -21,8 +21,6 @@ class TestAppConfig(TestCase):
|
|
|
21
21
|
AppConfig(sdk="Java", build_directory=str(), devices=set())
|
|
22
22
|
|
|
23
23
|
def test___init___nok_unknown_device(self):
|
|
24
|
-
devices = {"hic sunt", "dracones"}
|
|
25
|
-
with self.assertRaises(
|
|
24
|
+
devices = {"nanosp", "flex", "hic sunt", "dracones"}
|
|
25
|
+
with self.assertRaises(KeyError):
|
|
26
26
|
AppConfig(sdk="rust", build_directory=str(), devices=devices)
|
|
27
|
-
for device in devices:
|
|
28
|
-
self.assertIn(device, str(error.exception))
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|