| // 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); |
| } |
| } |
| } |