xref: /llvm-project/clang-tools-extra/clangd/unittests/tweaks/ShowSelectionTreeTests.cpp (revision 4d006520b8c0cc3a52913b4665bf741c737e5592)
1 //===-- ShowSelectionTreeTests.cpp ------------------------------*- C++ -*-===//
2 //
3 // Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
4 // See https://llvm.org/LICENSE.txt for license information.
5 // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
6 //
7 //===----------------------------------------------------------------------===//
8 
9 #include "TweakTesting.h"
10 #include "gmock/gmock-matchers.h"
11 #include "gmock/gmock.h"
12 #include "gtest/gtest.h"
13 
14 namespace clang {
15 namespace clangd {
16 namespace {
17 
18 TWEAK_TEST(ShowSelectionTree);
19 
TEST_F(ShowSelectionTreeTest,Test)20 TEST_F(ShowSelectionTreeTest, Test) {
21   EXPECT_AVAILABLE("^int f^oo() { re^turn 2 ^+ 2; }");
22   EXPECT_AVAILABLE("/*c^omment*/ int foo() { return 2 ^ + 2; }");
23 
24   const char *Output = R"(message:
25  TranslationUnitDecl
26    VarDecl int x = fcall(2 + 2)
27     .CallExpr fcall(2 + 2)
28        ImplicitCastExpr fcall
29         .DeclRefExpr fcall
30       .BinaryOperator 2 + 2
31         *IntegerLiteral 2
32 )";
33   EXPECT_EQ(apply("int fcall(int); int x = fca[[ll(2 +]]2);"), Output);
34 
35   Output = R"(message:
36  TranslationUnitDecl
37    FunctionDecl void x()
38      CompoundStmt { …
39        ForStmt for (;;) …
40         *BreakStmt break;
41 )";
42   EXPECT_EQ(apply("void x() { for (;;) br^eak; }"), Output);
43 }
44 
45 } // namespace
46 } // namespace clangd
47 } // namespace clang
48