armodel 1.8.2__py3-none-any.whl → 1.8.4__py3-none-any.whl

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.
Files changed (34) hide show
  1. armodel/cli/format_xml_cli.py +62 -0
  2. armodel/cli/uuid_checker_cli.py +94 -0
  3. armodel/models/M2/AUTOSARTemplates/AutosarTopLevelStructure.py +4 -1
  4. armodel/models/M2/AUTOSARTemplates/BswModuleTemplate/BswBehavior.py +7 -0
  5. armodel/models/M2/AUTOSARTemplates/BswModuleTemplate/BswInterfaces.py +7 -4
  6. armodel/models/M2/AUTOSARTemplates/CommonStructure/ImplementationDataTypes.py +17 -15
  7. armodel/models/M2/AUTOSARTemplates/CommonStructure/TriggerDeclaration.py +1 -1
  8. armodel/models/M2/AUTOSARTemplates/CommonStructure/__init__.py +44 -28
  9. armodel/models/M2/AUTOSARTemplates/GenericStructure/GeneralTemplateClasses/Identifiable.py +5 -5
  10. armodel/models/M2/AUTOSARTemplates/GenericStructure/GeneralTemplateClasses/PrimitiveTypes.py +15 -3
  11. armodel/models/M2/AUTOSARTemplates/SWComponentTemplate/Communication.py +247 -45
  12. armodel/models/M2/AUTOSARTemplates/SWComponentTemplate/SwcInternalBehavior/AutosarVariableRef.py +9 -6
  13. armodel/models/M2/AUTOSARTemplates/SWComponentTemplate/SwcInternalBehavior/DataElements.py +7 -5
  14. armodel/models/M2/AUTOSARTemplates/SWComponentTemplate/SwcInternalBehavior/RTEEvents.py +3 -3
  15. armodel/models/M2/AUTOSARTemplates/SWComponentTemplate/SwcInternalBehavior/Trigger.py +43 -2
  16. armodel/models/M2/AUTOSARTemplates/SWComponentTemplate/SwcInternalBehavior/__init__.py +40 -43
  17. armodel/models/M2/MSR/AsamHdo/ComputationMethod.py +13 -12
  18. armodel/models/M2/MSR/DataDictionary/DataDefProperties.py +40 -9
  19. armodel/models/utils/uuid_mgr.py +6 -0
  20. armodel/parser/abstract_arxml_parser.py +5 -1
  21. armodel/parser/arxml_parser.py +111 -62
  22. armodel/tests/test_armodel/models/test_common_structure.py +2 -2
  23. armodel/tests/test_armodel/parser/test_arxml_parser.py +38 -0
  24. armodel/tests/test_armodel/parser/test_implementation_data_type.py +247 -0
  25. armodel/tests/test_armodel/parser/test_rte_event.py +142 -0
  26. armodel/tests/test_armodel/parser/test_runnable_entity.py +135 -0
  27. armodel/writer/abstract_arxml_writer.py +2 -0
  28. armodel/writer/arxml_writer.py +106 -28
  29. {armodel-1.8.2.dist-info → armodel-1.8.4.dist-info}/METADATA +19 -1
  30. {armodel-1.8.2.dist-info → armodel-1.8.4.dist-info}/RECORD +34 -29
  31. {armodel-1.8.2.dist-info → armodel-1.8.4.dist-info}/entry_points.txt +2 -0
  32. {armodel-1.8.2.dist-info → armodel-1.8.4.dist-info}/LICENSE +0 -0
  33. {armodel-1.8.2.dist-info → armodel-1.8.4.dist-info}/WHEEL +0 -0
  34. {armodel-1.8.2.dist-info → armodel-1.8.4.dist-info}/top_level.txt +0 -0
@@ -0,0 +1,247 @@
1
+ from ....writer.arxml_writer import ARXMLWriter
2
+ from ....models.M2.AUTOSARTemplates.AutosarTopLevelStructure import AUTOSARDoc
3
+ from ....parser.arxml_parser import ARXMLParser
4
+ import xml.etree.ElementTree as ET
5
+
6
+
7
+ class TestImplementationDataTypeParser:
8
+
9
+ def test_read_value_implementation_data_type(self):
10
+ parser = ARXMLParser()
11
+ parser.nsmap = {"xmlns": "http://autosar.org/schema/r4.0"}
12
+ xml_content = """
13
+ <AUTOSAR xmlns="http://autosar.org/schema/r4.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://autosar.org/schema/r4.0 AUTOSAR_4-3-0.xsd">
14
+ <AR-PACKAGES T="2023-03-08T00:27:29+08:00" UUID="cb03ce49-8b4b-4565-abce-0a7a054d24af">
15
+ <AR-PACKAGE>
16
+ <SHORT-NAME>ImplementationDataType</SHORT-NAME>s
17
+ <ELEMENTS>
18
+ <IMPLEMENTATION-DATA-TYPE>
19
+ <SHORT-NAME>MyDataType</SHORT-NAME>
20
+ <CATEGORY>VALUE</CATEGORY>
21
+ <SW-DATA-DEF-PROPS T="2020-08-24T10:22:17+02:00">
22
+ <SW-DATA-DEF-PROPS-VARIANTS>
23
+ <SW-DATA-DEF-PROPS-CONDITIONAL T="2020-08-31T10:28:32+02:00">
24
+ <BASE-TYPE-REF DEST="SW-BASE-TYPE">/AUTOSAR_Platform/BaseTypes/uint8</BASE-TYPE-REF>
25
+ <COMPU-METHOD-REF DEST="COMPU-METHOD">/Application/ApplicationTypes/compu_Application_E_MyDataType</COMPU-METHOD-REF>
26
+ </SW-DATA-DEF-PROPS-CONDITIONAL>
27
+ </SW-DATA-DEF-PROPS-VARIANTS>
28
+ </SW-DATA-DEF-PROPS>
29
+ </IMPLEMENTATION-DATA-TYPE>
30
+ </ELEMENTS>
31
+ </AR-PACKAGE>
32
+ </AR-PACKAGES>
33
+ </AUTOSAR>
34
+ """ # noqa E501
35
+
36
+ # prepare the XML content
37
+ element = ET.fromstring(xml_content)
38
+
39
+ # read the XML content using the parser
40
+ document = AUTOSARDoc()
41
+ parser.readARPackages(element, document)
42
+
43
+ # assert the ARPackages
44
+ assert len(document.getARPackages()) == 1
45
+ ar_package = document.getARPackages()[0]
46
+ assert ar_package.getShortName() == "ImplementationDataType"
47
+
48
+ # assert the ImplementationDataType
49
+ assert len(ar_package.getImplementationDataTypes()) == 1
50
+ data_type = ar_package.getImplementationDataTypes()[0]
51
+ assert data_type.getShortName() == "MyDataType"
52
+ assert str(data_type.getCategory()) == "VALUE"
53
+ assert data_type.getCategory().getValue() == "VALUE"
54
+ assert data_type.getSwDataDefProps() is not None
55
+ assert data_type.getSwDataDefProps().getBaseTypeRef().getDest() == "SW-BASE-TYPE"
56
+ assert data_type.getSwDataDefProps().getBaseTypeRef().getValue() == "/AUTOSAR_Platform/BaseTypes/uint8"
57
+ assert data_type.getSwDataDefProps().getCompuMethodRef().getDest() == "COMPU-METHOD"
58
+ assert data_type.getSwDataDefProps().getCompuMethodRef().getValue() == "/Application/ApplicationTypes/compu_Application_E_MyDataType"
59
+
60
+ def test_read_array_implementation_data_type(self):
61
+ parser = ARXMLParser()
62
+ parser.nsmap = {"xmlns": "http://autosar.org/schema/r4.0"}
63
+ xml_content = """
64
+ <AUTOSAR xmlns="http://autosar.org/schema/r4.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://autosar.org/schema/r4.0 AUTOSAR_4-3-0.xsd">
65
+ <AR-PACKAGES T="2023-03-08T00:27:29+08:00" UUID="cb03ce49-8b4b-4565-abce-0a7a054d24af">
66
+ <AR-PACKAGE>
67
+ <SHORT-NAME>ImplementationDataType</SHORT-NAME>s
68
+ <ELEMENTS>
69
+ <IMPLEMENTATION-DATA-TYPE>
70
+ <SHORT-NAME>MyArrayDataType</SHORT-NAME>
71
+ <CATEGORY>ARRAY</CATEGORY>
72
+ <SW-DATA-DEF-PROPS>
73
+ <SW-DATA-DEF-PROPS-VARIANTS>
74
+ <SW-DATA-DEF-PROPS-CONDITIONAL></SW-DATA-DEF-PROPS-CONDITIONAL>
75
+ </SW-DATA-DEF-PROPS-VARIANTS>
76
+ </SW-DATA-DEF-PROPS>
77
+ <SUB-ELEMENTS>
78
+ <IMPLEMENTATION-DATA-TYPE-ELEMENT UUID="2264d081-8375-489d-bd02-b71b9d495a18">
79
+ <SHORT-NAME>Byte</SHORT-NAME>
80
+ <CATEGORY>VALUE</CATEGORY>
81
+ <ARRAY-SIZE T="2021-03-26T19:19:25+01:00">8</ARRAY-SIZE>
82
+ <ARRAY-SIZE-SEMANTICS>FIXED-SIZE</ARRAY-SIZE-SEMANTICS>
83
+ <SW-DATA-DEF-PROPS>
84
+ <SW-DATA-DEF-PROPS-VARIANTS>
85
+ <SW-DATA-DEF-PROPS-CONDITIONAL T="2021-03-26T20:19:25+01:00">
86
+ <BASE-TYPE-REF DEST="SW-BASE-TYPE">/AUTOSAR_Platform/BaseTypes/uint8</BASE-TYPE-REF>
87
+ </SW-DATA-DEF-PROPS-CONDITIONAL>
88
+ </SW-DATA-DEF-PROPS-VARIANTS>
89
+ </SW-DATA-DEF-PROPS>
90
+ </IMPLEMENTATION-DATA-TYPE-ELEMENT>
91
+ </SUB-ELEMENTS>
92
+ </IMPLEMENTATION-DATA-TYPE>
93
+ </ELEMENTS>
94
+ </AR-PACKAGE>
95
+ </AR-PACKAGES>
96
+ </AUTOSAR>
97
+ """ # noqa E501
98
+
99
+ # prepare the XML content
100
+ element = ET.fromstring(xml_content)
101
+
102
+ # read the XML content using the parser
103
+ document = AUTOSARDoc()
104
+ parser.readARPackages(element, document)
105
+
106
+ # assert the ARPackages
107
+ assert len(document.getARPackages()) == 1
108
+ ar_package = document.getARPackages()[0]
109
+ assert ar_package.getShortName() == "ImplementationDataType"
110
+
111
+ # assert the ImplementationDataType
112
+ assert len(ar_package.getImplementationDataTypes()) == 1
113
+ data_type = ar_package.getImplementationDataTypes()[0]
114
+ assert data_type.getShortName() == "MyArrayDataType"
115
+ assert str(data_type.getCategory()) == "ARRAY"
116
+ assert data_type.getCategory().getValue() == "ARRAY"
117
+ assert data_type.getSwDataDefProps() is not None
118
+ assert data_type.getSwDataDefProps().getBaseTypeRef() is None
119
+ assert data_type.getSwDataDefProps().getCompuMethodRef() is None
120
+
121
+ # assert the SubElements of ImplementationDataType
122
+ assert len(data_type.getSubElements()) == 1
123
+ sub_element = data_type.getSubElements()[0]
124
+ assert sub_element.getShortName() == "Byte"
125
+ assert str(sub_element.getCategory()) == "VALUE"
126
+ assert sub_element.getCategory().getValue() == "VALUE"
127
+ assert sub_element.getArraySize().getValue() == 8
128
+ assert str(sub_element.getArraySizeSemantics()) == "FIXED-SIZE"
129
+ assert sub_element.getArraySizeSemantics().getValue() == "FIXED-SIZE"
130
+ assert sub_element.getSwDataDefProps() is not None
131
+ assert sub_element.getSwDataDefProps().getBaseTypeRef() is not None
132
+ assert sub_element.getSwDataDefProps().getBaseTypeRef().getDest() == "SW-BASE-TYPE"
133
+ assert sub_element.getSwDataDefProps().getBaseTypeRef().getValue() == "/AUTOSAR_Platform/BaseTypes/uint8"
134
+ assert sub_element.getSwDataDefProps().getCompuMethodRef() is None
135
+
136
+ # root = ET.Element("AUTOSAR", parser.nsmap)
137
+ # writer = ARXMLWriter()
138
+ # writer.writeARPackage(root, document)
139
+ # xml_str = ET.tostring(root, encoding='utf-8')
140
+ # assert xml_str == xml_content
141
+
142
+ def test_structure_implementation_data_type(self):
143
+ parser = ARXMLParser()
144
+ parser.nsmap = {"xmlns": "http://autosar.org/schema/r4.0"}
145
+ xml_content = """
146
+ <AUTOSAR xmlns="http://autosar.org/schema/r4.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://autosar.org/schema/r4.0 AUTOSAR_4-3-0.xsd">
147
+ <AR-PACKAGES T="2023-03-08T00:27:29+08:00" UUID="cb03ce49-8b4b-4565-abce-0a7a054d24af">
148
+ <AR-PACKAGE>
149
+ <SHORT-NAME>ImplementationDataType</SHORT-NAME>s
150
+ <ELEMENTS>
151
+ <IMPLEMENTATION-DATA-TYPE>
152
+ <SHORT-NAME>MyStructDataType</SHORT-NAME>
153
+ <CATEGORY>STRUCTURE</CATEGORY>
154
+ <SW-DATA-DEF-PROPS>
155
+ <SW-DATA-DEF-PROPS-VARIANTS>
156
+ <SW-DATA-DEF-PROPS-CONDITIONAL></SW-DATA-DEF-PROPS-CONDITIONAL>
157
+ </SW-DATA-DEF-PROPS-VARIANTS>
158
+ </SW-DATA-DEF-PROPS>
159
+ <SUB-ELEMENTS>
160
+ <IMPLEMENTATION-DATA-TYPE-ELEMENT T="2021-03-26T20:42:24+01:00" UUID="DCE:7700371a-cddc-4346-8b1e-749bddae5ed0">
161
+ <SHORT-NAME>PayloadSize</SHORT-NAME>
162
+ <CATEGORY>VALUE</CATEGORY>
163
+ <SW-DATA-DEF-PROPS>
164
+ <SW-DATA-DEF-PROPS-VARIANTS>
165
+ <SW-DATA-DEF-PROPS-CONDITIONAL T="2021-03-26T19:16:35+01:00">
166
+ <BASE-TYPE-REF DEST="SW-BASE-TYPE">/AUTOSAR_Platform/BaseTypes/uint8</BASE-TYPE-REF>
167
+ </SW-DATA-DEF-PROPS-CONDITIONAL>
168
+ </SW-DATA-DEF-PROPS-VARIANTS>
169
+ </SW-DATA-DEF-PROPS>
170
+ </IMPLEMENTATION-DATA-TYPE-ELEMENT>
171
+ <IMPLEMENTATION-DATA-TYPE-ELEMENT T="2021-03-26T20:42:45+01:00">
172
+ <SHORT-NAME>Payload</SHORT-NAME>
173
+ <CATEGORY>TYPE_REFERENCE</CATEGORY>
174
+ <SW-DATA-DEF-PROPS>
175
+ <SW-DATA-DEF-PROPS-VARIANTS>
176
+ <SW-DATA-DEF-PROPS-CONDITIONAL T="2021-03-26T19:25:45+01:00">
177
+ <IMPLEMENTATION-DATA-TYPE-REF DEST="IMPLEMENTATION-DATA-TYPE">/Application/ApplicationTypes/ArrayData</IMPLEMENTATION-DATA-TYPE-REF>
178
+ </SW-DATA-DEF-PROPS-CONDITIONAL>
179
+ </SW-DATA-DEF-PROPS-VARIANTS>
180
+ </SW-DATA-DEF-PROPS>
181
+ </IMPLEMENTATION-DATA-TYPE-ELEMENT>
182
+ </SUB-ELEMENTS>
183
+ </IMPLEMENTATION-DATA-TYPE>
184
+ </ELEMENTS>
185
+ </AR-PACKAGE>
186
+ </AR-PACKAGES>
187
+ </AUTOSAR>
188
+ """ # noqa E501
189
+
190
+ # prepare the XML content
191
+ element = ET.fromstring(xml_content)
192
+
193
+ # read the XML content using the parser
194
+ document = AUTOSARDoc()
195
+ parser.readARPackages(element, document)
196
+
197
+ # assert the ARPackages
198
+ assert len(document.getARPackages()) == 1
199
+ ar_package = document.getARPackages()[0]
200
+ assert ar_package.getShortName() == "ImplementationDataType"
201
+
202
+ # assert the ImplementationDataType
203
+ assert len(ar_package.getImplementationDataTypes()) == 1
204
+ data_type = ar_package.getImplementationDataTypes()[0]
205
+ assert data_type.getShortName() == "MyStructDataType"
206
+ assert str(data_type.getCategory()) == "STRUCTURE"
207
+ assert data_type.getCategory().getValue() == "STRUCTURE"
208
+ assert data_type.getSwDataDefProps() is not None
209
+ assert data_type.getSwDataDefProps().getBaseTypeRef() is None
210
+ assert data_type.getSwDataDefProps().getCompuMethodRef() is None
211
+
212
+ # assert the SubElements of ImplementationDataType
213
+ assert len(data_type.getSubElements()) == 2
214
+
215
+ # assert the first sub element
216
+ sub_element1 = data_type.getSubElements()[0]
217
+ assert sub_element1.getShortName() == "PayloadSize"
218
+ assert str(sub_element1.getCategory()) == "VALUE"
219
+ assert sub_element1.getCategory().getValue() == "VALUE"
220
+ assert sub_element1.getSwDataDefProps() is not None
221
+ assert sub_element1.getSwDataDefProps().getBaseTypeRef() is not None
222
+ assert sub_element1.getSwDataDefProps().getBaseTypeRef().getDest() == "SW-BASE-TYPE"
223
+ assert sub_element1.getSwDataDefProps().getBaseTypeRef().getValue() == "/AUTOSAR_Platform/BaseTypes/uint8"
224
+ assert sub_element1.getSwDataDefProps().getCompuMethodRef() is None
225
+ assert sub_element1.getArraySize() is None
226
+ assert sub_element1.getArraySizeSemantics() is None
227
+ assert sub_element1.getArraySizeHandling() is None
228
+ assert sub_element1.getIsOptional() is None
229
+ assert sub_element1.getSwDataDefProps().getCompuMethodRef() is None
230
+
231
+ # assert the second sub element
232
+ sub_element2 = data_type.getSubElements()[1]
233
+ assert sub_element2.getShortName() == "Payload"
234
+ assert str(sub_element2.getCategory()) == "TYPE_REFERENCE"
235
+ assert sub_element2.getCategory().getValue() == "TYPE_REFERENCE"
236
+ assert sub_element2.getSwDataDefProps() is not None
237
+ assert sub_element2.getSwDataDefProps().getBaseTypeRef() is None
238
+ assert sub_element2.getSwDataDefProps().getImplementationDataTypeRef() is not None
239
+ assert sub_element2.getSwDataDefProps().getImplementationDataTypeRef().getDest() == "IMPLEMENTATION-DATA-TYPE"
240
+ assert sub_element2.getSwDataDefProps().getImplementationDataTypeRef().getValue() == "/Application/ApplicationTypes/ArrayData"
241
+ assert sub_element2.getSwDataDefProps().getCompuMethodRef() is None
242
+ assert sub_element2.getArraySize() is None
243
+ assert sub_element2.getArraySizeSemantics() is None
244
+ assert sub_element2.getArraySizeHandling() is None
245
+ assert sub_element2.getIsOptional() is None
246
+ assert sub_element2.getSwDataDefProps().getCompuMethodRef() is None
247
+
@@ -0,0 +1,142 @@
1
+ import xml.etree.ElementTree as ET
2
+
3
+ from armodel.models.M2.AUTOSARTemplates.SWComponentTemplate.Components import AtomicSwComponentType
4
+
5
+ from ....models.M2.AUTOSARTemplates.AutosarTopLevelStructure import AUTOSARDoc
6
+ from ....models.M2.AUTOSARTemplates.SWComponentTemplate.SwcInternalBehavior import SwcInternalBehavior
7
+ from ....writer.arxml_writer import ARXMLWriter
8
+ from ....parser.arxml_parser import ARXMLParser
9
+
10
+
11
+ class TestRteEVent:
12
+
13
+ def test_data_send_completed_events(self):
14
+ xml_content = """
15
+ <APPLICATION-SW-COMPONENT-TYPE>
16
+ <SHORT-NAME>MyComponents</SHORT-NAME>
17
+ <INTERNAL-BEHAVIORS>
18
+ <SWC-INTERNAL-BEHAVIOR T="2024-11-01T09:39:52+02:00" UUID="0c573b8e-57a1-4bc5-b815-07b6e0094060">
19
+ <SHORT-NAME>MyInternalBehavior</SHORT-NAME>
20
+ <DATA-TYPE-MAPPING-REFS>
21
+ <DATA-TYPE-MAPPING-REF DEST="DATA-TYPE-MAPPING-SET">/DataType/MappingSet/Array_mapping_set</DATA-TYPE-MAPPING-REF>
22
+ <DATA-TYPE-MAPPING-REF DEST="DATA-TYPE-MAPPING-SET">/DataType/MappingSet/uint8_mapping_set</DATA-TYPE-MAPPING-REF>
23
+ </DATA-TYPE-MAPPING-REFS>
24
+ <EVENTS>
25
+ <DATA-SEND-COMPLETED-EVENT >
26
+ <SHORT-NAME>data_send_event1</SHORT-NAME>
27
+ <START-ON-EVENT-REF DEST="RUNNABLE-ENTITY">/MyComponents/MySwc_IB/re_data_send_completed_1</START-ON-EVENT-REF>
28
+ <EVENT-SOURCE-REF DEST="VARIABLE-ACCESS">/MyComponents/MySwc_IB/re_CyclicJob_20ms/dsp_data_send_completed_1</EVENT-SOURCE-REF>
29
+ </DATA-SEND-COMPLETED-EVENT>
30
+ <DATA-SEND-COMPLETED-EVENT>
31
+ <SHORT-NAME>data_send_event2</SHORT-NAME>
32
+ <START-ON-EVENT-REF DEST="RUNNABLE-ENTITY">/MyComponents/MySwc_IB/re_data_send_completed_2</START-ON-EVENT-REF>
33
+ <EVENT-SOURCE-REF DEST="VARIABLE-ACCESS">/MyComponents/MySwc_IB/re_CyclicJob_20ms/dsp_data_send_completed_2</EVENT-SOURCE-REF>
34
+ </DATA-SEND-COMPLETED-EVENT>
35
+ </EVENTS>
36
+ </SWC-INTERNAL-BEHAVIOR>
37
+ </INTERNAL-BEHAVIORS>
38
+ </APPLICATION-SW-COMPONENT-TYPE>
39
+ """ # noqa E501
40
+
41
+ # prepare the XML content
42
+ element = ET.fromstring(xml_content)
43
+ document = AUTOSARDoc()
44
+
45
+ parser = ARXMLParser()
46
+ parser.nsmap = {"xmlns": ""}
47
+
48
+ sw_component = AtomicSwComponentType(document, "MyComponents")
49
+ parser.readAtomicSwComponentType(element, sw_component)
50
+
51
+ internal_behavior = sw_component.getInternalBehavior()
52
+ assert internal_behavior is not None
53
+ assert isinstance(internal_behavior, SwcInternalBehavior) is True
54
+ assert internal_behavior.getShortName() == "MyInternalBehavior"
55
+ assert len(internal_behavior.getDataSendCompletedEvents()) == 2
56
+
57
+ event1 = internal_behavior.getDataSendCompletedEvents()[0]
58
+ assert event1.getShortName() == "data_send_event1"
59
+ assert event1.getStartOnEventRef().getDest() == "RUNNABLE-ENTITY"
60
+ assert event1.getStartOnEventRef().getValue() == "/MyComponents/MySwc_IB/re_data_send_completed_1"
61
+ assert event1.getEventSourceRef().getDest() == "VARIABLE-ACCESS"
62
+ assert event1.getEventSourceRef().getValue() == "/MyComponents/MySwc_IB/re_CyclicJob_20ms/dsp_data_send_completed_1"
63
+
64
+ event2 = internal_behavior.getDataSendCompletedEvents()[1]
65
+ assert event2.getShortName() == "data_send_event2"
66
+ assert event2.getStartOnEventRef().getDest() == "RUNNABLE-ENTITY"
67
+ assert event2.getStartOnEventRef().getValue() == "/MyComponents/MySwc_IB/re_data_send_completed_2"
68
+ assert event2.getEventSourceRef().getDest() == "VARIABLE-ACCESS"
69
+ assert event2.getEventSourceRef().getValue() == "/MyComponents/MySwc_IB/re_CyclicJob_20ms/dsp_data_send_completed_2"
70
+
71
+ def test_operation_invoked_events(self):
72
+ xml_content = """
73
+ <APPLICATION-SW-COMPONENT-TYPE>
74
+ <SHORT-NAME>MyComponents</SHORT-NAME>
75
+ <INTERNAL-BEHAVIORS>
76
+ <SWC-INTERNAL-BEHAVIOR T="2024-11-01T09:39:52+02:00" UUID="0c573b8e-57a1-4bc5-b815-07b6e0094060">
77
+ <SHORT-NAME>MyInternalBehavior</SHORT-NAME>
78
+ <DATA-TYPE-MAPPING-REFS>
79
+ <DATA-TYPE-MAPPING-REF DEST="DATA-TYPE-MAPPING-SET">/DataType/MappingSet/Array_mapping_set</DATA-TYPE-MAPPING-REF>
80
+ <DATA-TYPE-MAPPING-REF DEST="DATA-TYPE-MAPPING-SET">/DataType/MappingSet/uint8_mapping_set</DATA-TYPE-MAPPING-REF>
81
+ </DATA-TYPE-MAPPING-REFS>
82
+ <EVENTS>
83
+ <DATA-SEND-COMPLETED-EVENT >
84
+ <SHORT-NAME>data_send_event1</SHORT-NAME>
85
+ <START-ON-EVENT-REF DEST="RUNNABLE-ENTITY">/MyComponents/MySwc_IB/re_data_send_completed_1</START-ON-EVENT-REF>
86
+ <EVENT-SOURCE-REF DEST="VARIABLE-ACCESS">/MyComponents/MySwc_IB/re_CyclicJob_20ms/dsp_data_send_completed_1</EVENT-SOURCE-REF>
87
+ </DATA-SEND-COMPLETED-EVENT>
88
+ <OPERATION-INVOKED-EVENT>
89
+ <SHORT-NAME>oie_event1</SHORT-NAME>
90
+ <START-ON-EVENT-REF DEST="RUNNABLE-ENTITY">/MyComponents/MySwc_IB/re_event1</START-ON-EVENT-REF>
91
+ <OPERATION-IREF>
92
+ <CONTEXT-P-PORT-REF DEST="P-PORT-PROTOTYPE">/MyComponents/pp_oie_port</CONTEXT-P-PORT-REF>
93
+ <TARGET-PROVIDED-OPERATION-REF DEST="CLIENT-SERVER-OPERATION">/MyComponents/Interfaces/ClientServerInterfaces/IfCs_event/operation1</TARGET-PROVIDED-OPERATION-REF>
94
+ </OPERATION-IREF>
95
+ </OPERATION-INVOKED-EVENT>
96
+ <OPERATION-INVOKED-EVENT >
97
+ <SHORT-NAME>oie_event2</SHORT-NAME>
98
+ <START-ON-EVENT-REF DEST="RUNNABLE-ENTITY">/MyComponents/MySwc_IB/re_event2</START-ON-EVENT-REF>
99
+ <OPERATION-IREF T="2021-07-21T17:39:44+03:00">
100
+ <CONTEXT-P-PORT-REF DEST="P-PORT-PROTOTYPE">/MyComponents//pp_oie_port</CONTEXT-P-PORT-REF>
101
+ <TARGET-PROVIDED-OPERATION-REF DEST="CLIENT-SERVER-OPERATION">/MyComponents/Interfaces/ClientServerInterfaces/IfCs_event/operation2</TARGET-PROVIDED-OPERATION-REF>
102
+ </OPERATION-IREF>
103
+ </OPERATION-INVOKED-EVENT>
104
+ </EVENTS>
105
+ </SWC-INTERNAL-BEHAVIOR>
106
+ </INTERNAL-BEHAVIORS>
107
+ </APPLICATION-SW-COMPONENT-TYPE>
108
+ """ # noqa E501
109
+
110
+ # prepare the XML content
111
+ element = ET.fromstring(xml_content)
112
+ document = AUTOSARDoc()
113
+
114
+ parser = ARXMLParser()
115
+ parser.nsmap = {"xmlns": ""}
116
+
117
+ sw_component = AtomicSwComponentType(document, "MyComponents")
118
+ parser.readAtomicSwComponentType(element, sw_component)
119
+
120
+ internal_behavior = sw_component.getInternalBehavior()
121
+ assert internal_behavior is not None
122
+ assert isinstance(internal_behavior, SwcInternalBehavior) is True
123
+ assert internal_behavior.getShortName() == "MyInternalBehavior"
124
+ assert len(internal_behavior.getOperationInvokedEvents()) == 2
125
+
126
+ event1 = internal_behavior.getOperationInvokedEvents()[0]
127
+ assert event1.getShortName() == "oie_event1"
128
+ assert event1.getStartOnEventRef().getDest() == "RUNNABLE-ENTITY"
129
+ assert event1.getStartOnEventRef().getValue() == "/MyComponents/MySwc_IB/re_event1"
130
+ assert event1.getOperationIRef().getContextPPortRef().getDest() == "P-PORT-PROTOTYPE"
131
+ assert event1.getOperationIRef().getContextPPortRef().getValue() == "/MyComponents/pp_oie_port"
132
+ assert event1.getOperationIRef().getTargetProvidedOperationRef().getDest() == "CLIENT-SERVER-OPERATION"
133
+ assert event1.getOperationIRef().getTargetProvidedOperationRef().getValue() == "/MyComponents/Interfaces/ClientServerInterfaces/IfCs_event/operation1"
134
+
135
+ event2 = internal_behavior.getOperationInvokedEvents()[1]
136
+ assert event2.getShortName() == "oie_event2"
137
+ assert event2.getStartOnEventRef().getDest() == "RUNNABLE-ENTITY"
138
+ assert event2.getStartOnEventRef().getValue() == "/MyComponents/MySwc_IB/re_event2"
139
+ assert event2.getOperationIRef().getContextPPortRef().getDest() == "P-PORT-PROTOTYPE"
140
+ assert event2.getOperationIRef().getContextPPortRef().getValue() == "/MyComponents//pp_oie_port"
141
+ assert event2.getOperationIRef().getTargetProvidedOperationRef().getDest() == "CLIENT-SERVER-OPERATION"
142
+ assert event2.getOperationIRef().getTargetProvidedOperationRef().getValue() == "/MyComponents/Interfaces/ClientServerInterfaces/IfCs_event/operation2"
@@ -0,0 +1,135 @@
1
+ import xml.etree.ElementTree as ET
2
+
3
+ from ....models.M2.AUTOSARTemplates.SWComponentTemplate.SwcInternalBehavior import RunnableEntity, SwcInternalBehavior
4
+ from ....models.M2.AUTOSARTemplates.AutosarTopLevelStructure import AUTOSARDoc
5
+ from ....parser.arxml_parser import ARXMLParser
6
+
7
+
8
+ class TestRunnableEntity:
9
+ def setup_method(self):
10
+ self.xml_content = """
11
+ <SWC-INTERNAL-BEHAVIOR>
12
+ <RUNNABLES>
13
+ <RUNNABLE-ENTITY>
14
+ <SHORT-NAME>Cyclic</SHORT-NAME>
15
+ <MINIMUM-START-INTERVAL>0.0</MINIMUM-START-INTERVAL>
16
+ <CAN-BE-INVOKED-CONCURRENTLY>false</CAN-BE-INVOKED-CONCURRENTLY>
17
+ <DATA-RECEIVE-POINT-BY-ARGUMENTS>
18
+ <VARIABLE-ACCESS>
19
+ <SHORT-NAME>DRP_P_Special_EventMessage</SHORT-NAME>
20
+ <ACCESSED-VARIABLE>
21
+ <AUTOSAR-VARIABLE-IREF>
22
+ <PORT-PROTOTYPE-REF DEST="R-PORT-PROTOTYPE">/DemoApplication/SwComponentTypes/SWC_CyclicCounter/R_SpecialHandling</PORT-PROTOTYPE-REF>
23
+ <TARGET-DATA-PROTOTYPE-REF DEST="VARIABLE-DATA-PROTOTYPE">/DemoApplication/PortInterfaces/If_Internal/EventMessage</TARGET-DATA-PROTOTYPE-REF>
24
+ </AUTOSAR-VARIABLE-IREF>
25
+ </ACCESSED-VARIABLE>
26
+ </VARIABLE-ACCESS>
27
+ </DATA-RECEIVE-POINT-BY-ARGUMENTS>
28
+ <DATA-SEND-POINTS>
29
+ <VARIABLE-ACCESS>
30
+ <SHORT-NAME>DWA_P_CounterOut_CounterValue</SHORT-NAME>
31
+ <ACCESSED-VARIABLE>
32
+ <AUTOSAR-VARIABLE-IREF>
33
+ <PORT-PROTOTYPE-REF DEST="P-PORT-PROTOTYPE">/DemoApplication/SwComponentTypes/SWC_CyclicCounter/P_CounterOut</PORT-PROTOTYPE-REF>
34
+ <TARGET-DATA-PROTOTYPE-REF DEST="VARIABLE-DATA-PROTOTYPE">/DemoApplication/PortInterfaces/If_Counter/CounterValue</TARGET-DATA-PROTOTYPE-REF>
35
+ </AUTOSAR-VARIABLE-IREF>
36
+ </ACCESSED-VARIABLE>
37
+ </VARIABLE-ACCESS>
38
+ </DATA-SEND-POINTS>
39
+ <READ-LOCAL-VARIABLES>
40
+ <VARIABLE-ACCESS>
41
+ <SHORT-NAME>CurrentCounterValue3</SHORT-NAME>
42
+ <ACCESSED-VARIABLE>
43
+ <LOCAL-VARIABLE-REF DEST="VARIABLE-DATA-PROTOTYPE">/DemoApplication/SwComponentTypes/SWC_CyclicCounter/IB_SWC_CyclicCounter/CurrentCounterValue</LOCAL-VARIABLE-REF>
44
+ </ACCESSED-VARIABLE>
45
+ </VARIABLE-ACCESS>
46
+ </READ-LOCAL-VARIABLES>
47
+ <SERVER-CALL-POINTS>
48
+ <SYNCHRONOUS-SERVER-CALL-POINT>
49
+ <SHORT-NAME>CS_DETService_ReportError</SHORT-NAME>
50
+ <OPERATION-IREF>
51
+ <CONTEXT-R-PORT-REF DEST="R-PORT-PROTOTYPE">/DemoApplication/SwComponentTypes/SWC_CyclicCounter/R_CyclicCounterDet</CONTEXT-R-PORT-REF>
52
+ <TARGET-REQUIRED-OPERATION-REF DEST="CLIENT-SERVER-OPERATION">/DemoApplication/PortInterfaces/DETService/ReportError</TARGET-REQUIRED-OPERATION-REF>
53
+ </OPERATION-IREF>
54
+ <TIMEOUT>0.0</TIMEOUT>
55
+ </SYNCHRONOUS-SERVER-CALL-POINT>
56
+ <SYNCHRONOUS-SERVER-CALL-POINT>
57
+ <SHORT-NAME>CS_EchoResult_SetCounterAndAdd</SHORT-NAME>
58
+ <OPERATION-IREF>
59
+ <CONTEXT-R-PORT-REF DEST="R-PORT-PROTOTYPE">/DemoApplication/SwComponentTypes/SWC_CyclicCounter/R_MyLED</CONTEXT-R-PORT-REF>
60
+ <TARGET-REQUIRED-OPERATION-REF DEST="CLIENT-SERVER-OPERATION">/DemoApplication/PortInterfaces/If_DiscreteValueOutput/SetDiscreteValue</TARGET-REQUIRED-OPERATION-REF>
61
+ </OPERATION-IREF>
62
+ <TIMEOUT>0.0</TIMEOUT>
63
+ </SYNCHRONOUS-SERVER-CALL-POINT>
64
+ <SYNCHRONOUS-SERVER-CALL-POINT>
65
+ <SHORT-NAME>CS_UR_ComMUser_0_ComM_UserRequest</SHORT-NAME>
66
+ <OPERATION-IREF>
67
+ <CONTEXT-R-PORT-REF DEST="R-PORT-PROTOTYPE">/DemoApplication/SwComponentTypes/SWC_CyclicCounter/UR_ComMUser_0</CONTEXT-R-PORT-REF>
68
+ <TARGET-REQUIRED-OPERATION-REF DEST="CLIENT-SERVER-OPERATION">/DemoApplication/PortInterfaces/ComM_UserRequest/RequestComMode</TARGET-REQUIRED-OPERATION-REF>
69
+ </OPERATION-IREF>
70
+ <TIMEOUT>0.0</TIMEOUT>
71
+ </SYNCHRONOUS-SERVER-CALL-POINT>
72
+ </SERVER-CALL-POINTS>
73
+ <SYMBOL>SWC_CyclicCounter_Cyclic</SYMBOL>
74
+ <WRITTEN-LOCAL-VARIABLES>
75
+ <VARIABLE-ACCESS>
76
+ <SHORT-NAME>CurrentCounterValue4</SHORT-NAME>
77
+ <ACCESSED-VARIABLE T="2020-08-03T07:59:25+02:00">
78
+ <LOCAL-VARIABLE-REF DEST="VARIABLE-DATA-PROTOTYPE">/DemoApplication/SwComponentTypes/SWC_CyclicCounter/IB_SWC_CyclicCounter/CurrentCounterValue</LOCAL-VARIABLE-REF>
79
+ </ACCESSED-VARIABLE>
80
+ </VARIABLE-ACCESS>
81
+ </WRITTEN-LOCAL-VARIABLES>
82
+ </RUNNABLE-ENTITY>
83
+ </RUNNABLES>
84
+ </SWC-INTERNAL-BEHAVIOR>
85
+ """
86
+
87
+ def test_data_receive_point_by_argument(self):
88
+ # prepare the XML content
89
+ element = ET.fromstring(self.xml_content)
90
+ document = AUTOSARDoc()
91
+
92
+ parser = ARXMLParser()
93
+ parser.nsmap = {"xmlns": ""}
94
+
95
+ behavior = SwcInternalBehavior(document, "Behavior")
96
+ parser.readSwcInternalBehaviorRunnables(element, behavior)
97
+
98
+ assert len(behavior.getRunnableEntities()) == 1
99
+ assert isinstance(behavior.getRunnableEntities()[0], RunnableEntity) is True
100
+
101
+ runnable_entity = behavior.getRunnableEntities()[0]
102
+ assert runnable_entity.getShortName() == "Cyclic"
103
+ assert runnable_entity.getMinimumStartInterval().getValue() == 0.0
104
+ assert runnable_entity.getCanBeInvokedConcurrently().getValue() is False
105
+ assert len(runnable_entity.getDataReceivePointByArguments()) == 1
106
+
107
+ drp_arg = runnable_entity.getDataReceivePointByArguments()[0]
108
+ assert drp_arg.getShortName() == "DRP_P_Special_EventMessage"
109
+ assert drp_arg.getAccessedVariableRef().getAutosarVariableIRef().getPortPrototypeRef().getDest() == "R-PORT-PROTOTYPE"
110
+ assert drp_arg.getAccessedVariableRef().getAutosarVariableIRef().getPortPrototypeRef().getValue() == "/DemoApplication/SwComponentTypes/SWC_CyclicCounter/R_SpecialHandling"
111
+ assert drp_arg.getAccessedVariableRef().getAutosarVariableIRef().getTargetDataPrototypeRef().getDest() == "VARIABLE-DATA-PROTOTYPE"
112
+ assert drp_arg.getAccessedVariableRef().getAutosarVariableIRef().getTargetDataPrototypeRef().getValue() == "/DemoApplication/PortInterfaces/If_Internal/EventMessage"
113
+
114
+ def test_written_local_variables(self):
115
+ # prepare the XML content
116
+ element = ET.fromstring(self.xml_content)
117
+ document = AUTOSARDoc()
118
+
119
+ parser = ARXMLParser()
120
+ parser.nsmap = {"xmlns": ""}
121
+
122
+ behavior = SwcInternalBehavior(document, "Behavior")
123
+ parser.readSwcInternalBehaviorRunnables(element, behavior)
124
+
125
+ assert len(behavior.getRunnableEntities()) == 1
126
+ assert isinstance(behavior.getRunnableEntities()[0], RunnableEntity) is True
127
+
128
+ runnable_entity = behavior.getRunnableEntities()[0]
129
+ assert len(runnable_entity.getWrittenLocalVariables()) == 1
130
+
131
+ written_var = runnable_entity.getWrittenLocalVariables()[0]
132
+ assert written_var.getShortName() == "CurrentCounterValue4"
133
+ assert written_var.getAccessedVariableRef().timestamp == "2020-08-03T07:59:25+02:00"
134
+ assert written_var.getAccessedVariableRef().getLocalVariableRef().getDest() == "VARIABLE-DATA-PROTOTYPE"
135
+ assert written_var.getAccessedVariableRef().getLocalVariableRef().getValue() == "/DemoApplication/SwComponentTypes/SWC_CyclicCounter/IB_SWC_CyclicCounter/CurrentCounterValue"
@@ -74,6 +74,8 @@ class AbstractARXMLWriter:
74
74
  if numerical is not None:
75
75
  child_element = ET.SubElement(element, key)
76
76
  self.writeARObjectAttributes(child_element, numerical)
77
+ if numerical.getShortLabel() is not None:
78
+ child_element.attrib["SHORT-LABEL"] = numerical.getShortLabel()
77
79
  child_element.text = numerical._text
78
80
 
79
81
  def setChildElementOptionalIntegerValue(self, element: ET.Element, key: str, value: Integer):