| OLD | NEW |
| 1 // Copyright (c) 2015, the Dart project authors. Please see the AUTHORS file | 1 // Copyright (c) 2015, the Dart project authors. Please see the AUTHORS file |
| 2 // for details. All rights reserved. Use of this source code is governed by a | 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. | 3 // BSD-style license that can be found in the LICENSE file. |
| 4 | 4 |
| 5 library analyzer.test.src.task.driver_test; | 5 library analyzer.test.src.task.driver_test; |
| 6 | 6 |
| 7 import 'package:analyzer/src/context/cache.dart'; | 7 import 'package:analyzer/src/context/cache.dart'; |
| 8 import 'package:analyzer/src/generated/engine.dart'; | 8 import 'package:analyzer/src/generated/engine.dart'; |
| 9 import 'package:analyzer/src/generated/java_engine.dart'; | 9 import 'package:analyzer/src/generated/java_engine.dart'; |
| 10 import 'package:analyzer/src/task/driver.dart'; | 10 import 'package:analyzer/src/task/driver.dart'; |
| (...skipping 18 matching lines...) Expand all Loading... |
| 29 | 29 |
| 30 class AbstractDriverTest { | 30 class AbstractDriverTest { |
| 31 TaskManager taskManager = new TaskManager(); | 31 TaskManager taskManager = new TaskManager(); |
| 32 List<WorkManager> workManagers = <WorkManager>[]; | 32 List<WorkManager> workManagers = <WorkManager>[]; |
| 33 InternalAnalysisContext context = new _InternalAnalysisContextMock(); | 33 InternalAnalysisContext context = new _InternalAnalysisContextMock(); |
| 34 AnalysisDriver analysisDriver; | 34 AnalysisDriver analysisDriver; |
| 35 | 35 |
| 36 void setUp() { | 36 void setUp() { |
| 37 context = new _InternalAnalysisContextMock(); | 37 context = new _InternalAnalysisContextMock(); |
| 38 analysisDriver = new AnalysisDriver(taskManager, workManagers, context); | 38 analysisDriver = new AnalysisDriver(taskManager, workManagers, context); |
| 39 when(context.aboutToComputeResult(anyObject, anyObject)).thenReturn(false); |
| 39 } | 40 } |
| 40 } | 41 } |
| 41 | 42 |
| 42 @reflectiveTest | 43 @reflectiveTest |
| 43 class AnalysisDriverTest extends AbstractDriverTest { | 44 class AnalysisDriverTest extends AbstractDriverTest { |
| 44 WorkManager workManager1 = new _WorkManagerMock(); | 45 WorkManager workManager1 = new _WorkManagerMock(); |
| 45 WorkManager workManager2 = new _WorkManagerMock(); | 46 WorkManager workManager2 = new _WorkManagerMock(); |
| 46 | 47 |
| 47 AnalysisTarget target1 = new TestSource('/1.dart'); | 48 AnalysisTarget target1 = new TestSource('/1.dart'); |
| 48 AnalysisTarget target2 = new TestSource('/2.dart'); | 49 AnalysisTarget target2 = new TestSource('/2.dart'); |
| (...skipping 288 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 337 } | 338 } |
| 338 | 339 |
| 339 test_performAnalysisTask_onResultComputed() { | 340 test_performAnalysisTask_onResultComputed() { |
| 340 AnalysisTarget target = new TestSource(); | 341 AnalysisTarget target = new TestSource(); |
| 341 ResultDescriptor result = new ResultDescriptor('result', null); | 342 ResultDescriptor result = new ResultDescriptor('result', null); |
| 342 TestAnalysisTask task; | 343 TestAnalysisTask task; |
| 343 TaskDescriptor descriptor = new TaskDescriptor( | 344 TaskDescriptor descriptor = new TaskDescriptor( |
| 344 'task', (context, target) => task, (target) => {}, [result]); | 345 'task', (context, target) => task, (target) => {}, [result]); |
| 345 task = new TestAnalysisTask(context, target, | 346 task = new TestAnalysisTask(context, target, |
| 346 descriptor: descriptor, value: 42); | 347 descriptor: descriptor, value: 42); |
| 347 WorkItem item = | 348 WorkItem item = new WorkItem(context, target, descriptor, null, 0, null); |
| 348 new WorkItem(context, null, target, descriptor, null, 0, null); | |
| 349 | 349 |
| 350 bool streamNotified = false; | 350 bool streamNotified = false; |
| 351 analysisDriver.onResultComputed(result).listen((event) { | 351 analysisDriver.onResultComputed(result).listen((event) { |
| 352 streamNotified = true; | 352 streamNotified = true; |
| 353 expect(event.context, same(context)); | 353 expect(event.context, same(context)); |
| 354 expect(event.target, same(target)); | 354 expect(event.target, same(target)); |
| 355 expect(event.descriptor, same(result)); | 355 expect(event.descriptor, same(result)); |
| 356 expect(event.value, 42); | 356 expect(event.value, 42); |
| 357 }); | 357 }); |
| 358 analysisDriver.performWorkItem(item); | 358 analysisDriver.performWorkItem(item); |
| 359 expect(streamNotified, isTrue); | 359 expect(streamNotified, isTrue); |
| 360 } | 360 } |
| 361 | 361 |
| 362 test_performWorkItem_exceptionInTask() { | 362 test_performWorkItem_exceptionInTask() { |
| 363 AnalysisTarget target = new TestSource(); | 363 AnalysisTarget target = new TestSource(); |
| 364 ResultDescriptor result = new ResultDescriptor('result', null); | 364 ResultDescriptor result = new ResultDescriptor('result', null); |
| 365 CaughtException exception = | 365 CaughtException exception = |
| 366 new CaughtException(new AnalysisException(), null); | 366 new CaughtException(new AnalysisException(), null); |
| 367 TestAnalysisTask task; | 367 TestAnalysisTask task; |
| 368 TaskDescriptor descriptor = new TaskDescriptor( | 368 TaskDescriptor descriptor = new TaskDescriptor( |
| 369 'task', (context, target) => task, (target) => {}, [result]); | 369 'task', (context, target) => task, (target) => {}, [result]); |
| 370 task = new TestAnalysisTask(context, target, | 370 task = new TestAnalysisTask(context, target, |
| 371 descriptor: descriptor, exception: exception); | 371 descriptor: descriptor, exception: exception); |
| 372 WorkItem item = | 372 WorkItem item = new WorkItem(context, target, descriptor, null, 0, null); |
| 373 new WorkItem(context, null, target, descriptor, null, 0, null); | |
| 374 | 373 |
| 375 analysisDriver.performWorkItem(item); | 374 analysisDriver.performWorkItem(item); |
| 376 CacheEntry targetEntry = context.getCacheEntry(item.target); | 375 CacheEntry targetEntry = context.getCacheEntry(item.target); |
| 377 expect(targetEntry.exception, exception); | 376 expect(targetEntry.exception, exception); |
| 378 expect(targetEntry.getState(result), CacheState.ERROR); | 377 expect(targetEntry.getState(result), CacheState.ERROR); |
| 379 } | 378 } |
| 380 | 379 |
| 381 test_performWorkItem_noException() { | 380 test_performWorkItem_noException() { |
| 382 AnalysisTarget target = new TestSource(); | 381 AnalysisTarget target = new TestSource(); |
| 383 ResultDescriptor result = new ResultDescriptor('result', null); | 382 ResultDescriptor result = new ResultDescriptor('result', null); |
| 384 TestAnalysisTask task; | 383 TestAnalysisTask task; |
| 385 TaskDescriptor descriptor = new TaskDescriptor( | 384 TaskDescriptor descriptor = new TaskDescriptor( |
| 386 'task', (context, target) => task, (target) => {}, [result]); | 385 'task', (context, target) => task, (target) => {}, [result]); |
| 387 task = new TestAnalysisTask(context, target, descriptor: descriptor); | 386 task = new TestAnalysisTask(context, target, descriptor: descriptor); |
| 388 WorkItem item = | 387 WorkItem item = new WorkItem(context, target, descriptor, null, 0, null); |
| 389 new WorkItem(context, null, target, descriptor, null, 0, null); | |
| 390 | 388 |
| 391 analysisDriver.performWorkItem(item); | 389 analysisDriver.performWorkItem(item); |
| 392 CacheEntry targetEntry = context.getCacheEntry(item.target); | 390 CacheEntry targetEntry = context.getCacheEntry(item.target); |
| 393 expect(targetEntry.exception, isNull); | 391 expect(targetEntry.exception, isNull); |
| 394 expect(targetEntry.getState(result), CacheState.VALID); | 392 expect(targetEntry.getState(result), CacheState.VALID); |
| 395 } | 393 } |
| 396 | 394 |
| 397 test_performWorkItem_preExistingException() { | 395 test_performWorkItem_preExistingException() { |
| 398 AnalysisTarget target = new TestSource(); | 396 AnalysisTarget target = new TestSource(); |
| 399 ResultDescriptor result = new ResultDescriptor('result', null); | 397 ResultDescriptor result = new ResultDescriptor('result', null); |
| 400 TaskDescriptor descriptor = new TaskDescriptor( | 398 TaskDescriptor descriptor = new TaskDescriptor( |
| 401 'task', | 399 'task', |
| 402 (context, target) => new TestAnalysisTask(context, target), | 400 (context, target) => new TestAnalysisTask(context, target), |
| 403 (target) => {}, | 401 (target) => {}, |
| 404 [result]); | 402 [result]); |
| 405 CaughtException exception = | 403 CaughtException exception = |
| 406 new CaughtException(new AnalysisException(), null); | 404 new CaughtException(new AnalysisException(), null); |
| 407 WorkItem item = | 405 WorkItem item = new WorkItem(context, target, descriptor, null, 0, null); |
| 408 new WorkItem(context, null, target, descriptor, null, 0, null); | |
| 409 item.exception = exception; | 406 item.exception = exception; |
| 410 | 407 |
| 411 analysisDriver.performWorkItem(item); | 408 analysisDriver.performWorkItem(item); |
| 412 CacheEntry targetEntry = context.getCacheEntry(item.target); | 409 CacheEntry targetEntry = context.getCacheEntry(item.target); |
| 413 expect(targetEntry.exception, exception); | 410 expect(targetEntry.exception, exception); |
| 414 expect(targetEntry.getState(result), CacheState.ERROR); | 411 expect(targetEntry.getState(result), CacheState.ERROR); |
| 415 } | 412 } |
| 416 | 413 |
| 417 test_reset() { | 414 test_reset() { |
| 418 ResultDescriptor inputResult = new ResultDescriptor('input', null); | 415 ResultDescriptor inputResult = new ResultDescriptor('input', null); |
| 419 TaskDescriptor descriptor = new TaskDescriptor( | 416 TaskDescriptor descriptor = new TaskDescriptor( |
| 420 'task', | 417 'task', |
| 421 (context, target) => new TestAnalysisTask(context, target), | 418 (context, target) => new TestAnalysisTask(context, target), |
| 422 (target) => {'one': inputResult.of(target)}, | 419 (target) => {'one': inputResult.of(target)}, |
| 423 [new ResultDescriptor('output', null)]); | 420 [new ResultDescriptor('output', null)]); |
| 424 analysisDriver.currentWorkOrder = new WorkOrder( | 421 analysisDriver.currentWorkOrder = new WorkOrder( |
| 425 taskManager, new WorkItem(null, null, null, descriptor, null, 0, null)); | 422 taskManager, new WorkItem(null, null, descriptor, null, 0, null)); |
| 426 | 423 |
| 427 analysisDriver.reset(); | 424 analysisDriver.reset(); |
| 428 expect(analysisDriver.currentWorkOrder, isNull); | 425 expect(analysisDriver.currentWorkOrder, isNull); |
| 429 } | 426 } |
| 430 | 427 |
| 431 void _configureDescriptors12() { | 428 void _configureDescriptors12() { |
| 432 descriptor1 = new TaskDescriptor( | 429 descriptor1 = new TaskDescriptor( |
| 433 'task1', | 430 'task1', |
| 434 (context, target) => | 431 (context, target) => |
| 435 new TestAnalysisTask(context, target, descriptor: descriptor1), | 432 new TestAnalysisTask(context, target, descriptor: descriptor1), |
| (...skipping 177 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 613 | 610 |
| 614 @reflectiveTest | 611 @reflectiveTest |
| 615 class WorkItemTest extends AbstractDriverTest { | 612 class WorkItemTest extends AbstractDriverTest { |
| 616 test_buildTask_complete() { | 613 test_buildTask_complete() { |
| 617 AnalysisTarget target = new TestSource(); | 614 AnalysisTarget target = new TestSource(); |
| 618 TaskDescriptor descriptor = new TaskDescriptor( | 615 TaskDescriptor descriptor = new TaskDescriptor( |
| 619 'task', | 616 'task', |
| 620 (context, target) => new TestAnalysisTask(context, target), | 617 (context, target) => new TestAnalysisTask(context, target), |
| 621 (target) => {}, | 618 (target) => {}, |
| 622 [new ResultDescriptor('output', null)]); | 619 [new ResultDescriptor('output', null)]); |
| 623 WorkItem item = | 620 WorkItem item = new WorkItem(context, target, descriptor, null, 0, null); |
| 624 new WorkItem(context, null, target, descriptor, null, 0, null); | |
| 625 AnalysisTask task = item.buildTask(); | 621 AnalysisTask task = item.buildTask(); |
| 626 expect(task, isNotNull); | 622 expect(task, isNotNull); |
| 627 } | 623 } |
| 628 | 624 |
| 629 test_buildTask_incomplete() { | 625 test_buildTask_incomplete() { |
| 630 AnalysisTarget target = new TestSource(); | 626 AnalysisTarget target = new TestSource(); |
| 631 ResultDescriptor inputResult = new ResultDescriptor('input', null); | 627 ResultDescriptor inputResult = new ResultDescriptor('input', null); |
| 632 List<ResultDescriptor> outputResults = <ResultDescriptor>[ | 628 List<ResultDescriptor> outputResults = <ResultDescriptor>[ |
| 633 new ResultDescriptor('output', null) | 629 new ResultDescriptor('output', null) |
| 634 ]; | 630 ]; |
| 635 TaskDescriptor descriptor = new TaskDescriptor( | 631 TaskDescriptor descriptor = new TaskDescriptor( |
| 636 'task', | 632 'task', |
| 637 (context, target) => | 633 (context, target) => |
| 638 new TestAnalysisTask(context, target, results: outputResults), | 634 new TestAnalysisTask(context, target, results: outputResults), |
| 639 (target) => {'one': inputResult.of(target)}, | 635 (target) => {'one': inputResult.of(target)}, |
| 640 outputResults); | 636 outputResults); |
| 641 WorkItem item = | 637 WorkItem item = new WorkItem(context, target, descriptor, null, 0, null); |
| 642 new WorkItem(context, null, target, descriptor, null, 0, null); | |
| 643 expect(() => item.buildTask(), throwsStateError); | 638 expect(() => item.buildTask(), throwsStateError); |
| 644 } | 639 } |
| 645 | 640 |
| 646 test_create() { | 641 test_create() { |
| 647 AnalysisTarget target = new TestSource(); | 642 AnalysisTarget target = new TestSource(); |
| 648 TaskDescriptor descriptor = new TaskDescriptor( | 643 TaskDescriptor descriptor = new TaskDescriptor( |
| 649 'task', null, (target) => {}, [new ResultDescriptor('result', null)]); | 644 'task', null, (target) => {}, [new ResultDescriptor('result', null)]); |
| 650 WorkItem item = | 645 WorkItem item = new WorkItem(context, target, descriptor, null, 0, null); |
| 651 new WorkItem(context, null, target, descriptor, null, 0, null); | |
| 652 expect(item, isNotNull); | 646 expect(item, isNotNull); |
| 653 expect(item.context, context); | 647 expect(item.context, context); |
| 654 expect(item.descriptor, descriptor); | 648 expect(item.descriptor, descriptor); |
| 655 expect(item.target, target); | 649 expect(item.target, target); |
| 656 } | 650 } |
| 657 | 651 |
| 658 test_gatherInputs_complete() { | 652 test_gatherInputs_complete() { |
| 659 AnalysisTarget target = new TestSource(); | 653 AnalysisTarget target = new TestSource(); |
| 660 TaskDescriptor descriptor = new TaskDescriptor( | 654 TaskDescriptor descriptor = new TaskDescriptor( |
| 661 'task', | 655 'task', |
| 662 (context, target) => new TestAnalysisTask(context, target), | 656 (context, target) => new TestAnalysisTask(context, target), |
| 663 (target) => {}, | 657 (target) => {}, |
| 664 [new ResultDescriptor('output', null)]); | 658 [new ResultDescriptor('output', null)]); |
| 665 WorkItem item = | 659 WorkItem item = new WorkItem(context, target, descriptor, null, 0, null); |
| 666 new WorkItem(context, null, target, descriptor, null, 0, null); | |
| 667 WorkItem result = item.gatherInputs(taskManager, []); | 660 WorkItem result = item.gatherInputs(taskManager, []); |
| 668 expect(result, isNull); | 661 expect(result, isNull); |
| 669 expect(item.exception, isNull); | 662 expect(item.exception, isNull); |
| 670 } | 663 } |
| 671 | 664 |
| 672 test_gatherInputs_incomplete() { | 665 test_gatherInputs_incomplete() { |
| 673 AnalysisTarget target = new TestSource(); | 666 AnalysisTarget target = new TestSource(); |
| 674 ResultDescriptor resultA = new ResultDescriptor('resultA', null); | 667 ResultDescriptor resultA = new ResultDescriptor('resultA', null); |
| 675 ResultDescriptor resultB = new ResultDescriptor('resultB', null); | 668 ResultDescriptor resultB = new ResultDescriptor('resultB', null); |
| 676 // prepare tasks | 669 // prepare tasks |
| 677 TaskDescriptor task1 = new TaskDescriptor( | 670 TaskDescriptor task1 = new TaskDescriptor( |
| 678 'task', | 671 'task', |
| 679 (context, target) => | 672 (context, target) => |
| 680 new TestAnalysisTask(context, target, results: [resultA]), | 673 new TestAnalysisTask(context, target, results: [resultA]), |
| 681 (target) => {}, | 674 (target) => {}, |
| 682 [resultA]); | 675 [resultA]); |
| 683 TaskDescriptor task2 = new TaskDescriptor( | 676 TaskDescriptor task2 = new TaskDescriptor( |
| 684 'task', | 677 'task', |
| 685 (context, target) => new TestAnalysisTask(context, target), | 678 (context, target) => new TestAnalysisTask(context, target), |
| 686 (target) => {'one': resultA.of(target)}, | 679 (target) => {'one': resultA.of(target)}, |
| 687 [resultB]); | 680 [resultB]); |
| 688 taskManager.addTaskDescriptor(task1); | 681 taskManager.addTaskDescriptor(task1); |
| 689 taskManager.addTaskDescriptor(task2); | 682 taskManager.addTaskDescriptor(task2); |
| 690 // gather inputs | 683 // gather inputs |
| 691 WorkItem item = new WorkItem(context, null, target, task2, null, 0, null); | 684 WorkItem item = new WorkItem(context, target, task2, null, 0, null); |
| 692 WorkItem inputItem = item.gatherInputs(taskManager, []); | 685 WorkItem inputItem = item.gatherInputs(taskManager, []); |
| 693 expect(inputItem, isNotNull); | 686 expect(inputItem, isNotNull); |
| 694 } | 687 } |
| 695 | 688 |
| 696 test_gatherInputs_invalid() { | 689 test_gatherInputs_invalid() { |
| 697 AnalysisTarget target = new TestSource(); | 690 AnalysisTarget target = new TestSource(); |
| 698 ResultDescriptor inputResult = new ResultDescriptor('input', null); | 691 ResultDescriptor inputResult = new ResultDescriptor('input', null); |
| 699 TaskDescriptor descriptor = new TaskDescriptor( | 692 TaskDescriptor descriptor = new TaskDescriptor( |
| 700 'task', | 693 'task', |
| 701 (context, target) => new TestAnalysisTask(context, target), | 694 (context, target) => new TestAnalysisTask(context, target), |
| 702 (target) => {'one': inputResult.of(target)}, | 695 (target) => {'one': inputResult.of(target)}, |
| 703 [new ResultDescriptor('output', null)]); | 696 [new ResultDescriptor('output', null)]); |
| 704 WorkItem item = | 697 WorkItem item = new WorkItem(context, target, descriptor, null, 0, null); |
| 705 new WorkItem(context, null, target, descriptor, null, 0, null); | |
| 706 WorkItem result = item.gatherInputs(taskManager, []); | 698 WorkItem result = item.gatherInputs(taskManager, []); |
| 707 expect(result, isNull); | 699 expect(result, isNull); |
| 708 expect(item.exception, isNotNull); | 700 expect(item.exception, isNotNull); |
| 709 } | 701 } |
| 710 | 702 |
| 711 test_gatherInputs_useResultProvider_hasResult() { | 703 test_gatherInputs_aboutToComputeResult_hasResult() { |
| 712 AnalysisTarget target = new TestSource(); | 704 AnalysisTarget target = new TestSource(); |
| 713 ResultDescriptor resultA = new ResultDescriptor('resultA', null); | 705 ResultDescriptor resultA = new ResultDescriptor('resultA', null); |
| 714 ResultDescriptor resultB = new ResultDescriptor('resultB', null); | 706 ResultDescriptor resultB = new ResultDescriptor('resultB', null); |
| 715 // prepare tasks | 707 // prepare tasks |
| 716 TaskDescriptor task1 = new TaskDescriptor( | 708 TaskDescriptor task1 = new TaskDescriptor( |
| 717 'task', | 709 'task', |
| 718 (context, target) => | 710 (context, target) => |
| 719 new TestAnalysisTask(context, target, results: [resultA]), | 711 new TestAnalysisTask(context, target, results: [resultA]), |
| 720 (target) => {}, | 712 (target) => {}, |
| 721 [resultA]); | 713 [resultA]); |
| 722 TaskDescriptor task2 = new TaskDescriptor( | 714 TaskDescriptor task2 = new TaskDescriptor( |
| 723 'task', | 715 'task', |
| 724 (context, target) => new TestAnalysisTask(context, target), | 716 (context, target) => new TestAnalysisTask(context, target), |
| 725 (target) => {'one': resultA.of(target)}, | 717 (target) => {'one': resultA.of(target)}, |
| 726 [resultB]); | 718 [resultB]); |
| 727 taskManager.addTaskDescriptor(task1); | 719 taskManager.addTaskDescriptor(task1); |
| 728 taskManager.addTaskDescriptor(task2); | 720 taskManager.addTaskDescriptor(task2); |
| 729 // configure ResultProvider | 721 // configure mocks |
| 730 ResultProvider resultProvider = new _ResultProviderMock(); | 722 when(context.aboutToComputeResult(anyObject, resultA)).thenReturn(true); |
| 731 when(resultProvider.provideResult(context, anyObject, resultA)) | |
| 732 .thenReturn(true); | |
| 733 // gather inputs | 723 // gather inputs |
| 734 WorkItem item = | 724 WorkItem item = new WorkItem(context, target, task2, null, 0, null); |
| 735 new WorkItem(context, resultProvider, target, task2, null, 0, null); | |
| 736 WorkItem inputItem = item.gatherInputs(taskManager, []); | 725 WorkItem inputItem = item.gatherInputs(taskManager, []); |
| 737 expect(inputItem, isNull); | 726 expect(inputItem, isNull); |
| 738 } | 727 } |
| 739 | 728 |
| 740 test_gatherInputs_useResultProvider_noResult() { | 729 test_gatherInputs_aboutToComputeResult_noResult() { |
| 741 AnalysisTarget target = new TestSource(); | 730 AnalysisTarget target = new TestSource(); |
| 742 ResultDescriptor resultA = new ResultDescriptor('resultA', null); | 731 ResultDescriptor resultA = new ResultDescriptor('resultA', null); |
| 743 ResultDescriptor resultB = new ResultDescriptor('resultB', null); | 732 ResultDescriptor resultB = new ResultDescriptor('resultB', null); |
| 744 // prepare tasks | 733 // prepare tasks |
| 745 TaskDescriptor task1 = new TaskDescriptor( | 734 TaskDescriptor task1 = new TaskDescriptor( |
| 746 'task', | 735 'task', |
| 747 (context, target) => | 736 (context, target) => |
| 748 new TestAnalysisTask(context, target, results: [resultA]), | 737 new TestAnalysisTask(context, target, results: [resultA]), |
| 749 (target) => {}, | 738 (target) => {}, |
| 750 [resultA]); | 739 [resultA]); |
| 751 TaskDescriptor task2 = new TaskDescriptor( | 740 TaskDescriptor task2 = new TaskDescriptor( |
| 752 'task', | 741 'task', |
| 753 (context, target) => new TestAnalysisTask(context, target), | 742 (context, target) => new TestAnalysisTask(context, target), |
| 754 (target) => {'one': resultA.of(target)}, | 743 (target) => {'one': resultA.of(target)}, |
| 755 [resultB]); | 744 [resultB]); |
| 756 taskManager.addTaskDescriptor(task1); | 745 taskManager.addTaskDescriptor(task1); |
| 757 taskManager.addTaskDescriptor(task2); | 746 taskManager.addTaskDescriptor(task2); |
| 758 // configure ResultProvider | 747 // configure ResultProvider |
| 759 ResultProvider resultProvider = new _ResultProviderMock(); | 748 // configure mocks |
| 760 when(resultProvider.provideResult(anyObject, anyObject, anyObject)) | 749 when(context.aboutToComputeResult(anyObject, resultA)).thenReturn(false); |
| 761 .thenReturn(false); | |
| 762 // gather inputs | 750 // gather inputs |
| 763 WorkItem item = | 751 WorkItem item = new WorkItem(context, target, task2, null, 0, null); |
| 764 new WorkItem(context, resultProvider, target, task2, null, 0, null); | |
| 765 WorkItem inputItem = item.gatherInputs(taskManager, []); | 752 WorkItem inputItem = item.gatherInputs(taskManager, []); |
| 766 expect(inputItem, isNotNull); | 753 expect(inputItem, isNotNull); |
| 767 expect(inputItem.target, target); | 754 expect(inputItem.target, target); |
| 768 expect(inputItem.descriptor, task1); | 755 expect(inputItem.descriptor, task1); |
| 769 } | 756 } |
| 770 } | 757 } |
| 771 | 758 |
| 772 @reflectiveTest | 759 @reflectiveTest |
| 773 class WorkOrderTest extends EngineTestCase { | 760 class WorkOrderTest extends EngineTestCase { |
| 774 test_create() { | 761 test_create() { |
| 775 TaskManager manager = new TaskManager(); | 762 TaskManager manager = new TaskManager(); |
| 776 TaskDescriptor descriptor = new TaskDescriptor( | 763 TaskDescriptor descriptor = new TaskDescriptor( |
| 777 'task', null, (_) => {}, [new ResultDescriptor('result', null)]); | 764 'task', null, (_) => {}, [new ResultDescriptor('result', null)]); |
| 778 WorkOrder order = new WorkOrder( | 765 WorkOrder order = new WorkOrder( |
| 779 manager, new WorkItem(null, null, null, descriptor, null, 0, null)); | 766 manager, new WorkItem(null, null, descriptor, null, 0, null)); |
| 780 expect(order, isNotNull); | 767 expect(order, isNotNull); |
| 781 expect(order.currentItems, isNull); | 768 expect(order.currentItems, isNull); |
| 782 expect(order.current, isNull); | 769 expect(order.current, isNull); |
| 783 } | 770 } |
| 784 | 771 |
| 785 test_moveNext() { | 772 test_moveNext() { |
| 786 TaskManager manager = new TaskManager(); | 773 TaskManager manager = new TaskManager(); |
| 787 TaskDescriptor descriptor = new TaskDescriptor( | 774 TaskDescriptor descriptor = new TaskDescriptor( |
| 788 'task', null, (_) => {}, [new ResultDescriptor('result', null)]); | 775 'task', null, (_) => {}, [new ResultDescriptor('result', null)]); |
| 789 WorkItem workItem = | 776 WorkItem workItem = new WorkItem(null, null, descriptor, null, 0, null); |
| 790 new WorkItem(null, null, null, descriptor, null, 0, null); | |
| 791 WorkOrder order = new WorkOrder(manager, workItem); | 777 WorkOrder order = new WorkOrder(manager, workItem); |
| 792 // "item" has no child items | 778 // "item" has no child items |
| 793 expect(order.moveNext(), isTrue); | 779 expect(order.moveNext(), isTrue); |
| 794 expect(order.current, workItem); | 780 expect(order.current, workItem); |
| 795 // done | 781 // done |
| 796 expect(order.moveNext(), isFalse); | 782 expect(order.moveNext(), isFalse); |
| 797 expect(order.current, isNull); | 783 expect(order.current, isNull); |
| 798 } | 784 } |
| 799 } | 785 } |
| 800 | 786 |
| (...skipping 19 matching lines...) Expand all Loading... |
| 820 CacheEntry getCacheEntry(AnalysisTarget target) { | 806 CacheEntry getCacheEntry(AnalysisTarget target) { |
| 821 CacheEntry entry = analysisCache.get(target); | 807 CacheEntry entry = analysisCache.get(target); |
| 822 if (entry == null) { | 808 if (entry == null) { |
| 823 entry = new CacheEntry(target); | 809 entry = new CacheEntry(target); |
| 824 analysisCache.put(entry); | 810 analysisCache.put(entry); |
| 825 } | 811 } |
| 826 return entry; | 812 return entry; |
| 827 } | 813 } |
| 828 } | 814 } |
| 829 | 815 |
| 830 class _ResultProviderMock extends TypedMock implements ResultProvider {} | |
| 831 | |
| 832 /** | 816 /** |
| 833 * Concrete class for testing [CycleAwareDependencyWalker] behavior. | 817 * Concrete class for testing [CycleAwareDependencyWalker] behavior. |
| 834 */ | 818 */ |
| 835 class _TestCycleAwareDependencyWalker extends CycleAwareDependencyWalker<int> { | 819 class _TestCycleAwareDependencyWalker extends CycleAwareDependencyWalker<int> { |
| 836 final Map<int, List<int>> graph; | 820 final Map<int, List<int>> graph; |
| 837 | 821 |
| 838 Set<int> evaluatedNodes = new Set<int>(); | 822 Set<int> evaluatedNodes = new Set<int>(); |
| 839 | 823 |
| 840 _TestCycleAwareDependencyWalker(this.graph, int startingNode) | 824 _TestCycleAwareDependencyWalker(this.graph, int startingNode) |
| 841 : super(startingNode); | 825 : super(startingNode); |
| 842 | 826 |
| 843 @override | 827 @override |
| 844 int getNextInput(int node, List<int> skipInputs) { | 828 int getNextInput(int node, List<int> skipInputs) { |
| 845 for (int dependency in graph[node]) { | 829 for (int dependency in graph[node]) { |
| 846 if (!skipInputs.contains(dependency) && | 830 if (!skipInputs.contains(dependency) && |
| 847 !evaluatedNodes.contains(dependency)) { | 831 !evaluatedNodes.contains(dependency)) { |
| 848 return dependency; | 832 return dependency; |
| 849 } | 833 } |
| 850 } | 834 } |
| 851 return null; | 835 return null; |
| 852 } | 836 } |
| 853 } | 837 } |
| 854 | 838 |
| 855 class _WorkManagerMock extends TypedMock implements WorkManager {} | 839 class _WorkManagerMock extends TypedMock implements WorkManager {} |
| OLD | NEW |