Index: test/mjsunit/harmony/regexp-dotall.js |
diff --git a/test/mjsunit/harmony/regexp-dotall.js b/test/mjsunit/harmony/regexp-dotall.js |
new file mode 100644 |
index 0000000000000000000000000000000000000000..9bf78431a9dca19fc0f4bdb34dff48193c731a00 |
--- /dev/null |
+++ b/test/mjsunit/harmony/regexp-dotall.js |
@@ -0,0 +1,129 @@ |
+// 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: --harmony-regexp-dotall |
+ |
+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); |
+} |
+ |
+// 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")); |
+} |