diff options
Diffstat (limited to 'test/js')
-rw-r--r-- | test/js/node/fs/node-fetch.test.js | 33 | ||||
-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.js | 68 | ||||
-rw-r--r-- | test/js/node/stream/node-stream.test.js | 35 |
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"); +}); |