| //===-- FuzzySymbolIndexTests.cpp - Fuzzy symbol index unit tests ---------===// |
| // |
| // The LLVM Compiler Infrastructure |
| // |
| // This file is distributed under the University of Illinois Open Source |
| // License. See LICENSE.TXT for details. |
| // |
| //===----------------------------------------------------------------------===// |
| |
| #include "FuzzySymbolIndex.h" |
| #include "gmock/gmock.h" |
| #include "llvm/Support/Regex.h" |
| #include "gtest/gtest.h" |
| |
| using testing::ElementsAre; |
| using testing::Not; |
| |
| namespace clang { |
| namespace include_fixer { |
| namespace { |
| |
| TEST(FuzzySymbolIndexTest, Tokenize) { |
| EXPECT_THAT(FuzzySymbolIndex::tokenize("URLHandlerCallback"), |
| ElementsAre("url", "handler", "callback")); |
| EXPECT_THAT(FuzzySymbolIndex::tokenize("snake_case11"), |
| ElementsAre("snake", "case", "11")); |
| EXPECT_THAT(FuzzySymbolIndex::tokenize("__$42!!BOB\nbob"), |
| ElementsAre("42", "bob", "bob")); |
| } |
| |
| MATCHER_P(MatchesSymbol, Identifier, "") { |
| llvm::Regex Pattern("^" + arg); |
| std::string err; |
| if (!Pattern.isValid(err)) { |
| *result_listener << "invalid regex: " << err; |
| return false; |
| } |
| auto Tokens = FuzzySymbolIndex::tokenize(Identifier); |
| std::string Target = llvm::join(Tokens.begin(), Tokens.end(), " "); |
| *result_listener << "matching against '" << Target << "'"; |
| return llvm::Regex("^" + arg).match(Target); |
| } |
| |
| TEST(FuzzySymbolIndexTest, QueryRegexp) { |
| auto QueryRegexp = [](const std::string &query) { |
| return FuzzySymbolIndex::queryRegexp(FuzzySymbolIndex::tokenize(query)); |
| }; |
| EXPECT_THAT(QueryRegexp("uhc"), MatchesSymbol("URLHandlerCallback")); |
| EXPECT_THAT(QueryRegexp("urhaca"), MatchesSymbol("URLHandlerCallback")); |
| EXPECT_THAT(QueryRegexp("uhcb"), Not(MatchesSymbol("URLHandlerCallback"))) |
| << "Non-prefix"; |
| EXPECT_THAT(QueryRegexp("uc"), Not(MatchesSymbol("URLHandlerCallback"))) |
| << "Skip token"; |
| |
| EXPECT_THAT(QueryRegexp("uptr"), MatchesSymbol("unique_ptr")); |
| EXPECT_THAT(QueryRegexp("UniP"), MatchesSymbol("unique_ptr")); |
| } |
| |
| } // namespace |
| } // namespace include_fixer |
| } // namespace clang |