Skip to content

Commit 282ab38

Browse files
Merge branch 'main' into dependabot/pip/pytest-cov-eq-4.star
2 parents 098676b + 6d7bacb commit 282ab38

40 files changed

+495
-545
lines changed

pyproject.toml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -63,7 +63,7 @@ test = [
6363
"pytest == 7.*",
6464
"pytest-cov",
6565
"pytest-asyncio",
66-
"mock == 4.*"
66+
"mock == 5.*"
6767
]
6868
docs = [
6969
"sphinx",
Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
11
pytest==7.*
22
pytest-cov==4.*
33
pytest-asyncio>=0.17.2
4-
mock==4.*
4+
mock==5.*

tests/software_tests/message/test_service_identifiers.py

Lines changed: 18 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -16,13 +16,13 @@ def setup_method(self):
1616
self.mock_warn = self._patcher_warn.start()
1717
self._patcher_is_member = patch(f"{SCRIPT_LOCATION}.RequestSID.is_member")
1818
self.mock_is_member = self._patcher_is_member.start()
19-
self._patcher_possible_request_sids = patch(f"{SCRIPT_LOCATION}.POSSIBLE_REQUEST_SIDS")
20-
self.mock_possible_request_sids = self._patcher_possible_request_sids.start()
19+
self.patcher_all_request_sids = patch(f"{SCRIPT_LOCATION}.ALL_REQUEST_SIDS")
20+
self.mock_all_request_sids = self.patcher_all_request_sids.start()
2121

2222
def teardown_method(self):
2323
self._patcher_warn.stop()
2424
self._patcher_is_member.stop()
25-
self._patcher_possible_request_sids.stop()
25+
self.patcher_all_request_sids.stop()
2626

2727
def test_inheritance__byte_enum(self):
2828
assert issubclass(RequestSID, ByteEnum)
@@ -36,29 +36,29 @@ def test_inheritance__extendable_enum(self):
3636
@pytest.mark.parametrize("value", [1, 0x55, 0xFF])
3737
def test_is_request_sid__member(self, value):
3838
self.mock_is_member.return_value = True
39-
self.mock_possible_request_sids.__contains__.return_value = True
39+
self.mock_all_request_sids.__contains__.return_value = True
4040
assert RequestSID.is_request_sid(value=value) is True
4141
self.mock_warn.assert_not_called()
4242
self.mock_is_member.assert_called_once_with(value)
43-
self.mock_possible_request_sids.__contains__.assert_called_once_with(value)
43+
self.mock_all_request_sids.__contains__.assert_called_once_with(value)
4444

4545
@pytest.mark.parametrize("value", [1, 0x55, 0xFF])
4646
def test_is_request_sid__unsupported(self, value):
4747
self.mock_is_member.return_value = False
48-
self.mock_possible_request_sids.__contains__.return_value = True
48+
self.mock_all_request_sids.__contains__.return_value = True
4949
assert RequestSID.is_request_sid(value=value) is True
5050
self.mock_warn.assert_called_once()
5151
self.mock_is_member.assert_called_once_with(value)
52-
self.mock_possible_request_sids.__contains__.assert_called_once_with(value)
52+
self.mock_all_request_sids.__contains__.assert_called_once_with(value)
5353

5454
@pytest.mark.parametrize("value", [1, 0x55, 0xFF])
5555
def test_is_request_sid__invalid(self, value):
5656
self.mock_is_member.return_value = False
57-
self.mock_possible_request_sids.__contains__.return_value = False
57+
self.mock_all_request_sids.__contains__.return_value = False
5858
assert RequestSID.is_request_sid(value=value) is False
5959
self.mock_warn.assert_not_called()
6060
self.mock_is_member.assert_not_called()
61-
self.mock_possible_request_sids.__contains__.assert_called_once_with(value)
61+
self.mock_all_request_sids.__contains__.assert_called_once_with(value)
6262

6363

6464
class TestResponseSID:
@@ -69,13 +69,13 @@ def setup_method(self):
6969
self.mock_warn = self._patcher_warn.start()
7070
self._patcher_is_member = patch(f"{SCRIPT_LOCATION}.ResponseSID.is_member")
7171
self.mock_is_member = self._patcher_is_member.start()
72-
self._patcher_possible_response_sids = patch(f"{SCRIPT_LOCATION}.POSSIBLE_RESPONSE_SIDS")
73-
self.mock_possible_response_sids = self._patcher_possible_response_sids.start()
72+
self.patcher_all_response_sids = patch(f"{SCRIPT_LOCATION}.ALL_RESPONSE_SIDS")
73+
self.mock_all_response_sids = self.patcher_all_response_sids.start()
7474

7575
def teardown_method(self):
7676
self._patcher_warn.stop()
7777
self._patcher_is_member.stop()
78-
self._patcher_possible_response_sids.stop()
78+
self.patcher_all_response_sids.stop()
7979

8080
def test_inheritance__byte_enum(self):
8181
assert issubclass(ResponseSID, ByteEnum)
@@ -89,29 +89,29 @@ def test_inheritance__extendable_enum(self):
8989
@pytest.mark.parametrize("value", [1, 0x55, 0xFF])
9090
def test_is_response_sid__member(self, value):
9191
self.mock_is_member.return_value = True
92-
self.mock_possible_response_sids.__contains__.return_value = True
92+
self.mock_all_response_sids.__contains__.return_value = True
9393
assert ResponseSID.is_response_sid(value=value) is True
9494
self.mock_warn.assert_not_called()
9595
self.mock_is_member.assert_called_once_with(value)
96-
self.mock_possible_response_sids.__contains__.assert_called_once_with(value)
96+
self.mock_all_response_sids.__contains__.assert_called_once_with(value)
9797

9898
@pytest.mark.parametrize("value", [1, 0x55, 0xFF])
9999
def test_is_response_sid__unsupported(self, value):
100100
self.mock_is_member.return_value = False
101-
self.mock_possible_response_sids.__contains__.return_value = True
101+
self.mock_all_response_sids.__contains__.return_value = True
102102
assert ResponseSID.is_response_sid(value=value) is True
103103
self.mock_warn.assert_called_once()
104104
self.mock_is_member.assert_called_once_with(value)
105-
self.mock_possible_response_sids.__contains__.assert_called_once_with(value)
105+
self.mock_all_response_sids.__contains__.assert_called_once_with(value)
106106

107107
@pytest.mark.parametrize("value", [1, 0x55, 0xFF])
108108
def test_is_response_sid__invalid(self, value):
109109
self.mock_is_member.return_value = False
110-
self.mock_possible_response_sids.__contains__.return_value = False
110+
self.mock_all_response_sids.__contains__.return_value = False
111111
assert ResponseSID.is_response_sid(value=value) is False
112112
self.mock_warn.assert_not_called()
113113
self.mock_is_member.assert_not_called()
114-
self.mock_possible_response_sids.__contains__.assert_called_once_with(value)
114+
self.mock_all_response_sids.__contains__.assert_called_once_with(value)
115115

116116

117117
@pytest.mark.integration

tests/software_tests/message/test_uds_message.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -78,7 +78,7 @@ def test_addressing_type__get(self, value):
7878

7979
def test_addressing_type__set(self, example_addressing_type):
8080
UdsMessage.addressing_type.fset(self.mock_uds_message, value=example_addressing_type)
81-
assert self.mock_uds_message._UdsMessage__addressing_type == example_addressing_type
81+
assert self.mock_uds_message._UdsMessage__addressing_type == self.mock_validate_addressing.return_value
8282
self.mock_validate_addressing.assert_called_once_with(example_addressing_type)
8383

8484
def test_addressing_type__set_second_call(self, example_addressing_type):

tests/software_tests/packet/test_abstract_packet.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -65,7 +65,7 @@ def test_direction__get(self, direction):
6565

6666
def test_direction__set(self, example_transmission_direction):
6767
AbstractUdsPacketRecord.direction.fset(self.mock_packet_record, value=example_transmission_direction)
68-
assert self.mock_packet_record._AbstractUdsPacketRecord__direction == example_transmission_direction
68+
assert self.mock_packet_record._AbstractUdsPacketRecord__direction == self.mock_validate_direction.return_value
6969
self.mock_validate_direction.assert_called_once_with(example_transmission_direction)
7070

7171
@pytest.mark.parametrize("old_value", [None, 0, "some direction"])

tests/software_tests/packet/test_can_packet_record.py

Lines changed: 6 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -60,18 +60,16 @@ def test_init(self, frame, direction, addressing_type, addressing_format, transm
6060
addressing_format=addressing_format,
6161
transmission_time=transmission_time)
6262
assert self.mock_can_packet_record._CanPacketRecord__addressing_type \
63-
== self.mock_addressing_type_class.return_value
63+
== self.mock_addressing_type_class.validate_member.return_value
6464
assert self.mock_can_packet_record._CanPacketRecord__addressing_format \
65-
== self.mock_can_addressing_format_class.return_value
65+
== self.mock_can_addressing_format_class.validate_member.return_value
6666
self.mock_abstract_uds_packet_record_init.assert_called_once_with(frame=frame,
6767
direction=direction,
6868
transmission_time=transmission_time)
6969
self.mock_can_packet_record._CanPacketRecord__assess_packet_type.assert_called_once_with()
7070
self.mock_can_packet_record._CanPacketRecord__assess_ai_attributes.assert_called_once_with()
7171
self.mock_addressing_type_class.validate_member.assert_called_once_with(addressing_type)
72-
self.mock_addressing_type_class.assert_called_once_with(addressing_type)
7372
self.mock_can_addressing_format_class.validate_member.assert_called_once_with(addressing_format)
74-
self.mock_can_addressing_format_class.assert_called_once_with(addressing_format)
7573

7674
# raw_frame_data
7775

@@ -160,12 +158,12 @@ def test_assess_packet_type(self, raw_frame_data, ai_data_bytes_number):
160158
self.mock_can_packet_record.raw_frame_data = raw_frame_data
161159
self.mock_can_ai_class.get_ai_data_bytes_number.return_value = ai_data_bytes_number
162160
assert CanPacketRecord._CanPacketRecord__assess_packet_type(self=self.mock_can_packet_record) is None
163-
assert self.mock_can_packet_record._CanPacketRecord__packet_type == self.mock_can_packet_type_class.return_value
161+
assert self.mock_can_packet_record._CanPacketRecord__packet_type \
162+
== self.mock_can_packet_type_class.validate_member.return_value
164163
n_pci_value = raw_frame_data[ai_data_bytes_number] >> 4
165164
self.mock_can_ai_class.get_ai_data_bytes_number.assert_called_once_with(
166165
self.mock_can_packet_record.addressing_format)
167166
self.mock_can_packet_type_class.validate_member.assert_called_once_with(n_pci_value)
168-
self.mock_can_packet_type_class.assert_called_once_with(n_pci_value)
169167

170168
# __assess_ai_attributes
171169

@@ -195,8 +193,8 @@ def test_assess_ai_attributes(self, addressing_format, can_id, raw_frame_data,
195193
assert CanPacketRecord._CanPacketRecord__assess_ai_attributes(self=self.mock_can_packet_record) is None
196194
self.mock_can_ai_class.get_ai_data_bytes_number.assert_called_once_with(addressing_format)
197195
self.mock_can_ai_class.decode_packet_ai.assert_called_once_with(addressing_format=addressing_format,
198-
can_id=can_id,
199-
ai_data_bytes=raw_frame_data[:ai_data_bytes_number])
196+
can_id=can_id,
197+
ai_data_bytes=raw_frame_data[:ai_data_bytes_number])
200198
assert self.mock_can_packet_record._CanPacketRecord__target_address == decoded_ai["target_address"]
201199
assert self.mock_can_packet_record._CanPacketRecord__source_address == decoded_ai["source_address"]
202200
assert self.mock_can_packet_record._CanPacketRecord__address_extension == decoded_ai["address_extension"]

tests/software_tests/utilities/test_enums.py

Lines changed: 32 additions & 25 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,4 @@
11
import pytest
2-
from mock import patch
32
from aenum import IntEnum, StrEnum
43

54
from uds.utilities.enums import ExtendableEnum, ValidatedEnum, ByteEnum, NibbleEnum
@@ -111,22 +110,25 @@ def test_is_member__false(self, enum_class, not_member):
111110

112111
# validate_member
113112

114-
@patch(f"{SCRIPT_LOCATION}.ValidatedEnum.is_member")
115113
@pytest.mark.parametrize("enum_class", [ExampleByteEnum1, ExampleByteEnum2])
116-
@pytest.mark.parametrize("value", [None, ExampleByteEnum1.A, ExampleByteEnum2.Value1.value, 5])
117-
def test_validate_member__valid(self, mock_is_member, enum_class, value):
118-
mock_is_member.return_value = True
119-
assert enum_class.validate_member(value) is None
120-
mock_is_member.assert_called_once_with(value)
114+
def test_validate_member__valid_instance(self, enum_class):
115+
assert all([enum_class.validate_member(member) == member for member in enum_class])
121116

122-
@patch(f"{SCRIPT_LOCATION}.ValidatedEnum.is_member")
123117
@pytest.mark.parametrize("enum_class", [ExampleByteEnum1, ExampleByteEnum2])
124-
@pytest.mark.parametrize("value", [None, ExampleByteEnum1.A, ExampleByteEnum2.Value1.value, 5])
125-
def test_validate_member__invalid(self, mock_is_member, enum_class, value):
126-
mock_is_member.return_value = False
118+
def test_validate_member__valid_value(self, enum_class):
119+
assert all([enum_class.validate_member(member.value) == member for member in enum_class])
120+
121+
@pytest.mark.parametrize("enum_class, not_member", [
122+
(ExampleByteEnum1, ExampleByteEnum2.Value1),
123+
(ExampleByteEnum1, ExampleByteEnum2.Value2.value),
124+
(ExampleByteEnum1, "not a member"),
125+
(ExampleByteEnum2, ExampleByteEnum1.A),
126+
(ExampleByteEnum2, ExampleByteEnum1.B.value),
127+
(ExampleByteEnum2, "some crap"),
128+
])
129+
def test_validate_member__invalid(self, enum_class, not_member):
127130
with pytest.raises(ValueError):
128-
enum_class.validate_member(value)
129-
mock_is_member.assert_called_once_with(value)
131+
enum_class.validate_member(not_member)
130132

131133

132134
class TestExtendableEnum:
@@ -223,22 +225,27 @@ def test_is_member__false(self, enum_class, not_member):
223225

224226
# validate_member
225227

226-
@patch(f"{SCRIPT_LOCATION}.ValidatedEnum.is_member")
227228
@pytest.mark.parametrize("enum_class", [ExtendableByteEnumWithValidated, ValidatedIntEnum])
228-
@pytest.mark.parametrize("value", [None, ExtendableByteEnumWithValidated.V1, ValidatedIntEnum.Int1.value, 5])
229-
def test_validate_member__valid(self, mock_is_member, enum_class, value):
230-
mock_is_member.return_value = True
231-
assert enum_class.validate_member(value) is None
232-
mock_is_member.assert_called_once_with(value)
229+
def test_validate_member__valid_instance(self, enum_class):
230+
assert all([enum_class.validate_member(member) == member for member in enum_class])
233231

234-
@patch(f"{SCRIPT_LOCATION}.ValidatedEnum.is_member")
235232
@pytest.mark.parametrize("enum_class", [ExtendableByteEnumWithValidated, ValidatedIntEnum])
236-
@pytest.mark.parametrize("value", [None, ExtendableByteEnumWithValidated.V1, ValidatedIntEnum.Int1.value, 5])
237-
def test_validate_member__invalid(self, mock_is_member, enum_class, value):
238-
mock_is_member.return_value = False
233+
def test_validate_member__valid_value(self, enum_class):
234+
assert all([enum_class.validate_member(member.value) == member for member in enum_class])
235+
236+
@pytest.mark.parametrize("enum_class, not_member", [
237+
(ExtendableByteEnumWithValidated, ExtendableStrEnum.Text1),
238+
(ExtendableByteEnumWithValidated, "not a member"),
239+
(ExtendableByteEnumWithValidated, 0xFF),
240+
(ExtendableByteEnumWithValidated, 0x00),
241+
(ValidatedIntEnum, -1),
242+
(ValidatedIntEnum, ExtendableByteEnumWithValidated.V1),
243+
(ValidatedIntEnum, None),
244+
(ValidatedIntEnum, "some crap"),
245+
])
246+
def test_validate_member__invalid(self, enum_class, not_member):
239247
with pytest.raises(ValueError):
240-
enum_class.validate_member(value)
241-
mock_is_member.assert_called_once_with(value)
248+
enum_class.validate_member(not_member)
242249

243250
# add_member
244251

uds/can/__init__.py

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -15,7 +15,7 @@
1515
- Flow Status
1616
"""
1717

18-
from .addressing_format import CanAddressingFormat, CanAddressingFormatAlias
18+
from .addressing_format import CanAddressingFormat
1919
from .abstract_addressing_information import AbstractCanAddressingInformation, PacketAIParamsAlias
2020
from .normal_addressing_information import Normal11BitCanAddressingInformation, NormalFixedCanAddressingInformation
2121
from .extended_addressing_information import ExtendedCanAddressingInformation
@@ -25,4 +25,4 @@
2525
from .single_frame import CanSingleFrameHandler
2626
from .first_frame import CanFirstFrameHandler
2727
from .consecutive_frame import CanConsecutiveFrameHandler
28-
from .flow_control import CanFlowControlHandler, CanFlowStatus, CanFlowStatusAlias, CanSTminTranslator
28+
from .flow_control import CanFlowControlHandler, CanFlowStatus, CanSTminTranslator

uds/can/abstract_addressing_information.py

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -6,16 +6,16 @@
66
from abc import ABC, abstractmethod
77
from copy import deepcopy
88

9-
from uds.transmission_attributes import AddressingTypeAlias, AddressingType
10-
from .addressing_format import CanAddressingFormatAlias
9+
from uds.transmission_attributes import AddressingType
10+
from .addressing_format import CanAddressingFormat
1111
from .frame_fields import CanIdHandler
1212

1313

1414
class PacketAIParamsAlias(TypedDict):
1515
"""Alias of :ref:`Addressing Information <knowledge-base-n-ai>` parameters of CAN packets stream."""
1616

17-
addressing_format: CanAddressingFormatAlias
18-
addressing_type: AddressingTypeAlias
17+
addressing_format: CanAddressingFormat
18+
addressing_type: AddressingType
1919
can_id: int
2020
target_address: Optional[int]
2121
source_address: Optional[int]
@@ -69,7 +69,7 @@ def __init__(self,
6969

7070
@property
7171
@abstractmethod
72-
def addressing_format(self) -> CanAddressingFormatAlias:
72+
def addressing_format(self) -> CanAddressingFormat:
7373
"""CAN Addressing format used."""
7474

7575
@property
@@ -135,7 +135,7 @@ def tx_packets_functional_ai(self, value: InputAIParamsAlias):
135135
@classmethod
136136
@abstractmethod
137137
def validate_packet_ai(cls,
138-
addressing_type: AddressingTypeAlias,
138+
addressing_type: AddressingType,
139139
can_id: Optional[int] = None,
140140
target_address: Optional[int] = None,
141141
source_address: Optional[int] = None,

uds/can/addressing_format.py

Lines changed: 6 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,6 @@
11
"""Implementation of CAN Addressing Formats."""
22

3-
__all__ = ["CanAddressingFormat", "CanAddressingFormatAlias"]
4-
5-
from typing import Union
3+
__all__ = ["CanAddressingFormat"]
64

75
from aenum import unique, StrEnum
86

@@ -18,21 +16,17 @@ class CanAddressingFormat(StrEnum, ValidatedEnum):
1816
:ref:`Network Address Information (N_AI) <knowledge-base-n-ai>` is provided.
1917
"""
2018

21-
NORMAL_11BIT_ADDRESSING = "Normal 11-bit Addressing"
19+
NORMAL_11BIT_ADDRESSING: "CanAddressingFormat" = "Normal 11-bit Addressing" # type: ignore
2220
""":ref:`Normal addressing <knowledge-base-can-normal-addressing>` format that uses 11-bit CAN Identifiers."""
23-
NORMAL_FIXED_ADDRESSING = "Normal Fixed Addressing"
21+
NORMAL_FIXED_ADDRESSING: "CanAddressingFormat" = "Normal Fixed Addressing" # type: ignore
2422
""":ref:`Normal fixed addressing <knowledge-base-can-normal-fixed-addressing>` format.
2523
It is a subformat of :ref:`Normal addressing <knowledge-base-can-normal-addressing>` which uses 29-bit
2624
CAN Identifiers only."""
27-
EXTENDED_ADDRESSING = "Extended Addressing"
25+
EXTENDED_ADDRESSING: "CanAddressingFormat" = "Extended Addressing" # type: ignore
2826
""":ref:`Extended addressing <knowledge-base-can-extended-addressing>` format."""
29-
MIXED_11BIT_ADDRESSING = "Mixed 11-bit Addressing"
27+
MIXED_11BIT_ADDRESSING: "CanAddressingFormat" = "Mixed 11-bit Addressing" # type: ignore
3028
""":ref:`Mixed addressing with 11-bit CAN ID <knowledge-base-can-mixed-11-bit-addressing>` format.
3129
It is a subformat of :ref:`mixed addressing <knowledge-base-can-mixed-addressing>`."""
32-
MIXED_29BIT_ADDRESSING = "Mixed 29-bit Addressing"
30+
MIXED_29BIT_ADDRESSING: "CanAddressingFormat" = "Mixed 29-bit Addressing" # type: ignore
3331
""":ref:`Mixed addressing with 29-bit CAN ID <knowledge-base-can-mixed-29-bit-addressing>` format.
3432
It is a subformat of :ref:`mixed addressing <knowledge-base-can-mixed-addressing>`."""
35-
36-
37-
CanAddressingFormatAlias = Union[CanAddressingFormat, str]
38-
"""Alias that describes :class:`~uds.can.addressing_format.CanAddressingFormat` member."""

0 commit comments

Comments
 (0)