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.
- eb_model/cli/pref_system_importer_cli.py +22 -13
- eb_model/cli/rte_xdm_2_xls_cli.py +28 -27
- eb_model/models/abstract.py +20 -8
- eb_model/models/importer_xdm.py +3 -1
- eb_model/models/nvm_xdm.py +321 -12
- eb_model/models/os_xdm.py +320 -55
- eb_model/models/rte_xdm.py +16 -11
- eb_model/parser/eb_parser.py +28 -20
- eb_model/parser/nvm_xdm_parser.py +89 -12
- eb_model/parser/os_xdm_parser.py +56 -12
- eb_model/parser/rte_xdm_parser.py +11 -11
- eb_model/reporter/excel_reporter/abstract.py +20 -6
- eb_model/reporter/excel_reporter/nvm_xdm.py +97 -7
- eb_model/reporter/excel_reporter/os_xdm.py +104 -20
- eb_model/reporter/excel_reporter/rte_xdm.py +15 -4
- eb_model/tests/models/test_abstract.py +201 -0
- eb_model/tests/models/test_eb_doc.py +66 -0
- eb_model/tests/models/test_eclipse_project.py +21 -0
- eb_model/tests/models/test_importer_xdm.py +45 -40
- eb_model/tests/parser/__init__.py +0 -0
- eb_model/tests/parser/test_nvm_xdm_parser.py +259 -0
- eb_model/tests/parser/test_os_xdm_parser.py +396 -0
- eb_model/writer/text_writer.py +4 -2
- {py_eb_model-1.1.6.dist-info → py_eb_model-1.1.8.dist-info}/METADATA +12 -1
- py_eb_model-1.1.8.dist-info/RECORD +48 -0
- py_eb_model-1.1.6.dist-info/RECORD +0 -42
- {py_eb_model-1.1.6.dist-info → py_eb_model-1.1.8.dist-info}/LICENSE +0 -0
- {py_eb_model-1.1.6.dist-info → py_eb_model-1.1.8.dist-info}/WHEEL +0 -0
- {py_eb_model-1.1.6.dist-info → py_eb_model-1.1.8.dist-info}/entry_points.txt +0 -0
- {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("
|
40
|
+
sheet = self.wb.create_sheet("Block List", 2)
|
11
41
|
|
12
42
|
title_row = [
|
13
43
|
"BlockId", "Name", "NvMBlockEcucPartitionRef", "NvMRamBlockDataAddress", "NvMRomBlockDataAddress",
|
14
|
-
"
|
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.
|
52
|
+
self.write_cell_center(sheet, row, 1, nvm_block.getNvMNvramBlockIdentifier())
|
20
53
|
self.write_cell(sheet, row, 2, nvm_block.getName())
|
21
|
-
|
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 = [
|
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
|
-
|
62
|
-
self.write_cell(sheet, row,
|
63
|
-
|
64
|
-
self.write_cell(sheet, row,
|
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
|
-
|
82
|
-
self.write_cell(sheet, row,
|
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
|
-
|
100
|
-
self.write_cell(sheet, row,
|
101
|
-
|
102
|
-
self.write_cell(sheet, row,
|
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
|
-
|
124
|
-
self.write_cell(sheet, row,
|
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,
|
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.
|
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
|
-
|
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
|
-
|
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"
|