上传初版SDK

This commit is contained in:
2026-06-02 15:21:07 +08:00
parent 842b6aed4f
commit b1acd0155c
28 changed files with 5598 additions and 0 deletions
+1
View File
@@ -0,0 +1 @@
"""测试包初始化"""
+82
View File
@@ -0,0 +1,82 @@
"""
核心模块测试
"""
import pytest
from src.core.base import Base, create_uuid, create_text_element
from src.core.enums import Category, Encoding, CalibrationAccess
class TestBase:
"""Base 基类测试"""
def test_base_creation(self):
"""测试基本创建"""
base = Base(name="TestElement")
assert base.name == "TestElement"
assert base.id is None
assert base.parent is None
assert base.description is None
def test_base_with_parent(self):
"""测试带父元素的创建"""
parent = Base(name="Parent")
child = Base(name="Child", parent=parent)
assert child.parent == parent
assert child.parent_id == parent.id
def test_package_path(self):
"""测试包路径计算"""
parent = Base(name="Parent")
child = Base(name="Child", parent=parent)
assert child.package_path == "/Parent/Child"
def test_package_path_deep(self):
"""测试深层包路径"""
level1 = Base(name="Level1")
level2 = Base(name="Level2", parent=level1)
level3 = Base(name="Level3", parent=level2)
level4 = Base(name="Level4", parent=level3)
assert level4.package_path == "/Level1/Level2/Level3/Level4"
class TestUtilityFunctions:
"""工具函数测试"""
def test_create_uuid(self):
"""测试 UUID 生成"""
uuid1 = create_uuid()
uuid2 = create_uuid()
assert uuid1 != uuid2
assert len(uuid1) == 36
def test_create_text_element(self):
"""测试文本元素创建"""
import xml.dom.minidom as Dom
doc = Dom.Document()
element = create_text_element(doc, "TEST_TAG", "test_value")
assert element.tagName == "TEST_TAG"
assert element.firstChild.nodeValue == "test_value"
class TestEnums:
"""枚举类型测试"""
def test_category_enum(self):
"""测试 Category 枚举"""
assert Category.FIXED_LENGTH is not None
assert Category.VALUE is not None
assert Category.STRUCTURE is not None
assert Category.ARRAY is not None
def test_calibration_access_enum(self):
"""测试 CalibrationAccess 枚举"""
assert CalibrationAccess.READ_ONLY is not None
assert CalibrationAccess.READ_WRITE is not None
assert CalibrationAccess.NOT_ACCESSIBLE is not None
assert CalibrationAccess.NOT_SPECIFIED is not None
if __name__ == "__main__":
pytest.main([__file__, "-v"])
+136
View File
@@ -0,0 +1,136 @@
"""
集成测试 - 完整 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"])
+294
View File
@@ -0,0 +1,294 @@
"""
SWC 组件和内部行为测试
"""
import pytest
from xml.dom.minidom import Document
from src import (
ApplicationSwComponentType,
RPortPrototype,
PPortPrototype,
PRPortPrototype,
SenderReceiverInterface,
create_sender_receiver_interface,
create_runnable_entity,
create_timing_event,
create_init_event,
create_operation_invoked_event,
create_data_received_event,
create_swc_internal_behavior,
SwcInternalBehavior,
VariableAccess,
)
class TestRunnableEntity:
"""RunnableEntity 测试"""
def test_create_runnable_entity(self):
"""测试创建 Runnable 实体"""
runnable = create_runnable_entity(
name="Runnable_Init",
minimum_start_interval=10,
can_be_invoked_concurrently=False,
symbol="Runnable_Init_Function"
)
assert runnable.name == "Runnable_Init"
assert runnable.minimum_start_interval == 10
assert runnable.can_be_invoked_concurrently is False
assert runnable.symbol == "Runnable_Init_Function"
def test_runnable_entity_add_data_access(self):
"""测试 Runnable 添加数据访问"""
runnable = create_runnable_entity(name="TestRunnable")
access = VariableAccess(name="DataAccess", port_prototype_ref="Port1")
runnable.add_variable_access(access)
assert len(runnable.variable_accesses) == 1
def test_runnable_entity_to_arxml(self):
"""测试 Runnable 实体 ARXML 转换"""
runnable = create_runnable_entity(
name="TestRunnable",
symbol="TestRunnable_Func"
)
doc = Document()
element = runnable.to_arxml(doc)
assert element.tagName == "RUNNABLE-ENTITY"
assert element.hasAttribute("UUID")
short_name = element.getElementsByTagName("SHORT-NAME")[0]
assert short_name.firstChild.nodeValue == "TestRunnable"
class TestEvents:
"""事件测试"""
def test_create_timing_event(self):
"""测试创建定时事件"""
event = create_timing_event("TimingEvent_10ms", period=0.01)
assert event.name == "TimingEvent_10ms"
assert event.period == 0.01
def test_timing_event_to_arxml(self):
"""测试定时事件 ARXML 转换"""
event = create_timing_event("PeriodicTask", period=0.05)
doc = Document()
element = event.to_arxml(doc)
assert element.tagName == "TIMING-EVENT"
assert element.hasAttribute("UUID")
short_name = element.getElementsByTagName("SHORT-NAME")[0]
assert short_name.firstChild.nodeValue == "PeriodicTask"
def test_create_init_event(self):
"""测试创建初始化事件"""
event = create_init_event("InitEvent")
assert event.name == "InitEvent"
def test_init_event_to_arxml(self):
"""测试初始化事件 ARXML 转换"""
event = create_init_event("InitEvent")
doc = Document()
element = event.to_arxml(doc)
assert element.tagName == "INIT-EVENT"
assert element.hasAttribute("UUID")
def test_create_operation_invoked_event(self):
"""测试创建操作调用事件"""
event = create_operation_invoked_event(
"OpInvokeEvent",
operation_ref="/Package/Interface/Operation"
)
assert event.name == "OpInvokeEvent"
assert event.operation_ref == "/Package/Interface/Operation"
def test_operation_invoked_event_to_arxml(self):
"""测试操作调用事件 ARXML 转换"""
event = create_operation_invoked_event("OpInvokeEvent")
doc = Document()
element = event.to_arxml(doc)
assert element.tagName == "OPERATION-INVOKED-EVENT"
assert element.hasAttribute("UUID")
def test_create_data_received_event(self):
"""测试创建数据接收事件"""
event = create_data_received_event(
"DataReceived",
data_element_ref="/Package/Interface/Port",
period=0.02
)
assert event.name == "DataReceived"
assert event.data_element_ref == "/Package/Interface/Port"
assert event.period == 0.02
def test_data_received_event_to_arxml(self):
"""测试数据接收事件 ARXML 转换"""
event = create_data_received_event("DataReceived", period=0.01)
doc = Document()
element = event.to_arxml(doc)
assert element.tagName == "DATA-RECEIVED-EVENT"
assert element.hasAttribute("UUID")
class TestSwcInternalBehavior:
"""SWC 内部行为测试"""
def test_create_swc_internal_behavior(self):
"""测试创建 SWC 内部行为"""
runnable = create_runnable_entity(name="MainRunnable")
timing = create_timing_event("MainTiming", period=0.01)
behavior = create_swc_internal_behavior(
name="ComponentBehavior",
runnable_entities=[runnable],
events=[timing],
symbol="Component_Symbol"
)
assert behavior.name == "ComponentBehavior"
assert len(behavior.runnable_entities) == 1
assert len(behavior.events) == 1
assert behavior.symbol == "Component_Symbol"
def test_swc_internal_behavior_add_runnable(self):
"""测试 SWC 内部行为添加 Runnable"""
behavior = create_swc_internal_behavior(name="Behavior")
runnable = create_runnable_entity(name="NewRunnable")
behavior.add_runnable(runnable)
assert behavior.get_runnable("NewRunnable") == runnable
def test_swc_internal_behavior_add_event(self):
"""测试 SWC 内部行为添加事件"""
behavior = create_swc_internal_behavior(name="Behavior")
event = create_timing_event("NewTiming", period=0.02)
behavior.add_event(event)
assert behavior.get_event("NewTiming") == event
def test_swc_internal_behavior_to_arxml(self):
"""测试 SWC 内部行为 ARXML 转换"""
runnable = create_runnable_entity(name="MainRunnable", symbol="MainRunnable_Func")
timing = create_timing_event("Periodic", period=0.01)
behavior = create_swc_internal_behavior(
name="ComponentBehavior",
runnable_entities=[runnable],
events=[timing]
)
doc = Document()
element = behavior.to_arxml(doc)
assert element.tagName == "SWC-INTERNAL-BEHAVIOR"
assert element.hasAttribute("UUID")
class TestSwComponent:
"""软件组件测试"""
def test_create_application_swc(self):
"""测试创建应用组件"""
swc = ApplicationSwComponentType(name="TestComponent")
assert swc.name == "TestComponent"
assert swc.atomic_type.value == "Application"
def test_application_swc_add_port(self):
"""测试应用组件添加端口"""
swc = ApplicationSwComponentType(name="TestComponent")
data_element = SenderReceiverInterface.DataElement(name="TestData")
interface = create_sender_receiver_interface("TestInterface", data_element=data_element)
port = PPortPrototype(name="TestPort", interface=interface)
swc.add_port(port)
assert swc.get_port("TestPort") == port
def test_application_swc_to_arxml(self):
"""测试应用组件 ARXML 转换"""
swc = ApplicationSwComponentType(name="TestComponent")
doc = Document()
element = swc.to_arxml(doc)
assert element.tagName == "APPLICATION-SW-COMPONENT-TYPE"
assert element.hasAttribute("UUID")
short_name = element.getElementsByTagName("SHORT-NAME")[0]
assert short_name.firstChild.nodeValue == "TestComponent"
def test_application_swc_with_ports_to_arxml(self):
"""测试带端口的应用组件 ARXML 转换"""
swc = ApplicationSwComponentType(name="ComponentWithPorts")
data_element = SenderReceiverInterface.DataElement(name="StatusData")
interface = create_sender_receiver_interface("StatusInterface", data_element=data_element)
port = PPortPrototype(name="StatusPort", interface=interface)
swc.add_port(port)
doc = Document()
element = swc.to_arxml(doc)
assert element.tagName == "APPLICATION-SW-COMPONENT-TYPE"
ports = element.getElementsByTagName("PORTS")
assert len(ports) == 1
class TestPortPrototypes:
"""端口原型测试"""
def test_r_port_prototype_to_arxml(self):
"""测试 R-Port ARXML 转换"""
data_element = SenderReceiverInterface.DataElement(name="RxData")
interface = create_sender_receiver_interface("RxInterface", data_element=data_element)
port = RPortPrototype(name="RPort1", interface=interface)
doc = Document()
element = port.to_arxml(doc)
assert element.tagName == "R-PORT-PROTOTYPE"
assert element.hasAttribute("UUID")
short_name = element.getElementsByTagName("SHORT-NAME")[0]
assert short_name.firstChild.nodeValue == "RPort1"
def test_p_port_prototype_to_arxml(self):
"""测试 P-Port ARXML 转换"""
data_element = SenderReceiverInterface.DataElement(name="TxData")
interface = create_sender_receiver_interface("TxInterface", data_element=data_element)
port = PPortPrototype(name="PPort1", interface=interface)
doc = Document()
element = port.to_arxml(doc)
assert element.tagName == "P-PORT-PROTOTYPE"
assert element.hasAttribute("UUID")
short_name = element.getElementsByTagName("SHORT-NAME")[0]
assert short_name.firstChild.nodeValue == "PPort1"
def test_pr_port_prototype_to_arxml(self):
"""测试 PR-Port ARXML 转换"""
data_element = SenderReceiverInterface.DataElement(name="BidirectionalData")
interface = create_sender_receiver_interface("BiInterface", data_element=data_element)
port = PRPortPrototype(name="PRPort1", interface=interface)
doc = Document()
element = port.to_arxml(doc)
assert element.tagName == "P-PORT-PROTOTYPE"
assert element.hasAttribute("UUID")
if __name__ == "__main__":
pytest.main([__file__, "-v"])
+423
View File
@@ -0,0 +1,423 @@
"""
数据类型测试
"""
import pytest
from xml.dom.minidom import Document
from src import (
BaseType,
create_base_type,
Unit,
create_unit,
Category,
Encoding,
)
from src.core.base import create_uuid, create_text_element
class TestBaseType:
"""BaseType 测试"""
def test_create_base_type(self):
"""测试创建基础类型"""
base_type = create_base_type("UInt8", size=8)
assert base_type.name == "UInt8"
assert base_type.size == 8
assert base_type.category == Category.FIXED_LENGTH
def test_base_type_encoding(self):
"""测试编码属性"""
base_type = create_base_type(
"SInt8",
encoding=Encoding.TWO_COMPONENT
)
assert base_type.encoding_value == "2C"
def test_base_type_to_arxml(self):
"""测试 ARXML 转换"""
base_type = create_base_type("UInt16", size=16)
doc = Document()
element = base_type.to_arxml(doc)
assert element.tagName == "SW-BASE-TYPE"
assert element.hasAttribute("UUID")
short_name = element.getElementsByTagName("SHORT-NAME")[0]
assert short_name.firstChild.nodeValue == "UInt16"
class TestUnit:
"""Unit 测试"""
def test_create_unit(self):
"""测试创建单位"""
unit = create_unit("kmh", display="km/h", factor=1, offset=0)
assert unit.name == "kmh"
assert unit.display == "km/h"
assert unit.factor == 1
assert unit.offset == 0
def test_unit_to_arxml(self):
"""测试单位 ARXML 转换"""
unit = create_unit("m/s", display="meters per second")
doc = Document()
element = unit.to_arxml(doc)
assert element.tagName == "UNIT"
assert element.hasAttribute("UUID")
short_name = element.getElementsByTagName("SHORT-NAME")[0]
assert short_name.firstChild.nodeValue == "m/s"
class TestDataConstraint:
"""DataConstraint 测试"""
def test_create_data_constraint(self):
"""测试创建数据约束"""
from src import create_data_constraint
constraint = create_data_constraint(
"SpeedConstraint",
lower=0,
upper=250
)
assert constraint.name == "SpeedConstraint"
assert constraint.lower == 0
assert constraint.upper == 250
def test_data_constraint_to_arxml(self):
"""测试数据约束 ARXML 转换"""
from src import create_data_constraint
constraint = create_data_constraint(
"RangeConstraint",
lower=0,
upper=100
)
doc = Document()
element = constraint.to_arxml(doc)
assert element.tagName == "DATA-CONSTR"
assert element.hasAttribute("UUID")
class TestCompuMethod:
"""CompuMethod 测试"""
def test_create_compu_method(self):
"""测试创建计算方法"""
from src import create_compu_method, create_linear
linear = create_linear(factor=0.1, offset=10)
compu = create_compu_method(
"LinearConversion",
linear=linear
)
assert compu.name == "LinearConversion"
assert compu.linear == linear
assert compu.category == Category.IDENTICAL
def test_compu_method_with_text_table(self):
"""测试带文本表的计算方法"""
from src import create_compu_method, create_text_table
text_table = create_text_table("OnOff", "ON", 0, 1)
compu = create_compu_method(
"OnOffTable",
text_tables=[text_table]
)
assert len(compu.text_tables) == 1
assert compu.get_text_table("ON") == text_table
def test_compu_method_to_arxml(self):
"""测试计算方法 ARXML 转换"""
from src import create_compu_method
compu = create_compu_method("TestMethod")
doc = Document()
element = compu.to_arxml(doc)
assert element.tagName == "COMPU-METHOD"
assert element.hasAttribute("UUID")
class TestApplicationTypes:
"""应用数据类型测试"""
def test_create_boolean_type(self):
"""测试创建布尔类型"""
from src import create_boolean_type
bool_type = create_boolean_type("BooleanSignal")
assert bool_type.name == "BooleanSignal"
assert bool_type.category == Category.BOOLEAN
def test_create_value_type(self):
"""测试创建值类型"""
from src import create_value_type
value_type = create_value_type("SpeedValue")
assert value_type.name == "SpeedValue"
assert value_type.category == Category.VALUE
def test_create_structure_type(self):
"""测试创建结构体类型"""
from src import create_structure_type, ApplicationStructureDataType
element = ApplicationStructureDataType.StructureElement(name="member1")
struct_type = create_structure_type("MyStruct", elements=[element])
assert struct_type.name == "MyStruct"
assert len(struct_type.structure_elements) == 1
assert struct_type.get_element("member1") == element
class TestImplementationTypes:
"""实现数据类型测试"""
def test_create_impl_value_type(self):
"""测试创建实现值类型"""
from src import create_impl_value_type, create_base_type
base = create_base_type("UInt8")
impl_type = create_impl_value_type("ImplUInt8", base_type=base)
assert impl_type.name == "ImplUInt8"
assert impl_type.base_type == base
assert impl_type.category == Category.VALUE
def test_create_impl_structure_type(self):
"""测试创建实现结构体类型"""
from src import create_impl_structure_type, ImplementationStructureDataType
element = ImplementationStructureDataType.StructureElement(name="field1")
struct = create_impl_structure_type("ImplStruct", elements=[element])
assert struct.name == "ImplStruct"
assert len(struct.structure_elements) == 1
def test_impl_value_type_to_arxml(self):
"""测试实现值类型 ARXML 转换"""
from src import create_impl_value_type, create_base_type
base = create_base_type("UInt8")
impl_type = create_impl_value_type("ImplUInt8", base_type=base)
doc = Document()
element = impl_type.to_arxml(doc)
assert element.tagName == "IMPLEMENTATION-DATA-TYPE"
assert element.hasAttribute("UUID")
short_name = element.getElementsByTagName("SHORT-NAME")[0]
assert short_name.firstChild.nodeValue == "ImplUInt8"
def test_impl_structure_type_to_arxml(self):
"""测试实现结构体类型 ARXML 转换"""
from src import create_impl_structure_type, ImplementationStructureDataType
element = ImplementationStructureDataType.StructureElement(name="field1")
struct = create_impl_structure_type("ImplStruct", elements=[element])
doc = Document()
element = struct.to_arxml(doc)
assert element.tagName == "IMPLEMENTATION-DATA-TYPE"
assert element.hasAttribute("UUID")
class TestLinear:
"""Linear 转换测试"""
def test_linear_to_arxml(self):
"""测试线性转换 ARXML 转换"""
from src import create_linear
linear = create_linear(factor=0.1, offset=10)
doc = Document()
element = linear.to_arxml(doc)
assert element.tagName == "COMPU-SCALE"
assert element.hasChildNodes()
class TestTextTable:
"""TextTable 文本表测试"""
def test_create_text_table(self):
"""测试创建文本表"""
from src import create_text_table
text_table = create_text_table("OnOff", "ON", 0, 1)
assert text_table.name == "OnOff"
assert text_table.vt == "ON"
assert text_table.lower == 0
assert text_table.upper == 1
def test_text_table_to_arxml(self):
"""测试文本表 ARXML 转换"""
from src import create_text_table
text_table = create_text_table("Status", "ACTIVE", 1, 2)
doc = Document()
element = text_table.to_arxml(doc)
assert element.tagName == "COMPU-SCALE"
assert element.hasChildNodes()
vt_elem = element.getElementsByTagName("VT")
assert len(vt_elem) > 0
class TestInterfaces:
"""接口测试"""
def test_client_server_interface_creation(self):
"""测试创建客户端-服务端接口"""
from src import ClientServerInterface
cs_interface = ClientServerInterface(name="TestService")
assert cs_interface.name == "TestService"
assert cs_interface.is_service is False
operation = ClientServerInterface.Operation(name="StartOperation")
cs_interface.add_operation(operation)
assert cs_interface.get_operation("StartOperation") == operation
def test_client_server_interface_to_arxml(self):
"""测试客户端-服务端接口 ARXML 转换"""
from src import ClientServerInterface
cs_interface = ClientServerInterface(name="TestService")
operation = ClientServerInterface.Operation(name="StartOperation")
cs_interface.add_operation(operation)
doc = Document()
element = cs_interface.to_arxml(doc)
assert element.tagName == "CLIENT-SERVER-INTERFACE"
assert element.hasAttribute("UUID")
def test_client_server_operation_to_arxml(self):
"""测试操作方法 ARXML 转换"""
from src import ClientServerInterface
operation = ClientServerInterface.Operation(name="TestOp", is_server=True)
doc = Document()
element = operation.to_arxml(doc)
assert element.tagName == "CLIENT-SERVER-OPERATION"
assert element.hasAttribute("UUID")
class TestDataMapping:
"""数据类型映射测试"""
def test_data_type_mapping_creation(self):
"""测试创建数据类型映射"""
from src import create_data_type_mapping
mapping = create_data_type_mapping("TestMapping")
assert mapping.name == "TestMapping"
def test_data_type_mapping_to_arxml(self):
"""测试数据类型映射 ARXML 转换"""
from src import create_data_type_mapping
mapping = create_data_type_mapping("TestMapping")
doc = Document()
element = mapping.to_arxml(doc)
assert element.tagName == "DATA-TYPE-MAP"
def test_data_type_mapping_set_creation(self):
"""测试创建数据类型映射集"""
from src import create_data_type_mapping_set, create_data_type_mapping
mapping1 = create_data_type_mapping("Mapping1")
mapping_set = create_data_type_mapping_set("TestSet", mappings=[mapping1])
assert mapping_set.name == "TestSet"
assert len(mapping_set.data_type_mappings) == 1
assert mapping_set.get_mapping("Mapping1") == mapping1
def test_data_type_mapping_set_to_arxml(self):
"""测试数据类型映射集 ARXML 转换"""
from src import create_data_type_mapping_set
mapping_set = create_data_type_mapping_set("TestSet")
doc = Document()
element = mapping_set.to_arxml(doc)
assert element.tagName == "DATA-TYPE-MAPPING-SET"
assert element.hasAttribute("UUID")
class TestApplicationTypesToArxml:
"""应用数据类型 ARXML 测试"""
def test_value_type_to_arxml(self):
"""测试应用值类型 ARXML 转换"""
from src import create_value_type
value_type = create_value_type("SpeedValue")
doc = Document()
element = value_type.to_arxml(doc)
assert element.tagName == "APPLICATION-PRIMITIVE-DATA-TYPE"
assert element.hasAttribute("UUID")
short_name = element.getElementsByTagName("SHORT-NAME")[0]
assert short_name.firstChild.nodeValue == "SpeedValue"
def test_boolean_type_to_arxml(self):
"""测试布尔类型 ARXML 转换"""
from src import create_boolean_type
bool_type = create_boolean_type("IsActive")
doc = Document()
element = bool_type.to_arxml(doc)
assert element.tagName == "APPLICATION-PRIMITIVE-DATA-TYPE"
assert element.hasAttribute("UUID")
def test_structure_type_to_arxml(self):
"""测试应用结构体类型 ARXML 转换"""
from src import create_structure_type, ApplicationStructureDataType
element = ApplicationStructureDataType.StructureElement(name="member1")
struct = create_structure_type("MyStruct", elements=[element])
doc = Document()
arxml_element = struct.to_arxml(doc)
assert arxml_element.tagName == "APPLICATION-RECORD-DATA-TYPE"
assert arxml_element.hasAttribute("UUID")
def test_array_type_to_arxml(self):
"""测试应用数组类型 ARXML 转换"""
from src import create_array_type, create_value_type, ApplicationArrayDataType, Semantic
element_type = create_value_type("ArrayElement")
array_element = ApplicationArrayDataType.ArrayElement(
name="element",
data_type=element_type,
array_size_semantics=Semantic.FIXED,
length=10
)
array_type = create_array_type("MyArray", element=array_element)
doc = Document()
arxml_element = array_type.to_arxml(doc)
assert arxml_element.tagName == "APPLICATION-ARRAY-DATA-TYPE"
assert arxml_element.hasAttribute("UUID")
if __name__ == "__main__":
pytest.main([__file__, "-v"])