aboutsummaryrefslogtreecommitdiff
path: root/test/js
diff options
context:
space:
mode:
Diffstat (limited to 'test/js')
-rw-r--r--test/js/node/fs/node-fetch.test.js33
-rw-r--r--test/js/node/http/node-fetch-cjs.test.js (renamed from test/js/node/fs/node-fetch.cjs.test.js)0
-rw-r--r--test/js/node/http/node-fetch.test.js68
-rw-r--r--test/js/node/stream/node-stream.test.js35
4 files changed, 103 insertions, 33 deletions
diff --git a/test/js/node/fs/node-fetch.test.js b/test/js/node/fs/node-fetch.test.js
deleted file mode 100644
index c174917a7..000000000
--- a/test/js/node/fs/node-fetch.test.js
+++ /dev/null
@@ -1,33 +0,0 @@
-import fetch2, { fetch, Response, Request, Headers } from "node-fetch";
-import * as iso from "isomorphic-fetch";
-import * as vercelFetch from "@vercel/fetch";
-
-import { test, expect } from "bun:test";
-
-test("node-fetch", () => {
- expect(Response).toBe(globalThis.Response);
- expect(Request).toBe(globalThis.Request);
- expect(Headers).toBe(globalThis.Headers);
-});
-
-for (const [impl, name] of [
- [fetch, "node-fetch.fetch"],
- [fetch2, "node-fetch.default"],
- [fetch2.default, "node-fetch.default.default"],
- [iso.fetch, "isomorphic-fetch.fetch"],
- [iso.default.fetch, "isomorphic-fetch.default.fetch"],
- [iso.default, "isomorphic-fetch.default"],
- [vercelFetch.default(fetch), "@vercel/fetch.default"],
-]) {
- test(name + " fetches", async () => {
- const server = Bun.serve({
- port: 0,
- fetch(req, server) {
- server.stop();
- return new Response();
- },
- });
- expect(await impl("http://" + server.hostname + ":" + server.port)).toBeInstanceOf(Response);
- server.stop(true);
- });
-}
diff --git a/test/js/node/fs/node-fetch.cjs.test.js b/test/js/node/http/node-fetch-cjs.test.js
index 9a6a4b407..9a6a4b407 100644
--- a/test/js/node/fs/node-fetch.cjs.test.js
+++ b/test/js/node/http/node-fetch-cjs.test.js
diff --git a/test/js/node/http/node-fetch.test.js b/test/js/node/http/node-fetch.test.js
new file mode 100644
index 000000000..e1ae19feb
--- /dev/null
+++ b/test/js/node/http/node-fetch.test.js
@@ -0,0 +1,68 @@
+import fetch2, { fetch, Response, Request, Headers } from "node-fetch";
+import * as iso from "isomorphic-fetch";
+import * as vercelFetch from "@vercel/fetch";
+import * as stream from "stream";
+
+import { test, expect } from "bun:test";
+
+test("node-fetch", () => {
+ expect(Response.prototype).toBeInstanceOf(globalThis.Response);
+ expect(Request).toBe(globalThis.Request);
+ expect(Headers).toBe(globalThis.Headers);
+ expect(fetch2.default).toBe(fetch2);
+ expect(fetch2.Response).toBe(Response);
+});
+
+for (const [impl, name] of [
+ [fetch, "node-fetch.fetch"],
+ [fetch2, "node-fetch.default"],
+ [fetch2.default, "node-fetch.default.default"],
+ [iso.fetch, "isomorphic-fetch.fetch"],
+ [iso.default.fetch, "isomorphic-fetch.default.fetch"],
+ [iso.default, "isomorphic-fetch.default"],
+ [vercelFetch.default(fetch), "@vercel/fetch.default"],
+]) {
+ test(name + " fetches", async () => {
+ const server = Bun.serve({
+ port: 0,
+ fetch(req, server) {
+ server.stop();
+ return new Response("it works");
+ },
+ });
+ expect(await impl("http://" + server.hostname + ":" + server.port)).toBeInstanceOf(globalThis.Response);
+ server.stop(true);
+ });
+}
+
+test("node-fetch uses node streams instead of web streams", async () => {
+ const server = Bun.serve({
+ port: 0,
+ async fetch(req, server) {
+ const body = await req.text();
+ expect(body).toBe("the input text");
+ return new Response("hello world");
+ },
+ });
+
+ try {
+ const result = await fetch2("http://" + server.hostname + ":" + server.port, {
+ body: new stream.Readable({
+ read() {
+ this.push("the input text");
+ this.push(null);
+ },
+ }),
+ method: "POST",
+ });
+ expect(result.body).toBeInstanceOf(stream.Readable);
+ expect(result.body === result.body).toBe(true); // cached lazy getter
+ const chunks = [];
+ for await (const chunk of result.body) {
+ chunks.push(chunk);
+ }
+ expect(Buffer.concat(chunks).toString()).toBe("hello world");
+ } finally {
+ server.stop(true);
+ }
+});
diff --git a/test/js/node/stream/node-stream.test.js b/test/js/node/stream/node-stream.test.js
index 44f3f4ff8..bc6a4fcfb 100644
--- a/test/js/node/stream/node-stream.test.js
+++ b/test/js/node/stream/node-stream.test.js
@@ -314,3 +314,38 @@ it("TTY streams", () => {
expect(stderr.toString()).toContain("0 fail");
expect(exitCode).toBe(0);
});
+
+it("Readable.toWeb", async () => {
+ const readable = new Readable({
+ read() {
+ this.push("Hello ");
+ this.push("World!\n");
+ this.push(null);
+ },
+ });
+
+ const webReadable = Readable.toWeb(readable);
+ expect(webReadable).toBeInstanceOf(ReadableStream);
+
+ const result = await new Response(webReadable).text();
+ expect(result).toBe("Hello World!\n");
+});
+
+it("Readable.fromWeb", async () => {
+ const readable = Readable.fromWeb(
+ new ReadableStream({
+ start(controller) {
+ controller.enqueue("Hello ");
+ controller.enqueue("World!\n");
+ controller.close();
+ },
+ }),
+ );
+ expect(readable).toBeInstanceOf(Readable);
+
+ const chunks = [];
+ for await (const chunk of readable) {
+ chunks.push(chunk);
+ }
+ expect(Buffer.concat(chunks).toString()).toBe("Hello World!\n");
+});