diff options
author | 2022-07-01 03:24:58 -0700 | |
---|---|---|
committer | 2022-07-01 03:24:58 -0700 | |
commit | 589993192a205a6abd789b73ece6e0bc2421ac93 (patch) | |
tree | 1f17d74dc80704029db7e54ccd919bef7094fa28 /test/bun.js | |
parent | 4812fb8faf7e89dd8cb585f687bd887dc552efe2 (diff) | |
download | bun-589993192a205a6abd789b73ece6e0bc2421ac93.tar.gz bun-589993192a205a6abd789b73ece6e0bc2421ac93.tar.zst bun-589993192a205a6abd789b73ece6e0bc2421ac93.zip |
Improve test coverage for streams
Diffstat (limited to 'test/bun.js')
-rw-r--r-- | test/bun.js/arraybuffersink.test.ts | 82 | ||||
-rw-r--r-- | test/bun.js/escapeHTML.test.js | 9 | ||||
-rw-r--r-- | test/bun.js/react-dom.test.tsx | 71 |
3 files changed, 128 insertions, 34 deletions
diff --git a/test/bun.js/arraybuffersink.test.ts b/test/bun.js/arraybuffersink.test.ts new file mode 100644 index 000000000..a658556a5 --- /dev/null +++ b/test/bun.js/arraybuffersink.test.ts @@ -0,0 +1,82 @@ +import { ArrayBufferSink } from "bun"; +import { describe, expect, it } from "bun:test"; + +describe("ArrayBufferSink", () => { + const fixtures = [ + [ + ["abcdefghijklmnopqrstuvwxyz"], + new TextEncoder().encode("abcdefghijklmnopqrstuvwxyz"), + "abcdefghijklmnopqrstuvwxyz", + ], + [ + ["abcdefghijklmnopqrstuvwxyz", "ABCDEFGHIJKLMNOPQRSTUVWXYZ"], + new TextEncoder().encode( + "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ" + ), + "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ", + ], + [ + ["π Get Emoji β All Emojis to βοΈ Copy and π Paste π"], + new TextEncoder().encode( + "π Get Emoji β All Emojis to βοΈ Copy and π Paste π" + ), + "π Get Emoji β All Emojis to βοΈ Copy and π Paste π", + ], + [ + [ + "abcdefghijklmnopqrstuvwxyz", + "π Get Emoji β All Emojis to βοΈ Copy and π Paste π", + ], + new TextEncoder().encode( + "abcdefghijklmnopqrstuvwxyz" + + "π Get Emoji β All Emojis to βοΈ Copy and π Paste π" + ), + "abcdefghijklmnopqrstuvwxyz" + + "π Get Emoji β All Emojis to βοΈ Copy and π Paste π", + ], + [ + [ + "abcdefghijklmnopqrstuvwxyz", + "π", + " Get Emoji β All Emojis", + " to βοΈ Copy and π Paste π", + ], + new TextEncoder().encode( + "abcdefghijklmnopqrstuvwxyz" + + "π Get Emoji β All Emojis to βοΈ Copy and π Paste π" + ), + "(rope) " + + "abcdefghijklmnopqrstuvwxyz" + + "π Get Emoji β All Emojis to βοΈ Copy and π Paste π", + ], + [ + [ + new TextEncoder().encode("abcdefghijklmnopqrstuvwxyz"), + "π", + " Get Emoji β All Emojis", + " to βοΈ Copy and π Paste π", + ], + new TextEncoder().encode( + "abcdefghijklmnopqrstuvwxyz" + + "π Get Emoji β All Emojis to βοΈ Copy and π Paste π" + ), + "(array) " + + "abcdefghijklmnopqrstuvwxyz" + + "π Get Emoji β All Emojis to βοΈ Copy and π Paste π", + ], + ]; + + for (const [input, expected, label] of fixtures) { + it(`${JSON.stringify(label)}`, () => { + const sink = new ArrayBufferSink(); + for (let i = 0; i < input.length; i++) { + sink.write(input[i]); + } + const output = new Uint8Array(sink.end()); + for (let i = 0; i < expected.length; i++) { + expect(output[i]).toBe(expected[i]); + } + expect(output.byteLength).toBe(expected.byteLength); + }); + } +}); diff --git a/test/bun.js/escapeHTML.test.js b/test/bun.js/escapeHTML.test.js index ecfcc5e7c..5ea202a75 100644 --- a/test/bun.js/escapeHTML.test.js +++ b/test/bun.js/escapeHTML.test.js @@ -101,5 +101,14 @@ describe("escapeHTML", () => { expect(escapeHTML("π".repeat(100))).toBe("π".repeat(100)); expect(escapeHTML("π<".repeat(100))).toBe("π<".repeat(100)); expect(escapeHTML("<π>".repeat(100))).toBe("<π>".repeat(100)); + expect(escapeHTML("π")).toBe("π"); + expect(escapeHTML("ππ")).toBe("ππ"); + expect(escapeHTML("πlo")).toBe("πlo"); + expect(escapeHTML("loπ")).toBe("loπ"); + + expect(escapeHTML(" ".repeat(32) + "π")).toBe(" ".repeat(32) + "π"); + expect(escapeHTML(" ".repeat(32) + "ππ")).toBe(" ".repeat(32) + "ππ"); + expect(escapeHTML(" ".repeat(32) + "πlo")).toBe(" ".repeat(32) + "πlo"); + expect(escapeHTML(" ".repeat(32) + "loπ")).toBe(" ".repeat(32) + "loπ"); }); }); diff --git a/test/bun.js/react-dom.test.tsx b/test/bun.js/react-dom.test.tsx index d1fa66453..2092fbe1a 100644 --- a/test/bun.js/react-dom.test.tsx +++ b/test/bun.js/react-dom.test.tsx @@ -4,6 +4,7 @@ import { readableStreamToArrayBuffer, readableStreamToBlob, readableStreamToText, + serve, } from "bun"; import { describe, expect, it } from "bun:test"; import { renderToReadableStream as renderToReadableStreamBrowser } from "react-dom/server.browser"; @@ -21,7 +22,7 @@ var port = 8908; describe("ReactDOM", () => { for (let renderToReadableStream of [ renderToReadableStreamBun, - // renderToReadableStreamBrowser, + renderToReadableStreamBrowser, ]) { for (let [inputString, reactElement] of [ // Needs at least six variations @@ -49,6 +50,10 @@ describe("ReactDOM", () => { <span>πHello World!</span> </>, ], + ["π", <>π</>], + ["lπl", <>lπl</>], + ["loπ", <>loπ</>], + ["πlo", <>πlo</>], [ "π<span>Hello World!</span>", <> @@ -90,6 +95,28 @@ describe("ReactDOM", () => { ], ]) describe(`${renderToReadableStream.name}(${inputString})`, () => { + it.only("http server, 1 request", async () => { + var server; + try { + server = serve({ + port: port++, + async fetch(req) { + return new Response(await renderToReadableStream(reactElement)); + }, + }); + const resp = await fetch("http://localhost:" + server.port + "/"); + expect((await resp.text()).replaceAll("<!-- -->", "")).toBe( + inputString + ); + gc(); + } catch (e) { + throw e; + } finally { + server?.stop(); + gc(); + } + }); + it("Response.text()", async () => { const stream = await renderToReadableStream(reactElement); gc(); @@ -98,7 +125,7 @@ describe("ReactDOM", () => { try { const text = await response.text(); gc(); - expect(text).toBe(inputString); + expect(text.replaceAll("<!-- -->", "")).toBe(inputString); gc(); } catch (e) { console.log(e.stack); @@ -113,7 +140,7 @@ describe("ReactDOM", () => { gc(); const text = new TextDecoder().decode(await response.arrayBuffer()); gc(); - expect(text).toBe(inputString); + expect(text.replaceAll("<!-- -->", "")).toBe(inputString); gc(); }); @@ -124,7 +151,7 @@ describe("ReactDOM", () => { gc(); const text = await (await response.blob()).text(); gc(); - expect(text).toBe(inputString); + expect(text.replaceAll("<!-- -->", "")).toBe(inputString); gc(); }); @@ -133,7 +160,7 @@ describe("ReactDOM", () => { gc(); const text = await readableStreamToText(stream); gc(); - expect(text).toBe(inputString); + expect(text.replaceAll("<!-- -->", "")).toBe(inputString); gc(); }); @@ -144,7 +171,7 @@ describe("ReactDOM", () => { const blob = await readableStreamToBlob(stream); const text = await blob.text(); gc(); - expect(text).toBe(inputString); + expect(text.replaceAll("<!-- -->", "")).toBe(inputString); gc(); } catch (e) { console.error(e.message); @@ -162,7 +189,7 @@ describe("ReactDOM", () => { ? array.join("") : new TextDecoder().decode(concatArrayBuffers(array)); gc(); - expect(text).toBe(inputString); + expect(text.replaceAll("<!-- -->", "")).toBe(inputString); gc(); }); @@ -172,41 +199,17 @@ describe("ReactDOM", () => { const arrayBuffer = await readableStreamToArrayBuffer(stream); const text = new TextDecoder().decode(arrayBuffer); gc(); - expect(text).toBe(inputString); + expect(text.replaceAll("<!-- -->", "")).toBe(inputString); gc(); }); - // it("http server, 1 request", async () => { - // var server; - // try { - // server = serve({ - // port: port++, - // async fetch(req) { - // return new Response( - // await renderToReadableStream(reactElement) - // ); - // }, - // }); - // const resp = await fetch("http://localhost:" + server.port + "/"); - // expect(await resp.text()).toBe(inputString); - // gc(); - // } catch (e) { - // throw e; - // } finally { - // server.stop(); - // gc(); - // } - // }); - // it("http server, 100 requests", async () => { // var server; // try { // server = serve({ // port: port++, // async fetch(req) { - // return new Response( - // await renderToReadableStream(reactElement) - // ); + // return new Response(await renderToReadableStream(reactElement)); // }, // }); // var total = 0; @@ -219,7 +222,7 @@ describe("ReactDOM", () => { // gc(); // const result = await response.text(); // try { - // expect(result).toBe(inputString); + // expect(result.replaceAll("<!-- -->", "")).toBe(inputString); // } catch (e) { // e.message += "\nAttempt: " + attempt; // throw e; |