


























@@ -1,62 +1,24 @@
1-import fs from "node:fs";
2-import os from "node:os";
3-import path from "node:path";
41import { SessionManager } from "@mariozechner/pi-coding-agent";
52import { afterEach, describe, expect, it } from "vitest";
63import { listEmbeddedExtensionFactories } from "../plugins/embedded-extension-factory.js";
7-import { clearPluginLoaderCache, loadOpenClawPlugins } from "../plugins/loader.js";
8-import { createEmptyPluginRegistry } from "../plugins/registry.js";
9-import { setActivePluginRegistry } from "../plugins/runtime.js";
4+import { loadOpenClawPlugins } from "../plugins/loader.js";
105import { buildEmbeddedExtensionFactories } from "./pi-embedded-runner/extensions.js";
6+import {
7+cleanupTempPluginTestEnvironment,
8+createTempPluginDir,
9+resetActivePluginRegistryForTest,
10+writeTempPlugin,
11+} from "./test-helpers/temp-plugin-extension-fixtures.js";
111212-const EMPTY_PLUGIN_SCHEMA = { type: "object", additionalProperties: false, properties: {} };
1313const originalBundledPluginsDir = process.env.OPENCLAW_BUNDLED_PLUGINS_DIR;
1414const tempDirs: string[] = [];
15151616function createTempDir(): string {
17-const dir = fs.mkdtempSync(path.join(os.tmpdir(), "openclaw-embedded-ext-"));
18-tempDirs.push(dir);
19-return dir;
20-}
21-22-function writeTempPlugin(params: {
23-dir: string;
24-id: string;
25-body: string;
26-manifest?: Record<string, unknown>;
27-filename?: string;
28-}): string {
29-const pluginDir = path.join(params.dir, params.id);
30-fs.mkdirSync(pluginDir, { recursive: true });
31-const file = path.join(pluginDir, params.filename ?? `${params.id}.mjs`);
32-fs.writeFileSync(file, params.body, "utf-8");
33-fs.writeFileSync(
34-path.join(pluginDir, "openclaw.plugin.json"),
35-JSON.stringify(
36-{
37-id: params.id,
38- ...params.manifest,
39-configSchema: EMPTY_PLUGIN_SCHEMA,
40-},
41-null,
42-2,
43-),
44-"utf-8",
45-);
46-return file;
17+return createTempPluginDir(tempDirs, "openclaw-embedded-ext-");
4718}
48194920afterEach(() => {
50-for (const dir of tempDirs.splice(0)) {
51-fs.rmSync(dir, { recursive: true, force: true });
52-}
53-clearPluginLoaderCache();
54-setActivePluginRegistry(createEmptyPluginRegistry());
55-if (originalBundledPluginsDir === undefined) {
56-delete process.env.OPENCLAW_BUNDLED_PLUGINS_DIR;
57-} else {
58-process.env.OPENCLAW_BUNDLED_PLUGINS_DIR = originalBundledPluginsDir;
59-}
21+cleanupTempPluginTestEnvironment(tempDirs, originalBundledPluginsDir);
6022});
61236224describe("buildEmbeddedExtensionFactories", () => {
@@ -104,7 +66,7 @@ describe("buildEmbeddedExtensionFactories", () => {
10466expect(firstFactories).toHaveLength(1);
10567expect(listEmbeddedExtensionFactories()).toHaveLength(1);
10668107-setActivePluginRegistry(createEmptyPluginRegistry());
69+resetActivePluginRegistryForTest();
10870expect(listEmbeddedExtensionFactories()).toHaveLength(0);
1097111072loadOpenClawPlugins(options);
此内容由惯性聚合(RSS阅读器)自动聚合整理,仅供阅读参考。 原文来自 — 版权归原作者所有。