r203525 - Add a unittest for the ExternalASTSource.
David Blaikie
dblaikie at gmail.com
Mon Mar 10 23:56:07 PDT 2014
On Mon, Mar 10, 2014 at 6:18 PM, Richard Smith
<richard-llvm at metafoo.co.uk> wrote:
> Author: rsmith
> Date: Mon Mar 10 20:18:47 2014
> New Revision: 203525
>
> URL: http://llvm.org/viewvc/llvm-project?rev=203525&view=rev
> Log:
> Add a unittest for the ExternalASTSource.
>
> Added:
> cfe/trunk/unittests/AST/ExternalASTSourceTest.cpp
> Modified:
> cfe/trunk/unittests/AST/CMakeLists.txt
>
> Modified: cfe/trunk/unittests/AST/CMakeLists.txt
> URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/unittests/AST/CMakeLists.txt?rev=203525&r1=203524&r2=203525&view=diff
> ==============================================================================
> --- cfe/trunk/unittests/AST/CMakeLists.txt (original)
> +++ cfe/trunk/unittests/AST/CMakeLists.txt Mon Mar 10 20:18:47 2014
> @@ -10,6 +10,7 @@ add_clang_unittest(ASTTests
> CommentParser.cpp
> DeclPrinterTest.cpp
> DeclTest.cpp
> + ExternalASTSourceTest.cpp
> SourceLocationTest.cpp
> StmtPrinterTest.cpp
> )
>
> Added: cfe/trunk/unittests/AST/ExternalASTSourceTest.cpp
> URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/unittests/AST/ExternalASTSourceTest.cpp?rev=203525&view=auto
> ==============================================================================
> --- cfe/trunk/unittests/AST/ExternalASTSourceTest.cpp (added)
> +++ cfe/trunk/unittests/AST/ExternalASTSourceTest.cpp Mon Mar 10 20:18:47 2014
> @@ -0,0 +1,83 @@
> +//===- unittest/AST/ExternalASTSourceTest.cpp -----------------------------===//
> +//
> +// The LLVM Compiler Infrastructure
> +//
> +// This file is distributed under the University of Illinois Open Source
> +// License. See LICENSE.TXT for details.
> +//
> +//===----------------------------------------------------------------------===//
> +//
> +// This file contains tests for Clang's ExternalASTSource.
> +//
> +//===----------------------------------------------------------------------===//
> +
> +#include "clang/AST/ASTConsumer.h"
> +#include "clang/AST/ASTContext.h"
> +#include "clang/AST/ExternalASTSource.h"
> +#include "clang/Frontend/CompilerInstance.h"
> +#include "clang/Frontend/CompilerInvocation.h"
> +#include "clang/Frontend/FrontendActions.h"
> +#include "gtest/gtest.h"
> +
> +using namespace clang;
> +using namespace llvm;
> +
> +
> +class TestFrontendAction : public ASTFrontendAction {
> +public:
> + TestFrontendAction(ExternalASTSource *Source) : Source(Source) {}
> +
> +private:
> + virtual void ExecuteAction() {
> + getCompilerInstance().getASTContext().setExternalSource(Source);
> + getCompilerInstance().getASTContext().getTranslationUnitDecl()
> + ->setHasExternalVisibleStorage();
> + return ASTFrontendAction::ExecuteAction();
> + }
> +
> + virtual ASTConsumer *CreateASTConsumer(CompilerInstance &CI,
> + StringRef InFile) {
> + return new ASTConsumer;
> + }
> +
> + IntrusiveRefCntPtr<ExternalASTSource> Source;
> +};
> +
> +bool testExternalASTSource(ExternalASTSource *Source,
> + StringRef FileContents) {
> + CompilerInstance Compiler;
> + Compiler.createDiagnostics();
> +
> + CompilerInvocation *Invocation = new CompilerInvocation;
> + Invocation->getPreprocessorOpts().addRemappedFile(
> + "test.cc", MemoryBuffer::getMemBuffer(FileContents));
> + const char *Args[] = { "test.cc" };
> + CompilerInvocation::CreateFromArgs(*Invocation, Args,
> + Args + array_lengthof(Args),
> + Compiler.getDiagnostics());
> + Compiler.setInvocation(Invocation);
> +
> + TestFrontendAction Action(Source);
> + return Compiler.ExecuteAction(Action);
> +}
> +
> +
> +// Ensure that a failed name lookup into an external source only occurs once.
> +TEST(ExternalASTSourceTest, FailedLookupOccursOnce) {
> + struct TestSource : ExternalASTSource {
> + TestSource(unsigned &Calls) : Calls(Calls) {}
> +
> + bool FindExternalVisibleDeclsByName(const DeclContext*,
> + DeclarationName Name) {
> + if (Name.getAsString() == "j")
> + ++Calls;
> + return false;
> + }
> +
> + unsigned &Calls;
> + };
> +
> + unsigned Calls;
Use of uninitialized variable, Calls, fixed in r203545.
> + ASSERT_TRUE(testExternalASTSource(new TestSource(Calls), "int j, k = j;"));
> + EXPECT_EQ(1u, Calls);
> +}
>
>
> _______________________________________________
> cfe-commits mailing list
> cfe-commits at cs.uiuc.edu
> http://lists.cs.uiuc.edu/mailman/listinfo/cfe-commits
More information about the cfe-commits
mailing list