//===-- TestRegexCommand.cpp ----------------------------------------------===// // // Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions. // See https://llvm.org/LICENSE.txt for license information. // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception // //===----------------------------------------------------------------------===// #include "Commands/CommandObjectRegexCommand.h" #include "llvm/Testing/Support/Error.h" #include "gtest/gtest.h" using namespace lldb_private; using namespace lldb; namespace { class TestRegexCommand : public CommandObjectRegexCommand { public: using CommandObjectRegexCommand::SubstituteVariables; static std::string Substitute(llvm::StringRef input, const llvm::SmallVectorImpl &replacements) { llvm::Expected str = SubstituteVariables(input, replacements); if (!str) return llvm::toString(str.takeError()); return *str; } }; } // namespace TEST(RegexCommandTest, SubstituteVariablesSuccess) { const llvm::SmallVector substitutions = {"all", "foo", "bar", "baz"}; EXPECT_EQ(TestRegexCommand::Substitute("%0", substitutions), "all"); EXPECT_EQ(TestRegexCommand::Substitute("%1", substitutions), "foo"); EXPECT_EQ(TestRegexCommand::Substitute("%2", substitutions), "bar"); EXPECT_EQ(TestRegexCommand::Substitute("%3", substitutions), "baz"); EXPECT_EQ(TestRegexCommand::Substitute("%1%2%3", substitutions), "foobarbaz"); EXPECT_EQ(TestRegexCommand::Substitute("#%1#%2#%3#", substitutions), "#foo#bar#baz#"); } TEST(RegexCommandTest, SubstituteVariablesFailed) { const llvm::SmallVector substitutions = {"all", "foo", "bar", "baz"}; ASSERT_THAT_EXPECTED( TestRegexCommand::SubstituteVariables("%1%2%3%4", substitutions), llvm::Failed()); ASSERT_THAT_EXPECTED( TestRegexCommand::SubstituteVariables("%5", substitutions), llvm::Failed()); ASSERT_THAT_EXPECTED( TestRegexCommand::SubstituteVariables("%11", substitutions), llvm::Failed()); } TEST(RegexCommandTest, SubstituteVariablesNoRecursion) { const llvm::SmallVector substitutions = {"all", "%2", "%3", "%4"}; EXPECT_EQ(TestRegexCommand::Substitute("%0", substitutions), "all"); EXPECT_EQ(TestRegexCommand::Substitute("%1", substitutions), "%2"); EXPECT_EQ(TestRegexCommand::Substitute("%2", substitutions), "%3"); EXPECT_EQ(TestRegexCommand::Substitute("%3", substitutions), "%4"); EXPECT_EQ(TestRegexCommand::Substitute("%1%2%3", substitutions), "%2%3%4"); }