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

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

Issue 1120313004: Get memento objects from tasks, remember in cache and pass back to tasks. (Closed) Base URL: https://dart.googlecode.com/svn/branches/bleeding_edge/dart
Patch Set: Created 5 years, 7 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch | Annotate | Revision Log
OLDNEW
1 // Copyright (c) 2015, the Dart project authors. Please see the AUTHORS file 1 // Copyright (c) 2015, the Dart project authors. Please see the AUTHORS file
2 // for details. All rights reserved. Use of this source code is governed by a 2 // for details. All rights reserved. Use of this source code is governed by a
3 // BSD-style license that can be found in the LICENSE file. 3 // BSD-style license that can be found in the LICENSE file.
4 4
5 library test.src.task.driver_test; 5 library test.src.task.driver_test;
6 6
7 import 'package:analyzer/src/context/cache.dart'; 7 import 'package:analyzer/src/context/cache.dart';
8 import 'package:analyzer/src/context/context.dart'; 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 261 matching lines...) Expand 10 before | Expand all | Expand 10 after
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
282 test_performWorkItem_exceptionInTask() { 308 test_performWorkItem_exceptionInTask() {
283 AnalysisTarget target = new TestSource(); 309 AnalysisTarget target = new TestSource();
284 ResultDescriptor result = new ResultDescriptor('result', null); 310 ResultDescriptor result = new ResultDescriptor('result', null);
285 CaughtException exception = 311 CaughtException exception =
286 new CaughtException(new AnalysisException(), null); 312 new CaughtException(new AnalysisException(), null);
287 TestAnalysisTask task; 313 TestAnalysisTask task;
288 TaskDescriptor descriptor = new TaskDescriptor( 314 TaskDescriptor descriptor = new TaskDescriptor(
289 'task', (context, target) => task, (target) => {}, [result]); 315 'task', (context, target) => task, (target) => {}, [result]);
290 task = new TestAnalysisTask(context, target, 316 task = new TestAnalysisTask(context, target,
291 descriptor: descriptor, exception: exception); 317 descriptor: descriptor, exception: exception);
292 WorkItem item = new WorkItem(context, target, descriptor); 318 WorkItem item = new WorkItem(context, target, descriptor, null);
293 319
294 analysisDriver.performWorkItem(item); 320 analysisDriver.performWorkItem(item);
295 CacheEntry targetEntry = context.getCacheEntry(item.target); 321 CacheEntry targetEntry = context.getCacheEntry(item.target);
296 expect(targetEntry.exception, exception); 322 expect(targetEntry.exception, exception);
297 expect(targetEntry.getState(result), CacheState.ERROR); 323 expect(targetEntry.getState(result), CacheState.ERROR);
298 } 324 }
299 325
300 test_performWorkItem_noException() { 326 test_performWorkItem_noException() {
301 AnalysisTarget target = new TestSource(); 327 AnalysisTarget target = new TestSource();
302 ResultDescriptor result = new ResultDescriptor('result', null); 328 ResultDescriptor result = new ResultDescriptor('result', null);
303 TestAnalysisTask task; 329 TestAnalysisTask task;
304 TaskDescriptor descriptor = new TaskDescriptor( 330 TaskDescriptor descriptor = new TaskDescriptor(
305 'task', (context, target) => task, (target) => {}, [result]); 331 'task', (context, target) => task, (target) => {}, [result]);
306 task = new TestAnalysisTask(context, target, descriptor: descriptor); 332 task = new TestAnalysisTask(context, target, descriptor: descriptor);
307 WorkItem item = new WorkItem(context, target, descriptor); 333 WorkItem item = new WorkItem(context, target, descriptor, null);
308 334
309 analysisDriver.performWorkItem(item); 335 analysisDriver.performWorkItem(item);
310 CacheEntry targetEntry = context.getCacheEntry(item.target); 336 CacheEntry targetEntry = context.getCacheEntry(item.target);
311 expect(targetEntry.exception, isNull); 337 expect(targetEntry.exception, isNull);
312 expect(targetEntry.getState(result), CacheState.VALID); 338 expect(targetEntry.getState(result), CacheState.VALID);
313 } 339 }
314 340
315 test_performWorkItem_preExistingException() { 341 test_performWorkItem_preExistingException() {
316 AnalysisTarget target = new TestSource(); 342 AnalysisTarget target = new TestSource();
317 ResultDescriptor result = new ResultDescriptor('result', null); 343 ResultDescriptor result = new ResultDescriptor('result', null);
318 TaskDescriptor descriptor = new TaskDescriptor('task', 344 TaskDescriptor descriptor = new TaskDescriptor('task',
319 (context, target) => new TestAnalysisTask(context, target), 345 (context, target) => new TestAnalysisTask(context, target),
320 (target) => {}, [result]); 346 (target) => {}, [result]);
321 CaughtException exception = 347 CaughtException exception =
322 new CaughtException(new AnalysisException(), null); 348 new CaughtException(new AnalysisException(), null);
323 WorkItem item = new WorkItem(context, target, descriptor); 349 WorkItem item = new WorkItem(context, target, descriptor, null);
324 item.exception = exception; 350 item.exception = exception;
325 351
326 analysisDriver.performWorkItem(item); 352 analysisDriver.performWorkItem(item);
327 CacheEntry targetEntry = context.getCacheEntry(item.target); 353 CacheEntry targetEntry = context.getCacheEntry(item.target);
328 expect(targetEntry.exception, exception); 354 expect(targetEntry.exception, exception);
329 expect(targetEntry.getState(result), CacheState.ERROR); 355 expect(targetEntry.getState(result), CacheState.ERROR);
330 } 356 }
331 357
332 test_reset() { 358 test_reset() {
333 ResultDescriptor inputResult = new ResultDescriptor('input', null); 359 ResultDescriptor inputResult = new ResultDescriptor('input', null);
334 TaskDescriptor descriptor = new TaskDescriptor('task', 360 TaskDescriptor descriptor = new TaskDescriptor('task',
335 (context, target) => new TestAnalysisTask(context, target), 361 (context, target) => new TestAnalysisTask(context, target),
336 (target) => {'one': inputResult.of(target)}, 362 (target) => {'one': inputResult.of(target)},
337 [new ResultDescriptor('output', null)]); 363 [new ResultDescriptor('output', null)]);
338 analysisDriver.currentWorkOrder = 364 analysisDriver.currentWorkOrder =
339 new WorkOrder(taskManager, new WorkItem(null, null, descriptor)); 365 new WorkOrder(taskManager, new WorkItem(null, null, descriptor, null));
340 366
341 analysisDriver.reset(); 367 analysisDriver.reset();
342 expect(analysisDriver.currentWorkOrder, isNull); 368 expect(analysisDriver.currentWorkOrder, isNull);
343 } 369 }
344 370
345 /** 371 /**
346 * [complete] is `true` if the value of the result has already been computed. 372 * [complete] is `true` if the value of the result has already been computed.
347 * [priorityTarget] is `true` if the target is in the list of priority 373 * [priorityTarget] is `true` if the target is in the list of priority
348 * targets. 374 * targets.
349 * [priorityResult] is `true` if the result should only be computed for 375 * [priorityResult] is `true` if the result should only be computed for
(...skipping 37 matching lines...) Expand 10 before | Expand all | Expand 10 after
387 } 413 }
388 414
389 @reflectiveTest 415 @reflectiveTest
390 class WorkItemTest extends EngineTestCase { 416 class WorkItemTest extends EngineTestCase {
391 test_buildTask_complete() { 417 test_buildTask_complete() {
392 AnalysisContext context = new AnalysisContextImpl(); 418 AnalysisContext context = new AnalysisContextImpl();
393 AnalysisTarget target = new TestSource(); 419 AnalysisTarget target = new TestSource();
394 TaskDescriptor descriptor = new TaskDescriptor('task', 420 TaskDescriptor descriptor = new TaskDescriptor('task',
395 (context, target) => new TestAnalysisTask(context, target), 421 (context, target) => new TestAnalysisTask(context, target),
396 (target) => {}, [new ResultDescriptor('output', null)]); 422 (target) => {}, [new ResultDescriptor('output', null)]);
397 WorkItem item = new WorkItem(context, target, descriptor); 423 Object memento = new Object();
424 WorkItem item = new WorkItem(context, target, descriptor, memento);
398 AnalysisTask task = item.buildTask(); 425 AnalysisTask task = item.buildTask();
399 expect(task, isNotNull); 426 expect(task, isNotNull);
427 expect(task.inputMemento, memento);
400 } 428 }
401 429
402 test_buildTask_incomplete() { 430 test_buildTask_incomplete() {
403 AnalysisContext context = new AnalysisContextImpl(); 431 AnalysisContext context = new AnalysisContextImpl();
404 AnalysisTarget target = new TestSource(); 432 AnalysisTarget target = new TestSource();
405 ResultDescriptor inputResult = new ResultDescriptor('input', null); 433 ResultDescriptor inputResult = new ResultDescriptor('input', null);
406 List<ResultDescriptor> outputResults = 434 List<ResultDescriptor> outputResults =
407 <ResultDescriptor>[new ResultDescriptor('output', null)]; 435 <ResultDescriptor>[new ResultDescriptor('output', null)];
408 TaskDescriptor descriptor = new TaskDescriptor('task', (context, target) => 436 TaskDescriptor descriptor = new TaskDescriptor('task', (context, target) =>
409 new TestAnalysisTask(context, target, results: outputResults), 437 new TestAnalysisTask(context, target, results: outputResults),
410 (target) => {'one': inputResult.of(target)}, outputResults); 438 (target) => {'one': inputResult.of(target)}, outputResults);
411 WorkItem item = new WorkItem(context, target, descriptor); 439 WorkItem item = new WorkItem(context, target, descriptor, null);
412 expect(() => item.buildTask(), throwsStateError); 440 expect(() => item.buildTask(), throwsStateError);
413 } 441 }
414 442
415 test_create() { 443 test_create() {
416 AnalysisContext context = new AnalysisContextImpl(); 444 AnalysisContext context = new AnalysisContextImpl();
417 AnalysisTarget target = new TestSource(); 445 AnalysisTarget target = new TestSource();
446 Object memento = new Object();
418 TaskDescriptor descriptor = new TaskDescriptor( 447 TaskDescriptor descriptor = new TaskDescriptor(
419 'task', null, (target) => {}, [new ResultDescriptor('result', null)]); 448 'task', null, (target) => {}, [new ResultDescriptor('result', null)]);
420 WorkItem item = new WorkItem(context, target, descriptor); 449 WorkItem item = new WorkItem(context, target, descriptor, memento);
421 expect(item, isNotNull); 450 expect(item, isNotNull);
422 expect(item.context, context); 451 expect(item.context, context);
423 expect(item.descriptor, descriptor); 452 expect(item.descriptor, descriptor);
453 expect(item.memento, memento);
424 expect(item.target, target); 454 expect(item.target, target);
425 } 455 }
426 456
427 test_gatherInputs_complete() { 457 test_gatherInputs_complete() {
428 TaskManager manager = new TaskManager(); 458 TaskManager manager = new TaskManager();
429 AnalysisContext context = new AnalysisContextImpl(); 459 AnalysisContext context = new AnalysisContextImpl();
430 AnalysisTarget target = new TestSource(); 460 AnalysisTarget target = new TestSource();
431 TaskDescriptor descriptor = new TaskDescriptor('task', 461 TaskDescriptor descriptor = new TaskDescriptor('task',
432 (context, target) => new TestAnalysisTask(context, target), 462 (context, target) => new TestAnalysisTask(context, target),
433 (target) => {}, [new ResultDescriptor('output', null)]); 463 (target) => {}, [new ResultDescriptor('output', null)]);
434 WorkItem item = new WorkItem(context, target, descriptor); 464 WorkItem item = new WorkItem(context, target, descriptor, null);
435 WorkItem result = item.gatherInputs(manager); 465 WorkItem result = item.gatherInputs(manager);
436 expect(result, isNull); 466 expect(result, isNull);
437 expect(item.exception, isNull); 467 expect(item.exception, isNull);
438 } 468 }
439 469
440 test_gatherInputs_incomplete() { 470 test_gatherInputs_incomplete() {
441 TaskManager manager = new TaskManager(); 471 TaskManager manager = new TaskManager();
442 AnalysisContext context = new AnalysisContextImpl(); 472 AnalysisContextImpl context = new AnalysisContextImpl();
443 AnalysisTarget target = new TestSource(); 473 AnalysisTarget target = new TestSource();
444 ResultDescriptor resultA = new ResultDescriptor('resultA', null); 474 ResultDescriptor resultA = new ResultDescriptor('resultA', null);
445 ResultDescriptor resultB = new ResultDescriptor('resultB', null); 475 ResultDescriptor resultB = new ResultDescriptor('resultB', null);
476 // prepare tasks
446 TaskDescriptor task1 = new TaskDescriptor('task', (context, target) => 477 TaskDescriptor task1 = new TaskDescriptor('task', (context, target) =>
447 new TestAnalysisTask(context, target, results: [resultA]), 478 new TestAnalysisTask(context, target, results: [resultA]),
448 (target) => {}, [resultA]); 479 (target) => {}, [resultA]);
449 TaskDescriptor task2 = new TaskDescriptor('task', 480 TaskDescriptor task2 = new TaskDescriptor('task',
450 (context, target) => new TestAnalysisTask(context, target), 481 (context, target) => new TestAnalysisTask(context, target),
451 (target) => {'one': resultA.of(target)}, [resultB]); 482 (target) => {'one': resultA.of(target)}, [resultB]);
452 manager.addTaskDescriptor(task1); 483 manager.addTaskDescriptor(task1);
453 manager.addTaskDescriptor(task2); 484 manager.addTaskDescriptor(task2);
454 WorkItem item = new WorkItem(context, target, task2); 485 // configure memento for "resultA"
455 expect(item.gatherInputs(manager), isNotNull); 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
493 WorkItem item = new WorkItem(context, target, task2, null);
494 WorkItem inputItem = item.gatherInputs(manager);
495 expect(inputItem, isNotNull);
496 expect(inputItem.memento, memento);
456 } 497 }
457 498
458 test_gatherInputs_invalid() { 499 test_gatherInputs_invalid() {
459 TaskManager manager = new TaskManager(); 500 TaskManager manager = new TaskManager();
460 AnalysisContext context = new AnalysisContextImpl(); 501 AnalysisContext context = new AnalysisContextImpl();
461 AnalysisTarget target = new TestSource(); 502 AnalysisTarget target = new TestSource();
462 ResultDescriptor inputResult = new ResultDescriptor('input', null); 503 ResultDescriptor inputResult = new ResultDescriptor('input', null);
463 TaskDescriptor descriptor = new TaskDescriptor('task', 504 TaskDescriptor descriptor = new TaskDescriptor('task',
464 (context, target) => new TestAnalysisTask(context, target), 505 (context, target) => new TestAnalysisTask(context, target),
465 (target) => {'one': inputResult.of(target)}, 506 (target) => {'one': inputResult.of(target)},
466 [new ResultDescriptor('output', null)]); 507 [new ResultDescriptor('output', null)]);
467 WorkItem item = new WorkItem(context, target, descriptor); 508 WorkItem item = new WorkItem(context, target, descriptor, null);
468 WorkItem result = item.gatherInputs(manager); 509 WorkItem result = item.gatherInputs(manager);
469 expect(result, isNull); 510 expect(result, isNull);
470 expect(item.exception, isNotNull); 511 expect(item.exception, isNotNull);
471 } 512 }
472 } 513 }
473 514
474 @reflectiveTest 515 @reflectiveTest
475 class WorkOrderTest extends EngineTestCase { 516 class WorkOrderTest extends EngineTestCase {
476 test_create() { 517 test_create() {
477 TaskManager manager = new TaskManager(); 518 TaskManager manager = new TaskManager();
478 TaskDescriptor descriptor = new TaskDescriptor( 519 TaskDescriptor descriptor = new TaskDescriptor(
479 'task', null, (_) => {}, [new ResultDescriptor('result', null)]); 520 'task', null, (_) => {}, [new ResultDescriptor('result', null)]);
480 WorkOrder order = 521 WorkOrder order =
481 new WorkOrder(manager, new WorkItem(null, null, descriptor)); 522 new WorkOrder(manager, new WorkItem(null, null, descriptor, null));
482 expect(order, isNotNull); 523 expect(order, isNotNull);
483 expect(order.currentItem, isNull); 524 expect(order.currentItem, isNull);
484 expect(order.pendingItems, hasLength(1)); 525 expect(order.pendingItems, hasLength(1));
485 expect(order.taskManager, manager); 526 expect(order.taskManager, manager);
486 } 527 }
487 528
488 test_moveNext() { 529 test_moveNext() {
489 TaskManager manager = new TaskManager(); 530 TaskManager manager = new TaskManager();
490 TaskDescriptor descriptor = new TaskDescriptor( 531 TaskDescriptor descriptor = new TaskDescriptor(
491 'task', null, (_) => {}, [new ResultDescriptor('result', null)]); 532 'task', null, (_) => {}, [new ResultDescriptor('result', null)]);
492 WorkItem workItem = new WorkItem(null, null, descriptor); 533 WorkItem workItem = new WorkItem(null, null, descriptor, null);
493 WorkOrder order = new WorkOrder(manager, workItem); 534 WorkOrder order = new WorkOrder(manager, workItem);
494 // "item" has no child items 535 // "item" has no child items
495 expect(order.moveNext(), isTrue); 536 expect(order.moveNext(), isTrue);
496 expect(order.current, workItem); 537 expect(order.current, workItem);
497 // done 538 // done
498 expect(order.moveNext(), isFalse); 539 expect(order.moveNext(), isFalse);
499 expect(order.current, isNull); 540 expect(order.current, isNull);
500 } 541 }
501 } 542 }
502 543
503 /** 544 /**
504 * An [AnalysisContextImpl] which allows to set explicit and implicit targets 545 * An [AnalysisContextImpl] which allows to set explicit and implicit targets
505 * directly. 546 * directly.
506 */ 547 */
507 class _TestContext extends AnalysisContextImpl { 548 class _TestContext extends AnalysisContextImpl {
508 @override 549 @override
509 List<AnalysisTarget> explicitTargets = <AnalysisTarget>[]; 550 List<AnalysisTarget> explicitTargets = <AnalysisTarget>[];
510 551
511 @override 552 @override
512 List<AnalysisTarget> priorityTargets = <AnalysisTarget>[]; 553 List<AnalysisTarget> priorityTargets = <AnalysisTarget>[];
513 } 554 }
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698