aboutsummaryrefslogtreecommitdiff
path: root/test/js/node/stubs.test.js
diff options
context:
space:
mode:
Diffstat (limited to 'test/js/node/stubs.test.js')
-rw-r--r--test/js/node/stubs.test.js120
1 files changed, 120 insertions, 0 deletions
diff --git a/test/js/node/stubs.test.js b/test/js/node/stubs.test.js
new file mode 100644
index 000000000..e6bce8aee
--- /dev/null
+++ b/test/js/node/stubs.test.js
@@ -0,0 +1,120 @@
+import { describe, expect, test } from "bun:test";
+
+const weirdInternalSpecifiers = [
+ "_http_agent",
+ "_http_client",
+ "_http_common",
+ "_http_incoming",
+ "_http_outgoing",
+ "_http_server",
+ "_stream_duplex",
+ "_stream_passthrough",
+ "_stream_readable",
+ "_stream_transform",
+ "_stream_wrap",
+ "_stream_writable",
+ "_tls_common",
+ "_tls_wrap",
+];
+
+// Check that all the node modules comply with the expected interface in bun
+var specifiers = [
+ "assert",
+ "assert/strict",
+ "async_hooks",
+ "buffer",
+ "child_process",
+ "cluster",
+ "console",
+ "constants",
+ "crypto",
+ "dgram",
+ "diagnostics_channel",
+ "dns",
+ "dns/promises",
+ "domain",
+ "events",
+ "fs",
+ "fs/promises",
+ "http",
+ "http2",
+ "https",
+ "inspector",
+ "inspector/promises",
+ "module",
+ "net",
+ "os",
+ "path",
+ "path/posix",
+ "path/win32",
+ "perf_hooks",
+ "process",
+ "punycode",
+ "querystring",
+ "readline",
+ "readline/promises",
+ "repl",
+ "stream",
+ "stream/consumers",
+ "stream/promises",
+ "stream/web",
+ "string_decoder",
+ "sys",
+ "timers",
+ "timers/promises",
+ "tls",
+ "trace_events",
+ "tty",
+ "url",
+ "util",
+ "util/types",
+ "v8",
+ "vm",
+ "worker_threads",
+ "zlib",
+];
+specifiers = [...weirdInternalSpecifiers, ...specifiers.flatMap(a => ["node:" + a, a])];
+
+for (let specifier of specifiers) {
+ test(`stubbed CJS import.meta.require ${specifier}`, async () => {
+ import.meta.require(specifier);
+ });
+
+ test(`stubbed CJS require ${specifier}`, async () => {
+ require(specifier);
+ });
+
+ test(`stubbed import ${specifier}`, async () => {
+ const mod = await import(specifier);
+ if ("default" in mod) {
+ expect(mod).toHaveProperty("default");
+ const cjs = mod.default[Symbol.for("CommonJS")];
+ if (typeof cjs !== "undefined") {
+ if (cjs === 1) {
+ expect(typeof mod.default).toBe("function");
+ } else if (cjs === true) {
+ expect(cjs).toBe(true);
+ if (typeof mod.default !== "undefined") {
+ expect(typeof mod.default).toBe("function");
+ }
+ }
+ }
+ }
+ });
+}
+
+// TODO: when node:vm is implemented, delete this test.
+test("node:vm", () => {
+ const { Script } = import.meta.require("node:vm");
+ try {
+ // **This line should appear in the stack trace**
+ // That way it shows the "real" line causing the issue
+ // Instead of several layers of wrapping
+ new Script("1 + 1");
+ throw new Error("unreacahble");
+ } catch (e) {
+ const msg = Bun.inspect(e);
+ expect(msg).not.toContain("node:vm:");
+ expect(msg).toContain("**This line should appear in the stack trace**");
+ }
+});