| OLD | NEW |
| (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 } |
| OLD | NEW |