18 #include "clang/Index/IndexingAction.h" 19 #include "llvm/Support/Path.h" 20 #include "gmock/gmock.h" 21 #include "gtest/gtest.h" 27 using ::testing::ElementsAreArray;
29 auto CreateExpectedSymbolDetails = [](
const std::string &
name,
30 const std::string &container,
31 const std::string &USR) {
32 return SymbolDetails{
name, container, USR,
SymbolID(USR)};
35 TEST(SymbolInfoTests, All) {
36 std::pair<const char *, std::vector<SymbolDetails>>
37 TestInputExpectedOutput[] = {
39 R
"cpp( // Simple function reference - declaration 45 {CreateExpectedSymbolDetails("foo",
"",
"c:@F@foo#")}},
47 R
"cpp( // Simple function reference - definition 53 {CreateExpectedSymbolDetails("foo",
"",
"c:@F@foo#")}},
55 R
"cpp( // Function in namespace reference 63 {CreateExpectedSymbolDetails("foo",
"bar::",
"c:@N@bar@F@foo#")}},
65 R
"cpp( // Function in different namespace reference 75 {CreateExpectedSymbolDetails("foo",
"bar::",
"c:@N@bar@F@foo#")}},
77 R
"cpp( // Function in global namespace reference 87 {CreateExpectedSymbolDetails("foo",
"",
"c:@F@foo#")}},
89 R
"cpp( // Function in anonymous namespace reference 99 {CreateExpectedSymbolDetails("foo",
"(anonymous)",
100 "c:TestTU.cpp@aN@F@foo#")}},
102 R
"cpp( // Function reference - ADL 105 void foo(const BarType&); 114 {CreateExpectedSymbolDetails( 115 "foo",
"bar::",
"c:@N@bar@F@foo#&1$@N@bar@S@BarType#")}},
117 R
"cpp( // Global value reference 124 {CreateExpectedSymbolDetails("value",
"",
"c:@value")}},
126 R
"cpp( // Local value reference 127 void foo() { int aaa; int bbb = aa^a; } 129 {CreateExpectedSymbolDetails("aaa",
"foo",
130 "c:TestTU.cpp@49@F@foo#@aaa")}},
132 R
"cpp( // Function param 137 {CreateExpectedSymbolDetails("aaa",
"bar",
138 "c:TestTU.cpp@38@F@bar#I#@aaa")}},
140 R
"cpp( // Lambda capture 146 {CreateExpectedSymbolDetails("ii",
"",
"c:@ii")}},
148 R
"cpp( // Macro reference 149 #define MACRO 5\nint i = MAC^RO; 151 {CreateExpectedSymbolDetails("MACRO",
"",
152 "c:TestTU.cpp@38@macro@MACRO")}},
154 R
"cpp( // Macro reference 155 #define MACRO 5\nint i = MACRO^; 157 {CreateExpectedSymbolDetails("MACRO",
"",
158 "c:TestTU.cpp@38@macro@MACRO")}},
160 R
"cpp( // Multiple symbols returned - using overloaded function name 168 {CreateExpectedSymbolDetails("foo",
"",
"c:@F@foo#"),
169 CreateExpectedSymbolDetails(
"foo",
"",
"c:@F@foo#b#"),
170 CreateExpectedSymbolDetails(
"foo",
"",
"c:@F@foo#I#"),
171 CreateExpectedSymbolDetails(
"foo",
"bar::",
"c:@N@bar@UD@foo")}},
173 R
"cpp( // Multiple symbols returned - implicit conversion 178 void func_baz1(bar) {} 184 {CreateExpectedSymbolDetails( 185 "ff",
"func_baz2",
"c:TestTU.cpp@218@F@func_baz2#@ff")}},
187 R
"cpp( // Type reference - declaration 191 {CreateExpectedSymbolDetails("foo",
"",
"c:@S@foo")}},
193 R
"cpp( // Type reference - definition 197 {CreateExpectedSymbolDetails("foo",
"",
"c:@S@foo")}},
199 R
"cpp( // Type Reference - template argumen 201 template<class T> struct bar {}; 206 {CreateExpectedSymbolDetails("foo",
"",
"c:@S@foo")}},
208 R
"cpp( // Template parameter reference - type param 209 template<class TT> struct bar { 213 {CreateExpectedSymbolDetails("TT",
"bar::",
"c:TestTU.cpp@65")}},
215 R
"cpp( // Template parameter reference - type param 216 template<int NN> struct bar { 220 {CreateExpectedSymbolDetails("NN",
"bar::",
"c:TestTU.cpp@65")}},
222 R
"cpp( // Class member reference - objec 231 {CreateExpectedSymbolDetails("aa",
"foo::",
"c:@S@foo@FI@aa")}},
233 R
"cpp( // Class member reference - pointer 241 {CreateExpectedSymbolDetails("aa",
"foo::",
"c:@S@foo@FI@aa")}},
243 R
"cpp( // Class method reference - objec 252 {CreateExpectedSymbolDetails("aa",
"foo::",
"c:@S@foo@F@aa#")}},
254 R
"cpp( // Class method reference - pointer 262 {CreateExpectedSymbolDetails("aa",
"foo::",
"c:@S@foo@F@aa#")}},
270 {CreateExpectedSymbolDetails("foo",
"",
"c:TestTU.cpp@T@foo")}},
278 {CreateExpectedSymbolDetails("foo",
"",
"c:@foo")}},
280 R
"cpp( // Namespace reference 282 using namespace fo^o; 284 {CreateExpectedSymbolDetails("foo",
"",
"c:@N@foo")}},
286 R
"cpp( // Enum value reference 287 enum foo { bar, baz }; 292 {CreateExpectedSymbolDetails("bar",
"foo",
"c:@E@foo@bar")}},
294 R
"cpp( // Enum class value reference 295 enum class foo { bar, baz }; 300 {CreateExpectedSymbolDetails("bar",
"foo::",
"c:@E@foo@bar")}},
302 R
"cpp( // Parameters in declarations 305 {CreateExpectedSymbolDetails("bar",
"foo",
306 "c:TestTU.cpp@50@F@foo#I#@bar")}},
308 R
"cpp( // Type inferrence with auto keyword 310 foo getfoo() { return foo{}; } 327 for (
const auto &T : TestInputExpectedOutput) {
328 Annotations TestInput(T.first);
332 ElementsAreArray(T.second))
std::vector< SymbolDetails > getSymbolInfo(ParsedAST &AST, Position Pos)
Get info about symbols at Pos.
TEST(BackgroundQueueTest, Priority)
static TestTU withCode(llvm::StringRef Code)
===– Representation.cpp - ClangDoc Representation --------—*- C++ -*-===//
std::array< uint8_t, 20 > SymbolID