35 lines
1.7 KiB
JavaScript
35 lines
1.7 KiB
JavaScript
import assert from "node:assert/strict";
|
|
import { DEFAULT_DESCRIPTOR, cloneDescriptor, parseInstruction } from "./parser-engine.js";
|
|
|
|
const successCases = [
|
|
["开启车载冰箱", "refrigerator.set_power", { state: "on" }],
|
|
["把冰箱温度调到4度", "refrigerator.set_temperature", { temperature_c: 4 }],
|
|
["将冷藏箱设为速冷模式", "refrigerator.set_mode", { mode: "fast_cool" }],
|
|
["关闭冰箱", "refrigerator.set_power", { state: "off" }],
|
|
];
|
|
|
|
for (const [utterance, capability, parameters] of successCases) {
|
|
const result = parseInstruction(utterance, DEFAULT_DESCRIPTOR);
|
|
assert.equal(result.semantic_status, "recognized_executable", utterance);
|
|
assert.equal(result.execution_eligible, true, utterance);
|
|
assert.equal(result.command.capability, capability, utterance);
|
|
assert.deepEqual(result.command.parameters, parameters, utterance);
|
|
assert.equal(result.command.executor_payload.demo_only, true, utterance);
|
|
}
|
|
|
|
const outOfRange = parseInstruction("把冰箱调到零下10度", DEFAULT_DESCRIPTOR);
|
|
assert.equal(outOfRange.semantic_status, "recognized_unsupported");
|
|
assert.equal(outOfRange.execution_eligible, false);
|
|
assert.match(outOfRange.issues.join(" "), /低于下限/);
|
|
|
|
const noDevice = parseInstruction("把空调调到4度", DEFAULT_DESCRIPTOR);
|
|
assert.equal(noDevice.semantic_status, "no_command");
|
|
assert.equal(noDevice.execution_eligible, false);
|
|
|
|
const disabled = cloneDescriptor();
|
|
disabled.capabilities.find((item) => item.id === "refrigerator.set_temperature").enabled = false;
|
|
const disabledResult = parseInstruction("把冰箱温度调到4度", disabled);
|
|
assert.equal(disabledResult.semantic_status, "incomplete");
|
|
|
|
console.log(`device capability card demo: ${successCases.length + 3} parser checks passed`);
|