aboutsummaryrefslogtreecommitdiff
path: root/clang-tools-extra/unittests/clang-tidy/LLVMModuleTest.cpp
diff options
context:
space:
mode:
authorKadir Cetinkaya <kadircet@google.com>2022-02-03 17:26:41 +0100
committerKadir Cetinkaya <kadircet@google.com>2022-02-03 17:32:43 +0100
commit0447ec2fb050eb37ed1f5991a1562dea6e228f9e (patch)
tree26a9388ba269ac98651574dffc07af58684323d3 /clang-tools-extra/unittests/clang-tidy/LLVMModuleTest.cpp
parent2349fb031270985d28d3056685d5f76dc3942c9d (diff)
downloadllvm-0447ec2fb050eb37ed1f5991a1562dea6e228f9e.zip
llvm-0447ec2fb050eb37ed1f5991a1562dea6e228f9e.tar.gz
llvm-0447ec2fb050eb37ed1f5991a1562dea6e228f9e.tar.bz2
[clang-tidy] Fix LLVM include order check policy
Clang-format LLVM style has a custom include category for gtest/ and gmock/ headers between regular includes and angled includes. Do the same here. Fixes https://github.com/llvm/llvm-project/issues/53525. Differential Revision: https://reviews.llvm.org/D118913
Diffstat (limited to 'clang-tools-extra/unittests/clang-tidy/LLVMModuleTest.cpp')
-rw-r--r--clang-tools-extra/unittests/clang-tidy/LLVMModuleTest.cpp61
1 files changed, 47 insertions, 14 deletions
diff --git a/clang-tools-extra/unittests/clang-tidy/LLVMModuleTest.cpp b/clang-tools-extra/unittests/clang-tidy/LLVMModuleTest.cpp
index 2a3fae0..46a1600 100644
--- a/clang-tools-extra/unittests/clang-tidy/LLVMModuleTest.cpp
+++ b/clang-tools-extra/unittests/clang-tidy/LLVMModuleTest.cpp
@@ -1,4 +1,7 @@
+#include "ClangTidyOptions.h"
#include "ClangTidyTest.h"
+#include "llvm/ADT/ArrayRef.h"
+#include "llvm/ADT/StringRef.h"
#include "llvm/HeaderGuardCheck.h"
#include "llvm/IncludeOrderCheck.h"
#include "gtest/gtest.h"
@@ -9,11 +12,15 @@ namespace clang {
namespace tidy {
namespace test {
-static std::string runHeaderGuardCheck(StringRef Code, const Twine &Filename,
- Optional<StringRef> ExpectedWarning) {
+template <typename T>
+static std::string runCheck(StringRef Code, const Twine &Filename,
+ Optional<StringRef> ExpectedWarning,
+ std::map<StringRef, StringRef> PathsToContent =
+ std::map<StringRef, StringRef>()) {
std::vector<ClangTidyError> Errors;
- std::string Result = test::runCheckOnCode<LLVMHeaderGuardCheck>(
- Code, &Errors, Filename, std::string("-xc++-header"));
+ std::string Result = test::runCheckOnCode<T>(
+ Code, &Errors, Filename, std::string("-xc++-header"), ClangTidyOptions{},
+ std::move(PathsToContent));
if (Errors.size() != (size_t)ExpectedWarning.hasValue())
return "invalid error count";
if (ExpectedWarning && *ExpectedWarning != Errors.back().Message.Message)
@@ -22,27 +29,36 @@ static std::string runHeaderGuardCheck(StringRef Code, const Twine &Filename,
return Result;
}
+static std::string runHeaderGuardCheck(StringRef Code, const Twine &Filename,
+ Optional<StringRef> ExpectedWarning) {
+ return runCheck<LLVMHeaderGuardCheck>(Code, Filename,
+ std::move(ExpectedWarning));
+}
+
+static std::string
+runIncludeOrderCheck(StringRef Code, const Twine &Filename,
+ Optional<StringRef> ExpectedWarning,
+ llvm::ArrayRef<llvm::StringLiteral> Includes) {
+ std::map<StringRef, StringRef> PathsToContent;
+ for (auto Include : Includes)
+ PathsToContent.emplace(Include, "");
+ return runCheck<IncludeOrderCheck>(Code, Filename, std::move(ExpectedWarning),
+ PathsToContent);
+}
+
namespace {
struct WithEndifComment : public LLVMHeaderGuardCheck {
WithEndifComment(StringRef Name, ClangTidyContext *Context)
: LLVMHeaderGuardCheck(Name, Context) {}
bool shouldSuggestEndifComment(StringRef Filename) override { return true; }
};
-} // namespace
static std::string
runHeaderGuardCheckWithEndif(StringRef Code, const Twine &Filename,
Optional<StringRef> ExpectedWarning) {
- std::vector<ClangTidyError> Errors;
- std::string Result = test::runCheckOnCode<WithEndifComment>(
- Code, &Errors, Filename, std::string("-xc++-header"));
- if (Errors.size() != (size_t)ExpectedWarning.hasValue())
- return "invalid error count";
- if (ExpectedWarning && *ExpectedWarning != Errors.back().Message.Message)
- return "expected: '" + ExpectedWarning->str() + "', saw: '" +
- Errors.back().Message.Message + "'";
- return Result;
+ return runCheck<WithEndifComment>(Code, Filename, std::move(ExpectedWarning));
}
+} // namespace
TEST(LLVMHeaderGuardCheckTest, FixHeaderGuards) {
EXPECT_EQ("#ifndef LLVM_ADT_FOO_H\n"
@@ -270,6 +286,23 @@ TEST(LLVMHeaderGuardCheckTest, FixHeaderGuards) {
#endif
}
+TEST(IncludeOrderCheck, GTestHeaders) {
+ EXPECT_EQ(
+ R"cpp(
+ #include "foo.h"
+ #include "llvm/foo.h"
+ #include "gtest/foo.h"
+ #include <algorithm>)cpp",
+ runIncludeOrderCheck(
+ R"cpp(
+ #include "foo.h"
+ #include "llvm/foo.h"
+ #include <algorithm>
+ #include "gtest/foo.h")cpp",
+ "foo.cc", StringRef("#includes are not sorted properly"),
+ {"foo.h", "algorithm", "gtest/foo.h", "llvm/foo.h"}));
+}
+
} // namespace test
} // namespace tidy
} // namespace clang