Clang Project

clang_source_code/unittests/Tooling/RewriterTest.cpp
1//===- unittest/Tooling/RewriterTest.cpp ----------------------------------===//
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 "RewriterTestContext.h"
10#include "clang/Tooling/Core/Replacement.h"
11#include "gtest/gtest.h"
12
13namespace clang {
14namespace tooling {
15namespace {
16
17TEST(Rewriter, OverwritesChangedFiles) {
18  RewriterTestContext Context;
19  FileID ID = Context.createOnDiskFile("t.cpp""line1\nline2\nline3\nline4");
20  Context.Rewrite.ReplaceText(Context.getLocation(ID21), 5"replaced");
21  EXPECT_FALSE(Context.Rewrite.overwriteChangedFiles());
22  EXPECT_EQ("line1\nreplaced\nline3\nline4",
23            Context.getFileContentFromDisk("t.cpp")); 
24}
25
26TEST(Rewriter, ContinuesOverwritingFilesOnError) {
27  RewriterTestContext Context;
28  FileID FailingID = Context.createInMemoryFile("invalid/failing.cpp""test");
29  Context.Rewrite.ReplaceText(Context.getLocation(FailingID12), 1"other");
30  FileID WorkingID = Context.createOnDiskFile(
31    "working.cpp""line1\nline2\nline3\nline4");
32  Context.Rewrite.ReplaceText(Context.getLocation(WorkingID21), 5,
33                              "replaced");
34  EXPECT_TRUE(Context.Rewrite.overwriteChangedFiles());
35  EXPECT_EQ("line1\nreplaced\nline3\nline4",
36            Context.getFileContentFromDisk("working.cpp")); 
37}
38
39TEST(Rewriter, AdjacentInsertAndDelete) {
40  Replacements Replaces;
41  auto Err = Replaces.add(Replacement("<file>"66""));
42  EXPECT_TRUE(!Err);
43  Replaces =
44      Replaces.merge(Replacements(Replacement("<file>"60"replaced\n")));
45
46  auto Rewritten = applyAllReplacements("line1\nline2\nline3\nline4"Replaces);
47  EXPECT_TRUE(static_cast<bool>(Rewritten));
48  EXPECT_EQ("line1\nreplaced\nline3\nline4", *Rewritten);
49}
50
51// end namespace
52// end namespace tooling
53// end namespace clang
54