xref: /llvm-project/lldb/unittests/Interpreter/TestRegexCommand.cpp (revision 2a6dbedf5a923512ba8b5c2d192b5fc8bb1210fd)
1*2a6dbedfSJonas Devlieghere //===-- TestRegexCommand.cpp ----------------------------------------------===//
2*2a6dbedfSJonas Devlieghere //
3*2a6dbedfSJonas Devlieghere // Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
4*2a6dbedfSJonas Devlieghere // See https://llvm.org/LICENSE.txt for license information.
5*2a6dbedfSJonas Devlieghere // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
6*2a6dbedfSJonas Devlieghere //
7*2a6dbedfSJonas Devlieghere //===----------------------------------------------------------------------===//
8*2a6dbedfSJonas Devlieghere 
9*2a6dbedfSJonas Devlieghere #include "Commands/CommandObjectRegexCommand.h"
10*2a6dbedfSJonas Devlieghere #include "llvm/Testing/Support/Error.h"
11*2a6dbedfSJonas Devlieghere #include "gtest/gtest.h"
12*2a6dbedfSJonas Devlieghere 
13*2a6dbedfSJonas Devlieghere using namespace lldb_private;
14*2a6dbedfSJonas Devlieghere using namespace lldb;
15*2a6dbedfSJonas Devlieghere 
16*2a6dbedfSJonas Devlieghere namespace {
17*2a6dbedfSJonas Devlieghere class TestRegexCommand : public CommandObjectRegexCommand {
18*2a6dbedfSJonas Devlieghere public:
19*2a6dbedfSJonas Devlieghere   using CommandObjectRegexCommand::SubstituteVariables;
20*2a6dbedfSJonas Devlieghere 
21*2a6dbedfSJonas Devlieghere   static std::string
Substitute(llvm::StringRef input,const llvm::SmallVectorImpl<llvm::StringRef> & replacements)22*2a6dbedfSJonas Devlieghere   Substitute(llvm::StringRef input,
23*2a6dbedfSJonas Devlieghere              const llvm::SmallVectorImpl<llvm::StringRef> &replacements) {
24*2a6dbedfSJonas Devlieghere     llvm::Expected<std::string> str = SubstituteVariables(input, replacements);
25*2a6dbedfSJonas Devlieghere     if (!str)
26*2a6dbedfSJonas Devlieghere       return llvm::toString(str.takeError());
27*2a6dbedfSJonas Devlieghere     return *str;
28*2a6dbedfSJonas Devlieghere   }
29*2a6dbedfSJonas Devlieghere };
30*2a6dbedfSJonas Devlieghere } // namespace
31*2a6dbedfSJonas Devlieghere 
TEST(RegexCommandTest,SubstituteVariablesSuccess)32*2a6dbedfSJonas Devlieghere TEST(RegexCommandTest, SubstituteVariablesSuccess) {
33*2a6dbedfSJonas Devlieghere   const llvm::SmallVector<llvm::StringRef, 4> substitutions = {"all", "foo",
34*2a6dbedfSJonas Devlieghere                                                                "bar", "baz"};
35*2a6dbedfSJonas Devlieghere 
36*2a6dbedfSJonas Devlieghere   EXPECT_EQ(TestRegexCommand::Substitute("%0", substitutions), "all");
37*2a6dbedfSJonas Devlieghere   EXPECT_EQ(TestRegexCommand::Substitute("%1", substitutions), "foo");
38*2a6dbedfSJonas Devlieghere   EXPECT_EQ(TestRegexCommand::Substitute("%2", substitutions), "bar");
39*2a6dbedfSJonas Devlieghere   EXPECT_EQ(TestRegexCommand::Substitute("%3", substitutions), "baz");
40*2a6dbedfSJonas Devlieghere   EXPECT_EQ(TestRegexCommand::Substitute("%1%2%3", substitutions), "foobarbaz");
41*2a6dbedfSJonas Devlieghere   EXPECT_EQ(TestRegexCommand::Substitute("#%1#%2#%3#", substitutions),
42*2a6dbedfSJonas Devlieghere             "#foo#bar#baz#");
43*2a6dbedfSJonas Devlieghere }
44*2a6dbedfSJonas Devlieghere 
TEST(RegexCommandTest,SubstituteVariablesFailed)45*2a6dbedfSJonas Devlieghere TEST(RegexCommandTest, SubstituteVariablesFailed) {
46*2a6dbedfSJonas Devlieghere   const llvm::SmallVector<llvm::StringRef, 4> substitutions = {"all", "foo",
47*2a6dbedfSJonas Devlieghere                                                                "bar", "baz"};
48*2a6dbedfSJonas Devlieghere 
49*2a6dbedfSJonas Devlieghere   ASSERT_THAT_EXPECTED(
50*2a6dbedfSJonas Devlieghere       TestRegexCommand::SubstituteVariables("%1%2%3%4", substitutions),
51*2a6dbedfSJonas Devlieghere       llvm::Failed());
52*2a6dbedfSJonas Devlieghere   ASSERT_THAT_EXPECTED(
53*2a6dbedfSJonas Devlieghere       TestRegexCommand::SubstituteVariables("%5", substitutions),
54*2a6dbedfSJonas Devlieghere       llvm::Failed());
55*2a6dbedfSJonas Devlieghere   ASSERT_THAT_EXPECTED(
56*2a6dbedfSJonas Devlieghere       TestRegexCommand::SubstituteVariables("%11", substitutions),
57*2a6dbedfSJonas Devlieghere       llvm::Failed());
58*2a6dbedfSJonas Devlieghere }
59*2a6dbedfSJonas Devlieghere 
TEST(RegexCommandTest,SubstituteVariablesNoRecursion)60*2a6dbedfSJonas Devlieghere TEST(RegexCommandTest, SubstituteVariablesNoRecursion) {
61*2a6dbedfSJonas Devlieghere   const llvm::SmallVector<llvm::StringRef, 4> substitutions = {"all", "%2",
62*2a6dbedfSJonas Devlieghere                                                                "%3", "%4"};
63*2a6dbedfSJonas Devlieghere   EXPECT_EQ(TestRegexCommand::Substitute("%0", substitutions), "all");
64*2a6dbedfSJonas Devlieghere   EXPECT_EQ(TestRegexCommand::Substitute("%1", substitutions), "%2");
65*2a6dbedfSJonas Devlieghere   EXPECT_EQ(TestRegexCommand::Substitute("%2", substitutions), "%3");
66*2a6dbedfSJonas Devlieghere   EXPECT_EQ(TestRegexCommand::Substitute("%3", substitutions), "%4");
67*2a6dbedfSJonas Devlieghere   EXPECT_EQ(TestRegexCommand::Substitute("%1%2%3", substitutions), "%2%3%4");
68*2a6dbedfSJonas Devlieghere }
69