summaryrefslogtreecommitdiffstats
path: root/clang-tools-extra/unittests/clang-tidy/TransformerClangTidyCheckTest.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'clang-tools-extra/unittests/clang-tidy/TransformerClangTidyCheckTest.cpp')
-rw-r--r--clang-tools-extra/unittests/clang-tidy/TransformerClangTidyCheckTest.cpp62
1 files changed, 59 insertions, 3 deletions
diff --git a/clang-tools-extra/unittests/clang-tidy/TransformerClangTidyCheckTest.cpp b/clang-tools-extra/unittests/clang-tidy/TransformerClangTidyCheckTest.cpp
index 6b8763810e9..6e42be25d5f 100644
--- a/clang-tools-extra/unittests/clang-tidy/TransformerClangTidyCheckTest.cpp
+++ b/clang-tools-extra/unittests/clang-tidy/TransformerClangTidyCheckTest.cpp
@@ -18,16 +18,16 @@ namespace clang {
namespace tidy {
namespace utils {
namespace {
+using tooling::change;
using tooling::RewriteRule;
+using tooling::text;
+using tooling::stencil::cat;
// Invert the code of an if-statement, while maintaining its semantics.
RewriteRule invertIf() {
using namespace ::clang::ast_matchers;
- using tooling::change;
using tooling::node;
using tooling::statement;
- using tooling::text;
- using tooling::stencil::cat;
StringRef C = "C", T = "T", E = "E";
RewriteRule Rule = tooling::makeRule(
@@ -65,6 +65,62 @@ TEST(TransformerClangTidyCheckTest, Basic) {
)";
EXPECT_EQ(Expected, test::runCheckOnCode<IfInverterCheck>(Input));
}
+
+// A trivial rewrite-rule generator that requires Objective-C code.
+Optional<RewriteRule> needsObjC(const LangOptions &LangOpts,
+ const ClangTidyCheck::OptionsView &Options) {
+ if (!LangOpts.ObjC)
+ return None;
+ return tooling::makeRule(clang::ast_matchers::functionDecl(),
+ change(cat("void changed() {}")), text("no message"));
+}
+
+class NeedsObjCCheck : public TransformerClangTidyCheck {
+public:
+ NeedsObjCCheck(StringRef Name, ClangTidyContext *Context)
+ : TransformerClangTidyCheck(needsObjC, Name, Context) {}
+};
+
+// Verify that the check only rewrites the code when the input is Objective-C.
+TEST(TransformerClangTidyCheckTest, DisableByLang) {
+ const std::string Input = "void log() {}";
+ EXPECT_EQ(Input,
+ test::runCheckOnCode<NeedsObjCCheck>(Input, nullptr, "input.cc"));
+
+ EXPECT_EQ("void changed() {}",
+ test::runCheckOnCode<NeedsObjCCheck>(Input, nullptr, "input.mm"));
+}
+
+// A trivial rewrite rule generator that checks config options.
+Optional<RewriteRule> noSkip(const LangOptions &LangOpts,
+ const ClangTidyCheck::OptionsView &Options) {
+ if (Options.get("Skip", "false") == "true")
+ return None;
+ return tooling::makeRule(clang::ast_matchers::functionDecl(),
+ change(cat("void nothing()")), text("no message"));
+}
+
+class ConfigurableCheck : public TransformerClangTidyCheck {
+public:
+ ConfigurableCheck(StringRef Name, ClangTidyContext *Context)
+ : TransformerClangTidyCheck(noSkip, Name, Context) {}
+};
+
+// Tests operation with config option "Skip" set to true and false.
+TEST(TransformerClangTidyCheckTest, DisableByConfig) {
+ const std::string Input = "void log(int);";
+ const std::string Expected = "void nothing();";
+ ClangTidyOptions Options;
+
+ Options.CheckOptions["test-check-0.Skip"] = "true";
+ EXPECT_EQ(Input, test::runCheckOnCode<ConfigurableCheck>(
+ Input, nullptr, "input.cc", None, Options));
+
+ Options.CheckOptions["test-check-0.Skip"] = "false";
+ EXPECT_EQ(Expected, test::runCheckOnCode<ConfigurableCheck>(
+ Input, nullptr, "input.cc", None, Options));
+}
+
} // namespace
} // namespace utils
} // namespace tidy
OpenPOWER on IntegriCloud