blob: b8981a7fb0bd280ea80363a9796ec6e72b500538 [file] [log] [blame]
// Copyright (c) 2019, the Dart project authors. All rights reserved.
// Copyright 2016 the V8 project authors. All rights reserved.
// Redistribution and use in source and binary forms, with or without
// modification, are permitted provided that the following conditions are
// met:
//
// * Redistributions of source code must retain the above copyright
// notice, this list of conditions and the following disclaimer.
// * Redistributions in binary form must reproduce the above
// copyright notice, this list of conditions and the following
// disclaimer in the documentation and/or other materials provided
// with the distribution.
// * Neither the name of Google Inc. nor the names of its
// contributors may be used to endorse or promote products derived
// from this software without specific prior written permission.
//
// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
import 'package:expect/expect.dart';
import 'v8_regexp_utils.dart';
void main() {
void t(RegExp re, String s) {
assertTrue(re.hasMatch(s));
}
void f(RegExp re, String s) {
assertFalse(re.hasMatch(s));
}
assertThrows(() => RegExp("\\p{Hiragana}", unicode: true));
assertThrows(() => RegExp("\\p{Bidi_Class}", unicode: true));
assertThrows(() => RegExp("\\p{Bidi_C=False}", unicode: true));
assertThrows(() => RegExp("\\P{Bidi_Control=Y}", unicode: true));
assertThrows(() => RegExp("\\p{AHex=Yes}", unicode: true));
assertThrows(() => RegExp("\\p{Composition_Exclusion}", unicode: true));
assertThrows(() => RegExp("\\p{CE}", unicode: true));
assertThrows(() => RegExp("\\p{Full_Composition_Exclusion}", unicode: true));
assertThrows(() => RegExp("\\p{Comp_Ex}", unicode: true));
assertThrows(() => RegExp("\\p{Grapheme_Link}", unicode: true));
assertThrows(() => RegExp("\\p{Gr_Link}", unicode: true));
assertThrows(() => RegExp("\\p{Hyphen}", unicode: true));
assertThrows(() => RegExp("\\p{NFD_Inert}", unicode: true));
assertThrows(() => RegExp("\\p{NFDK_Inert}", unicode: true));
assertThrows(() => RegExp("\\p{NFC_Inert}", unicode: true));
assertThrows(() => RegExp("\\p{NFKC_Inert}", unicode: true));
assertThrows(() => RegExp("\\p{Segment_Starter}", unicode: true));
t(RegExp(r"\p{Alphabetic}", unicode: true), "æ");
f(RegExp(r"\p{Alpha}", unicode: true), "1");
t(RegExp(r"\p{ASCII_Hex_Digit}", unicode: true), "f");
f(RegExp(r"\p{AHex}", unicode: true), "g");
t(RegExp(r"\p{Bidi_Control}", unicode: true), "\u200e");
f(RegExp(r"\p{Bidi_C}", unicode: true), "g");
t(RegExp(r"\p{Bidi_Mirrored}", unicode: true), "(");
f(RegExp(r"\p{Bidi_M}", unicode: true), "-");
t(RegExp(r"\p{Case_Ignorable}", unicode: true), "\u02b0");
f(RegExp(r"\p{CI}", unicode: true), "a");
t(RegExp(r"\p{Changes_When_Casefolded}", unicode: true), "B");
f(RegExp(r"\p{CWCF}", unicode: true), "1");
t(RegExp(r"\p{Changes_When_Casemapped}", unicode: true), "b");
f(RegExp(r"\p{CWCM}", unicode: true), "1");
t(RegExp(r"\p{Changes_When_Lowercased}", unicode: true), "B");
f(RegExp(r"\p{CWL}", unicode: true), "1");
t(RegExp(r"\p{Changes_When_Titlecased}", unicode: true), "b");
f(RegExp(r"\p{CWT}", unicode: true), "1");
t(RegExp(r"\p{Changes_When_Uppercased}", unicode: true), "b");
f(RegExp(r"\p{CWU}", unicode: true), "1");
t(RegExp(r"\p{Dash}", unicode: true), "-");
f(RegExp(r"\p{Dash}", unicode: true), "1");
t(RegExp(r"\p{Default_Ignorable_Code_Point}", unicode: true), "\u00ad");
f(RegExp(r"\p{DI}", unicode: true), "1");
t(RegExp(r"\p{Deprecated}", unicode: true), "\u17a3");
f(RegExp(r"\p{Dep}", unicode: true), "1");
t(RegExp(r"\p{Diacritic}", unicode: true), "\u0301");
f(RegExp(r"\p{Dia}", unicode: true), "1");
t(RegExp(r"\p{Emoji}", unicode: true), "\u2603");
f(RegExp(r"\p{Emoji}", unicode: true), "x");
t(RegExp(r"\p{Emoji_Component}", unicode: true), "\u{1F1E6}");
f(RegExp(r"\p{Emoji_Component}", unicode: true), "x");
t(RegExp(r"\p{Emoji_Modifier_Base}", unicode: true), "\u{1F6CC}");
f(RegExp(r"\p{Emoji_Modifier_Base}", unicode: true), "x");
t(RegExp(r"\p{Emoji_Modifier}", unicode: true), "\u{1F3FE}");
f(RegExp(r"\p{Emoji_Modifier}", unicode: true), "x");
t(RegExp(r"\p{Emoji_Presentation}", unicode: true), "\u{1F308}");
f(RegExp(r"\p{Emoji_Presentation}", unicode: true), "x");
t(RegExp(r"\p{Extender}", unicode: true), "\u3005");
f(RegExp(r"\p{Ext}", unicode: true), "x");
t(RegExp(r"\p{Grapheme_Base}", unicode: true), " ");
f(RegExp(r"\p{Gr_Base}", unicode: true), "\u0010");
t(RegExp(r"\p{Grapheme_Extend}", unicode: true), "\u0300");
f(RegExp(r"\p{Gr_Ext}", unicode: true), "x");
t(RegExp(r"\p{Hex_Digit}", unicode: true), "a");
f(RegExp(r"\p{Hex}", unicode: true), "g");
t(RegExp(r"\p{ID_Continue}", unicode: true), "1");
f(RegExp(r"\p{IDC}", unicode: true), ".");
t(RegExp(r"\p{ID_Start}", unicode: true), "a");
f(RegExp(r"\p{IDS}", unicode: true), "1");
t(RegExp(r"\p{Ideographic}", unicode: true), "漢");
f(RegExp(r"\p{Ideo}", unicode: true), "H");
t(RegExp(r"\p{IDS_Binary_Operator}", unicode: true), "\u2FF0");
f(RegExp(r"\p{IDSB}", unicode: true), "a");
t(RegExp(r"\p{IDS_Trinary_Operator}", unicode: true), "\u2FF2");
f(RegExp(r"\p{IDST}", unicode: true), "a");
t(RegExp(r"\p{Join_Control}", unicode: true), "\u200c");
f(RegExp(r"\p{Join_C}", unicode: true), "a");
t(RegExp(r"\p{Logical_Order_Exception}", unicode: true), "\u0e40");
f(RegExp(r"\p{LOE}", unicode: true), "a");
t(RegExp(r"\p{Lowercase}", unicode: true), "a");
f(RegExp(r"\p{Lower}", unicode: true), "A");
t(RegExp(r"\p{Math}", unicode: true), "=");
f(RegExp(r"\p{Math}", unicode: true), "A");
t(RegExp(r"\p{Noncharacter_Code_Point}", unicode: true), "\uFDD0");
f(RegExp(r"\p{NChar}", unicode: true), "A");
t(RegExp(r"\p{Pattern_Syntax}", unicode: true), "\u0021");
f(RegExp(r"\p{NChar}", unicode: true), "A");
t(RegExp(r"\p{Pattern_White_Space}", unicode: true), "\u0009");
f(RegExp(r"\p{Pat_Syn}", unicode: true), "A");
t(RegExp(r"\p{Quotation_Mark}", unicode: true), "'");
f(RegExp(r"\p{QMark}", unicode: true), "A");
t(RegExp(r"\p{Radical}", unicode: true), "\u2FAD");
f(RegExp(r"\p{Radical}", unicode: true), "A");
t(RegExp(r"\p{Regional_Indicator}", unicode: true), "\u{1F1E6}");
f(RegExp(r"\p{Regional_Indicator}", unicode: true), "A");
t(RegExp(r"\p{Sentence_Terminal}", unicode: true), "!");
f(RegExp(r"\p{STerm}", unicode: true), "A");
t(RegExp(r"\p{Soft_Dotted}", unicode: true), "i");
f(RegExp(r"\p{SD}", unicode: true), "A");
t(RegExp(r"\p{Terminal_Punctuation}", unicode: true), ".");
f(RegExp(r"\p{Term}", unicode: true), "A");
t(RegExp(r"\p{Unified_Ideograph}", unicode: true), "\u4e00");
f(RegExp(r"\p{UIdeo}", unicode: true), "A");
t(RegExp(r"\p{Uppercase}", unicode: true), "A");
f(RegExp(r"\p{Upper}", unicode: true), "a");
t(RegExp(r"\p{Variation_Selector}", unicode: true), "\uFE00");
f(RegExp(r"\p{VS}", unicode: true), "A");
t(RegExp(r"\p{White_Space}", unicode: true), " ");
f(RegExp(r"\p{WSpace}", unicode: true), "A");
t(RegExp(r"\p{XID_Continue}", unicode: true), "1");
f(RegExp(r"\p{XIDC}", unicode: true), " ");
t(RegExp(r"\p{XID_Start}", unicode: true), "A");
f(RegExp(r"\p{XIDS}", unicode: true), " ");
}