mirror of
https://github.com/openclaw/openclaw.git
synced 2026-07-23 14:51:17 +00:00
90 lines
3.2 KiB
TypeScript
90 lines
3.2 KiB
TypeScript
// Runtime import tests cover lazy runtime import caching and failure handling.
|
|
import { afterEach, describe, expect, it, vi } from "vitest";
|
|
import { toSafeImportPath } from "./import-specifier.js";
|
|
import { importRuntimeModule } from "./runtime-import.js";
|
|
|
|
async function captureRuntimeImportSpecifier(baseUrl: string, parts: readonly string[]) {
|
|
const importModule = vi.fn(async (specifier: string) => ({ specifier }));
|
|
await importRuntimeModule(baseUrl, parts, importModule);
|
|
return importModule.mock.calls[0]?.[0];
|
|
}
|
|
|
|
describe("runtime-import", () => {
|
|
afterEach(() => {
|
|
vi.restoreAllMocks();
|
|
});
|
|
|
|
it("converts Windows absolute import specifiers to file URLs", () => {
|
|
vi.spyOn(process, "platform", "get").mockReturnValue("win32");
|
|
|
|
expect(toSafeImportPath("C:\\Users\\alice\\plugin\\index.mjs")).toBe(
|
|
"file:///C:/Users/alice/plugin/index.mjs",
|
|
);
|
|
expect(toSafeImportPath("C:\\Users\\alice\\plugin folder\\x#y.mjs")).toBe(
|
|
"file:///C:/Users/alice/plugin%20folder/x%23y.mjs",
|
|
);
|
|
expect(toSafeImportPath("\\\\server\\share\\plugin\\index.mjs")).toBe(
|
|
"file://server/share/plugin/index.mjs",
|
|
);
|
|
});
|
|
|
|
it("resolves runtime imports from Windows absolute base paths", async () => {
|
|
vi.spyOn(process, "platform", "get").mockReturnValue("win32");
|
|
|
|
expect(
|
|
await captureRuntimeImportSpecifier(
|
|
"C:\\Users\\alice\\openclaw\\dist\\subagent-registry.js",
|
|
["./subagent-registry.runtime.js"],
|
|
),
|
|
).toBe("file:///C:/Users/alice/openclaw/dist/subagent-registry.runtime.js");
|
|
});
|
|
|
|
it("resolves runtime imports from file URL base paths", async () => {
|
|
vi.spyOn(process, "platform", "get").mockReturnValue("win32");
|
|
|
|
expect(
|
|
await captureRuntimeImportSpecifier(
|
|
"file:///C:/Users/alice/openclaw/dist/subagent-registry.js",
|
|
["./subagent-registry.runtime.js"],
|
|
),
|
|
).toBe("file:///C:/Users/alice/openclaw/dist/subagent-registry.runtime.js");
|
|
});
|
|
|
|
it("resolves absolute Windows runtime import parts directly", async () => {
|
|
vi.spyOn(process, "platform", "get").mockReturnValue("win32");
|
|
|
|
expect(
|
|
await captureRuntimeImportSpecifier(
|
|
"file:///C:/Users/alice/openclaw/dist/subagent-registry.js",
|
|
["D:\\OpenClaw\\dist\\subagent-registry.runtime.js"],
|
|
),
|
|
).toBe("file:///D:/OpenClaw/dist/subagent-registry.runtime.js");
|
|
});
|
|
|
|
it("keeps non-Windows import paths unchanged", () => {
|
|
vi.spyOn(process, "platform", "get").mockReturnValue("linux");
|
|
|
|
expect(toSafeImportPath("C:\\Users\\alice\\plugin\\index.mjs")).toBe(
|
|
"C:\\Users\\alice\\plugin\\index.mjs",
|
|
);
|
|
});
|
|
|
|
it("imports with the normalized runtime specifier", async () => {
|
|
vi.spyOn(process, "platform", "get").mockReturnValue("win32");
|
|
const importModule = vi.fn(async (specifier: string) => ({ specifier }));
|
|
|
|
const result = await importRuntimeModule(
|
|
"C:\\Users\\alice\\openclaw\\dist\\subagent-registry.js",
|
|
["./subagent-registry.runtime.js"],
|
|
importModule,
|
|
);
|
|
|
|
expect(importModule).toHaveBeenCalledWith(
|
|
"file:///C:/Users/alice/openclaw/dist/subagent-registry.runtime.js",
|
|
);
|
|
expect(result).toEqual({
|
|
specifier: "file:///C:/Users/alice/openclaw/dist/subagent-registry.runtime.js",
|
|
});
|
|
});
|
|
});
|