1*3af3f1e8SJonas Devlieghere //===-- RegularExpressionTest.cpp -----------------------------------------===//
2*3af3f1e8SJonas Devlieghere //
3*3af3f1e8SJonas Devlieghere // Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
4*3af3f1e8SJonas Devlieghere // See https://llvm.org/LICENSE.txt for license information.
5*3af3f1e8SJonas Devlieghere // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
6*3af3f1e8SJonas Devlieghere //
7*3af3f1e8SJonas Devlieghere //===----------------------------------------------------------------------===//
8*3af3f1e8SJonas Devlieghere
9*3af3f1e8SJonas Devlieghere #include "lldb/Utility/RegularExpression.h"
10*3af3f1e8SJonas Devlieghere #include "llvm/ADT/SmallVector.h"
11*3af3f1e8SJonas Devlieghere #include "gtest/gtest.h"
12*3af3f1e8SJonas Devlieghere
13*3af3f1e8SJonas Devlieghere using namespace lldb_private;
14*3af3f1e8SJonas Devlieghere using namespace llvm;
15*3af3f1e8SJonas Devlieghere
TEST(RegularExpression,Valid)16*3af3f1e8SJonas Devlieghere TEST(RegularExpression, Valid) {
17*3af3f1e8SJonas Devlieghere RegularExpression r1("^[0-9]+$");
18*3af3f1e8SJonas Devlieghere cantFail(r1.GetError());
19*3af3f1e8SJonas Devlieghere EXPECT_TRUE(r1.IsValid());
20*3af3f1e8SJonas Devlieghere EXPECT_EQ("^[0-9]+$", r1.GetText());
21*3af3f1e8SJonas Devlieghere EXPECT_TRUE(r1.Execute("916"));
22*3af3f1e8SJonas Devlieghere }
23*3af3f1e8SJonas Devlieghere
TEST(RegularExpression,CopyAssignment)24*3af3f1e8SJonas Devlieghere TEST(RegularExpression, CopyAssignment) {
25*3af3f1e8SJonas Devlieghere RegularExpression r1("^[0-9]+$");
26*3af3f1e8SJonas Devlieghere RegularExpression r2 = r1;
27*3af3f1e8SJonas Devlieghere cantFail(r2.GetError());
28*3af3f1e8SJonas Devlieghere EXPECT_TRUE(r2.IsValid());
29*3af3f1e8SJonas Devlieghere EXPECT_EQ("^[0-9]+$", r2.GetText());
30*3af3f1e8SJonas Devlieghere EXPECT_TRUE(r2.Execute("916"));
31*3af3f1e8SJonas Devlieghere }
32*3af3f1e8SJonas Devlieghere
TEST(RegularExpression,Empty)33*3af3f1e8SJonas Devlieghere TEST(RegularExpression, Empty) {
34*3af3f1e8SJonas Devlieghere RegularExpression r1("");
35*3af3f1e8SJonas Devlieghere Error err = r1.GetError();
36*3af3f1e8SJonas Devlieghere EXPECT_TRUE(static_cast<bool>(err));
37*3af3f1e8SJonas Devlieghere consumeError(std::move(err));
38*3af3f1e8SJonas Devlieghere EXPECT_FALSE(r1.IsValid());
39*3af3f1e8SJonas Devlieghere EXPECT_EQ("", r1.GetText());
40*3af3f1e8SJonas Devlieghere EXPECT_FALSE(r1.Execute("916"));
41*3af3f1e8SJonas Devlieghere }
42*3af3f1e8SJonas Devlieghere
TEST(RegularExpression,Invalid)43*3af3f1e8SJonas Devlieghere TEST(RegularExpression, Invalid) {
44*3af3f1e8SJonas Devlieghere RegularExpression r1("a[b-");
45*3af3f1e8SJonas Devlieghere Error err = r1.GetError();
46*3af3f1e8SJonas Devlieghere EXPECT_TRUE(static_cast<bool>(err));
47*3af3f1e8SJonas Devlieghere consumeError(std::move(err));
48*3af3f1e8SJonas Devlieghere EXPECT_FALSE(r1.IsValid());
49*3af3f1e8SJonas Devlieghere EXPECT_EQ("a[b-", r1.GetText());
50*3af3f1e8SJonas Devlieghere EXPECT_FALSE(r1.Execute("ab"));
51*3af3f1e8SJonas Devlieghere }
52*3af3f1e8SJonas Devlieghere
TEST(RegularExpression,Match)53*3af3f1e8SJonas Devlieghere TEST(RegularExpression, Match) {
54*3af3f1e8SJonas Devlieghere RegularExpression r1("[0-9]+([a-f])?:([0-9]+)");
55*3af3f1e8SJonas Devlieghere cantFail(r1.GetError());
56*3af3f1e8SJonas Devlieghere EXPECT_TRUE(r1.IsValid());
57*3af3f1e8SJonas Devlieghere EXPECT_EQ("[0-9]+([a-f])?:([0-9]+)", r1.GetText());
58*3af3f1e8SJonas Devlieghere
59*3af3f1e8SJonas Devlieghere SmallVector<StringRef, 3> matches;
60*3af3f1e8SJonas Devlieghere EXPECT_TRUE(r1.Execute("9a:513b", &matches));
61*3af3f1e8SJonas Devlieghere EXPECT_EQ(3u, matches.size());
62*3af3f1e8SJonas Devlieghere EXPECT_EQ("9a:513", matches[0].str());
63*3af3f1e8SJonas Devlieghere EXPECT_EQ("a", matches[1].str());
64*3af3f1e8SJonas Devlieghere EXPECT_EQ("513", matches[2].str());
65*3af3f1e8SJonas Devlieghere }
66