aboutsummaryrefslogtreecommitdiff
path: root/deps/v8/test/mjsunit/harmony/regexp-property-sequence.js
diff options
context:
space:
mode:
Diffstat (limited to 'deps/v8/test/mjsunit/harmony/regexp-property-sequence.js')
-rw-r--r--deps/v8/test/mjsunit/harmony/regexp-property-sequence.js88
1 files changed, 88 insertions, 0 deletions
diff --git a/deps/v8/test/mjsunit/harmony/regexp-property-sequence.js b/deps/v8/test/mjsunit/harmony/regexp-property-sequence.js
new file mode 100644
index 0000000000..4d43298016
--- /dev/null
+++ b/deps/v8/test/mjsunit/harmony/regexp-property-sequence.js
@@ -0,0 +1,88 @@
+// Copyright 2018 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-sequence
+
+// Normal usage.
+assertDoesNotThrow("/\\p{Emoji_Flag_Sequence}/u");
+assertTrue(/\p{Emoji_Flag_Sequence}/u.test("\u{1F1E9}\u{1F1EA}"));
+
+assertDoesNotThrow("/\\p{Emoji_Keycap_Sequence}/u");
+assertTrue(/\p{Emoji_Keycap_Sequence}/u.test("\u0023\uFE0F\u20E3"));
+
+assertDoesNotThrow("/\\p{Emoji_Keycap_Sequence}/u");
+assertFalse(/\p{Emoji_Keycap_Sequence}/u.test("\u0022\uFE0F\u20E3"));
+
+assertDoesNotThrow("/\\p{Emoji_Modifier_Sequence}/u");
+assertTrue(/\p{Emoji_Modifier_Sequence}/u.test("\u26F9\u{1F3FF}"));
+
+assertDoesNotThrow("/\\p{Emoji_ZWJ_Sequence}/u");
+assertTrue(/\p{Emoji_ZWJ_Sequence}/u.test("\u{1F468}\u{200D}\u{1F467}"));
+
+// Without unicode flag.
+assertDoesNotThrow("/\\p{Emoji_Flag_Sequence}/");
+assertFalse(/\p{Emoji_Flag_Sequence}/.test("\u{1F1E9}\u{1F1EA}"));
+assertTrue(/\p{Emoji_Flag_Sequence}/.test("\\p{Emoji_Flag_Sequence}"));
+
+// Negated and/or inside a character class.
+assertThrows("/\\P{Emoji_Flag_Sequence}/u");
+assertThrows("/\\P{Emoji_Keycap_Sequence}/u");
+assertThrows("/\\P{Emoji_Modifier_Sequence}/u");
+assertThrows("/\\P{Emoji_Tag_Sequence}/u");
+assertThrows("/\\P{Emoji_ZWJ_Sequence}/u");
+
+assertThrows("/[\\p{Emoji_Flag_Sequence}]/u");
+assertThrows("/[\\p{Emoji_Keycap_Sequence}]/u");
+assertThrows("/[\\p{Emoji_Modifier_Sequence}]/u");
+assertThrows("/[\\p{Emoji_Tag_Sequence}]/u");
+assertThrows("/[\\p{Emoji_ZWJ_Sequence}]/u");
+
+assertThrows("/[\\P{Emoji_Flag_Sequence}]/u");
+assertThrows("/[\\P{Emoji_Keycap_Sequence}]/u");
+assertThrows("/[\\P{Emoji_Modifier_Sequence}]/u");
+assertThrows("/[\\P{Emoji_Tag_Sequence}]/u");
+assertThrows("/[\\P{Emoji_ZWJ_Sequence}]/u");
+
+assertThrows("/[\\w\\p{Emoji_Flag_Sequence}]/u");
+assertThrows("/[\\w\\p{Emoji_Keycap_Sequence}]/u");
+assertThrows("/[\\w\\p{Emoji_Modifier_Sequence}]/u");
+assertThrows("/[\\w\\p{Emoji_Tag_Sequence}]/u");
+assertThrows("/[\\w\\p{Emoji_ZWJ_Sequence}]/u");
+
+assertThrows("/[\\w\\P{Emoji_Flag_Sequence}]/u");
+assertThrows("/[\\w\\P{Emoji_Keycap_Sequence}]/u");
+assertThrows("/[\\w\\P{Emoji_Modifier_Sequence}]/u");
+assertThrows("/[\\w\\P{Emoji_Tag_Sequence}]/u");
+assertThrows("/[\\w\\P{Emoji_ZWJ_Sequence}]/u");
+
+// Two regional indicators, but not a country.
+assertFalse(/\p{Emoji_Flag_Sequence}/u.test("\u{1F1E6}\u{1F1E6}"));
+
+// ZWJ sequence as in two ZWJ elements joined by a ZWJ, but not in the list.
+assertFalse(/\p{Emoji_ZWJ_Sequence}/u.test("\u{1F467}\u{200D}\u{1F468}"));
+
+// More complex regexp
+assertEquals(
+ ["country flag: \u{1F1E6}\u{1F1F9}"],
+ /Country Flag: \p{Emoji_Flag_Sequence}/iu.exec(
+ "this is an example of a country flag: \u{1F1E6}\u{1F1F9} is Austria"));
+assertEquals(
+ ["country flag: \u{1F1E6}\u{1F1F9}", "\u{1F1E6}\u{1F1F9}"],
+ /Country Flag: (\p{Emoji_Flag_Sequence})/iu.exec(
+ "this is an example of a country flag: \u{1F1E6}\u{1F1F9} is Austria"));
+assertEquals(
+ ["country flag: \u{1F1E6}\u{1F1F9}"],
+ /Country Flag: ..(?<=\p{Emoji_Flag_Sequence})/iu.exec(
+ "this is an example of a country flag: \u{1F1E6}\u{1F1F9} is Austria"));
+assertEquals(
+ ["flag: \u{1F1E6}\u{1F1F9}", "\u{1F1E6}\u{1F1F9}"],
+ /Flag: ..(?<=(\p{Emoji_Flag_Sequence})|\p{Emoji_Keycap_Sequence})/iu.exec(
+ "this is an example of a country flag: \u{1F1E6}\u{1F1F9} is Austria"));
+
+// Partial sequences.
+assertFalse(/\p{Emoji_Flag_Sequence}/u.test("\u{1F1E6}_"));
+assertFalse(/\p{Emoji_Keycap_Sequence}/u.test("2\uFE0F_"));
+assertFalse(/\p{Emoji_Modifier_Sequence}/u.test("\u261D_"));
+assertFalse(/\p{Emoji_Tag_Sequence}/u.test("\u{1F3F4}\u{E0067}\u{E0062}\u{E0065}\u{E006E}\u{E0067}_"));
+assertFalse(/\p{Emoji_ZWJ_Sequence}/u.test("\u{1F468}\u200D\u2764\uFE0F\u200D_"));