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 test.src.task.driver_test; | 5 library 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/context/context.dart'; | |
9 import 'package:analyzer/src/generated/engine.dart' | 8 import 'package:analyzer/src/generated/engine.dart' |
10 hide AnalysisContextImpl, AnalysisTask; | 9 hide |
| 10 AnalysisCache, |
| 11 AnalysisContextImpl, |
| 12 AnalysisTask, |
| 13 UniversalCachePartition, |
| 14 WorkManager; |
11 import 'package:analyzer/src/generated/java_engine.dart'; | 15 import 'package:analyzer/src/generated/java_engine.dart'; |
12 import 'package:analyzer/src/task/driver.dart'; | 16 import 'package:analyzer/src/task/driver.dart'; |
13 import 'package:analyzer/src/task/inputs.dart'; | 17 import 'package:analyzer/src/task/inputs.dart'; |
14 import 'package:analyzer/src/task/manager.dart'; | 18 import 'package:analyzer/src/task/manager.dart'; |
15 import 'package:analyzer/task/model.dart'; | 19 import 'package:analyzer/task/model.dart'; |
| 20 import 'package:typed_mock/typed_mock.dart'; |
16 import 'package:unittest/unittest.dart'; | 21 import 'package:unittest/unittest.dart'; |
17 | 22 |
18 import '../../generated/test_support.dart'; | 23 import '../../generated/test_support.dart'; |
19 import '../../reflective_tests.dart'; | 24 import '../../reflective_tests.dart'; |
20 import '../context/abstract_context.dart'; | |
21 import 'test_support.dart'; | 25 import 'test_support.dart'; |
22 | 26 |
23 main() { | 27 main() { |
24 groupSep = ' | '; | 28 groupSep = ' | '; |
25 runReflectiveTests(AnalysisDriverTest); | 29 runReflectiveTests(AnalysisDriverTest); |
26 runReflectiveTests(WorkOrderTest); | 30 runReflectiveTests(WorkOrderTest); |
27 runReflectiveTests(WorkItemTest); | 31 runReflectiveTests(WorkItemTest); |
28 } | 32 } |
29 | 33 |
| 34 class AbstractDriverTest { |
| 35 TaskManager taskManager = new TaskManager(); |
| 36 List<WorkManager> workManagers = <WorkManager>[]; |
| 37 InternalAnalysisContext context = new _InternalAnalysisContextMock(); |
| 38 AnalysisDriver analysisDriver; |
| 39 |
| 40 void setUp() { |
| 41 context = new _InternalAnalysisContextMock(); |
| 42 analysisDriver = new AnalysisDriver(taskManager, workManagers, context); |
| 43 } |
| 44 } |
| 45 |
30 @reflectiveTest | 46 @reflectiveTest |
31 class AnalysisDriverTest extends AbstractContextTest { | 47 class AnalysisDriverTest extends AbstractDriverTest { |
32 AnalysisContextImpl createAnalysisContext() { | 48 WorkManager workManager1 = new _WorkManagerMock(); |
33 return new _TestContext(); | 49 WorkManager workManager2 = new _WorkManagerMock(); |
| 50 |
| 51 AnalysisTarget target1 = new TestSource('/1.dart'); |
| 52 AnalysisTarget target2 = new TestSource('/2.dart'); |
| 53 |
| 54 ResultDescriptor result1 = new ResultDescriptor('result1', -1); |
| 55 ResultDescriptor result2 = new ResultDescriptor('result2', -2); |
| 56 |
| 57 TaskDescriptor descriptor1; |
| 58 TaskDescriptor descriptor2; |
| 59 |
| 60 void setUp() { |
| 61 super.setUp(); |
| 62 when(workManager1.getNextResultPriority()) |
| 63 .thenReturn(WorkOrderPriority.NONE); |
| 64 when(workManager2.getNextResultPriority()) |
| 65 .thenReturn(WorkOrderPriority.NONE); |
| 66 |
| 67 workManagers.add(workManager1); |
| 68 workManagers.add(workManager2); |
34 } | 69 } |
35 | 70 |
36 test_computeResult() { | 71 test_computeResult() { |
37 AnalysisTarget target = new TestSource(); | 72 AnalysisTarget target = new TestSource(); |
38 ResultDescriptor result = new ResultDescriptor('result', null); | 73 ResultDescriptor result = new ResultDescriptor('result', null); |
39 TestAnalysisTask task; | 74 TestAnalysisTask task; |
40 TaskDescriptor descriptor = new TaskDescriptor( | 75 TaskDescriptor descriptor = new TaskDescriptor( |
41 'task', (context, target) => task, (target) => {}, [result]); | 76 'task', (context, target) => task, (target) => {}, [result]); |
42 task = new TestAnalysisTask(context, target, descriptor: descriptor); | 77 task = new TestAnalysisTask(context, target, descriptor: descriptor); |
43 taskManager.addTaskDescriptor(descriptor); | 78 taskManager.addTaskDescriptor(descriptor); |
44 | 79 |
45 analysisDriver.computeResult(target, result); | 80 analysisDriver.computeResult(target, result); |
46 expect(context.getCacheEntry(target).getValue(result), 1); | 81 expect(context.getCacheEntry(target).getValue(result), 1); |
47 } | 82 } |
48 | 83 |
49 test_create() { | 84 test_create() { |
50 expect(analysisDriver, isNotNull); | 85 expect(analysisDriver, isNotNull); |
51 expect(analysisDriver.context, context); | 86 expect(analysisDriver.context, context); |
52 expect(analysisDriver.currentWorkOrder, isNull); | 87 expect(analysisDriver.currentWorkOrder, isNull); |
53 expect(analysisDriver.taskManager, taskManager); | 88 expect(analysisDriver.taskManager, taskManager); |
54 } | 89 } |
55 | 90 |
56 test_createNextWorkOrder_complete() { | 91 test_createNextWorkOrder_highLow() { |
57 AnalysisTarget priorityTarget = new TestSource(); | 92 _configureDescriptors12(); |
58 AnalysisTarget normalTarget = new TestSource(); | 93 when(workManager1.getNextResultPriority()) |
59 ResultDescriptor result = new ResultDescriptor('result', null); | 94 .thenReturn(WorkOrderPriority.PRIORITY); |
60 TaskDescriptor descriptor = new TaskDescriptor('task', | 95 when(workManager2.getNextResultPriority()) |
61 (context, target) => new TestAnalysisTask(context, target), | 96 .thenReturn(WorkOrderPriority.NORMAL); |
62 (target) => {}, [result]); | 97 when(workManager1.getNextResult()) |
63 taskManager.addGeneralResult(result); | 98 .thenReturn(new TargetedResult(target1, result1)); |
64 taskManager.addTaskDescriptor(descriptor); | 99 WorkOrder workOrder = analysisDriver.createNextWorkOrder(); |
65 context.priorityTargets.add(priorityTarget); | 100 expect(workOrder, isNotNull); |
66 context.getCacheEntry(priorityTarget).setValue( | 101 expect(workOrder.moveNext(), true); |
67 result, '', TargetedResult.EMPTY_LIST); | 102 expect(workOrder.currentItem.target, target1); |
68 context.explicitTargets.add(normalTarget); | 103 expect(workOrder.currentItem.descriptor, descriptor1); |
69 context.getCacheEntry(priorityTarget).setValue( | 104 } |
70 result, '', TargetedResult.EMPTY_LIST); | |
71 | 105 |
| 106 test_createNextWorkOrder_lowHigh() { |
| 107 _configureDescriptors12(); |
| 108 when(workManager1.getNextResultPriority()) |
| 109 .thenReturn(WorkOrderPriority.NORMAL); |
| 110 when(workManager2.getNextResultPriority()) |
| 111 .thenReturn(WorkOrderPriority.PRIORITY); |
| 112 when(workManager2.getNextResult()) |
| 113 .thenReturn(new TargetedResult(target1, result1)); |
| 114 WorkOrder workOrder = analysisDriver.createNextWorkOrder(); |
| 115 expect(workOrder, isNotNull); |
| 116 expect(workOrder.moveNext(), true); |
| 117 expect(workOrder.currentItem.target, target1); |
| 118 expect(workOrder.currentItem.descriptor, descriptor1); |
| 119 } |
| 120 |
| 121 test_createNextWorkOrder_none() { |
| 122 _configureDescriptors12(); |
| 123 when(workManager1.getNextResultPriority()) |
| 124 .thenReturn(WorkOrderPriority.NONE); |
| 125 when(workManager2.getNextResultPriority()) |
| 126 .thenReturn(WorkOrderPriority.NONE); |
72 expect(analysisDriver.createNextWorkOrder(), isNull); | 127 expect(analysisDriver.createNextWorkOrder(), isNull); |
73 } | 128 } |
74 | 129 |
75 test_createNextWorkOrder_normalTarget() { | |
76 AnalysisTarget priorityTarget = new TestSource(); | |
77 AnalysisTarget normalTarget = new TestSource(); | |
78 ResultDescriptor result = new ResultDescriptor('result', null); | |
79 TaskDescriptor descriptor = new TaskDescriptor('task', | |
80 (context, target) => new TestAnalysisTask(context, target), | |
81 (target) => {}, [result]); | |
82 taskManager.addGeneralResult(result); | |
83 taskManager.addTaskDescriptor(descriptor); | |
84 context.priorityTargets.add(priorityTarget); | |
85 context.getCacheEntry(priorityTarget).setValue( | |
86 result, '', TargetedResult.EMPTY_LIST); | |
87 context.explicitTargets.add(normalTarget); | |
88 context.getCacheEntry(normalTarget).setState(result, CacheState.INVALID); | |
89 | |
90 WorkOrder workOrder = analysisDriver.createNextWorkOrder(); | |
91 expect(workOrder, isNotNull); | |
92 expect(workOrder.moveNext(), true); | |
93 expect(workOrder.currentItem.target, normalTarget); | |
94 } | |
95 | |
96 test_createNextWorkOrder_noTargets() { | |
97 ResultDescriptor result = new ResultDescriptor('result', null); | |
98 TaskDescriptor descriptor = new TaskDescriptor('task', | |
99 (context, target) => new TestAnalysisTask(context, target), | |
100 (target) => {}, [result]); | |
101 taskManager.addGeneralResult(result); | |
102 taskManager.addTaskDescriptor(descriptor); | |
103 | |
104 expect(analysisDriver.createNextWorkOrder(), isNull); | |
105 } | |
106 | |
107 test_createNextWorkOrder_priorityTarget() { | |
108 AnalysisTarget priorityTarget = new TestSource(); | |
109 AnalysisTarget normalTarget = new TestSource(); | |
110 ResultDescriptor result = new ResultDescriptor('result', null); | |
111 TaskDescriptor descriptor = new TaskDescriptor('task', | |
112 (context, target) => new TestAnalysisTask(context, target), | |
113 (target) => {}, [result]); | |
114 taskManager.addGeneralResult(result); | |
115 taskManager.addTaskDescriptor(descriptor); | |
116 context.priorityTargets.add(priorityTarget); | |
117 context.getCacheEntry(priorityTarget).setState(result, CacheState.INVALID); | |
118 context.explicitTargets.add(normalTarget); | |
119 context.getCacheEntry(normalTarget).setState(result, CacheState.INVALID); | |
120 | |
121 WorkOrder workOrder = analysisDriver.createNextWorkOrder(); | |
122 expect(workOrder, isNotNull); | |
123 expect(workOrder.moveNext(), true); | |
124 expect(workOrder.currentItem.target, priorityTarget); | |
125 } | |
126 | |
127 test_createWorkOrderForResult_error() { | 130 test_createWorkOrderForResult_error() { |
128 AnalysisTarget target = new TestSource(); | 131 AnalysisTarget target = new TestSource(); |
129 ResultDescriptor result = new ResultDescriptor('result', null); | 132 ResultDescriptor result = new ResultDescriptor('result', null); |
130 CaughtException exception = new CaughtException(null, null); | 133 CaughtException exception = new CaughtException(null, null); |
131 context.getCacheEntry(target).setErrorState( | 134 context.getCacheEntry(target).setErrorState( |
132 exception, <ResultDescriptor>[result]); | 135 exception, <ResultDescriptor>[result]); |
133 | 136 |
134 expect(analysisDriver.createWorkOrderForResult(target, result), isNull); | 137 expect(analysisDriver.createWorkOrderForResult(target, result), isNull); |
135 } | 138 } |
136 | 139 |
(...skipping 54 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
191 | 194 |
192 test_createWorkOrderForTarget_incomplete_priorityTarget_generalResult() { | 195 test_createWorkOrderForTarget_incomplete_priorityTarget_generalResult() { |
193 _createWorkOrderForTarget(false, true, false); | 196 _createWorkOrderForTarget(false, true, false); |
194 } | 197 } |
195 | 198 |
196 test_createWorkOrderForTarget_incomplete_priorityTarget_priorityResult() { | 199 test_createWorkOrderForTarget_incomplete_priorityTarget_priorityResult() { |
197 _createWorkOrderForTarget(false, true, true); | 200 _createWorkOrderForTarget(false, true, true); |
198 } | 201 } |
199 | 202 |
200 test_performAnalysisTask() { | 203 test_performAnalysisTask() { |
201 AnalysisTarget target = new TestSource(); | 204 _configureDescriptors12(); |
202 ResultDescriptor result = new ResultDescriptor('result', null); | 205 when(workManager1.getNextResultPriority()).thenReturnList( |
203 TestAnalysisTask task; | 206 <WorkOrderPriority>[WorkOrderPriority.NORMAL, WorkOrderPriority.NONE]); |
204 TaskDescriptor descriptor = new TaskDescriptor( | 207 when(workManager1.getNextResult()) |
205 'task', (context, target) => task, (target) => {}, [result]); | 208 .thenReturn(new TargetedResult(target1, result1)); |
206 task = new TestAnalysisTask(context, target, descriptor: descriptor); | |
207 taskManager.addTaskDescriptor(descriptor); | |
208 taskManager.addGeneralResult(result); | |
209 context.priorityTargets.add(target); | |
210 | 209 |
211 expect(analysisDriver.performAnalysisTask(), true); | 210 expect(analysisDriver.performAnalysisTask(), true); |
212 expect(analysisDriver.performAnalysisTask(), true); | 211 expect(analysisDriver.performAnalysisTask(), true); |
213 expect(analysisDriver.performAnalysisTask(), false); | 212 expect(analysisDriver.performAnalysisTask(), false); |
214 } | 213 } |
215 | 214 |
216 test_performAnalysisTask_infiniteLoop() { | 215 test_performAnalysisTask_infiniteLoop() { |
217 AnalysisTarget target = new TestSource(); | 216 AnalysisTarget target = new TestSource(); |
218 ResultDescriptor resultA = new ResultDescriptor('resultA', -1); | 217 ResultDescriptor resultA = new ResultDescriptor('resultA', -1); |
219 ResultDescriptor resultB = new ResultDescriptor('resultB', -2); | 218 ResultDescriptor resultB = new ResultDescriptor('resultB', -2); |
220 // configure tasks | 219 // configure tasks |
221 TestAnalysisTask task1; | 220 TestAnalysisTask task1; |
222 TestAnalysisTask task2; | 221 TestAnalysisTask task2; |
223 TaskDescriptor descriptor1 = new TaskDescriptor('task1', | 222 TaskDescriptor descriptor1 = new TaskDescriptor('task1', |
224 (context, target) => task1, (target) => { | 223 (context, target) => task1, (target) => { |
225 'inputB': new SimpleTaskInput<int>(target, resultB) | 224 'inputB': new SimpleTaskInput<int>(target, resultB) |
226 }, [resultA]); | 225 }, [resultA]); |
227 TaskDescriptor descriptor2 = new TaskDescriptor('task2', | 226 TaskDescriptor descriptor2 = new TaskDescriptor('task2', |
228 (context, target) => task2, (target) => { | 227 (context, target) => task2, (target) => { |
229 'inputA': new SimpleTaskInput<int>(target, resultA) | 228 'inputA': new SimpleTaskInput<int>(target, resultA) |
230 }, [resultB]); | 229 }, [resultB]); |
231 task1 = new TestAnalysisTask(context, target, descriptor: descriptor1); | 230 task1 = new TestAnalysisTask(context, target, descriptor: descriptor1); |
232 task2 = new TestAnalysisTask(context, target, descriptor: descriptor2); | 231 task2 = new TestAnalysisTask(context, target, descriptor: descriptor2); |
233 taskManager.addTaskDescriptor(descriptor1); | 232 taskManager.addTaskDescriptor(descriptor1); |
234 taskManager.addTaskDescriptor(descriptor2); | 233 taskManager.addTaskDescriptor(descriptor2); |
235 context.explicitTargets.add(target); | 234 // configure WorkManager |
236 taskManager.addGeneralResult(resultB); | 235 when(workManager1.getNextResultPriority()).thenReturnList( |
| 236 <WorkOrderPriority>[WorkOrderPriority.NORMAL, WorkOrderPriority.NONE]); |
| 237 when(workManager1.getNextResult()) |
| 238 .thenReturn(new TargetedResult(target, resultB)); |
237 // prepare work order | 239 // prepare work order |
238 expect(analysisDriver.performAnalysisTask(), true); | 240 expect(analysisDriver.performAnalysisTask(), true); |
239 expect(analysisDriver.performAnalysisTask(), true); | 241 expect(analysisDriver.performAnalysisTask(), true); |
240 CaughtException exception = context.getCacheEntry(target).exception; | 242 CaughtException exception = context.getCacheEntry(target).exception; |
241 expect(exception, isNotNull); | 243 expect(exception, isNotNull); |
242 expect(exception.exception, new isInstanceOf<InfiniteTaskLoopException>()); | 244 expect(exception.exception, new isInstanceOf<InfiniteTaskLoopException>()); |
243 } | 245 } |
244 | 246 |
245 test_performAnalysisTask_inputsFirst() { | 247 test_performAnalysisTask_inputsFirst() { |
246 AnalysisTarget target = new TestSource(); | 248 AnalysisTarget target = new TestSource(); |
247 ResultDescriptor resultA = new ResultDescriptor('resultA', -1); | 249 ResultDescriptor resultA = new ResultDescriptor('resultA', -1); |
248 ResultDescriptor resultB = new ResultDescriptor('resultB', -2); | 250 ResultDescriptor resultB = new ResultDescriptor('resultB', -2); |
249 // configure tasks | 251 // configure tasks |
250 TestAnalysisTask task1; | 252 TestAnalysisTask task1; |
251 TestAnalysisTask task2; | 253 TestAnalysisTask task2; |
252 TaskDescriptor descriptor1 = new TaskDescriptor( | 254 TaskDescriptor descriptor1 = new TaskDescriptor( |
253 'task1', (context, target) => task1, (target) => {}, [resultA]); | 255 'task1', (context, target) => task1, (target) => {}, [resultA]); |
254 TaskDescriptor descriptor2 = new TaskDescriptor('task2', | 256 TaskDescriptor descriptor2 = new TaskDescriptor('task2', |
255 (context, target) => task2, (target) => { | 257 (context, target) => task2, (target) => { |
256 'inputA': new SimpleTaskInput<int>(target, resultA) | 258 'inputA': new SimpleTaskInput<int>(target, resultA) |
257 }, [resultB]); | 259 }, [resultB]); |
258 task1 = new TestAnalysisTask(context, target, | 260 task1 = new TestAnalysisTask(context, target, |
259 descriptor: descriptor1, results: [resultA], value: 10); | 261 descriptor: descriptor1, results: [resultA], value: 10); |
260 task2 = new TestAnalysisTask(context, target, | 262 task2 = new TestAnalysisTask(context, target, |
261 descriptor: descriptor2, value: 20); | 263 descriptor: descriptor2, value: 20); |
262 taskManager.addTaskDescriptor(descriptor1); | 264 taskManager.addTaskDescriptor(descriptor1); |
263 taskManager.addTaskDescriptor(descriptor2); | 265 taskManager.addTaskDescriptor(descriptor2); |
264 context.explicitTargets.add(target); | 266 // configure WorkManager |
265 taskManager.addGeneralResult(resultB); | 267 when(workManager1.getNextResultPriority()).thenReturnList( |
| 268 <WorkOrderPriority>[WorkOrderPriority.NORMAL, WorkOrderPriority.NONE]); |
| 269 when(workManager1.getNextResult()) |
| 270 .thenReturn(new TargetedResult(target, resultB)); |
266 // prepare work order | 271 // prepare work order |
267 expect(analysisDriver.performAnalysisTask(), true); | 272 expect(analysisDriver.performAnalysisTask(), true); |
268 expect(context.getCacheEntry(target).getValue(resultA), -1); | 273 expect(context.getCacheEntry(target).getValue(resultA), -1); |
269 expect(context.getCacheEntry(target).getValue(resultB), -2); | 274 expect(context.getCacheEntry(target).getValue(resultB), -2); |
270 // compute resultA | 275 // compute resultA |
271 expect(analysisDriver.performAnalysisTask(), true); | 276 expect(analysisDriver.performAnalysisTask(), true); |
272 expect(context.getCacheEntry(target).getValue(resultA), 10); | 277 expect(context.getCacheEntry(target).getValue(resultA), 10); |
273 expect(context.getCacheEntry(target).getValue(resultB), -2); | 278 expect(context.getCacheEntry(target).getValue(resultB), -2); |
274 // compute resultB | 279 // compute resultB |
275 expect(analysisDriver.performAnalysisTask(), true); | 280 expect(analysisDriver.performAnalysisTask(), true); |
(...skipping 59 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
335 (context, target) => new TestAnalysisTask(context, target), | 340 (context, target) => new TestAnalysisTask(context, target), |
336 (target) => {'one': inputResult.of(target)}, | 341 (target) => {'one': inputResult.of(target)}, |
337 [new ResultDescriptor('output', null)]); | 342 [new ResultDescriptor('output', null)]); |
338 analysisDriver.currentWorkOrder = | 343 analysisDriver.currentWorkOrder = |
339 new WorkOrder(taskManager, new WorkItem(null, null, descriptor)); | 344 new WorkOrder(taskManager, new WorkItem(null, null, descriptor)); |
340 | 345 |
341 analysisDriver.reset(); | 346 analysisDriver.reset(); |
342 expect(analysisDriver.currentWorkOrder, isNull); | 347 expect(analysisDriver.currentWorkOrder, isNull); |
343 } | 348 } |
344 | 349 |
| 350 void _configureDescriptors12() { |
| 351 descriptor1 = new TaskDescriptor('task1', (context, target) => |
| 352 new TestAnalysisTask(context, target, descriptor: descriptor1), |
| 353 (target) => {}, [result1]); |
| 354 taskManager.addTaskDescriptor(descriptor1); |
| 355 |
| 356 descriptor2 = new TaskDescriptor('task2', (context, target) => |
| 357 new TestAnalysisTask(context, target, descriptor: descriptor1), |
| 358 (target) => {}, [result2]); |
| 359 taskManager.addTaskDescriptor(descriptor2); |
| 360 } |
| 361 |
345 /** | 362 /** |
346 * [complete] is `true` if the value of the result has already been computed. | 363 * [complete] is `true` if the value of the result has already been computed. |
347 * [priorityTarget] is `true` if the target is in the list of priority | 364 * [priorityTarget] is `true` if the target is in the list of priority |
348 * targets. | 365 * targets. |
349 * [priorityResult] is `true` if the result should only be computed for | 366 * [priorityResult] is `true` if the result should only be computed for |
350 * priority targets. | 367 * priority targets. |
351 */ | 368 */ |
352 _createWorkOrderForTarget( | 369 _createWorkOrderForTarget( |
353 bool complete, bool priorityTarget, bool priorityResult) { | 370 bool complete, bool priorityTarget, bool priorityResult) { |
354 AnalysisTarget target = new TestSource(); | 371 AnalysisTarget target = new TestSource(); |
(...skipping 25 matching lines...) Expand all Loading... |
380 expect(workOrder, isNull); | 397 expect(workOrder, isNull); |
381 } else if (priorityResult) { | 398 } else if (priorityResult) { |
382 expect(workOrder, priorityTarget ? isNotNull : isNull); | 399 expect(workOrder, priorityTarget ? isNotNull : isNull); |
383 } else { | 400 } else { |
384 expect(workOrder, isNotNull); | 401 expect(workOrder, isNotNull); |
385 } | 402 } |
386 } | 403 } |
387 } | 404 } |
388 | 405 |
389 @reflectiveTest | 406 @reflectiveTest |
390 class WorkItemTest extends EngineTestCase { | 407 class WorkItemTest extends AbstractDriverTest { |
391 test_buildTask_complete() { | 408 test_buildTask_complete() { |
392 AnalysisContext context = new AnalysisContextImpl(); | |
393 AnalysisTarget target = new TestSource(); | 409 AnalysisTarget target = new TestSource(); |
394 TaskDescriptor descriptor = new TaskDescriptor('task', | 410 TaskDescriptor descriptor = new TaskDescriptor('task', |
395 (context, target) => new TestAnalysisTask(context, target), | 411 (context, target) => new TestAnalysisTask(context, target), |
396 (target) => {}, [new ResultDescriptor('output', null)]); | 412 (target) => {}, [new ResultDescriptor('output', null)]); |
397 WorkItem item = new WorkItem(context, target, descriptor); | 413 WorkItem item = new WorkItem(context, target, descriptor); |
398 AnalysisTask task = item.buildTask(); | 414 AnalysisTask task = item.buildTask(); |
399 expect(task, isNotNull); | 415 expect(task, isNotNull); |
400 } | 416 } |
401 | 417 |
402 test_buildTask_incomplete() { | 418 test_buildTask_incomplete() { |
403 AnalysisContext context = new AnalysisContextImpl(); | |
404 AnalysisTarget target = new TestSource(); | 419 AnalysisTarget target = new TestSource(); |
405 ResultDescriptor inputResult = new ResultDescriptor('input', null); | 420 ResultDescriptor inputResult = new ResultDescriptor('input', null); |
406 List<ResultDescriptor> outputResults = | 421 List<ResultDescriptor> outputResults = |
407 <ResultDescriptor>[new ResultDescriptor('output', null)]; | 422 <ResultDescriptor>[new ResultDescriptor('output', null)]; |
408 TaskDescriptor descriptor = new TaskDescriptor('task', (context, target) => | 423 TaskDescriptor descriptor = new TaskDescriptor('task', (context, target) => |
409 new TestAnalysisTask(context, target, results: outputResults), | 424 new TestAnalysisTask(context, target, results: outputResults), |
410 (target) => {'one': inputResult.of(target)}, outputResults); | 425 (target) => {'one': inputResult.of(target)}, outputResults); |
411 WorkItem item = new WorkItem(context, target, descriptor); | 426 WorkItem item = new WorkItem(context, target, descriptor); |
412 expect(() => item.buildTask(), throwsStateError); | 427 expect(() => item.buildTask(), throwsStateError); |
413 } | 428 } |
414 | 429 |
415 test_create() { | 430 test_create() { |
416 AnalysisContext context = new AnalysisContextImpl(); | |
417 AnalysisTarget target = new TestSource(); | 431 AnalysisTarget target = new TestSource(); |
418 TaskDescriptor descriptor = new TaskDescriptor( | 432 TaskDescriptor descriptor = new TaskDescriptor( |
419 'task', null, (target) => {}, [new ResultDescriptor('result', null)]); | 433 'task', null, (target) => {}, [new ResultDescriptor('result', null)]); |
420 WorkItem item = new WorkItem(context, target, descriptor); | 434 WorkItem item = new WorkItem(context, target, descriptor); |
421 expect(item, isNotNull); | 435 expect(item, isNotNull); |
422 expect(item.context, context); | 436 expect(item.context, context); |
423 expect(item.descriptor, descriptor); | 437 expect(item.descriptor, descriptor); |
424 expect(item.target, target); | 438 expect(item.target, target); |
425 } | 439 } |
426 | 440 |
427 test_gatherInputs_complete() { | 441 test_gatherInputs_complete() { |
428 TaskManager manager = new TaskManager(); | |
429 AnalysisContext context = new AnalysisContextImpl(); | |
430 AnalysisTarget target = new TestSource(); | 442 AnalysisTarget target = new TestSource(); |
431 TaskDescriptor descriptor = new TaskDescriptor('task', | 443 TaskDescriptor descriptor = new TaskDescriptor('task', |
432 (context, target) => new TestAnalysisTask(context, target), | 444 (context, target) => new TestAnalysisTask(context, target), |
433 (target) => {}, [new ResultDescriptor('output', null)]); | 445 (target) => {}, [new ResultDescriptor('output', null)]); |
434 WorkItem item = new WorkItem(context, target, descriptor); | 446 WorkItem item = new WorkItem(context, target, descriptor); |
435 WorkItem result = item.gatherInputs(manager); | 447 WorkItem result = item.gatherInputs(taskManager); |
436 expect(result, isNull); | 448 expect(result, isNull); |
437 expect(item.exception, isNull); | 449 expect(item.exception, isNull); |
438 } | 450 } |
439 | 451 |
440 test_gatherInputs_incomplete() { | 452 test_gatherInputs_incomplete() { |
441 TaskManager manager = new TaskManager(); | |
442 AnalysisContextImpl context = new AnalysisContextImpl(); | |
443 AnalysisTarget target = new TestSource(); | 453 AnalysisTarget target = new TestSource(); |
444 ResultDescriptor resultA = new ResultDescriptor('resultA', null); | 454 ResultDescriptor resultA = new ResultDescriptor('resultA', null); |
445 ResultDescriptor resultB = new ResultDescriptor('resultB', null); | 455 ResultDescriptor resultB = new ResultDescriptor('resultB', null); |
446 // prepare tasks | 456 // prepare tasks |
447 TaskDescriptor task1 = new TaskDescriptor('task', (context, target) => | 457 TaskDescriptor task1 = new TaskDescriptor('task', (context, target) => |
448 new TestAnalysisTask(context, target, results: [resultA]), | 458 new TestAnalysisTask(context, target, results: [resultA]), |
449 (target) => {}, [resultA]); | 459 (target) => {}, [resultA]); |
450 TaskDescriptor task2 = new TaskDescriptor('task', | 460 TaskDescriptor task2 = new TaskDescriptor('task', |
451 (context, target) => new TestAnalysisTask(context, target), | 461 (context, target) => new TestAnalysisTask(context, target), |
452 (target) => {'one': resultA.of(target)}, [resultB]); | 462 (target) => {'one': resultA.of(target)}, [resultB]); |
453 manager.addTaskDescriptor(task1); | 463 taskManager.addTaskDescriptor(task1); |
454 manager.addTaskDescriptor(task2); | 464 taskManager.addTaskDescriptor(task2); |
455 // gather inputs | 465 // gather inputs |
456 WorkItem item = new WorkItem(context, target, task2); | 466 WorkItem item = new WorkItem(context, target, task2); |
457 WorkItem inputItem = item.gatherInputs(manager); | 467 WorkItem inputItem = item.gatherInputs(taskManager); |
458 expect(inputItem, isNotNull); | 468 expect(inputItem, isNotNull); |
459 } | 469 } |
460 | 470 |
461 test_gatherInputs_invalid() { | 471 test_gatherInputs_invalid() { |
462 TaskManager manager = new TaskManager(); | |
463 AnalysisContext context = new AnalysisContextImpl(); | |
464 AnalysisTarget target = new TestSource(); | 472 AnalysisTarget target = new TestSource(); |
465 ResultDescriptor inputResult = new ResultDescriptor('input', null); | 473 ResultDescriptor inputResult = new ResultDescriptor('input', null); |
466 TaskDescriptor descriptor = new TaskDescriptor('task', | 474 TaskDescriptor descriptor = new TaskDescriptor('task', |
467 (context, target) => new TestAnalysisTask(context, target), | 475 (context, target) => new TestAnalysisTask(context, target), |
468 (target) => {'one': inputResult.of(target)}, | 476 (target) => {'one': inputResult.of(target)}, |
469 [new ResultDescriptor('output', null)]); | 477 [new ResultDescriptor('output', null)]); |
470 WorkItem item = new WorkItem(context, target, descriptor); | 478 WorkItem item = new WorkItem(context, target, descriptor); |
471 WorkItem result = item.gatherInputs(manager); | 479 WorkItem result = item.gatherInputs(taskManager); |
472 expect(result, isNull); | 480 expect(result, isNull); |
473 expect(item.exception, isNotNull); | 481 expect(item.exception, isNotNull); |
474 } | 482 } |
475 } | 483 } |
476 | 484 |
477 @reflectiveTest | 485 @reflectiveTest |
478 class WorkOrderTest extends EngineTestCase { | 486 class WorkOrderTest extends EngineTestCase { |
479 test_create() { | 487 test_create() { |
480 TaskManager manager = new TaskManager(); | 488 TaskManager manager = new TaskManager(); |
481 TaskDescriptor descriptor = new TaskDescriptor( | 489 TaskDescriptor descriptor = new TaskDescriptor( |
(...skipping 15 matching lines...) Expand all Loading... |
497 // "item" has no child items | 505 // "item" has no child items |
498 expect(order.moveNext(), isTrue); | 506 expect(order.moveNext(), isTrue); |
499 expect(order.current, workItem); | 507 expect(order.current, workItem); |
500 // done | 508 // done |
501 expect(order.moveNext(), isFalse); | 509 expect(order.moveNext(), isFalse); |
502 expect(order.current, isNull); | 510 expect(order.current, isNull); |
503 } | 511 } |
504 } | 512 } |
505 | 513 |
506 /** | 514 /** |
507 * An [AnalysisContextImpl] which allows to set explicit and implicit targets | 515 * A dummy [InternalAnalysisContext] that does not use [AnalysisDriver] itself, |
508 * directly. | 516 * but provides enough implementation for it to function. |
509 */ | 517 */ |
510 class _TestContext extends AnalysisContextImpl { | 518 class _InternalAnalysisContextMock extends TypedMock |
| 519 implements InternalAnalysisContext { |
| 520 AnalysisCache analysisCache; |
| 521 |
511 @override | 522 @override |
512 List<AnalysisTarget> explicitTargets = <AnalysisTarget>[]; | 523 List<AnalysisTarget> explicitTargets = <AnalysisTarget>[]; |
513 | 524 |
514 @override | 525 @override |
515 List<AnalysisTarget> priorityTargets = <AnalysisTarget>[]; | 526 List<AnalysisTarget> priorityTargets = <AnalysisTarget>[]; |
| 527 |
| 528 _InternalAnalysisContextMock() { |
| 529 analysisCache = new AnalysisCache([new UniversalCachePartition(this)]); |
| 530 } |
| 531 |
| 532 @override |
| 533 CacheEntry getCacheEntry(AnalysisTarget target) { |
| 534 CacheEntry entry = analysisCache.get(target); |
| 535 if (entry == null) { |
| 536 entry = new CacheEntry(target); |
| 537 analysisCache.put(entry); |
| 538 } |
| 539 return entry; |
| 540 } |
| 541 |
| 542 noSuchMethod(Invocation invocation) => super.noSuchMethod(invocation); |
516 } | 543 } |
| 544 |
| 545 class _WorkManagerMock extends TypedMock implements WorkManager { |
| 546 noSuchMethod(Invocation invocation) => super.noSuchMethod(invocation); |
| 547 } |
OLD | NEW |