mirror of
https://github.com/tc39/test262.git
synced 2025-07-23 22:15:24 +02:00
Add additional tests for valid and invalid identity escapes
This commit is contained in:
parent
a4205bac61
commit
a57d2736e3
53
test/built-ins/RegExp/unicode_identity_escape.js
Executable file
53
test/built-ins/RegExp/unicode_identity_escape.js
Executable file
@ -0,0 +1,53 @@
|
|||||||
|
// Copyright (C) 2015 André Bargull. All rights reserved.
|
||||||
|
// This code is governed by the BSD license found in the LICENSE file.
|
||||||
|
|
||||||
|
/*---
|
||||||
|
description: IdentityEscape for Unicode RegExp
|
||||||
|
info: >
|
||||||
|
IdentityEscape for Unicode RegExps is restricted to SyntaxCharacter and U+002F (SOLIDUS)
|
||||||
|
es6id: 21.1.2
|
||||||
|
---*/
|
||||||
|
|
||||||
|
// 21.2.1 Patterns
|
||||||
|
//
|
||||||
|
// IdentityEscape[U] ::
|
||||||
|
// [+U] SyntaxCharacter
|
||||||
|
// [+U] /
|
||||||
|
//
|
||||||
|
// SyntaxCharacter :: one of
|
||||||
|
// ^ $ \ . * + ? ( ) [ ] { } |
|
||||||
|
|
||||||
|
// IdentityEscape in AtomEscape
|
||||||
|
assert(/\^/u.test("^"));
|
||||||
|
assert(/\$/u.test("$"));
|
||||||
|
assert(/\\/u.test("\\"));
|
||||||
|
assert(/\./u.test("."));
|
||||||
|
assert(/\*/u.test("*"));
|
||||||
|
assert(/\+/u.test("+"));
|
||||||
|
assert(/\?/u.test("?"));
|
||||||
|
assert(/\(/u.test("("));
|
||||||
|
assert(/\)/u.test(")"));
|
||||||
|
assert(/\[/u.test("["));
|
||||||
|
assert(/\]/u.test("]"));
|
||||||
|
assert(/\{/u.test("{"));
|
||||||
|
assert(/\}/u.test("}"));
|
||||||
|
assert(/\|/u.test("|"));
|
||||||
|
assert(/\//u.test("/"));
|
||||||
|
|
||||||
|
|
||||||
|
// IdentityEscape in ClassEscape
|
||||||
|
assert(/[\^]/u.test("^"));
|
||||||
|
assert(/[\$]/u.test("$"));
|
||||||
|
assert(/[\\]/u.test("\\"));
|
||||||
|
assert(/[\.]/u.test("."));
|
||||||
|
assert(/[\*]/u.test("*"));
|
||||||
|
assert(/[\+]/u.test("+"));
|
||||||
|
assert(/[\?]/u.test("?"));
|
||||||
|
assert(/[\(]/u.test("("));
|
||||||
|
assert(/[\)]/u.test(")"));
|
||||||
|
assert(/[\[]/u.test("["));
|
||||||
|
assert(/[\]]/u.test("]"));
|
||||||
|
assert(/[\{]/u.test("{"));
|
||||||
|
assert(/[\}]/u.test("}"));
|
||||||
|
assert(/[\|]/u.test("|"));
|
||||||
|
assert(/[\/]/u.test("/"));
|
100
test/built-ins/RegExp/unicode_restricted_identity_escape_alpha.js
Executable file
100
test/built-ins/RegExp/unicode_restricted_identity_escape_alpha.js
Executable file
@ -0,0 +1,100 @@
|
|||||||
|
// Copyright (C) 2015 André Bargull. All rights reserved.
|
||||||
|
// This code is governed by the BSD license found in the LICENSE file.
|
||||||
|
|
||||||
|
/*---
|
||||||
|
description: Extension B.1.4 is not applied for Unicode RegExp
|
||||||
|
info: >
|
||||||
|
The compatibility extensions defined in B.1.4 Regular Expressions Patterns
|
||||||
|
are not applied for Unicode RegExps.
|
||||||
|
Tested extension: "IdentityEscape[U] :: [~U] SourceCharacter but not c"
|
||||||
|
|
||||||
|
Forbidden extension (16.1):
|
||||||
|
The RegExp pattern grammars in 21.2.1 and B.1.4 must not be extended to recognize any of the
|
||||||
|
source characters A-Z or a-z as IdentityEscape[U] when the U grammar parameter is present.
|
||||||
|
es6id: 21.1.2
|
||||||
|
---*/
|
||||||
|
|
||||||
|
function isValidAlphaEscapeInAtom(s) {
|
||||||
|
switch (s) {
|
||||||
|
// Assertion [U] :: \b
|
||||||
|
case "b":
|
||||||
|
// Assertion [U] :: \B
|
||||||
|
case "B":
|
||||||
|
// ControlEscape :: one of f n r t v
|
||||||
|
case "f":
|
||||||
|
case "n":
|
||||||
|
case "r":
|
||||||
|
case "t":
|
||||||
|
case "v":
|
||||||
|
// CharacterClassEscape :: one of d D s S w W
|
||||||
|
case "d":
|
||||||
|
case "D":
|
||||||
|
case "s":
|
||||||
|
case "S":
|
||||||
|
case "w":
|
||||||
|
case "W":
|
||||||
|
return true;
|
||||||
|
default:
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
function isValidAlphaEscapeInClass(s) {
|
||||||
|
switch (s) {
|
||||||
|
// ClassEscape[U] :: b
|
||||||
|
case "b":
|
||||||
|
// ControlEscape :: one of f n r t v
|
||||||
|
case "f":
|
||||||
|
case "n":
|
||||||
|
case "r":
|
||||||
|
case "t":
|
||||||
|
case "v":
|
||||||
|
// CharacterClassEscape :: one of d D s S w W
|
||||||
|
case "d":
|
||||||
|
case "D":
|
||||||
|
case "s":
|
||||||
|
case "S":
|
||||||
|
case "w":
|
||||||
|
case "W":
|
||||||
|
return true;
|
||||||
|
default:
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// IdentityEscape in AtomEscape
|
||||||
|
for (var cu = 0x41 /* A */; cu <= 0x5a /* Z */; ++cu) {
|
||||||
|
var s = String.fromCharCode(cu);
|
||||||
|
if (!isValidAlphaEscapeInAtom(s)) {
|
||||||
|
assert.throws(SyntaxError, function() {
|
||||||
|
RegExp("\\" + s, "u");
|
||||||
|
}, "IdentityEscape '" + s + "'");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
for (var cu = 0x61 /* a */; cu <= 0x7a /* z */; ++cu) {
|
||||||
|
var s = String.fromCharCode(cu);
|
||||||
|
if (!isValidAlphaEscapeInAtom(s)) {
|
||||||
|
assert.throws(SyntaxError, function() {
|
||||||
|
RegExp("\\" + s, "u");
|
||||||
|
}, "IdentityEscape '" + s + "'");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
// IdentityEscape in ClassEscape
|
||||||
|
for (var cu = 0x41 /* A */; cu <= 0x5a /* Z */; ++cu) {
|
||||||
|
var s = String.fromCharCode(cu);
|
||||||
|
if (!isValidAlphaEscapeInClass(s)) {
|
||||||
|
assert.throws(SyntaxError, function() {
|
||||||
|
RegExp("[\\" + s + "]", "u");
|
||||||
|
}, "IdentityEscape '" + s + "'");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
for (var cu = 0x61 /* a */; cu <= 0x7a /* z */; ++cu) {
|
||||||
|
var s = String.fromCharCode(cu);
|
||||||
|
if (!isValidAlphaEscapeInClass(s)) {
|
||||||
|
assert.throws(SyntaxError, function() {
|
||||||
|
RegExp("[\\" + s + "]", "u");
|
||||||
|
}, "IdentityEscape '" + s + "'");
|
||||||
|
}
|
||||||
|
}
|
Loading…
x
Reference in New Issue
Block a user