From d91ac930874389fa2e906d8bcd2456136defd0be Mon Sep 17 00:00:00 2001 From: Manuel Klimek Date: Tue, 4 Jun 2013 14:44:44 +0000 Subject: Enables chaining of argument adjusters in clang tools. This enables changing clang-check to get extra arguments. Patch by Pavel Labath. llvm-svn: 183227 --- clang/unittests/Tooling/ToolingTest.cpp | 41 +++++++++++++++++++++++++++++++++ 1 file changed, 41 insertions(+) (limited to 'clang/unittests/Tooling/ToolingTest.cpp') diff --git a/clang/unittests/Tooling/ToolingTest.cpp b/clang/unittests/Tooling/ToolingTest.cpp index d96366dcd58..e435ea92e23 100644 --- a/clang/unittests/Tooling/ToolingTest.cpp +++ b/clang/unittests/Tooling/ToolingTest.cpp @@ -193,5 +193,46 @@ TEST(runToolOnCode, TestSkipFunctionBody) { "int skipMeNot() { an_error_here }")); } +struct CheckSyntaxOnlyAdjuster: public ArgumentsAdjuster { + bool &Found; + bool &Ran; + + CheckSyntaxOnlyAdjuster(bool &Found, bool &Ran) : Found(Found), Ran(Ran) { } + + virtual CommandLineArguments + Adjust(const CommandLineArguments &Args) LLVM_OVERRIDE { + Ran = true; + for (unsigned I = 0, E = Args.size(); I != E; ++I) { + if (Args[I] == "-fsyntax-only") { + Found = true; + break; + } + } + return Args; + } +}; + +TEST(ClangToolTest, ArgumentAdjusters) { + FixedCompilationDatabase Compilations("/", std::vector()); + + ClangTool Tool(Compilations, std::vector(1, "/a.cc")); + Tool.mapVirtualFile("/a.cc", "void a() {}"); + + bool Found = false; + bool Ran = false; + Tool.appendArgumentsAdjuster(new CheckSyntaxOnlyAdjuster(Found, Ran)); + Tool.run(newFrontendActionFactory()); + EXPECT_TRUE(Ran); + EXPECT_TRUE(Found); + + Ran = Found = false; + Tool.clearArgumentsAdjusters(); + Tool.appendArgumentsAdjuster(new CheckSyntaxOnlyAdjuster(Found, Ran)); + Tool.appendArgumentsAdjuster(new ClangSyntaxOnlyAdjuster()); + Tool.run(newFrontendActionFactory()); + EXPECT_TRUE(Ran); + EXPECT_FALSE(Found); +} + } // end namespace tooling } // end namespace clang -- cgit v1.2.3