Files
arxml_sdk/tests/test_integration.py
T
2026-06-02 15:21:07 +08:00

136 lines
4.3 KiB
Python

"""
集成测试 - 完整 ARXML 文件生成
"""
import pytest
from xml.dom.minidom import Document
from src import (
create_base_type,
create_unit,
create_data_constraint,
create_compu_method,
create_linear,
create_boolean_type,
create_value_type,
create_structure_type,
create_impl_value_type,
create_sender_receiver_interface,
SenderReceiverInterface,
ApplicationStructureDataType,
Category,
CalibrationAccess,
)
class TestARXMLGeneration:
"""ARXML 生成测试"""
def test_full_type_chain(self):
"""测试完整的类型链(应用类型 -> 实现类型 -> 基础类型)"""
base_type = create_base_type("UInt8", size=8)
assert base_type.name == "UInt8"
impl_type = create_impl_value_type("ImplUInt8", base_type=base_type)
assert impl_type.name == "ImplUInt8"
assert impl_type.base_type == base_type
app_type = create_value_type("AppUInt8")
assert app_type.name == "AppUInt8"
doc = Document()
base_element = base_type.to_arxml(doc)
assert base_element.tagName == "SW-BASE-TYPE"
impl_element = impl_type.to_arxml(doc)
assert impl_element.tagName == "IMPLEMENTATION-DATA-TYPE"
app_element = app_type.to_arxml(doc)
assert app_element.tagName == "APPLICATION-PRIMITIVE-DATA-TYPE"
def test_unit_with_compu_method(self):
"""测试单位与计算方法关联"""
unit = create_unit("kmh", display="km/h")
linear = create_linear(factor=0.01, offset=0)
compu = create_compu_method("SpeedConversion", unit=unit, linear=linear)
assert compu.unit == unit
assert compu.linear == linear
def test_complex_structure(self):
"""测试复杂结构体"""
member1 = ApplicationStructureDataType.StructureElement(name="temperature")
member2 = ApplicationStructureDataType.StructureElement(name="humidity")
struct = create_structure_type("EnvironmentData", elements=[member1, member2])
assert len(struct.structure_elements) == 2
doc = Document()
element = struct.to_arxml(doc)
assert element.tagName == "APPLICATION-RECORD-DATA-TYPE"
def test_interface_creation(self):
"""测试接口创建"""
data_element = SenderReceiverInterface.DataElement(name="SpeedData")
interface = create_sender_receiver_interface(
"SpeedInterface",
data_element=data_element,
is_service=False
)
assert interface.name == "SpeedInterface"
assert interface.data_element == data_element
doc = Document()
element = interface.to_arxml(doc)
assert element.tagName == "SENDER-RECEIVER-INTERFACE"
def test_data_constraint_chain(self):
"""测试数据约束链"""
unit = create_unit("percent", display="%")
constraint = create_data_constraint(
"PercentageRange",
lower=0,
upper=100,
unit=unit
)
assert constraint.unit == unit
assert constraint.lower == 0
assert constraint.upper == 100
doc = Document()
element = constraint.to_arxml(doc)
assert element.tagName == "DATA-CONSTR"
def test_package_creation(self):
"""测试包创建"""
from src import create_package, create_base_type
base_type = create_base_type("TestType")
pkg = create_package("TestPackage", elements=[base_type])
assert pkg.name == "TestPackage"
assert len(pkg.elements) == 1
assert pkg.get_element("TestType") == base_type
def test_package_to_arxml(self):
"""测试包 ARXML 转换"""
from src import create_package, create_base_type
base_type = create_base_type("PackageType")
pkg = create_package("MyPackage", elements=[base_type])
doc = Document()
element = pkg.to_arxml(doc)
assert element.tagName == "AR-PACKAGE"
assert element.hasAttribute("UUID")
short_name = element.getElementsByTagName("SHORT-NAME")[0]
assert short_name.firstChild.nodeValue == "MyPackage"
elements = element.getElementsByTagName("ELEMENTS")
assert len(elements) == 1
if __name__ == "__main__":
pytest.main([__file__, "-v"])