147 lines
3.7 KiB
JavaScript
147 lines
3.7 KiB
JavaScript
|
// Copyright 2017 the V8 project authors. All rights reserved.
|
||
|
// Use of this source code is governed by a BSD-style license that can be
|
||
|
// found in the LICENSE file.
|
||
|
|
||
|
// Flags: --regexp-mode-modifiers
|
||
|
|
||
|
aa(/(a)(?i)\1/);
|
||
|
aa(/([az])(?i)\1/);
|
||
|
|
||
|
function aa(re) {
|
||
|
assertTrue(re.test("aa"));
|
||
|
assertTrue(re.test("aA"));
|
||
|
assertFalse(re.test("Aa"));
|
||
|
assertFalse(re.test("AA"));
|
||
|
}
|
||
|
|
||
|
aai(/(a)(?-i)\1/i);
|
||
|
aai(/([az])(?-i)\1/i);
|
||
|
|
||
|
function aai(re) {
|
||
|
assertTrue(re.test("aa"));
|
||
|
assertFalse(re.test("aA"));
|
||
|
assertFalse(re.test("Aa"));
|
||
|
assertTrue(re.test("AA"));
|
||
|
}
|
||
|
|
||
|
abcd(/a(b(?i)c)d/);
|
||
|
abcd(/[aw]([bx](?i)[cy])[dz]/);
|
||
|
|
||
|
function abcd(re) {
|
||
|
assertTrue(re.test("abcd"));
|
||
|
assertFalse(re.test("abcD"));
|
||
|
assertTrue(re.test("abCd"));
|
||
|
assertFalse(re.test("abCD"));
|
||
|
assertFalse(re.test("aBcd"));
|
||
|
assertFalse(re.test("aBcD"));
|
||
|
assertFalse(re.test("aBCd"));
|
||
|
assertFalse(re.test("aBCD"));
|
||
|
assertFalse(re.test("Abcd"));
|
||
|
assertFalse(re.test("AbcD"));
|
||
|
assertFalse(re.test("AbCd"));
|
||
|
assertFalse(re.test("AbCD"));
|
||
|
assertFalse(re.test("ABcd"));
|
||
|
assertFalse(re.test("ABcD"));
|
||
|
assertFalse(re.test("ABCd"));
|
||
|
assertFalse(re.test("ABCD"));
|
||
|
}
|
||
|
|
||
|
abcdei(/a(b(?-i)c)d/i);
|
||
|
abcdei(/[aw]([bx](?-i)[cy])[dz]/i);
|
||
|
|
||
|
function abcdei(re) {
|
||
|
assertTrue(re.test("abcd"));
|
||
|
assertTrue(re.test("abcD"));
|
||
|
assertFalse(re.test("abCd"));
|
||
|
assertFalse(re.test("abCD"));
|
||
|
assertTrue(re.test("aBcd"));
|
||
|
assertTrue(re.test("aBcD"));
|
||
|
assertFalse(re.test("aBCd"));
|
||
|
assertFalse(re.test("aBCD"));
|
||
|
assertTrue(re.test("Abcd"));
|
||
|
assertTrue(re.test("AbcD"));
|
||
|
assertFalse(re.test("AbCd"));
|
||
|
assertFalse(re.test("AbCD"));
|
||
|
assertTrue(re.test("ABcd"));
|
||
|
assertTrue(re.test("ABcD"));
|
||
|
assertFalse(re.test("ABCd"));
|
||
|
assertFalse(re.test("ABCD"));
|
||
|
}
|
||
|
|
||
|
abc(/a(?i:b)c/);
|
||
|
abc(/[ax](?i:[by])[cz]/);
|
||
|
|
||
|
function abc(re) {
|
||
|
assertTrue(re.test("abc"));
|
||
|
assertFalse(re.test("abC"));
|
||
|
assertTrue(re.test("aBc"));
|
||
|
assertFalse(re.test("aBC"));
|
||
|
assertFalse(re.test("Abc"));
|
||
|
assertFalse(re.test("AbC"));
|
||
|
assertFalse(re.test("ABc"));
|
||
|
assertFalse(re.test("ABC"));
|
||
|
}
|
||
|
|
||
|
abci(/a(?-i:b)c/i);
|
||
|
abci(/[ax](?-i:[by])[cz]/i);
|
||
|
|
||
|
function abci(re) {
|
||
|
assertTrue(re.test("abc"));
|
||
|
assertTrue(re.test("abC"));
|
||
|
assertFalse(re.test("aBc"));
|
||
|
assertFalse(re.test("aBC"));
|
||
|
assertTrue(re.test("Abc"));
|
||
|
assertTrue(re.test("AbC"));
|
||
|
assertFalse(re.test("ABc"));
|
||
|
assertFalse(re.test("ABC"));
|
||
|
}
|
||
|
|
||
|
assertThrows(() => new RegExp("foo(?i:"));
|
||
|
assertThrows(() => new RegExp("foo(?--i)"));
|
||
|
assertThrows(() => new RegExp("foo(?i-i)"));
|
||
|
|
||
|
assertThrows(() => new RegExp("foo(?m:"));
|
||
|
assertThrows(() => new RegExp("foo(?--m)"));
|
||
|
assertThrows(() => new RegExp("foo(?m-m)"));
|
||
|
|
||
|
var re = /^\s(?m)^.$\s(?-m)$/;
|
||
|
assertTrue(re.test("\n.\n"));
|
||
|
assertFalse(re.test(" .\n"));
|
||
|
assertFalse(re.test("\n. "));
|
||
|
assertFalse(re.test(" . "));
|
||
|
assertFalse(re.test("_\n.\n"));
|
||
|
assertFalse(re.test("\n.\n_"));
|
||
|
assertFalse(re.test("_\n.\n_"));
|
||
|
|
||
|
assertEquals(["abcd", "d"], /a.*?(.)(?i)\b/.exec('abcd\u017F cd'));
|
||
|
assertEquals(["abcd", "d"], /a.*?(.)(?i)\b/.exec('abcd\u212A cd'));
|
||
|
|
||
|
assertEquals(["a\u017F ", " "], /a.*?(?i)\B(.)/.exec('a\u017F '));
|
||
|
assertEquals(["a\u212A ", " "], /a.*?(?i)\B(.)/.exec('a\u212A '));
|
||
|
|
||
|
// Nested flags.
|
||
|
var res = [
|
||
|
/^a(?i:b(?-i:c(?i:d)e)f)g$/,
|
||
|
/^a(?i:b(?-i)c(?i)d(?-i)e(?i)f)g$/,
|
||
|
/^(?-i:a(?i:b(?-i:c(?i:d)e)f)g)$/i,
|
||
|
/^(?-i:a(?i:b(?-i)c(?i)d(?-i)e(?i)f)g)$/i,
|
||
|
];
|
||
|
|
||
|
for (var idx = 0; idx < res.length; idx++) {
|
||
|
var re = res[idx];
|
||
|
for (var i = 0; i < 128; i++) {
|
||
|
var s = (i & 1) ? "A" : "a";
|
||
|
s += (i & 2) ? "B" : "b";
|
||
|
s += (i & 4) ? "C" : "c";
|
||
|
s += (i & 8) ? "D" : "d";
|
||
|
s += (i & 16) ? "E" : "e";
|
||
|
s += (i & 32) ? "F" : "f";
|
||
|
s += (i & 64) ? "G" : "g";
|
||
|
if ((i & (1 | 4 | 16 | 64)) != 0) {
|
||
|
assertFalse(re.test(s), s);
|
||
|
} else {
|
||
|
assertTrue(re.test(s), s);
|
||
|
}
|
||
|
}
|
||
|
}
|