@@ -115,24 +115,26 @@ TEST_F(ReplacementTest, FailAddReplacements) {
115
115
llvm::consumeError (std::move (Err));
116
116
}
117
117
118
- TEST_F (ReplacementTest, FailAddOverlappingInsertions ) {
118
+ TEST_F (ReplacementTest, AddAdjacentInsertionAndReplacement ) {
119
119
Replacements Replaces;
120
120
// Test adding an insertion at the offset of an existing replacement.
121
121
auto Err = Replaces.add (Replacement (" x.cc" , 10 , 3 , " replace" ));
122
122
EXPECT_TRUE (!Err);
123
123
llvm::consumeError (std::move (Err));
124
124
Err = Replaces.add (Replacement (" x.cc" , 10 , 0 , " insert" ));
125
- EXPECT_TRUE (( bool ) Err);
125
+ EXPECT_TRUE (! Err);
126
126
llvm::consumeError (std::move (Err));
127
+ EXPECT_EQ (Replaces.size (), 2u );
127
128
128
129
Replaces.clear ();
129
130
// Test overlap with an existing insertion.
130
131
Err = Replaces.add (Replacement (" x.cc" , 10 , 0 , " insert" ));
131
132
EXPECT_TRUE (!Err);
132
133
llvm::consumeError (std::move (Err));
133
134
Err = Replaces.add (Replacement (" x.cc" , 10 , 3 , " replace" ));
134
- EXPECT_TRUE (( bool ) Err);
135
+ EXPECT_TRUE (! Err);
135
136
llvm::consumeError (std::move (Err));
137
+ EXPECT_EQ (Replaces.size (), 2u );
136
138
}
137
139
138
140
TEST_F (ReplacementTest, FailAddRegression) {
@@ -157,14 +159,24 @@ TEST_F(ReplacementTest, FailAddRegression) {
157
159
llvm::consumeError (std::move (Err));
158
160
}
159
161
160
- TEST_F (ReplacementTest, FailAddInsertAtOffsetOfReplacement ) {
162
+ TEST_F (ReplacementTest, InsertAtOffsetOfReplacement ) {
161
163
Replacements Replaces;
162
164
auto Err = Replaces.add (Replacement (" x.cc" , 10 , 2 , " " ));
163
165
EXPECT_TRUE (!Err);
164
166
llvm::consumeError (std::move (Err));
165
167
Err = Replaces.add (Replacement (" x.cc" , 10 , 0 , " " ));
166
- EXPECT_TRUE (( bool ) Err);
168
+ EXPECT_TRUE (! Err);
167
169
llvm::consumeError (std::move (Err));
170
+ EXPECT_EQ (Replaces.size (), 2u );
171
+
172
+ Replaces.clear ();
173
+ Err = Replaces.add (Replacement (" x.cc" , 10 , 0 , " " ));
174
+ EXPECT_TRUE (!Err);
175
+ llvm::consumeError (std::move (Err));
176
+ Err = Replaces.add (Replacement (" x.cc" , 10 , 2 , " " ));
177
+ EXPECT_TRUE (!Err);
178
+ llvm::consumeError (std::move (Err));
179
+ EXPECT_EQ (Replaces.size (), 2u );
168
180
}
169
181
170
182
TEST_F (ReplacementTest, FailAddInsertAtOtherInsert) {
@@ -175,6 +187,38 @@ TEST_F(ReplacementTest, FailAddInsertAtOtherInsert) {
175
187
Err = Replaces.add (Replacement (" x.cc" , 10 , 0 , " b" ));
176
188
EXPECT_TRUE ((bool )Err);
177
189
llvm::consumeError (std::move (Err));
190
+
191
+ Replaces.clear ();
192
+ Err = Replaces.add (Replacement (" x.cc" , 10 , 0 , " " ));
193
+ EXPECT_TRUE (!Err);
194
+ llvm::consumeError (std::move (Err));
195
+ Err = Replaces.add (Replacement (" x.cc" , 10 , 0 , " " ));
196
+ EXPECT_TRUE ((bool )Err);
197
+ llvm::consumeError (std::move (Err));
198
+
199
+ Replaces.clear ();
200
+ Err = Replaces.add (Replacement (" x.cc" , 10 , 0 , " " ));
201
+ EXPECT_TRUE (!Err);
202
+ llvm::consumeError (std::move (Err));
203
+ Err = Replaces.add (Replacement (" x.cc" , 10 , 3 , " " ));
204
+ EXPECT_TRUE (!Err);
205
+ llvm::consumeError (std::move (Err));
206
+ Err = Replaces.add (Replacement (" x.cc" , 10 , 0 , " " ));
207
+ EXPECT_TRUE ((bool )Err);
208
+ llvm::consumeError (std::move (Err));
209
+ }
210
+
211
+ TEST_F (ReplacementTest, InsertBetweenAdjacentReplacements) {
212
+ Replacements Replaces;
213
+ auto Err = Replaces.add (Replacement (" x.cc" , 10 , 5 , " a" ));
214
+ EXPECT_TRUE (!Err);
215
+ llvm::consumeError (std::move (Err));
216
+ Err = Replaces.add (Replacement (" x.cc" , 8 , 2 , " a" ));
217
+ EXPECT_TRUE (!Err);
218
+ llvm::consumeError (std::move (Err));
219
+ Err = Replaces.add (Replacement (" x.cc" , 10 , 0 , " b" ));
220
+ EXPECT_TRUE (!Err);
221
+ llvm::consumeError (std::move (Err));
178
222
}
179
223
180
224
TEST_F (ReplacementTest, CanApplyReplacements) {
@@ -189,6 +233,29 @@ TEST_F(ReplacementTest, CanApplyReplacements) {
189
233
EXPECT_EQ (" line1\n replaced\n other\n line4" , Context.getRewrittenText (ID));
190
234
}
191
235
236
+ // Verifies that replacement/deletion is applied before insertion at the same
237
+ // offset.
238
+ TEST_F (ReplacementTest, InsertAndDelete) {
239
+ FileID ID = Context.createInMemoryFile (" input.cpp" ,
240
+ " line1\n line2\n line3\n line4" );
241
+ Replacements Replaces = toReplacements (
242
+ {Replacement (Context.Sources , Context.getLocation (ID, 2 , 1 ), 6 , " " ),
243
+ Replacement (Context.Sources , Context.getLocation (ID, 2 , 1 ), 0 ,
244
+ " other\n " )});
245
+ EXPECT_TRUE (applyAllReplacements (Replaces, Context.Rewrite ));
246
+ EXPECT_EQ (" line1\n other\n line3\n line4" , Context.getRewrittenText (ID));
247
+ }
248
+
249
+ TEST_F (ReplacementTest, AdjacentReplacements) {
250
+ FileID ID = Context.createInMemoryFile (" input.cpp" ,
251
+ " ab" );
252
+ Replacements Replaces = toReplacements (
253
+ {Replacement (Context.Sources , Context.getLocation (ID, 1 , 1 ), 1 , " x" ),
254
+ Replacement (Context.Sources , Context.getLocation (ID, 1 , 2 ), 1 , " y" )});
255
+ EXPECT_TRUE (applyAllReplacements (Replaces, Context.Rewrite ));
256
+ EXPECT_EQ (" xy" , Context.getRewrittenText (ID));
257
+ }
258
+
192
259
TEST_F (ReplacementTest, SkipsDuplicateReplacements) {
193
260
FileID ID = Context.createInMemoryFile (" input.cpp" ,
194
261
" line1\n line2\n line3\n line4" );
@@ -506,6 +573,17 @@ TEST(Range, CalculateRangesOfReplacements) {
506
573
EXPECT_TRUE (Ranges[1 ].getLength () == 22 );
507
574
}
508
575
576
+ TEST (Range, CalculateRangesOfInsertionAroundReplacement) {
577
+ Replacements Replaces = toReplacements (
578
+ {Replacement (" foo" , 0 , 2 , " " ), Replacement (" foo" , 0 , 0 , " ba" )});
579
+
580
+ std::vector<Range> Ranges = Replaces.getAffectedRanges ();
581
+
582
+ EXPECT_EQ (1ul , Ranges.size ());
583
+ EXPECT_EQ (0u , Ranges[0 ].getOffset ());
584
+ EXPECT_EQ (2u , Ranges[0 ].getLength ());
585
+ }
586
+
509
587
TEST (Range, RangesAfterEmptyReplacements) {
510
588
std::vector<Range> Ranges = {Range (5 , 6 ), Range (10 , 5 )};
511
589
Replacements Replaces;
0 commit comments