diff options
author | Dimitry Andric <dim@FreeBSD.org> | 2019-01-19 10:04:05 +0000 |
---|---|---|
committer | Dimitry Andric <dim@FreeBSD.org> | 2019-01-19 10:04:05 +0000 |
commit | 676fbe8105eeb6ff4bb2ed261cb212fcfdbe7b63 (patch) | |
tree | 02a1ac369cb734d0abfa5000dd86e5b7797e6a74 /unittests/Tooling/RecursiveASTVisitorTests/TraversalScope.cpp | |
parent | c7e70c433efc6953dc3888b9fbf9f3512d7da2b0 (diff) |
Diffstat (limited to 'unittests/Tooling/RecursiveASTVisitorTests/TraversalScope.cpp')
-rw-r--r-- | unittests/Tooling/RecursiveASTVisitorTests/TraversalScope.cpp | 51 |
1 files changed, 51 insertions, 0 deletions
diff --git a/unittests/Tooling/RecursiveASTVisitorTests/TraversalScope.cpp b/unittests/Tooling/RecursiveASTVisitorTests/TraversalScope.cpp new file mode 100644 index 0000000000000..72f6c644b388a --- /dev/null +++ b/unittests/Tooling/RecursiveASTVisitorTests/TraversalScope.cpp @@ -0,0 +1,51 @@ +//===- unittest/Tooling/RecursiveASTVisitorTests/TraversalScope.cpp -------===// +// +// The LLVM Compiler Infrastructure +// +// This file is distributed under the University of Illinois Open Source +// License. See LICENSE.TXT for details. +// +//===----------------------------------------------------------------------===// + +#include "TestVisitor.h" + +using namespace clang; + +namespace { + +class Visitor : public ExpectedLocationVisitor<Visitor, clang::TestVisitor> { +public: + Visitor(ASTContext *Context) { this->Context = Context; } + + bool VisitNamedDecl(NamedDecl *D) { + if (!D->isImplicit()) + Match(D->getName(), D->getLocation()); + return true; + } +}; + +TEST(RecursiveASTVisitor, RespectsTraversalScope) { + auto AST = tooling::buildASTFromCode( + R"cpp( +struct foo { + struct bar { + struct baz {}; + }; +}; + )cpp", + "foo.cpp", std::make_shared<PCHContainerOperations>()); + auto &Ctx = AST->getASTContext(); + auto &TU = *Ctx.getTranslationUnitDecl(); + auto &Foo = *TU.lookup(&Ctx.Idents.get("foo")).front(); + auto &Bar = *cast<DeclContext>(Foo).lookup(&Ctx.Idents.get("bar")).front(); + + Ctx.setTraversalScope({&Bar}); + + Visitor V(&Ctx); + V.DisallowMatch("foo", 2, 8); + V.ExpectMatch("bar", 3, 10); + V.ExpectMatch("baz", 4, 12); + V.TraverseAST(Ctx); +} + +} // end anonymous namespace |