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

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

Issue 1266923004: More fixes for failures on the Windows bot (Closed) Base URL: https://github.com/dart-lang/sdk.git@master
Patch Set: Created 5 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 test.src.task.driver_test;
6 6
7 import 'package:analyzer/src/context/cache.dart'; 7 import 'package:analyzer/src/context/cache.dart';
8 import 'package:analyzer/src/generated/engine.dart' 8 import 'package:analyzer/src/generated/engine.dart'
9 hide 9 hide
10 AnalysisCache, 10 AnalysisCache,
11 AnalysisContextImpl, 11 AnalysisContextImpl,
12 AnalysisTask, 12 AnalysisTask,
13 UniversalCachePartition, 13 UniversalCachePartition,
14 WorkManager; 14 WorkManager;
15 import 'package:analyzer/src/generated/java_engine.dart'; 15 import 'package:analyzer/src/generated/java_engine.dart';
16 import 'package:analyzer/src/task/driver.dart'; 16 import 'package:analyzer/src/task/driver.dart';
17 import 'package:analyzer/src/task/inputs.dart'; 17 import 'package:analyzer/src/task/inputs.dart';
18 import 'package:analyzer/src/task/manager.dart'; 18 import 'package:analyzer/src/task/manager.dart';
19 import 'package:analyzer/task/model.dart'; 19 import 'package:analyzer/task/model.dart';
20 import 'package:typed_mock/typed_mock.dart'; 20 import 'package:typed_mock/typed_mock.dart';
21 import 'package:unittest/unittest.dart'; 21 import 'package:unittest/unittest.dart';
22 22
23 import '../../generated/test_support.dart'; 23 import '../../generated/test_support.dart';
24 import '../../reflective_tests.dart'; 24 import '../../reflective_tests.dart';
25 import '../../utils.dart';
25 import 'test_support.dart'; 26 import 'test_support.dart';
26 27
27 main() { 28 main() {
28 groupSep = ' | '; 29 initializeTestEnvironment();
29 runReflectiveTests(AnalysisDriverTest); 30 runReflectiveTests(AnalysisDriverTest);
30 runReflectiveTests(CycleAwareDependencyWalkerTest); 31 runReflectiveTests(CycleAwareDependencyWalkerTest);
31 runReflectiveTests(WorkItemTest); 32 runReflectiveTests(WorkItemTest);
32 runReflectiveTests(WorkOrderTest); 33 runReflectiveTests(WorkOrderTest);
33 } 34 }
34 35
35 class AbstractDriverTest { 36 class AbstractDriverTest {
36 TaskManager taskManager = new TaskManager(); 37 TaskManager taskManager = new TaskManager();
37 List<WorkManager> workManagers = <WorkManager>[]; 38 List<WorkManager> workManagers = <WorkManager>[];
38 InternalAnalysisContext context = new _InternalAnalysisContextMock(); 39 InternalAnalysisContext context = new _InternalAnalysisContextMock();
(...skipping 86 matching lines...) Expand 10 before | Expand all | Expand 10 after
125 .thenReturn(WorkOrderPriority.NONE); 126 .thenReturn(WorkOrderPriority.NONE);
126 when(workManager2.getNextResultPriority()) 127 when(workManager2.getNextResultPriority())
127 .thenReturn(WorkOrderPriority.NONE); 128 .thenReturn(WorkOrderPriority.NONE);
128 expect(analysisDriver.createNextWorkOrder(), isNull); 129 expect(analysisDriver.createNextWorkOrder(), isNull);
129 } 130 }
130 131
131 test_createWorkOrderForResult_error() { 132 test_createWorkOrderForResult_error() {
132 AnalysisTarget target = new TestSource(); 133 AnalysisTarget target = new TestSource();
133 ResultDescriptor result = new ResultDescriptor('result', null); 134 ResultDescriptor result = new ResultDescriptor('result', null);
134 CaughtException exception = new CaughtException(null, null); 135 CaughtException exception = new CaughtException(null, null);
135 context.getCacheEntry(target).setErrorState( 136 context
136 exception, <ResultDescriptor>[result]); 137 .getCacheEntry(target)
138 .setErrorState(exception, <ResultDescriptor>[result]);
137 139
138 expect(analysisDriver.createWorkOrderForResult(target, result), isNull); 140 expect(analysisDriver.createWorkOrderForResult(target, result), isNull);
139 } 141 }
140 142
141 test_createWorkOrderForResult_inProcess() { 143 test_createWorkOrderForResult_inProcess() {
142 AnalysisTarget target = new TestSource(); 144 AnalysisTarget target = new TestSource();
143 ResultDescriptor result = new ResultDescriptor('result', null); 145 ResultDescriptor result = new ResultDescriptor('result', null);
144 context.getCacheEntry(target).setState(result, CacheState.IN_PROCESS); 146 context.getCacheEntry(target).setState(result, CacheState.IN_PROCESS);
145 147
146 expect(analysisDriver.createWorkOrderForResult(target, result), isNull); 148 expect(analysisDriver.createWorkOrderForResult(target, result), isNull);
147 } 149 }
148 150
149 test_createWorkOrderForResult_invalid() { 151 test_createWorkOrderForResult_invalid() {
150 AnalysisTarget target = new TestSource(); 152 AnalysisTarget target = new TestSource();
151 ResultDescriptor result = new ResultDescriptor('result', null); 153 ResultDescriptor result = new ResultDescriptor('result', null);
152 TaskDescriptor descriptor = new TaskDescriptor('task', 154 TaskDescriptor descriptor = new TaskDescriptor(
155 'task',
153 (context, target) => new TestAnalysisTask(context, target), 156 (context, target) => new TestAnalysisTask(context, target),
154 (target) => {}, [result]); 157 (target) => {},
158 [result]);
155 taskManager.addTaskDescriptor(descriptor); 159 taskManager.addTaskDescriptor(descriptor);
156 context.getCacheEntry(target).setState(result, CacheState.INVALID); 160 context.getCacheEntry(target).setState(result, CacheState.INVALID);
157 161
158 WorkOrder workOrder = 162 WorkOrder workOrder =
159 analysisDriver.createWorkOrderForResult(target, result); 163 analysisDriver.createWorkOrderForResult(target, result);
160 expect(workOrder, isNotNull); 164 expect(workOrder, isNotNull);
161 } 165 }
162 166
163 test_createWorkOrderForResult_valid() { 167 test_createWorkOrderForResult_valid() {
164 AnalysisTarget target = new TestSource(); 168 AnalysisTarget target = new TestSource();
165 ResultDescriptor result = new ResultDescriptor('result', null); 169 ResultDescriptor result = new ResultDescriptor('result', null);
166 context.getCacheEntry(target).setValue( 170 context
167 result, '', TargetedResult.EMPTY_LIST); 171 .getCacheEntry(target)
172 .setValue(result, '', TargetedResult.EMPTY_LIST);
168 173
169 expect(analysisDriver.createWorkOrderForResult(target, result), isNull); 174 expect(analysisDriver.createWorkOrderForResult(target, result), isNull);
170 } 175 }
171 176
172 test_createWorkOrderForTarget_complete_generalTarget_generalResult() { 177 test_createWorkOrderForTarget_complete_generalTarget_generalResult() {
173 _createWorkOrderForTarget(true, false, false); 178 _createWorkOrderForTarget(true, false, false);
174 } 179 }
175 180
176 test_createWorkOrderForTarget_complete_generalTarget_priorityResult() { 181 test_createWorkOrderForTarget_complete_generalTarget_priorityResult() {
177 _createWorkOrderForTarget(true, false, true); 182 _createWorkOrderForTarget(true, false, true);
(...skipping 35 matching lines...) Expand 10 before | Expand all | Expand 10 after
213 expect(analysisDriver.performAnalysisTask(), false); 218 expect(analysisDriver.performAnalysisTask(), false);
214 } 219 }
215 220
216 test_performAnalysisTask_infiniteLoop_handled() { 221 test_performAnalysisTask_infiniteLoop_handled() {
217 AnalysisTarget target = new TestSource(); 222 AnalysisTarget target = new TestSource();
218 ResultDescriptor resultA = new ResultDescriptor('resultA', -1); 223 ResultDescriptor resultA = new ResultDescriptor('resultA', -1);
219 ResultDescriptor resultB = new ResultDescriptor('resultB', -2); 224 ResultDescriptor resultB = new ResultDescriptor('resultB', -2);
220 // configure tasks 225 // configure tasks
221 TestAnalysisTask task1; 226 TestAnalysisTask task1;
222 TestAnalysisTask task2; 227 TestAnalysisTask task2;
223 TaskDescriptor descriptor1 = new TaskDescriptor('task1', 228 TaskDescriptor descriptor1 = new TaskDescriptor(
224 (context, target) => task1, (target) => { 229 'task1',
225 'inputB': new SimpleTaskInput<int>(target, resultB) 230 (context, target) => task1,
226 }, [resultA]); 231 (target) => {'inputB': new SimpleTaskInput<int>(target, resultB)},
227 TaskDescriptor descriptor2 = new TaskDescriptor('task2', 232 [resultA]);
228 (context, target) => task2, (target) => { 233 TaskDescriptor descriptor2 = new TaskDescriptor(
229 'inputA': new SimpleTaskInput<int>(target, resultA) 234 'task2',
230 }, [resultB]); 235 (context, target) => task2,
236 (target) => {'inputA': new SimpleTaskInput<int>(target, resultA)},
237 [resultB]);
231 task1 = new TestAnalysisTask(context, target, 238 task1 = new TestAnalysisTask(context, target,
232 descriptor: descriptor1, 239 descriptor: descriptor1,
233 results: [resultA], 240 results: [resultA],
234 value: 10, 241 value: 10,
235 handlesDependencyCycles: true); 242 handlesDependencyCycles: true);
236 task2 = new TestAnalysisTask(context, target, 243 task2 = new TestAnalysisTask(context, target,
237 descriptor: descriptor2, 244 descriptor: descriptor2,
238 results: [resultB], 245 results: [resultB],
239 value: 20, 246 value: 20,
240 handlesDependencyCycles: true); 247 handlesDependencyCycles: true);
(...skipping 19 matching lines...) Expand all
260 expect(context.getCacheEntry(target).getValue(resultB), 20); 267 expect(context.getCacheEntry(target).getValue(resultB), 20);
261 } 268 }
262 269
263 test_performAnalysisTask_infiniteLoop_unhandled() { 270 test_performAnalysisTask_infiniteLoop_unhandled() {
264 AnalysisTarget target = new TestSource(); 271 AnalysisTarget target = new TestSource();
265 ResultDescriptor resultA = new ResultDescriptor('resultA', -1); 272 ResultDescriptor resultA = new ResultDescriptor('resultA', -1);
266 ResultDescriptor resultB = new ResultDescriptor('resultB', -2); 273 ResultDescriptor resultB = new ResultDescriptor('resultB', -2);
267 // configure tasks 274 // configure tasks
268 TestAnalysisTask task1; 275 TestAnalysisTask task1;
269 TestAnalysisTask task2; 276 TestAnalysisTask task2;
270 TaskDescriptor descriptor1 = new TaskDescriptor('task1', 277 TaskDescriptor descriptor1 = new TaskDescriptor(
271 (context, target) => task1, (target) => { 278 'task1',
272 'inputB': new SimpleTaskInput<int>(target, resultB) 279 (context, target) => task1,
273 }, [resultA]); 280 (target) => {'inputB': new SimpleTaskInput<int>(target, resultB)},
274 TaskDescriptor descriptor2 = new TaskDescriptor('task2', 281 [resultA]);
275 (context, target) => task2, (target) => { 282 TaskDescriptor descriptor2 = new TaskDescriptor(
276 'inputA': new SimpleTaskInput<int>(target, resultA) 283 'task2',
277 }, [resultB]); 284 (context, target) => task2,
285 (target) => {'inputA': new SimpleTaskInput<int>(target, resultA)},
286 [resultB]);
278 task1 = new TestAnalysisTask(context, target, descriptor: descriptor1); 287 task1 = new TestAnalysisTask(context, target, descriptor: descriptor1);
279 task2 = new TestAnalysisTask(context, target, descriptor: descriptor2); 288 task2 = new TestAnalysisTask(context, target, descriptor: descriptor2);
280 taskManager.addTaskDescriptor(descriptor1); 289 taskManager.addTaskDescriptor(descriptor1);
281 taskManager.addTaskDescriptor(descriptor2); 290 taskManager.addTaskDescriptor(descriptor2);
282 // configure WorkManager 291 // configure WorkManager
283 when(workManager1.getNextResultPriority()).thenReturnList( 292 when(workManager1.getNextResultPriority()).thenReturnList(
284 <WorkOrderPriority>[WorkOrderPriority.NORMAL, WorkOrderPriority.NONE]); 293 <WorkOrderPriority>[WorkOrderPriority.NORMAL, WorkOrderPriority.NONE]);
285 when(workManager1.getNextResult()) 294 when(workManager1.getNextResult())
286 .thenReturn(new TargetedResult(target, resultB)); 295 .thenReturn(new TargetedResult(target, resultB));
287 // prepare work order 296 // prepare work order
288 expect(analysisDriver.performAnalysisTask(), true); 297 expect(analysisDriver.performAnalysisTask(), true);
289 expect(analysisDriver.performAnalysisTask(), true); 298 expect(analysisDriver.performAnalysisTask(), true);
290 CaughtException exception = context.getCacheEntry(target).exception; 299 CaughtException exception = context.getCacheEntry(target).exception;
291 expect(exception, isNotNull); 300 expect(exception, isNotNull);
292 expect(exception.exception, new isInstanceOf<InfiniteTaskLoopException>()); 301 expect(exception.exception, new isInstanceOf<InfiniteTaskLoopException>());
293 } 302 }
294 303
295 test_performAnalysisTask_inputsFirst() { 304 test_performAnalysisTask_inputsFirst() {
296 AnalysisTarget target = new TestSource(); 305 AnalysisTarget target = new TestSource();
297 ResultDescriptor resultA = new ResultDescriptor('resultA', -1); 306 ResultDescriptor resultA = new ResultDescriptor('resultA', -1);
298 ResultDescriptor resultB = new ResultDescriptor('resultB', -2); 307 ResultDescriptor resultB = new ResultDescriptor('resultB', -2);
299 // configure tasks 308 // configure tasks
300 TestAnalysisTask task1; 309 TestAnalysisTask task1;
301 TestAnalysisTask task2; 310 TestAnalysisTask task2;
302 TaskDescriptor descriptor1 = new TaskDescriptor( 311 TaskDescriptor descriptor1 = new TaskDescriptor(
303 'task1', (context, target) => task1, (target) => {}, [resultA]); 312 'task1', (context, target) => task1, (target) => {}, [resultA]);
304 TaskDescriptor descriptor2 = new TaskDescriptor('task2', 313 TaskDescriptor descriptor2 = new TaskDescriptor(
305 (context, target) => task2, (target) => { 314 'task2',
306 'inputA': new SimpleTaskInput<int>(target, resultA) 315 (context, target) => task2,
307 }, [resultB]); 316 (target) => {'inputA': new SimpleTaskInput<int>(target, resultA)},
317 [resultB]);
308 task1 = new TestAnalysisTask(context, target, 318 task1 = new TestAnalysisTask(context, target,
309 descriptor: descriptor1, results: [resultA], value: 10); 319 descriptor: descriptor1, results: [resultA], value: 10);
310 task2 = new TestAnalysisTask(context, target, 320 task2 = new TestAnalysisTask(context, target,
311 descriptor: descriptor2, value: 20); 321 descriptor: descriptor2, value: 20);
312 taskManager.addTaskDescriptor(descriptor1); 322 taskManager.addTaskDescriptor(descriptor1);
313 taskManager.addTaskDescriptor(descriptor2); 323 taskManager.addTaskDescriptor(descriptor2);
314 // configure WorkManager 324 // configure WorkManager
315 when(workManager1.getNextResultPriority()).thenReturnList( 325 when(workManager1.getNextResultPriority()).thenReturnList(
316 <WorkOrderPriority>[WorkOrderPriority.NORMAL, WorkOrderPriority.NONE]); 326 <WorkOrderPriority>[WorkOrderPriority.NORMAL, WorkOrderPriority.NONE]);
317 when(workManager1.getNextResult()) 327 when(workManager1.getNextResult())
(...skipping 65 matching lines...) Expand 10 before | Expand all | Expand 10 after
383 393
384 analysisDriver.performWorkItem(item); 394 analysisDriver.performWorkItem(item);
385 CacheEntry targetEntry = context.getCacheEntry(item.target); 395 CacheEntry targetEntry = context.getCacheEntry(item.target);
386 expect(targetEntry.exception, isNull); 396 expect(targetEntry.exception, isNull);
387 expect(targetEntry.getState(result), CacheState.VALID); 397 expect(targetEntry.getState(result), CacheState.VALID);
388 } 398 }
389 399
390 test_performWorkItem_preExistingException() { 400 test_performWorkItem_preExistingException() {
391 AnalysisTarget target = new TestSource(); 401 AnalysisTarget target = new TestSource();
392 ResultDescriptor result = new ResultDescriptor('result', null); 402 ResultDescriptor result = new ResultDescriptor('result', null);
393 TaskDescriptor descriptor = new TaskDescriptor('task', 403 TaskDescriptor descriptor = new TaskDescriptor(
404 'task',
394 (context, target) => new TestAnalysisTask(context, target), 405 (context, target) => new TestAnalysisTask(context, target),
395 (target) => {}, [result]); 406 (target) => {},
407 [result]);
396 CaughtException exception = 408 CaughtException exception =
397 new CaughtException(new AnalysisException(), null); 409 new CaughtException(new AnalysisException(), null);
398 WorkItem item = new WorkItem(context, target, descriptor, null); 410 WorkItem item = new WorkItem(context, target, descriptor, null);
399 item.exception = exception; 411 item.exception = exception;
400 412
401 analysisDriver.performWorkItem(item); 413 analysisDriver.performWorkItem(item);
402 CacheEntry targetEntry = context.getCacheEntry(item.target); 414 CacheEntry targetEntry = context.getCacheEntry(item.target);
403 expect(targetEntry.exception, exception); 415 expect(targetEntry.exception, exception);
404 expect(targetEntry.getState(result), CacheState.ERROR); 416 expect(targetEntry.getState(result), CacheState.ERROR);
405 } 417 }
406 418
407 test_reset() { 419 test_reset() {
408 ResultDescriptor inputResult = new ResultDescriptor('input', null); 420 ResultDescriptor inputResult = new ResultDescriptor('input', null);
409 TaskDescriptor descriptor = new TaskDescriptor('task', 421 TaskDescriptor descriptor = new TaskDescriptor(
422 'task',
410 (context, target) => new TestAnalysisTask(context, target), 423 (context, target) => new TestAnalysisTask(context, target),
411 (target) => {'one': inputResult.of(target)}, 424 (target) => {'one': inputResult.of(target)},
412 [new ResultDescriptor('output', null)]); 425 [new ResultDescriptor('output', null)]);
413 analysisDriver.currentWorkOrder = 426 analysisDriver.currentWorkOrder =
414 new WorkOrder(taskManager, new WorkItem(null, null, descriptor, null)); 427 new WorkOrder(taskManager, new WorkItem(null, null, descriptor, null));
415 428
416 analysisDriver.reset(); 429 analysisDriver.reset();
417 expect(analysisDriver.currentWorkOrder, isNull); 430 expect(analysisDriver.currentWorkOrder, isNull);
418 } 431 }
419 432
420 void _configureDescriptors12() { 433 void _configureDescriptors12() {
421 descriptor1 = new TaskDescriptor('task1', (context, target) => 434 descriptor1 = new TaskDescriptor(
435 'task1',
436 (context, target) =>
422 new TestAnalysisTask(context, target, descriptor: descriptor1), 437 new TestAnalysisTask(context, target, descriptor: descriptor1),
423 (target) => {}, [result1]); 438 (target) => {},
439 [result1]);
424 taskManager.addTaskDescriptor(descriptor1); 440 taskManager.addTaskDescriptor(descriptor1);
425 441
426 descriptor2 = new TaskDescriptor('task2', (context, target) => 442 descriptor2 = new TaskDescriptor(
443 'task2',
444 (context, target) =>
427 new TestAnalysisTask(context, target, descriptor: descriptor1), 445 new TestAnalysisTask(context, target, descriptor: descriptor1),
428 (target) => {}, [result2]); 446 (target) => {},
447 [result2]);
429 taskManager.addTaskDescriptor(descriptor2); 448 taskManager.addTaskDescriptor(descriptor2);
430 } 449 }
431 450
432 /** 451 /**
433 * [complete] is `true` if the value of the result has already been computed. 452 * [complete] is `true` if the value of the result has already been computed.
434 * [priorityTarget] is `true` if the target is in the list of priority 453 * [priorityTarget] is `true` if the target is in the list of priority
435 * targets. 454 * targets.
436 * [priorityResult] is `true` if the result should only be computed for 455 * [priorityResult] is `true` if the result should only be computed for
437 * priority targets. 456 * priority targets.
438 */ 457 */
439 _createWorkOrderForTarget( 458 _createWorkOrderForTarget(
440 bool complete, bool priorityTarget, bool priorityResult) { 459 bool complete, bool priorityTarget, bool priorityResult) {
441 AnalysisTarget target = new TestSource(); 460 AnalysisTarget target = new TestSource();
442 ResultDescriptor result = new ResultDescriptor('result', null); 461 ResultDescriptor result = new ResultDescriptor('result', null);
443 TaskDescriptor descriptor = new TaskDescriptor('task', 462 TaskDescriptor descriptor = new TaskDescriptor(
463 'task',
444 (context, target) => new TestAnalysisTask(context, target), 464 (context, target) => new TestAnalysisTask(context, target),
445 (target) => {}, [result]); 465 (target) => {},
466 [result]);
446 if (priorityResult) { 467 if (priorityResult) {
447 taskManager.addPriorityResult(result); 468 taskManager.addPriorityResult(result);
448 } else { 469 } else {
449 taskManager.addGeneralResult(result); 470 taskManager.addGeneralResult(result);
450 } 471 }
451 taskManager.addTaskDescriptor(descriptor); 472 taskManager.addTaskDescriptor(descriptor);
452 if (priorityTarget) { 473 if (priorityTarget) {
453 context.priorityTargets.add(target); 474 context.priorityTargets.add(target);
454 } else { 475 } else {
455 context.explicitTargets.add(target); 476 context.explicitTargets.add(target);
456 } 477 }
457 if (complete) { 478 if (complete) {
458 context.getCacheEntry(target).setValue( 479 context
459 result, '', TargetedResult.EMPTY_LIST); 480 .getCacheEntry(target)
481 .setValue(result, '', TargetedResult.EMPTY_LIST);
460 } else { 482 } else {
461 context.getCacheEntry(target).setState(result, CacheState.INVALID); 483 context.getCacheEntry(target).setState(result, CacheState.INVALID);
462 } 484 }
463 485
464 WorkOrder workOrder = 486 WorkOrder workOrder =
465 analysisDriver.createWorkOrderForTarget(target, priorityTarget); 487 analysisDriver.createWorkOrderForTarget(target, priorityTarget);
466 if (complete) { 488 if (complete) {
467 expect(workOrder, isNull); 489 expect(workOrder, isNull);
468 } else if (priorityResult) { 490 } else if (priorityResult) {
469 expect(workOrder, priorityTarget ? isNotNull : isNull); 491 expect(workOrder, priorityTarget ? isNotNull : isNull);
(...skipping 29 matching lines...) Expand all
499 expect(cycleIndicators, expectedCycleIndicators); 521 expect(cycleIndicators, expectedCycleIndicators);
500 } 522 }
501 523
502 StronglyConnectedComponent<int> cycle(List<int> nodes) => 524 StronglyConnectedComponent<int> cycle(List<int> nodes) =>
503 new StronglyConnectedComponent(nodes, true); 525 new StronglyConnectedComponent(nodes, true);
504 526
505 StronglyConnectedComponent<int> singleton(int node) => 527 StronglyConnectedComponent<int> singleton(int node) =>
506 new StronglyConnectedComponent(<int>[node], false); 528 new StronglyConnectedComponent(<int>[node], false);
507 529
508 void test_complex_graph() { 530 void test_complex_graph() {
509 checkGraph({ 531 checkGraph(
510 1: [2, 3], 532 {
511 2: [3, 4], 533 1: [2, 3],
512 3: [], 534 2: [3, 4],
513 4: [3, 5], 535 3: [],
514 5: [2, 6], 536 4: [3, 5],
515 6: [3, 4] 537 5: [2, 6],
516 }, 1, [singleton(3), cycle([2, 4, 5, 6]), singleton(1)]); 538 6: [3, 4]
539 },
540 1,
541 [
542 singleton(3),
543 cycle([2, 4, 5, 6]),
544 singleton(1)
545 ]);
517 } 546 }
518 547
519 void test_cycle_depends_on_other_nodes() { 548 void test_cycle_depends_on_other_nodes() {
520 checkGraph({1: [2, 3], 2: [4, 1], 3: [], 4: []}, 1, [ 549 checkGraph(
521 singleton(4), 550 {
522 singleton(3), 551 1: [2, 3],
523 cycle([1, 2]) 552 2: [4, 1],
524 ]); 553 3: [],
554 4: []
555 },
556 1,
557 [
558 singleton(4),
559 singleton(3),
560 cycle([1, 2])
561 ]);
525 } 562 }
526 563
527 void test_initial_node_depends_on_cycle() { 564 void test_initial_node_depends_on_cycle() {
528 checkGraph({1: [2], 2: [3], 3: [2]}, 1, [cycle([2, 3]), singleton(1)]); 565 checkGraph(
566 {
567 1: [2],
568 2: [3],
569 3: [2]
570 },
571 1,
572 [
573 cycle([2, 3]),
574 singleton(1)
575 ]);
529 } 576 }
530 577
531 void test_simple_cycle() { 578 void test_simple_cycle() {
532 checkGraph({1: [2], 2: [1]}, 1, [cycle([1, 2])]); 579 checkGraph(
580 {
581 1: [2],
582 2: [1]
583 },
584 1,
585 [
586 cycle([1, 2])
587 ]);
533 } 588 }
534 589
535 void test_simple_dependency_chain() { 590 void test_simple_dependency_chain() {
536 checkGraph({1: [2], 2: []}, 1, [singleton(2), singleton(1)]); 591 checkGraph(
592 {
593 1: [2],
594 2: []
595 },
596 1,
597 [singleton(2), singleton(1)]);
537 } 598 }
538 599
539 void test_single_node() { 600 void test_single_node() {
540 checkGraph({1: []}, 1, [singleton(1)]); 601 checkGraph({1: []}, 1, [singleton(1)]);
541 } 602 }
542 603
543 void test_single_node_cycle() { 604 void test_single_node_cycle() {
544 checkGraph({1: [1]}, 1, [cycle([1])]); 605 checkGraph(
606 {
607 1: [1]
608 },
609 1,
610 [
611 cycle([1])
612 ]);
545 } 613 }
546 } 614 }
547 615
548 @reflectiveTest 616 @reflectiveTest
549 class WorkItemTest extends AbstractDriverTest { 617 class WorkItemTest extends AbstractDriverTest {
550 test_buildTask_complete() { 618 test_buildTask_complete() {
551 AnalysisTarget target = new TestSource(); 619 AnalysisTarget target = new TestSource();
552 TaskDescriptor descriptor = new TaskDescriptor('task', 620 TaskDescriptor descriptor = new TaskDescriptor(
621 'task',
553 (context, target) => new TestAnalysisTask(context, target), 622 (context, target) => new TestAnalysisTask(context, target),
554 (target) => {}, [new ResultDescriptor('output', null)]); 623 (target) => {},
624 [new ResultDescriptor('output', null)]);
555 WorkItem item = new WorkItem(context, target, descriptor, null); 625 WorkItem item = new WorkItem(context, target, descriptor, null);
556 AnalysisTask task = item.buildTask(); 626 AnalysisTask task = item.buildTask();
557 expect(task, isNotNull); 627 expect(task, isNotNull);
558 } 628 }
559 629
560 test_buildTask_incomplete() { 630 test_buildTask_incomplete() {
561 AnalysisTarget target = new TestSource(); 631 AnalysisTarget target = new TestSource();
562 ResultDescriptor inputResult = new ResultDescriptor('input', null); 632 ResultDescriptor inputResult = new ResultDescriptor('input', null);
563 List<ResultDescriptor> outputResults = 633 List<ResultDescriptor> outputResults = <ResultDescriptor>[
564 <ResultDescriptor>[new ResultDescriptor('output', null)]; 634 new ResultDescriptor('output', null)
565 TaskDescriptor descriptor = new TaskDescriptor('task', (context, target) => 635 ];
636 TaskDescriptor descriptor = new TaskDescriptor(
637 'task',
638 (context, target) =>
566 new TestAnalysisTask(context, target, results: outputResults), 639 new TestAnalysisTask(context, target, results: outputResults),
567 (target) => {'one': inputResult.of(target)}, outputResults); 640 (target) => {'one': inputResult.of(target)},
641 outputResults);
568 WorkItem item = new WorkItem(context, target, descriptor, null); 642 WorkItem item = new WorkItem(context, target, descriptor, null);
569 expect(() => item.buildTask(), throwsStateError); 643 expect(() => item.buildTask(), throwsStateError);
570 } 644 }
571 645
572 test_create() { 646 test_create() {
573 AnalysisTarget target = new TestSource(); 647 AnalysisTarget target = new TestSource();
574 TaskDescriptor descriptor = new TaskDescriptor( 648 TaskDescriptor descriptor = new TaskDescriptor(
575 'task', null, (target) => {}, [new ResultDescriptor('result', null)]); 649 'task', null, (target) => {}, [new ResultDescriptor('result', null)]);
576 WorkItem item = new WorkItem(context, target, descriptor, null); 650 WorkItem item = new WorkItem(context, target, descriptor, null);
577 expect(item, isNotNull); 651 expect(item, isNotNull);
578 expect(item.context, context); 652 expect(item.context, context);
579 expect(item.descriptor, descriptor); 653 expect(item.descriptor, descriptor);
580 expect(item.target, target); 654 expect(item.target, target);
581 } 655 }
582 656
583 test_gatherInputs_complete() { 657 test_gatherInputs_complete() {
584 AnalysisTarget target = new TestSource(); 658 AnalysisTarget target = new TestSource();
585 TaskDescriptor descriptor = new TaskDescriptor('task', 659 TaskDescriptor descriptor = new TaskDescriptor(
660 'task',
586 (context, target) => new TestAnalysisTask(context, target), 661 (context, target) => new TestAnalysisTask(context, target),
587 (target) => {}, [new ResultDescriptor('output', null)]); 662 (target) => {},
663 [new ResultDescriptor('output', null)]);
588 WorkItem item = new WorkItem(context, target, descriptor, null); 664 WorkItem item = new WorkItem(context, target, descriptor, null);
589 WorkItem result = item.gatherInputs(taskManager, []); 665 WorkItem result = item.gatherInputs(taskManager, []);
590 expect(result, isNull); 666 expect(result, isNull);
591 expect(item.exception, isNull); 667 expect(item.exception, isNull);
592 } 668 }
593 669
594 test_gatherInputs_incomplete() { 670 test_gatherInputs_incomplete() {
595 AnalysisTarget target = new TestSource(); 671 AnalysisTarget target = new TestSource();
596 ResultDescriptor resultA = new ResultDescriptor('resultA', null); 672 ResultDescriptor resultA = new ResultDescriptor('resultA', null);
597 ResultDescriptor resultB = new ResultDescriptor('resultB', null); 673 ResultDescriptor resultB = new ResultDescriptor('resultB', null);
598 // prepare tasks 674 // prepare tasks
599 TaskDescriptor task1 = new TaskDescriptor('task', (context, target) => 675 TaskDescriptor task1 = new TaskDescriptor(
676 'task',
677 (context, target) =>
600 new TestAnalysisTask(context, target, results: [resultA]), 678 new TestAnalysisTask(context, target, results: [resultA]),
601 (target) => {}, [resultA]); 679 (target) => {},
602 TaskDescriptor task2 = new TaskDescriptor('task', 680 [resultA]);
681 TaskDescriptor task2 = new TaskDescriptor(
682 'task',
603 (context, target) => new TestAnalysisTask(context, target), 683 (context, target) => new TestAnalysisTask(context, target),
604 (target) => {'one': resultA.of(target)}, [resultB]); 684 (target) => {'one': resultA.of(target)},
685 [resultB]);
605 taskManager.addTaskDescriptor(task1); 686 taskManager.addTaskDescriptor(task1);
606 taskManager.addTaskDescriptor(task2); 687 taskManager.addTaskDescriptor(task2);
607 // gather inputs 688 // gather inputs
608 WorkItem item = new WorkItem(context, target, task2, null); 689 WorkItem item = new WorkItem(context, target, task2, null);
609 WorkItem inputItem = item.gatherInputs(taskManager, []); 690 WorkItem inputItem = item.gatherInputs(taskManager, []);
610 expect(inputItem, isNotNull); 691 expect(inputItem, isNotNull);
611 } 692 }
612 693
613 test_gatherInputs_invalid() { 694 test_gatherInputs_invalid() {
614 AnalysisTarget target = new TestSource(); 695 AnalysisTarget target = new TestSource();
615 ResultDescriptor inputResult = new ResultDescriptor('input', null); 696 ResultDescriptor inputResult = new ResultDescriptor('input', null);
616 TaskDescriptor descriptor = new TaskDescriptor('task', 697 TaskDescriptor descriptor = new TaskDescriptor(
698 'task',
617 (context, target) => new TestAnalysisTask(context, target), 699 (context, target) => new TestAnalysisTask(context, target),
618 (target) => {'one': inputResult.of(target)}, 700 (target) => {'one': inputResult.of(target)},
619 [new ResultDescriptor('output', null)]); 701 [new ResultDescriptor('output', null)]);
620 WorkItem item = new WorkItem(context, target, descriptor, null); 702 WorkItem item = new WorkItem(context, target, descriptor, null);
621 WorkItem result = item.gatherInputs(taskManager, []); 703 WorkItem result = item.gatherInputs(taskManager, []);
622 expect(result, isNull); 704 expect(result, isNull);
623 expect(item.exception, isNotNull); 705 expect(item.exception, isNotNull);
624 } 706 }
625 } 707 }
626 708
(...skipping 75 matching lines...) Expand 10 before | Expand all | Expand 10 after
702 return dependency; 784 return dependency;
703 } 785 }
704 } 786 }
705 return null; 787 return null;
706 } 788 }
707 } 789 }
708 790
709 class _WorkManagerMock extends TypedMock implements WorkManager { 791 class _WorkManagerMock extends TypedMock implements WorkManager {
710 noSuchMethod(Invocation invocation) => super.noSuchMethod(invocation); 792 noSuchMethod(Invocation invocation) => super.noSuchMethod(invocation);
711 } 793 }
OLDNEW
« no previous file with comments | « pkg/analyzer/test/src/task/dart_work_manager_test.dart ('k') | pkg/analyzer/test/src/task/general_test.dart » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698