diff options
Diffstat (limited to 'clang/unittests/Frontend')
| -rw-r--r-- | clang/unittests/Frontend/FrontendActionTest.cpp | 74 | ||||
| -rw-r--r-- | clang/unittests/Frontend/Makefile | 19 | 
2 files changed, 93 insertions, 0 deletions
diff --git a/clang/unittests/Frontend/FrontendActionTest.cpp b/clang/unittests/Frontend/FrontendActionTest.cpp new file mode 100644 index 0000000..2d4befc --- /dev/null +++ b/clang/unittests/Frontend/FrontendActionTest.cpp @@ -0,0 +1,74 @@ +//===- unittests/Frontend/FrontendActionTest.cpp - FrontendAction tests ---===// +// +//                     The LLVM Compiler Infrastructure +// +// This file is distributed under the University of Illinois Open Source +// License. See LICENSE.TXT for details. +// +//===----------------------------------------------------------------------===// + +#include "clang/AST/RecursiveASTVisitor.h" +#include "clang/AST/ASTConsumer.h" +#include "clang/Frontend/CompilerInstance.h" +#include "clang/Frontend/CompilerInvocation.h" +#include "clang/Frontend/FrontendAction.h" + +#include "llvm/ADT/Triple.h" +#include "llvm/Support/MemoryBuffer.h" + +#include "gtest/gtest.h" + +using namespace llvm; +using namespace clang; + +namespace { + +class TestASTFrontendAction : public ASTFrontendAction { +public: +  std::vector<std::string> decl_names; + +  virtual ASTConsumer *CreateASTConsumer(CompilerInstance &CI, +                                         StringRef InFile) { +    return new Visitor(decl_names); +  } + +private: +  class Visitor : public ASTConsumer, public RecursiveASTVisitor<Visitor> { +  public: +    Visitor(std::vector<std::string> &decl_names) : decl_names_(decl_names) {} + +    virtual void HandleTranslationUnit(ASTContext &context) { +      TraverseDecl(context.getTranslationUnitDecl()); +    } + +    virtual bool VisitNamedDecl(NamedDecl *Decl) { +      decl_names_.push_back(Decl->getQualifiedNameAsString()); +      return true; +    } + +  private: +    std::vector<std::string> &decl_names_; +  }; +}; + +TEST(ASTFrontendAction, Sanity) { +  CompilerInvocation *invocation = new CompilerInvocation; +  invocation->getPreprocessorOpts().addRemappedFile( +    "test.cc", MemoryBuffer::getMemBuffer("int main() { float x; }")); +  invocation->getFrontendOpts().Inputs.push_back(FrontendInputFile("test.cc", +                                                                   IK_CXX)); +  invocation->getFrontendOpts().ProgramAction = frontend::ParseSyntaxOnly; +  invocation->getTargetOpts().Triple = "i386-unknown-linux-gnu"; +  CompilerInstance compiler; +  compiler.setInvocation(invocation); +  compiler.createDiagnostics(0, NULL); + +  TestASTFrontendAction test_action; +  ASSERT_TRUE(compiler.ExecuteAction(test_action)); +  ASSERT_EQ(3U, test_action.decl_names.size()); +  EXPECT_EQ("__builtin_va_list", test_action.decl_names[0]); +  EXPECT_EQ("main", test_action.decl_names[1]); +  EXPECT_EQ("x", test_action.decl_names[2]); +} + +} // anonymous namespace diff --git a/clang/unittests/Frontend/Makefile b/clang/unittests/Frontend/Makefile new file mode 100644 index 0000000..f3e6396 --- /dev/null +++ b/clang/unittests/Frontend/Makefile @@ -0,0 +1,19 @@ +##===- unittests/Frontend/Makefile -------------------------*- Makefile -*-===## +# +#                     The LLVM Compiler Infrastructure +# +# This file is distributed under the University of Illinois Open Source +# License. See LICENSE.TXT for details. +# +##===----------------------------------------------------------------------===## + +CLANG_LEVEL = ../.. +TESTNAME = Frontend +LINK_COMPONENTS := support mc +USEDLIBS = clangFrontendTool.a clangFrontend.a clangDriver.a \ +           clangSerialization.a clangCodeGen.a clangParse.a clangSema.a \ +           clangStaticAnalyzerCheckers.a clangStaticAnalyzerCore.a \ +           clangARCMigrate.a clangRewrite.a clangEdit.a \ +           clangAnalysis.a clangAST.a clangLex.a clangBasic.a + +include $(CLANG_LEVEL)/unittests/Makefile  | 
