xref: /llvm-project/clang/unittests/Tooling/RewriterTest.cpp (revision 2946cd701067404b99c39fb29dc9c74bd7193eb3)
178d084d9SManuel Klimek //===- unittest/Tooling/RewriterTest.cpp ----------------------------------===//
278d084d9SManuel Klimek //
3*2946cd70SChandler Carruth // Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
4*2946cd70SChandler Carruth // See https://llvm.org/LICENSE.txt for license information.
5*2946cd70SChandler Carruth // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
678d084d9SManuel Klimek //
778d084d9SManuel Klimek //===----------------------------------------------------------------------===//
878d084d9SManuel Klimek 
978d084d9SManuel Klimek #include "RewriterTestContext.h"
100f291276SDaniel Jasper #include "clang/Tooling/Core/Replacement.h"
1178d084d9SManuel Klimek #include "gtest/gtest.h"
1278d084d9SManuel Klimek 
1378d084d9SManuel Klimek namespace clang {
140f291276SDaniel Jasper namespace tooling {
150f291276SDaniel Jasper namespace {
1678d084d9SManuel Klimek 
TEST(Rewriter,OverwritesChangedFiles)1778d084d9SManuel Klimek TEST(Rewriter, OverwritesChangedFiles) {
1878d084d9SManuel Klimek   RewriterTestContext Context;
1978d084d9SManuel Klimek   FileID ID = Context.createOnDiskFile("t.cpp", "line1\nline2\nline3\nline4");
2078d084d9SManuel Klimek   Context.Rewrite.ReplaceText(Context.getLocation(ID, 2, 1), 5, "replaced");
2178d084d9SManuel Klimek   EXPECT_FALSE(Context.Rewrite.overwriteChangedFiles());
2278d084d9SManuel Klimek   EXPECT_EQ("line1\nreplaced\nline3\nline4",
2378d084d9SManuel Klimek             Context.getFileContentFromDisk("t.cpp"));
2478d084d9SManuel Klimek }
2578d084d9SManuel Klimek 
TEST(Rewriter,ContinuesOverwritingFilesOnError)2678d084d9SManuel Klimek TEST(Rewriter, ContinuesOverwritingFilesOnError) {
2778d084d9SManuel Klimek   RewriterTestContext Context;
2878d084d9SManuel Klimek   FileID FailingID = Context.createInMemoryFile("invalid/failing.cpp", "test");
2978d084d9SManuel Klimek   Context.Rewrite.ReplaceText(Context.getLocation(FailingID, 1, 2), 1, "other");
3078d084d9SManuel Klimek   FileID WorkingID = Context.createOnDiskFile(
3178d084d9SManuel Klimek     "working.cpp", "line1\nline2\nline3\nline4");
3278d084d9SManuel Klimek   Context.Rewrite.ReplaceText(Context.getLocation(WorkingID, 2, 1), 5,
3378d084d9SManuel Klimek                               "replaced");
3478d084d9SManuel Klimek   EXPECT_TRUE(Context.Rewrite.overwriteChangedFiles());
3578d084d9SManuel Klimek   EXPECT_EQ("line1\nreplaced\nline3\nline4",
3678d084d9SManuel Klimek             Context.getFileContentFromDisk("working.cpp"));
3778d084d9SManuel Klimek }
3878d084d9SManuel Klimek 
TEST(Rewriter,AdjacentInsertAndDelete)390f291276SDaniel Jasper TEST(Rewriter, AdjacentInsertAndDelete) {
400f291276SDaniel Jasper   Replacements Replaces;
4140ef2fb3SEric Liu   auto Err = Replaces.add(Replacement("<file>", 6, 6, ""));
4240ef2fb3SEric Liu   EXPECT_TRUE(!Err);
4340ef2fb3SEric Liu   Replaces =
4440ef2fb3SEric Liu       Replaces.merge(Replacements(Replacement("<file>", 6, 0, "replaced\n")));
4540ef2fb3SEric Liu 
464f8d9943SEric Liu   auto Rewritten = applyAllReplacements("line1\nline2\nline3\nline4", Replaces);
474f8d9943SEric Liu   EXPECT_TRUE(static_cast<bool>(Rewritten));
484f8d9943SEric Liu   EXPECT_EQ("line1\nreplaced\nline3\nline4", *Rewritten);
490f291276SDaniel Jasper }
500f291276SDaniel Jasper 
510f291276SDaniel Jasper } // end namespace
520f291276SDaniel Jasper } // end namespace tooling
5378d084d9SManuel Klimek } // end namespace clang
54