aboutsummaryrefslogtreecommitdiff
path: root/test/snippets/latin1-chars-in-regexp.js
diff options
context:
space:
mode:
Diffstat (limited to 'test/snippets/latin1-chars-in-regexp.js')
-rw-r--r--test/snippets/latin1-chars-in-regexp.js70
1 files changed, 70 insertions, 0 deletions
diff --git a/test/snippets/latin1-chars-in-regexp.js b/test/snippets/latin1-chars-in-regexp.js
new file mode 100644
index 000000000..e4d613f5e
--- /dev/null
+++ b/test/snippets/latin1-chars-in-regexp.js
@@ -0,0 +1,70 @@
+// original code:
+// var re_btou = new RegExp(
+// [
+// "[\xC0-\xDF][\x80-\xBF]",
+// "[\xE0-\xEF][\x80-\xBF]{2}",
+// "[\xF0-\xF7][\x80-\xBF]{3}",
+// ].join("|"),
+// "g"
+// );
+
+export var re_utob = /[\uD800-\uDBFF][\uDC00-\uDFFFF]|[^\x00-\x7F]/g;
+export var re_btou = new RegExp(
+ [
+ "[\xC0-\xDF][\x80-\xBF]",
+ "[\xE0-\xEF][\x80-\xBF]{2}",
+ "[\xF0-\xF7][\x80-\xBF]{3}",
+ ].join("|"),
+ "g"
+);
+
+const encoder = new TextEncoder();
+const realLines = [
+ "[\xC0-\xDF][\x80-\xBF]",
+ "[\xE0-\xEF][\x80-\xBF]{2}",
+ "[\xF0-\xF7][\x80-\xBF]{3}",
+];
+const real = realLines.map((input) => Array.from(encoder.encode(input)));
+
+const expected = [
+ [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.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. Lines did not match.
+${JSON.stringify({ expected, real }, null, 2)}`
+ );
+ }
+
+ testDone(import.meta.url);
+}