import { describe, expect, it } from "vitest"; import { demoSession } from "./fixtures"; import { isProtocolVersion, isSession, parseSession, ProtocolParseError } from "./parser"; describe("协议解析", () => { it("接受完整 Session 并保留未知枚举和扩展字段", () => { const futureSession = { ...demoSession, state: "SUSPENDED_BY_POLICY", vendor_status: 42 }; const parsed = parseSession(futureSession); expect(parsed.state).toBe("SUSPENDED_BY_POLICY"); expect(parsed.vendor_status).toBe(42); }); it("拒绝缺少 project_id 的跨上下文 Session", () => { const { project_id: _projectId, ...invalid } = demoSession; expect(isSession(invalid)).toBe(false); expect(() => parseSession(invalid)).toThrow(ProtocolParseError); }); it("协议版本必须由非负整数构成", () => { expect(isProtocolVersion({ major: 1, minor: 0, patch: 0, future: true })).toBe(true); expect(isProtocolVersion({ major: 1, minor: -1, patch: 0 })).toBe(false); }); });