diff --git a/test/annexB/built-ins/RegExp/named-groups/non-unicode-malformed.js b/test/annexB/built-ins/RegExp/named-groups/non-unicode-malformed.js new file mode 100644 index 0000000000000000000000000000000000000000..89911e13bf1a33d022aa06e1c5a7a1210dc6cda3 --- /dev/null +++ b/test/annexB/built-ins/RegExp/named-groups/non-unicode-malformed.js @@ -0,0 +1,27 @@ +// Copyright 2017 the V8 project authors. All rights reserved. +// This code is governed by the BSD license found in the LICENSE file. + +/*--- +description: > + Named groups in Unicode RegExps have some syntax errors and some + compatibility escape fallback behavior. +esid: prod-GroupSpecifier +features: [regexp-named-groups, regexp-lookbehind] +includes: [compareArray.js] +---*/ + +assert(/\k<a>/.test("k<a>")); +assert(/\k<4>/.test("k<4>")); +assert(/\k<a/.test("k<a")); +assert(/\k/.test("k")); + +assert(/(?<a>\a)/.test("a")); + +assert(compareArray(["k<a>"], "xxxk<a>xxx".match(/\k<a>/))); +assert(compareArray(["k<a"], "xxxk<a>xxx".match(/\k<a/))); + +// A couple of corner cases around '\k' as named back-references vs. identity +// escapes. +assert(/\k<a>(?<=>)a/.test("k<a>a")); +assert(/\k<a>(?<!a)a/.test("k<a>a")); +assert(/\k<a>(<a>x)/.test("k<a><a>x")); diff --git a/test/built-ins/RegExp/named-groups/non-unicode-malformed.js b/test/built-ins/RegExp/named-groups/non-unicode-malformed.js index 74d319a6a2d2ccf0cba6a8dbc7f1d8779290e071..37d47a692a2acf2c8ad2b4db9d6c70de3828d52c 100644 --- a/test/built-ins/RegExp/named-groups/non-unicode-malformed.js +++ b/test/built-ins/RegExp/named-groups/non-unicode-malformed.js @@ -6,7 +6,7 @@ description: > Named groups in Unicode RegExps have some syntax errors and some compatibility escape fallback behavior. esid: prod-GroupSpecifier -features: [regexp-named-groups, regexp-lookbehind] +features: [regexp-named-groups] includes: [compareArray.js] ---*/ @@ -17,10 +17,7 @@ assert.throws(SyntaxError, () => eval("/(?<:a>a)/")); assert.throws(SyntaxError, () => eval("/(?<a:>a)/")); assert.throws(SyntaxError, () => eval("/(?<a>a)(?<a>a)/")); assert.throws(SyntaxError, () => eval("/(?<a>a)(?<b>b)(?<a>a)/")); -assert(/\k<a>/.test("k<a>")); -assert(/\k<4>/.test("k<4>")); -assert(/\k<a/.test("k<a")); -assert(/\k/.test("k")); + assert.throws(SyntaxError, () => eval("/(?<a>.)\\k/")); assert.throws(SyntaxError, () => eval("/(?<a>.)\\k<a/")); assert.throws(SyntaxError, () => eval("/(?<a>.)\\k<>/")); @@ -29,16 +26,9 @@ assert.throws(SyntaxError, () => eval("/(?<a>a)\\k<ab>/")); assert.throws(SyntaxError, () => eval("/(?<ab>a)\\k<a>/")); assert.throws(SyntaxError, () => eval("/\\k<a>(?<ab>a)/")); assert.throws(SyntaxError, () => eval("/\\k<a(?<a>a)/")); -assert(/(?<a>\a)/.test("a")); - -assert(compareArray(["k<a>"], "xxxk<a>xxx".match(/\k<a>/))); -assert(compareArray(["k<a"], "xxxk<a>xxx".match(/\k<a/))); // A couple of corner cases around '\k' as named back-references vs. identity // escapes. -assert(/\k<a>(?<=>)a/.test("k<a>a")); -assert(/\k<a>(?<!a)a/.test("k<a>a")); -assert(/\k<a>(<a>x)/.test("k<a><a>x")); assert(/\k<a>(?<a>x)/.test("x")); assert.throws(SyntaxError, () => eval("/\\k<a>(?<b>x)/")); assert.throws(SyntaxError, () => eval("/\\k<a(?<a>.)/"));