aboutsummaryrefslogtreecommitdiff
path: root/test/bun.js
diff options
context:
space:
mode:
authorGravatar Jarred Sumner <709451+Jarred-Sumner@users.noreply.github.com> 2022-07-01 03:24:58 -0700
committerGravatar Jarred Sumner <709451+Jarred-Sumner@users.noreply.github.com> 2022-07-01 03:24:58 -0700
commit589993192a205a6abd789b73ece6e0bc2421ac93 (patch)
tree1f17d74dc80704029db7e54ccd919bef7094fa28 /test/bun.js
parent4812fb8faf7e89dd8cb585f687bd887dc552efe2 (diff)
downloadbun-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.ts82
-rw-r--r--test/bun.js/escapeHTML.test.js9
-rw-r--r--test/bun.js/react-dom.test.tsx71
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("😊&lt;".repeat(100));
expect(escapeHTML("<😊>".repeat(100))).toBe("&lt;😊&gt;".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;