mirror of https://github.com/tc39/test262.git
Add additional tests for valid and invalid identity escapes
This commit is contained in:
parent
a4205bac61
commit
a57d2736e3
|
@ -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("/"));
|
|
@ -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…
Reference in New Issue