summaryrefslogtreecommitdiff
path: root/tests/unit_node/vm_test.ts
diff options
context:
space:
mode:
authorMatt Mastracci <matthew@mastracci.com>2024-02-10 13:22:13 -0700
committerGitHub <noreply@github.com>2024-02-10 20:22:13 +0000
commitf5e46c9bf2f50d66a953fa133161fc829cecff06 (patch)
tree8faf2f5831c1c7b11d842cd9908d141082c869a5 /tests/unit_node/vm_test.ts
parentd2477f780630a812bfd65e3987b70c0d309385bb (diff)
chore: move cli/tests/ -> tests/ (#22369)
This looks like a massive PR, but it's only a move from cli/tests -> tests, and updates of relative paths for files. This is the first step towards aggregate all of the integration test files under tests/, which will lead to a set of integration tests that can run without the CLI binary being built. While we could leave these tests under `cli`, it would require us to keep a more complex directory structure for the various test runners. In addition, we have a lot of complexity to ignore various test files in the `cli` project itself (cargo publish exclusion rules, autotests = false, etc). And finally, the `tests/` folder will eventually house the `test_ffi`, `test_napi` and other testing code, reducing the size of the root repo directory. For easier review, the extremely large and noisy "move" is in the first commit (with no changes -- just a move), while the remainder of the changes to actual files is in the second commit.
Diffstat (limited to 'tests/unit_node/vm_test.ts')
-rw-r--r--tests/unit_node/vm_test.ts66
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);
+ },
+});