13ea9e33ea25e0c2b12db56418ba3f994eb662c04Pirama Arumuga Nainar//===- unittests/Rewrite/RewriteBufferTest.cpp - RewriteBuffer tests ------===//
23ea9e33ea25e0c2b12db56418ba3f994eb662c04Pirama Arumuga Nainar//
33ea9e33ea25e0c2b12db56418ba3f994eb662c04Pirama Arumuga Nainar//                     The LLVM Compiler Infrastructure
43ea9e33ea25e0c2b12db56418ba3f994eb662c04Pirama Arumuga Nainar//
53ea9e33ea25e0c2b12db56418ba3f994eb662c04Pirama Arumuga Nainar// This file is distributed under the University of Illinois Open Source
63ea9e33ea25e0c2b12db56418ba3f994eb662c04Pirama Arumuga Nainar// License. See LICENSE.TXT for details.
73ea9e33ea25e0c2b12db56418ba3f994eb662c04Pirama Arumuga Nainar//
83ea9e33ea25e0c2b12db56418ba3f994eb662c04Pirama Arumuga Nainar//===----------------------------------------------------------------------===//
93ea9e33ea25e0c2b12db56418ba3f994eb662c04Pirama Arumuga Nainar
103ea9e33ea25e0c2b12db56418ba3f994eb662c04Pirama Arumuga Nainar#include "clang/Rewrite/Core/RewriteBuffer.h"
113ea9e33ea25e0c2b12db56418ba3f994eb662c04Pirama Arumuga Nainar#include "gtest/gtest.h"
123ea9e33ea25e0c2b12db56418ba3f994eb662c04Pirama Arumuga Nainar
133ea9e33ea25e0c2b12db56418ba3f994eb662c04Pirama Arumuga Nainarusing namespace llvm;
143ea9e33ea25e0c2b12db56418ba3f994eb662c04Pirama Arumuga Nainarusing namespace clang;
153ea9e33ea25e0c2b12db56418ba3f994eb662c04Pirama Arumuga Nainar
163ea9e33ea25e0c2b12db56418ba3f994eb662c04Pirama Arumuga Nainarnamespace {
173ea9e33ea25e0c2b12db56418ba3f994eb662c04Pirama Arumuga Nainar
183ea9e33ea25e0c2b12db56418ba3f994eb662c04Pirama Arumuga Nainarstatic void tagRange(unsigned Offset, unsigned Len, StringRef tagName,
193ea9e33ea25e0c2b12db56418ba3f994eb662c04Pirama Arumuga Nainar                     RewriteBuffer &Buf) {
203ea9e33ea25e0c2b12db56418ba3f994eb662c04Pirama Arumuga Nainar  std::string BeginTag;
213ea9e33ea25e0c2b12db56418ba3f994eb662c04Pirama Arumuga Nainar  raw_string_ostream(BeginTag) << '<' << tagName << '>';
223ea9e33ea25e0c2b12db56418ba3f994eb662c04Pirama Arumuga Nainar  std::string EndTag;
233ea9e33ea25e0c2b12db56418ba3f994eb662c04Pirama Arumuga Nainar  raw_string_ostream(EndTag) << "</" << tagName << '>';
243ea9e33ea25e0c2b12db56418ba3f994eb662c04Pirama Arumuga Nainar
253ea9e33ea25e0c2b12db56418ba3f994eb662c04Pirama Arumuga Nainar  Buf.InsertTextAfter(Offset, BeginTag);
263ea9e33ea25e0c2b12db56418ba3f994eb662c04Pirama Arumuga Nainar  Buf.InsertTextBefore(Offset+Len, EndTag);
273ea9e33ea25e0c2b12db56418ba3f994eb662c04Pirama Arumuga Nainar}
283ea9e33ea25e0c2b12db56418ba3f994eb662c04Pirama Arumuga Nainar
293ea9e33ea25e0c2b12db56418ba3f994eb662c04Pirama Arumuga NainarTEST(RewriteBuffer, TagRanges) {
303ea9e33ea25e0c2b12db56418ba3f994eb662c04Pirama Arumuga Nainar  StringRef Input = "hello world";
313ea9e33ea25e0c2b12db56418ba3f994eb662c04Pirama Arumuga Nainar  const char *Output = "<outer><inner>hello</inner></outer> ";
323ea9e33ea25e0c2b12db56418ba3f994eb662c04Pirama Arumuga Nainar
333ea9e33ea25e0c2b12db56418ba3f994eb662c04Pirama Arumuga Nainar  RewriteBuffer Buf;
343ea9e33ea25e0c2b12db56418ba3f994eb662c04Pirama Arumuga Nainar  Buf.Initialize(Input);
353ea9e33ea25e0c2b12db56418ba3f994eb662c04Pirama Arumuga Nainar  StringRef RemoveStr = "world";
363ea9e33ea25e0c2b12db56418ba3f994eb662c04Pirama Arumuga Nainar  size_t Pos = Input.find(RemoveStr);
373ea9e33ea25e0c2b12db56418ba3f994eb662c04Pirama Arumuga Nainar  Buf.RemoveText(Pos, RemoveStr.size());
383ea9e33ea25e0c2b12db56418ba3f994eb662c04Pirama Arumuga Nainar
393ea9e33ea25e0c2b12db56418ba3f994eb662c04Pirama Arumuga Nainar  StringRef TagStr = "hello";
403ea9e33ea25e0c2b12db56418ba3f994eb662c04Pirama Arumuga Nainar  Pos = Input.find(TagStr);
413ea9e33ea25e0c2b12db56418ba3f994eb662c04Pirama Arumuga Nainar  tagRange(Pos, TagStr.size(), "outer", Buf);
423ea9e33ea25e0c2b12db56418ba3f994eb662c04Pirama Arumuga Nainar  tagRange(Pos, TagStr.size(), "inner", Buf);
433ea9e33ea25e0c2b12db56418ba3f994eb662c04Pirama Arumuga Nainar
443ea9e33ea25e0c2b12db56418ba3f994eb662c04Pirama Arumuga Nainar  std::string Result;
453ea9e33ea25e0c2b12db56418ba3f994eb662c04Pirama Arumuga Nainar  raw_string_ostream OS(Result);
463ea9e33ea25e0c2b12db56418ba3f994eb662c04Pirama Arumuga Nainar  Buf.write(OS);
473ea9e33ea25e0c2b12db56418ba3f994eb662c04Pirama Arumuga Nainar  OS.flush();
483ea9e33ea25e0c2b12db56418ba3f994eb662c04Pirama Arumuga Nainar  EXPECT_EQ(Output, Result);
493ea9e33ea25e0c2b12db56418ba3f994eb662c04Pirama Arumuga Nainar}
503ea9e33ea25e0c2b12db56418ba3f994eb662c04Pirama Arumuga Nainar
513ea9e33ea25e0c2b12db56418ba3f994eb662c04Pirama Arumuga Nainar} // anonymous namespace
52