Skip to content

Commit

Permalink
Fixed an issue where sub-packages wasn't read
Browse files Browse the repository at this point in the history
  • Loading branch information
cogu committed Oct 22, 2023
1 parent 61122a6 commit ae5fa74
Show file tree
Hide file tree
Showing 2 changed files with 36 additions and 4 deletions.
22 changes: 18 additions & 4 deletions src/autosar/xml/reader.py
Original file line number Diff line number Diff line change
Expand Up @@ -179,6 +179,20 @@ def read_file(self, file_path: str) -> ar_document.Document:
self._read_packages()
return self.document

def read_str(self, xml: str) -> None | ar_document.Document:
"""
Reads ARXML document from string.
"""
self.observed_unsupported_elements = set()
self.document = None
self.xml_root = ElementTree.fromstring(bytes(xml, encoding="utf-8"))
self.file_path = ""
self.file_base_name = ""
self._clean_namespace('http://autosar.org/schema/r4.0')
self._read_root_element()
self._read_packages()
return self.document

def read_str_elem(self, xml: str, type_name: str | None = None) -> None | ar_element.ARObject:
"""
Reads a concrete ARXML element from string.
Expand Down Expand Up @@ -459,10 +473,10 @@ def _read_sub_packages(self, package: ar_element.Package, xml_packages: ElementT
Reads AR:AR-PACKAGE.ELEMENTS
Type: Utility
"""
for xml_child_package in xml_packages.findall('./PACKAGE'):
for xml_child_package in xml_packages.findall('./AR-PACKAGE'):
child_package = self._read_package(xml_child_package)
assert isinstance(child_package, ar_element.Package)
package.packages.append(child_package)
package.append(child_package)

# Documentation elements

Expand Down Expand Up @@ -1267,7 +1281,7 @@ def _read_sw_addr_method(self, xml_element: ElementTree.Element) -> ar_element.S
self._report_unprocessed_elements(child_elements)
return ar_element.SwAddrMethod(**data)

def _read_sw_addr_method_group(self, child_elements: ChildElementMap, data: dict) -> None:
def _read_sw_addr_method_group(self, child_elements: ChildElementMap, _: dict) -> None:
"""
Reads group AR:SW-ADDR-METHOD
Type: Utility
Expand Down Expand Up @@ -2043,7 +2057,7 @@ def _read_variable_data_prototype(self, elem: ElementTree.Element) -> dict:
self._report_unprocessed_elements(child_elements)
return data

def _read_variable_data_prototype_elem(self, xml_elements: ChildElementMap, data: dict) -> None:
def _read_variable_data_prototype_elem(self, xml_elements: ChildElementMap, _: dict) -> None:
xml_init_value = xml_elements.find('INIT-VALUE')
if xml_init_value is not None:
pass
Expand Down
18 changes: 18 additions & 0 deletions tests/xml/test_document.py
Original file line number Diff line number Diff line change
Expand Up @@ -7,6 +7,7 @@
sys.path.insert(0, os.path.abspath(os.path.join(os.path.dirname(__file__), '../../src')))
import autosar.xml.document as ar_document # noqa E402
import autosar.xml.element as ar_element # noqa E402
import autosar.xml # noqa E402


class DocumentTests(unittest.TestCase):
Expand All @@ -19,6 +20,23 @@ def test_find_package(self):
self.assertIsInstance(package, ar_element.Package)
self.assertEqual(package.name, "CompuMethods")

def test_read_write_document_with_multi_level_package_structure(self):
workspace = autosar.xml.Workspace()
workspace.make_packages("DataTypes/BaseTypes",
"DataTypes/ImplementationDataTypes")
document1 = ar_document.Document([workspace.find("/DataTypes")])
writer = autosar.xml.Writer()
xml = writer.write_str(document1, False)
reader = autosar.xml.Reader()
document2 = reader.read_str(xml)
self.assertEqual(len(document2.packages), 1)
datatype_package: ar_element.Package = document2.find("/DataTypes")
self.assertEqual(len(datatype_package.packages), 2)
base_types_package: ar_element.Package = document2.find("/DataTypes/BaseTypes")
impl_types_package: ar_element.Package = document2.find("/DataTypes/ImplementationDataTypes")
self.assertEqual(base_types_package.name, "BaseTypes")
self.assertEqual(impl_types_package.name, "ImplementationDataTypes")


if __name__ == '__main__':
unittest.main()

0 comments on commit ae5fa74

Please sign in to comment.