import { afterEach, describe, expect, it, vi } from "vitest" ;
import { createEmptyPluginRegistry } from "../plugins/registry-empty.js" ;
import { resetPluginRuntimeStateForTest, setActivePluginRegistry } from "../plugins/runtime.js" ;
import {
invokeRegisteredNodeHostCommand,
listRegisteredNodeHostCapsAndCommands,
} from "./plugin-node-host.js" ;
afterEach(() => {
resetPluginRuntimeStateForTest();
});
describe("plugin node-host registry" , () => {
it("lists plugin-declared caps and commands" , () => {
const registry = createEmptyPluginRegistry();
registry.nodeHostCommands = [
{
pluginId: "browser" ,
pluginName: "Browser" ,
command: {
command: "browser.proxy" ,
cap: "browser" ,
handle: vi.fn(async () => "{}" ),
},
source: "test" ,
},
{
pluginId: "photos" ,
pluginName: "Photos" ,
command: {
command: "photos.proxy" ,
cap: "photos" ,
handle: vi.fn(async () => "{}" ),
},
source: "test" ,
},
{
pluginId: "browser-dup" ,
pluginName: "Browser Dup" ,
command: {
command: "browser.inspect" ,
cap: "browser" ,
handle: vi.fn(async () => "{}" ),
},
source: "test" ,
},
];
setActivePluginRegistry(registry);
expect(listRegisteredNodeHostCapsAndCommands()).toEqual({
caps: ["browser" , "photos" ],
commands: ["browser.inspect" , "browser.proxy" , "photos.proxy" ],
});
});
it("dispatches plugin-declared node-host commands" , async () => {
const handle = vi.fn(async (paramsJSON?: string | null ) => paramsJSON ?? "" );
const registry = createEmptyPluginRegistry();
registry.nodeHostCommands = [
{
pluginId: "browser" ,
pluginName: "Browser" ,
command: {
command: "browser.proxy" ,
cap: "browser" ,
handle,
},
source: "test" ,
},
];
setActivePluginRegistry(registry);
await expect(invokeRegisteredNodeHostCommand("browser.proxy" , '{"ok":true}' )).resolves.toBe(
'{"ok":true}' ,
);
await expect(invokeRegisteredNodeHostCommand("missing.command" , null )).resolves.toBeNull();
expect(handle).toHaveBeenCalledWith('{"ok":true}' );
});
});
Messung V0.5 in Prozent C=100 H=100 G=100
¤ Dauer der Verarbeitung: 0.10 Sekunden
(vorverarbeitet am 2026-06-09)
¤
*© Formatika GbR, Deutschland