1
Fork 0
mirror of https://github.com/RGBCube/serenity synced 2025-07-27 08:47:44 +00:00

LibJS: Implement RegExp.prototype.hasIndices proposal

https://tc39.es/proposal-regexp-match-indices/
This commit is contained in:
Timothy Flynn 2021-07-09 19:51:56 -04:00 committed by Linus Groh
parent d1e06b00e3
commit 6c67de8186
3 changed files with 152 additions and 3 deletions

View file

@ -0,0 +1,53 @@
test("basic functionality", () => {
const str = "foo bar foo";
var regex = new RegExp("bar");
expect(regex.hasIndices).toBeFalse();
expect(regex.exec(str).indices).toBeUndefined();
regex = new RegExp("foo", "gd");
expect(regex.hasIndices).toBeTrue();
expect(regex.exec(str).indices[0]).toEqual([0, 3]);
expect(regex.exec(str).indices[0]).toEqual([8, 11]);
regex = new RegExp("(foo)", "gd");
expect(regex.hasIndices).toBeTrue();
{
var result = regex.exec(str).indices;
expect(result.length).toBe(2);
expect(result[0]).toEqual([0, 3]);
expect(result[1]).toEqual([0, 3]);
expect(result.groups).toBeUndefined();
}
{
var result = regex.exec(str).indices;
expect(result.length).toBe(2);
expect(result[0]).toEqual([8, 11]);
expect(result[1]).toEqual([8, 11]);
expect(result.groups).toBeUndefined();
}
regex = new RegExp("(?<group_name>foo)", "gd");
expect(regex.hasIndices).toBeTrue();
{
var result = regex.exec(str).indices;
expect(result.length).toBe(2);
expect(result[0]).toEqual([0, 3]);
expect(result[1]).toEqual([0, 3]);
expect(result.groups).toEqual({ group_name: [0, 3] });
}
{
var result = regex.exec(str).indices;
expect(result.length).toBe(2);
expect(result[0]).toEqual([8, 11]);
expect(result[1]).toEqual([8, 11]);
expect(result.groups).toEqual({ group_name: [8, 11] });
}
regex = /(?<keyword>let|const|var)\s+(?<id>[a-zA-Z_$][0-9a-zA-Z_$]*)/d;
expect(regex.hasIndices).toBeTrue();
{
var result = regex.exec("let foo").indices;
expect(result.groups).toEqual({ keyword: [0, 3], id: [4, 7] });
}
});