优化无线/有线CAN,以及控制指令解析
This commit is contained in:
@@ -235,6 +235,61 @@ class DriverSeatNativeCanTests(unittest.TestCase):
|
||||
self.assertEqual((action["capability"], action["parameters"]), expected)
|
||||
self.assertEqual(action["target"], "driver")
|
||||
|
||||
def test_multiclause_massage_preserves_five_modes_and_three_strengths(
|
||||
self,
|
||||
) -> None:
|
||||
modes = {
|
||||
"波浪": "wave",
|
||||
"脉冲": "pulse",
|
||||
"伸展": "stretch",
|
||||
"松弛": "slack",
|
||||
"放松": "relax",
|
||||
}
|
||||
strengths = {
|
||||
"最小": 1,
|
||||
"中等": 2,
|
||||
"最大": 3,
|
||||
}
|
||||
for mode_text, mode in modes.items():
|
||||
for strength_text, strength in strengths.items():
|
||||
utterance = (
|
||||
f"打开主驾座椅按摩,模式切换为{mode_text}模式,"
|
||||
f"强度调到{strength_text}"
|
||||
)
|
||||
with self.subTest(utterance=utterance):
|
||||
parsed = merge_native_can_intent({}, utterance)
|
||||
actions = parsed.get("native_can_actions", [])
|
||||
self.assertEqual(
|
||||
[item["parameters"] for item in actions],
|
||||
[
|
||||
{"action": "mode", "mode": mode},
|
||||
{"action": "strength", "strength": strength},
|
||||
],
|
||||
)
|
||||
|
||||
parsed = merge_native_can_intent(
|
||||
{},
|
||||
"打开主驾座椅按摩,然后把模式切换为脉冲模式,"
|
||||
"同时把强度调到最大",
|
||||
)
|
||||
config = self.runtime.build_function_config(
|
||||
"seat",
|
||||
parsed["native_can_actions"],
|
||||
"req-driver-massage-multiclause",
|
||||
"local_rules",
|
||||
)
|
||||
plan = self.runtime.compile(config)
|
||||
self.assertEqual(
|
||||
[
|
||||
command["signals"]["debug_command"]
|
||||
for command in plan["spec"]["commands"]
|
||||
],
|
||||
[
|
||||
"seat driver massage mode pulse",
|
||||
"seat driver massage strength strong",
|
||||
],
|
||||
)
|
||||
|
||||
def test_parser_rejects_passenger_right_front_and_unsafe_guesses(self) -> None:
|
||||
utterances = (
|
||||
"seat passenger vent low",
|
||||
@@ -453,6 +508,9 @@ class DriverSeatNativeCanTests(unittest.TestCase):
|
||||
)
|
||||
telemetry = report["spec"]["results"][0]["telemetry"]
|
||||
self.assertFalse(telemetry["physical_effect_confirmed"])
|
||||
self.assertEqual(
|
||||
telemetry["verification_status"], "submitted_unverified"
|
||||
)
|
||||
self.assertEqual(len(telemetry["sent_frames"]), 20)
|
||||
|
||||
uninitialized_bus = _FakeBus(
|
||||
@@ -596,7 +654,11 @@ class DriverSeatNativeCanTests(unittest.TestCase):
|
||||
wrong_report = NativeCanExecutor(
|
||||
lambda: wrong_bus, feedback_timeout_ms=1
|
||||
).execute(self.runtime, plan, config)
|
||||
self.assertEqual(wrong_report["spec"]["status"], "failed")
|
||||
self.assertEqual(wrong_report["spec"]["status"], "succeeded")
|
||||
self.assertEqual(
|
||||
wrong_report["spec"]["verification_status"],
|
||||
"submitted_unverified",
|
||||
)
|
||||
self.assertFalse(
|
||||
wrong_report["spec"]["results"][0]["telemetry"]["feedback_match"]
|
||||
)
|
||||
@@ -652,8 +714,13 @@ class DriverSeatNativeCanTests(unittest.TestCase):
|
||||
self.runtime, plan, config
|
||||
)
|
||||
# 0x494 proves only initialization and cannot confirm that the timed
|
||||
# motion physically occurred, so strict hardware feedback fails closed.
|
||||
self.assertEqual(report["spec"]["status"], "failed")
|
||||
# motion physically occurred. Submission succeeds at the orchestration
|
||||
# layer while physical verification remains explicitly incomplete.
|
||||
self.assertEqual(report["spec"]["status"], "succeeded")
|
||||
self.assertEqual(
|
||||
report["spec"]["verification_status"],
|
||||
"submitted_unverified",
|
||||
)
|
||||
self.assertEqual(len(bus.sent), 8)
|
||||
self.assertTrue(all(frame.is_fd and frame.bitrate_switch for frame in bus.sent))
|
||||
self.assertEqual(
|
||||
@@ -662,6 +729,10 @@ class DriverSeatNativeCanTests(unittest.TestCase):
|
||||
)
|
||||
telemetry = report["spec"]["results"][0]["telemetry"]
|
||||
self.assertIsNone(telemetry["feedback_match"])
|
||||
self.assertEqual(
|
||||
telemetry["verification_status"], "submitted_unverified"
|
||||
)
|
||||
self.assertFalse(telemetry["physical_effect_confirmed"])
|
||||
self.assertTrue(telemetry["feedback_required"])
|
||||
self.assertTrue(telemetry["feedback_observed"])
|
||||
self.assertEqual(
|
||||
|
||||
Reference in New Issue
Block a user