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