diff options
Diffstat (limited to 'integration/snippets')
-rw-r--r-- | integration/snippets/latin1-chars-in-regexp.js | 47 | ||||
-rw-r--r-- | integration/snippets/public/index.html | 21 | ||||
-rw-r--r-- | integration/snippets/string-escapes.js | 87 |
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); } |