aboutsummaryrefslogtreecommitdiff
path: root/integration/snippets
diff options
context:
space:
mode:
Diffstat (limited to 'integration/snippets')
-rw-r--r--integration/snippets/latin1-chars-in-regexp.js47
-rw-r--r--integration/snippets/public/index.html21
-rw-r--r--integration/snippets/string-escapes.js87
3 files changed, 142 insertions, 13 deletions
diff --git a/integration/snippets/latin1-chars-in-regexp.js b/integration/snippets/latin1-chars-in-regexp.js
index 34a6c4a2a..9695b9362 100644
--- a/integration/snippets/latin1-chars-in-regexp.js
+++ b/integration/snippets/latin1-chars-in-regexp.js
@@ -19,26 +19,51 @@ var re_btou = new RegExp(
"g"
);
-const real = [
+const encoder = new TextEncoder();
+const realLines = [
"[\xC0-\xDF][\x80-\xBF]",
"[\xE0-\xEF][\x80-\xBF]{2}",
"[\xF0-\xF7][\x80-\xBF]{3}",
-]
- .flatMap((a) => a.split(""))
- .map((a) => a.codePointAt(0));
+];
+const real = realLines.map((input) => Array.from(encoder.encode(input)));
const expected = [
- 91, 192, 45, 223, 93, 91, 128, 45, 191, 93, 91, 224, 45, 239, 93, 91, 128, 45,
- 191, 93, 123, 50, 125, 91, 240, 45, 247, 93, 91, 128, 45, 191, 93, 123, 51,
- 125,
+ [91, 195, 128, 45, 195, 159, 93, 91, 194, 128, 45, 194, 191, 93],
+ [
+ 91, 195, 160, 45, 195, 175, 93, 91, 194, 128, 45, 194, 191, 93, 123, 50,
+ 125,
+ ],
+ [
+ 91, 195, 176, 45, 195, 183, 93, 91, 194, 128, 45, 194, 191, 93, 123, 51,
+ 125,
+ ],
];
+const newlinePreserved = `\n`;
+
export function test() {
- if (!real.every((point, i) => point === expected[i])) {
+ if (
+ !real.every((point, i) => point.every((val, j) => val === expected[i][j]))
+ ) {
+ throw new Error(
+ `test failed
+${JSON.stringify({ expected, real }, null, 2)}`
+ );
+ }
+
+ if (newlinePreserved.length !== 1 || newlinePreserved.charCodeAt(0) !== 10) {
+ throw new Error("Newline was not preserved");
+ }
+
+ const decoder = new TextDecoder("utf8");
+ if (
+ !realLines.every(
+ (line, i) => decoder.decode(Uint8Array.from(expected[i])) === line
+ )
+ ) {
throw new Error(
- `test failed.\n\nExpected:\n ${expected.join(
- " "
- )}\Received:\n ${real.join(" ")}`
+ `test failed. Lines did not match.
+${JSON.stringify({ expected, real }, null, 2)}`
);
}
diff --git a/integration/snippets/public/index.html b/integration/snippets/public/index.html
index 2c3804a04..34e18a07a 100644
--- a/integration/snippets/public/index.html
+++ b/integration/snippets/public/index.html
@@ -10,7 +10,6 @@
globalThis.console.assert = (condition, ...content) => {
if (!condition) {
throw new Error(content.join(" "));
-
}
};
globalThis.getModuleScriptSrc = async (name) => {
@@ -50,10 +49,28 @@
);
}
- return await testFunction();
+ if (globalThis.BUN_DEBUG_MODE) {
+ try {
+ return await testFunction();
+ } catch (exception) {
+ console.error(exception);
+ debugger;
+ throw exception;
+ }
+ } else {
+ return await testFunction();
+ }
};
if (globalThis.location.pathname.endsWith("-test")) {
+ const script = document.createElement("script");
+ script.src = globalThis.location.pathname.substring(
+ 0,
+ location.pathname.length - "-test".length
+ );
+ script.type = "module";
+ document.body.appendChild(script);
+
globalThis.testDone = (path) => alert(`test ${path} success`);
globalThis.testFail = (path) => alert(`!test ${path} fail`);
runTest(
diff --git a/integration/snippets/string-escapes.js b/integration/snippets/string-escapes.js
index fd821f892..8d4eef725 100644
--- a/integration/snippets/string-escapes.js
+++ b/integration/snippets/string-escapes.js
@@ -1,3 +1,5 @@
+// To update this, copy paste the following into the console of the browser
+// ------------------------------------------------------------
var tab = "\t";
var シ = "wow";
var f = "";
@@ -16,11 +18,94 @@ var obj = {
"㋡": "㋡",
"☺": "☺",
シ: "シ",
+ "👋": "👋",
f: f,
"☹": "☹",
"☻": "☻",
children: 123,
};
+
+const encoder = new TextEncoder();
+const encodedObj = encoder.encode(JSON.stringify(obj));
+// ------------------------------------------------------------
+const correctEncodedObj = [
+ 123, 34, 92, 114, 92, 110, 34, 58, 34, 92, 114, 92, 110, 34, 44, 34, 92, 110,
+ 34, 58, 34, 92, 110, 34, 44, 34, 92, 116, 34, 58, 34, 92, 116, 34, 44, 34, 92,
+ 102, 34, 58, 34, 92, 102, 34, 44, 34, 92, 117, 48, 48, 48, 98, 34, 58, 34, 92,
+ 117, 48, 48, 48, 98, 34, 44, 34, 226, 128, 168, 34, 58, 34, 226, 128, 168, 34,
+ 44, 34, 226, 128, 169, 34, 58, 34, 226, 128, 169, 34, 44, 34, 240, 159, 152,
+ 138, 34, 58, 34, 240, 159, 152, 138, 34, 44, 34, 240, 159, 152, 131, 34, 58,
+ 34, 240, 159, 152, 131, 34, 44, 34, 240, 159, 149, 181, 240, 159, 143, 189,
+ 226, 128, 141, 226, 153, 130, 239, 184, 143, 34, 58, 34, 240, 159, 149, 181,
+ 240, 159, 143, 189, 226, 128, 141, 226, 153, 130, 239, 184, 143, 34, 44, 34,
+ 227, 139, 161, 34, 58, 34, 227, 139, 161, 34, 44, 34, 226, 152, 186, 34, 58,
+ 34, 226, 152, 186, 34, 44, 34, 227, 130, 183, 34, 58, 34, 227, 130, 183, 34,
+ 44, 34, 240, 159, 145, 139, 34, 58, 34, 240, 159, 145, 139, 34, 44, 34, 102,
+ 34, 58, 34, 226, 130, 135, 34, 44, 34, 226, 152, 185, 34, 58, 34, 226, 152,
+ 185, 34, 44, 34, 226, 152, 187, 34, 58, 34, 226, 152, 187, 34, 44, 34, 99,
+ 104, 105, 108, 100, 114, 101, 110, 34, 58, 49, 50, 51, 125,
+];
+
+const jsxVariants = (
+ <>
+ "\r\n": "\r\n", "\n": "\n", "\t": "\t", "\f": "\f", "\v": "\v", "\u2028":
+ "\u2028", "\u2029": "\u2029", "😊": "😊", "😃": "😃", "🕵🏽‍♂️": "🕵🏽‍♂️", "㋡":
+ "㋡", "☺": "☺", シ: "シ", "👋": "👋", f: f, "☹": "☹", "☻": "☻", children:
+ 123,
+ <div data="\r\n" />
+ <div data="\n" />
+ <div data="\t" />
+ <div data="\f" />
+ <div data="\v" />
+ <div data="\u2028" />
+ <div data="\u2029" />
+ <div data="😊" />
+ <div data="😃" />
+ <div data="🕵🏽‍♂️" />
+ <div data="㋡" />
+ <div data="☺" />
+ <div data="シ" />
+ <div data="👋" />
+ <div data="☹" />
+ <div data="☻" />
+ <div data="123" />
+ <div key="\r\n" />
+ <div>\r\n</div>
+ <div key="\n" />
+ <div>\n</div>
+ <div key="\t" />
+ <div>\t</div>
+ <div key="\f" />
+ <div>\f</div>
+ <div key="\v" />
+ <div>\v</div>
+ <div key="\u2028" />
+ <div>\u2028</div>
+ <div key="\u2029" />
+ <div>\u2029</div>
+ <div key="😊" />
+ <div>😊</div>
+ <div key="😃" />
+ <div>😃</div>
+ <div key="🕵🏽‍♂️" />
+ <div>🕵🏽‍♂️</div>
+ <div key="㋡" />
+ <div>㋡</div>
+ <div key="☺" />
+ <div>☺</div>
+ <div key="シ" />
+ <div>シ</div>
+ <div key="👋" />
+ <div>👋</div>
+ <div key="☹" />
+ <div>☹</div>
+ <div key="☻" />
+ <div>☻</div>
+ <div key="123" />
+ <div>123</div>
+ </>
+);
+
const foo = () => {};
const Bar = foo("a", {
children: 123,
@@ -35,5 +120,7 @@ export function test() {
console.assert(carriage === "\r\n");
console.assert(newline === "\n");
console.assert(tab === "\t");
+ console.assert(correctEncodedObj.length === encodedObj.length);
+ console.assert(correctEncodedObj.every((v, i) => v === encodedObj[i]));
return testDone(import.meta.url);
}