mirror of
https://github.com/RGBCube/serenity
synced 2025-07-08 20:17:34 +00:00
LibJS: Combine UTF-16 surrogate pairs when concatenating strings
In the following use case: "\ud834" + "\udf06" We were previously combining these as two individual code points. When concatenating strings, we must take care to combine the high surrogate from the left-hand side with the low surrogate from the right-hand side.
This commit is contained in:
parent
ab02e3981e
commit
a57e2f9a76
2 changed files with 78 additions and 21 deletions
30
Userland/Libraries/LibJS/Tests/string-concatenation.js
Normal file
30
Userland/Libraries/LibJS/Tests/string-concatenation.js
Normal file
|
@ -0,0 +1,30 @@
|
|||
test("adding strings", () => {
|
||||
expect("" + "").toBe("");
|
||||
expect("ab" + "").toBe("ab");
|
||||
expect("" + "cd").toBe("cd");
|
||||
expect("ab" + "cd").toBe("abcd");
|
||||
});
|
||||
|
||||
test("adding strings with non-strings", () => {
|
||||
expect("a" + 1).toBe("a1");
|
||||
expect(1 + "a").toBe("1a");
|
||||
expect("a" + {}).toBe("a[object Object]");
|
||||
expect({} + "a").toBeNaN();
|
||||
expect("a" + []).toBe("a");
|
||||
expect([] + "a").toBe("a");
|
||||
expect("a" + NaN).toBe("aNaN");
|
||||
expect(NaN + "a").toBe("NaNa");
|
||||
expect(Array(16).join([[][[]] + []][+[]][++[+[]][+[]]] - 1) + " Batman!").toBe(
|
||||
"NaNNaNNaNNaNNaNNaNNaNNaNNaNNaNNaNNaNNaNNaNNaN Batman!"
|
||||
);
|
||||
});
|
||||
|
||||
test("adding strings with dangling surrogates", () => {
|
||||
expect("\ud834" + "").toBe("\ud834");
|
||||
expect("" + "\udf06").toBe("\udf06");
|
||||
expect("\ud834" + "\udf06").toBe("𝌆");
|
||||
expect("\ud834" + "\ud834").toBe("\ud834\ud834");
|
||||
expect("\udf06" + "\udf06").toBe("\udf06\udf06");
|
||||
expect("\ud834a" + "\udf06").toBe("\ud834a\udf06");
|
||||
expect("\ud834" + "a\udf06").toBe("\ud834a\udf06");
|
||||
});
|
Loading…
Add table
Add a link
Reference in a new issue