mirror of
https://github.com/LadybirdBrowser/ladybird.git
synced 2025-06-21 09:41:53 +00:00
79 lines
2.7 KiB
JavaScript
79 lines
2.7 KiB
JavaScript
describe("errors", () => {
|
|
test("invalid pattern", () => {
|
|
expect(() => {
|
|
RegExp("[");
|
|
}).toThrowWithMessage(
|
|
SyntaxError,
|
|
"RegExp compile error: Error during parsing of regular expression:"
|
|
);
|
|
});
|
|
|
|
test("invalid flag", () => {
|
|
expect(() => {
|
|
RegExp("", "x");
|
|
}).toThrowWithMessage(SyntaxError, "Invalid RegExp flag 'x'");
|
|
});
|
|
|
|
test("repeated flag", () => {
|
|
expect(() => {
|
|
RegExp("", "gg");
|
|
}).toThrowWithMessage(SyntaxError, "Repeated RegExp flag 'g'");
|
|
});
|
|
});
|
|
|
|
test("basic functionality", () => {
|
|
expect(RegExp().toString()).toBe("/(?:)/");
|
|
expect(RegExp(undefined).toString()).toBe("/(?:)/");
|
|
expect(RegExp("foo").toString()).toBe("/foo/");
|
|
expect(RegExp("foo", undefined).toString()).toBe("/foo/");
|
|
expect(RegExp("foo", "g").toString()).toBe("/foo/g");
|
|
expect(RegExp(undefined, "g").toString()).toBe("/(?:)/g");
|
|
});
|
|
|
|
test("regexp object as pattern parameter", () => {
|
|
expect(RegExp(/foo/).toString()).toBe("/foo/");
|
|
expect(RegExp(/foo/g).toString()).toBe("/foo/g");
|
|
expect(RegExp(/foo/g, "").toString()).toBe("/foo/");
|
|
expect(RegExp(/foo/g, "y").toString()).toBe("/foo/y");
|
|
|
|
var regex_like_object_without_flags = {
|
|
source: "foo",
|
|
[Symbol.match]: function () {},
|
|
};
|
|
expect(RegExp(regex_like_object_without_flags).toString()).toBe("/foo/");
|
|
expect(RegExp(regex_like_object_without_flags, "y").toString()).toBe("/foo/y");
|
|
|
|
var regex_like_object_with_flags = {
|
|
source: "foo",
|
|
flags: "g",
|
|
[Symbol.match]: function () {},
|
|
};
|
|
expect(RegExp(regex_like_object_with_flags).toString()).toBe("/foo/g");
|
|
expect(RegExp(regex_like_object_with_flags, "").toString()).toBe("/foo/");
|
|
expect(RegExp(regex_like_object_with_flags, "y").toString()).toBe("/foo/y");
|
|
});
|
|
|
|
test("regexp literals are re-useable", () => {
|
|
for (var i = 0; i < 2; ++i) {
|
|
const re = /test/;
|
|
expect(re.test("te")).toBeFalse();
|
|
expect(re.test("test")).toBeTrue();
|
|
}
|
|
});
|
|
|
|
test("Incorrectly escaped code units not converted to invalid patterns", () => {
|
|
const re = /[\⪾-\⫀]/;
|
|
expect(re.test("⫀")).toBeTrue();
|
|
expect(re.test("\\u2abe")).toBeFalse(); // ⫀ is \u2abe
|
|
});
|
|
|
|
test("regexp that always matches stops matching if it's past the end of the string instead of infinitely looping", () => {
|
|
const re = new RegExp("[\u200E]*", "gu");
|
|
expect("whf".match(re)).toEqual(["", "", "", ""]);
|
|
expect(re.lastIndex).toBe(0);
|
|
});
|
|
|
|
test("v flag should enable unicode mode", () => {
|
|
const re = new RegExp("a\\u{10FFFF}", "v");
|
|
expect(re.test("a\u{10FFFF}")).toBe(true);
|
|
});
|