ladybird/Tests/LibJS/Runtime/3rdparty/webkit/unicodeCaseInsensitive.js
aplefull 105098131b Tests+Meta: Reimport WebKit regexp tests
This commit updates Meta/import-webkit-regexp-tests.py and re-imports
WebKit tests.

Removed pcre-test-1 from SKIP_TESTS because we pass it.

Removed everything except slow.js from XFAIL_TESTS. We pass everything
except slow.js, which still hits the step limit.

Moved overflow.js to SKIP_FILES because it tests WebKit's behaviour of
rejecting regexps with huge quantifiers. Ladybird, Chrome, and Firefox
just clamp them.
2026-05-26 10:00:22 +02:00

133 lines
4.6 KiB
JavaScript
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

test("unicodeCaseInsensitive", () => {
// WebKit assertion compatibility shim for Ladybird's test-js harness
function description(msg) {
// No-op, just used for test documentation in WebKit.
}
function debug(msg) {
// No-op, just used for debugging in WebKit tests.
}
function shouldBe(actual_code, expected_code) {
let actual = eval(actual_code);
let expected = eval(expected_code);
if (typeof actual === "string" && typeof expected === "string") {
expect(actual).toBe(expected);
} else if (Array.isArray(actual) && Array.isArray(expected)) {
expect(actual).toEqual(expected);
} else if (actual !== null && typeof actual === "object" && expected !== null && typeof expected === "object") {
expect(actual).toEqual(expected);
} else {
expect(actual).toBe(expected);
}
}
function shouldBeTrue(code) {
expect(eval(code)).toBeTrue();
}
function shouldBeFalse(code) {
expect(eval(code)).toBeFalse();
}
function shouldBeNull(code) {
expect(eval(code)).toBeNull();
}
function shouldBeUndefined(code) {
expect(eval(code)).toBeUndefined();
}
function shouldThrow(code, expected_error) {
expect(() => eval(code)).toThrow();
}
function shouldNotThrow(code) {
eval(code);
}
description("https://bugs.webkit.org/show_bug.cgi?id=82063");
shouldBeTrue('/ΣΤΙΓΜΑΣ/i.test("στιγμας")');
shouldBeTrue('/ΔΣΔ/i.test("δςδ")');
shouldBeTrue('/ς/i.test("σ")');
shouldBeTrue('/σ/i.test("ς")');
// Simple case, has no canonical equivalents
shouldBeTrue('/\u1f16/i.test("\u1f16")');
// Test the sets of USC2 code points that have more than one canonically equivalent value.
function ucs2CodePoint(x) {
var s = x.toString(16);
while (s.length < 4) s = 0 + s;
return eval('"\\u' + s + '"');
}
function testSet(set) {
for (i in set) {
for (j in set) {
shouldBeTrue("/" + ucs2CodePoint(set[i]) + '/i.test("' + ucs2CodePoint(set[j]) + '")');
shouldBeTrue(
"/[" +
ucs2CodePoint(set[i] - 1) +
"-" +
ucs2CodePoint(set[i] + 1) +
']/i.test("' +
ucs2CodePoint(set[j]) +
'")'
);
}
}
}
testSet([0x01c4, 0x01c5, 0x01c6]);
testSet([0x01c7, 0x01c8, 0x01c9]);
testSet([0x01ca, 0x01cb, 0x01cc]);
testSet([0x01f1, 0x01f2, 0x01f3]);
testSet([0x0392, 0x03b2, 0x03d0]);
testSet([0x0395, 0x03b5, 0x03f5]);
testSet([0x0398, 0x03b8, 0x03d1]);
testSet([0x0345, 0x0399, 0x03b9, 0x1fbe]);
testSet([0x039a, 0x03ba, 0x03f0]);
testSet([0x00b5, 0x039c, 0x03bc]);
testSet([0x03a0, 0x03c0, 0x03d6]);
testSet([0x03a1, 0x03c1, 0x03f1]);
testSet([0x03a3, 0x03c2, 0x03c3]);
testSet([0x03a6, 0x03c6, 0x03d5]);
testSet([0x1e60, 0x1e61, 0x1e9b]);
// Test a couple of lo/hi pairs
shouldBeTrue('/\u03cf/i.test("\u03cf")');
shouldBeTrue('/\u03d7/i.test("\u03cf")');
shouldBeTrue('/\u03cf/i.test("\u03d7")');
shouldBeTrue('/\u03d7/i.test("\u03d7")');
shouldBeTrue('/\u1f11/i.test("\u1f11")');
shouldBeTrue('/\u1f19/i.test("\u1f11")');
shouldBeTrue('/\u1f11/i.test("\u1f19")');
shouldBeTrue('/\u1f19/i.test("\u1f19")');
// Test an aligned alternating capitalization pair.
shouldBeFalse('/\u0489/i.test("\u048a")');
shouldBeTrue('/\u048a/i.test("\u048a")');
shouldBeTrue('/\u048b/i.test("\u048a")');
shouldBeFalse('/\u048c/i.test("\u048a")');
shouldBeFalse('/\u0489/i.test("\u048b")');
shouldBeTrue('/\u048a/i.test("\u048b")');
shouldBeTrue('/\u048b/i.test("\u048b")');
shouldBeFalse('/\u048c/i.test("\u048b")');
shouldBeTrue('/[\u0489-\u048a]/i.test("\u048b")');
shouldBeTrue('/[\u048b-\u048c]/i.test("\u048a")');
// Test an unaligned alternating capitalization pair.
shouldBeFalse('/\u04c4/i.test("\u04c5")');
shouldBeTrue('/\u04c5/i.test("\u04c5")');
shouldBeTrue('/\u04c6/i.test("\u04c5")');
shouldBeFalse('/\u04c7/i.test("\u04c5")');
shouldBeFalse('/\u04c4/i.test("\u04c6")');
shouldBeTrue('/\u04c5/i.test("\u04c6")');
shouldBeTrue('/\u04c6/i.test("\u04c6")');
shouldBeFalse('/\u04c7/i.test("\u04c6")');
shouldBeTrue('/[\u04c4-\u04c5]/i.test("\u04c6")');
shouldBeTrue('/[\u04c6-\u04c7]/i.test("\u04c5")');
var successfullyParsed = true;
});