// 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. function toSlowMode(re) { re.exec = (str) => RegExp.prototype.exec.call(re, str); return re; } // Construction does not throw. { let re = /./s; re = RegExp(".", "s"); re = new RegExp(".", "s"); assertThrows(() => new RegExp(".", "wtf"), SyntaxError); } // The flags accessors. { let re = /./s; assertEquals("s", re.flags); assertFalse(re.global); assertFalse(re.ignoreCase); assertFalse(re.multiline); assertFalse(re.sticky); assertFalse(re.unicode); assertTrue(re.dotAll); re = toSlowMode(/./s); assertEquals("s", re.flags); assertFalse(re.global); assertFalse(re.ignoreCase); assertFalse(re.multiline); assertFalse(re.sticky); assertFalse(re.unicode); assertTrue(re.dotAll); re = /./gimyus; assertEquals("gimsuy", re.flags); assertTrue(re.global); assertTrue(re.ignoreCase); assertTrue(re.multiline); assertTrue(re.sticky); assertTrue(re.unicode); assertTrue(re.dotAll); re = /./gimyu; assertEquals("gimuy", re.flags); assertTrue(re.global); assertTrue(re.ignoreCase); assertTrue(re.multiline); assertTrue(re.sticky); assertTrue(re.unicode); assertFalse(re.dotAll); } // Different construction variants with all flags. { assertEquals("gimsuy", new RegExp("", "yusmig").flags); assertEquals("gimsuy", new RegExp().compile("", "yusmig").flags); } // Default '.' behavior. { let re = /^.$/; assertTrue(re.test("a")); assertTrue(re.test("3")); assertTrue(re.test("π")); assertTrue(re.test("\u2027")); assertTrue(re.test("\u0085")); assertTrue(re.test("\v")); assertTrue(re.test("\f")); assertTrue(re.test("\u180E")); assertFalse(re.test("\u{10300}")); // Supplementary plane. assertFalse(re.test("\n")); assertFalse(re.test("\r")); assertFalse(re.test("\u2028")); assertFalse(re.test("\u2029")); } // Default '.' behavior (unicode). { let re = /^.$/u; assertTrue(re.test("a")); assertTrue(re.test("3")); assertTrue(re.test("π")); assertTrue(re.test("\u2027")); assertTrue(re.test("\u0085")); assertTrue(re.test("\v")); assertTrue(re.test("\f")); assertTrue(re.test("\u180E")); assertTrue(re.test("\u{10300}")); // Supplementary plane. assertFalse(re.test("\n")); assertFalse(re.test("\r")); assertFalse(re.test("\u2028")); assertFalse(re.test("\u2029")); } // DotAll '.' behavior. { let re = /^.$/s; assertTrue(re.test("a")); assertTrue(re.test("3")); assertTrue(re.test("π")); assertTrue(re.test("\u2027")); assertTrue(re.test("\u0085")); assertTrue(re.test("\v")); assertTrue(re.test("\f")); assertTrue(re.test("\u180E")); assertFalse(re.test("\u{10300}")); // Supplementary plane. assertTrue(re.test("\n")); assertTrue(re.test("\r")); assertTrue(re.test("\u2028")); assertTrue(re.test("\u2029")); } // DotAll '.' behavior (unicode). { let re = /^.$/su; assertTrue(re.test("a")); assertTrue(re.test("3")); assertTrue(re.test("π")); assertTrue(re.test("\u2027")); assertTrue(re.test("\u0085")); assertTrue(re.test("\v")); assertTrue(re.test("\f")); assertTrue(re.test("\u180E")); assertTrue(re.test("\u{10300}")); // Supplementary plane. assertTrue(re.test("\n")); assertTrue(re.test("\r")); assertTrue(re.test("\u2028")); assertTrue(re.test("\u2029")); }