Clang Project

clang_source_code/unittests/Rewrite/RewriteBufferTest.cpp
1//===- unittests/Rewrite/RewriteBufferTest.cpp - RewriteBuffer tests ------===//
2//
3// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
4// See https://llvm.org/LICENSE.txt for license information.
5// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
6//
7//===----------------------------------------------------------------------===//
8
9#include "clang/Rewrite/Core/RewriteBuffer.h"
10#include "gtest/gtest.h"
11
12using namespace llvm;
13using namespace clang;
14
15namespace {
16
17static void tagRange(unsigned Offsetunsigned LenStringRef tagName,
18                     RewriteBuffer &Buf) {
19  std::string BeginTag;
20  raw_string_ostream(BeginTag) << '<' << tagName << '>';
21  std::string EndTag;
22  raw_string_ostream(EndTag) << "</" << tagName << '>';
23
24  Buf.InsertTextAfter(OffsetBeginTag);
25  Buf.InsertTextBefore(Offset+LenEndTag);
26}
27
28TEST(RewriteBuffer, TagRanges) {
29  StringRef Input = "hello world";
30  const char *Output = "<outer><inner>hello</inner></outer> ";
31
32  RewriteBuffer Buf;
33  Buf.Initialize(Input);
34  StringRef RemoveStr = "world";
35  size_t Pos = Input.find(RemoveStr);
36  Buf.RemoveText(Pos, RemoveStr.size());
37
38  StringRef TagStr = "hello";
39  Pos = Input.find(TagStr);
40  tagRange(Pos, TagStr.size(), "outer", Buf);
41  tagRange(Pos, TagStr.size(), "inner", Buf);
42
43  std::string Result;
44  raw_string_ostream OS(Result);
45  Buf.write(OS);
46  OS.flush();
47  EXPECT_EQ(OutputResult);
48}
49
50// anonymous namespace
51