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

Side by Side Diff: pkg/analyzer/test/src/task/driver_test.dart

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

Powered by Google App Engine
This is Rietveld 408576698