py-eb-model 1.1.6__py3-none-any.whl → 1.1.8__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 (30) hide show
  1. eb_model/cli/pref_system_importer_cli.py +22 -13
  2. eb_model/cli/rte_xdm_2_xls_cli.py +28 -27
  3. eb_model/models/abstract.py +20 -8
  4. eb_model/models/importer_xdm.py +3 -1
  5. eb_model/models/nvm_xdm.py +321 -12
  6. eb_model/models/os_xdm.py +320 -55
  7. eb_model/models/rte_xdm.py +16 -11
  8. eb_model/parser/eb_parser.py +28 -20
  9. eb_model/parser/nvm_xdm_parser.py +89 -12
  10. eb_model/parser/os_xdm_parser.py +56 -12
  11. eb_model/parser/rte_xdm_parser.py +11 -11
  12. eb_model/reporter/excel_reporter/abstract.py +20 -6
  13. eb_model/reporter/excel_reporter/nvm_xdm.py +97 -7
  14. eb_model/reporter/excel_reporter/os_xdm.py +104 -20
  15. eb_model/reporter/excel_reporter/rte_xdm.py +15 -4
  16. eb_model/tests/models/test_abstract.py +201 -0
  17. eb_model/tests/models/test_eb_doc.py +66 -0
  18. eb_model/tests/models/test_eclipse_project.py +21 -0
  19. eb_model/tests/models/test_importer_xdm.py +45 -40
  20. eb_model/tests/parser/__init__.py +0 -0
  21. eb_model/tests/parser/test_nvm_xdm_parser.py +259 -0
  22. eb_model/tests/parser/test_os_xdm_parser.py +396 -0
  23. eb_model/writer/text_writer.py +4 -2
  24. {py_eb_model-1.1.6.dist-info → py_eb_model-1.1.8.dist-info}/METADATA +12 -1
  25. py_eb_model-1.1.8.dist-info/RECORD +48 -0
  26. py_eb_model-1.1.6.dist-info/RECORD +0 -42
  27. {py_eb_model-1.1.6.dist-info → py_eb_model-1.1.8.dist-info}/LICENSE +0 -0
  28. {py_eb_model-1.1.6.dist-info → py_eb_model-1.1.8.dist-info}/WHEEL +0 -0
  29. {py_eb_model-1.1.6.dist-info → py_eb_model-1.1.8.dist-info}/entry_points.txt +0 -0
  30. {py_eb_model-1.1.6.dist-info → py_eb_model-1.1.8.dist-info}/top_level.txt +0 -0
@@ -1,30 +1,91 @@
1
1
  from ...models.eb_doc import EBModel
2
+ from ...models.nvm_xdm import NvMEaRef, NvMFeeRef
2
3
  from ...reporter.excel_reporter.abstract import ExcelReporter
4
+ from openpyxl.styles.alignment import Alignment
3
5
 
4
6
 
5
7
  class NvMXdmXlsWriter(ExcelReporter):
6
8
  def __init__(self) -> None:
7
9
  super().__init__()
8
10
 
11
+ def write_nvm_general(self, doc: EBModel):
12
+ sheet = self.wb.create_sheet("General", 0)
13
+
14
+ title_row = ["Key", "Value"]
15
+ self.write_title_row(sheet, title_row)
16
+
17
+ nvm_common = doc.getNvM().getNvMCommon()
18
+
19
+ if nvm_common is None:
20
+ self.logger.error("NvMCommon is Invalid and General updating is skipped.")
21
+ return
22
+
23
+ row = 2
24
+ self.write_cell(sheet, row, 1, "NvMCompiledConfigId")
25
+ self.write_cell_center(sheet, row, 2, nvm_common.getNvMCompiledConfigId())
26
+ row += 1
27
+ self.write_cell(sheet, row, 1, "NvMDatasetSelectionBits")
28
+ self.write_cell_center(sheet, row, 2, nvm_common.getNvMDatasetSelectionBits())
29
+ row += 1
30
+ self.write_cell(sheet, row, 1, "NvMMaxNumOfReadRetries")
31
+ self.write_cell_center(sheet, row, 2, "3")
32
+ row += 1
33
+ self.write_cell(sheet, row, 1, "NvMMaxNumOfWriteRetries")
34
+ self.write_cell_center(sheet, row, 2, "3")
35
+ row += 1
36
+
37
+ self.auto_width(sheet)
38
+
9
39
  def write_nvm_block_descriptors(self, doc: EBModel):
10
- sheet = self.wb.create_sheet("NvMBlock", 0)
40
+ sheet = self.wb.create_sheet("Block List", 2)
11
41
 
12
42
  title_row = [
13
43
  "BlockId", "Name", "NvMBlockEcucPartitionRef", "NvMRamBlockDataAddress", "NvMRomBlockDataAddress",
14
- "NvMBlockManagementType", "NvMNvBlockLength", "NvMNvBlockNum", "NvMSelectBlockForReadAll", "NvMSelectBlockForWriteAll"]
44
+ "NvMBlockJobPriority", "NvMResistantToChangedSw", "NvMBlockManagementType", "NvMNvBlockLength", "NvMBlockCrcType",
45
+ "NvMNvBlockNum", "NvMSelectBlockForReadAll", "NvMSelectBlockForWriteAll", "NvMProvideRteJobFinishedPort", "NvMProvideRteServicePort",
46
+ "NvMInitBlockCallbackFnc", "NvMSingleBlockCallbackFnc", "NvMReadRamBlockFromNvCallback", "NvMWriteRamBlockToNvCallback", "NvMBlockUseSyncMechanism", # noqa E501
47
+ "NvMNvBlockBaseNumber", "NvMFeeRef"]
15
48
  self.write_title_row(sheet, title_row)
16
49
 
17
50
  row = 2
18
51
  for nvm_block in doc.getNvM().getNvMBlockDescriptorList():
19
- self.write_cell(sheet, row, 1, nvm_block.getNvMNvramBlockIdentifier())
52
+ self.write_cell_center(sheet, row, 1, nvm_block.getNvMNvramBlockIdentifier())
20
53
  self.write_cell(sheet, row, 2, nvm_block.getName())
21
- self.write_cell(sheet, row, 3, nvm_block.getNvMBlockEcucPartitionRef())
54
+ if nvm_block.getNvMBlockEcucPartitionRef() is not None:
55
+ self.write_cell_center(sheet, row, 3, nvm_block.getNvMBlockEcucPartitionRef().getShortName())
22
56
  self.write_cell(sheet, row, 4, nvm_block.getNvMRamBlockDataAddress())
23
57
  self.write_cell(sheet, row, 5, nvm_block.getNvMRomBlockDataAddress())
24
- self.write_cell(sheet, row, 6, nvm_block.getNvMBlockManagementType())
25
- self.write_cell(sheet, row, 7, nvm_block.getNvMNvBlockLength())
26
- self.write_cell(sheet, row, 8, nvm_block.getNvMNvBlockNum())
27
58
 
59
+ self.write_cell_center(sheet, row, 6, nvm_block.getNvMBlockJobPriority())
60
+ self.write_bool_cell(sheet, row, 7, nvm_block.getNvMResistantToChangedSw())
61
+ self.write_cell_center(sheet, row, 8, nvm_block.getNvMBlockManagementType())
62
+ self.write_cell_center(sheet, row, 9, nvm_block.getNvMNvBlockLength())
63
+ if nvm_block.getNvMBlockUseCrc():
64
+ self.write_cell_center(sheet, row, 10, nvm_block.getNvMBlockCrcType())
65
+
66
+ self.write_cell(sheet, row, 11, nvm_block.getNvMNvBlockNum())
67
+ self.write_bool_cell(sheet, row, 12, nvm_block.getNvMSelectBlockForReadAll())
68
+ self.write_bool_cell(sheet, row, 13, nvm_block.getNvMSelectBlockForWriteAll())
69
+ self.write_bool_cell(sheet, row, 14, nvm_block.getNvMProvideRteJobFinishedPort())
70
+ self.write_bool_cell(sheet, row, 15, nvm_block.getNvMProvideRteServicePort())
71
+
72
+ if nvm_block.getNvMInitBlockCallback() is not None:
73
+ self.write_cell(sheet, row, 16, nvm_block.getNvMInitBlockCallback().getNvMInitBlockCallbackFnc())
74
+ if nvm_block.getNvMSingleBlockCallback() is not None:
75
+ self.write_cell(sheet, row, 17, nvm_block.getNvMSingleBlockCallback().getNvMSingleBlockCallbackFnc())
76
+ if nvm_block.getNvMReadRamBlockFromNvCallback() is not None:
77
+ self.write_cell(sheet, row, 18, nvm_block.getNvMReadRamBlockFromNvCallback())
78
+ if nvm_block.getNvMWriteRamBlockToNvCallback() is not None:
79
+ self.write_cell(sheet, row, 19, nvm_block.getNvMWriteRamBlockToNvCallback())
80
+ self.write_bool_cell(sheet, row, 20, nvm_block.getNvMBlockUseSyncMechanism())
81
+
82
+ self.write_cell_center(sheet, row, 21, nvm_block.getNvMNvBlockBaseNumber())
83
+ block_reference = nvm_block.getNvMTargetBlockReference()
84
+ if block_reference is not None:
85
+ if isinstance(block_reference, NvMFeeRef):
86
+ self.write_cell(sheet, row, 22, block_reference.getNvMNameOfFeeBlock().getShortName())
87
+ else:
88
+ raise NotImplementedError("Unsupported Target block reference.")
28
89
 
29
90
  row += 1
30
91
 
@@ -32,9 +93,38 @@ class NvMXdmXlsWriter(ExcelReporter):
32
93
 
33
94
  self.auto_width(sheet)
34
95
 
96
+ def write_nvm_bsw_distribution(self, doc: EBModel):
97
+ sheet = self.wb.create_sheet("BSW Distribution", 1)
98
+
99
+ title_row = ["NvMEcucPartitionRef", "Master"]
100
+ self.write_title_row(sheet, title_row)
101
+
102
+ nvm_common = doc.getNvM().getNvMCommon()
103
+
104
+ if nvm_common is None:
105
+ self.logger.error("NvMCommon is Invalid and BSW Distribution updating is skipped.")
106
+ return
107
+
108
+ master_partition_ref = nvm_common.getNvMMasterEcucPartitionRef()
109
+
110
+ row = 2
111
+ for ref_link in nvm_common.getNvMEcucPartitionRefList():
112
+ self.write_cell(sheet, row, 1, ref_link.getShortName())
113
+ if ref_link.getShortName() == master_partition_ref.getShortName():
114
+ self.write_cell(sheet, row, 2, "Y", format={"alignment": Alignment(horizontal="center")})
115
+ else:
116
+ self.write_cell(sheet, row, 2, "N", format={"alignment": Alignment(horizontal="center")})
117
+ row += 1
118
+
119
+ self.logger.debug("Write NvM EcucPartition <%s>" % ref_link.getShortName())
120
+
121
+ self.auto_width(sheet)
122
+
35
123
  def write(self, filename, doc: EBModel, options):
36
124
  self.logger.info("Writing <%s>" % filename)
37
125
 
126
+ self.write_nvm_general(doc)
127
+ self.write_nvm_bsw_distribution(doc)
38
128
  self.write_nvm_block_descriptors(doc)
39
129
 
40
130
  self.save(filename)
@@ -49,24 +49,37 @@ class OsXdmXlsWriter(ExcelReporter):
49
49
  def write_os_isrs(self, doc: EBModel):
50
50
  sheet = self.wb.create_sheet("OsIsr", 1)
51
51
 
52
- title_row = ["Name", "OsApplication", "OsIsrCategory", "OsStacksize", "OsIsrPriority", "OsIsrVector"]
52
+ title_row = [
53
+ "Name", "OsApplication", "OsIsrCategory", "OsStacksize", "OsIsrPriority",
54
+ "OsIsrVector", "MkMemoryRegion"]
53
55
  self.write_title_row(sheet, title_row)
54
56
 
55
57
  row = 2
56
58
  for os_isr in doc.getOs().getOsIsrList():
57
- self.write_cell(sheet, row, 1, os_isr.getName())
59
+ self.write_cell(sheet, row, 1, os_isr.getName(), {'alignment': Alignment(vertical="top")})
58
60
  os_app = doc.getOs().getOsIsrOsApplication(os_isr.getName())
59
61
  if os_app is not None:
60
- self.write_cell(sheet, row, 2, os_app.getName())
61
- self.write_cell(sheet, row, 3, os_isr.getOsIsrCategory())
62
- self.write_cell(sheet, row, 4, os_isr.getOsStacksize())
63
- self.write_cell(sheet, row, 5, os_isr.getOsIsrPriority())
64
- self.write_cell(sheet, row, 6, os_isr.getOsIsrVector())
62
+ self.write_cell(sheet, row, 2, os_app.getName(),
63
+ format={'alignment': Alignment(horizontal="center", vertical="top")})
64
+ self.write_cell(sheet, row, 3, os_isr.getOsIsrCategory(),
65
+ format={'alignment': Alignment(horizontal="center", vertical="top")})
66
+ self.write_cell(sheet, row, 4, os_isr.getOsStacksize(),
67
+ format={'alignment': Alignment(horizontal="center", vertical="top")})
68
+ self.write_cell(sheet, row, 5, os_isr.getOsIsrPriority(),
69
+ format={'alignment': Alignment(horizontal="center", vertical="top")})
70
+ self.write_cell(sheet, row, 6, os_isr.getOsIsrVector(),
71
+ format={'alignment': Alignment(horizontal="center", vertical="top")})
72
+ if len(os_isr.getOsIsrMkMemoryRegionRefs()) > 1:
73
+ self.write_cell(sheet, row, 7, "\n".join(map(lambda a: a.getShortName(), os_isr.getOsIsrMkMemoryRegionRefs())),
74
+ {'alignment': Alignment(wrapText=True, vertical="top")})
75
+ else:
76
+ self.write_cell(sheet, row, 7, "\n".join(map(lambda a: a.getShortName(), os_isr.getOsIsrMkMemoryRegionRefs())),
77
+ {'alignment': Alignment(vertical="top")})
65
78
  row += 1
66
79
 
67
80
  self.logger.debug("Write OsIsr <%s>" % os_isr.getName())
68
81
 
69
- self.auto_width(sheet)
82
+ self.auto_width(sheet, {"G": 25})
70
83
 
71
84
  def write_os_schedule_tables(self, doc: EBModel):
72
85
  sheet = self.wb.create_sheet("OsScheduleTable", 2)
@@ -77,9 +90,12 @@ class OsXdmXlsWriter(ExcelReporter):
77
90
  row = 2
78
91
  for os_schedule_table in doc.getOs().getOsScheduleTableList():
79
92
  self.write_cell(sheet, row, 1, os_schedule_table.getName())
80
- self.write_cell(sheet, row, 2, os_schedule_table.getOsScheduleTableDuration())
81
- self.write_cell(sheet, row, 3, os_schedule_table.getOsScheduleTableRepeating())
82
- self.write_cell(sheet, row, 4, os_schedule_table.getOsScheduleTableCounterRef().getShortName())
93
+ self.write_cell(sheet, row, 2, os_schedule_table.getOsScheduleTableDuration(),
94
+ format={'alignment': Alignment(horizontal="center")})
95
+ self.write_cell(sheet, row, 3, os_schedule_table.getOsScheduleTableRepeating(),
96
+ format={'alignment': Alignment(horizontal="center")})
97
+ self.write_cell(sheet, row, 4, os_schedule_table.getOsScheduleTableCounterRef().getShortName(),
98
+ format={'alignment': Alignment(horizontal="center")})
83
99
  row += 1
84
100
 
85
101
  self.logger.debug("Write OsScheduleTable <%s>" % os_schedule_table.getName())
@@ -95,11 +111,16 @@ class OsXdmXlsWriter(ExcelReporter):
95
111
  row = 2
96
112
  for os_counter in doc.getOs().getOsCounterList():
97
113
  self.write_cell(sheet, row, 1, os_counter.getName())
98
- self.write_cell(sheet, row, 2, os_counter.getOsCounterMaxAllowedValue())
99
- self.write_cell(sheet, row, 3, os_counter.getOsCounterMinCycle())
100
- self.write_cell(sheet, row, 4, os_counter.getOsCounterTicksPerBase())
101
- self.write_cell(sheet, row, 5, os_counter.getOsCounterType())
102
- self.write_cell(sheet, row, 6, os_counter.getOsSecondsPerTick())
114
+ self.write_cell(sheet, row, 2, os_counter.getOsCounterMaxAllowedValue(),
115
+ format={'alignment': Alignment(horizontal="center")})
116
+ self.write_cell(sheet, row, 3, os_counter.getOsCounterMinCycle(),
117
+ format={'alignment': Alignment(horizontal="center")})
118
+ self.write_cell(sheet, row, 4, os_counter.getOsCounterTicksPerBase(),
119
+ format={'alignment': Alignment(horizontal="center")})
120
+ self.write_cell(sheet, row, 5, os_counter.getOsCounterType(),
121
+ format={'alignment': Alignment(horizontal="center")})
122
+ self.write_cell(sheet, row, 6, os_counter.getOsSecondsPerTick(),
123
+ format={'alignment': Alignment(horizontal="center")})
103
124
  row += 1
104
125
 
105
126
  self.logger.debug("Write OsScheduleTable <%s>" % os_counter.getName())
@@ -109,7 +130,7 @@ class OsXdmXlsWriter(ExcelReporter):
109
130
  def write_expiry_points(self, doc: EBModel):
110
131
  sheet = self.wb.create_sheet("OsScheduleTableExpiryPoint", 4)
111
132
 
112
- title_row = ["ExpiryPoint", "OsScheduleTable", "OsCounter" "Offset (ms)", "Task"]
133
+ title_row = ["ExpiryPoint", "OsScheduleTable", "OsCounter", "Offset (ms)", "Task"]
113
134
  self.write_title_row(sheet, title_row)
114
135
 
115
136
  row = 2
@@ -119,15 +140,77 @@ class OsXdmXlsWriter(ExcelReporter):
119
140
  for expiry_point in expiry_point_list:
120
141
  self.write_cell(sheet, row, 1, expiry_point.getName())
121
142
  self.write_cell(sheet, row, 2, table.getName())
122
- self.write_cell(sheet, row, 3, table.getOsScheduleTableCounterRef().getShortName())
123
- self.write_cell(sheet, row, 4, expiry_point.getOsScheduleTblExpPointOffset())
124
- self.write_cell(sheet, row, 5, len(expiry_point.getOsScheduleTableTaskActivationList()))
143
+ self.write_cell(sheet, row, 3, table.getOsScheduleTableCounterRef().getShortName(),
144
+ format={'alignment': Alignment(horizontal="center")})
145
+ self.write_cell(sheet, row, 4, expiry_point.getOsScheduleTblExpPointOffset(),
146
+ format={'alignment': Alignment(horizontal="center")})
147
+ self.write_cell(sheet, row, 5, len(expiry_point.getOsScheduleTableTaskActivationList()),
148
+ format={'alignment': Alignment(horizontal="center")})
125
149
  row += 1
126
150
 
127
151
  self.logger.debug("Write OsScheduleTable <%s>" % table.getName())
128
152
 
129
153
  self.auto_width(sheet)
130
154
 
155
+ def mk_memory_region_exists(self, doc: EBModel) -> bool:
156
+ mk = doc.getOs().getOsMicrokernel()
157
+ if mk is None:
158
+ return False
159
+
160
+ protection = mk.getMkMemoryProtection()
161
+ if protection is None:
162
+ return False
163
+
164
+ if len(protection.getMkMemoryRegionList()) <= 0:
165
+ return False
166
+
167
+ return True
168
+
169
+ def write_mk_memory_regions(self, doc: EBModel):
170
+ if self.mk_memory_region_exists(doc) is True:
171
+ sheet = self.wb.create_sheet("MkMemoryRegion", 5)
172
+
173
+ title_row = [
174
+ "Name", "Flags", "Initialize", "Global", "InitThread",
175
+ "IdleThread", "OsThread", "ErrorHook", "ProtHook", "ShutdownHook",
176
+ "Shutdown", "Kernel", "InitializePerCore"
177
+ ]
178
+ self.write_title_row(sheet, title_row)
179
+
180
+ row = 2
181
+ for region in doc.getOs().getOsMicrokernel().getMkMemoryProtection().getMkMemoryRegionList():
182
+ self.write_cell(sheet, row, 1, region.getName())
183
+ self.write_cell(sheet, row, 2, region.getMkMemoryRegionFlags(),
184
+ format={'alignment': Alignment(horizontal="center")})
185
+ self.write_cell(sheet, row, 3, self.format_boolean(region.getMkMemoryRegionInitialize()),
186
+ format={'alignment': Alignment(horizontal="center")})
187
+ self.write_cell(sheet, row, 4, self.format_boolean(region.getMkMemoryRegionGlobal()),
188
+ format={'alignment': Alignment(horizontal="center")})
189
+ self.write_cell(sheet, row, 5, self.format_boolean(region.getMkMemoryRegionInitThreadAccess()),
190
+ format={'alignment': Alignment(horizontal="center")})
191
+ self.write_cell(sheet, row, 6, self.format_boolean(region.getMkMemoryRegionIdleThreadAccess()),
192
+ format={'alignment': Alignment(horizontal="center")})
193
+ self.write_cell(sheet, row, 7, self.format_boolean(region.getMkMemoryRegionOsThreadAccess()),
194
+ format={'alignment': Alignment(horizontal="center")})
195
+ self.write_cell(sheet, row, 8, self.format_boolean(region.getMkMemoryRegionErrorHookAccess()),
196
+ format={'alignment': Alignment(horizontal="center")})
197
+ self.write_cell(sheet, row, 9, self.format_boolean(region.getMkMemoryRegionProtHookAccess()),
198
+ format={'alignment': Alignment(horizontal="center")})
199
+ self.write_cell(sheet, row, 10, self.format_boolean(region.getMkMemoryRegionShutdownHookAccess()),
200
+ format={'alignment': Alignment(horizontal="center")})
201
+ self.write_cell(sheet, row, 11, self.format_boolean(region.getMkMemoryRegionShutdownAccess()),
202
+ format={'alignment': Alignment(horizontal="center")})
203
+ self.write_cell(sheet, row, 12, self.format_boolean(region.getMkMemoryRegionKernelAccess()),
204
+ format={'alignment': Alignment(horizontal="center")})
205
+ self.write_cell(sheet, row, 13, self.format_boolean(region.getMkMemoryRegionInitializePerCore()),
206
+ format={'alignment': Alignment(horizontal="center")})
207
+
208
+ row += 1
209
+
210
+ self.logger.debug("Write MkMemoryRegion <%s>" % region.getName())
211
+
212
+ self.auto_width(sheet, {"B": 15})
213
+
131
214
  def write(self, filename, doc: EBModel, options={"skip_os_task": False}):
132
215
  self.logger.info("Writing <%s>" % filename)
133
216
 
@@ -137,5 +220,6 @@ class OsXdmXlsWriter(ExcelReporter):
137
220
  self.write_os_schedule_tables(doc)
138
221
  self.write_os_counters(doc)
139
222
  self.write_expiry_points(doc)
223
+ self.write_mk_memory_regions(doc)
140
224
 
141
225
  self.save(filename)
@@ -1,4 +1,5 @@
1
- from ...models.rte_xdm import RteBswEventToTaskMapping, RteBswModuleInstance, RteEventToTaskMapping, RteSwComponentInstance
1
+ from ...models.rte_xdm import RteBswEventToTaskMapping, RteBswEventToTaskMappingV3, RteBswEventToTaskMappingV4, RteBswModuleInstance
2
+ from ...models.rte_xdm import RteEventToTaskMapping, RteEventToTaskMappingV3, RteEventToTaskMappingV4, RteSwComponentInstance
2
3
  from ...models.eb_doc import EBModel
3
4
  from .abstract import ExcelReporter
4
5
 
@@ -59,19 +60,29 @@ class RteRunnableEntityXlsWriter(ExcelReporter):
59
60
 
60
61
  row = 2
61
62
  for os_task, mappings in doc.getRte().getMappedEvents().items():
62
- for mapping in sorted(mappings, key=lambda a: a.getRtePositionInTask()):
63
+ for mapping in sorted(mappings, key=lambda a: a.getRtePositionInTaskNumber()):
63
64
  self.write_cell(sheet, row, 1, os_task)
64
65
  if isinstance(mapping, RteBswEventToTaskMapping):
65
66
  self.logger.debug("Write Mapping %s" % mapping.getName())
66
67
  instance = mapping.getRteBswModuleInstance()
67
- self.write_cell(sheet, row, 2, mapping.getRteBswEventRefs().getShortName())
68
+ if isinstance(mapping, RteBswEventToTaskMappingV3):
69
+ self.write_cell(sheet, row, 2, mapping.getRteBswEventRef().getShortName())
70
+ elif isinstance(mapping, RteBswEventToTaskMappingV4):
71
+ self.write_cell(sheet, row, 2, " ".join(map(lambda i: i.getShortName(), mapping.getRteBswEventRefs())))
72
+ else:
73
+ raise NotImplementedError("Unsupported RteEventToTaskMapping")
68
74
  self.write_cell(sheet, row, 5, instance.getRteBswImplementationRef().getValue())
69
75
  self.write_cell(sheet, row, 6, mapping.getRteBswPositionInTask())
70
76
  self.write_cell(sheet, row, 7, mapping.getRteBswActivationOffset())
71
77
  elif isinstance(mapping, RteEventToTaskMapping):
72
78
  self.logger.debug("Write Mapping %s" % mapping.getName())
73
79
  instance = mapping.getRteSwComponentInstance()
74
- self.write_cell(sheet, row, 2, mapping.getRteEventRef().getShortName())
80
+ if isinstance(mapping, RteEventToTaskMappingV3):
81
+ self.write_cell(sheet, row, 2, mapping.getRteEventRef().getShortName())
82
+ elif instance(mapping, RteEventToTaskMappingV4):
83
+ self.write_cell(sheet, row, 2, " ".join(map(lambda i: i.getShortName(), mapping.getRteEventRefs())))
84
+ else:
85
+ raise NotImplementedError("Unsupported RteEventToTaskMapping")
75
86
  self.write_cell(sheet, row, 5, instance.getRteSoftwareComponentInstanceRef().getValue())
76
87
  self.write_cell(sheet, row, 6, mapping.getRtePositionInTask())
77
88
  self.write_cell(sheet, row, 7, mapping.getRteActivationOffset())
@@ -0,0 +1,201 @@
1
+ import pytest
2
+ from ...models.abstract import Module, EcucParamConfContainerDef, Version, EcucRefType, EcucObject, EcucEnumerationParamDef
3
+ from ...models.eb_doc import EBModel
4
+
5
+
6
+ class TestModule:
7
+
8
+ def test_module_initialization(self):
9
+ root = EBModel.getInstance()
10
+ parent = EcucParamConfContainerDef(root, "Parent")
11
+ module = Module(parent, "TestModule")
12
+
13
+ assert module.getName() == "TestModule"
14
+ assert module.getParent() == parent
15
+ assert isinstance(module.getArVersion(), Version)
16
+ assert isinstance(module.getSwVersion(), Version)
17
+
18
+ def test_module_ar_version(self):
19
+ root = EBModel.getInstance()
20
+ parent = EcucParamConfContainerDef(root, "Parent")
21
+ module = Module(parent, "TestModule")
22
+
23
+ ar_version = module.getArVersion()
24
+ ar_version.setMajorVersion(1).setMinorVersion(2).setPatchVersion(3)
25
+
26
+ assert ar_version.getMajorVersion() == 1
27
+ assert ar_version.getMinorVersion() == 2
28
+ assert ar_version.getPatchVersion() == 3
29
+
30
+ # Check the version string format
31
+ assert ar_version.getVersion() == "1.2.3"
32
+
33
+ def test_module_sw_version(self):
34
+ root = EBModel.getInstance()
35
+ parent = EcucParamConfContainerDef(root, "Parent")
36
+ module = Module(parent, "TestModule")
37
+
38
+ sw_version = module.getSwVersion()
39
+ sw_version.setMajorVersion(4).setMinorVersion(5).setPatchVersion(6)
40
+
41
+ assert sw_version.getMajorVersion() == 4
42
+ assert sw_version.getMinorVersion() == 5
43
+ assert sw_version.getPatchVersion() == 6
44
+
45
+ # Check the version string format
46
+ assert sw_version.getVersion() == "4.5.6"
47
+
48
+ def test_module_add_and_get_element(self):
49
+ root = EBModel.getInstance()
50
+ parent = EcucParamConfContainerDef(root, "Parent")
51
+ module = Module(parent, "TestModule")
52
+
53
+ element = EcucParamConfContainerDef(module, "ChildElement")
54
+ module.addElement(element)
55
+
56
+ assert module.getTotalElement() == 1
57
+ assert module.getElement("ChildElement") == element
58
+
59
+ def test_module_remove_element(self):
60
+ root = EBModel.getInstance()
61
+ parent = EcucParamConfContainerDef(root, "Parent")
62
+ module = Module(parent, "TestModule")
63
+
64
+ element = EcucParamConfContainerDef(module, "ChildElement")
65
+ module.addElement(element)
66
+
67
+ assert module.getTotalElement() == 1
68
+
69
+ module.removeElement("ChildElement")
70
+ assert module.getTotalElement() == 0
71
+ assert module.getElement("ChildElement") is None
72
+
73
+ def test_module_get_full_name(self):
74
+ root = EBModel.getInstance()
75
+ parent = EcucParamConfContainerDef(root, "Parent")
76
+ module = Module(parent, "TestModule")
77
+
78
+ assert module.getFullName() == "/Parent/TestModule"
79
+
80
+
81
+ class TestEcucRefType:
82
+
83
+ def test_initialization(self):
84
+ ref = EcucRefType("/Parent/Child")
85
+ assert ref.getValue() == "/Parent/Child"
86
+
87
+ def test_set_value(self):
88
+ ref = EcucRefType("/Parent/Child")
89
+ ref.setValue("/NewParent/NewChild")
90
+ assert ref.getValue() == "/NewParent/NewChild"
91
+
92
+ def test_str_representation(self):
93
+ ref = EcucRefType("/Parent/Child")
94
+ assert str(ref) == "/Parent/Child"
95
+
96
+ def test_get_short_name_valid(self):
97
+ ref = EcucRefType("/Parent/Child")
98
+ assert ref.getShortName() == "Child"
99
+
100
+ def test_get_short_name_invalid(self):
101
+ ref = EcucRefType("InvalidValue")
102
+ assert ref.getShortName() == "InvalidValue"
103
+
104
+ def test_get_short_name_raises_error_on_none(self):
105
+ ref = EcucRefType(None)
106
+ with pytest.raises(ValueError, match="Invalid value of EcucRefType"):
107
+ ref.getShortName()
108
+
109
+
110
+ class TestEcucParamConfContainerDef:
111
+
112
+ def test_initialization(self):
113
+ root = EBModel.getInstance()
114
+ container = EcucParamConfContainerDef(root, "TestContainer")
115
+
116
+ assert container.getName() == "TestContainer"
117
+ assert container.getParent() == root
118
+ assert container.getTotalElement() == 0
119
+
120
+ def test_add_element(self):
121
+ root = EBModel.getInstance()
122
+ container = EcucParamConfContainerDef(root, "TestContainer")
123
+ child = EcucParamConfContainerDef(container, "ChildElement")
124
+
125
+ container.addElement(child)
126
+
127
+ assert container.getTotalElement() == 1
128
+ assert container.getElement("ChildElement") == child
129
+
130
+ def test_remove_element(self):
131
+ root = EBModel.getInstance()
132
+ container = EcucParamConfContainerDef(root, "TestContainer")
133
+ child = EcucParamConfContainerDef(container, "ChildElement")
134
+
135
+ container.addElement(child)
136
+ assert container.getTotalElement() == 1
137
+
138
+ container.removeElement("ChildElement")
139
+ assert container.getTotalElement() == 0
140
+ assert container.getElement("ChildElement") is None
141
+
142
+ def test_remove_element_invalid_key(self):
143
+ root = EBModel.getInstance()
144
+ container = EcucParamConfContainerDef(root, "TestContainer")
145
+
146
+ with pytest.raises(KeyError, match="Invalid key <InvalidKey> for removing element"):
147
+ container.removeElement("InvalidKey")
148
+
149
+ def test_get_element_list(self):
150
+ root = EBModel.getInstance()
151
+ container = EcucParamConfContainerDef(root, "TestContainer")
152
+ child1 = EcucParamConfContainerDef(container, "Child1")
153
+ child2 = EcucParamConfContainerDef(container, "Child2")
154
+
155
+ container.addElement(child1)
156
+ container.addElement(child2)
157
+
158
+ element_list = list(container.getElementList())
159
+ assert len(element_list) == 2
160
+ assert child1 in element_list
161
+ assert child2 in element_list
162
+
163
+ def test_get_element_not_found(self):
164
+ root = EBModel.getInstance()
165
+ container = EcucParamConfContainerDef(root, "TestContainer")
166
+
167
+ assert container.getElement("NonExistent") is None
168
+
169
+
170
+ class TestEcucObject:
171
+
172
+ def test_initialization_raises_error(self):
173
+ root = EBModel.getInstance()
174
+ with pytest.raises(ValueError, match="Abstract EcucObject cannot be initialized."):
175
+ EcucObject(root, "AbstractObject")
176
+
177
+ def test_get_and_set_name(self):
178
+ root = EBModel.getInstance()
179
+ container = EcucParamConfContainerDef(root, "Parent")
180
+ obj = EcucEnumerationParamDef(container, "TestObject")
181
+
182
+ assert obj.getName() == "TestObject"
183
+ obj.setName("NewName")
184
+ assert obj.getName() == "NewName"
185
+
186
+ def test_get_and_set_parent(self):
187
+ root = EBModel.getInstance()
188
+ container1 = EcucParamConfContainerDef(root, "Parent1")
189
+ container2 = EcucParamConfContainerDef(root, "Parent2")
190
+ obj = EcucEnumerationParamDef(container1, "TestObject")
191
+
192
+ assert obj.getParent() == container1
193
+ obj.setParent(container2)
194
+ assert obj.getParent() == container2
195
+
196
+ def test_get_full_name(self):
197
+ root = EBModel.getInstance()
198
+ parent = EcucParamConfContainerDef(root, "Parent")
199
+ obj = EcucEnumerationParamDef(parent, "Child")
200
+
201
+ assert obj.getFullName() == "/Parent/Child"
@@ -0,0 +1,66 @@
1
+ import pytest
2
+ from ...models.eb_doc import EBModel, PreferenceModel
3
+
4
+
5
+ class TestEBModel:
6
+
7
+ def test_ebmodel_singleton_exception(self):
8
+ EBModel.getInstance()
9
+ with pytest.raises(Exception) as err:
10
+ EBModel()
11
+ assert (str(err.value) == "The EBModel is singleton!")
12
+
13
+ def test_cannot_find_element(self):
14
+ document = EBModel.getInstance()
15
+ assert (document.find("/os/os") is None)
16
+
17
+ def test_ebmodel(self):
18
+ document = EBModel.getInstance()
19
+ assert (isinstance(document, EBModel))
20
+ assert (isinstance(document, EBModel))
21
+ assert (document.getFullName() == "")
22
+
23
+ def test_clear(self):
24
+ document = EBModel.getInstance()
25
+ document.clear()
26
+ assert (document.getTotalElement() == 0)
27
+ document.getOs()
28
+ assert (document.getTotalElement() == 1)
29
+ document.clear()
30
+ assert (document.getTotalElement() == 0)
31
+
32
+ def test_ebmodel_get_os(self):
33
+ document = EBModel.getInstance()
34
+ os = document.getOs()
35
+ assert (os.getFullName() == "/Os/Os")
36
+
37
+ def test_ebmodel_get_rte(self):
38
+ document = EBModel.getInstance()
39
+ rte = document.getRte()
40
+ assert (rte.getFullName() == "/Rte/Rte")
41
+
42
+ def test_ebmodel_get_nvm(self):
43
+ document = EBModel.getInstance()
44
+ nvm = document.getNvM()
45
+ assert (nvm.getFullName() == "/NvM/NvM")
46
+
47
+
48
+ class TestPreferenceModel:
49
+
50
+ def test_preference_model_singleton_exception(self):
51
+ PreferenceModel.getInstance()
52
+ with pytest.raises(Exception) as err:
53
+ PreferenceModel()
54
+ assert (str(err.value) == "The PreferenceModel is singleton!")
55
+
56
+ def test_mode_get_system_description_importer(self):
57
+ document = PreferenceModel.getInstance()
58
+ importer = document.getSystemDescriptionImporter()
59
+ assert importer.getFullName() == "/ImporterExporterAdditions/SystemDescriptionImporters"
60
+
61
+ importer = document.find(
62
+ "/ImporterExporterAdditions/SystemDescriptionImporters")
63
+ assert importer.getFullName() == "/ImporterExporterAdditions/SystemDescriptionImporters"
64
+
65
+ importer = document.getSystemDescriptionImporter()
66
+ assert importer.getFullName() == "/ImporterExporterAdditions/SystemDescriptionImporters"
@@ -0,0 +1,21 @@
1
+ import pytest
2
+ from ...models.eclipse_project import Link
3
+
4
+
5
+ class TestLink:
6
+
7
+ def test_initialization(self):
8
+ link = Link("TestLink", "File", "file:///path/to/resource")
9
+ assert link.name == "TestLink"
10
+ assert link.type == "File"
11
+ assert link.locationURI == "file:///path/to/resource"
12
+
13
+ def test_set_attributes(self):
14
+ link = Link("InitialName", "Folder", "file:///initial/path")
15
+ link.name = "UpdatedName"
16
+ link.type = "File"
17
+ link.locationURI = "file:///updated/path"
18
+
19
+ assert link.name == "UpdatedName"
20
+ assert link.type == "File"
21
+ assert link.locationURI == "file:///updated/path"