| // 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 | 
 |  | 
 | // These tests won't all run on the noi18n build of V8. | 
 |  | 
 | aa(/(a)(?i)\1/u); | 
 | aa(/([az])(?i)\1/u); | 
 |  | 
 | function aa(re) { | 
 |   assertTrue(re.test("aa")); | 
 |   assertTrue(re.test("aA")); | 
 |   assertFalse(re.test("Aa")); | 
 |   assertFalse(re.test("AA")); | 
 | } | 
 |  | 
 | aai(/(a)(?-i)\1/iu); | 
 | aai(/([az])(?-i)\1/iu); | 
 |  | 
 | 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/u); | 
 | abcd(/[aw]([bx](?i)[cy])[dz]/u); | 
 |  | 
 | 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/iu); | 
 | abcdei(/[aw]([bx](?-i)[cy])[dz]/iu); | 
 |  | 
 | 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/u); | 
 | abc(/[ax](?i:[by])[cz]/u); | 
 |  | 
 | 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/iu); | 
 | abci(/[ax](?-i:[by])[cz]/iu); | 
 |  | 
 | 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")); | 
 | } | 
 |  | 
 | // The following tests are taken from test/mjsunit/es7/regexp-ui-word.js but | 
 | // using inline syntax instead of the global /i flag. | 
 | assertTrue(/(?i)\w/u.test('\u017F')); | 
 | assertTrue(/(?i)\w/u.test('\u212A')); | 
 | assertFalse(/(?i)\W/u.test('\u017F')); | 
 | assertFalse(/(?i)\W/u.test('\u212A')); | 
 | assertFalse(/(?i)\W/u.test('s')); | 
 | assertFalse(/(?i)\W/u.test('S')); | 
 | assertFalse(/(?i)\W/u.test('K')); | 
 | assertFalse(/(?i)\W/u.test('k')); | 
 |  | 
 | assertTrue(/(?i)[\w]/u.test('\u017F')); | 
 | assertTrue(/(?i)[\w]/u.test('\u212A')); | 
 | assertFalse(/(?i)[\W]/u.test('\u017F')); | 
 | assertFalse(/(?i)[\W]/u.test('\u212A')); | 
 | assertFalse(/(?i)[\W]/u.test('s')); | 
 | assertFalse(/(?i)[\W]/u.test('S')); | 
 | assertFalse(/(?i)[\W]/u.test('K')); | 
 | assertFalse(/(?i)[\W]/u.test('k')); | 
 |  | 
 | assertTrue(/(?i)\b/u.test('\u017F')); | 
 | assertFalse(/(?i:)\b/u.test('\u017F')); | 
 | assertTrue(/(?i)\b/u.test('\u212A')); | 
 | assertFalse(/(?i:)\b/u.test('\u212A')); | 
 | assertTrue(/(?i)\b/u.test('s')); | 
 | assertTrue(/(?i)\b/u.test('S')); | 
 | assertFalse(/(?i)\B/u.test('\u017F')); | 
 | assertFalse(/(?i)\B/u.test('\u212A')); | 
 | assertFalse(/(?i)\B/u.test('s')); | 
 | assertFalse(/(?i)\B/u.test('S')); | 
 | assertFalse(/(?i)\B/u.test('K')); | 
 | assertFalse(/(?i)\B/u.test('k')); | 
 |  | 
 | assertEquals(["abcd\u017F", "\u017F"], /a.*?(.)(?i)\b/u.exec('abcd\u017F cd')); | 
 | assertEquals(["abcd\u212A", "\u212A"], /a.*?(.)(?i)\b/u.exec('abcd\u212A cd')); | 
 |  | 
 | assertEquals(["a\u017F", "\u017F"], /a.*?(?i:\B)(.)/u.exec('a\u017F ')); | 
 | assertEquals(["a\u212A", "\u212A"], /a.*?(?i:\B)(.)/u.exec('a\u212A ')); |