aboutsummaryrefslogtreecommitdiff
path: root/clang-tools-extra/clangd/unittests/CallHierarchyTests.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'clang-tools-extra/clangd/unittests/CallHierarchyTests.cpp')
-rw-r--r--clang-tools-extra/clangd/unittests/CallHierarchyTests.cpp29
1 files changed, 29 insertions, 0 deletions
diff --git a/clang-tools-extra/clangd/unittests/CallHierarchyTests.cpp b/clang-tools-extra/clangd/unittests/CallHierarchyTests.cpp
index eb852ef..08cc80f 100644
--- a/clang-tools-extra/clangd/unittests/CallHierarchyTests.cpp
+++ b/clang-tools-extra/clangd/unittests/CallHierarchyTests.cpp
@@ -633,6 +633,35 @@ TEST(CallHierarchy, HierarchyOnVar) {
iFromRanges(Source.range("Callee")))));
}
+TEST(CallHierarchy, HierarchyOnEnumConstant) {
+ // Tests that the call hierarchy works on enum constants.
+ Annotations Source(R"cpp(
+ enum class Coin { heads$Heads^ , tai$Tails^ls };
+ void caller() {
+ Coin::$CallerH[[heads]];
+ Coin::$CallerT[[tails]];
+ }
+ )cpp");
+ TestTU TU = TestTU::withCode(Source.code());
+ auto AST = TU.build();
+ auto Index = TU.index();
+
+ std::vector<CallHierarchyItem> Items =
+ prepareCallHierarchy(AST, Source.point("Heads"), testPath(TU.Filename));
+ ASSERT_THAT(Items, ElementsAre(withName("heads")));
+ auto IncomingLevel1 = incomingCalls(Items[0], Index.get());
+ ASSERT_THAT(IncomingLevel1,
+ ElementsAre(AllOf(from(withName("caller")),
+ iFromRanges(Source.range("CallerH")))));
+ Items =
+ prepareCallHierarchy(AST, Source.point("Tails"), testPath(TU.Filename));
+ ASSERT_THAT(Items, ElementsAre(withName("tails")));
+ IncomingLevel1 = incomingCalls(Items[0], Index.get());
+ ASSERT_THAT(IncomingLevel1,
+ ElementsAre(AllOf(from(withName("caller")),
+ iFromRanges(Source.range("CallerT")))));
+}
+
TEST(CallHierarchy, CallInDifferentFileThanCaller) {
Annotations Header(R"cpp(
#define WALDO void caller() {