//===- unittest/Tooling/RecursiveASTVisitorTestExprVisitor.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 ParenExprVisitor : public ExpectedLocationVisitor { public: bool VisitParenExpr(ParenExpr *Parens) { Match("", Parens->getExprLoc()); return true; } }; TEST(RecursiveASTVisitor, VisitsParensDuringDataRecursion) { ParenExprVisitor Visitor; Visitor.ExpectMatch("", 1, 9); EXPECT_TRUE(Visitor.runOver("int k = (4) + 9;\n")); } class TemplateArgumentLocTraverser : public ExpectedLocationVisitor { public: bool TraverseTemplateArgumentLoc(const TemplateArgumentLoc &ArgLoc) { std::string ArgStr; llvm::raw_string_ostream Stream(ArgStr); const TemplateArgument &Arg = ArgLoc.getArgument(); Arg.print(Context->getPrintingPolicy(), Stream); Match(Stream.str(), ArgLoc.getLocation()); return ExpectedLocationVisitor:: TraverseTemplateArgumentLoc(ArgLoc); } }; TEST(RecursiveASTVisitor, VisitsClassTemplateTemplateParmDefaultArgument) { TemplateArgumentLocTraverser Visitor; Visitor.ExpectMatch("X", 2, 40); EXPECT_TRUE(Visitor.runOver( "template class X;\n" "template