Add close method to Plugin (#4670) (#4785)

This commit is contained in:
Gudmund Vatn 2020-04-17 12:51:10 +02:00 committed by GitHub
parent 5bfe3eb8f4
commit 260084ccbf
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
2 changed files with 26 additions and 3 deletions

View file

@ -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 {

View file

@ -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();