ioeric created this revision.

Just realized the implementation is missing...


https://reviews.llvm.org/D30735

Files:
  lib/Tooling/Refactoring/AtomicChange.cpp
  unittests/Tooling/RefactoringTest.cpp


Index: unittests/Tooling/RefactoringTest.cpp
===================================================================
--- unittests/Tooling/RefactoringTest.cpp
+++ unittests/Tooling/RefactoringTest.cpp
@@ -1173,8 +1173,10 @@
   EXPECT_EQ(ExpectedChange.getKey(), ActualChange.getKey());
   EXPECT_EQ(ExpectedChange.getFilePath(), ActualChange.getFilePath());
   EXPECT_EQ(ExpectedChange.getError(), ActualChange.getError());
-  EXPECT_EQ(ExpectedChange.getInsertedHeaders(), 
ActualChange.getInsertedHeaders());
-  EXPECT_EQ(ExpectedChange.getRemovedHeaders(), 
ActualChange.getRemovedHeaders());
+  EXPECT_EQ(ExpectedChange.getInsertedHeaders(),
+            ActualChange.getInsertedHeaders());
+  EXPECT_EQ(ExpectedChange.getRemovedHeaders(),
+            ActualChange.getRemovedHeaders());
   EXPECT_EQ(ExpectedChange.getReplacements().size(),
             ActualChange.getReplacements().size());
   EXPECT_EQ(2u, ActualChange.getReplacements().size());
@@ -1191,6 +1193,22 @@
   EXPECT_EQ("input.cpp", Change.getFilePath());
 }
 
+TEST_F(AtomicChangeTest, Replace) {
+  setUp();
+  AtomicChange Change(Context.Sources, DefaultLoc);
+  llvm::Error Err = Change.replace(Context.Sources, DefaultLoc, 2, "aa");
+  ASSERT_TRUE(!Err);
+  EXPECT_EQ(Change.getReplacements().size(), 1u);
+  EXPECT_EQ(*Change.getReplacements().begin(),
+            Replacement(Context.Sources, DefaultLoc, 2, "aa"));
+
+  // Add a new replacement that conflicts with the existing one.
+  Err = Change.replace(Context.Sources, DefaultLoc, 3, "ab");
+  EXPECT_TRUE((bool)Err);
+  llvm::consumeError(std::move(Err));
+  EXPECT_EQ(Change.getReplacements().size(), 1u);
+}
+
 TEST_F(AtomicChangeTest, InsertBefore) {
   setUp();
   AtomicChange Change(Context.Sources, DefaultLoc);
Index: lib/Tooling/Refactoring/AtomicChange.cpp
===================================================================
--- lib/Tooling/Refactoring/AtomicChange.cpp
+++ lib/Tooling/Refactoring/AtomicChange.cpp
@@ -132,6 +132,12 @@
   return E;
 }
 
+llvm::Error AtomicChange::replace(const SourceManager &SM, SourceLocation Loc,
+                                  unsigned Length, llvm::StringRef Text) {
+  Replacement R(SM, Loc, Length, Text);
+  return Replaces.add(R);
+}
+
 llvm::Error AtomicChange::insert(const SourceManager &SM, SourceLocation Loc,
                                  llvm::StringRef Text, bool InsertAfter) {
   if (Text.empty())


Index: unittests/Tooling/RefactoringTest.cpp
===================================================================
--- unittests/Tooling/RefactoringTest.cpp
+++ unittests/Tooling/RefactoringTest.cpp
@@ -1173,8 +1173,10 @@
   EXPECT_EQ(ExpectedChange.getKey(), ActualChange.getKey());
   EXPECT_EQ(ExpectedChange.getFilePath(), ActualChange.getFilePath());
   EXPECT_EQ(ExpectedChange.getError(), ActualChange.getError());
-  EXPECT_EQ(ExpectedChange.getInsertedHeaders(), ActualChange.getInsertedHeaders());
-  EXPECT_EQ(ExpectedChange.getRemovedHeaders(), ActualChange.getRemovedHeaders());
+  EXPECT_EQ(ExpectedChange.getInsertedHeaders(),
+            ActualChange.getInsertedHeaders());
+  EXPECT_EQ(ExpectedChange.getRemovedHeaders(),
+            ActualChange.getRemovedHeaders());
   EXPECT_EQ(ExpectedChange.getReplacements().size(),
             ActualChange.getReplacements().size());
   EXPECT_EQ(2u, ActualChange.getReplacements().size());
@@ -1191,6 +1193,22 @@
   EXPECT_EQ("input.cpp", Change.getFilePath());
 }
 
+TEST_F(AtomicChangeTest, Replace) {
+  setUp();
+  AtomicChange Change(Context.Sources, DefaultLoc);
+  llvm::Error Err = Change.replace(Context.Sources, DefaultLoc, 2, "aa");
+  ASSERT_TRUE(!Err);
+  EXPECT_EQ(Change.getReplacements().size(), 1u);
+  EXPECT_EQ(*Change.getReplacements().begin(),
+            Replacement(Context.Sources, DefaultLoc, 2, "aa"));
+
+  // Add a new replacement that conflicts with the existing one.
+  Err = Change.replace(Context.Sources, DefaultLoc, 3, "ab");
+  EXPECT_TRUE((bool)Err);
+  llvm::consumeError(std::move(Err));
+  EXPECT_EQ(Change.getReplacements().size(), 1u);
+}
+
 TEST_F(AtomicChangeTest, InsertBefore) {
   setUp();
   AtomicChange Change(Context.Sources, DefaultLoc);
Index: lib/Tooling/Refactoring/AtomicChange.cpp
===================================================================
--- lib/Tooling/Refactoring/AtomicChange.cpp
+++ lib/Tooling/Refactoring/AtomicChange.cpp
@@ -132,6 +132,12 @@
   return E;
 }
 
+llvm::Error AtomicChange::replace(const SourceManager &SM, SourceLocation Loc,
+                                  unsigned Length, llvm::StringRef Text) {
+  Replacement R(SM, Loc, Length, Text);
+  return Replaces.add(R);
+}
+
 llvm::Error AtomicChange::insert(const SourceManager &SM, SourceLocation Loc,
                                  llvm::StringRef Text, bool InsertAfter) {
   if (Text.empty())
_______________________________________________
cfe-commits mailing list
cfe-commits@lists.llvm.org
http://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits

Reply via email to