forked from eight04/worker-vm
-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathmod_test.ts
72 lines (61 loc) · 2.09 KB
/
mod_test.ts
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
import { assertEquals, assertRejects, assertStringIncludes } from "https://deno.land/[email protected]/assert/mod.ts";
import { VM } from "./mod.ts";
function withVM(fn: (vm: VM) => Promise<void>, options?: { timeoutMs?: number }) {
return async () => {
let vm: VM | undefined;
try {
vm = new VM(options);
return await fn(vm);
} finally {
if (vm) {
vm.close();
}
}
}
}
Deno.test("VM.run", withVM(async (vm) => {
const result = await vm.run("1 + 1");
assertEquals(result, 2);
}));
Deno.test("VM.run throw", withVM(async (vm) => {
const err = await assertRejects(() => vm.run("throw new Error('test')"));
assertStringIncludes(String(err), "test");
}));
Deno.test("VM.run reject", withVM(async (vm) => {
const err = await assertRejects(() => vm.run("new Promise((_, reject) => reject(new Error('test')))"));
assertStringIncludes(String(err), "test");
}));
Deno.test("VM.call", withVM(async (vm) => {
await vm.run(`function sum(a, b) {return a + b}`);
const result = await vm.call("sum", 1, 1);
assertEquals(result, 2);
}));
Deno.test("VM.close", withVM(async (vm) => {
vm.close();
const err = await assertRejects(() => vm.run("1 + 1"));
assertStringIncludes(String(err), "VM is closed");
}));
Deno.test("VM.close after call", withVM(async (vm) => {
const pendingErr = assertRejects(() => vm.run("1 + 1"));
vm.close();
const err = await pendingErr;
assertStringIncludes(String(err), "VM is closed");
}));
Deno.test("timeout", withVM(async (vm) => {
const err = await assertRejects(() => vm.run("self.close()"));
assertStringIncludes(String(err), "Timeout");
}, {timeoutMs: 1000}));
Deno.test("console", withVM(async (vm: VM) => {
let e;
vm.addEventListener("console", (_e) => {
e = _e;
});
await vm.run("console.log('test')");
assertEquals(e!.detail.type, "console");
assertEquals(e!.detail.method, "log");
assertEquals(e!.detail.args, ["test"]);
}));
Deno.test("Deno.open", withVM(async (vm) => {
const err = await assertRejects(() => vm.run("Deno.open('test')"));
assertStringIncludes(String(err), "PermissionDenied");
}));