71 lines
2.5 KiB
TypeScript
71 lines
2.5 KiB
TypeScript
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);
|
||
});
|
||
});
|