import { describe, expect, it } from "vitest"; import type { AutomationDriver } from "../../src/driver/types"; import { createEngine } from "../../src/engine/engine"; import { WindowsDriver } from "../../src/driver/windows/windows-driver"; describe("driver 平台自动选择(迁移指南五件小事 #2)", () => { it("win32 上惰性创建 WindowsDriver 且实例缓存", () => { const engine = createEngine(); expect(engine.driver).toBeInstanceOf(WindowsDriver); expect(engine.driver).toBe(engine.driver); }); it("非 win32 访问 driver 抛 platform_unsupported", () => { const engine = createEngine(); const original = process.platform; Object.defineProperty(process, "platform", { value: "darwin", configurable: true }); try { expect(() => engine.driver).toThrowError(/暂不支持桌面自动化驱动/); } finally { Object.defineProperty(process, "platform", { value: original, configurable: true }); } }); }); describe("createEngine 注入(迁移阶段1-A1)", () => { const fakeDriver = (): AutomationDriver => ({ mouse: {}, keyboard: {}, window: {}, screen: { size: async () => ({ x: 0, y: 0, width: 800, height: 600 }) }, element: {} }) as unknown as AutomationDriver; it("createEngine 可注入自定义 driver", () => { const driver = fakeDriver(); const engine = createEngine({ driver }); expect(engine.driver).toBe(driver); }); it("注入后不触发平台自动选择(darwin 上也可用)", () => { const driver = fakeDriver(); const engine = createEngine({ driver }); const original = process.platform; Object.defineProperty(process, "platform", { value: "darwin", configurable: true }); try { expect(engine.driver).toBe(driver); expect(engine.driver.screen.size).toBeTruthy(); } finally { Object.defineProperty(process, "platform", { value: original, configurable: true }); } }); it("两个引擎注入不同 driver 互不影响", () => { const driverA = fakeDriver(); const driverB = fakeDriver(); const engineA = createEngine({ driver: driverA }); const engineB = createEngine({ driver: driverB }); expect(engineA.driver).toBe(driverA); expect(engineB.driver).toBe(driverB); expect(engineA.driver).not.toBe(engineB.driver); }); it("setDriver 可后置替换", () => { const engine = createEngine(); const driver = fakeDriver(); engine.setDriver(driver); expect(engine.driver).toBe(driver); }); });