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

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

Issue 2990843002: Removed fixed dependencies (Closed)
Patch Set: Created 3 years, 4 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
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 analyzer.test.src.task.driver_test;
6 6
7 import 'package:analyzer/exception/exception.dart';
7 import 'package:analyzer/src/context/cache.dart'; 8 import 'package:analyzer/src/context/cache.dart';
8 import 'package:analyzer/src/generated/engine.dart' 9 import 'package:analyzer/src/generated/engine.dart';
9 hide
10 AnalysisCache,
11 AnalysisContextImpl,
12 AnalysisTask,
13 UniversalCachePartition,
14 WorkManager;
15 import 'package:analyzer/src/generated/java_engine.dart';
16 import 'package:analyzer/src/task/driver.dart'; 10 import 'package:analyzer/src/task/driver.dart';
17 import 'package:analyzer/src/task/inputs.dart'; 11 import 'package:analyzer/src/task/inputs.dart';
18 import 'package:analyzer/src/task/manager.dart'; 12 import 'package:analyzer/src/task/manager.dart';
19 import 'package:analyzer/task/model.dart'; 13 import 'package:analyzer/task/model.dart';
14 import 'package:test_reflective_loader/test_reflective_loader.dart';
20 import 'package:typed_mock/typed_mock.dart'; 15 import 'package:typed_mock/typed_mock.dart';
21 import 'package:unittest/unittest.dart'; 16 import 'package:unittest/unittest.dart';
22 17
23 import '../../generated/test_support.dart'; 18 import '../../generated/test_support.dart';
24 import '../../reflective_tests.dart';
25 import '../../utils.dart'; 19 import '../../utils.dart';
26 import 'test_support.dart'; 20 import 'test_support.dart';
27 21
28 main() { 22 main() {
29 initializeTestEnvironment(); 23 initializeTestEnvironment();
30 runReflectiveTests(AnalysisDriverTest); 24 defineReflectiveTests(AnalysisDriverTest);
31 runReflectiveTests(CycleAwareDependencyWalkerTest); 25 defineReflectiveTests(CycleAwareDependencyWalkerTest);
32 runReflectiveTests(WorkItemTest); 26 defineReflectiveTests(WorkItemTest);
33 runReflectiveTests(WorkOrderTest); 27 defineReflectiveTests(WorkOrderTest);
34 } 28 }
35 29
36 class AbstractDriverTest { 30 class AbstractDriverTest {
37 TaskManager taskManager = new TaskManager(); 31 TaskManager taskManager = new TaskManager();
38 List<WorkManager> workManagers = <WorkManager>[]; 32 List<WorkManager> workManagers = <WorkManager>[];
39 InternalAnalysisContext context = new _InternalAnalysisContextMock(); 33 InternalAnalysisContext context = new _InternalAnalysisContextMock();
40 AnalysisDriver analysisDriver; 34 AnalysisDriver analysisDriver;
41 35
42 void setUp() { 36 void setUp() {
43 context = new _InternalAnalysisContextMock(); 37 context = new _InternalAnalysisContextMock();
44 analysisDriver = new AnalysisDriver(taskManager, workManagers, context); 38 analysisDriver = new AnalysisDriver(taskManager, workManagers, context);
39 when(context.aboutToComputeResult(anyObject, anyObject)).thenReturn(false);
45 } 40 }
46 } 41 }
47 42
48 @reflectiveTest 43 @reflectiveTest
49 class AnalysisDriverTest extends AbstractDriverTest { 44 class AnalysisDriverTest extends AbstractDriverTest {
50 WorkManager workManager1 = new _WorkManagerMock(); 45 WorkManager workManager1 = new _WorkManagerMock();
51 WorkManager workManager2 = new _WorkManagerMock(); 46 WorkManager workManager2 = new _WorkManagerMock();
52 47
53 AnalysisTarget target1 = new TestSource('/1.dart'); 48 AnalysisTarget target1 = new TestSource('/1.dart');
54 AnalysisTarget target2 = new TestSource('/2.dart'); 49 AnalysisTarget target2 = new TestSource('/2.dart');
(...skipping 67 matching lines...) Expand 10 before | Expand all | Expand 10 after
122 117
123 test_createNextWorkOrder_none() { 118 test_createNextWorkOrder_none() {
124 _configureDescriptors12(); 119 _configureDescriptors12();
125 when(workManager1.getNextResultPriority()) 120 when(workManager1.getNextResultPriority())
126 .thenReturn(WorkOrderPriority.NONE); 121 .thenReturn(WorkOrderPriority.NONE);
127 when(workManager2.getNextResultPriority()) 122 when(workManager2.getNextResultPriority())
128 .thenReturn(WorkOrderPriority.NONE); 123 .thenReturn(WorkOrderPriority.NONE);
129 expect(analysisDriver.createNextWorkOrder(), isNull); 124 expect(analysisDriver.createNextWorkOrder(), isNull);
130 } 125 }
131 126
127 test_createWorkOrderForResult_aboutToComputeResult() {
128 AnalysisTarget target = new TestSource();
129 ResultDescriptor result = new ResultDescriptor('result', null);
130 TaskDescriptor descriptor = new TaskDescriptor(
131 'task',
132 (context, target) => new TestAnalysisTask(context, target),
133 (target) => {},
134 [result]);
135 taskManager.addTaskDescriptor(descriptor);
136 context.getCacheEntry(target).setState(result, CacheState.INVALID);
137 // has result
138 {
139 when(context.aboutToComputeResult(anyObject, result)).thenReturn(true);
140 WorkOrder workOrder =
141 analysisDriver.createWorkOrderForResult(target, result);
142 expect(workOrder, isNull);
143 }
144 // no result
145 {
146 when(context.aboutToComputeResult(anyObject, result)).thenReturn(false);
147 WorkOrder workOrder =
148 analysisDriver.createWorkOrderForResult(target, result);
149 expect(workOrder, isNotNull);
150 }
151 }
152
132 test_createWorkOrderForResult_error() { 153 test_createWorkOrderForResult_error() {
133 AnalysisTarget target = new TestSource(); 154 AnalysisTarget target = new TestSource();
134 ResultDescriptor result = new ResultDescriptor('result', null); 155 ResultDescriptor result = new ResultDescriptor('result', null);
135 CaughtException exception = new CaughtException(null, null); 156 CaughtException exception = new CaughtException(null, null);
136 context 157 context
137 .getCacheEntry(target) 158 .getCacheEntry(target)
138 .setErrorState(exception, <ResultDescriptor>[result]); 159 .setErrorState(exception, <ResultDescriptor>[result]);
139 160
140 expect(analysisDriver.createWorkOrderForResult(target, result), isNull); 161 expect(analysisDriver.createWorkOrderForResult(target, result), isNull);
141 } 162 }
(...skipping 17 matching lines...) Expand all
159 taskManager.addTaskDescriptor(descriptor); 180 taskManager.addTaskDescriptor(descriptor);
160 context.getCacheEntry(target).setState(result, CacheState.INVALID); 181 context.getCacheEntry(target).setState(result, CacheState.INVALID);
161 182
162 WorkOrder workOrder = 183 WorkOrder workOrder =
163 analysisDriver.createWorkOrderForResult(target, result); 184 analysisDriver.createWorkOrderForResult(target, result);
164 expect(workOrder, isNotNull); 185 expect(workOrder, isNotNull);
165 } 186 }
166 187
167 test_createWorkOrderForResult_valid() { 188 test_createWorkOrderForResult_valid() {
168 AnalysisTarget target = new TestSource(); 189 AnalysisTarget target = new TestSource();
169 ResultDescriptor result = new ResultDescriptor('result', null); 190 ResultDescriptor<String> result =
191 new ResultDescriptor<String>('result', null);
170 context 192 context
171 .getCacheEntry(target) 193 .getCacheEntry(target)
172 .setValue(result, '', TargetedResult.EMPTY_LIST); 194 .setValue(result, '', TargetedResult.EMPTY_LIST);
173 195
174 expect(analysisDriver.createWorkOrderForResult(target, result), isNull); 196 expect(analysisDriver.createWorkOrderForResult(target, result), isNull);
175 } 197 }
176 198
177 test_createWorkOrderForTarget_complete_generalTarget_generalResult() { 199 test_createWorkOrderForTarget_complete_generalTarget_generalResult() {
178 _createWorkOrderForTarget(true, false, false); 200 _createWorkOrderForTarget(true, false, false);
179 } 201 }
(...skipping 33 matching lines...) Expand 10 before | Expand all | Expand 10 after
213 when(workManager1.getNextResult()) 235 when(workManager1.getNextResult())
214 .thenReturn(new TargetedResult(target1, result1)); 236 .thenReturn(new TargetedResult(target1, result1));
215 237
216 expect(analysisDriver.performAnalysisTask(), true); 238 expect(analysisDriver.performAnalysisTask(), true);
217 expect(analysisDriver.performAnalysisTask(), true); 239 expect(analysisDriver.performAnalysisTask(), true);
218 expect(analysisDriver.performAnalysisTask(), false); 240 expect(analysisDriver.performAnalysisTask(), false);
219 } 241 }
220 242
221 test_performAnalysisTask_infiniteLoop_handled() { 243 test_performAnalysisTask_infiniteLoop_handled() {
222 AnalysisTarget target = new TestSource(); 244 AnalysisTarget target = new TestSource();
223 ResultDescriptor resultA = new ResultDescriptor('resultA', -1); 245 ResultDescriptor<int> resultA = new ResultDescriptor<int>('resultA', -1);
224 ResultDescriptor resultB = new ResultDescriptor('resultB', -2); 246 ResultDescriptor<int> resultB = new ResultDescriptor<int>('resultB', -2);
225 // configure tasks 247 // configure tasks
226 TestAnalysisTask task1; 248 TestAnalysisTask task1;
227 TestAnalysisTask task2; 249 TestAnalysisTask task2;
228 TaskDescriptor descriptor1 = new TaskDescriptor( 250 TaskDescriptor descriptor1 = new TaskDescriptor(
229 'task1', 251 'task1',
230 (context, target) => task1, 252 (context, target) => task1,
231 (target) => {'inputB': new SimpleTaskInput<int>(target, resultB)}, 253 (target) => {'inputB': new SimpleTaskInput<int>(target, resultB)},
232 [resultA]); 254 [resultA]);
233 TaskDescriptor descriptor2 = new TaskDescriptor( 255 TaskDescriptor descriptor2 = new TaskDescriptor(
234 'task2', 256 'task2',
(...skipping 27 matching lines...) Expand all
262 expect(task2.dependencyCycle.map((workItem) => workItem.descriptor).toSet(), 284 expect(task2.dependencyCycle.map((workItem) => workItem.descriptor).toSet(),
263 expectedCycle); 285 expectedCycle);
264 CaughtException exception = context.getCacheEntry(target).exception; 286 CaughtException exception = context.getCacheEntry(target).exception;
265 expect(exception, isNull); 287 expect(exception, isNull);
266 expect(context.getCacheEntry(target).getValue(resultA), 10); 288 expect(context.getCacheEntry(target).getValue(resultA), 10);
267 expect(context.getCacheEntry(target).getValue(resultB), 20); 289 expect(context.getCacheEntry(target).getValue(resultB), 20);
268 } 290 }
269 291
270 test_performAnalysisTask_infiniteLoop_unhandled() { 292 test_performAnalysisTask_infiniteLoop_unhandled() {
271 AnalysisTarget target = new TestSource(); 293 AnalysisTarget target = new TestSource();
272 ResultDescriptor resultA = new ResultDescriptor('resultA', -1); 294 ResultDescriptor<int> resultA = new ResultDescriptor<int>('resultA', -1);
273 ResultDescriptor resultB = new ResultDescriptor('resultB', -2); 295 ResultDescriptor<int> resultB = new ResultDescriptor<int>('resultB', -2);
274 // configure tasks 296 // configure tasks
275 TestAnalysisTask task1; 297 TestAnalysisTask task1;
276 TestAnalysisTask task2; 298 TestAnalysisTask task2;
277 TaskDescriptor descriptor1 = new TaskDescriptor( 299 TaskDescriptor descriptor1 = new TaskDescriptor(
278 'task1', 300 'task1',
279 (context, target) => task1, 301 (context, target) => task1,
280 (target) => {'inputB': new SimpleTaskInput<int>(target, resultB)}, 302 (target) => {'inputB': new SimpleTaskInput<int>(target, resultB)},
281 [resultA]); 303 [resultA]);
282 TaskDescriptor descriptor2 = new TaskDescriptor( 304 TaskDescriptor descriptor2 = new TaskDescriptor(
283 'task2', 305 'task2',
(...skipping 12 matching lines...) Expand all
296 // prepare work order 318 // prepare work order
297 expect(analysisDriver.performAnalysisTask(), true); 319 expect(analysisDriver.performAnalysisTask(), true);
298 expect(analysisDriver.performAnalysisTask(), true); 320 expect(analysisDriver.performAnalysisTask(), true);
299 CaughtException exception = context.getCacheEntry(target).exception; 321 CaughtException exception = context.getCacheEntry(target).exception;
300 expect(exception, isNotNull); 322 expect(exception, isNotNull);
301 expect(exception.exception, new isInstanceOf<InfiniteTaskLoopException>()); 323 expect(exception.exception, new isInstanceOf<InfiniteTaskLoopException>());
302 } 324 }
303 325
304 test_performAnalysisTask_inputsFirst() { 326 test_performAnalysisTask_inputsFirst() {
305 AnalysisTarget target = new TestSource(); 327 AnalysisTarget target = new TestSource();
306 ResultDescriptor resultA = new ResultDescriptor('resultA', -1); 328 ResultDescriptor<int> resultA = new ResultDescriptor<int>('resultA', -1);
307 ResultDescriptor resultB = new ResultDescriptor('resultB', -2); 329 ResultDescriptor<int> resultB = new ResultDescriptor<int>('resultB', -2);
308 // configure tasks 330 // configure tasks
309 TestAnalysisTask task1; 331 TestAnalysisTask task1;
310 TestAnalysisTask task2; 332 TestAnalysisTask task2;
311 TaskDescriptor descriptor1 = new TaskDescriptor( 333 TaskDescriptor descriptor1 = new TaskDescriptor(
312 'task1', (context, target) => task1, (target) => {}, [resultA]); 334 'task1', (context, target) => task1, (target) => {}, [resultA]);
313 TaskDescriptor descriptor2 = new TaskDescriptor( 335 TaskDescriptor descriptor2 = new TaskDescriptor(
314 'task2', 336 'task2',
315 (context, target) => task2, 337 (context, target) => task2,
316 (target) => {'inputA': new SimpleTaskInput<int>(target, resultA)}, 338 (target) => {'inputA': new SimpleTaskInput<int>(target, resultA)},
317 [resultB]); 339 [resultB]);
(...skipping 25 matching lines...) Expand all
343 } 365 }
344 366
345 test_performAnalysisTask_onResultComputed() { 367 test_performAnalysisTask_onResultComputed() {
346 AnalysisTarget target = new TestSource(); 368 AnalysisTarget target = new TestSource();
347 ResultDescriptor result = new ResultDescriptor('result', null); 369 ResultDescriptor result = new ResultDescriptor('result', null);
348 TestAnalysisTask task; 370 TestAnalysisTask task;
349 TaskDescriptor descriptor = new TaskDescriptor( 371 TaskDescriptor descriptor = new TaskDescriptor(
350 'task', (context, target) => task, (target) => {}, [result]); 372 'task', (context, target) => task, (target) => {}, [result]);
351 task = new TestAnalysisTask(context, target, 373 task = new TestAnalysisTask(context, target,
352 descriptor: descriptor, value: 42); 374 descriptor: descriptor, value: 42);
353 WorkItem item = new WorkItem(context, target, descriptor, null); 375 WorkItem item = new WorkItem(context, target, descriptor, null, 0, null);
354 376
355 bool streamNotified = false; 377 bool streamNotified = false;
356 analysisDriver.onResultComputed(result).listen((event) { 378 analysisDriver.onResultComputed(result).listen((event) {
357 streamNotified = true; 379 streamNotified = true;
358 expect(event.context, same(context)); 380 expect(event.context, same(context));
359 expect(event.target, same(target)); 381 expect(event.target, same(target));
360 expect(event.descriptor, same(result)); 382 expect(event.descriptor, same(result));
361 expect(event.value, 42); 383 expect(event.value, 42);
362 }); 384 });
363 analysisDriver.performWorkItem(item); 385 analysisDriver.performWorkItem(item);
364 expect(streamNotified, isTrue); 386 expect(streamNotified, isTrue);
365 } 387 }
366 388
367 test_performWorkItem_exceptionInTask() { 389 test_performWorkItem_exceptionInTask() {
368 AnalysisTarget target = new TestSource(); 390 AnalysisTarget target = new TestSource();
369 ResultDescriptor result = new ResultDescriptor('result', null); 391 ResultDescriptor result = new ResultDescriptor('result', null);
370 CaughtException exception = 392 CaughtException exception =
371 new CaughtException(new AnalysisException(), null); 393 new CaughtException(new AnalysisException(), null);
372 TestAnalysisTask task; 394 TestAnalysisTask task;
373 TaskDescriptor descriptor = new TaskDescriptor( 395 TaskDescriptor descriptor = new TaskDescriptor(
374 'task', (context, target) => task, (target) => {}, [result]); 396 'task', (context, target) => task, (target) => {}, [result]);
375 task = new TestAnalysisTask(context, target, 397 task = new TestAnalysisTask(context, target,
376 descriptor: descriptor, exception: exception); 398 descriptor: descriptor, exception: exception);
377 WorkItem item = new WorkItem(context, target, descriptor, null); 399 WorkItem item = new WorkItem(context, target, descriptor, null, 0, null);
378 400
379 analysisDriver.performWorkItem(item); 401 analysisDriver.performWorkItem(item);
380 CacheEntry targetEntry = context.getCacheEntry(item.target); 402 CacheEntry targetEntry = context.getCacheEntry(item.target);
381 expect(targetEntry.exception, exception); 403 expect(targetEntry.exception, exception);
382 expect(targetEntry.getState(result), CacheState.ERROR); 404 expect(targetEntry.getState(result), CacheState.ERROR);
383 } 405 }
384 406
385 test_performWorkItem_noException() { 407 test_performWorkItem_noException() {
386 AnalysisTarget target = new TestSource(); 408 AnalysisTarget target = new TestSource();
387 ResultDescriptor result = new ResultDescriptor('result', null); 409 ResultDescriptor result = new ResultDescriptor('result', null);
388 TestAnalysisTask task; 410 TestAnalysisTask task;
389 TaskDescriptor descriptor = new TaskDescriptor( 411 TaskDescriptor descriptor = new TaskDescriptor(
390 'task', (context, target) => task, (target) => {}, [result]); 412 'task', (context, target) => task, (target) => {}, [result]);
391 task = new TestAnalysisTask(context, target, descriptor: descriptor); 413 task = new TestAnalysisTask(context, target, descriptor: descriptor);
392 WorkItem item = new WorkItem(context, target, descriptor, null); 414 WorkItem item = new WorkItem(context, target, descriptor, null, 0, null);
393 415
394 analysisDriver.performWorkItem(item); 416 analysisDriver.performWorkItem(item);
395 CacheEntry targetEntry = context.getCacheEntry(item.target); 417 CacheEntry targetEntry = context.getCacheEntry(item.target);
396 expect(targetEntry.exception, isNull); 418 expect(targetEntry.exception, isNull);
397 expect(targetEntry.getState(result), CacheState.VALID); 419 expect(targetEntry.getState(result), CacheState.VALID);
398 } 420 }
399 421
400 test_performWorkItem_preExistingException() { 422 test_performWorkItem_preExistingException() {
401 AnalysisTarget target = new TestSource(); 423 AnalysisTarget target = new TestSource();
402 ResultDescriptor result = new ResultDescriptor('result', null); 424 ResultDescriptor result = new ResultDescriptor('result', null);
403 TaskDescriptor descriptor = new TaskDescriptor( 425 TaskDescriptor descriptor = new TaskDescriptor(
404 'task', 426 'task',
405 (context, target) => new TestAnalysisTask(context, target), 427 (context, target) => new TestAnalysisTask(context, target),
406 (target) => {}, 428 (target) => {},
407 [result]); 429 [result]);
408 CaughtException exception = 430 CaughtException exception =
409 new CaughtException(new AnalysisException(), null); 431 new CaughtException(new AnalysisException(), null);
410 WorkItem item = new WorkItem(context, target, descriptor, null); 432 WorkItem item = new WorkItem(context, target, descriptor, null, 0, null);
411 item.exception = exception; 433 item.exception = exception;
412 434
413 analysisDriver.performWorkItem(item); 435 analysisDriver.performWorkItem(item);
414 CacheEntry targetEntry = context.getCacheEntry(item.target); 436 CacheEntry targetEntry = context.getCacheEntry(item.target);
415 expect(targetEntry.exception, exception); 437 expect(targetEntry.exception, exception);
416 expect(targetEntry.getState(result), CacheState.ERROR); 438 expect(targetEntry.getState(result), CacheState.ERROR);
417 } 439 }
418 440
419 test_reset() { 441 test_reset() {
420 ResultDescriptor inputResult = new ResultDescriptor('input', null); 442 ResultDescriptor inputResult = new ResultDescriptor('input', null);
421 TaskDescriptor descriptor = new TaskDescriptor( 443 TaskDescriptor descriptor = new TaskDescriptor(
422 'task', 444 'task',
423 (context, target) => new TestAnalysisTask(context, target), 445 (context, target) => new TestAnalysisTask(context, target),
424 (target) => {'one': inputResult.of(target)}, 446 (target) => {'one': inputResult.of(target)},
425 [new ResultDescriptor('output', null)]); 447 [new ResultDescriptor('output', null)]);
426 analysisDriver.currentWorkOrder = 448 analysisDriver.currentWorkOrder = new WorkOrder(
427 new WorkOrder(taskManager, new WorkItem(null, null, descriptor, null)); 449 taskManager, new WorkItem(null, null, descriptor, null, 0, null));
428 450
429 analysisDriver.reset(); 451 analysisDriver.reset();
430 expect(analysisDriver.currentWorkOrder, isNull); 452 expect(analysisDriver.currentWorkOrder, isNull);
431 } 453 }
432 454
433 void _configureDescriptors12() { 455 void _configureDescriptors12() {
434 descriptor1 = new TaskDescriptor( 456 descriptor1 = new TaskDescriptor(
435 'task1', 457 'task1',
436 (context, target) => 458 (context, target) =>
437 new TestAnalysisTask(context, target, descriptor: descriptor1), 459 new TestAnalysisTask(context, target, descriptor: descriptor1),
(...skipping 13 matching lines...) Expand all
451 /** 473 /**
452 * [complete] is `true` if the value of the result has already been computed. 474 * [complete] is `true` if the value of the result has already been computed.
453 * [priorityTarget] is `true` if the target is in the list of priority 475 * [priorityTarget] is `true` if the target is in the list of priority
454 * targets. 476 * targets.
455 * [priorityResult] is `true` if the result should only be computed for 477 * [priorityResult] is `true` if the result should only be computed for
456 * priority targets. 478 * priority targets.
457 */ 479 */
458 _createWorkOrderForTarget( 480 _createWorkOrderForTarget(
459 bool complete, bool priorityTarget, bool priorityResult) { 481 bool complete, bool priorityTarget, bool priorityResult) {
460 AnalysisTarget target = new TestSource(); 482 AnalysisTarget target = new TestSource();
461 ResultDescriptor result = new ResultDescriptor('result', null); 483 ResultDescriptor<String> result =
484 new ResultDescriptor<String>('result', null);
462 TaskDescriptor descriptor = new TaskDescriptor( 485 TaskDescriptor descriptor = new TaskDescriptor(
463 'task', 486 'task',
464 (context, target) => new TestAnalysisTask(context, target), 487 (context, target) => new TestAnalysisTask(context, target),
465 (target) => {}, 488 (target) => {},
466 [result]); 489 [result]);
467 if (priorityResult) { 490 if (priorityResult) {
468 taskManager.addPriorityResult(result); 491 taskManager.addPriorityResult(result);
469 } else { 492 } else {
470 taskManager.addGeneralResult(result); 493 taskManager.addGeneralResult(result);
471 } 494 }
(...skipping 143 matching lines...) Expand 10 before | Expand all | Expand 10 after
615 638
616 @reflectiveTest 639 @reflectiveTest
617 class WorkItemTest extends AbstractDriverTest { 640 class WorkItemTest extends AbstractDriverTest {
618 test_buildTask_complete() { 641 test_buildTask_complete() {
619 AnalysisTarget target = new TestSource(); 642 AnalysisTarget target = new TestSource();
620 TaskDescriptor descriptor = new TaskDescriptor( 643 TaskDescriptor descriptor = new TaskDescriptor(
621 'task', 644 'task',
622 (context, target) => new TestAnalysisTask(context, target), 645 (context, target) => new TestAnalysisTask(context, target),
623 (target) => {}, 646 (target) => {},
624 [new ResultDescriptor('output', null)]); 647 [new ResultDescriptor('output', null)]);
625 WorkItem item = new WorkItem(context, target, descriptor, null); 648 WorkItem item = new WorkItem(context, target, descriptor, null, 0, null);
626 AnalysisTask task = item.buildTask(); 649 AnalysisTask task = item.buildTask();
627 expect(task, isNotNull); 650 expect(task, isNotNull);
628 } 651 }
629 652
630 test_buildTask_incomplete() { 653 test_buildTask_incomplete() {
631 AnalysisTarget target = new TestSource(); 654 AnalysisTarget target = new TestSource();
632 ResultDescriptor inputResult = new ResultDescriptor('input', null); 655 ResultDescriptor inputResult = new ResultDescriptor('input', null);
633 List<ResultDescriptor> outputResults = <ResultDescriptor>[ 656 List<ResultDescriptor> outputResults = <ResultDescriptor>[
634 new ResultDescriptor('output', null) 657 new ResultDescriptor('output', null)
635 ]; 658 ];
636 TaskDescriptor descriptor = new TaskDescriptor( 659 TaskDescriptor descriptor = new TaskDescriptor(
637 'task', 660 'task',
638 (context, target) => 661 (context, target) =>
639 new TestAnalysisTask(context, target, results: outputResults), 662 new TestAnalysisTask(context, target, results: outputResults),
640 (target) => {'one': inputResult.of(target)}, 663 (target) => {'one': inputResult.of(target)},
641 outputResults); 664 outputResults);
642 WorkItem item = new WorkItem(context, target, descriptor, null); 665 WorkItem item = new WorkItem(context, target, descriptor, null, 0, null);
643 expect(() => item.buildTask(), throwsStateError); 666 expect(() => item.buildTask(), throwsStateError);
644 } 667 }
645 668
646 test_create() { 669 test_create() {
647 AnalysisTarget target = new TestSource(); 670 AnalysisTarget target = new TestSource();
648 TaskDescriptor descriptor = new TaskDescriptor( 671 TaskDescriptor descriptor = new TaskDescriptor(
649 'task', null, (target) => {}, [new ResultDescriptor('result', null)]); 672 'task', null, (target) => {}, [new ResultDescriptor('result', null)]);
650 WorkItem item = new WorkItem(context, target, descriptor, null); 673 WorkItem item = new WorkItem(context, target, descriptor, null, 0, null);
651 expect(item, isNotNull); 674 expect(item, isNotNull);
652 expect(item.context, context); 675 expect(item.context, context);
653 expect(item.descriptor, descriptor); 676 expect(item.descriptor, descriptor);
654 expect(item.target, target); 677 expect(item.target, target);
655 } 678 }
656 679
680 test_gatherInputs_aboutToComputeResult_hasResult() {
681 AnalysisTarget target = new TestSource();
682 ResultDescriptor resultA = new ResultDescriptor('resultA', null);
683 ResultDescriptor resultB = new ResultDescriptor('resultB', null);
684 // prepare tasks
685 TaskDescriptor task1 = new TaskDescriptor(
686 'task',
687 (context, target) =>
688 new TestAnalysisTask(context, target, results: [resultA]),
689 (target) => {},
690 [resultA]);
691 TaskDescriptor task2 = new TaskDescriptor(
692 'task',
693 (context, target) => new TestAnalysisTask(context, target),
694 (target) => {'one': resultA.of(target)},
695 [resultB]);
696 taskManager.addTaskDescriptor(task1);
697 taskManager.addTaskDescriptor(task2);
698 // configure mocks
699 when(context.aboutToComputeResult(anyObject, resultA)).thenReturn(true);
700 // gather inputs
701 WorkItem item = new WorkItem(context, target, task2, null, 0, null);
702 WorkItem inputItem = item.gatherInputs(taskManager, []);
703 expect(inputItem, isNull);
704 }
705
706 test_gatherInputs_aboutToComputeResult_noResult() {
707 AnalysisTarget target = new TestSource();
708 ResultDescriptor resultA = new ResultDescriptor('resultA', null);
709 ResultDescriptor resultB = new ResultDescriptor('resultB', null);
710 // prepare tasks
711 TaskDescriptor task1 = new TaskDescriptor(
712 'task',
713 (context, target) =>
714 new TestAnalysisTask(context, target, results: [resultA]),
715 (target) => {},
716 [resultA]);
717 TaskDescriptor task2 = new TaskDescriptor(
718 'task',
719 (context, target) => new TestAnalysisTask(context, target),
720 (target) => {'one': resultA.of(target)},
721 [resultB]);
722 taskManager.addTaskDescriptor(task1);
723 taskManager.addTaskDescriptor(task2);
724 // configure ResultProvider
725 // configure mocks
726 when(context.aboutToComputeResult(anyObject, resultA)).thenReturn(false);
727 // gather inputs
728 WorkItem item = new WorkItem(context, target, task2, null, 0, null);
729 WorkItem inputItem = item.gatherInputs(taskManager, []);
730 expect(inputItem, isNotNull);
731 expect(inputItem.target, target);
732 expect(inputItem.descriptor, task1);
733 }
734
657 test_gatherInputs_complete() { 735 test_gatherInputs_complete() {
658 AnalysisTarget target = new TestSource(); 736 AnalysisTarget target = new TestSource();
659 TaskDescriptor descriptor = new TaskDescriptor( 737 TaskDescriptor descriptor = new TaskDescriptor(
660 'task', 738 'task',
661 (context, target) => new TestAnalysisTask(context, target), 739 (context, target) => new TestAnalysisTask(context, target),
662 (target) => {}, 740 (target) => {},
663 [new ResultDescriptor('output', null)]); 741 [new ResultDescriptor('output', null)]);
664 WorkItem item = new WorkItem(context, target, descriptor, null); 742 WorkItem item = new WorkItem(context, target, descriptor, null, 0, null);
665 WorkItem result = item.gatherInputs(taskManager, []); 743 WorkItem result = item.gatherInputs(taskManager, []);
666 expect(result, isNull); 744 expect(result, isNull);
667 expect(item.exception, isNull); 745 expect(item.exception, isNull);
668 } 746 }
669 747
670 test_gatherInputs_incomplete() { 748 test_gatherInputs_incomplete() {
671 AnalysisTarget target = new TestSource(); 749 AnalysisTarget target = new TestSource();
672 ResultDescriptor resultA = new ResultDescriptor('resultA', null); 750 ResultDescriptor resultA = new ResultDescriptor('resultA', null);
673 ResultDescriptor resultB = new ResultDescriptor('resultB', null); 751 ResultDescriptor resultB = new ResultDescriptor('resultB', null);
674 // prepare tasks 752 // prepare tasks
675 TaskDescriptor task1 = new TaskDescriptor( 753 TaskDescriptor task1 = new TaskDescriptor(
676 'task', 754 'task',
677 (context, target) => 755 (context, target) =>
678 new TestAnalysisTask(context, target, results: [resultA]), 756 new TestAnalysisTask(context, target, results: [resultA]),
679 (target) => {}, 757 (target) => {},
680 [resultA]); 758 [resultA]);
681 TaskDescriptor task2 = new TaskDescriptor( 759 TaskDescriptor task2 = new TaskDescriptor(
682 'task', 760 'task',
683 (context, target) => new TestAnalysisTask(context, target), 761 (context, target) => new TestAnalysisTask(context, target),
684 (target) => {'one': resultA.of(target)}, 762 (target) => {'one': resultA.of(target)},
685 [resultB]); 763 [resultB]);
686 taskManager.addTaskDescriptor(task1); 764 taskManager.addTaskDescriptor(task1);
687 taskManager.addTaskDescriptor(task2); 765 taskManager.addTaskDescriptor(task2);
688 // gather inputs 766 // gather inputs
689 WorkItem item = new WorkItem(context, target, task2, null); 767 WorkItem item = new WorkItem(context, target, task2, null, 0, null);
690 WorkItem inputItem = item.gatherInputs(taskManager, []); 768 WorkItem inputItem = item.gatherInputs(taskManager, []);
691 expect(inputItem, isNotNull); 769 expect(inputItem, isNotNull);
692 } 770 }
693 771
694 test_gatherInputs_invalid() { 772 test_gatherInputs_invalid() {
695 AnalysisTarget target = new TestSource(); 773 AnalysisTarget target = new TestSource();
696 ResultDescriptor inputResult = new ResultDescriptor('input', null); 774 ResultDescriptor inputResult = new ResultDescriptor('input', null);
697 TaskDescriptor descriptor = new TaskDescriptor( 775 TaskDescriptor descriptor = new TaskDescriptor(
698 'task', 776 'task',
699 (context, target) => new TestAnalysisTask(context, target), 777 (context, target) => new TestAnalysisTask(context, target),
700 (target) => {'one': inputResult.of(target)}, 778 (target) => {'one': inputResult.of(target)},
701 [new ResultDescriptor('output', null)]); 779 [new ResultDescriptor('output', null)]);
702 WorkItem item = new WorkItem(context, target, descriptor, null); 780 WorkItem item = new WorkItem(context, target, descriptor, null, 0, null);
703 WorkItem result = item.gatherInputs(taskManager, []); 781 WorkItem result = item.gatherInputs(taskManager, []);
704 expect(result, isNull); 782 expect(result, isNull);
705 expect(item.exception, isNotNull); 783 expect(item.exception, isNotNull);
706 } 784 }
707 } 785 }
708 786
709 @reflectiveTest 787 @reflectiveTest
710 class WorkOrderTest extends EngineTestCase { 788 class WorkOrderTest extends EngineTestCase {
711 test_create() { 789 test_create() {
712 TaskManager manager = new TaskManager(); 790 TaskManager manager = new TaskManager();
713 TaskDescriptor descriptor = new TaskDescriptor( 791 TaskDescriptor descriptor = new TaskDescriptor(
714 'task', null, (_) => {}, [new ResultDescriptor('result', null)]); 792 'task', null, (_) => {}, [new ResultDescriptor('result', null)]);
715 WorkOrder order = 793 WorkOrder order = new WorkOrder(
716 new WorkOrder(manager, new WorkItem(null, null, descriptor, null)); 794 manager, new WorkItem(null, null, descriptor, null, 0, null));
717 expect(order, isNotNull); 795 expect(order, isNotNull);
718 expect(order.currentItems, isNull); 796 expect(order.currentItems, isNull);
719 expect(order.current, isNull); 797 expect(order.current, isNull);
720 } 798 }
721 799
722 test_moveNext() { 800 test_moveNext() {
723 TaskManager manager = new TaskManager(); 801 TaskManager manager = new TaskManager();
724 TaskDescriptor descriptor = new TaskDescriptor( 802 TaskDescriptor descriptor = new TaskDescriptor(
725 'task', null, (_) => {}, [new ResultDescriptor('result', null)]); 803 'task', null, (_) => {}, [new ResultDescriptor('result', null)]);
726 WorkItem workItem = new WorkItem(null, null, descriptor, null); 804 WorkItem workItem = new WorkItem(null, null, descriptor, null, 0, null);
727 WorkOrder order = new WorkOrder(manager, workItem); 805 WorkOrder order = new WorkOrder(manager, workItem);
728 // "item" has no child items 806 // "item" has no child items
729 expect(order.moveNext(), isTrue); 807 expect(order.moveNext(), isTrue);
730 expect(order.current, workItem); 808 expect(order.current, workItem);
731 // done 809 // done
732 expect(order.moveNext(), isFalse); 810 expect(order.moveNext(), isFalse);
733 expect(order.current, isNull); 811 expect(order.current, isNull);
734 } 812 }
735 } 813 }
736 814
737 /** 815 /**
738 * A dummy [InternalAnalysisContext] that does not use [AnalysisDriver] itself, 816 * A dummy [InternalAnalysisContext] that does not use [AnalysisDriver] itself,
739 * but provides enough implementation for it to function. 817 * but provides enough implementation for it to function.
740 */ 818 */
741 class _InternalAnalysisContextMock extends TypedMock 819 class _InternalAnalysisContextMock extends TypedMock
742 implements InternalAnalysisContext { 820 implements InternalAnalysisContext {
743 AnalysisCache analysisCache; 821 AnalysisCache analysisCache;
744 822
745 @override 823 @override
824 final AnalysisOptionsImpl analysisOptions = new AnalysisOptionsImpl();
825
826 @override
746 List<AnalysisTarget> explicitTargets = <AnalysisTarget>[]; 827 List<AnalysisTarget> explicitTargets = <AnalysisTarget>[];
747 828
748 @override 829 @override
749 List<AnalysisTarget> priorityTargets = <AnalysisTarget>[]; 830 List<AnalysisTarget> priorityTargets = <AnalysisTarget>[];
750 831
751 _InternalAnalysisContextMock() { 832 _InternalAnalysisContextMock() {
752 analysisCache = new AnalysisCache([new UniversalCachePartition(this)]); 833 analysisCache = new AnalysisCache([new UniversalCachePartition(this)]);
753 } 834 }
754 835
755 @override 836 @override
756 CacheEntry getCacheEntry(AnalysisTarget target) { 837 CacheEntry getCacheEntry(AnalysisTarget target) {
757 CacheEntry entry = analysisCache.get(target); 838 CacheEntry entry = analysisCache.get(target);
758 if (entry == null) { 839 if (entry == null) {
759 entry = new CacheEntry(target); 840 entry = new CacheEntry(target);
760 analysisCache.put(entry); 841 analysisCache.put(entry);
761 } 842 }
762 return entry; 843 return entry;
763 } 844 }
764
765 noSuchMethod(Invocation invocation) => super.noSuchMethod(invocation);
766 } 845 }
767 846
768 /** 847 /**
769 * Concrete class for testing [CycleAwareDependencyWalker] behavior. 848 * Concrete class for testing [CycleAwareDependencyWalker] behavior.
770 */ 849 */
771 class _TestCycleAwareDependencyWalker extends CycleAwareDependencyWalker<int> { 850 class _TestCycleAwareDependencyWalker extends CycleAwareDependencyWalker<int> {
772 final Map<int, List<int>> graph; 851 final Map<int, List<int>> graph;
773 852
774 Set<int> evaluatedNodes = new Set<int>(); 853 Set<int> evaluatedNodes = new Set<int>();
775 854
776 _TestCycleAwareDependencyWalker(this.graph, int startingNode) 855 _TestCycleAwareDependencyWalker(this.graph, int startingNode)
777 : super(startingNode); 856 : super(startingNode);
778 857
779 @override 858 @override
780 int getNextInput(int node, List<int> skipInputs) { 859 int getNextInput(int node, List<int> skipInputs) {
781 for (int dependency in graph[node]) { 860 for (int dependency in graph[node]) {
782 if (!skipInputs.contains(dependency) && 861 if (!skipInputs.contains(dependency) &&
783 !evaluatedNodes.contains(dependency)) { 862 !evaluatedNodes.contains(dependency)) {
784 return dependency; 863 return dependency;
785 } 864 }
786 } 865 }
787 return null; 866 return null;
788 } 867 }
789 } 868 }
790 869
791 class _WorkManagerMock extends TypedMock implements WorkManager { 870 class _WorkManagerMock extends TypedMock implements WorkManager {}
792 noSuchMethod(Invocation invocation) => super.noSuchMethod(invocation);
793 }
OLDNEW
« no previous file with comments | « packages/analyzer/test/src/task/dart_work_manager_test.dart ('k') | packages/analyzer/test/src/task/general_test.dart » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698