summaryrefslogtreecommitdiff
path: root/tests/unit_node/vm_test.ts
diff options
context:
space:
mode:
authorDivy Srivastava <dj.srivastava23@gmail.com>2024-04-09 21:24:25 +0530
committerGitHub <noreply@github.com>2024-04-09 21:24:25 +0530
commitfad12b7c2ebd87a2a11f63998f4c2549fd405eff (patch)
tree38c43f48365d2436dff47d2f91c7e13930932626 /tests/unit_node/vm_test.ts
parenta4f3e7436e81cd229f85657f2fee2caaa0e3b05e (diff)
fix(ext/node): `node:vm` contexts (#23202)
Implement contextified objects in `node:vm` Fixes https://github.com/denoland/deno/issues/23186 Fixes https://github.com/denoland/deno/issues/22395 Fixes https://github.com/denoland/deno/issues/20607 Fixes https://github.com/denoland/deno/issues/18299 Fixes https://github.com/denoland/deno/issues/19395 Fixes https://github.com/denoland/deno/issues/18315 Fixes https://github.com/denoland/deno/issues/18319 Fixes https://github.com/denoland/deno/issues/23183
Diffstat (limited to 'tests/unit_node/vm_test.ts')
-rw-r--r--tests/unit_node/vm_test.ts82
1 files changed, 75 insertions, 7 deletions
diff --git a/tests/unit_node/vm_test.ts b/tests/unit_node/vm_test.ts
index f8bc11b82..b557350ad 100644
--- a/tests/unit_node/vm_test.ts
+++ b/tests/unit_node/vm_test.ts
@@ -1,6 +1,13 @@
// Copyright 2018-2024 the Deno authors. All rights reserved. MIT license.
-import { isContext, runInNewContext } from "node:vm";
import { assertEquals, assertThrows } from "@std/assert/mod.ts";
+import {
+ createContext,
+ isContext,
+ runInContext,
+ runInNewContext,
+ runInThisContext,
+ Script,
+} from "node:vm";
Deno.test({
name: "vm runInNewContext",
@@ -11,15 +18,75 @@ Deno.test({
});
Deno.test({
+ name: "vm new Script()",
+ fn() {
+ const script = new Script(`
+function add(a, b) {
+ return a + b;
+}
+const x = add(1, 2);
+x
+`);
+
+ const value = script.runInThisContext();
+ assertEquals(value, 3);
+ },
+});
+
+// https://github.com/denoland/deno/issues/23186
+Deno.test({
name: "vm runInNewContext sandbox",
fn() {
- assertThrows(() => runInNewContext("Deno"));
- // deno-lint-ignore no-var
- var a = 1;
- assertThrows(() => runInNewContext("a + 1"));
+ const sandbox = { fromAnotherRealm: false };
+ runInNewContext("fromAnotherRealm = {}", sandbox);
+
+ assertEquals(typeof sandbox.fromAnotherRealm, "object");
+ },
+});
+
+// https://github.com/denoland/deno/issues/22395
+Deno.test({
+ name: "vm runInewContext with context object",
+ fn() {
+ const context = { a: 1, b: 2 };
+ const result = runInNewContext("a + b", context);
+ assertEquals(result, 3);
+ },
+});
+
+// https://github.com/denoland/deno/issues/18299
+Deno.test({
+ name: "vm createContext and runInContext",
+ fn() {
+ // @ts-expect-error implicit any
+ globalThis.globalVar = 3;
+
+ const context = { globalVar: 1 };
+ createContext(context);
+ runInContext("globalVar *= 2", context);
+ assertEquals(context.globalVar, 2);
+ // @ts-expect-error implicit any
+ assertEquals(globalThis.globalVar, 3);
+ },
+});
- runInNewContext("a = 2");
- assertEquals(a, 1);
+Deno.test({
+ name: "vm runInThisContext Error rethrow",
+ fn() {
+ assertThrows(
+ () => {
+ runInThisContext("throw new Error('error')");
+ },
+ Error,
+ "error",
+ );
+ assertThrows(
+ () => {
+ runInThisContext("throw new TypeError('type error')");
+ },
+ TypeError,
+ "type error",
+ );
},
});
@@ -53,6 +120,7 @@ Deno.test({
},
});
+// https://github.com/denoland/deno/issues/18315
Deno.test({
name: "vm isContext",
fn() {