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

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

Issue 1131673004: Use WorkManager(s) in AnalysisDriver. (Closed) Base URL: https://dart.googlecode.com/svn/branches/bleeding_edge/dart
Patch Set: Created 5 years, 7 months 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 | Annotate | Revision Log
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 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
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
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
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
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 }
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698