"""pod_control_test.py —— 吊舱目标识别/锁定控制器单元测试。 覆盖:arm_detection 发 0x07(识别,目标类型)+0x0F(自动锁定)、 stop_tracking 发 0x0E(停止)+0x08(识别关)、地面站手动命令 stop_track(0x0E)/auto_lock(0x0F+0x10)/center(0x2B)。 """ from pod_bridge.protocol import ControlCode from task_runner.pod_control import PodController class FakeBridge: def __init__(self): self.sent = [] def send_control(self, cmd): self.sent.append(cmd) def test_arm_detection_sends_detect_and_autolock(): bridge = FakeBridge() pc = PodController(bridge, target_type=1) pc.arm_detection() assert len(bridge.sent) == 2 assert bridge.sent[0].code == ControlCode.TARGET_DETECT_ON assert bridge.sent[0].param_x == 1 # 目标类型 1 = 无人机 assert bridge.sent[1].code == ControlCode.AUTO_LOCK_ON_FOUND def test_arm_detection_default_target_type_is_person_vehicle(): bridge = FakeBridge() pc = PodController(bridge) # 默认 target_type=0 = 人/车 pc.arm_detection() assert bridge.sent[0].code == ControlCode.TARGET_DETECT_ON assert bridge.sent[0].param_x == 0 def test_stop_tracking_sends_stop_and_detect_off(): bridge = FakeBridge() pc = PodController(bridge) pc.stop_tracking() assert len(bridge.sent) == 2 assert bridge.sent[0].code == ControlCode.STOP_TRACK assert bridge.sent[1].code == ControlCode.TARGET_DETECT_OFF def test_stop_track_sends_only_stop(): """地面站「停跟踪」= 只发 0x0E(0x0F 常驻自动锁定仍生效,对齐按键 u)。""" bridge = FakeBridge() pc = PodController(bridge) pc.stop_track() assert [c.code for c in bridge.sent] == [ControlCode.STOP_TRACK] def test_auto_lock_sends_autolock_and_detect_to_track(): """地面站「自动锁定」= 0x0F + 0x10(对齐按键 a)。""" bridge = FakeBridge() pc = PodController(bridge) pc.auto_lock() assert [c.code for c in bridge.sent] == [ControlCode.AUTO_LOCK_ON_FOUND, ControlCode.DETECT_TO_TRACK] def test_center_sends_center(): """地面站「归中」= 0x2B(对齐按键 c)。""" bridge = FakeBridge() pc = PodController(bridge) pc.center() assert [c.code for c in bridge.sent] == [ControlCode.CENTER]