diff options
| author | Manuel Klimek <klimek@google.com> | 2013-06-04 14:44:44 +0000 |
|---|---|---|
| committer | Manuel Klimek <klimek@google.com> | 2013-06-04 14:44:44 +0000 |
| commit | d91ac930874389fa2e906d8bcd2456136defd0be (patch) | |
| tree | 4c318cc29af5727e10075ce695a88ef9014e60c6 /clang/unittests/Tooling/ToolingTest.cpp | |
| parent | a5e536ab0e785dc6fcff76420b65fa592d29b7e0 (diff) | |
| download | bcm5719-llvm-d91ac930874389fa2e906d8bcd2456136defd0be.tar.gz bcm5719-llvm-d91ac930874389fa2e906d8bcd2456136defd0be.zip | |
Enables chaining of argument adjusters in clang tools.
This enables changing clang-check to get extra arguments.
Patch by Pavel Labath.
llvm-svn: 183227
Diffstat (limited to 'clang/unittests/Tooling/ToolingTest.cpp')
| -rw-r--r-- | clang/unittests/Tooling/ToolingTest.cpp | 41 |
1 files changed, 41 insertions, 0 deletions
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<std::string>()); + + ClangTool Tool(Compilations, std::vector<std::string>(1, "/a.cc")); + Tool.mapVirtualFile("/a.cc", "void a() {}"); + + bool Found = false; + bool Ran = false; + Tool.appendArgumentsAdjuster(new CheckSyntaxOnlyAdjuster(Found, Ran)); + Tool.run(newFrontendActionFactory<SyntaxOnlyAction>()); + EXPECT_TRUE(Ran); + EXPECT_TRUE(Found); + + Ran = Found = false; + Tool.clearArgumentsAdjusters(); + Tool.appendArgumentsAdjuster(new CheckSyntaxOnlyAdjuster(Found, Ran)); + Tool.appendArgumentsAdjuster(new ClangSyntaxOnlyAdjuster()); + Tool.run(newFrontendActionFactory<SyntaxOnlyAction>()); + EXPECT_TRUE(Ran); + EXPECT_FALSE(Found); +} + } // end namespace tooling } // end namespace clang |

