blob: 0c9cbf2eb4a8b23b2f5ef0a39a7f8c2bd1f853e9 [file] [log] [blame]
David Zarzyckid488daa2018-04-19 18:19:02 +00001//===- unittest/Tooling/RecursiveASTVisitorTests/TemplateArgumentLocTraverser.cpp -===//
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 "TestVisitor.h"
11
12using namespace clang;
13
14namespace {
15
16class TemplateArgumentLocTraverser
17 : public ExpectedLocationVisitor<TemplateArgumentLocTraverser> {
18public:
19 bool TraverseTemplateArgumentLoc(const TemplateArgumentLoc &ArgLoc) {
20 std::string ArgStr;
21 llvm::raw_string_ostream Stream(ArgStr);
22 const TemplateArgument &Arg = ArgLoc.getArgument();
23
24 Arg.print(Context->getPrintingPolicy(), Stream);
25 Match(Stream.str(), ArgLoc.getLocation());
26 return ExpectedLocationVisitor<TemplateArgumentLocTraverser>::
27 TraverseTemplateArgumentLoc(ArgLoc);
28 }
29};
30
31TEST(RecursiveASTVisitor, VisitsClassTemplateTemplateParmDefaultArgument) {
32 TemplateArgumentLocTraverser Visitor;
33 Visitor.ExpectMatch("X", 2, 40);
34 EXPECT_TRUE(Visitor.runOver(
35 "template<typename T> class X;\n"
36 "template<template <typename> class T = X> class Y;\n"
37 "template<template <typename> class T> class Y {};\n"));
38}
39
40} // end anonymous namespace