| OLD | NEW |
| 1 // Copyright (c) 2015, the Dart project authors. Please see the AUTHORS file | 1 // Copyright (c) 2015, the Dart project authors. Please see the AUTHORS file |
| 2 // for details. All rights reserved. Use of this source code is governed by a | 2 // for details. All rights reserved. Use of this source code is governed by a |
| 3 // BSD-style license that can be found in the LICENSE file. | 3 // BSD-style license that can be found in the LICENSE file. |
| 4 | 4 |
| 5 library test.src.task.driver_test; | 5 library test.src.task.driver_test; |
| 6 | 6 |
| 7 import 'package:analyzer/src/context/cache.dart'; | 7 import 'package:analyzer/src/context/cache.dart'; |
| 8 import 'package:analyzer/src/context/context.dart'; | 8 import 'package:analyzer/src/context/context.dart'; |
| 9 import 'package:analyzer/src/generated/engine.dart' | 9 import 'package:analyzer/src/generated/engine.dart' |
| 10 hide AnalysisContextImpl, AnalysisTask; | 10 hide AnalysisContextImpl, AnalysisTask; |
| (...skipping 46 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 57 AnalysisTarget priorityTarget = new TestSource(); | 57 AnalysisTarget priorityTarget = new TestSource(); |
| 58 AnalysisTarget normalTarget = new TestSource(); | 58 AnalysisTarget normalTarget = new TestSource(); |
| 59 ResultDescriptor result = new ResultDescriptor('result', null); | 59 ResultDescriptor result = new ResultDescriptor('result', null); |
| 60 TaskDescriptor descriptor = new TaskDescriptor('task', | 60 TaskDescriptor descriptor = new TaskDescriptor('task', |
| 61 (context, target) => new TestAnalysisTask(context, target), | 61 (context, target) => new TestAnalysisTask(context, target), |
| 62 (target) => {}, [result]); | 62 (target) => {}, [result]); |
| 63 taskManager.addGeneralResult(result); | 63 taskManager.addGeneralResult(result); |
| 64 taskManager.addTaskDescriptor(descriptor); | 64 taskManager.addTaskDescriptor(descriptor); |
| 65 context.priorityTargets.add(priorityTarget); | 65 context.priorityTargets.add(priorityTarget); |
| 66 context.getCacheEntry(priorityTarget).setValue( | 66 context.getCacheEntry(priorityTarget).setValue( |
| 67 result, '', TargetedResult.EMPTY_LIST, null); | 67 result, '', TargetedResult.EMPTY_LIST); |
| 68 context.explicitTargets.add(normalTarget); | 68 context.explicitTargets.add(normalTarget); |
| 69 context.getCacheEntry(priorityTarget).setValue( | 69 context.getCacheEntry(priorityTarget).setValue( |
| 70 result, '', TargetedResult.EMPTY_LIST, null); | 70 result, '', TargetedResult.EMPTY_LIST); |
| 71 | 71 |
| 72 expect(analysisDriver.createNextWorkOrder(), isNull); | 72 expect(analysisDriver.createNextWorkOrder(), isNull); |
| 73 } | 73 } |
| 74 | 74 |
| 75 test_createNextWorkOrder_normalTarget() { | 75 test_createNextWorkOrder_normalTarget() { |
| 76 AnalysisTarget priorityTarget = new TestSource(); | 76 AnalysisTarget priorityTarget = new TestSource(); |
| 77 AnalysisTarget normalTarget = new TestSource(); | 77 AnalysisTarget normalTarget = new TestSource(); |
| 78 ResultDescriptor result = new ResultDescriptor('result', null); | 78 ResultDescriptor result = new ResultDescriptor('result', null); |
| 79 TaskDescriptor descriptor = new TaskDescriptor('task', | 79 TaskDescriptor descriptor = new TaskDescriptor('task', |
| 80 (context, target) => new TestAnalysisTask(context, target), | 80 (context, target) => new TestAnalysisTask(context, target), |
| 81 (target) => {}, [result]); | 81 (target) => {}, [result]); |
| 82 taskManager.addGeneralResult(result); | 82 taskManager.addGeneralResult(result); |
| 83 taskManager.addTaskDescriptor(descriptor); | 83 taskManager.addTaskDescriptor(descriptor); |
| 84 context.priorityTargets.add(priorityTarget); | 84 context.priorityTargets.add(priorityTarget); |
| 85 context.getCacheEntry(priorityTarget).setValue( | 85 context.getCacheEntry(priorityTarget).setValue( |
| 86 result, '', TargetedResult.EMPTY_LIST, null); | 86 result, '', TargetedResult.EMPTY_LIST); |
| 87 context.explicitTargets.add(normalTarget); | 87 context.explicitTargets.add(normalTarget); |
| 88 context.getCacheEntry(normalTarget).setState(result, CacheState.INVALID); | 88 context.getCacheEntry(normalTarget).setState(result, CacheState.INVALID); |
| 89 | 89 |
| 90 WorkOrder workOrder = analysisDriver.createNextWorkOrder(); | 90 WorkOrder workOrder = analysisDriver.createNextWorkOrder(); |
| 91 expect(workOrder, isNotNull); | 91 expect(workOrder, isNotNull); |
| 92 expect(workOrder.moveNext(), true); | 92 expect(workOrder.moveNext(), true); |
| 93 expect(workOrder.currentItem.target, normalTarget); | 93 expect(workOrder.currentItem.target, normalTarget); |
| 94 } | 94 } |
| 95 | 95 |
| 96 test_createNextWorkOrder_noTargets() { | 96 test_createNextWorkOrder_noTargets() { |
| (...skipping 56 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 153 | 153 |
| 154 WorkOrder workOrder = | 154 WorkOrder workOrder = |
| 155 analysisDriver.createWorkOrderForResult(target, result); | 155 analysisDriver.createWorkOrderForResult(target, result); |
| 156 expect(workOrder, isNotNull); | 156 expect(workOrder, isNotNull); |
| 157 } | 157 } |
| 158 | 158 |
| 159 test_createWorkOrderForResult_valid() { | 159 test_createWorkOrderForResult_valid() { |
| 160 AnalysisTarget target = new TestSource(); | 160 AnalysisTarget target = new TestSource(); |
| 161 ResultDescriptor result = new ResultDescriptor('result', null); | 161 ResultDescriptor result = new ResultDescriptor('result', null); |
| 162 context.getCacheEntry(target).setValue( | 162 context.getCacheEntry(target).setValue( |
| 163 result, '', TargetedResult.EMPTY_LIST, null); | 163 result, '', TargetedResult.EMPTY_LIST); |
| 164 | 164 |
| 165 expect(analysisDriver.createWorkOrderForResult(target, result), isNull); | 165 expect(analysisDriver.createWorkOrderForResult(target, result), isNull); |
| 166 } | 166 } |
| 167 | 167 |
| 168 test_createWorkOrderForTarget_complete_generalTarget_generalResult() { | 168 test_createWorkOrderForTarget_complete_generalTarget_generalResult() { |
| 169 _createWorkOrderForTarget(true, false, false); | 169 _createWorkOrderForTarget(true, false, false); |
| 170 } | 170 } |
| 171 | 171 |
| 172 test_createWorkOrderForTarget_complete_generalTarget_priorityResult() { | 172 test_createWorkOrderForTarget_complete_generalTarget_priorityResult() { |
| 173 _createWorkOrderForTarget(true, false, true); | 173 _createWorkOrderForTarget(true, false, true); |
| (...skipping 98 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 272 expect(context.getCacheEntry(target).getValue(resultA), 10); | 272 expect(context.getCacheEntry(target).getValue(resultA), 10); |
| 273 expect(context.getCacheEntry(target).getValue(resultB), -2); | 273 expect(context.getCacheEntry(target).getValue(resultB), -2); |
| 274 // compute resultB | 274 // compute resultB |
| 275 expect(analysisDriver.performAnalysisTask(), true); | 275 expect(analysisDriver.performAnalysisTask(), true); |
| 276 expect(context.getCacheEntry(target).getValue(resultA), 10); | 276 expect(context.getCacheEntry(target).getValue(resultA), 10); |
| 277 expect(context.getCacheEntry(target).getValue(resultB), 20); | 277 expect(context.getCacheEntry(target).getValue(resultB), 20); |
| 278 // done | 278 // done |
| 279 expect(analysisDriver.performAnalysisTask(), false); | 279 expect(analysisDriver.performAnalysisTask(), false); |
| 280 } | 280 } |
| 281 | 281 |
| 282 test_performAnalysisTask_recordMemento() { | |
| 283 AnalysisTarget target = new TestSource(); | |
| 284 ResultDescriptor result = new ResultDescriptor('result', -1); | |
| 285 // configure tasks | |
| 286 TestAnalysisTask task; | |
| 287 TaskDescriptor descriptor = new TaskDescriptor( | |
| 288 'task', (context, target) => task, (target) => {}, [result]); | |
| 289 task = new TestAnalysisTask(context, target, | |
| 290 descriptor: descriptor, | |
| 291 memento: 'my mem', | |
| 292 results: [result], | |
| 293 value: 10); | |
| 294 taskManager.addTaskDescriptor(descriptor); | |
| 295 context.explicitTargets.add(target); | |
| 296 taskManager.addGeneralResult(result); | |
| 297 // prepare work order | |
| 298 expect(analysisDriver.performAnalysisTask(), true); | |
| 299 expect(context.getCacheEntry(target).getValue(result), -1); | |
| 300 // compute result | |
| 301 expect(analysisDriver.performAnalysisTask(), true); | |
| 302 expect(context.getCacheEntry(target).getValue(result), 10); | |
| 303 expect(context.getCacheEntry(target).getMemento(result), 'my mem'); | |
| 304 // done | |
| 305 expect(analysisDriver.performAnalysisTask(), false); | |
| 306 } | |
| 307 | |
| 308 test_performWorkItem_exceptionInTask() { | 282 test_performWorkItem_exceptionInTask() { |
| 309 AnalysisTarget target = new TestSource(); | 283 AnalysisTarget target = new TestSource(); |
| 310 ResultDescriptor result = new ResultDescriptor('result', null); | 284 ResultDescriptor result = new ResultDescriptor('result', null); |
| 311 CaughtException exception = | 285 CaughtException exception = |
| 312 new CaughtException(new AnalysisException(), null); | 286 new CaughtException(new AnalysisException(), null); |
| 313 TestAnalysisTask task; | 287 TestAnalysisTask task; |
| 314 TaskDescriptor descriptor = new TaskDescriptor( | 288 TaskDescriptor descriptor = new TaskDescriptor( |
| 315 'task', (context, target) => task, (target) => {}, [result]); | 289 'task', (context, target) => task, (target) => {}, [result]); |
| 316 task = new TestAnalysisTask(context, target, | 290 task = new TestAnalysisTask(context, target, |
| 317 descriptor: descriptor, exception: exception); | 291 descriptor: descriptor, exception: exception); |
| 318 WorkItem item = new WorkItem(context, target, descriptor, null); | 292 WorkItem item = new WorkItem(context, target, descriptor); |
| 319 | 293 |
| 320 analysisDriver.performWorkItem(item); | 294 analysisDriver.performWorkItem(item); |
| 321 CacheEntry targetEntry = context.getCacheEntry(item.target); | 295 CacheEntry targetEntry = context.getCacheEntry(item.target); |
| 322 expect(targetEntry.exception, exception); | 296 expect(targetEntry.exception, exception); |
| 323 expect(targetEntry.getState(result), CacheState.ERROR); | 297 expect(targetEntry.getState(result), CacheState.ERROR); |
| 324 } | 298 } |
| 325 | 299 |
| 326 test_performWorkItem_noException() { | 300 test_performWorkItem_noException() { |
| 327 AnalysisTarget target = new TestSource(); | 301 AnalysisTarget target = new TestSource(); |
| 328 ResultDescriptor result = new ResultDescriptor('result', null); | 302 ResultDescriptor result = new ResultDescriptor('result', null); |
| 329 TestAnalysisTask task; | 303 TestAnalysisTask task; |
| 330 TaskDescriptor descriptor = new TaskDescriptor( | 304 TaskDescriptor descriptor = new TaskDescriptor( |
| 331 'task', (context, target) => task, (target) => {}, [result]); | 305 'task', (context, target) => task, (target) => {}, [result]); |
| 332 task = new TestAnalysisTask(context, target, descriptor: descriptor); | 306 task = new TestAnalysisTask(context, target, descriptor: descriptor); |
| 333 WorkItem item = new WorkItem(context, target, descriptor, null); | 307 WorkItem item = new WorkItem(context, target, descriptor); |
| 334 | 308 |
| 335 analysisDriver.performWorkItem(item); | 309 analysisDriver.performWorkItem(item); |
| 336 CacheEntry targetEntry = context.getCacheEntry(item.target); | 310 CacheEntry targetEntry = context.getCacheEntry(item.target); |
| 337 expect(targetEntry.exception, isNull); | 311 expect(targetEntry.exception, isNull); |
| 338 expect(targetEntry.getState(result), CacheState.VALID); | 312 expect(targetEntry.getState(result), CacheState.VALID); |
| 339 } | 313 } |
| 340 | 314 |
| 341 test_performWorkItem_preExistingException() { | 315 test_performWorkItem_preExistingException() { |
| 342 AnalysisTarget target = new TestSource(); | 316 AnalysisTarget target = new TestSource(); |
| 343 ResultDescriptor result = new ResultDescriptor('result', null); | 317 ResultDescriptor result = new ResultDescriptor('result', null); |
| 344 TaskDescriptor descriptor = new TaskDescriptor('task', | 318 TaskDescriptor descriptor = new TaskDescriptor('task', |
| 345 (context, target) => new TestAnalysisTask(context, target), | 319 (context, target) => new TestAnalysisTask(context, target), |
| 346 (target) => {}, [result]); | 320 (target) => {}, [result]); |
| 347 CaughtException exception = | 321 CaughtException exception = |
| 348 new CaughtException(new AnalysisException(), null); | 322 new CaughtException(new AnalysisException(), null); |
| 349 WorkItem item = new WorkItem(context, target, descriptor, null); | 323 WorkItem item = new WorkItem(context, target, descriptor); |
| 350 item.exception = exception; | 324 item.exception = exception; |
| 351 | 325 |
| 352 analysisDriver.performWorkItem(item); | 326 analysisDriver.performWorkItem(item); |
| 353 CacheEntry targetEntry = context.getCacheEntry(item.target); | 327 CacheEntry targetEntry = context.getCacheEntry(item.target); |
| 354 expect(targetEntry.exception, exception); | 328 expect(targetEntry.exception, exception); |
| 355 expect(targetEntry.getState(result), CacheState.ERROR); | 329 expect(targetEntry.getState(result), CacheState.ERROR); |
| 356 } | 330 } |
| 357 | 331 |
| 358 test_reset() { | 332 test_reset() { |
| 359 ResultDescriptor inputResult = new ResultDescriptor('input', null); | 333 ResultDescriptor inputResult = new ResultDescriptor('input', null); |
| 360 TaskDescriptor descriptor = new TaskDescriptor('task', | 334 TaskDescriptor descriptor = new TaskDescriptor('task', |
| 361 (context, target) => new TestAnalysisTask(context, target), | 335 (context, target) => new TestAnalysisTask(context, target), |
| 362 (target) => {'one': inputResult.of(target)}, | 336 (target) => {'one': inputResult.of(target)}, |
| 363 [new ResultDescriptor('output', null)]); | 337 [new ResultDescriptor('output', null)]); |
| 364 analysisDriver.currentWorkOrder = | 338 analysisDriver.currentWorkOrder = |
| 365 new WorkOrder(taskManager, new WorkItem(null, null, descriptor, null)); | 339 new WorkOrder(taskManager, new WorkItem(null, null, descriptor)); |
| 366 | 340 |
| 367 analysisDriver.reset(); | 341 analysisDriver.reset(); |
| 368 expect(analysisDriver.currentWorkOrder, isNull); | 342 expect(analysisDriver.currentWorkOrder, isNull); |
| 369 } | 343 } |
| 370 | 344 |
| 371 /** | 345 /** |
| 372 * [complete] is `true` if the value of the result has already been computed. | 346 * [complete] is `true` if the value of the result has already been computed. |
| 373 * [priorityTarget] is `true` if the target is in the list of priority | 347 * [priorityTarget] is `true` if the target is in the list of priority |
| 374 * targets. | 348 * targets. |
| 375 * [priorityResult] is `true` if the result should only be computed for | 349 * [priorityResult] is `true` if the result should only be computed for |
| (...skipping 12 matching lines...) Expand all Loading... |
| 388 taskManager.addGeneralResult(result); | 362 taskManager.addGeneralResult(result); |
| 389 } | 363 } |
| 390 taskManager.addTaskDescriptor(descriptor); | 364 taskManager.addTaskDescriptor(descriptor); |
| 391 if (priorityTarget) { | 365 if (priorityTarget) { |
| 392 context.priorityTargets.add(target); | 366 context.priorityTargets.add(target); |
| 393 } else { | 367 } else { |
| 394 context.explicitTargets.add(target); | 368 context.explicitTargets.add(target); |
| 395 } | 369 } |
| 396 if (complete) { | 370 if (complete) { |
| 397 context.getCacheEntry(target).setValue( | 371 context.getCacheEntry(target).setValue( |
| 398 result, '', TargetedResult.EMPTY_LIST, null); | 372 result, '', TargetedResult.EMPTY_LIST); |
| 399 } else { | 373 } else { |
| 400 context.getCacheEntry(target).setState(result, CacheState.INVALID); | 374 context.getCacheEntry(target).setState(result, CacheState.INVALID); |
| 401 } | 375 } |
| 402 | 376 |
| 403 WorkOrder workOrder = | 377 WorkOrder workOrder = |
| 404 analysisDriver.createWorkOrderForTarget(target, priorityTarget); | 378 analysisDriver.createWorkOrderForTarget(target, priorityTarget); |
| 405 if (complete) { | 379 if (complete) { |
| 406 expect(workOrder, isNull); | 380 expect(workOrder, isNull); |
| 407 } else if (priorityResult) { | 381 } else if (priorityResult) { |
| 408 expect(workOrder, priorityTarget ? isNotNull : isNull); | 382 expect(workOrder, priorityTarget ? isNotNull : isNull); |
| 409 } else { | 383 } else { |
| 410 expect(workOrder, isNotNull); | 384 expect(workOrder, isNotNull); |
| 411 } | 385 } |
| 412 } | 386 } |
| 413 } | 387 } |
| 414 | 388 |
| 415 @reflectiveTest | 389 @reflectiveTest |
| 416 class WorkItemTest extends EngineTestCase { | 390 class WorkItemTest extends EngineTestCase { |
| 417 test_buildTask_complete() { | 391 test_buildTask_complete() { |
| 418 AnalysisContext context = new AnalysisContextImpl(); | 392 AnalysisContext context = new AnalysisContextImpl(); |
| 419 AnalysisTarget target = new TestSource(); | 393 AnalysisTarget target = new TestSource(); |
| 420 TaskDescriptor descriptor = new TaskDescriptor('task', | 394 TaskDescriptor descriptor = new TaskDescriptor('task', |
| 421 (context, target) => new TestAnalysisTask(context, target), | 395 (context, target) => new TestAnalysisTask(context, target), |
| 422 (target) => {}, [new ResultDescriptor('output', null)]); | 396 (target) => {}, [new ResultDescriptor('output', null)]); |
| 423 Object memento = new Object(); | 397 WorkItem item = new WorkItem(context, target, descriptor); |
| 424 WorkItem item = new WorkItem(context, target, descriptor, memento); | |
| 425 AnalysisTask task = item.buildTask(); | 398 AnalysisTask task = item.buildTask(); |
| 426 expect(task, isNotNull); | 399 expect(task, isNotNull); |
| 427 expect(task.inputMemento, memento); | |
| 428 } | 400 } |
| 429 | 401 |
| 430 test_buildTask_incomplete() { | 402 test_buildTask_incomplete() { |
| 431 AnalysisContext context = new AnalysisContextImpl(); | 403 AnalysisContext context = new AnalysisContextImpl(); |
| 432 AnalysisTarget target = new TestSource(); | 404 AnalysisTarget target = new TestSource(); |
| 433 ResultDescriptor inputResult = new ResultDescriptor('input', null); | 405 ResultDescriptor inputResult = new ResultDescriptor('input', null); |
| 434 List<ResultDescriptor> outputResults = | 406 List<ResultDescriptor> outputResults = |
| 435 <ResultDescriptor>[new ResultDescriptor('output', null)]; | 407 <ResultDescriptor>[new ResultDescriptor('output', null)]; |
| 436 TaskDescriptor descriptor = new TaskDescriptor('task', (context, target) => | 408 TaskDescriptor descriptor = new TaskDescriptor('task', (context, target) => |
| 437 new TestAnalysisTask(context, target, results: outputResults), | 409 new TestAnalysisTask(context, target, results: outputResults), |
| 438 (target) => {'one': inputResult.of(target)}, outputResults); | 410 (target) => {'one': inputResult.of(target)}, outputResults); |
| 439 WorkItem item = new WorkItem(context, target, descriptor, null); | 411 WorkItem item = new WorkItem(context, target, descriptor); |
| 440 expect(() => item.buildTask(), throwsStateError); | 412 expect(() => item.buildTask(), throwsStateError); |
| 441 } | 413 } |
| 442 | 414 |
| 443 test_create() { | 415 test_create() { |
| 444 AnalysisContext context = new AnalysisContextImpl(); | 416 AnalysisContext context = new AnalysisContextImpl(); |
| 445 AnalysisTarget target = new TestSource(); | 417 AnalysisTarget target = new TestSource(); |
| 446 Object memento = new Object(); | |
| 447 TaskDescriptor descriptor = new TaskDescriptor( | 418 TaskDescriptor descriptor = new TaskDescriptor( |
| 448 'task', null, (target) => {}, [new ResultDescriptor('result', null)]); | 419 'task', null, (target) => {}, [new ResultDescriptor('result', null)]); |
| 449 WorkItem item = new WorkItem(context, target, descriptor, memento); | 420 WorkItem item = new WorkItem(context, target, descriptor); |
| 450 expect(item, isNotNull); | 421 expect(item, isNotNull); |
| 451 expect(item.context, context); | 422 expect(item.context, context); |
| 452 expect(item.descriptor, descriptor); | 423 expect(item.descriptor, descriptor); |
| 453 expect(item.inputMemento, memento); | |
| 454 expect(item.target, target); | 424 expect(item.target, target); |
| 455 } | 425 } |
| 456 | 426 |
| 457 test_gatherInputs_complete() { | 427 test_gatherInputs_complete() { |
| 458 TaskManager manager = new TaskManager(); | 428 TaskManager manager = new TaskManager(); |
| 459 AnalysisContext context = new AnalysisContextImpl(); | 429 AnalysisContext context = new AnalysisContextImpl(); |
| 460 AnalysisTarget target = new TestSource(); | 430 AnalysisTarget target = new TestSource(); |
| 461 TaskDescriptor descriptor = new TaskDescriptor('task', | 431 TaskDescriptor descriptor = new TaskDescriptor('task', |
| 462 (context, target) => new TestAnalysisTask(context, target), | 432 (context, target) => new TestAnalysisTask(context, target), |
| 463 (target) => {}, [new ResultDescriptor('output', null)]); | 433 (target) => {}, [new ResultDescriptor('output', null)]); |
| 464 WorkItem item = new WorkItem(context, target, descriptor, null); | 434 WorkItem item = new WorkItem(context, target, descriptor); |
| 465 WorkItem result = item.gatherInputs(manager); | 435 WorkItem result = item.gatherInputs(manager); |
| 466 expect(result, isNull); | 436 expect(result, isNull); |
| 467 expect(item.exception, isNull); | 437 expect(item.exception, isNull); |
| 468 } | 438 } |
| 469 | 439 |
| 470 test_gatherInputs_incomplete() { | 440 test_gatherInputs_incomplete() { |
| 471 TaskManager manager = new TaskManager(); | 441 TaskManager manager = new TaskManager(); |
| 472 AnalysisContextImpl context = new AnalysisContextImpl(); | 442 AnalysisContextImpl context = new AnalysisContextImpl(); |
| 473 AnalysisTarget target = new TestSource(); | 443 AnalysisTarget target = new TestSource(); |
| 474 ResultDescriptor resultA = new ResultDescriptor('resultA', null); | 444 ResultDescriptor resultA = new ResultDescriptor('resultA', null); |
| 475 ResultDescriptor resultB = new ResultDescriptor('resultB', null); | 445 ResultDescriptor resultB = new ResultDescriptor('resultB', null); |
| 476 // prepare tasks | 446 // prepare tasks |
| 477 TaskDescriptor task1 = new TaskDescriptor('task', (context, target) => | 447 TaskDescriptor task1 = new TaskDescriptor('task', (context, target) => |
| 478 new TestAnalysisTask(context, target, results: [resultA]), | 448 new TestAnalysisTask(context, target, results: [resultA]), |
| 479 (target) => {}, [resultA]); | 449 (target) => {}, [resultA]); |
| 480 TaskDescriptor task2 = new TaskDescriptor('task', | 450 TaskDescriptor task2 = new TaskDescriptor('task', |
| 481 (context, target) => new TestAnalysisTask(context, target), | 451 (context, target) => new TestAnalysisTask(context, target), |
| 482 (target) => {'one': resultA.of(target)}, [resultB]); | 452 (target) => {'one': resultA.of(target)}, [resultB]); |
| 483 manager.addTaskDescriptor(task1); | 453 manager.addTaskDescriptor(task1); |
| 484 manager.addTaskDescriptor(task2); | 454 manager.addTaskDescriptor(task2); |
| 485 // configure memento for "resultA" | |
| 486 dynamic memento = 'main() {}'; | |
| 487 { | |
| 488 CacheEntry cacheEntry = context.getCacheEntry(target); | |
| 489 cacheEntry.setValue(resultA, null, TargetedResult.EMPTY_LIST, memento); | |
| 490 cacheEntry.setState(resultA, CacheState.INVALID); | |
| 491 } | |
| 492 // gather inputs | 455 // gather inputs |
| 493 WorkItem item = new WorkItem(context, target, task2, null); | 456 WorkItem item = new WorkItem(context, target, task2); |
| 494 WorkItem inputItem = item.gatherInputs(manager); | 457 WorkItem inputItem = item.gatherInputs(manager); |
| 495 expect(inputItem, isNotNull); | 458 expect(inputItem, isNotNull); |
| 496 expect(inputItem.inputMemento, memento); | |
| 497 } | 459 } |
| 498 | 460 |
| 499 test_gatherInputs_invalid() { | 461 test_gatherInputs_invalid() { |
| 500 TaskManager manager = new TaskManager(); | 462 TaskManager manager = new TaskManager(); |
| 501 AnalysisContext context = new AnalysisContextImpl(); | 463 AnalysisContext context = new AnalysisContextImpl(); |
| 502 AnalysisTarget target = new TestSource(); | 464 AnalysisTarget target = new TestSource(); |
| 503 ResultDescriptor inputResult = new ResultDescriptor('input', null); | 465 ResultDescriptor inputResult = new ResultDescriptor('input', null); |
| 504 TaskDescriptor descriptor = new TaskDescriptor('task', | 466 TaskDescriptor descriptor = new TaskDescriptor('task', |
| 505 (context, target) => new TestAnalysisTask(context, target), | 467 (context, target) => new TestAnalysisTask(context, target), |
| 506 (target) => {'one': inputResult.of(target)}, | 468 (target) => {'one': inputResult.of(target)}, |
| 507 [new ResultDescriptor('output', null)]); | 469 [new ResultDescriptor('output', null)]); |
| 508 WorkItem item = new WorkItem(context, target, descriptor, null); | 470 WorkItem item = new WorkItem(context, target, descriptor); |
| 509 WorkItem result = item.gatherInputs(manager); | 471 WorkItem result = item.gatherInputs(manager); |
| 510 expect(result, isNull); | 472 expect(result, isNull); |
| 511 expect(item.exception, isNotNull); | 473 expect(item.exception, isNotNull); |
| 512 } | 474 } |
| 513 } | 475 } |
| 514 | 476 |
| 515 @reflectiveTest | 477 @reflectiveTest |
| 516 class WorkOrderTest extends EngineTestCase { | 478 class WorkOrderTest extends EngineTestCase { |
| 517 test_create() { | 479 test_create() { |
| 518 TaskManager manager = new TaskManager(); | 480 TaskManager manager = new TaskManager(); |
| 519 TaskDescriptor descriptor = new TaskDescriptor( | 481 TaskDescriptor descriptor = new TaskDescriptor( |
| 520 'task', null, (_) => {}, [new ResultDescriptor('result', null)]); | 482 'task', null, (_) => {}, [new ResultDescriptor('result', null)]); |
| 521 WorkOrder order = | 483 WorkOrder order = |
| 522 new WorkOrder(manager, new WorkItem(null, null, descriptor, null)); | 484 new WorkOrder(manager, new WorkItem(null, null, descriptor)); |
| 523 expect(order, isNotNull); | 485 expect(order, isNotNull); |
| 524 expect(order.currentItem, isNull); | 486 expect(order.currentItem, isNull); |
| 525 expect(order.pendingItems, hasLength(1)); | 487 expect(order.pendingItems, hasLength(1)); |
| 526 expect(order.taskManager, manager); | 488 expect(order.taskManager, manager); |
| 527 } | 489 } |
| 528 | 490 |
| 529 test_moveNext() { | 491 test_moveNext() { |
| 530 TaskManager manager = new TaskManager(); | 492 TaskManager manager = new TaskManager(); |
| 531 TaskDescriptor descriptor = new TaskDescriptor( | 493 TaskDescriptor descriptor = new TaskDescriptor( |
| 532 'task', null, (_) => {}, [new ResultDescriptor('result', null)]); | 494 'task', null, (_) => {}, [new ResultDescriptor('result', null)]); |
| 533 WorkItem workItem = new WorkItem(null, null, descriptor, null); | 495 WorkItem workItem = new WorkItem(null, null, descriptor); |
| 534 WorkOrder order = new WorkOrder(manager, workItem); | 496 WorkOrder order = new WorkOrder(manager, workItem); |
| 535 // "item" has no child items | 497 // "item" has no child items |
| 536 expect(order.moveNext(), isTrue); | 498 expect(order.moveNext(), isTrue); |
| 537 expect(order.current, workItem); | 499 expect(order.current, workItem); |
| 538 // done | 500 // done |
| 539 expect(order.moveNext(), isFalse); | 501 expect(order.moveNext(), isFalse); |
| 540 expect(order.current, isNull); | 502 expect(order.current, isNull); |
| 541 } | 503 } |
| 542 } | 504 } |
| 543 | 505 |
| 544 /** | 506 /** |
| 545 * An [AnalysisContextImpl] which allows to set explicit and implicit targets | 507 * An [AnalysisContextImpl] which allows to set explicit and implicit targets |
| 546 * directly. | 508 * directly. |
| 547 */ | 509 */ |
| 548 class _TestContext extends AnalysisContextImpl { | 510 class _TestContext extends AnalysisContextImpl { |
| 549 @override | 511 @override |
| 550 List<AnalysisTarget> explicitTargets = <AnalysisTarget>[]; | 512 List<AnalysisTarget> explicitTargets = <AnalysisTarget>[]; |
| 551 | 513 |
| 552 @override | 514 @override |
| 553 List<AnalysisTarget> priorityTargets = <AnalysisTarget>[]; | 515 List<AnalysisTarget> priorityTargets = <AnalysisTarget>[]; |
| 554 } | 516 } |
| OLD | NEW |