diff options
author | Alexander Kornienko <alexfh@google.com> | 2014-02-27 14:28:02 +0000 |
---|---|---|
committer | Alexander Kornienko <alexfh@google.com> | 2014-02-27 14:28:02 +0000 |
commit | 098871609f7a15b4992bd3ae5552b9d144ff38a1 (patch) | |
tree | fd48e9729d896778eeba61b08140bc1b9e4030ff | |
parent | 527aa5052d2816f13368a5c0b1465b7e413a8d0c (diff) | |
download | bcm5719-llvm-098871609f7a15b4992bd3ae5552b9d144ff38a1.tar.gz bcm5719-llvm-098871609f7a15b4992bd3ae5552b9d144ff38a1.zip |
Made the ClangTidyTest helper class independent of the testing framework.
Reviewers: klimek
Reviewed By: klimek
CC: cfe-commits
Differential Revision: http://llvm-reviews.chandlerc.com/D2895
llvm-svn: 202399
3 files changed, 59 insertions, 57 deletions
diff --git a/clang-tools-extra/unittests/clang-tidy/ClangTidyTest.h b/clang-tools-extra/unittests/clang-tidy/ClangTidyTest.h index 9cd8bcdd85f..1be5f82eac7 100644 --- a/clang-tools-extra/unittests/clang-tidy/ClangTidyTest.h +++ b/clang-tools-extra/unittests/clang-tidy/ClangTidyTest.h @@ -17,59 +17,53 @@ #include "clang/Frontend/FrontendActions.h" #include "clang/Tooling/Refactoring.h" #include "clang/Tooling/Tooling.h" -#include "gtest/gtest.h" namespace clang { namespace tidy { +namespace test { -template <typename T> class ClangTidyTest : public ::testing::Test { -protected: - ClangTidyTest() : Check(new T), Context(&Errors) {} - - std::string runCheckOn(StringRef Code) { - ClangTidyDiagnosticConsumer DiagConsumer(Context); - Check->setContext(&Context); - EXPECT_TRUE( - tooling::runToolOnCode(new TestPPAction(*Check, &Context), Code)); - ast_matchers::MatchFinder Finder; - Check->registerMatchers(&Finder); - OwningPtr<tooling::FrontendActionFactory> Factory( - tooling::newFrontendActionFactory(&Finder)); - EXPECT_TRUE(tooling::runToolOnCode(Factory->create(), Code)); - DiagConsumer.finish(); - tooling::Replacements Fixes; - for (SmallVector<ClangTidyError, 16>::const_iterator I = Errors.begin(), - E = Errors.end(); - I != E; ++I) - Fixes.insert(I->Fix.begin(), I->Fix.end()); - return tooling::applyAllReplacements(Code, Fixes); - } - - void expectNoChanges(StringRef Code) { EXPECT_EQ(Code, runCheckOn(Code)); } +class TestPPAction : public PreprocessOnlyAction { +public: + TestPPAction(ClangTidyCheck &Check, ClangTidyContext *Context) + : Check(Check), Context(Context) {} private: - class TestPPAction : public PreprocessOnlyAction { - public: - TestPPAction(ClangTidyCheck &Check, ClangTidyContext *Context) - : Check(Check), Context(Context) {} - - private: - virtual bool BeginSourceFileAction(CompilerInstance &Compiler, - llvm::StringRef file_name) { - Context->setSourceManager(&Compiler.getSourceManager()); - Check.registerPPCallbacks(Compiler); - return true; - } + bool BeginSourceFileAction(CompilerInstance &Compiler, + llvm::StringRef file_name) LLVM_OVERRIDE { + Context->setSourceManager(&Compiler.getSourceManager()); + Check.registerPPCallbacks(Compiler); + return true; + } - ClangTidyCheck &Check; - ClangTidyContext *Context; - }; + ClangTidyCheck &Check; + ClangTidyContext *Context; +}; - OwningPtr<ClangTidyCheck> Check; +template <typename T> std::string runCheckOnCode(StringRef Code) { + T Check; SmallVector<ClangTidyError, 16> Errors; - ClangTidyContext Context; -}; + ClangTidyContext Context(&Errors); + ClangTidyDiagnosticConsumer DiagConsumer(Context); + Check.setContext(&Context); + + if (!tooling::runToolOnCode(new TestPPAction(Check, &Context), Code)) + return ""; + ast_matchers::MatchFinder Finder; + Check.registerMatchers(&Finder); + OwningPtr<tooling::FrontendActionFactory> Factory( + tooling::newFrontendActionFactory(&Finder)); + if (!tooling::runToolOnCode(Factory->create(), Code)) + return ""; + DiagConsumer.finish(); + tooling::Replacements Fixes; + for (SmallVector<ClangTidyError, 16>::const_iterator I = Errors.begin(), + E = Errors.end(); + I != E; ++I) + Fixes.insert(I->Fix.begin(), I->Fix.end()); + return tooling::applyAllReplacements(Code, Fixes); +} +} // namespace test } // namespace tidy } // namespace clang diff --git a/clang-tools-extra/unittests/clang-tidy/GoogleModuleTest.cpp b/clang-tools-extra/unittests/clang-tidy/GoogleModuleTest.cpp index 48433f4fbd8..476ab39fe23 100644 --- a/clang-tools-extra/unittests/clang-tidy/GoogleModuleTest.cpp +++ b/clang-tools-extra/unittests/clang-tidy/GoogleModuleTest.cpp @@ -1,30 +1,36 @@ #include "ClangTidyTest.h" #include "google/GoogleTidyModule.h" +#include "gtest/gtest.h" namespace clang { namespace tidy { +namespace test { -typedef ClangTidyTest<ExplicitConstructorCheck> ExplicitConstructorCheckTest; +#define EXPECT_NO_CHANGES(Check, Code) \ + EXPECT_EQ(Code, runCheckOnCode<Check>(Code)) -TEST_F(ExplicitConstructorCheckTest, SingleArgumentConstructorsOnly) { - expectNoChanges("class C { C(); };"); - expectNoChanges("class C { C(int i, int j); };"); +TEST(ExplicitConstructorCheckTest, SingleArgumentConstructorsOnly) { + EXPECT_NO_CHANGES(ExplicitConstructorCheck, "class C { C(); };"); + EXPECT_NO_CHANGES(ExplicitConstructorCheck, "class C { C(int i, int j); };"); } -TEST_F(ExplicitConstructorCheckTest, Basic) { +TEST(ExplicitConstructorCheckTest, Basic) { EXPECT_EQ("class C { explicit C(int i); };", - runCheckOn("class C { C(int i); };")); + runCheckOnCode<ExplicitConstructorCheck>("class C { C(int i); };")); } -TEST_F(ExplicitConstructorCheckTest, DefaultParameters) { +TEST(ExplicitConstructorCheckTest, DefaultParameters) { EXPECT_EQ("class C { explicit C(int i, int j = 0); };", - runCheckOn("class C { C(int i, int j = 0); };")); + runCheckOnCode<ExplicitConstructorCheck>( + "class C { C(int i, int j = 0); };")); } -TEST_F(ExplicitConstructorCheckTest, OutOfLineDefinitions) { +TEST(ExplicitConstructorCheckTest, OutOfLineDefinitions) { EXPECT_EQ("class C { explicit C(int i); }; C::C(int i) {}", - runCheckOn("class C { C(int i); }; C::C(int i) {}")); + runCheckOnCode<ExplicitConstructorCheck>( + "class C { C(int i); }; C::C(int i) {}")); } +} // namespace test } // namespace tidy } // namespace clang diff --git a/clang-tools-extra/unittests/clang-tidy/LLVMModuleTest.cpp b/clang-tools-extra/unittests/clang-tidy/LLVMModuleTest.cpp index 4de31aa72de..e69616499c0 100644 --- a/clang-tools-extra/unittests/clang-tidy/LLVMModuleTest.cpp +++ b/clang-tools-extra/unittests/clang-tidy/LLVMModuleTest.cpp @@ -1,14 +1,16 @@ #include "ClangTidyTest.h" #include "llvm/LLVMTidyModule.h" +#include "gtest/gtest.h" namespace clang { namespace tidy { +namespace test { -typedef ClangTidyTest<NamespaceCommentCheck> NamespaceCommentCheckTest; - -TEST_F(NamespaceCommentCheckTest, Basic) { - EXPECT_EQ("namespace i {\n} // namespace i", runCheckOn("namespace i {\n}")); +TEST(NamespaceCommentCheckTest, Basic) { + EXPECT_EQ("namespace i {\n} // namespace i", + runCheckOnCode<NamespaceCommentCheck>("namespace i {\n}")); } +} // namespace test } // namespace tidy } // namespace clang |