1 //===- unittests/Rewrite/RewriteBufferTest.cpp - RewriteBuffer tests ------===// 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 "clang/Rewrite/Core/RewriteBuffer.h" 11 #include "gtest/gtest.h" 12 13 using namespace llvm; 14 using namespace clang; 15 16 namespace { 17 18 static void tagRange(unsigned Offset, unsigned Len, StringRef tagName, 19 RewriteBuffer &Buf) { 20 std::string BeginTag; 21 raw_string_ostream(BeginTag) << '<' << tagName << '>'; 22 std::string EndTag; 23 raw_string_ostream(EndTag) << "</" << tagName << '>'; 24 25 Buf.InsertTextAfter(Offset, BeginTag); 26 Buf.InsertTextBefore(Offset+Len, EndTag); 27 } 28 29 TEST(RewriteBuffer, TagRanges) { 30 StringRef Input = "hello world"; 31 const char *Output = "<outer><inner>hello</inner></outer> "; 32 33 RewriteBuffer Buf; 34 Buf.Initialize(Input); 35 StringRef RemoveStr = "world"; 36 size_t Pos = Input.find(RemoveStr); 37 Buf.RemoveText(Pos, RemoveStr.size()); 38 39 StringRef TagStr = "hello"; 40 Pos = Input.find(TagStr); 41 tagRange(Pos, TagStr.size(), "outer", Buf); 42 tagRange(Pos, TagStr.size(), "inner", Buf); 43 44 std::string Result; 45 raw_string_ostream OS(Result); 46 Buf.write(OS); 47 OS.flush(); 48 EXPECT_EQ(Output, Result); 49 } 50 51 } // anonymous namespace 52