summaryrefslogtreecommitdiffstats
path: root/clang-tools-extra/clangd/unittests/TweakTests.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'clang-tools-extra/clangd/unittests/TweakTests.cpp')
-rw-r--r--clang-tools-extra/clangd/unittests/TweakTests.cpp60
1 files changed, 60 insertions, 0 deletions
diff --git a/clang-tools-extra/clangd/unittests/TweakTests.cpp b/clang-tools-extra/clangd/unittests/TweakTests.cpp
index d50d27afb1c..ebeea82864c 100644
--- a/clang-tools-extra/clangd/unittests/TweakTests.cpp
+++ b/clang-tools-extra/clangd/unittests/TweakTests.cpp
@@ -1864,6 +1864,66 @@ TEST_F(DefineInlineTest, QualifyWithUsingDirectives) {
EXPECT_EQ(apply(Test), Expected) << Test;
}
+TEST_F(DefineInlineTest, AddInline) {
+ llvm::StringMap<std::string> EditedFiles;
+ ExtraFiles["a.h"] = "void foo();";
+ apply(R"cpp(#include "a.h"
+ void fo^o() {})cpp", &EditedFiles);
+ EXPECT_THAT(EditedFiles, testing::ElementsAre(FileWithContents(
+ testPath("a.h"), "inline void foo(){}")));
+
+ // Check we put inline before cv-qualifiers.
+ ExtraFiles["a.h"] = "const int foo();";
+ apply(R"cpp(#include "a.h"
+ const int fo^o() {})cpp", &EditedFiles);
+ EXPECT_THAT(EditedFiles, testing::ElementsAre(FileWithContents(
+ testPath("a.h"), "inline const int foo(){}")));
+
+ // No double inline.
+ ExtraFiles["a.h"] = "inline void foo();";
+ apply(R"cpp(#include "a.h"
+ inline void fo^o() {})cpp", &EditedFiles);
+ EXPECT_THAT(EditedFiles, testing::ElementsAre(FileWithContents(
+ testPath("a.h"), "inline void foo(){}")));
+
+ // Constexprs don't need "inline".
+ ExtraFiles["a.h"] = "constexpr void foo();";
+ apply(R"cpp(#include "a.h"
+ constexpr void fo^o() {})cpp", &EditedFiles);
+ EXPECT_THAT(EditedFiles, testing::ElementsAre(FileWithContents(
+ testPath("a.h"), "constexpr void foo(){}")));
+
+ // Class members don't need "inline".
+ ExtraFiles["a.h"] = "struct Foo { void foo(); }";
+ apply(R"cpp(#include "a.h"
+ void Foo::fo^o() {})cpp", &EditedFiles);
+ EXPECT_THAT(EditedFiles,
+ testing::ElementsAre(FileWithContents(
+ testPath("a.h"), "struct Foo { void foo(){} }")));
+
+ // Function template doesn't need to be "inline"d.
+ ExtraFiles["a.h"] = "template <typename T> void foo();";
+ apply(R"cpp(#include "a.h"
+ template <typename T>
+ void fo^o() {})cpp", &EditedFiles);
+ EXPECT_THAT(EditedFiles,
+ testing::ElementsAre(FileWithContents(
+ testPath("a.h"), "template <typename T> void foo(){}")));
+
+ // Specializations needs to be marked "inline".
+ ExtraFiles["a.h"] = R"cpp(
+ template <typename T> void foo();
+ template <> void foo<int>();)cpp";
+ apply(R"cpp(#include "a.h"
+ template <>
+ void fo^o<int>() {})cpp", &EditedFiles);
+ EXPECT_THAT(EditedFiles,
+ testing::ElementsAre(FileWithContents(testPath("a.h"),
+ R"cpp(
+ template <typename T> void foo();
+ template <> inline void foo<int>(){})cpp")));
+}
+
TWEAK_TEST(DefineOutline);
TEST_F(DefineOutlineTest, TriggersOnFunctionDecl) {
FileName = "Test.cpp";
OpenPOWER on IntegriCloud