mirror of
https://github.com/dptech-corp/Uni-Lab-OS.git
synced 2025-12-14 13:14:39 +00:00
121 lines
3.2 KiB
Python
121 lines
3.2 KiB
Python
"""
|
|
映射测试
|
|
|
|
测试消息类型映射和字段映射功能。
|
|
"""
|
|
|
|
import unittest
|
|
from dataclasses import dataclass
|
|
|
|
from unilabos.ros.msgs.message_converter import (
|
|
_msg_mapping,
|
|
_action_mapping,
|
|
_msg_converter,
|
|
_msg_converter_back,
|
|
compare_model_fields,
|
|
Point,
|
|
Point3D,
|
|
Float64,
|
|
String,
|
|
set_msg_data,
|
|
)
|
|
|
|
|
|
@dataclass
|
|
class TestMappingModel:
|
|
"""用于测试映射的数据类"""
|
|
|
|
id: str
|
|
name: str
|
|
value: float
|
|
|
|
|
|
@dataclass
|
|
class TestPointModel:
|
|
"""用于测试字段比较的点模型"""
|
|
|
|
x: float
|
|
y: float
|
|
z: float
|
|
|
|
|
|
class TestTypeMapping(unittest.TestCase):
|
|
"""测试类型映射"""
|
|
|
|
def test_msg_mapping(self):
|
|
"""测试消息类型映射"""
|
|
self.assertIn(float, _msg_mapping)
|
|
self.assertEqual(_msg_mapping[float], Float64)
|
|
|
|
self.assertIn(str, _msg_mapping)
|
|
self.assertEqual(_msg_mapping[str], String)
|
|
|
|
self.assertIn(Point3D, _msg_mapping)
|
|
self.assertEqual(_msg_mapping[Point3D], Point)
|
|
|
|
def test_action_mapping(self):
|
|
"""测试动作类型映射"""
|
|
self.assertIn(float, _action_mapping)
|
|
self.assertIn("type", _action_mapping[float])
|
|
self.assertIn("goal", _action_mapping[float])
|
|
self.assertIn("feedback", _action_mapping[float])
|
|
self.assertIn("result", _action_mapping[float])
|
|
|
|
def test_converter_mapping(self):
|
|
"""测试转换器映射"""
|
|
# 测试Python到ROS映射
|
|
self.assertIn(float, _msg_converter)
|
|
self.assertIn(Float64, _msg_converter)
|
|
self.assertIn(String, _msg_converter)
|
|
self.assertIn(Point, _msg_converter)
|
|
|
|
# 测试ROS到Python映射
|
|
self.assertIn(float, _msg_converter_back)
|
|
self.assertIn(Float64, _msg_converter_back)
|
|
self.assertIn(String, _msg_converter_back)
|
|
self.assertIn(Point, _msg_converter_back)
|
|
|
|
|
|
class TestFieldMapping(unittest.TestCase):
|
|
"""测试字段映射"""
|
|
|
|
def test_compare_model_fields(self):
|
|
"""测试模型字段比较"""
|
|
# Point3D和TestPointModel有相同的字段
|
|
self.assertTrue(compare_model_fields(Point3D, TestPointModel))
|
|
|
|
# 与其他类型比较
|
|
self.assertFalse(compare_model_fields(Point3D, TestMappingModel))
|
|
self.assertFalse(compare_model_fields(Point3D, float))
|
|
|
|
# 类型对象和实例对象比较
|
|
point = Point3D(x=1.0, y=2.0, z=3.0)
|
|
self.assertTrue(compare_model_fields(Point3D, type(point)))
|
|
|
|
def test_set_msg_data(self):
|
|
"""测试设置消息数据类型"""
|
|
# 测试float转换
|
|
float_value = "3.14"
|
|
self.assertEqual(set_msg_data("float", float_value), 3.14)
|
|
self.assertEqual(set_msg_data("double", float_value), 3.14)
|
|
|
|
# 测试int转换
|
|
int_value = "42"
|
|
self.assertEqual(set_msg_data("int", int_value), 42)
|
|
|
|
# 测试bool转换
|
|
bool_value = "True"
|
|
self.assertEqual(set_msg_data("bool", bool_value), True)
|
|
|
|
# 测试str转换
|
|
str_value = "hello"
|
|
self.assertEqual(set_msg_data("str", str_value), "hello")
|
|
|
|
# 测试默认转换
|
|
default_value = 123
|
|
self.assertEqual(set_msg_data("unknown_type", default_value), "123")
|
|
|
|
|
|
if __name__ == "__main__":
|
|
unittest.main()
|