FrontendActionTest.cpp revision 1050e8b2252d89a0004a6fd25a58dab88b5ee625
1//===- unittests/Frontend/FrontendActionTest.cpp - FrontendAction tests ---===// 2// 3// The LLVM Compiler Infrastructure 4// 5// This file is distributed under the University of Illinois Open Source 6// License. See LICENSE.TXT for details. 7// 8//===----------------------------------------------------------------------===// 9 10#include "clang/Frontend/FrontendAction.h" 11#include "clang/AST/RecursiveASTVisitor.h" 12#include "clang/AST/ASTConsumer.h" 13#include "clang/AST/ASTContext.h" 14#include "clang/Frontend/CompilerInstance.h" 15#include "clang/Frontend/CompilerInvocation.h" 16#include "llvm/ADT/Triple.h" 17#include "llvm/Support/MemoryBuffer.h" 18#include "gtest/gtest.h" 19 20using namespace llvm; 21using namespace clang; 22 23namespace { 24 25class TestASTFrontendAction : public ASTFrontendAction { 26public: 27 std::vector<std::string> decl_names; 28 29 virtual ASTConsumer *CreateASTConsumer(CompilerInstance &CI, 30 StringRef InFile) { 31 return new Visitor(decl_names); 32 } 33 34private: 35 class Visitor : public ASTConsumer, public RecursiveASTVisitor<Visitor> { 36 public: 37 Visitor(std::vector<std::string> &decl_names) : decl_names_(decl_names) {} 38 39 virtual void HandleTranslationUnit(ASTContext &context) { 40 TraverseDecl(context.getTranslationUnitDecl()); 41 } 42 43 virtual bool VisitNamedDecl(NamedDecl *Decl) { 44 decl_names_.push_back(Decl->getQualifiedNameAsString()); 45 return true; 46 } 47 48 private: 49 std::vector<std::string> &decl_names_; 50 }; 51}; 52 53TEST(ASTFrontendAction, Sanity) { 54 CompilerInvocation *invocation = new CompilerInvocation; 55 invocation->getPreprocessorOpts().addRemappedFile( 56 "test.cc", MemoryBuffer::getMemBuffer("int main() { float x; }")); 57 invocation->getFrontendOpts().Inputs.push_back(FrontendInputFile("test.cc", 58 IK_CXX)); 59 invocation->getFrontendOpts().ProgramAction = frontend::ParseSyntaxOnly; 60 invocation->getTargetOpts().Triple = "i386-unknown-linux-gnu"; 61 CompilerInstance compiler; 62 compiler.setInvocation(invocation); 63 compiler.createDiagnostics(0, NULL); 64 65 TestASTFrontendAction test_action; 66 ASSERT_TRUE(compiler.ExecuteAction(test_action)); 67 ASSERT_EQ(3U, test_action.decl_names.size()); 68 EXPECT_EQ("__builtin_va_list", test_action.decl_names[0]); 69 EXPECT_EQ("main", test_action.decl_names[1]); 70 EXPECT_EQ("x", test_action.decl_names[2]); 71} 72 73} // anonymous namespace 74