diff options
Diffstat (limited to 'tests/unit_node/vm_test.ts')
-rw-r--r-- | tests/unit_node/vm_test.ts | 66 |
1 files changed, 66 insertions, 0 deletions
diff --git a/tests/unit_node/vm_test.ts b/tests/unit_node/vm_test.ts new file mode 100644 index 000000000..30449a7b1 --- /dev/null +++ b/tests/unit_node/vm_test.ts @@ -0,0 +1,66 @@ +// Copyright 2018-2024 the Deno authors. All rights reserved. MIT license. +import { isContext, runInNewContext } from "node:vm"; +import { assertEquals, assertThrows } from "@test_util/std/assert/mod.ts"; + +Deno.test({ + name: "vm runInNewContext", + fn() { + const two = runInNewContext("1 + 1"); + assertEquals(two, 2); + }, +}); + +Deno.test({ + name: "vm runInNewContext sandbox", + fn() { + assertThrows(() => runInNewContext("Deno")); + // deno-lint-ignore no-var + var a = 1; + assertThrows(() => runInNewContext("a + 1")); + + runInNewContext("a = 2"); + assertEquals(a, 1); + }, +}); + +// https://github.com/webpack/webpack/blob/87660921808566ef3b8796f8df61bd79fc026108/lib/javascript/JavascriptParser.js#L4329 +Deno.test({ + name: "vm runInNewContext webpack magic comments", + fn() { + const webpackCommentRegExp = new RegExp( + /(^|\W)webpack[A-Z]{1,}[A-Za-z]{1,}:/, + ); + const comments = [ + 'webpackChunkName: "test"', + 'webpackMode: "lazy"', + "webpackPrefetch: true", + "webpackPreload: true", + "webpackProvidedExports: true", + 'webpackChunkLoading: "require"', + 'webpackExports: ["default", "named"]', + ]; + + for (const comment of comments) { + const result = webpackCommentRegExp.test(comment); + assertEquals(result, true); + + const [[key, _value]]: [string, string][] = Object.entries( + runInNewContext(`(function(){return {${comment}};})()`), + ); + const expectedKey = comment.split(":")[0].trim(); + assertEquals(key, expectedKey); + } + }, +}); + +Deno.test({ + name: "vm isContext", + fn() { + // Currently we do not expose VM contexts so this is always false. + const obj = {}; + assertEquals(isContext(obj), false); + assertEquals(isContext(globalThis), false); + const sandbox = runInNewContext("{}"); + assertEquals(isContext(sandbox), false); + }, +}); |