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/exception/exception.dart'; | 7 import 'package:analyzer/exception/exception.dart'; |
8 import 'package:analyzer/src/context/cache.dart'; | 8 import 'package:analyzer/src/context/cache.dart'; |
9 import 'package:analyzer/src/generated/engine.dart'; | 9 import 'package:analyzer/src/generated/engine.dart'; |
10 import 'package:analyzer/src/task/driver.dart'; | 10 import 'package:analyzer/src/task/driver.dart'; |
11 import 'package:analyzer/src/task/inputs.dart'; | 11 import 'package:analyzer/src/task/inputs.dart'; |
12 import 'package:analyzer/src/task/manager.dart'; | 12 import 'package:analyzer/src/task/manager.dart'; |
13 import 'package:analyzer/task/model.dart'; | 13 import 'package:analyzer/task/model.dart'; |
| 14 import 'package:mockito/mockito.dart'; |
14 import 'package:test/test.dart'; | 15 import 'package:test/test.dart'; |
15 import 'package:test_reflective_loader/test_reflective_loader.dart'; | 16 import 'package:test_reflective_loader/test_reflective_loader.dart'; |
16 import 'package:typed_mock/typed_mock.dart'; | |
17 | 17 |
18 import '../../generated/test_support.dart'; | 18 import '../../generated/test_support.dart'; |
19 import 'test_support.dart'; | 19 import 'test_support.dart'; |
20 | 20 |
21 main() { | 21 main() { |
22 defineReflectiveSuite(() { | 22 defineReflectiveSuite(() { |
23 defineReflectiveTests(AnalysisDriverTest); | 23 defineReflectiveTests(AnalysisDriverTest); |
24 defineReflectiveTests(CycleAwareDependencyWalkerTest); | 24 defineReflectiveTests(CycleAwareDependencyWalkerTest); |
25 defineReflectiveTests(WorkItemTest); | 25 defineReflectiveTests(WorkItemTest); |
26 defineReflectiveTests(WorkOrderTest); | 26 defineReflectiveTests(WorkOrderTest); |
27 }); | 27 }); |
28 } | 28 } |
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 when(context.aboutToComputeResult(any, any)).thenReturn(false); |
40 } | 40 } |
41 } | 41 } |
42 | 42 |
43 @reflectiveTest | 43 @reflectiveTest |
44 class AnalysisDriverTest extends AbstractDriverTest { | 44 class AnalysisDriverTest extends AbstractDriverTest { |
45 WorkManager workManager1 = new _WorkManagerMock(); | 45 WorkManager workManager1 = new _WorkManagerMock(); |
46 WorkManager workManager2 = new _WorkManagerMock(); | 46 WorkManager workManager2 = new _WorkManagerMock(); |
47 | 47 |
48 AnalysisTarget target1 = new TestSource('/1.dart'); | 48 AnalysisTarget target1 = new TestSource('/1.dart'); |
49 AnalysisTarget target2 = new TestSource('/2.dart'); | 49 AnalysisTarget target2 = new TestSource('/2.dart'); |
(...skipping 79 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
129 ResultDescriptor result = new ResultDescriptor('result', null); | 129 ResultDescriptor result = new ResultDescriptor('result', null); |
130 TaskDescriptor descriptor = new TaskDescriptor( | 130 TaskDescriptor descriptor = new TaskDescriptor( |
131 'task', | 131 'task', |
132 (context, target) => new TestAnalysisTask(context, target), | 132 (context, target) => new TestAnalysisTask(context, target), |
133 (target) => {}, | 133 (target) => {}, |
134 [result]); | 134 [result]); |
135 taskManager.addTaskDescriptor(descriptor); | 135 taskManager.addTaskDescriptor(descriptor); |
136 context.getCacheEntry(target).setState(result, CacheState.INVALID); | 136 context.getCacheEntry(target).setState(result, CacheState.INVALID); |
137 // has result | 137 // has result |
138 { | 138 { |
139 when(context.aboutToComputeResult(anyObject, result)).thenReturn(true); | 139 when(context.aboutToComputeResult(any, result)).thenReturn(true); |
140 WorkOrder workOrder = | 140 WorkOrder workOrder = |
141 analysisDriver.createWorkOrderForResult(target, result); | 141 analysisDriver.createWorkOrderForResult(target, result); |
142 expect(workOrder, isNull); | 142 expect(workOrder, isNull); |
143 } | 143 } |
144 // no result | 144 // no result |
145 { | 145 { |
146 when(context.aboutToComputeResult(anyObject, result)).thenReturn(false); | 146 when(context.aboutToComputeResult(any, result)).thenReturn(false); |
147 WorkOrder workOrder = | 147 WorkOrder workOrder = |
148 analysisDriver.createWorkOrderForResult(target, result); | 148 analysisDriver.createWorkOrderForResult(target, result); |
149 expect(workOrder, isNotNull); | 149 expect(workOrder, isNotNull); |
150 } | 150 } |
151 } | 151 } |
152 | 152 |
153 test_createWorkOrderForResult_error() { | 153 test_createWorkOrderForResult_error() { |
154 AnalysisTarget target = new TestSource(); | 154 AnalysisTarget target = new TestSource(); |
155 ResultDescriptor result = new ResultDescriptor('result', null); | 155 ResultDescriptor result = new ResultDescriptor('result', null); |
156 CaughtException exception = new CaughtException(null, null); | 156 CaughtException exception = new CaughtException(null, null); |
(...skipping 66 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
223 test_createWorkOrderForTarget_incomplete_priorityTarget_generalResult() { | 223 test_createWorkOrderForTarget_incomplete_priorityTarget_generalResult() { |
224 _createWorkOrderForTarget(false, true, false); | 224 _createWorkOrderForTarget(false, true, false); |
225 } | 225 } |
226 | 226 |
227 test_createWorkOrderForTarget_incomplete_priorityTarget_priorityResult() { | 227 test_createWorkOrderForTarget_incomplete_priorityTarget_priorityResult() { |
228 _createWorkOrderForTarget(false, true, true); | 228 _createWorkOrderForTarget(false, true, true); |
229 } | 229 } |
230 | 230 |
231 test_performAnalysisTask() { | 231 test_performAnalysisTask() { |
232 _configureDescriptors12(); | 232 _configureDescriptors12(); |
233 when(workManager1.getNextResultPriority()).thenReturnList( | |
234 <WorkOrderPriority>[WorkOrderPriority.NORMAL, WorkOrderPriority.NONE]); | |
235 when(workManager1.getNextResult()) | 233 when(workManager1.getNextResult()) |
236 .thenReturn(new TargetedResult(target1, result1)); | 234 .thenReturn(new TargetedResult(target1, result1)); |
237 | 235 |
| 236 when(workManager1.getNextResultPriority()) |
| 237 .thenReturn(WorkOrderPriority.NORMAL); |
238 expect(analysisDriver.performAnalysisTask(), true); | 238 expect(analysisDriver.performAnalysisTask(), true); |
239 expect(analysisDriver.performAnalysisTask(), true); | 239 expect(analysisDriver.performAnalysisTask(), true); |
| 240 |
| 241 when(workManager1.getNextResultPriority()) |
| 242 .thenReturn(WorkOrderPriority.NONE); |
240 expect(analysisDriver.performAnalysisTask(), false); | 243 expect(analysisDriver.performAnalysisTask(), false); |
241 } | 244 } |
242 | 245 |
243 test_performAnalysisTask_infiniteLoop_handled() { | 246 test_performAnalysisTask_infiniteLoop_handled() { |
244 AnalysisTarget target = new TestSource(); | 247 AnalysisTarget target = new TestSource(); |
245 ResultDescriptor<int> resultA = new ResultDescriptor<int>('resultA', -1); | 248 ResultDescriptor<int> resultA = new ResultDescriptor<int>('resultA', -1); |
246 ResultDescriptor<int> resultB = new ResultDescriptor<int>('resultB', -2); | 249 ResultDescriptor<int> resultB = new ResultDescriptor<int>('resultB', -2); |
247 // configure tasks | 250 // configure tasks |
248 TestAnalysisTask task1; | 251 TestAnalysisTask task1; |
249 TestAnalysisTask task2; | 252 TestAnalysisTask task2; |
(...skipping 13 matching lines...) Expand all Loading... |
263 value: 10, | 266 value: 10, |
264 handlesDependencyCycles: true); | 267 handlesDependencyCycles: true); |
265 task2 = new TestAnalysisTask(context, target, | 268 task2 = new TestAnalysisTask(context, target, |
266 descriptor: descriptor2, | 269 descriptor: descriptor2, |
267 results: [resultB], | 270 results: [resultB], |
268 value: 20, | 271 value: 20, |
269 handlesDependencyCycles: true); | 272 handlesDependencyCycles: true); |
270 taskManager.addTaskDescriptor(descriptor1); | 273 taskManager.addTaskDescriptor(descriptor1); |
271 taskManager.addTaskDescriptor(descriptor2); | 274 taskManager.addTaskDescriptor(descriptor2); |
272 // configure WorkManager | 275 // configure WorkManager |
273 when(workManager1.getNextResultPriority()).thenReturnList( | 276 when(workManager1.getNextResultPriority()) |
274 <WorkOrderPriority>[WorkOrderPriority.NORMAL, WorkOrderPriority.NONE]); | 277 .thenReturn(WorkOrderPriority.NORMAL); |
275 when(workManager1.getNextResult()) | 278 when(workManager1.getNextResult()) |
276 .thenReturn(new TargetedResult(target, resultB)); | 279 .thenReturn(new TargetedResult(target, resultB)); |
277 // prepare work order | 280 // prepare work order |
278 while (analysisDriver.performAnalysisTask()) {} | 281 while (analysisDriver.performAnalysisTask()) { |
| 282 when(workManager1.getNextResultPriority()) |
| 283 .thenReturn(WorkOrderPriority.NONE); |
| 284 } |
279 Set<TaskDescriptor> expectedCycle = [descriptor1, descriptor2].toSet(); | 285 Set<TaskDescriptor> expectedCycle = [descriptor1, descriptor2].toSet(); |
280 expect(task1.dependencyCycle, isNotNull); | 286 expect(task1.dependencyCycle, isNotNull); |
281 expect(task1.dependencyCycle.map((workItem) => workItem.descriptor).toSet(), | 287 expect(task1.dependencyCycle.map((workItem) => workItem.descriptor).toSet(), |
282 expectedCycle); | 288 expectedCycle); |
283 expect(task2.dependencyCycle, isNotNull); | 289 expect(task2.dependencyCycle, isNotNull); |
284 expect(task2.dependencyCycle.map((workItem) => workItem.descriptor).toSet(), | 290 expect(task2.dependencyCycle.map((workItem) => workItem.descriptor).toSet(), |
285 expectedCycle); | 291 expectedCycle); |
286 CaughtException exception = context.getCacheEntry(target).exception; | 292 CaughtException exception = context.getCacheEntry(target).exception; |
287 expect(exception, isNull); | 293 expect(exception, isNull); |
288 expect(context.getCacheEntry(target).getValue(resultA), 10); | 294 expect(context.getCacheEntry(target).getValue(resultA), 10); |
(...skipping 15 matching lines...) Expand all Loading... |
304 TaskDescriptor descriptor2 = new TaskDescriptor( | 310 TaskDescriptor descriptor2 = new TaskDescriptor( |
305 'task2', | 311 'task2', |
306 (context, target) => task2, | 312 (context, target) => task2, |
307 (target) => {'inputA': new SimpleTaskInput<int>(target, resultA)}, | 313 (target) => {'inputA': new SimpleTaskInput<int>(target, resultA)}, |
308 [resultB]); | 314 [resultB]); |
309 task1 = new TestAnalysisTask(context, target, descriptor: descriptor1); | 315 task1 = new TestAnalysisTask(context, target, descriptor: descriptor1); |
310 task2 = new TestAnalysisTask(context, target, descriptor: descriptor2); | 316 task2 = new TestAnalysisTask(context, target, descriptor: descriptor2); |
311 taskManager.addTaskDescriptor(descriptor1); | 317 taskManager.addTaskDescriptor(descriptor1); |
312 taskManager.addTaskDescriptor(descriptor2); | 318 taskManager.addTaskDescriptor(descriptor2); |
313 // configure WorkManager | 319 // configure WorkManager |
314 when(workManager1.getNextResultPriority()).thenReturnList( | 320 when(workManager1.getNextResultPriority()) |
315 <WorkOrderPriority>[WorkOrderPriority.NORMAL, WorkOrderPriority.NONE]); | 321 .thenReturn(WorkOrderPriority.NORMAL); |
316 when(workManager1.getNextResult()) | 322 when(workManager1.getNextResult()) |
317 .thenReturn(new TargetedResult(target, resultB)); | 323 .thenReturn(new TargetedResult(target, resultB)); |
318 // prepare work order | 324 // prepare work order |
319 expect(analysisDriver.performAnalysisTask(), true); | 325 expect(analysisDriver.performAnalysisTask(), true); |
320 expect(analysisDriver.performAnalysisTask(), true); | 326 expect(analysisDriver.performAnalysisTask(), true); |
321 CaughtException exception = context.getCacheEntry(target).exception; | 327 CaughtException exception = context.getCacheEntry(target).exception; |
322 expect(exception, isNotNull); | 328 expect(exception, isNotNull); |
323 expect(exception.exception, new isInstanceOf<InfiniteTaskLoopException>()); | 329 expect(exception.exception, new isInstanceOf<InfiniteTaskLoopException>()); |
324 } | 330 } |
325 | 331 |
(...skipping 11 matching lines...) Expand all Loading... |
337 (context, target) => task2, | 343 (context, target) => task2, |
338 (target) => {'inputA': new SimpleTaskInput<int>(target, resultA)}, | 344 (target) => {'inputA': new SimpleTaskInput<int>(target, resultA)}, |
339 [resultB]); | 345 [resultB]); |
340 task1 = new TestAnalysisTask(context, target, | 346 task1 = new TestAnalysisTask(context, target, |
341 descriptor: descriptor1, results: [resultA], value: 10); | 347 descriptor: descriptor1, results: [resultA], value: 10); |
342 task2 = new TestAnalysisTask(context, target, | 348 task2 = new TestAnalysisTask(context, target, |
343 descriptor: descriptor2, value: 20); | 349 descriptor: descriptor2, value: 20); |
344 taskManager.addTaskDescriptor(descriptor1); | 350 taskManager.addTaskDescriptor(descriptor1); |
345 taskManager.addTaskDescriptor(descriptor2); | 351 taskManager.addTaskDescriptor(descriptor2); |
346 // configure WorkManager | 352 // configure WorkManager |
347 when(workManager1.getNextResultPriority()).thenReturnList( | 353 when(workManager1.getNextResultPriority()) |
348 <WorkOrderPriority>[WorkOrderPriority.NORMAL, WorkOrderPriority.NONE]); | 354 .thenReturn(WorkOrderPriority.NORMAL); |
349 when(workManager1.getNextResult()) | 355 when(workManager1.getNextResult()) |
350 .thenReturn(new TargetedResult(target, resultB)); | 356 .thenReturn(new TargetedResult(target, resultB)); |
351 // prepare work order | 357 // prepare work order |
352 expect(analysisDriver.performAnalysisTask(), true); | 358 expect(analysisDriver.performAnalysisTask(), true); |
353 expect(context.getCacheEntry(target).getValue(resultA), -1); | 359 expect(context.getCacheEntry(target).getValue(resultA), -1); |
354 expect(context.getCacheEntry(target).getValue(resultB), -2); | 360 expect(context.getCacheEntry(target).getValue(resultB), -2); |
355 // compute resultA | 361 // compute resultA |
356 expect(analysisDriver.performAnalysisTask(), true); | 362 expect(analysisDriver.performAnalysisTask(), true); |
357 expect(context.getCacheEntry(target).getValue(resultA), 10); | 363 expect(context.getCacheEntry(target).getValue(resultA), 10); |
358 expect(context.getCacheEntry(target).getValue(resultB), -2); | 364 expect(context.getCacheEntry(target).getValue(resultB), -2); |
359 // compute resultB | 365 // compute resultB |
360 expect(analysisDriver.performAnalysisTask(), true); | 366 expect(analysisDriver.performAnalysisTask(), true); |
361 expect(context.getCacheEntry(target).getValue(resultA), 10); | 367 expect(context.getCacheEntry(target).getValue(resultA), 10); |
362 expect(context.getCacheEntry(target).getValue(resultB), 20); | 368 expect(context.getCacheEntry(target).getValue(resultB), 20); |
363 // done | 369 // done |
| 370 when(workManager1.getNextResultPriority()) |
| 371 .thenReturn(WorkOrderPriority.NONE); |
364 expect(analysisDriver.performAnalysisTask(), false); | 372 expect(analysisDriver.performAnalysisTask(), false); |
365 } | 373 } |
366 | 374 |
367 test_performAnalysisTask_onResultComputed() { | 375 test_performAnalysisTask_onResultComputed() { |
368 AnalysisTarget target = new TestSource(); | 376 AnalysisTarget target = new TestSource(); |
369 ResultDescriptor result = new ResultDescriptor('result', null); | 377 ResultDescriptor result = new ResultDescriptor('result', null); |
370 TestAnalysisTask task; | 378 TestAnalysisTask task; |
371 TaskDescriptor descriptor = new TaskDescriptor( | 379 TaskDescriptor descriptor = new TaskDescriptor( |
372 'task', (context, target) => task, (target) => {}, [result]); | 380 'task', (context, target) => task, (target) => {}, [result]); |
373 task = new TestAnalysisTask(context, target, | 381 task = new TestAnalysisTask(context, target, |
(...skipping 315 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
689 (target) => {}, | 697 (target) => {}, |
690 [resultA]); | 698 [resultA]); |
691 TaskDescriptor task2 = new TaskDescriptor( | 699 TaskDescriptor task2 = new TaskDescriptor( |
692 'task', | 700 'task', |
693 (context, target) => new TestAnalysisTask(context, target), | 701 (context, target) => new TestAnalysisTask(context, target), |
694 (target) => {'one': resultA.of(target)}, | 702 (target) => {'one': resultA.of(target)}, |
695 [resultB]); | 703 [resultB]); |
696 taskManager.addTaskDescriptor(task1); | 704 taskManager.addTaskDescriptor(task1); |
697 taskManager.addTaskDescriptor(task2); | 705 taskManager.addTaskDescriptor(task2); |
698 // configure mocks | 706 // configure mocks |
699 when(context.aboutToComputeResult(anyObject, resultA)).thenReturn(true); | 707 when(context.aboutToComputeResult(any, resultA)).thenReturn(true); |
700 // gather inputs | 708 // gather inputs |
701 WorkItem item = new WorkItem(context, target, task2, null, 0, null); | 709 WorkItem item = new WorkItem(context, target, task2, null, 0, null); |
702 WorkItem inputItem = item.gatherInputs(taskManager, []); | 710 WorkItem inputItem = item.gatherInputs(taskManager, []); |
703 expect(inputItem, isNull); | 711 expect(inputItem, isNull); |
704 } | 712 } |
705 | 713 |
706 test_gatherInputs_aboutToComputeResult_noResult() { | 714 test_gatherInputs_aboutToComputeResult_noResult() { |
707 AnalysisTarget target = new TestSource(); | 715 AnalysisTarget target = new TestSource(); |
708 ResultDescriptor resultA = new ResultDescriptor('resultA', null); | 716 ResultDescriptor resultA = new ResultDescriptor('resultA', null); |
709 ResultDescriptor resultB = new ResultDescriptor('resultB', null); | 717 ResultDescriptor resultB = new ResultDescriptor('resultB', null); |
710 // prepare tasks | 718 // prepare tasks |
711 TaskDescriptor task1 = new TaskDescriptor( | 719 TaskDescriptor task1 = new TaskDescriptor( |
712 'task', | 720 'task', |
713 (context, target) => | 721 (context, target) => |
714 new TestAnalysisTask(context, target, results: [resultA]), | 722 new TestAnalysisTask(context, target, results: [resultA]), |
715 (target) => {}, | 723 (target) => {}, |
716 [resultA]); | 724 [resultA]); |
717 TaskDescriptor task2 = new TaskDescriptor( | 725 TaskDescriptor task2 = new TaskDescriptor( |
718 'task', | 726 'task', |
719 (context, target) => new TestAnalysisTask(context, target), | 727 (context, target) => new TestAnalysisTask(context, target), |
720 (target) => {'one': resultA.of(target)}, | 728 (target) => {'one': resultA.of(target)}, |
721 [resultB]); | 729 [resultB]); |
722 taskManager.addTaskDescriptor(task1); | 730 taskManager.addTaskDescriptor(task1); |
723 taskManager.addTaskDescriptor(task2); | 731 taskManager.addTaskDescriptor(task2); |
724 // configure ResultProvider | 732 // configure ResultProvider |
725 // configure mocks | 733 // configure mocks |
726 when(context.aboutToComputeResult(anyObject, resultA)).thenReturn(false); | 734 when(context.aboutToComputeResult(any, resultA)).thenReturn(false); |
727 // gather inputs | 735 // gather inputs |
728 WorkItem item = new WorkItem(context, target, task2, null, 0, null); | 736 WorkItem item = new WorkItem(context, target, task2, null, 0, null); |
729 WorkItem inputItem = item.gatherInputs(taskManager, []); | 737 WorkItem inputItem = item.gatherInputs(taskManager, []); |
730 expect(inputItem, isNotNull); | 738 expect(inputItem, isNotNull); |
731 expect(inputItem.target, target); | 739 expect(inputItem.target, target); |
732 expect(inputItem.descriptor, task1); | 740 expect(inputItem.descriptor, task1); |
733 } | 741 } |
734 | 742 |
735 test_gatherInputs_complete() { | 743 test_gatherInputs_complete() { |
736 AnalysisTarget target = new TestSource(); | 744 AnalysisTarget target = new TestSource(); |
(...skipping 72 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
809 // done | 817 // done |
810 expect(order.moveNext(), isFalse); | 818 expect(order.moveNext(), isFalse); |
811 expect(order.current, isNull); | 819 expect(order.current, isNull); |
812 } | 820 } |
813 } | 821 } |
814 | 822 |
815 /** | 823 /** |
816 * A dummy [InternalAnalysisContext] that does not use [AnalysisDriver] itself, | 824 * A dummy [InternalAnalysisContext] that does not use [AnalysisDriver] itself, |
817 * but provides enough implementation for it to function. | 825 * but provides enough implementation for it to function. |
818 */ | 826 */ |
819 class _InternalAnalysisContextMock extends TypedMock | 827 class _InternalAnalysisContextMock extends Mock |
820 implements InternalAnalysisContext { | 828 implements InternalAnalysisContext { |
821 AnalysisCache analysisCache; | 829 AnalysisCache analysisCache; |
822 | 830 |
823 @override | 831 @override |
824 final AnalysisOptionsImpl analysisOptions = new AnalysisOptionsImpl(); | 832 final AnalysisOptionsImpl analysisOptions = new AnalysisOptionsImpl(); |
825 | 833 |
826 @override | 834 @override |
827 List<AnalysisTarget> explicitTargets = <AnalysisTarget>[]; | 835 List<AnalysisTarget> explicitTargets = <AnalysisTarget>[]; |
828 | 836 |
829 @override | 837 @override |
(...skipping 30 matching lines...) Expand all Loading... |
860 for (int dependency in graph[node]) { | 868 for (int dependency in graph[node]) { |
861 if (!skipInputs.contains(dependency) && | 869 if (!skipInputs.contains(dependency) && |
862 !evaluatedNodes.contains(dependency)) { | 870 !evaluatedNodes.contains(dependency)) { |
863 return dependency; | 871 return dependency; |
864 } | 872 } |
865 } | 873 } |
866 return null; | 874 return null; |
867 } | 875 } |
868 } | 876 } |
869 | 877 |
870 class _WorkManagerMock extends TypedMock implements WorkManager {} | 878 class _WorkManagerMock extends Mock implements WorkManager {} |
OLD | NEW |