diff --git a/cli/js/plugins.ts b/cli/js/plugins.ts index 3fe0574cac..498da8e16f 100644 --- a/cli/js/plugins.ts +++ b/cli/js/plugins.ts @@ -1,5 +1,6 @@ import { openPlugin as openPluginOp } from "./ops/plugins.ts"; import { core } from "./core.ts"; +import { close } from "./ops/resources.ts"; export interface AsyncHandler { (msg: Uint8Array): void; @@ -32,18 +33,17 @@ class PluginOpImpl implements PluginOp { } } -// TODO(afinch7): add close method. - interface Plugin { ops: { [name: string]: PluginOp; }; + close(): void; } class PluginImpl implements Plugin { #ops: { [name: string]: PluginOp } = {}; - constructor(_rid: number, ops: { [name: string]: number }) { + constructor(readonly rid: number, ops: { [name: string]: number }) { for (const op in ops) { this.#ops[op] = new PluginOpImpl(ops[op]); } @@ -52,6 +52,10 @@ class PluginImpl implements Plugin { get ops(): { [name: string]: PluginOp } { return Object.assign({}, this.#ops); } + + close(): void { + close(this.rid); + } } export function openPlugin(filename: string): Plugin { diff --git a/test_plugin/tests/test.js b/test_plugin/tests/test.js index d6d531f145..d34624f099 100644 --- a/test_plugin/tests/test.js +++ b/test_plugin/tests/test.js @@ -13,6 +13,10 @@ if (Deno.build.os === "mac") { const filename = `../target/${Deno.args[0]}/${filenamePrefix}${filenameBase}${filenameSuffix}`; +// This will be checked against open resources after Plugin.close() +// in runTestClose() below. +const resourcesPre = Deno.resources(); + const plugin = Deno.openPlugin(filename); const { testSync, testAsync } = plugin.ops; @@ -60,7 +64,22 @@ function runTestOpCount() { } } +function runTestPluginClose() { + plugin.close(); + + const resourcesPost = Deno.resources(); + + const preStr = JSON.stringify(resourcesPre, null, 2); + const postStr = JSON.stringify(resourcesPost, null, 2); + if (preStr !== postStr) { + throw new Error(`Difference in open resources before openPlugin and after Plugin.close(): +Before: ${preStr} +After: ${postStr}`); + } +} + runTestSync(); runTestAsync(); runTestOpCount(); +runTestPluginClose();