Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(82)

Side by Side Diff: pkg/analysis_server/test/src/plugin/result_merger_test.dart

Issue 2678673002: Add support for merging results from plugins (Closed)
Patch Set: Created 3 years, 10 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
OLDNEW
(Empty)
1 // Copyright (c) 2017, the Dart project authors. Please see the AUTHORS file
2 // for details. All rights reserved. Use of this source code is governed by a
3 // BSD-style license that can be found in the LICENSE file.
4
5 import 'package:analysis_server/plugin/protocol/protocol.dart';
6 import 'package:analysis_server/src/plugin/result_merger.dart';
7 import 'package:test/test.dart';
8 import 'package:test_reflective_loader/test_reflective_loader.dart';
9
10 main() {
11 /*
12 import 'result_merger_test.dart' as result_merger_test;
13 result_merger_test.main();
14 */
15 defineReflectiveSuite(() {
16 defineReflectiveTests(ResultMergerTest);
17 });
18 }
19
20 @reflectiveTest
21 class ResultMergerTest {
22 //
23 // The tests in this class should always perform the merge operation twice
24 // using the same input values in order to ensure that the input values are
25 // not modified by the merge operation.
26 //
27
28 ResultMerger merger = new ResultMerger();
29
30 AnalysisError createError(int offset) {
31 AnalysisErrorSeverity severity = AnalysisErrorSeverity.ERROR;
32 AnalysisErrorType type = AnalysisErrorType.HINT;
33 Location location = new Location('test.dart', offset, 2, 3, 4);
34 return new AnalysisError(severity, type, location, '', '');
35 }
36
37 void test_mergeAnalysisErrorFixes() {
38 AnalysisError error1 = createError(10);
39 AnalysisError error2 = createError(20);
40 AnalysisError error3 = createError(30);
41 AnalysisError error4 = createError(40);
42 SourceChange change1 = new SourceChange('a');
43 SourceChange change2 = new SourceChange('b');
44 SourceChange change3 = new SourceChange('c');
45 SourceChange change4 = new SourceChange('d');
46 SourceChange change5 = new SourceChange('e');
47 AnalysisErrorFixes fix1 = new AnalysisErrorFixes(error1, fixes: [change1]);
48 AnalysisErrorFixes fix2 = new AnalysisErrorFixes(error2, fixes: [change2]);
49 AnalysisErrorFixes fix3 = new AnalysisErrorFixes(error2, fixes: [change3]);
50 AnalysisErrorFixes fix4 = new AnalysisErrorFixes(error3, fixes: [change4]);
51 AnalysisErrorFixes fix5 = new AnalysisErrorFixes(error4, fixes: [change5]);
52 AnalysisErrorFixes fix2and3 =
53 new AnalysisErrorFixes(error2, fixes: [change2, change3]);
54
55 void runTest() {
56 expect(
57 merger.mergeAnalysisErrorFixes([
58 [fix1, fix2],
59 [fix3, fix4],
60 [fix5],
61 []
62 ]),
63 unorderedEquals([fix1, fix2and3, fix4, fix5]));
64 }
65
66 runTest();
67 runTest();
68 }
69
70 void test_mergeAnalysisErrors() {
71 AnalysisError error1 = createError(10);
72 AnalysisError error2 = createError(20);
73 AnalysisError error3 = createError(30);
74 AnalysisError error4 = createError(40);
75
76 void runTest() {
77 expect(
78 merger.mergeAnalysisErrors([
79 [error1, error2],
80 [error3],
81 [],
82 [error4]
83 ]),
84 unorderedEquals([error1, error2, error3, error4]));
85 }
86
87 runTest();
88 runTest();
89 }
90
91 void test_mergeCompletionSuggestions() {
92 CompletionSuggestion createSuggestion(String completion) =>
93 new CompletionSuggestion(CompletionSuggestionKind.IDENTIFIER, 50,
94 completion, 0, 3, false, false);
95
96 CompletionSuggestion suggestion1 = createSuggestion('a');
97 CompletionSuggestion suggestion2 = createSuggestion('b');
98 CompletionSuggestion suggestion3 = createSuggestion('c');
99 CompletionSuggestion suggestion4 = createSuggestion('d');
100
101 void runTest() {
102 expect(
103 merger.mergeCompletionSuggestions([
104 [suggestion1],
105 [suggestion2, suggestion3, suggestion4],
106 []
107 ]),
108 unorderedEquals(
109 [suggestion1, suggestion2, suggestion3, suggestion4]));
110 }
111
112 runTest();
113 runTest();
114 }
115
116 void test_mergeFoldingRegion() {
117 FoldingKind kind = FoldingKind.COMMENT;
118 FoldingRegion region1 = new FoldingRegion(kind, 30, 5);
119 FoldingRegion region2 = new FoldingRegion(kind, 0, 4);
120 FoldingRegion region3 = new FoldingRegion(kind, 20, 6);
121 FoldingRegion region4 = new FoldingRegion(kind, 10, 3);
122 FoldingRegion region5 = new FoldingRegion(kind, 2, 6); // overlaps
123
124 void runTest() {
125 expect(
126 merger.mergeFoldingRegions([
127 [region1, region2],
128 [],
129 [region3],
130 [region4, region5]
131 ]),
132 unorderedEquals([region1, region2, region3, region4]));
133 }
134
135 runTest();
136 runTest();
137 }
138
139 void test_mergeHighlightRegions() {
140 HighlightRegionType type = HighlightRegionType.COMMENT_BLOCK;
141 HighlightRegion region1 = new HighlightRegion(type, 30, 5);
142 HighlightRegion region2 = new HighlightRegion(type, 0, 4);
143 HighlightRegion region3 = new HighlightRegion(type, 20, 6);
144 HighlightRegion region4 = new HighlightRegion(type, 10, 3);
145
146 void runTest() {
147 expect(
148 merger.mergeHighlightRegions([
149 [region1, region2],
150 [],
151 [region3],
152 [region4]
153 ]),
154 unorderedEquals([region1, region2, region3, region4]));
155 }
156
157 runTest();
158 runTest();
159 }
160
161 void test_mergeNavigation() {
162 NavigationTarget target(int fileIndex, int offset) {
163 return new NavigationTarget(
164 ElementKind.CLASS, fileIndex, offset, 1, 0, 0);
165 }
166
167 //
168 // Create the parameters from the server.
169 //
170 NavigationTarget target1_1 = target(0, 1);
171 NavigationTarget target1_2 = target(0, 2);
172 NavigationTarget target2_1 = target(1, 3);
173 NavigationTarget target2_2 = target(1, 4);
174 NavigationRegion region1_1 = new NavigationRegion(10, 4, [0]);
175 NavigationRegion region1_2 = new NavigationRegion(20, 4, [1]);
176 NavigationRegion region2_1 = new NavigationRegion(30, 4, [2]);
177 NavigationRegion region2_2 = new NavigationRegion(40, 4, [3]);
178 AnalysisNavigationParams params1 = new AnalysisNavigationParams(
179 'a.dart',
180 [region1_1, region1_2, region2_1, region2_2],
181 [target1_1, target1_2, target2_1, target2_2],
182 ['one.dart', 'two.dart']);
183 //
184 // Create the parameters from the second plugin.
185 //
186 // same file and offset as target 2_2
187 NavigationTarget target2_3 = target(0, 4);
188 NavigationTarget target2_4 = target(0, 5);
189 NavigationTarget target3_1 = target(1, 6);
190 NavigationTarget target3_2 = target(1, 7);
191 // same region and target as region2_2
192 NavigationRegion region2_3 = new NavigationRegion(40, 4, [0]);
193 // same region as region2_2, but a different target
194 NavigationRegion region2_4 = new NavigationRegion(40, 4, [2]);
195 NavigationRegion region2_5 = new NavigationRegion(50, 4, [1]);
196 NavigationRegion region3_1 = new NavigationRegion(60, 4, [2]);
197 NavigationRegion region3_2 = new NavigationRegion(70, 4, [3]);
198 AnalysisNavigationParams params2 = new AnalysisNavigationParams(
199 'a.dart',
200 [region2_3, region2_4, region2_5, region3_1, region3_2],
201 [target2_3, target2_4, target3_1, target3_2],
202 ['two.dart', 'three.dart']);
203 AnalysisNavigationParams expected = new AnalysisNavigationParams('a.dart', [
204 region1_1,
205 region1_2,
206 region2_1,
207 new NavigationRegion(40, 4, [3, 5]), // union of region2_2 and region2_4
208 new NavigationRegion(50, 4, [4]), // region2_5
209 new NavigationRegion(60, 4, [5]), // region3_1
210 new NavigationRegion(70, 4, [6]), // region3_2
211 ], [
212 target1_1,
213 target1_2,
214 target2_1,
215 target2_2,
216 target(1, 5), // target2_4
217 target(2, 6), // target3_1
218 target(2, 7), // target3_2
219 ], [
220 'one.dart',
221 'two.dart',
222 'three.dart'
223 ]);
224
225 void runTest() {
226 expect(merger.mergeNavigation([params1, params2]), expected);
227 }
228
229 runTest();
230 runTest();
231 }
232
233 void test_mergeOccurrences() {
234 Element element1 = new Element(ElementKind.CLASS, 'e1', 0);
235 Element element2 = new Element(ElementKind.CLASS, 'e2', 0);
236 Element element3 = new Element(ElementKind.CLASS, 'e3', 0);
237 Occurrences occurrence1 = new Occurrences(element1, [1, 2, 4], 2);
238 Occurrences occurrence2 = new Occurrences(element2, [5], 2);
239 Occurrences occurrence3 = new Occurrences(element1, [2, 3], 2);
240 Occurrences occurrence4 = new Occurrences(element3, [8], 2);
241 Occurrences occurrence5 = new Occurrences(element2, [6], 2);
242 Occurrences occurrence6 = new Occurrences(element3, [7, 9], 2);
243 Occurrences result1 = new Occurrences(element1, [1, 2, 3, 4], 2);
244 Occurrences result2 = new Occurrences(element2, [5, 6], 2);
245 Occurrences result3 = new Occurrences(element3, [7, 8, 9], 2);
246
247 void runTest() {
248 expect(
249 merger.mergeOccurrences([
250 [occurrence1, occurrence2],
251 [],
252 [occurrence3, occurrence4],
253 [occurrence5, occurrence6]
254 ]),
255 unorderedEquals([result1, result2, result3]));
256 }
257
258 runTest();
259 runTest();
260 }
261
262 void test_mergeOutline() {
263 Element element(ElementKind kind, int offset) {
264 Location location = new Location('', offset, 0, 0, 0);
265 return new Element(kind, '', 0, location: location);
266 }
267
268 Element element1 = element(ElementKind.CLASS, 100);
269 Element element1_1 = element(ElementKind.METHOD, 110);
270 Element element1_2 = element(ElementKind.METHOD, 120);
271 Element element2 = element(ElementKind.CLASS, 200);
272 Element element2_1 = element(ElementKind.METHOD, 210);
273 Element element2_2 = element(ElementKind.METHOD, 220);
274 Element element3_1 = element(ElementKind.METHOD, 220); // same as 2_2
275 Element element3_2 = element(ElementKind.METHOD, 230);
276 Element element4 = element(ElementKind.CLASS, 300);
277 Element element4_1 = element(ElementKind.METHOD, 310);
278 //
279 // Unique, contributed from first plugin.
280 //
281 // element1
282 // - element1_1
283 // - element1_2
284 //
285 Outline outline1_1 = new Outline(element1_1, 0, 0, children: []);
286 Outline outline1_2 = new Outline(element1_2, 0, 0, children: []);
287 Outline outline1 =
288 new Outline(element1, 0, 0, children: [outline1_1, outline1_2]);
289 //
290 // Same top level element, common child.
291 //
292 // element2
293 // - element2_1
294 // - element2_2
295 // element2
296 // - element3_1
297 // - element3_2
298 //
299 Outline outline2_1 = new Outline(element2_1, 0, 0, children: []);
300 Outline outline2_2 = new Outline(element2_2, 0, 0, children: []);
301 Outline outline3_1 = new Outline(element3_1, 0, 0, children: []);
302 Outline outline3_2 = new Outline(element3_2, 0, 0, children: []);
303 Outline outline2 =
304 new Outline(element2, 0, 0, children: [outline2_1, outline2_2]);
305 Outline outline3 =
306 new Outline(element2, 0, 0, children: [outline3_1, outline3_2]);
307 Outline outline2and3 = new Outline(element2, 0, 0,
308 children: [outline2_1, outline2_2, outline3_2]);
309 //
310 // Unique, contributed from second plugin.
311 //
312 // element4
313 // - element4_1
314 //
315 Outline outline4_1 = new Outline(element4_1, 0, 0, children: []);
316 Outline outline4 = new Outline(element4, 0, 0, children: [outline4_1]);
317
318 void runTest() {
319 expect(
320 merger.mergeOutline([
321 [outline1, outline2],
322 [],
323 [outline3, outline4]
324 ]),
325 unorderedEquals([outline1, outline2and3, outline4]));
326 }
327
328 runTest();
329 runTest();
330 }
331
332 void test_mergeRefactoringFeedbacks_convertGetterToMethodFeedback() {
333 RefactoringFeedback feedback1 = new ConvertGetterToMethodFeedback();
334 RefactoringFeedback feedback2 = new ConvertGetterToMethodFeedback();
335
336 void runTest() {
337 expect(merger.mergeRefactoringFeedbacks([feedback1, feedback2]),
338 equals(feedback1));
339 }
340
341 runTest();
342 runTest();
343 }
344
345 void test_mergeRefactoringFeedbacks_convertMethodToGetterFeedback() {
346 RefactoringFeedback feedback1 = new ConvertMethodToGetterFeedback();
347 RefactoringFeedback feedback2 = new ConvertMethodToGetterFeedback();
348
349 void runTest() {
350 expect(merger.mergeRefactoringFeedbacks([feedback1, feedback2]),
351 equals(feedback1));
352 }
353
354 runTest();
355 runTest();
356 }
357
358 void
359 test_mergeRefactoringFeedbacks_extractLocalVariableFeedback_addEverything( ) {
360 List<String> names1 = <String>['a', 'b', 'c'];
361 List<int> offsets1 = <int>[10, 20];
362 List<int> lengths1 = <int>[4, 5];
363 List<int> coveringOffsets1 = <int>[100, 150, 200];
364 List<int> coveringLengths1 = <int>[200, 100, 20];
365 RefactoringFeedback feedback1 = new ExtractLocalVariableFeedback(
366 names1, offsets1, lengths1,
367 coveringExpressionOffsets: coveringOffsets1,
368 coveringExpressionLengths: coveringLengths1);
369 List<String> names2 = <String>['c', 'd'];
370 List<int> offsets2 = <int>[30];
371 List<int> lengths2 = <int>[6];
372 List<int> coveringOffsets2 = <int>[210];
373 List<int> coveringLengths2 = <int>[5];
374 RefactoringFeedback feedback2 = new ExtractLocalVariableFeedback(
375 names2, offsets2, lengths2,
376 coveringExpressionOffsets: coveringOffsets2,
377 coveringExpressionLengths: coveringLengths2);
378 List<String> resultNames = <String>['a', 'b', 'c', 'd'];
379 List<int> resultOffsets = new List<int>.from(offsets1)..addAll(offsets2);
380 List<int> resultLengths = new List<int>.from(lengths1)..addAll(lengths2);
381 List<int> resultCoveringOffsets = new List<int>.from(coveringOffsets1)
382 ..addAll(coveringOffsets2);
383 List<int> resultCoveringLengths = new List<int>.from(coveringLengths1)
384 ..addAll(coveringLengths2);
385 RefactoringFeedback result = new ExtractLocalVariableFeedback(
386 resultNames, resultOffsets, resultLengths,
387 coveringExpressionOffsets: resultCoveringOffsets,
388 coveringExpressionLengths: resultCoveringLengths);
389
390 void runTest() {
391 expect(merger.mergeRefactoringFeedbacks([feedback1, feedback2]),
392 equals(result));
393 }
394
395 runTest();
396 runTest();
397 }
398
399 void
400 test_mergeRefactoringFeedbacks_extractLocalVariableFeedback_addOffsetsAndL engths() {
401 List<String> names1 = <String>['a', 'b', 'c'];
402 List<int> offsets1 = <int>[10, 20];
403 List<int> lengths1 = <int>[4, 5];
404 List<int> coveringOffsets1 = <int>[100, 150, 200];
405 List<int> coveringLengths1 = <int>[200, 100, 20];
406 RefactoringFeedback feedback1 = new ExtractLocalVariableFeedback(
407 names1, offsets1, lengths1,
408 coveringExpressionOffsets: coveringOffsets1,
409 coveringExpressionLengths: coveringLengths1);
410 List<String> names2 = <String>[];
411 List<int> offsets2 = <int>[30];
412 List<int> lengths2 = <int>[6];
413 RefactoringFeedback feedback2 =
414 new ExtractLocalVariableFeedback(names2, offsets2, lengths2);
415 List<int> resultOffsets = new List<int>.from(offsets1)..addAll(offsets2);
416 List<int> resultLengths = new List<int>.from(lengths1)..addAll(lengths2);
417 RefactoringFeedback result = new ExtractLocalVariableFeedback(
418 names1, resultOffsets, resultLengths,
419 coveringExpressionOffsets: coveringOffsets1,
420 coveringExpressionLengths: coveringLengths1);
421
422 void runTest() {
423 expect(merger.mergeRefactoringFeedbacks([feedback1, feedback2]),
424 equals(result));
425 }
426
427 runTest();
428 runTest();
429 }
430
431 void
432 test_mergeRefactoringFeedbacks_extractLocalVariableFeedback_noCoverings() {
433 List<String> names1 = <String>['a', 'b', 'c'];
434 List<int> offsets1 = <int>[10, 20];
435 List<int> lengths1 = <int>[4, 5];
436 RefactoringFeedback feedback1 =
437 new ExtractLocalVariableFeedback(names1, offsets1, lengths1);
438 List<String> names2 = <String>[];
439 List<int> offsets2 = <int>[30];
440 List<int> lengths2 = <int>[6];
441 RefactoringFeedback feedback2 =
442 new ExtractLocalVariableFeedback(names2, offsets2, lengths2);
443 List<int> resultOffsets = new List<int>.from(offsets1)..addAll(offsets2);
444 List<int> resultLengths = new List<int>.from(lengths1)..addAll(lengths2);
445 RefactoringFeedback result =
446 new ExtractLocalVariableFeedback(names1, resultOffsets, resultLengths);
447
448 void runTest() {
449 expect(merger.mergeRefactoringFeedbacks([feedback1, feedback2]),
450 equals(result));
451 }
452
453 runTest();
454 runTest();
455 }
456
457 void test_mergeRefactoringFeedbacks_extractMethodFeedback() {
458 int offset1 = 20;
459 int length1 = 5;
460 String returnType1 = 'int';
461 List<String> names1 = <String>['a', 'b', 'c'];
462 bool canCreateGetter1 = false;
463 List<RefactoringMethodParameter> parameters1 =
464 <RefactoringMethodParameter>[];
465 List<int> offsets1 = <int>[10, 20];
466 List<int> lengths1 = <int>[4, 5];
467 RefactoringFeedback feedback1 = new ExtractMethodFeedback(offset1, length1,
468 returnType1, names1, canCreateGetter1, parameters1, offsets1, lengths1);
469 List<String> names2 = <String>['c', 'd'];
470 bool canCreateGetter2 = true;
471 List<RefactoringMethodParameter> parameters2 =
472 <RefactoringMethodParameter>[];
473 List<int> offsets2 = <int>[30];
474 List<int> lengths2 = <int>[6];
475 RefactoringFeedback feedback2 = new ExtractMethodFeedback(
476 0, 0, '', names2, canCreateGetter2, parameters2, offsets2, lengths2);
477 List<String> resultNames = <String>['a', 'b', 'c', 'd'];
478 List<int> resultOffsets = new List<int>.from(offsets1)..addAll(offsets2);
479 List<int> resultLengths = new List<int>.from(lengths1)..addAll(lengths2);
480 RefactoringFeedback result = new ExtractMethodFeedback(
481 offset1,
482 length1,
483 returnType1,
484 resultNames,
485 false,
486 parameters1,
487 resultOffsets,
488 resultLengths);
489
490 void runTest() {
491 expect(merger.mergeRefactoringFeedbacks([feedback1, feedback2]),
492 equals(result));
493 }
494
495 runTest();
496 runTest();
497 }
498
499 void test_mergeRefactoringFeedbacks_inlineLocalVariableFeedback() {
500 RefactoringFeedback feedback1 = new InlineLocalVariableFeedback('a', 2);
501 RefactoringFeedback feedback2 = new InlineLocalVariableFeedback('a', 3);
502 RefactoringFeedback result = new InlineLocalVariableFeedback('a', 5);
503
504 void runTest() {
505 expect(merger.mergeRefactoringFeedbacks([feedback1, feedback2]),
506 equals(result));
507 }
508
509 runTest();
510 runTest();
511 }
512
513 void test_mergeRefactoringFeedbacks_inlineMethodFeedback() {
514 RefactoringFeedback feedback1 = new InlineMethodFeedback('a', false);
515 RefactoringFeedback feedback2 = new InlineMethodFeedback('a', false);
516
517 void runTest() {
518 expect(merger.mergeRefactoringFeedbacks([feedback1, feedback2]),
519 equals(feedback1));
520 }
521
522 runTest();
523 runTest();
524 }
525
526 void test_mergeRefactoringFeedbacks_moveFileFeedback() {
527 RefactoringFeedback feedback1 = new MoveFileFeedback();
528 RefactoringFeedback feedback2 = new MoveFileFeedback();
529
530 void runTest() {
531 expect(merger.mergeRefactoringFeedbacks([feedback1, feedback2]),
532 equals(feedback1));
533 }
534
535 runTest();
536 runTest();
537 }
538
539 void test_mergeRefactoringFeedbacks_renameFeedback() {
540 RefactoringFeedback feedback1 = new RenameFeedback(10, 0, '', '');
541 RefactoringFeedback feedback2 = new RenameFeedback(20, 0, '', '');
542
543 void runTest() {
544 expect(merger.mergeRefactoringFeedbacks([feedback1, feedback2]),
545 equals(feedback1));
546 }
547
548 runTest();
549 runTest();
550 }
551
552 void test_mergeRefactoringKinds() {
553 RefactoringKind kind1 = RefactoringKind.CONVERT_GETTER_TO_METHOD;
554 RefactoringKind kind2 = RefactoringKind.EXTRACT_LOCAL_VARIABLE;
555 RefactoringKind kind3 = RefactoringKind.INLINE_LOCAL_VARIABLE;
556 RefactoringKind kind4 = RefactoringKind.MOVE_FILE;
557 RefactoringKind kind5 = RefactoringKind.EXTRACT_LOCAL_VARIABLE;
558
559 void runTest() {
560 expect(
561 merger.mergeRefactoringKinds([
562 [kind1, kind2],
563 [kind3],
564 [],
565 [kind4, kind5]
566 ]),
567 unorderedEquals([kind1, kind2, kind3, kind4]));
568 }
569
570 runTest();
571 runTest();
572 }
573
574 void test_mergeRefactorings() {
575 RefactoringProblem problem(String message) =>
576 new RefactoringProblem(RefactoringProblemSeverity.ERROR, message);
577 RefactoringProblem problem1 = problem('1');
578 RefactoringProblem problem2 = problem('2');
579 RefactoringProblem problem3 = problem('3');
580 RefactoringProblem problem4 = problem('4');
581 RefactoringProblem problem5 = problem('5');
582 RefactoringProblem problem6 = problem('6');
583
584 List<RefactoringProblem> initialProblems1 = <RefactoringProblem>[
585 problem1,
586 problem2
587 ];
588 List<RefactoringProblem> optionsProblems1 = <RefactoringProblem>[problem3];
589 List<RefactoringProblem> finalProblems1 = <RefactoringProblem>[problem4];
590 RefactoringFeedback feedback1 = new RenameFeedback(10, 0, '', '');
591 SourceFileEdit edit1 =
592 new SourceFileEdit('file1.dart', 11, edits: <SourceEdit>[
593 new SourceEdit(12, 2, 'w', id: 'e1'),
594 new SourceEdit(13, 3, 'x'),
595 ]);
596 SourceChange change1 =
597 new SourceChange('c1', edits: <SourceFileEdit>[edit1]);
598 List<String> potentialEdits1 = <String>['e1'];
599 EditGetRefactoringResult result1 = new EditGetRefactoringResult(
600 initialProblems1, optionsProblems1, finalProblems1,
601 feedback: feedback1, change: change1, potentialEdits: potentialEdits1);
602 List<RefactoringProblem> initialProblems2 = <RefactoringProblem>[problem5];
603 List<RefactoringProblem> optionsProblems2 = <RefactoringProblem>[];
604 List<RefactoringProblem> finalProblems2 = <RefactoringProblem>[problem6];
605 RefactoringFeedback feedback2 = new RenameFeedback(20, 0, '', '');
606 SourceFileEdit edit2 =
607 new SourceFileEdit('file2.dart', 21, edits: <SourceEdit>[
608 new SourceEdit(12, 2, 'y', id: 'e2'),
609 new SourceEdit(13, 3, 'z'),
610 ]);
611 SourceChange change2 =
612 new SourceChange('c2', edits: <SourceFileEdit>[edit2]);
613 List<String> potentialEdits2 = <String>['e2'];
614 EditGetRefactoringResult result2 = new EditGetRefactoringResult(
615 initialProblems2, optionsProblems2, finalProblems2,
616 feedback: feedback2, change: change2, potentialEdits: potentialEdits2);
617 List<RefactoringProblem> mergedInitialProblems = <RefactoringProblem>[
618 problem1,
619 problem2,
620 problem5
621 ];
622 List<RefactoringProblem> mergedOptionsProblems = <RefactoringProblem>[
623 problem3
624 ];
625 List<RefactoringProblem> mergedFinalProblems = <RefactoringProblem>[
626 problem4,
627 problem6
628 ];
629 SourceChange mergedChange =
630 new SourceChange('c1', edits: <SourceFileEdit>[edit1, edit2]);
631 List<String> mergedPotentialEdits = <String>['e1', 'e2'];
632 EditGetRefactoringResult mergedResult = new EditGetRefactoringResult(
633 mergedInitialProblems, mergedOptionsProblems, mergedFinalProblems,
634 feedback: merger.mergeRefactoringFeedbacks([feedback1, feedback2]),
635 change: mergedChange,
636 potentialEdits: mergedPotentialEdits);
637
638 void runTest() {
639 expect(merger.mergeRefactorings([result1, result2]), mergedResult);
640 }
641
642 runTest();
643 runTest();
644 }
645
646 void test_mergeSourceChanges() {
647 SourceChange kind1 = new SourceChange('');
648 SourceChange kind2 = new SourceChange('');
649 SourceChange kind3 = new SourceChange('');
650 SourceChange kind4 = new SourceChange('');
651
652 void runTest() {
653 expect(
654 merger.mergeSourceChanges([
655 [kind1, kind2],
656 [],
657 [kind3],
658 [kind4]
659 ]),
660 unorderedEquals([kind1, kind2, kind3, kind4]));
661 }
662
663 runTest();
664 runTest();
665 }
666
667 void test_overlaps_false_nested_left() {
668 expect(merger.overlaps(3, 5, 1, 7, allowNesting: true), isFalse);
669 }
670
671 void test_overlaps_false_nested_right() {
672 expect(merger.overlaps(1, 7, 3, 5, allowNesting: true), isFalse);
673 }
674
675 void test_overlaps_false_onLeft() {
676 expect(merger.overlaps(1, 3, 5, 7), isFalse);
677 }
678
679 void test_overlaps_false_onRight() {
680 expect(merger.overlaps(5, 7, 1, 3), isFalse);
681 }
682
683 void test_overlaps_true_nested_left() {
684 expect(merger.overlaps(3, 5, 1, 7), isTrue);
685 }
686
687 void test_overlaps_true_nested_right() {
688 expect(merger.overlaps(1, 7, 3, 5), isTrue);
689 }
690
691 void test_overlaps_true_onLeft() {
692 expect(merger.overlaps(1, 5, 3, 7), isTrue);
693 }
694
695 void test_overlaps_true_onRight() {
696 expect(merger.overlaps(3, 7, 1, 5), isTrue);
697 }
698 }
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698