mirror of https://github.com/tc39/test262.git
101 lines
2.5 KiB
JavaScript
101 lines
2.5 KiB
JavaScript
|
// 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 + "'");
|
||
|
}
|
||
|
}
|