| 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'; | |
| 9 import 'package:analyzer/src/generated/engine.dart' | 8 import 'package:analyzer/src/generated/engine.dart' |
| 10 hide AnalysisContextImpl, AnalysisTask; | 9 hide |
| 10 AnalysisCache, |
| 11 AnalysisContextImpl, |
| 12 AnalysisTask, |
| 13 UniversalCachePartition, |
| 14 WorkManager; |
| 11 import 'package:analyzer/src/generated/java_engine.dart'; | 15 import 'package:analyzer/src/generated/java_engine.dart'; |
| 12 import 'package:analyzer/src/task/driver.dart'; | 16 import 'package:analyzer/src/task/driver.dart'; |
| 13 import 'package:analyzer/src/task/inputs.dart'; | 17 import 'package:analyzer/src/task/inputs.dart'; |
| 14 import 'package:analyzer/src/task/manager.dart'; | 18 import 'package:analyzer/src/task/manager.dart'; |
| 15 import 'package:analyzer/task/model.dart'; | 19 import 'package:analyzer/task/model.dart'; |
| 20 import 'package:typed_mock/typed_mock.dart'; |
| 16 import 'package:unittest/unittest.dart'; | 21 import 'package:unittest/unittest.dart'; |
| 17 | 22 |
| 18 import '../../generated/test_support.dart'; | 23 import '../../generated/test_support.dart'; |
| 19 import '../../reflective_tests.dart'; | 24 import '../../reflective_tests.dart'; |
| 20 import '../context/abstract_context.dart'; | |
| 21 import 'test_support.dart'; | 25 import 'test_support.dart'; |
| 22 | 26 |
| 23 main() { | 27 main() { |
| 24 groupSep = ' | '; | 28 groupSep = ' | '; |
| 25 runReflectiveTests(AnalysisDriverTest); | 29 runReflectiveTests(AnalysisDriverTest); |
| 26 runReflectiveTests(WorkOrderTest); | 30 runReflectiveTests(WorkOrderTest); |
| 27 runReflectiveTests(WorkItemTest); | 31 runReflectiveTests(WorkItemTest); |
| 28 } | 32 } |
| 29 | 33 |
| 34 class AbstractDriverTest { |
| 35 TaskManager taskManager = new TaskManager(); |
| 36 List<WorkManager> workManagers = <WorkManager>[]; |
| 37 InternalAnalysisContext context = new _InternalAnalysisContextMock(); |
| 38 AnalysisDriver analysisDriver; |
| 39 |
| 40 void setUp() { |
| 41 context = new _InternalAnalysisContextMock(); |
| 42 analysisDriver = new AnalysisDriver(taskManager, workManagers, context); |
| 43 } |
| 44 } |
| 45 |
| 30 @reflectiveTest | 46 @reflectiveTest |
| 31 class AnalysisDriverTest extends AbstractContextTest { | 47 class AnalysisDriverTest extends AbstractDriverTest { |
| 32 AnalysisContextImpl createAnalysisContext() { | 48 WorkManager workManager1 = new _WorkManagerMock(); |
| 33 return new _TestContext(); | 49 WorkManager workManager2 = new _WorkManagerMock(); |
| 50 |
| 51 AnalysisTarget target1 = new TestSource('/1.dart'); |
| 52 AnalysisTarget target2 = new TestSource('/2.dart'); |
| 53 |
| 54 ResultDescriptor result1 = new ResultDescriptor('result1', -1); |
| 55 ResultDescriptor result2 = new ResultDescriptor('result2', -2); |
| 56 |
| 57 TaskDescriptor descriptor1; |
| 58 TaskDescriptor descriptor2; |
| 59 |
| 60 void setUp() { |
| 61 super.setUp(); |
| 62 when(workManager1.getNextResultPriority()) |
| 63 .thenReturn(WorkOrderPriority.NONE); |
| 64 when(workManager2.getNextResultPriority()) |
| 65 .thenReturn(WorkOrderPriority.NONE); |
| 66 |
| 67 workManagers.add(workManager1); |
| 68 workManagers.add(workManager2); |
| 34 } | 69 } |
| 35 | 70 |
| 36 test_computeResult() { | 71 test_computeResult() { |
| 37 AnalysisTarget target = new TestSource(); | 72 AnalysisTarget target = new TestSource(); |
| 38 ResultDescriptor result = new ResultDescriptor('result', null); | 73 ResultDescriptor result = new ResultDescriptor('result', null); |
| 39 TestAnalysisTask task; | 74 TestAnalysisTask task; |
| 40 TaskDescriptor descriptor = new TaskDescriptor( | 75 TaskDescriptor descriptor = new TaskDescriptor( |
| 41 'task', (context, target) => task, (target) => {}, [result]); | 76 'task', (context, target) => task, (target) => {}, [result]); |
| 42 task = new TestAnalysisTask(context, target, descriptor: descriptor); | 77 task = new TestAnalysisTask(context, target, descriptor: descriptor); |
| 43 taskManager.addTaskDescriptor(descriptor); | 78 taskManager.addTaskDescriptor(descriptor); |
| 44 | 79 |
| 45 analysisDriver.computeResult(target, result); | 80 analysisDriver.computeResult(target, result); |
| 46 expect(context.getCacheEntry(target).getValue(result), 1); | 81 expect(context.getCacheEntry(target).getValue(result), 1); |
| 47 } | 82 } |
| 48 | 83 |
| 49 test_create() { | 84 test_create() { |
| 50 expect(analysisDriver, isNotNull); | 85 expect(analysisDriver, isNotNull); |
| 51 expect(analysisDriver.context, context); | 86 expect(analysisDriver.context, context); |
| 52 expect(analysisDriver.currentWorkOrder, isNull); | 87 expect(analysisDriver.currentWorkOrder, isNull); |
| 53 expect(analysisDriver.taskManager, taskManager); | 88 expect(analysisDriver.taskManager, taskManager); |
| 54 } | 89 } |
| 55 | 90 |
| 56 test_createNextWorkOrder_complete() { | 91 test_createNextWorkOrder_highLow() { |
| 57 AnalysisTarget priorityTarget = new TestSource(); | 92 _configureDescriptors12(); |
| 58 AnalysisTarget normalTarget = new TestSource(); | 93 when(workManager1.getNextResultPriority()) |
| 59 ResultDescriptor result = new ResultDescriptor('result', null); | 94 .thenReturn(WorkOrderPriority.PRIORITY); |
| 60 TaskDescriptor descriptor = new TaskDescriptor('task', | 95 when(workManager2.getNextResultPriority()) |
| 61 (context, target) => new TestAnalysisTask(context, target), | 96 .thenReturn(WorkOrderPriority.NORMAL); |
| 62 (target) => {}, [result]); | 97 when(workManager1.getNextResult()) |
| 63 taskManager.addGeneralResult(result); | 98 .thenReturn(new TargetedResult(target1, result1)); |
| 64 taskManager.addTaskDescriptor(descriptor); | 99 WorkOrder workOrder = analysisDriver.createNextWorkOrder(); |
| 65 context.priorityTargets.add(priorityTarget); | 100 expect(workOrder, isNotNull); |
| 66 context.getCacheEntry(priorityTarget).setValue( | 101 expect(workOrder.moveNext(), true); |
| 67 result, '', TargetedResult.EMPTY_LIST); | 102 expect(workOrder.currentItem.target, target1); |
| 68 context.explicitTargets.add(normalTarget); | 103 expect(workOrder.currentItem.descriptor, descriptor1); |
| 69 context.getCacheEntry(priorityTarget).setValue( | 104 } |
| 70 result, '', TargetedResult.EMPTY_LIST); | |
| 71 | 105 |
| 106 test_createNextWorkOrder_lowHigh() { |
| 107 _configureDescriptors12(); |
| 108 when(workManager1.getNextResultPriority()) |
| 109 .thenReturn(WorkOrderPriority.NORMAL); |
| 110 when(workManager2.getNextResultPriority()) |
| 111 .thenReturn(WorkOrderPriority.PRIORITY); |
| 112 when(workManager2.getNextResult()) |
| 113 .thenReturn(new TargetedResult(target1, result1)); |
| 114 WorkOrder workOrder = analysisDriver.createNextWorkOrder(); |
| 115 expect(workOrder, isNotNull); |
| 116 expect(workOrder.moveNext(), true); |
| 117 expect(workOrder.currentItem.target, target1); |
| 118 expect(workOrder.currentItem.descriptor, descriptor1); |
| 119 } |
| 120 |
| 121 test_createNextWorkOrder_none() { |
| 122 _configureDescriptors12(); |
| 123 when(workManager1.getNextResultPriority()) |
| 124 .thenReturn(WorkOrderPriority.NONE); |
| 125 when(workManager2.getNextResultPriority()) |
| 126 .thenReturn(WorkOrderPriority.NONE); |
| 72 expect(analysisDriver.createNextWorkOrder(), isNull); | 127 expect(analysisDriver.createNextWorkOrder(), isNull); |
| 73 } | 128 } |
| 74 | 129 |
| 75 test_createNextWorkOrder_normalTarget() { | |
| 76 AnalysisTarget priorityTarget = new TestSource(); | |
| 77 AnalysisTarget normalTarget = new TestSource(); | |
| 78 ResultDescriptor result = new ResultDescriptor('result', null); | |
| 79 TaskDescriptor descriptor = new TaskDescriptor('task', | |
| 80 (context, target) => new TestAnalysisTask(context, target), | |
| 81 (target) => {}, [result]); | |
| 82 taskManager.addGeneralResult(result); | |
| 83 taskManager.addTaskDescriptor(descriptor); | |
| 84 context.priorityTargets.add(priorityTarget); | |
| 85 context.getCacheEntry(priorityTarget).setValue( | |
| 86 result, '', TargetedResult.EMPTY_LIST); | |
| 87 context.explicitTargets.add(normalTarget); | |
| 88 context.getCacheEntry(normalTarget).setState(result, CacheState.INVALID); | |
| 89 | |
| 90 WorkOrder workOrder = analysisDriver.createNextWorkOrder(); | |
| 91 expect(workOrder, isNotNull); | |
| 92 expect(workOrder.moveNext(), true); | |
| 93 expect(workOrder.currentItem.target, normalTarget); | |
| 94 } | |
| 95 | |
| 96 test_createNextWorkOrder_noTargets() { | |
| 97 ResultDescriptor result = new ResultDescriptor('result', null); | |
| 98 TaskDescriptor descriptor = new TaskDescriptor('task', | |
| 99 (context, target) => new TestAnalysisTask(context, target), | |
| 100 (target) => {}, [result]); | |
| 101 taskManager.addGeneralResult(result); | |
| 102 taskManager.addTaskDescriptor(descriptor); | |
| 103 | |
| 104 expect(analysisDriver.createNextWorkOrder(), isNull); | |
| 105 } | |
| 106 | |
| 107 test_createNextWorkOrder_priorityTarget() { | |
| 108 AnalysisTarget priorityTarget = new TestSource(); | |
| 109 AnalysisTarget normalTarget = new TestSource(); | |
| 110 ResultDescriptor result = new ResultDescriptor('result', null); | |
| 111 TaskDescriptor descriptor = new TaskDescriptor('task', | |
| 112 (context, target) => new TestAnalysisTask(context, target), | |
| 113 (target) => {}, [result]); | |
| 114 taskManager.addGeneralResult(result); | |
| 115 taskManager.addTaskDescriptor(descriptor); | |
| 116 context.priorityTargets.add(priorityTarget); | |
| 117 context.getCacheEntry(priorityTarget).setState(result, CacheState.INVALID); | |
| 118 context.explicitTargets.add(normalTarget); | |
| 119 context.getCacheEntry(normalTarget).setState(result, CacheState.INVALID); | |
| 120 | |
| 121 WorkOrder workOrder = analysisDriver.createNextWorkOrder(); | |
| 122 expect(workOrder, isNotNull); | |
| 123 expect(workOrder.moveNext(), true); | |
| 124 expect(workOrder.currentItem.target, priorityTarget); | |
| 125 } | |
| 126 | |
| 127 test_createWorkOrderForResult_error() { | 130 test_createWorkOrderForResult_error() { |
| 128 AnalysisTarget target = new TestSource(); | 131 AnalysisTarget target = new TestSource(); |
| 129 ResultDescriptor result = new ResultDescriptor('result', null); | 132 ResultDescriptor result = new ResultDescriptor('result', null); |
| 130 CaughtException exception = new CaughtException(null, null); | 133 CaughtException exception = new CaughtException(null, null); |
| 131 context.getCacheEntry(target).setErrorState( | 134 context.getCacheEntry(target).setErrorState( |
| 132 exception, <ResultDescriptor>[result]); | 135 exception, <ResultDescriptor>[result]); |
| 133 | 136 |
| 134 expect(analysisDriver.createWorkOrderForResult(target, result), isNull); | 137 expect(analysisDriver.createWorkOrderForResult(target, result), isNull); |
| 135 } | 138 } |
| 136 | 139 |
| (...skipping 54 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 191 | 194 |
| 192 test_createWorkOrderForTarget_incomplete_priorityTarget_generalResult() { | 195 test_createWorkOrderForTarget_incomplete_priorityTarget_generalResult() { |
| 193 _createWorkOrderForTarget(false, true, false); | 196 _createWorkOrderForTarget(false, true, false); |
| 194 } | 197 } |
| 195 | 198 |
| 196 test_createWorkOrderForTarget_incomplete_priorityTarget_priorityResult() { | 199 test_createWorkOrderForTarget_incomplete_priorityTarget_priorityResult() { |
| 197 _createWorkOrderForTarget(false, true, true); | 200 _createWorkOrderForTarget(false, true, true); |
| 198 } | 201 } |
| 199 | 202 |
| 200 test_performAnalysisTask() { | 203 test_performAnalysisTask() { |
| 201 AnalysisTarget target = new TestSource(); | 204 _configureDescriptors12(); |
| 202 ResultDescriptor result = new ResultDescriptor('result', null); | 205 when(workManager1.getNextResultPriority()).thenReturnList( |
| 203 TestAnalysisTask task; | 206 <WorkOrderPriority>[WorkOrderPriority.NORMAL, WorkOrderPriority.NONE]); |
| 204 TaskDescriptor descriptor = new TaskDescriptor( | 207 when(workManager1.getNextResult()) |
| 205 'task', (context, target) => task, (target) => {}, [result]); | 208 .thenReturn(new TargetedResult(target1, result1)); |
| 206 task = new TestAnalysisTask(context, target, descriptor: descriptor); | |
| 207 taskManager.addTaskDescriptor(descriptor); | |
| 208 taskManager.addGeneralResult(result); | |
| 209 context.priorityTargets.add(target); | |
| 210 | 209 |
| 211 expect(analysisDriver.performAnalysisTask(), true); | 210 expect(analysisDriver.performAnalysisTask(), true); |
| 212 expect(analysisDriver.performAnalysisTask(), true); | 211 expect(analysisDriver.performAnalysisTask(), true); |
| 213 expect(analysisDriver.performAnalysisTask(), false); | 212 expect(analysisDriver.performAnalysisTask(), false); |
| 214 } | 213 } |
| 215 | 214 |
| 216 test_performAnalysisTask_infiniteLoop() { | 215 test_performAnalysisTask_infiniteLoop() { |
| 217 AnalysisTarget target = new TestSource(); | 216 AnalysisTarget target = new TestSource(); |
| 218 ResultDescriptor resultA = new ResultDescriptor('resultA', -1); | 217 ResultDescriptor resultA = new ResultDescriptor('resultA', -1); |
| 219 ResultDescriptor resultB = new ResultDescriptor('resultB', -2); | 218 ResultDescriptor resultB = new ResultDescriptor('resultB', -2); |
| 220 // configure tasks | 219 // configure tasks |
| 221 TestAnalysisTask task1; | 220 TestAnalysisTask task1; |
| 222 TestAnalysisTask task2; | 221 TestAnalysisTask task2; |
| 223 TaskDescriptor descriptor1 = new TaskDescriptor('task1', | 222 TaskDescriptor descriptor1 = new TaskDescriptor('task1', |
| 224 (context, target) => task1, (target) => { | 223 (context, target) => task1, (target) => { |
| 225 'inputB': new SimpleTaskInput<int>(target, resultB) | 224 'inputB': new SimpleTaskInput<int>(target, resultB) |
| 226 }, [resultA]); | 225 }, [resultA]); |
| 227 TaskDescriptor descriptor2 = new TaskDescriptor('task2', | 226 TaskDescriptor descriptor2 = new TaskDescriptor('task2', |
| 228 (context, target) => task2, (target) => { | 227 (context, target) => task2, (target) => { |
| 229 'inputA': new SimpleTaskInput<int>(target, resultA) | 228 'inputA': new SimpleTaskInput<int>(target, resultA) |
| 230 }, [resultB]); | 229 }, [resultB]); |
| 231 task1 = new TestAnalysisTask(context, target, descriptor: descriptor1); | 230 task1 = new TestAnalysisTask(context, target, descriptor: descriptor1); |
| 232 task2 = new TestAnalysisTask(context, target, descriptor: descriptor2); | 231 task2 = new TestAnalysisTask(context, target, descriptor: descriptor2); |
| 233 taskManager.addTaskDescriptor(descriptor1); | 232 taskManager.addTaskDescriptor(descriptor1); |
| 234 taskManager.addTaskDescriptor(descriptor2); | 233 taskManager.addTaskDescriptor(descriptor2); |
| 235 context.explicitTargets.add(target); | 234 // configure WorkManager |
| 236 taskManager.addGeneralResult(resultB); | 235 when(workManager1.getNextResultPriority()).thenReturnList( |
| 236 <WorkOrderPriority>[WorkOrderPriority.NORMAL, WorkOrderPriority.NONE]); |
| 237 when(workManager1.getNextResult()) |
| 238 .thenReturn(new TargetedResult(target, resultB)); |
| 237 // prepare work order | 239 // prepare work order |
| 238 expect(analysisDriver.performAnalysisTask(), true); | 240 expect(analysisDriver.performAnalysisTask(), true); |
| 239 expect(analysisDriver.performAnalysisTask(), true); | 241 expect(analysisDriver.performAnalysisTask(), true); |
| 240 CaughtException exception = context.getCacheEntry(target).exception; | 242 CaughtException exception = context.getCacheEntry(target).exception; |
| 241 expect(exception, isNotNull); | 243 expect(exception, isNotNull); |
| 242 expect(exception.exception, new isInstanceOf<InfiniteTaskLoopException>()); | 244 expect(exception.exception, new isInstanceOf<InfiniteTaskLoopException>()); |
| 243 } | 245 } |
| 244 | 246 |
| 245 test_performAnalysisTask_inputsFirst() { | 247 test_performAnalysisTask_inputsFirst() { |
| 246 AnalysisTarget target = new TestSource(); | 248 AnalysisTarget target = new TestSource(); |
| 247 ResultDescriptor resultA = new ResultDescriptor('resultA', -1); | 249 ResultDescriptor resultA = new ResultDescriptor('resultA', -1); |
| 248 ResultDescriptor resultB = new ResultDescriptor('resultB', -2); | 250 ResultDescriptor resultB = new ResultDescriptor('resultB', -2); |
| 249 // configure tasks | 251 // configure tasks |
| 250 TestAnalysisTask task1; | 252 TestAnalysisTask task1; |
| 251 TestAnalysisTask task2; | 253 TestAnalysisTask task2; |
| 252 TaskDescriptor descriptor1 = new TaskDescriptor( | 254 TaskDescriptor descriptor1 = new TaskDescriptor( |
| 253 'task1', (context, target) => task1, (target) => {}, [resultA]); | 255 'task1', (context, target) => task1, (target) => {}, [resultA]); |
| 254 TaskDescriptor descriptor2 = new TaskDescriptor('task2', | 256 TaskDescriptor descriptor2 = new TaskDescriptor('task2', |
| 255 (context, target) => task2, (target) => { | 257 (context, target) => task2, (target) => { |
| 256 'inputA': new SimpleTaskInput<int>(target, resultA) | 258 'inputA': new SimpleTaskInput<int>(target, resultA) |
| 257 }, [resultB]); | 259 }, [resultB]); |
| 258 task1 = new TestAnalysisTask(context, target, | 260 task1 = new TestAnalysisTask(context, target, |
| 259 descriptor: descriptor1, results: [resultA], value: 10); | 261 descriptor: descriptor1, results: [resultA], value: 10); |
| 260 task2 = new TestAnalysisTask(context, target, | 262 task2 = new TestAnalysisTask(context, target, |
| 261 descriptor: descriptor2, value: 20); | 263 descriptor: descriptor2, value: 20); |
| 262 taskManager.addTaskDescriptor(descriptor1); | 264 taskManager.addTaskDescriptor(descriptor1); |
| 263 taskManager.addTaskDescriptor(descriptor2); | 265 taskManager.addTaskDescriptor(descriptor2); |
| 264 context.explicitTargets.add(target); | 266 // configure WorkManager |
| 265 taskManager.addGeneralResult(resultB); | 267 when(workManager1.getNextResultPriority()).thenReturnList( |
| 268 <WorkOrderPriority>[WorkOrderPriority.NORMAL, WorkOrderPriority.NONE]); |
| 269 when(workManager1.getNextResult()) |
| 270 .thenReturn(new TargetedResult(target, resultB)); |
| 266 // prepare work order | 271 // prepare work order |
| 267 expect(analysisDriver.performAnalysisTask(), true); | 272 expect(analysisDriver.performAnalysisTask(), true); |
| 268 expect(context.getCacheEntry(target).getValue(resultA), -1); | 273 expect(context.getCacheEntry(target).getValue(resultA), -1); |
| 269 expect(context.getCacheEntry(target).getValue(resultB), -2); | 274 expect(context.getCacheEntry(target).getValue(resultB), -2); |
| 270 // compute resultA | 275 // compute resultA |
| 271 expect(analysisDriver.performAnalysisTask(), true); | 276 expect(analysisDriver.performAnalysisTask(), true); |
| 272 expect(context.getCacheEntry(target).getValue(resultA), 10); | 277 expect(context.getCacheEntry(target).getValue(resultA), 10); |
| 273 expect(context.getCacheEntry(target).getValue(resultB), -2); | 278 expect(context.getCacheEntry(target).getValue(resultB), -2); |
| 274 // compute resultB | 279 // compute resultB |
| 275 expect(analysisDriver.performAnalysisTask(), true); | 280 expect(analysisDriver.performAnalysisTask(), true); |
| (...skipping 59 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 335 (context, target) => new TestAnalysisTask(context, target), | 340 (context, target) => new TestAnalysisTask(context, target), |
| 336 (target) => {'one': inputResult.of(target)}, | 341 (target) => {'one': inputResult.of(target)}, |
| 337 [new ResultDescriptor('output', null)]); | 342 [new ResultDescriptor('output', null)]); |
| 338 analysisDriver.currentWorkOrder = | 343 analysisDriver.currentWorkOrder = |
| 339 new WorkOrder(taskManager, new WorkItem(null, null, descriptor)); | 344 new WorkOrder(taskManager, new WorkItem(null, null, descriptor)); |
| 340 | 345 |
| 341 analysisDriver.reset(); | 346 analysisDriver.reset(); |
| 342 expect(analysisDriver.currentWorkOrder, isNull); | 347 expect(analysisDriver.currentWorkOrder, isNull); |
| 343 } | 348 } |
| 344 | 349 |
| 350 void _configureDescriptors12() { |
| 351 descriptor1 = new TaskDescriptor('task1', (context, target) => |
| 352 new TestAnalysisTask(context, target, descriptor: descriptor1), |
| 353 (target) => {}, [result1]); |
| 354 taskManager.addTaskDescriptor(descriptor1); |
| 355 |
| 356 descriptor2 = new TaskDescriptor('task2', (context, target) => |
| 357 new TestAnalysisTask(context, target, descriptor: descriptor1), |
| 358 (target) => {}, [result2]); |
| 359 taskManager.addTaskDescriptor(descriptor2); |
| 360 } |
| 361 |
| 345 /** | 362 /** |
| 346 * [complete] is `true` if the value of the result has already been computed. | 363 * [complete] is `true` if the value of the result has already been computed. |
| 347 * [priorityTarget] is `true` if the target is in the list of priority | 364 * [priorityTarget] is `true` if the target is in the list of priority |
| 348 * targets. | 365 * targets. |
| 349 * [priorityResult] is `true` if the result should only be computed for | 366 * [priorityResult] is `true` if the result should only be computed for |
| 350 * priority targets. | 367 * priority targets. |
| 351 */ | 368 */ |
| 352 _createWorkOrderForTarget( | 369 _createWorkOrderForTarget( |
| 353 bool complete, bool priorityTarget, bool priorityResult) { | 370 bool complete, bool priorityTarget, bool priorityResult) { |
| 354 AnalysisTarget target = new TestSource(); | 371 AnalysisTarget target = new TestSource(); |
| (...skipping 25 matching lines...) Expand all Loading... |
| 380 expect(workOrder, isNull); | 397 expect(workOrder, isNull); |
| 381 } else if (priorityResult) { | 398 } else if (priorityResult) { |
| 382 expect(workOrder, priorityTarget ? isNotNull : isNull); | 399 expect(workOrder, priorityTarget ? isNotNull : isNull); |
| 383 } else { | 400 } else { |
| 384 expect(workOrder, isNotNull); | 401 expect(workOrder, isNotNull); |
| 385 } | 402 } |
| 386 } | 403 } |
| 387 } | 404 } |
| 388 | 405 |
| 389 @reflectiveTest | 406 @reflectiveTest |
| 390 class WorkItemTest extends EngineTestCase { | 407 class WorkItemTest extends AbstractDriverTest { |
| 391 test_buildTask_complete() { | 408 test_buildTask_complete() { |
| 392 AnalysisContext context = new AnalysisContextImpl(); | |
| 393 AnalysisTarget target = new TestSource(); | 409 AnalysisTarget target = new TestSource(); |
| 394 TaskDescriptor descriptor = new TaskDescriptor('task', | 410 TaskDescriptor descriptor = new TaskDescriptor('task', |
| 395 (context, target) => new TestAnalysisTask(context, target), | 411 (context, target) => new TestAnalysisTask(context, target), |
| 396 (target) => {}, [new ResultDescriptor('output', null)]); | 412 (target) => {}, [new ResultDescriptor('output', null)]); |
| 397 WorkItem item = new WorkItem(context, target, descriptor); | 413 WorkItem item = new WorkItem(context, target, descriptor); |
| 398 AnalysisTask task = item.buildTask(); | 414 AnalysisTask task = item.buildTask(); |
| 399 expect(task, isNotNull); | 415 expect(task, isNotNull); |
| 400 } | 416 } |
| 401 | 417 |
| 402 test_buildTask_incomplete() { | 418 test_buildTask_incomplete() { |
| 403 AnalysisContext context = new AnalysisContextImpl(); | |
| 404 AnalysisTarget target = new TestSource(); | 419 AnalysisTarget target = new TestSource(); |
| 405 ResultDescriptor inputResult = new ResultDescriptor('input', null); | 420 ResultDescriptor inputResult = new ResultDescriptor('input', null); |
| 406 List<ResultDescriptor> outputResults = | 421 List<ResultDescriptor> outputResults = |
| 407 <ResultDescriptor>[new ResultDescriptor('output', null)]; | 422 <ResultDescriptor>[new ResultDescriptor('output', null)]; |
| 408 TaskDescriptor descriptor = new TaskDescriptor('task', (context, target) => | 423 TaskDescriptor descriptor = new TaskDescriptor('task', (context, target) => |
| 409 new TestAnalysisTask(context, target, results: outputResults), | 424 new TestAnalysisTask(context, target, results: outputResults), |
| 410 (target) => {'one': inputResult.of(target)}, outputResults); | 425 (target) => {'one': inputResult.of(target)}, outputResults); |
| 411 WorkItem item = new WorkItem(context, target, descriptor); | 426 WorkItem item = new WorkItem(context, target, descriptor); |
| 412 expect(() => item.buildTask(), throwsStateError); | 427 expect(() => item.buildTask(), throwsStateError); |
| 413 } | 428 } |
| 414 | 429 |
| 415 test_create() { | 430 test_create() { |
| 416 AnalysisContext context = new AnalysisContextImpl(); | |
| 417 AnalysisTarget target = new TestSource(); | 431 AnalysisTarget target = new TestSource(); |
| 418 TaskDescriptor descriptor = new TaskDescriptor( | 432 TaskDescriptor descriptor = new TaskDescriptor( |
| 419 'task', null, (target) => {}, [new ResultDescriptor('result', null)]); | 433 'task', null, (target) => {}, [new ResultDescriptor('result', null)]); |
| 420 WorkItem item = new WorkItem(context, target, descriptor); | 434 WorkItem item = new WorkItem(context, target, descriptor); |
| 421 expect(item, isNotNull); | 435 expect(item, isNotNull); |
| 422 expect(item.context, context); | 436 expect(item.context, context); |
| 423 expect(item.descriptor, descriptor); | 437 expect(item.descriptor, descriptor); |
| 424 expect(item.target, target); | 438 expect(item.target, target); |
| 425 } | 439 } |
| 426 | 440 |
| 427 test_gatherInputs_complete() { | 441 test_gatherInputs_complete() { |
| 428 TaskManager manager = new TaskManager(); | |
| 429 AnalysisContext context = new AnalysisContextImpl(); | |
| 430 AnalysisTarget target = new TestSource(); | 442 AnalysisTarget target = new TestSource(); |
| 431 TaskDescriptor descriptor = new TaskDescriptor('task', | 443 TaskDescriptor descriptor = new TaskDescriptor('task', |
| 432 (context, target) => new TestAnalysisTask(context, target), | 444 (context, target) => new TestAnalysisTask(context, target), |
| 433 (target) => {}, [new ResultDescriptor('output', null)]); | 445 (target) => {}, [new ResultDescriptor('output', null)]); |
| 434 WorkItem item = new WorkItem(context, target, descriptor); | 446 WorkItem item = new WorkItem(context, target, descriptor); |
| 435 WorkItem result = item.gatherInputs(manager); | 447 WorkItem result = item.gatherInputs(taskManager); |
| 436 expect(result, isNull); | 448 expect(result, isNull); |
| 437 expect(item.exception, isNull); | 449 expect(item.exception, isNull); |
| 438 } | 450 } |
| 439 | 451 |
| 440 test_gatherInputs_incomplete() { | 452 test_gatherInputs_incomplete() { |
| 441 TaskManager manager = new TaskManager(); | |
| 442 AnalysisContextImpl context = new AnalysisContextImpl(); | |
| 443 AnalysisTarget target = new TestSource(); | 453 AnalysisTarget target = new TestSource(); |
| 444 ResultDescriptor resultA = new ResultDescriptor('resultA', null); | 454 ResultDescriptor resultA = new ResultDescriptor('resultA', null); |
| 445 ResultDescriptor resultB = new ResultDescriptor('resultB', null); | 455 ResultDescriptor resultB = new ResultDescriptor('resultB', null); |
| 446 // prepare tasks | 456 // prepare tasks |
| 447 TaskDescriptor task1 = new TaskDescriptor('task', (context, target) => | 457 TaskDescriptor task1 = new TaskDescriptor('task', (context, target) => |
| 448 new TestAnalysisTask(context, target, results: [resultA]), | 458 new TestAnalysisTask(context, target, results: [resultA]), |
| 449 (target) => {}, [resultA]); | 459 (target) => {}, [resultA]); |
| 450 TaskDescriptor task2 = new TaskDescriptor('task', | 460 TaskDescriptor task2 = new TaskDescriptor('task', |
| 451 (context, target) => new TestAnalysisTask(context, target), | 461 (context, target) => new TestAnalysisTask(context, target), |
| 452 (target) => {'one': resultA.of(target)}, [resultB]); | 462 (target) => {'one': resultA.of(target)}, [resultB]); |
| 453 manager.addTaskDescriptor(task1); | 463 taskManager.addTaskDescriptor(task1); |
| 454 manager.addTaskDescriptor(task2); | 464 taskManager.addTaskDescriptor(task2); |
| 455 // gather inputs | 465 // gather inputs |
| 456 WorkItem item = new WorkItem(context, target, task2); | 466 WorkItem item = new WorkItem(context, target, task2); |
| 457 WorkItem inputItem = item.gatherInputs(manager); | 467 WorkItem inputItem = item.gatherInputs(taskManager); |
| 458 expect(inputItem, isNotNull); | 468 expect(inputItem, isNotNull); |
| 459 } | 469 } |
| 460 | 470 |
| 461 test_gatherInputs_invalid() { | 471 test_gatherInputs_invalid() { |
| 462 TaskManager manager = new TaskManager(); | |
| 463 AnalysisContext context = new AnalysisContextImpl(); | |
| 464 AnalysisTarget target = new TestSource(); | 472 AnalysisTarget target = new TestSource(); |
| 465 ResultDescriptor inputResult = new ResultDescriptor('input', null); | 473 ResultDescriptor inputResult = new ResultDescriptor('input', null); |
| 466 TaskDescriptor descriptor = new TaskDescriptor('task', | 474 TaskDescriptor descriptor = new TaskDescriptor('task', |
| 467 (context, target) => new TestAnalysisTask(context, target), | 475 (context, target) => new TestAnalysisTask(context, target), |
| 468 (target) => {'one': inputResult.of(target)}, | 476 (target) => {'one': inputResult.of(target)}, |
| 469 [new ResultDescriptor('output', null)]); | 477 [new ResultDescriptor('output', null)]); |
| 470 WorkItem item = new WorkItem(context, target, descriptor); | 478 WorkItem item = new WorkItem(context, target, descriptor); |
| 471 WorkItem result = item.gatherInputs(manager); | 479 WorkItem result = item.gatherInputs(taskManager); |
| 472 expect(result, isNull); | 480 expect(result, isNull); |
| 473 expect(item.exception, isNotNull); | 481 expect(item.exception, isNotNull); |
| 474 } | 482 } |
| 475 } | 483 } |
| 476 | 484 |
| 477 @reflectiveTest | 485 @reflectiveTest |
| 478 class WorkOrderTest extends EngineTestCase { | 486 class WorkOrderTest extends EngineTestCase { |
| 479 test_create() { | 487 test_create() { |
| 480 TaskManager manager = new TaskManager(); | 488 TaskManager manager = new TaskManager(); |
| 481 TaskDescriptor descriptor = new TaskDescriptor( | 489 TaskDescriptor descriptor = new TaskDescriptor( |
| (...skipping 15 matching lines...) Expand all Loading... |
| 497 // "item" has no child items | 505 // "item" has no child items |
| 498 expect(order.moveNext(), isTrue); | 506 expect(order.moveNext(), isTrue); |
| 499 expect(order.current, workItem); | 507 expect(order.current, workItem); |
| 500 // done | 508 // done |
| 501 expect(order.moveNext(), isFalse); | 509 expect(order.moveNext(), isFalse); |
| 502 expect(order.current, isNull); | 510 expect(order.current, isNull); |
| 503 } | 511 } |
| 504 } | 512 } |
| 505 | 513 |
| 506 /** | 514 /** |
| 507 * An [AnalysisContextImpl] which allows to set explicit and implicit targets | 515 * A dummy [InternalAnalysisContext] that does not use [AnalysisDriver] itself, |
| 508 * directly. | 516 * but provides enough implementation for it to function. |
| 509 */ | 517 */ |
| 510 class _TestContext extends AnalysisContextImpl { | 518 class _InternalAnalysisContextMock extends TypedMock |
| 519 implements InternalAnalysisContext { |
| 520 AnalysisCache analysisCache; |
| 521 |
| 511 @override | 522 @override |
| 512 List<AnalysisTarget> explicitTargets = <AnalysisTarget>[]; | 523 List<AnalysisTarget> explicitTargets = <AnalysisTarget>[]; |
| 513 | 524 |
| 514 @override | 525 @override |
| 515 List<AnalysisTarget> priorityTargets = <AnalysisTarget>[]; | 526 List<AnalysisTarget> priorityTargets = <AnalysisTarget>[]; |
| 527 |
| 528 _InternalAnalysisContextMock() { |
| 529 analysisCache = new AnalysisCache([new UniversalCachePartition(this)]); |
| 530 } |
| 531 |
| 532 @override |
| 533 CacheEntry getCacheEntry(AnalysisTarget target) { |
| 534 CacheEntry entry = analysisCache.get(target); |
| 535 if (entry == null) { |
| 536 entry = new CacheEntry(target); |
| 537 analysisCache.put(entry); |
| 538 } |
| 539 return entry; |
| 540 } |
| 541 |
| 542 noSuchMethod(Invocation invocation) => super.noSuchMethod(invocation); |
| 516 } | 543 } |
| 544 |
| 545 class _WorkManagerMock extends TypedMock implements WorkManager { |
| 546 noSuchMethod(Invocation invocation) => super.noSuchMethod(invocation); |
| 547 } |
| OLD | NEW |