armodel 1.8.0__py3-none-any.whl → 1.8.2__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.
- armodel/models/M2/AUTOSARTemplates/AutosarTopLevelStructure.py +1 -2
- armodel/models/M2/AUTOSARTemplates/BswModuleTemplate/BswBehavior.py +14 -14
- armodel/models/M2/AUTOSARTemplates/CommonStructure/FlatMap.py +2 -3
- armodel/models/M2/AUTOSARTemplates/CommonStructure/Implementation.py +1 -1
- armodel/models/M2/AUTOSARTemplates/CommonStructure/ImplementationDataTypes.py +7 -7
- armodel/models/M2/AUTOSARTemplates/CommonStructure/InternalBehavior.py +1 -1
- armodel/models/M2/AUTOSARTemplates/CommonStructure/ModeDeclaration.py +4 -4
- armodel/models/M2/AUTOSARTemplates/CommonStructure/ResourceConsumption/__init__.py +3 -3
- armodel/models/M2/AUTOSARTemplates/CommonStructure/Timing/TimingConstraint/ExecutionOrderConstraint.py +3 -3
- armodel/models/M2/AUTOSARTemplates/CommonStructure/Timing/TimingConstraint/TimingExtensions.py +3 -3
- armodel/models/M2/AUTOSARTemplates/ECUCDescriptionTemplate.py +86 -9
- armodel/models/M2/AUTOSARTemplates/ECUCParameterDefTemplate.py +1249 -0
- armodel/models/M2/AUTOSARTemplates/GenericStructure/AbstractStructure.py +13 -10
- armodel/models/M2/AUTOSARTemplates/GenericStructure/GeneralTemplateClasses/ARPackage.py +238 -225
- armodel/models/M2/AUTOSARTemplates/GenericStructure/GeneralTemplateClasses/ArObject.py +5 -4
- armodel/models/M2/AUTOSARTemplates/GenericStructure/GeneralTemplateClasses/Identifiable.py +46 -25
- armodel/models/M2/AUTOSARTemplates/GenericStructure/GeneralTemplateClasses/PrimitiveTypes.py +33 -3
- armodel/models/M2/AUTOSARTemplates/SWComponentTemplate/Components/__init__.py +18 -20
- armodel/models/M2/AUTOSARTemplates/SWComponentTemplate/Datatype/Datatypes.py +23 -19
- armodel/models/M2/AUTOSARTemplates/SWComponentTemplate/EndToEndProtection.py +4 -4
- armodel/models/M2/AUTOSARTemplates/SWComponentTemplate/PortInterface/__init__.py +71 -27
- armodel/models/M2/AUTOSARTemplates/SWComponentTemplate/SwcInternalBehavior/ServiceMapping.py +9 -9
- armodel/models/M2/AUTOSARTemplates/SWComponentTemplate/SwcInternalBehavior/__init__.py +172 -128
- armodel/models/M2/AUTOSARTemplates/SystemTemplate/Fibex/FibexCore/CoreCommunication.py +11 -11
- armodel/models/M2/AUTOSARTemplates/SystemTemplate/Fibex/FibexCore/CoreTopology.py +8 -8
- armodel/models/M2/AUTOSARTemplates/SystemTemplate/Fibex/FibexCore/EcuInstance.py +2 -2
- armodel/models/M2/AUTOSARTemplates/SystemTemplate/NetworkManagement.py +6 -6
- armodel/models/M2/AUTOSARTemplates/SystemTemplate/__init__.py +6 -6
- armodel/models/M2/MSR/AsamHdo/AdminData.py +101 -8
- armodel/parser/abstract_arxml_parser.py +8 -5
- armodel/parser/arxml_parser.py +332 -16
- armodel/tests/test_armodel/models/test_ECUCParameterDefTemplate.py +116 -0
- armodel/tests/test_armodel/models/test_Identifiable.py +85 -0
- armodel/tests/test_armodel/models/test_ar_object.py +85 -86
- armodel/tests/test_armodel/models/test_ar_package.py +70 -70
- armodel/tests/test_armodel/models/test_ar_ref.py +36 -36
- armodel/tests/test_armodel/models/test_common_structure.py +37 -35
- armodel/tests/test_armodel/models/test_datatype.py +4 -4
- armodel/tests/test_armodel/models/test_general_structure.py +19 -18
- armodel/tests/test_armodel/models/test_port_interface.py +2 -6
- armodel/tests/test_armodel/parser/test_arxml_parser.py +8 -8
- armodel/writer/abstract_arxml_writer.py +6 -2
- armodel/writer/arxml_writer.py +376 -29
- {armodel-1.8.0.dist-info → armodel-1.8.2.dist-info}/METADATA +20 -1
- {armodel-1.8.0.dist-info → armodel-1.8.2.dist-info}/RECORD +49 -46
- {armodel-1.8.0.dist-info → armodel-1.8.2.dist-info}/LICENSE +0 -0
- {armodel-1.8.0.dist-info → armodel-1.8.2.dist-info}/WHEEL +0 -0
- {armodel-1.8.0.dist-info → armodel-1.8.2.dist-info}/entry_points.txt +0 -0
- {armodel-1.8.0.dist-info → armodel-1.8.2.dist-info}/top_level.txt +0 -0
armodel/parser/arxml_parser.py
CHANGED
|
@@ -2,9 +2,7 @@ from typing import List
|
|
|
2
2
|
import xml.etree.ElementTree as ET
|
|
3
3
|
import os
|
|
4
4
|
|
|
5
|
-
from
|
|
6
|
-
|
|
7
|
-
from ..models.M2.MSR.AsamHdo.AdminData import AdminData
|
|
5
|
+
from ..models.M2.MSR.AsamHdo.AdminData import AdminData, DocRevision, Modification
|
|
8
6
|
from ..models.M2.MSR.AsamHdo.BaseTypes import BaseTypeDirectDefinition, SwBaseType
|
|
9
7
|
from ..models.M2.MSR.AsamHdo.Constraints.GlobalConstraints import DataConstrRule, InternalConstrs, PhysConstrs, DataConstr
|
|
10
8
|
from ..models.M2.MSR.AsamHdo.ComputationMethod import CompuConstContent, CompuConstFormulaContent, CompuConstNumericContent, CompuMethod, Compu
|
|
@@ -29,6 +27,7 @@ from ..models.M2.MSR.Documentation.TextModel.BlockElements.ListElements import A
|
|
|
29
27
|
from ..models.M2.MSR.Documentation.TextModel.LanguageDataModel import LLongName, LOverviewParagraph, LParagraph, LanguageSpecific
|
|
30
28
|
from ..models.M2.MSR.Documentation.TextModel.MultilanguageData import MultiLanguageOverviewParagraph, MultiLanguageParagraph, MultiLanguagePlainText
|
|
31
29
|
from ..models.M2.MSR.Documentation.TextModel.MultilanguageData import MultilanguageLongName
|
|
30
|
+
from ..models.M2.MSR.Documentation.TextModel.BlockElements.PaginationAndView import DocumentViewSelectable, Paginateable
|
|
32
31
|
|
|
33
32
|
from ..models.M2.AUTOSARTemplates.AutosarTopLevelStructure import AUTOSAR
|
|
34
33
|
from ..models.M2.AUTOSARTemplates.BswModuleTemplate.BswBehavior import BswApiOptions, BswAsynchronousServerCallPoint, BswBackgroundEvent
|
|
@@ -48,7 +47,8 @@ from ..models.M2.AUTOSARTemplates.CommonStructure.Filter import DataFilter
|
|
|
48
47
|
from ..models.M2.AUTOSARTemplates.CommonStructure.FlatMap import FlatInstanceDescriptor, FlatMap
|
|
49
48
|
from ..models.M2.AUTOSARTemplates.CommonStructure.Implementation import ImplementationProps, Code
|
|
50
49
|
from ..models.M2.AUTOSARTemplates.CommonStructure.InternalBehavior import ExecutableEntity, InternalBehavior
|
|
51
|
-
from ..models.M2.AUTOSARTemplates.CommonStructure.ModeDeclaration import ModeDeclarationGroup,
|
|
50
|
+
from ..models.M2.AUTOSARTemplates.CommonStructure.ModeDeclaration import ModeDeclarationGroup, ModeDeclarationGroupPrototypeMapping
|
|
51
|
+
from ..models.M2.AUTOSARTemplates.CommonStructure.ModeDeclaration import ModeRequestTypeMap, ModeDeclarationGroupPrototype
|
|
52
52
|
from ..models.M2.AUTOSARTemplates.CommonStructure.ResourceConsumption import ResourceConsumption
|
|
53
53
|
from ..models.M2.AUTOSARTemplates.CommonStructure.ResourceConsumption.MemorySectionUsage import MemorySection
|
|
54
54
|
from ..models.M2.AUTOSARTemplates.CommonStructure.ResourceConsumption.StackUsage import RoughEstimateStackUsage, StackUsage
|
|
@@ -67,11 +67,22 @@ from ..models.M2.AUTOSARTemplates.CommonStructure.Timing.TimingConstraint.Execut
|
|
|
67
67
|
from ..models.M2.AUTOSARTemplates.CommonStructure.Timing.TimingConstraint.TimingExtensions import SwcTiming, TimingExtension
|
|
68
68
|
from ..models.M2.AUTOSARTemplates.CommonStructure.TriggerDeclaration import Trigger
|
|
69
69
|
from ..models.M2.AUTOSARTemplates.DiagnosticExtract.DiagnosticContribution import DiagnosticServiceTable
|
|
70
|
-
from ..models.M2.AUTOSARTemplates.ECUCDescriptionTemplate import EcucAbstractReferenceValue, EcucContainerValue,
|
|
70
|
+
from ..models.M2.AUTOSARTemplates.ECUCDescriptionTemplate import EcucAbstractReferenceValue, EcucContainerValue, EcucDefinitionElement
|
|
71
|
+
from ..models.M2.AUTOSARTemplates.ECUCDescriptionTemplate import EcucModuleDef, EcucInstanceReferenceValue
|
|
71
72
|
from ..models.M2.AUTOSARTemplates.ECUCDescriptionTemplate import EcucModuleConfigurationValues, EcucNumericalParamValue, EcucParameterValue
|
|
72
73
|
from ..models.M2.AUTOSARTemplates.ECUCDescriptionTemplate import EcucReferenceValue, EcucTextualParamValue, EcucValueCollection
|
|
73
74
|
from ..models.M2.AUTOSARTemplates.EcuResourceTemplate import HwDescriptionEntity, HwElement, HwPinGroup
|
|
74
75
|
from ..models.M2.AUTOSARTemplates.EcuResourceTemplate.HwElementCategory import HwAttributeDef, HwCategory, HwType
|
|
76
|
+
from ..models.M2.AUTOSARTemplates.ECUCParameterDefTemplate import EcucAbstractConfigurationClass, EcucAbstractInternalReferenceDef
|
|
77
|
+
from ..models.M2.AUTOSARTemplates.ECUCParameterDefTemplate import EcucFunctionNameDef, EcucReferenceDef
|
|
78
|
+
from ..models.M2.AUTOSARTemplates.ECUCParameterDefTemplate import EcucAbstractReferenceDef, EcucSymbolicNameReferenceDef
|
|
79
|
+
from ..models.M2.AUTOSARTemplates.ECUCParameterDefTemplate import EcucAbstractStringParamDef, EcucBooleanParamDef
|
|
80
|
+
from ..models.M2.AUTOSARTemplates.ECUCParameterDefTemplate import EcucValueConfigurationClass
|
|
81
|
+
from ..models.M2.AUTOSARTemplates.ECUCParameterDefTemplate import EcucCommonAttributes, EcucEnumerationLiteralDef, EcucEnumerationParamDef
|
|
82
|
+
from ..models.M2.AUTOSARTemplates.ECUCParameterDefTemplate import EcucFloatParamDef, EcucIntegerParamDef
|
|
83
|
+
from ..models.M2.AUTOSARTemplates.ECUCParameterDefTemplate import EcucChoiceContainerDef, EcucStringParamDef
|
|
84
|
+
from ..models.M2.AUTOSARTemplates.ECUCParameterDefTemplate import EcucContainerDef, EcucParameterDef
|
|
85
|
+
from ..models.M2.AUTOSARTemplates.ECUCParameterDefTemplate import EcucMultiplicityConfigurationClass, EcucParamConfContainerDef
|
|
75
86
|
from ..models.M2.AUTOSARTemplates.GenericStructure.AbstractStructure import AnyInstanceRef
|
|
76
87
|
from ..models.M2.AUTOSARTemplates.GenericStructure.GeneralTemplateClasses.ElementCollection import Collection
|
|
77
88
|
from ..models.M2.AUTOSARTemplates.GenericStructure.GeneralTemplateClasses.Identifiable import ARElement, Describable, Identifiable
|
|
@@ -112,6 +123,8 @@ from ..models.M2.AUTOSARTemplates.SWComponentTemplate.Datatype.DataPrototypes im
|
|
|
112
123
|
from ..models.M2.AUTOSARTemplates.SWComponentTemplate.Datatype.DataPrototypes import ApplicationRecordElement, AutosarDataPrototype
|
|
113
124
|
from ..models.M2.AUTOSARTemplates.SWComponentTemplate.Datatype.DataPrototypes import DataPrototype, ParameterDataPrototype, VariableDataPrototype
|
|
114
125
|
from ..models.M2.AUTOSARTemplates.SWComponentTemplate.PortInterface import ArgumentDataPrototype, ClientServerInterface, ClientServerInterfaceMapping
|
|
126
|
+
from ..models.M2.AUTOSARTemplates.SWComponentTemplate.PortInterface import ModeDeclarationMapping
|
|
127
|
+
from ..models.M2.AUTOSARTemplates.SWComponentTemplate.PortInterface import ModeDeclarationMappingSet, ModeInterfaceMapping
|
|
115
128
|
from ..models.M2.AUTOSARTemplates.SWComponentTemplate.PortInterface import ClientServerOperation, ClientServerOperationMapping
|
|
116
129
|
from ..models.M2.AUTOSARTemplates.SWComponentTemplate.PortInterface import DataPrototypeMapping, InvalidationPolicy, ModeSwitchInterface
|
|
117
130
|
from ..models.M2.AUTOSARTemplates.SWComponentTemplate.PortInterface import ParameterInterface, PortInterface, PortInterfaceMappingSet
|
|
@@ -248,13 +261,45 @@ class ARXMLParser(AbstractARXMLParser):
|
|
|
248
261
|
self.readSdgSdxRefs(element, sdg)
|
|
249
262
|
return sdg
|
|
250
263
|
|
|
251
|
-
def
|
|
264
|
+
def readAdminDataSdgs(self, element: ET.Element, admin_data: AdminData):
|
|
252
265
|
for child_element in self.findall(element, "SDGS/*"):
|
|
253
266
|
tag_name = self.getTagName(child_element)
|
|
254
267
|
if tag_name == "SDG":
|
|
255
268
|
admin_data.addSdg(self.getSdg(child_element))
|
|
256
269
|
else:
|
|
257
270
|
self.notImplemented("Unsupported SDG <%s>" % tag_name)
|
|
271
|
+
|
|
272
|
+
def readModification(self, element: ET.Element, modification: Modification):
|
|
273
|
+
modification.setChange(self.getMultiLanguageOverviewParagraph(element, "CHANGE")) \
|
|
274
|
+
.setReason(self.getMultiLanguageOverviewParagraph(element, "REASON"))
|
|
275
|
+
|
|
276
|
+
def readDocRevisionModifications(self, element: ET.Element, revision: DocRevision):
|
|
277
|
+
for child_element in self.findall(element, "MODIFICATIONS/*"):
|
|
278
|
+
tag_name = self.getTagName(child_element)
|
|
279
|
+
if tag_name == "MODIFICATION":
|
|
280
|
+
modification = Modification()
|
|
281
|
+
self.readModification(child_element, modification)
|
|
282
|
+
revision.addModification(modification)
|
|
283
|
+
else:
|
|
284
|
+
self.notImplemented("Unsupported Modification <%s>" % tag_name)
|
|
285
|
+
|
|
286
|
+
def readDocRevision(self, element: ET.Element, revision: DocRevision):
|
|
287
|
+
revision.setDate(self.getChildElementOptionalDataTime(element, "DATE")) \
|
|
288
|
+
.setIssuedBy(self.getChildElementOptionalLiteral(element, "ISSUED-BY")) \
|
|
289
|
+
.setRevisionLabel(self.getChildElementOptionalRevisionLabelString(element, "REVISION-LABEL")) \
|
|
290
|
+
.setState(self.getChildElementOptionalLiteral(element, "STATE"))
|
|
291
|
+
|
|
292
|
+
self.readDocRevisionModifications(element, revision)
|
|
293
|
+
|
|
294
|
+
def readAdminDataDocRevisions(self, element: ET.Element, admin_data: AdminData):
|
|
295
|
+
for child_element in self.findall(element, "DOC-REVISIONS/*"):
|
|
296
|
+
tag_name = self.getTagName(child_element)
|
|
297
|
+
if tag_name == "DOC-REVISION":
|
|
298
|
+
revision = DocRevision()
|
|
299
|
+
self.readDocRevision(child_element, revision)
|
|
300
|
+
admin_data.addDocRevision(revision)
|
|
301
|
+
else:
|
|
302
|
+
self.notImplemented("Unsupported DocRevision <%s>" % tag_name)
|
|
258
303
|
|
|
259
304
|
def getAdminData(self, element: ET.Element, key: str) -> AdminData:
|
|
260
305
|
admin_data = None
|
|
@@ -265,7 +310,8 @@ class ARXMLParser(AbstractARXMLParser):
|
|
|
265
310
|
admin_data.setLanguage(self.getChildElementOptionalLiteral(child_element, "LANGUAGE")) \
|
|
266
311
|
.setUsedLanguages(self.getMultiLanguagePlainText(child_element, "USED-LANGUAGES"))
|
|
267
312
|
|
|
268
|
-
self.
|
|
313
|
+
self.readAdminDataSdgs(child_element, admin_data)
|
|
314
|
+
self.readAdminDataDocRevisions(child_element, admin_data)
|
|
269
315
|
return admin_data
|
|
270
316
|
|
|
271
317
|
def readReferrable(self, element: ET.Element, referrable: Referrable):
|
|
@@ -4247,6 +4293,253 @@ class ARXMLParser(AbstractARXMLParser):
|
|
|
4247
4293
|
self.readARElement(element, blueprint)
|
|
4248
4294
|
blueprint.setInterfaceRef(self.getChildElementOptionalRefType(element, "INTERFACE-REF"))
|
|
4249
4295
|
|
|
4296
|
+
def readModeDeclarationMappingFirstModeRefs(self, element: ET.Element, mapping: ModeDeclarationMapping):
|
|
4297
|
+
for ref_link in self.getChildElementRefTypeList(element, "FIRST-MODE-REFS/FIRST-MODE-REF"):
|
|
4298
|
+
mapping.addFirstModeRef(ref_link)
|
|
4299
|
+
|
|
4300
|
+
def readModeDeclarationMapping(self, element: ET.Element, mapping: ModeDeclarationMapping):
|
|
4301
|
+
# self.logger.debug("Read ModeDeclarationMapping <%s>" % mapping.getShortName())
|
|
4302
|
+
self.readIdentifiable(element, mapping)
|
|
4303
|
+
self.readModeDeclarationMappingFirstModeRefs(element, mapping)
|
|
4304
|
+
mapping.setSecondModeRef(self.getChildElementOptionalRefType(element, "SECOND-MODE-REF"))
|
|
4305
|
+
|
|
4306
|
+
def readModeDeclarationMappingSetModeDeclarationMappings(self, element: ET.Element, mapping_set: ModeDeclarationMappingSet):
|
|
4307
|
+
for child_element in self.findall(element, "MODE-DECLARATION-MAPPINGS/*"):
|
|
4308
|
+
tag_name = self.getTagName(child_element)
|
|
4309
|
+
if tag_name == "MODE-DECLARATION-MAPPING":
|
|
4310
|
+
mapping = mapping_set.createModeDeclarationMapping(self.getShortName(child_element))
|
|
4311
|
+
self.readModeDeclarationMapping(child_element, mapping)
|
|
4312
|
+
else:
|
|
4313
|
+
self.notImplemented("Unsupported ModeDeclarationMapping <%s>" % tag_name)
|
|
4314
|
+
|
|
4315
|
+
def readModeDeclarationMappingSet(self, element: ET.Element, mapping_set: ModeDeclarationMappingSet):
|
|
4316
|
+
self.logger.debug("Read ModeDeclarationMappingSet <%s>" % mapping_set.getShortName())
|
|
4317
|
+
self.readARElement(element, mapping_set)
|
|
4318
|
+
self.readModeDeclarationMappingSetModeDeclarationMappings(element, mapping_set)
|
|
4319
|
+
|
|
4320
|
+
def readEcucDefinitionElement(self, element: ET.Element, def_element: EcucDefinitionElement):
|
|
4321
|
+
self.readIdentifiable(element, def_element)
|
|
4322
|
+
def_element.setLowerMultiplicity(self.getChildElementOptionalPositiveInteger(element, "LOWER-MULTIPLICITY"))
|
|
4323
|
+
def_element.setUpperMultiplicity(self.getChildElementOptionalPositiveInteger(element, "UPPER-MULTIPLICITY"))
|
|
4324
|
+
def_element.setScope(self.getChildElementOptionalLiteral(element, "SCOPE"))
|
|
4325
|
+
|
|
4326
|
+
def readEcucModuleDefSupportedConfigVariants(self, element: ET.Element, module_def: EcucModuleDef):
|
|
4327
|
+
for variant in self.getChildElementLiteralValueList(element, "SUPPORTED-CONFIG-VARIANTS/SUPPORTED-CONFIG-VARIANT"):
|
|
4328
|
+
module_def.addSupportedConfigVariant(variant)
|
|
4329
|
+
|
|
4330
|
+
def readEcucAbstractConfigurationClass(self, element: ET.Element, cfg_class: EcucAbstractConfigurationClass):
|
|
4331
|
+
self.readARObjectAttributes(element, cfg_class)
|
|
4332
|
+
cfg_class.setConfigClass(self.getChildElementOptionalLiteral(element, "CONFIG-CLASS"))
|
|
4333
|
+
cfg_class.setConfigVariant(self.getChildElementOptionalLiteral(element, "CONFIG-VARIANT"))
|
|
4334
|
+
|
|
4335
|
+
def readEcucMultiplicityConfigurationClass(self, element: ET.Element, cfg_class: EcucMultiplicityConfigurationClass):
|
|
4336
|
+
self.readEcucAbstractConfigurationClass(element, cfg_class)
|
|
4337
|
+
|
|
4338
|
+
def getEcucMultiplicityConfigurationClasses(self, element: ET.Element) -> List[EcucMultiplicityConfigurationClass]:
|
|
4339
|
+
cfg_classes = []
|
|
4340
|
+
for child_element in self.findall(element, "MULTIPLICITY-CONFIG-CLASSES/*"):
|
|
4341
|
+
tag_name = self.getTagName(child_element)
|
|
4342
|
+
if tag_name == "ECUC-MULTIPLICITY-CONFIGURATION-CLASS":
|
|
4343
|
+
cfg_class = EcucMultiplicityConfigurationClass()
|
|
4344
|
+
self.readEcucMultiplicityConfigurationClass(child_element, cfg_class)
|
|
4345
|
+
cfg_classes.append(cfg_class)
|
|
4346
|
+
else:
|
|
4347
|
+
self.notImplemented("Unsupported MultiplicityConfigClass <%s>" % tag_name)
|
|
4348
|
+
return cfg_classes
|
|
4349
|
+
|
|
4350
|
+
def readEcucContainerDef(self, element: ET.Element, container_def: EcucContainerDef):
|
|
4351
|
+
self.readEcucDefinitionElement(element, container_def)
|
|
4352
|
+
for cfg_class in self.getEcucMultiplicityConfigurationClasses(element):
|
|
4353
|
+
container_def.addMultiplicityConfigClass(cfg_class)
|
|
4354
|
+
container_def.setPostBuildVariantMultiplicity(self.getChildElementOptionalBooleanValue(element, "POST-BUILD-VARIANT-MULTIPLICITY"))
|
|
4355
|
+
container_def.setRequiresIndex(self.getChildElementOptionalBooleanValue(element, "REQUIRES-INDEX"))
|
|
4356
|
+
container_def.setMultipleConfigurationContainer(self.getChildElementOptionalBooleanValue(element, "MULTIPLE-CONFIGURATION-CONTAINER"))
|
|
4357
|
+
|
|
4358
|
+
def readEcucValueConfigurationClass(self, element: ET.Element, cfg_class: EcucValueConfigurationClass):
|
|
4359
|
+
self.readEcucAbstractConfigurationClass(element, cfg_class)
|
|
4360
|
+
|
|
4361
|
+
def getEcucValueConfigurationClasses(self, element: ET.Element) -> List[EcucValueConfigurationClass]:
|
|
4362
|
+
cfg_classes = []
|
|
4363
|
+
for child_element in self.findall(element, "VALUE-CONFIG-CLASSES/*"):
|
|
4364
|
+
tag_name = self.getTagName(child_element)
|
|
4365
|
+
if tag_name == "ECUC-VALUE-CONFIGURATION-CLASS":
|
|
4366
|
+
cfg_class = EcucValueConfigurationClass()
|
|
4367
|
+
self.readEcucValueConfigurationClass(child_element, cfg_class)
|
|
4368
|
+
cfg_classes.append(cfg_class)
|
|
4369
|
+
else:
|
|
4370
|
+
self.notImplemented("Unsupported ValueConfigClass <%s>" % tag_name)
|
|
4371
|
+
return cfg_classes
|
|
4372
|
+
|
|
4373
|
+
def readEcucCommonAttributes(self, element: ET.Element, common_attrs: EcucCommonAttributes):
|
|
4374
|
+
self.readEcucDefinitionElement(element, common_attrs)
|
|
4375
|
+
for cfg_class in self.getEcucMultiplicityConfigurationClasses(element):
|
|
4376
|
+
common_attrs.addMultiplicityConfigClass(cfg_class)
|
|
4377
|
+
common_attrs.setOrigin(self.getChildElementOptionalLiteral(element, "ORIGIN"))
|
|
4378
|
+
common_attrs.setPostBuildVariantMultiplicity(self.getChildElementOptionalBooleanValue(element, "POST-BUILD-VARIANT-MULTIPLICITY"))
|
|
4379
|
+
common_attrs.setPostBuildVariantValue(self.getChildElementOptionalBooleanValue(element, "POST-BUILD-VARIANT-VALUE"))
|
|
4380
|
+
common_attrs.setRequiresIndex(self.getChildElementOptionalBooleanValue(element, "REQUIRES-INDEX"))
|
|
4381
|
+
for cfg_class in self.getEcucValueConfigurationClasses(element):
|
|
4382
|
+
common_attrs.addValueConfigClass(cfg_class)
|
|
4383
|
+
|
|
4384
|
+
def readEcucParameterDef(self, element: ET.Element, param_def: EcucParameterDef):
|
|
4385
|
+
self.readEcucCommonAttributes(element, param_def)
|
|
4386
|
+
param_def.setDerivation(self.getChildElementOptionalLiteral(element, "DERIVATION"))
|
|
4387
|
+
param_def.setSymbolicNameValue(self.getChildElementOptionalBooleanValue(element, "SYMBOLIC-NAME-VALUE"))
|
|
4388
|
+
param_def.setWithAuto(self.getChildElementOptionalBooleanValue(element, "WITH-AUTO"))
|
|
4389
|
+
|
|
4390
|
+
def readEcucBooleanParamDef(self, element: ET.Element, param_def: EcucBooleanParamDef):
|
|
4391
|
+
self.readEcucParameterDef(element, param_def)
|
|
4392
|
+
param_def.setDefaultValue(self.getChildElementOptionalBooleanValue(element, "DEFAULT-VALUE"))
|
|
4393
|
+
|
|
4394
|
+
def readEcucAbstractStringParamDef(self, element: ET.Element, param_def: EcucAbstractStringParamDef):
|
|
4395
|
+
self.readEcucParameterDef(element, param_def)
|
|
4396
|
+
param_def.setDefaultValue(self.getChildElementOptionalLiteral(element, "DEFAULT-VALUE"))
|
|
4397
|
+
param_def.setMaxLength(self.getChildElementOptionalIntegerValue(element, "MAX-LENGTH"))
|
|
4398
|
+
param_def.setMinLength(self.getChildElementOptionalIntegerValue(element, "MIN-LENGTH"))
|
|
4399
|
+
param_def.setRegularExpression(self.getChildElementOptionalLiteral(element, "REGULAR-EXPRESSION"))
|
|
4400
|
+
|
|
4401
|
+
def readEcucStringParamDef(self, element: ET.Element, param_def: EcucStringParamDef):
|
|
4402
|
+
self.readEcucAbstractStringParamDef(element, param_def)
|
|
4403
|
+
|
|
4404
|
+
def readEcucIntegerParamDef(self, element: ET.Element, param_def: EcucIntegerParamDef):
|
|
4405
|
+
self.readEcucParameterDef(element, param_def)
|
|
4406
|
+
param_def.setDefaultValue(self.getChildElementOptionalIntegerValue(element, "DEFAULT-VALUE"))
|
|
4407
|
+
param_def.setMax(self.getChildElementOptionalIntegerValue(element, "MAX"))
|
|
4408
|
+
param_def.setMin(self.getChildElementOptionalIntegerValue(element, "MIN"))
|
|
4409
|
+
|
|
4410
|
+
def readEcucFloatParamDef(self, element: ET.Element, param_def: EcucFloatParamDef):
|
|
4411
|
+
self.readEcucParameterDef(element, param_def)
|
|
4412
|
+
param_def.setDefaultValue(self.getChildElementOptionalFloatValue(element, "DEFAULT-VALUE"))
|
|
4413
|
+
param_def.setMax(self.getChildLimitElement(element, "MAX"))
|
|
4414
|
+
param_def.setMin(self.getChildLimitElement(element, "MIN"))
|
|
4415
|
+
|
|
4416
|
+
def readEcucEnumerationLiteral(self, element: ET.Element, literal: EcucEnumerationLiteralDef):
|
|
4417
|
+
self.readIdentifiable(element, literal)
|
|
4418
|
+
literal.setOrigin(self.getChildElementOptionalLiteral(element, "ORIGIN"))
|
|
4419
|
+
|
|
4420
|
+
def readEcucEnumerationParamDefLiterals(self, element: ET.Element, literal_def: EcucEnumerationParamDef):
|
|
4421
|
+
for child_element in self.findall(element, "LITERALS/*"):
|
|
4422
|
+
tag_name = self.getTagName(child_element)
|
|
4423
|
+
if tag_name == "ECUC-ENUMERATION-LITERAL-DEF":
|
|
4424
|
+
literal = literal_def.createLiteral(self.getShortName(child_element))
|
|
4425
|
+
self.readEcucEnumerationLiteral(child_element, literal)
|
|
4426
|
+
else:
|
|
4427
|
+
self.notImplemented("Unsupported EnumerationLiteral <%s>" % tag_name)
|
|
4428
|
+
|
|
4429
|
+
def readEcucEnumerationParamDef(self, element: ET.Element, param_def: EcucEnumerationParamDef):
|
|
4430
|
+
self.readEcucParameterDef(element, param_def)
|
|
4431
|
+
param_def.setDefaultValue(self.getChildElementOptionalLiteral(element, "DEFAULT-VALUE"))
|
|
4432
|
+
self.readEcucEnumerationParamDefLiterals(element, param_def)
|
|
4433
|
+
|
|
4434
|
+
def readEcucFunctionNameDef(self, element: ET.Element, ref_def: EcucFunctionNameDef):
|
|
4435
|
+
self.readEcucAbstractStringParamDef(element, ref_def)
|
|
4436
|
+
child_element = self.find(element, "ECUC-FUNCTION-NAME-DEF-VARIANTS/ECUC-FUNCTION-NAME-DEF-CONDITIONAL")
|
|
4437
|
+
if child_element is not None:
|
|
4438
|
+
ref_def.setDefaultValue(self.getChildElementOptionalLiteral(child_element, "DEFAULT-VALUE"))
|
|
4439
|
+
ref_def.setMinLength(self.getChildElementOptionalIntegerValue(child_element, "MIN-LENGTH"))
|
|
4440
|
+
ref_def.setMaxLength(self.getChildElementOptionalIntegerValue(child_element, "MAX-LENGTH"))
|
|
4441
|
+
|
|
4442
|
+
def readEcucContainerDefParameters(self, element: ET.Element, container_def: EcucParamConfContainerDef):
|
|
4443
|
+
for child_element in self.findall(element, "PARAMETERS/*"):
|
|
4444
|
+
tag_name = self.getTagName(child_element)
|
|
4445
|
+
if tag_name == "ECUC-BOOLEAN-PARAM-DEF":
|
|
4446
|
+
param_def = container_def.createEcucBooleanParamDef(self.getShortName(child_element))
|
|
4447
|
+
self.readEcucBooleanParamDef(child_element, param_def)
|
|
4448
|
+
elif tag_name == "ECUC-STRING-PARAM-DEF":
|
|
4449
|
+
param_def = container_def.createEcucStringParamDef(self.getShortName(child_element))
|
|
4450
|
+
self.readEcucStringParamDef(child_element, param_def)
|
|
4451
|
+
elif tag_name == "ECUC-INTEGER-PARAM-DEF":
|
|
4452
|
+
param_def = container_def.createEcucIntegerParamDef(self.getShortName(child_element))
|
|
4453
|
+
self.readEcucIntegerParamDef(child_element, param_def)
|
|
4454
|
+
elif tag_name == "ECUC-FLOAT-PARAM-DEF":
|
|
4455
|
+
param_def = container_def.createEcucFloatParamDef(self.getShortName(child_element))
|
|
4456
|
+
self.readEcucFloatParamDef(child_element, param_def)
|
|
4457
|
+
elif tag_name == "ECUC-ENUMERATION-PARAM-DEF":
|
|
4458
|
+
param_def = container_def.createEcucEnumerationParamDef(self.getShortName(child_element))
|
|
4459
|
+
self.readEcucEnumerationParamDef(child_element, param_def)
|
|
4460
|
+
elif tag_name == "ECUC-FUNCTION-NAME-DEF":
|
|
4461
|
+
param_def = container_def.createEcucFunctionNameDef(self.getShortName(child_element))
|
|
4462
|
+
self.readEcucFunctionNameDef(child_element, param_def)
|
|
4463
|
+
else:
|
|
4464
|
+
self.notImplemented("Unsupported Parameter <%s>" % tag_name)
|
|
4465
|
+
|
|
4466
|
+
def readEcucAbstractReferenceDef(self, element: ET.Element, ref_def: EcucAbstractReferenceDef):
|
|
4467
|
+
self.readEcucCommonAttributes(element, ref_def)
|
|
4468
|
+
ref_def.setWithAuto(self.getChildElementOptionalBooleanValue(element, "WITH-AUTO"))
|
|
4469
|
+
|
|
4470
|
+
def readEcucAbstractInternalReferenceDef(self, element: ET.Element, ref_def: EcucAbstractInternalReferenceDef):
|
|
4471
|
+
self.readEcucAbstractReferenceDef(element, ref_def)
|
|
4472
|
+
|
|
4473
|
+
def readEcucSymbolicNameReferenceDef(self, element: ET.Element, ref_def: EcucSymbolicNameReferenceDef):
|
|
4474
|
+
self.readEcucAbstractInternalReferenceDef(element, ref_def)
|
|
4475
|
+
ref_def.setDestinationRef(self.getChildElementOptionalRefType(element, "DESTINATION-REF"))
|
|
4476
|
+
|
|
4477
|
+
def readEcucReferenceDef(self, element: ET.Element, ref_def: EcucReferenceDef):
|
|
4478
|
+
self.readEcucAbstractInternalReferenceDef(element, ref_def)
|
|
4479
|
+
ref_def.setDestinationRef(self.getChildElementOptionalRefType(element, "DESTINATION-REF"))
|
|
4480
|
+
|
|
4481
|
+
def readEcucContainerDefReferences(self, element: ET.Element, container_def: EcucParamConfContainerDef):
|
|
4482
|
+
for child_element in self.findall(element, "REFERENCES/*"):
|
|
4483
|
+
tag_name = self.getTagName(child_element)
|
|
4484
|
+
if tag_name == "ECUC-SYMBOLIC-NAME-REFERENCE-DEF":
|
|
4485
|
+
ref_def = container_def.createEcucSymbolicNameReferenceDef(self.getShortName(child_element))
|
|
4486
|
+
self.readEcucSymbolicNameReferenceDef(child_element, ref_def)
|
|
4487
|
+
elif tag_name == "ECUC-REFERENCE-DEF":
|
|
4488
|
+
ref_def = container_def.createEcucReferenceDef(self.getShortName(child_element))
|
|
4489
|
+
self.readEcucReferenceDef(child_element, ref_def)
|
|
4490
|
+
else:
|
|
4491
|
+
self.notImplemented("Unsupported EcucReferenceDef <%s>" % tag_name)
|
|
4492
|
+
|
|
4493
|
+
def readEcucContainerDefSubContainers(self, element: ET.Element, container_def: EcucParamConfContainerDef):
|
|
4494
|
+
for child_element in self.findall(element, "SUB-CONTAINERS/*"):
|
|
4495
|
+
tag_name = self.getTagName(child_element)
|
|
4496
|
+
if tag_name == "ECUC-PARAM-CONF-CONTAINER-DEF":
|
|
4497
|
+
sub_container_def = container_def.createEcucParamConfContainerDef(self.getShortName(child_element))
|
|
4498
|
+
self.readEcucParamConfContainerDef(child_element, sub_container_def)
|
|
4499
|
+
elif tag_name == "ECUC-CHOICE-CONTAINER-DEF":
|
|
4500
|
+
sub_container_def = container_def.createEcucChoiceContainerDef(self.getShortName(child_element))
|
|
4501
|
+
self.readEcucChoiceContainerDef(child_element, sub_container_def)
|
|
4502
|
+
else:
|
|
4503
|
+
self.notImplemented("Unsupported SubContainer <%s>" % tag_name)
|
|
4504
|
+
|
|
4505
|
+
def readEcucParamConfContainerDef(self, element: ET.Element, container_def: EcucParamConfContainerDef):
|
|
4506
|
+
self.readEcucContainerDef(element, container_def)
|
|
4507
|
+
self.readEcucContainerDefParameters(element, container_def)
|
|
4508
|
+
self.readEcucContainerDefReferences(element, container_def)
|
|
4509
|
+
self.readEcucContainerDefSubContainers(element, container_def)
|
|
4510
|
+
|
|
4511
|
+
def readEcucChoiceContainerDefChoices(self, element: ET.Element, container_def: EcucChoiceContainerDef):
|
|
4512
|
+
for child_element in self.findall(element, "CHOICES/*"):
|
|
4513
|
+
tag_name = self.getTagName(child_element)
|
|
4514
|
+
if tag_name == "ECUC-PARAM-CONF-CONTAINER-DEF":
|
|
4515
|
+
ref_def = container_def.createEcucParamConfContainerDef(self.getShortName(child_element))
|
|
4516
|
+
self.readEcucParamConfContainerDef(child_element, ref_def)
|
|
4517
|
+
else:
|
|
4518
|
+
self.notImplemented("Unsupported Choice <%s>" % tag_name)
|
|
4519
|
+
|
|
4520
|
+
def readEcucChoiceContainerDef(self, element: ET.Element, container_def: EcucChoiceContainerDef):
|
|
4521
|
+
self.readEcucContainerDef(element, container_def)
|
|
4522
|
+
self.readEcucChoiceContainerDefChoices(element, container_def)
|
|
4523
|
+
|
|
4524
|
+
def readEcucModuleDefContainers(self, element: ET.Element, module_def: EcucModuleDef):
|
|
4525
|
+
for child_element in self.findall(element, "CONTAINERS/*"):
|
|
4526
|
+
tag_name = self.getTagName(child_element)
|
|
4527
|
+
if tag_name == "ECUC-PARAM-CONF-CONTAINER-DEF":
|
|
4528
|
+
container_def = module_def.createEcucParamConfContainerDef(self.getShortName(child_element))
|
|
4529
|
+
self.readEcucParamConfContainerDef(child_element, container_def)
|
|
4530
|
+
elif tag_name == "ECUC-CHOICE-CONTAINER-DEF":
|
|
4531
|
+
container_def = module_def.createEcucChoiceContainerDef(self.getShortName(child_element))
|
|
4532
|
+
self.readEcucChoiceContainerDef(child_element, container_def)
|
|
4533
|
+
else:
|
|
4534
|
+
self.notImplemented("Unsupported Container <%s>" % tag_name)
|
|
4535
|
+
|
|
4536
|
+
def readEcucModuleDef(self, element: ET.Element, module_def: EcucModuleDef):
|
|
4537
|
+
self.logger.debug("Read EcucModuleDef <%s>" % module_def.getShortName())
|
|
4538
|
+
self.readEcucDefinitionElement(element, module_def)
|
|
4539
|
+
module_def.setPostBuildVariantSupport(self.getChildElementOptionalBooleanValue(element, "POST-BUILD-VARIANT-SUPPORT"))
|
|
4540
|
+
self.readEcucModuleDefSupportedConfigVariants(element, module_def)
|
|
4541
|
+
self.readEcucModuleDefContainers(element, module_def)
|
|
4542
|
+
|
|
4250
4543
|
def readCommunicationController(self, element: ET.Element, controller: CommunicationController):
|
|
4251
4544
|
controller.setWakeUpByControllerSupported(self.getChildElementOptionalBooleanValue(element, "WAKE-UP-BY-CONTROLLER-SUPPORTED"))
|
|
4252
4545
|
|
|
@@ -4696,13 +4989,13 @@ class ARXMLParser(AbstractARXMLParser):
|
|
|
4696
4989
|
def readPhysicalDimension(self, element: ET.Element, dimension: PhysicalDimension):
|
|
4697
4990
|
self.logger.debug("Read PhysicalDimension <%s>" % dimension.getShortName())
|
|
4698
4991
|
self.readIdentifiable(element, dimension)
|
|
4699
|
-
dimension.setLengthExp(self.getChildElementOptionalNumericalValue(element, "LENGTH-EXP"))
|
|
4700
|
-
|
|
4701
|
-
|
|
4702
|
-
|
|
4703
|
-
|
|
4704
|
-
|
|
4705
|
-
|
|
4992
|
+
dimension.setLengthExp(self.getChildElementOptionalNumericalValue(element, "LENGTH-EXP"))
|
|
4993
|
+
dimension.setLuminousIntensityExp(self.getChildElementOptionalNumericalValue(element, "LUMINOUS-INTENSITY-EXP"))
|
|
4994
|
+
dimension.setMassExp(self.getChildElementOptionalNumericalValue(element, "MASS-EXP"))
|
|
4995
|
+
dimension.setMolarAmountExp(self.getChildElementOptionalNumericalValue(element, "MOLAR-AMOUNT-EXP"))
|
|
4996
|
+
dimension.setTemperatureExp(self.getChildElementOptionalNumericalValue(element, "TEMPERATURE-EXP"))
|
|
4997
|
+
dimension.setTimeExp(self.getChildElementOptionalNumericalValue(element, "TIME-EXP"))
|
|
4998
|
+
dimension.setCurrentExp(self.getChildElementOptionalNumericalValue(element, "CURRENT-EXP"))
|
|
4706
4999
|
|
|
4707
5000
|
def readISignalGroupISignalRef(self, element: ET.Element, group: ISignalGroup):
|
|
4708
5001
|
for ref_type in self.getChildElementRefTypeList(element, "I-SIGNAL-REFS/I-SIGNAL-REF"):
|
|
@@ -5111,6 +5404,20 @@ class ARXMLParser(AbstractARXMLParser):
|
|
|
5111
5404
|
self.readIdentifiable(element, mapping)
|
|
5112
5405
|
self.readClientServerInterfaceMappingOperationMappings(element, mapping)
|
|
5113
5406
|
|
|
5407
|
+
def readModeInterfaceMappingModeMapping(self, element: ET.Element, mapping: ModeInterfaceMapping):
|
|
5408
|
+
child_element = self.find(element, "MODE-MAPPING")
|
|
5409
|
+
if child_element is not None:
|
|
5410
|
+
mode_mapping = ModeDeclarationGroupPrototypeMapping()
|
|
5411
|
+
mode_mapping.setFirstModeGroupRef(self.getChildElementOptionalRefType(child_element, "FIRST-MODE-GROUP-REF")) \
|
|
5412
|
+
.setModeDeclarationMappingSetRef(self.getChildElementOptionalRefType(child_element, "MODE-DECLARATION-MAPPING-SET-REF")) \
|
|
5413
|
+
.setSecondModeGroupRef(self.getChildElementOptionalRefType(child_element, "SECOND-MODE-GROUP-REF"))
|
|
5414
|
+
mapping.setModeMapping(mode_mapping)
|
|
5415
|
+
|
|
5416
|
+
def readModeInterfaceMapping(self, element: ET.Element, mapping: ModeInterfaceMapping):
|
|
5417
|
+
# self.logger.debug("Read ModeInterfaceMapping %s" % mapping.getShortName())
|
|
5418
|
+
self.readIdentifiable(element, mapping)
|
|
5419
|
+
self.readModeInterfaceMappingModeMapping(element, mapping)
|
|
5420
|
+
|
|
5114
5421
|
def readPortInterfaceMappings(self, element: ET.Element, mapping_set: PortInterfaceMappingSet):
|
|
5115
5422
|
for child_element in self.findall(element, "PORT-INTERFACE-MAPPINGS/*"):
|
|
5116
5423
|
tag_name = self.getTagName(child_element)
|
|
@@ -5120,6 +5427,9 @@ class ARXMLParser(AbstractARXMLParser):
|
|
|
5120
5427
|
elif tag_name == "CLIENT-SERVER-INTERFACE-MAPPING":
|
|
5121
5428
|
mapping = mapping_set.createClientServerInterfaceMapping(self.getShortName(child_element))
|
|
5122
5429
|
self.readClientServerInterfaceMapping(child_element, mapping)
|
|
5430
|
+
elif tag_name == "MODE-INTERFACE-MAPPING":
|
|
5431
|
+
mapping = mapping_set.createModeInterfaceMapping(self.getShortName(child_element))
|
|
5432
|
+
self.readModeInterfaceMapping(child_element, mapping)
|
|
5123
5433
|
else:
|
|
5124
5434
|
self.notImplemented("Unsupported PortInterfaceMapping <%s>" % tag_name)
|
|
5125
5435
|
|
|
@@ -5363,8 +5673,14 @@ class ARXMLParser(AbstractARXMLParser):
|
|
|
5363
5673
|
keyword_set = parent.createKeywordSet(self.getShortName(child_element))
|
|
5364
5674
|
self.readKeywordSet(child_element, keyword_set)
|
|
5365
5675
|
elif tag_name == "PORT-PROTOTYPE-BLUEPRINT":
|
|
5366
|
-
|
|
5367
|
-
self.readPortPrototypeBlueprint(child_element,
|
|
5676
|
+
blueprint = parent.createPortPrototypeBlueprint(self.getShortName(child_element))
|
|
5677
|
+
self.readPortPrototypeBlueprint(child_element, blueprint)
|
|
5678
|
+
elif tag_name == "MODE-DECLARATION-MAPPING-SET":
|
|
5679
|
+
mapping_set = parent.createModeDeclarationMappingSet(self.getShortName(child_element))
|
|
5680
|
+
self.readModeDeclarationMappingSet(child_element, mapping_set)
|
|
5681
|
+
elif tag_name == "ECUC-MODULE-DEF":
|
|
5682
|
+
module_def = parent.createEcucModuleDef(self.getShortName(child_element))
|
|
5683
|
+
self.readEcucModuleDef(child_element, module_def)
|
|
5368
5684
|
else:
|
|
5369
5685
|
self.notImplemented("Unsupported Element type of ARPackage <%s>" % tag_name)
|
|
5370
5686
|
|
|
@@ -0,0 +1,116 @@
|
|
|
1
|
+
import pytest
|
|
2
|
+
|
|
3
|
+
from ....models.M2.AUTOSARTemplates.AutosarTopLevelStructure import AUTOSAR
|
|
4
|
+
from ....models.M2.AUTOSARTemplates.ECUCParameterDefTemplate import EcucChoiceContainerDef, EcucFloatParamDef, EcucParamConfContainerDef
|
|
5
|
+
from ....models.M2.AUTOSARTemplates.GenericStructure.GeneralTemplateClasses.ArObject import ARObject
|
|
6
|
+
|
|
7
|
+
# filepath: src/armodel/models/M2/AUTOSARTemplates/test_ECUCParameterDefTemplate.py
|
|
8
|
+
|
|
9
|
+
|
|
10
|
+
class TestEcucChoiceContainerDef:
|
|
11
|
+
def test_initialization(self):
|
|
12
|
+
document = AUTOSAR.getInstance()
|
|
13
|
+
parent = document.createARPackage("AUTOSAR")
|
|
14
|
+
short_name = "TestChoiceContainer"
|
|
15
|
+
choice_container = EcucChoiceContainerDef(parent, short_name)
|
|
16
|
+
|
|
17
|
+
assert choice_container.getShortName() == short_name
|
|
18
|
+
assert choice_container.getChoices() == []
|
|
19
|
+
|
|
20
|
+
def test_createEcucParamConfContainerDef(self):
|
|
21
|
+
document = AUTOSAR.getInstance()
|
|
22
|
+
parent = document.createARPackage("AUTOSAR")
|
|
23
|
+
short_name = "TestChoiceContainer"
|
|
24
|
+
choice_container = EcucChoiceContainerDef(parent, short_name)
|
|
25
|
+
|
|
26
|
+
param_conf_container = choice_container.createEcucParamConfContainerDef("TestParamConfContainer")
|
|
27
|
+
assert param_conf_container.getShortName() == "TestParamConfContainer"
|
|
28
|
+
assert isinstance(param_conf_container, EcucParamConfContainerDef)
|
|
29
|
+
assert param_conf_container in choice_container.getChoices()
|
|
30
|
+
|
|
31
|
+
def test_createEcucParamConfContainerDef_duplicate(self):
|
|
32
|
+
document = AUTOSAR.getInstance()
|
|
33
|
+
parent = document.createARPackage("AUTOSAR")
|
|
34
|
+
short_name = "TestChoiceContainer"
|
|
35
|
+
choice_container = EcucChoiceContainerDef(parent, short_name)
|
|
36
|
+
|
|
37
|
+
choice_container.createEcucParamConfContainerDef("TestParamConfContainer")
|
|
38
|
+
param_conf_container_duplicate = choice_container.createEcucParamConfContainerDef("TestParamConfContainer")
|
|
39
|
+
|
|
40
|
+
assert len(choice_container.getChoices()) == 1
|
|
41
|
+
assert param_conf_container_duplicate.getShortName() == "TestParamConfContainer"
|
|
42
|
+
|
|
43
|
+
def test_getChoices(self):
|
|
44
|
+
document = AUTOSAR.getInstance()
|
|
45
|
+
parent = document.createARPackage("AUTOSAR")
|
|
46
|
+
short_name = "TestChoiceContainer"
|
|
47
|
+
choice_container = EcucChoiceContainerDef(parent, short_name)
|
|
48
|
+
|
|
49
|
+
choice_container.createEcucParamConfContainerDef("Choice1")
|
|
50
|
+
choice_container.createEcucParamConfContainerDef("Choice2")
|
|
51
|
+
|
|
52
|
+
choices = choice_container.getChoices()
|
|
53
|
+
assert len(choices) == 2
|
|
54
|
+
assert choices[0].getShortName() == "Choice1"
|
|
55
|
+
assert choices[1].getShortName() == "Choice2"
|
|
56
|
+
|
|
57
|
+
|
|
58
|
+
class TestEcucFloatParamDef:
|
|
59
|
+
def test_initialization(self):
|
|
60
|
+
document = AUTOSAR.getInstance()
|
|
61
|
+
parent = document.createARPackage("AUTOSAR")
|
|
62
|
+
short_name = "TestFloatParam"
|
|
63
|
+
float_param = EcucFloatParamDef(parent, short_name)
|
|
64
|
+
|
|
65
|
+
assert float_param.getShortName() == short_name
|
|
66
|
+
assert float_param.getDefaultValue() is None
|
|
67
|
+
assert float_param.getMax() is None
|
|
68
|
+
assert float_param.getMin() is None
|
|
69
|
+
|
|
70
|
+
def test_set_and_get_default_value(self):
|
|
71
|
+
document = AUTOSAR.getInstance()
|
|
72
|
+
parent = document.createARPackage("AUTOSAR")
|
|
73
|
+
float_param = EcucFloatParamDef(parent, "TestFloatParam")
|
|
74
|
+
|
|
75
|
+
default_value = 3.14
|
|
76
|
+
float_param.setDefaultValue(default_value)
|
|
77
|
+
|
|
78
|
+
assert float_param.getDefaultValue() == default_value
|
|
79
|
+
|
|
80
|
+
def test_set_and_get_max_value(self):
|
|
81
|
+
document = AUTOSAR.getInstance()
|
|
82
|
+
parent = document.createARPackage("AUTOSAR")
|
|
83
|
+
float_param = EcucFloatParamDef(parent, "TestFloatParam")
|
|
84
|
+
|
|
85
|
+
max_value = 100.0
|
|
86
|
+
float_param.setMax(max_value)
|
|
87
|
+
|
|
88
|
+
assert float_param.getMax() == max_value
|
|
89
|
+
|
|
90
|
+
def test_set_and_get_min_value(self):
|
|
91
|
+
document = AUTOSAR.getInstance()
|
|
92
|
+
parent = document.createARPackage("AUTOSAR")
|
|
93
|
+
float_param = EcucFloatParamDef(parent, "TestFloatParam")
|
|
94
|
+
|
|
95
|
+
min_value = 0.0
|
|
96
|
+
float_param.setMin(min_value)
|
|
97
|
+
|
|
98
|
+
assert float_param.getMin() == min_value
|
|
99
|
+
|
|
100
|
+
def test_set_max_to_none(self):
|
|
101
|
+
document = AUTOSAR.getInstance()
|
|
102
|
+
parent = document.createARPackage("AUTOSAR")
|
|
103
|
+
float_param = EcucFloatParamDef(parent, "TestFloatParam")
|
|
104
|
+
|
|
105
|
+
float_param.setMax(None)
|
|
106
|
+
|
|
107
|
+
assert float_param.getMax() is None
|
|
108
|
+
|
|
109
|
+
def test_set_min_to_none(self):
|
|
110
|
+
document = AUTOSAR.getInstance()
|
|
111
|
+
parent = document.createARPackage("AUTOSAR")
|
|
112
|
+
float_param = EcucFloatParamDef(parent, "TestFloatParam")
|
|
113
|
+
|
|
114
|
+
float_param.setMin(None)
|
|
115
|
+
|
|
116
|
+
assert float_param.getMin() is None
|
|
@@ -0,0 +1,85 @@
|
|
|
1
|
+
import pytest
|
|
2
|
+
|
|
3
|
+
from ....models.M2.AUTOSARTemplates.GenericStructure.GeneralTemplateClasses.Identifiable import CollectableElement, Referrable
|
|
4
|
+
|
|
5
|
+
|
|
6
|
+
class MockReferrable1(Referrable):
|
|
7
|
+
def __init__(self, parent, short_name):
|
|
8
|
+
super().__init__(parent, short_name)
|
|
9
|
+
|
|
10
|
+
|
|
11
|
+
class MockReferrable2(Referrable):
|
|
12
|
+
def __init__(self, parent, short_name):
|
|
13
|
+
super().__init__(parent, short_name)
|
|
14
|
+
|
|
15
|
+
|
|
16
|
+
class MockCollectableElement(CollectableElement):
|
|
17
|
+
def __init__(self):
|
|
18
|
+
super().__init__()
|
|
19
|
+
|
|
20
|
+
|
|
21
|
+
class TestCollectableElement:
|
|
22
|
+
|
|
23
|
+
def setup_method(self):
|
|
24
|
+
'''
|
|
25
|
+
CollectableElement instance for testing.
|
|
26
|
+
'''
|
|
27
|
+
self.collectable_element = MockCollectableElement()
|
|
28
|
+
self.mock_referrable1 = MockReferrable1(None, "referrable")
|
|
29
|
+
self.mock_referrable2 = MockReferrable2(None, "referrable")
|
|
30
|
+
|
|
31
|
+
def test_getTotalElement(self):
|
|
32
|
+
assert self.collectable_element.getTotalElement() == 0
|
|
33
|
+
self.collectable_element.addElement(self.mock_referrable1)
|
|
34
|
+
assert self.collectable_element.getTotalElement() == 1
|
|
35
|
+
|
|
36
|
+
def test_addElement(self):
|
|
37
|
+
self.collectable_element.addElement(self.mock_referrable1)
|
|
38
|
+
assert self.collectable_element.getTotalElement() == 1
|
|
39
|
+
assert self.collectable_element.getElement("referrable", MockReferrable1) == self.mock_referrable1
|
|
40
|
+
self.collectable_element.addElement(self.mock_referrable2)
|
|
41
|
+
assert self.collectable_element.getTotalElement() == 2
|
|
42
|
+
assert self.collectable_element.getElement("referrable", MockReferrable2) == self.mock_referrable2
|
|
43
|
+
|
|
44
|
+
def test_removeElement(self):
|
|
45
|
+
self.collectable_element.addElement(self.mock_referrable1)
|
|
46
|
+
assert self.collectable_element.getTotalElement() == 1
|
|
47
|
+
self.collectable_element.addElement(self.mock_referrable2)
|
|
48
|
+
assert self.collectable_element.getTotalElement() == 2
|
|
49
|
+
self.collectable_element.removeElement("referrable", MockReferrable2)
|
|
50
|
+
assert self.collectable_element.getTotalElement() == 1
|
|
51
|
+
self.collectable_element.removeElement("referrable", MockReferrable1)
|
|
52
|
+
assert self.collectable_element.getTotalElement() == 0
|
|
53
|
+
|
|
54
|
+
def test_removeElement_non_existent_key(self):
|
|
55
|
+
self.collectable_element.addElement(self.mock_referrable1)
|
|
56
|
+
assert self.collectable_element.getTotalElement() == 1
|
|
57
|
+
try:
|
|
58
|
+
self.collectable_element.removeElement("non_existent", MockReferrable1)
|
|
59
|
+
except KeyError as ex:
|
|
60
|
+
assert str(ex) == "'Invalid key <non_existent> for removing element'"
|
|
61
|
+
assert self.collectable_element.getTotalElement() == 1
|
|
62
|
+
|
|
63
|
+
def test_getElements(self):
|
|
64
|
+
self.collectable_element.addElement(self.mock_referrable1)
|
|
65
|
+
self.collectable_element.addElement(self.mock_referrable1)
|
|
66
|
+
self.collectable_element.addElement(self.mock_referrable2)
|
|
67
|
+
elements = list(self.collectable_element.getElements())
|
|
68
|
+
assert len(elements) == 2
|
|
69
|
+
assert elements[0] == self.mock_referrable1
|
|
70
|
+
assert elements[1] == self.mock_referrable2
|
|
71
|
+
|
|
72
|
+
def test_getElement(self):
|
|
73
|
+
self.collectable_element.addElement(self.mock_referrable1)
|
|
74
|
+
element = self.collectable_element.getElement("referrable", MockReferrable1)
|
|
75
|
+
assert element == self.mock_referrable1
|
|
76
|
+
assert self.collectable_element.getElement("referrable", MockReferrable2) is None
|
|
77
|
+
assert self.collectable_element.getElement("non_existent", MockReferrable1) is None
|
|
78
|
+
|
|
79
|
+
def test_IsElementExists(self):
|
|
80
|
+
assert not self.collectable_element.IsElementExists("test_element")
|
|
81
|
+
self.collectable_element.addElement(self.mock_referrable1)
|
|
82
|
+
assert not self.collectable_element.IsElementExists("test_element")
|
|
83
|
+
assert self.collectable_element.IsElementExists("referrable")
|
|
84
|
+
assert self.collectable_element.IsElementExists("referrable", MockReferrable1)
|
|
85
|
+
assert not self.collectable_element.IsElementExists("referrable", MockReferrable2)
|