RewriterTest.cpp 2.0 KB

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