Skip to content

Commit

Permalink
Add close method to Plugin (denoland#4670) (denoland#4785)
Browse files Browse the repository at this point in the history
  • Loading branch information
gvatn committed Apr 17, 2020
1 parent 5bfe3eb commit 260084c
Show file tree
Hide file tree
Showing 2 changed files with 26 additions and 3 deletions.
10 changes: 7 additions & 3 deletions cli/js/plugins.ts
Original file line number Diff line number Diff line change
@@ -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;
Expand Down Expand Up @@ -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]);
}
Expand All @@ -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 {
Expand Down
19 changes: 19 additions & 0 deletions test_plugin/tests/test.js
Original file line number Diff line number Diff line change
Expand Up @@ -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;
Expand Down Expand Up @@ -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();

0 comments on commit 260084c

Please sign in to comment.