| 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 'dart:async'; | 7 import 'dart:async'; |
| 8 import 'dart:collection'; | 8 import 'dart:collection'; |
| 9 | 9 |
| 10 import 'package:analyzer/src/cancelable_future.dart'; | 10 import 'package:analyzer/src/cancelable_future.dart'; |
| (...skipping 205 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 216 task = new TestAnalysisTask(context, target, descriptor: descriptor); | 216 task = new TestAnalysisTask(context, target, descriptor: descriptor); |
| 217 manager.addTaskDescriptor(descriptor); | 217 manager.addTaskDescriptor(descriptor); |
| 218 manager.addGeneralResult(result); | 218 manager.addGeneralResult(result); |
| 219 context.priorityTargets.add(target); | 219 context.priorityTargets.add(target); |
| 220 | 220 |
| 221 expect(driver.performAnalysisTask(), true); | 221 expect(driver.performAnalysisTask(), true); |
| 222 expect(driver.performAnalysisTask(), true); | 222 expect(driver.performAnalysisTask(), true); |
| 223 expect(driver.performAnalysisTask(), false); | 223 expect(driver.performAnalysisTask(), false); |
| 224 } | 224 } |
| 225 | 225 |
| 226 test_performAnalysisTask_inputsFirst() { | |
| 227 AnalysisTarget target = new TestSource(); | |
| 228 ResultDescriptor resultA = new ResultDescriptor('resultA', -1); | |
| 229 ResultDescriptor resultB = new ResultDescriptor('resultB', -2); | |
| 230 // configure tasks | |
| 231 TestAnalysisTask task1; | |
| 232 TestAnalysisTask task2; | |
| 233 TaskDescriptor descriptor1 = new TaskDescriptor( | |
| 234 'task1', (context, target) => task1, (target) => {}, [resultA]); | |
| 235 TaskDescriptor descriptor2 = new TaskDescriptor('task2', | |
| 236 (context, target) => task2, (target) => { | |
| 237 'inputA': new SimpleTaskInput<int>(target, resultA) | |
| 238 }, [resultB]); | |
| 239 task1 = new TestAnalysisTask(context, target, | |
| 240 descriptor: descriptor1, results: [resultA], value: 10); | |
| 241 task2 = new TestAnalysisTask(context, target, | |
| 242 descriptor: descriptor2, value: 20); | |
| 243 manager.addTaskDescriptor(descriptor1); | |
| 244 manager.addTaskDescriptor(descriptor2); | |
| 245 context.explicitTargets.add(target); | |
| 246 manager.addGeneralResult(resultB); | |
| 247 // prepare work order | |
| 248 expect(driver.performAnalysisTask(), true); | |
| 249 expect(context.getCacheEntry(target).getValue(resultA), -1); | |
| 250 expect(context.getCacheEntry(target).getValue(resultB), -2); | |
| 251 // compute resultA | |
| 252 expect(driver.performAnalysisTask(), true); | |
| 253 expect(context.getCacheEntry(target).getValue(resultA), 10); | |
| 254 expect(context.getCacheEntry(target).getValue(resultB), -2); | |
| 255 // compute resultB | |
| 256 expect(driver.performAnalysisTask(), true); | |
| 257 expect(context.getCacheEntry(target).getValue(resultA), 10); | |
| 258 expect(context.getCacheEntry(target).getValue(resultB), 20); | |
| 259 // done | |
| 260 expect(driver.performAnalysisTask(), false); | |
| 261 } | |
| 262 | |
| 263 test_performAnalysisTask_infiniteLoop() { | 226 test_performAnalysisTask_infiniteLoop() { |
| 264 AnalysisTarget target = new TestSource(); | 227 AnalysisTarget target = new TestSource(); |
| 265 ResultDescriptor resultA = new ResultDescriptor('resultA', -1); | 228 ResultDescriptor resultA = new ResultDescriptor('resultA', -1); |
| 266 ResultDescriptor resultB = new ResultDescriptor('resultB', -2); | 229 ResultDescriptor resultB = new ResultDescriptor('resultB', -2); |
| 230 // configure tasks |
| 231 TestAnalysisTask task1; |
| 232 TestAnalysisTask task2; |
| 233 TaskDescriptor descriptor1 = new TaskDescriptor('task1', |
| 234 (context, target) => task1, (target) => { |
| 235 'inputB': new SimpleTaskInput<int>(target, resultB) |
| 236 }, [resultA]); |
| 237 TaskDescriptor descriptor2 = new TaskDescriptor('task2', |
| 238 (context, target) => task2, (target) => { |
| 239 'inputA': new SimpleTaskInput<int>(target, resultA) |
| 240 }, [resultB]); |
| 241 task1 = new TestAnalysisTask(context, target, descriptor: descriptor1); |
| 242 task2 = new TestAnalysisTask(context, target, descriptor: descriptor2); |
| 243 manager.addTaskDescriptor(descriptor1); |
| 244 manager.addTaskDescriptor(descriptor2); |
| 245 context.explicitTargets.add(target); |
| 246 manager.addGeneralResult(resultB); |
| 247 // prepare work order |
| 248 expect(driver.performAnalysisTask(), true); |
| 249 expect(driver.performAnalysisTask(), true); |
| 250 CaughtException exception = context.getCacheEntry(target).exception; |
| 251 expect(exception, isNotNull); |
| 252 expect(exception.exception, new isInstanceOf<InfiniteTaskLoopException>()); |
| 253 } |
| 254 |
| 255 test_performAnalysisTask_inputsFirst() { |
| 256 AnalysisTarget target = new TestSource(); |
| 257 ResultDescriptor resultA = new ResultDescriptor('resultA', -1); |
| 258 ResultDescriptor resultB = new ResultDescriptor('resultB', -2); |
| 267 // configure tasks | 259 // configure tasks |
| 268 TestAnalysisTask task1; | 260 TestAnalysisTask task1; |
| 269 TestAnalysisTask task2; | 261 TestAnalysisTask task2; |
| 270 TaskDescriptor descriptor1 = new TaskDescriptor( | 262 TaskDescriptor descriptor1 = new TaskDescriptor( |
| 271 'task1', (context, target) => task1, (target) => { | 263 'task1', (context, target) => task1, (target) => {}, [resultA]); |
| 272 'inputB': new SimpleTaskInput<int>(target, resultB) | |
| 273 }, [resultA]); | |
| 274 TaskDescriptor descriptor2 = new TaskDescriptor('task2', | 264 TaskDescriptor descriptor2 = new TaskDescriptor('task2', |
| 275 (context, target) => task2, (target) => { | 265 (context, target) => task2, (target) => { |
| 276 'inputA': new SimpleTaskInput<int>(target, resultA) | 266 'inputA': new SimpleTaskInput<int>(target, resultA) |
| 277 }, [resultB]); | 267 }, [resultB]); |
| 278 task1 = new TestAnalysisTask(context, target, descriptor: descriptor1); | 268 task1 = new TestAnalysisTask(context, target, |
| 279 task2 = new TestAnalysisTask(context, target, descriptor: descriptor2); | 269 descriptor: descriptor1, results: [resultA], value: 10); |
| 270 task2 = new TestAnalysisTask(context, target, |
| 271 descriptor: descriptor2, value: 20); |
| 280 manager.addTaskDescriptor(descriptor1); | 272 manager.addTaskDescriptor(descriptor1); |
| 281 manager.addTaskDescriptor(descriptor2); | 273 manager.addTaskDescriptor(descriptor2); |
| 282 context.explicitTargets.add(target); | 274 context.explicitTargets.add(target); |
| 283 manager.addGeneralResult(resultB); | 275 manager.addGeneralResult(resultB); |
| 284 // prepare work order | 276 // prepare work order |
| 285 expect(driver.performAnalysisTask(), true); | 277 expect(driver.performAnalysisTask(), true); |
| 278 expect(context.getCacheEntry(target).getValue(resultA), -1); |
| 279 expect(context.getCacheEntry(target).getValue(resultB), -2); |
| 280 // compute resultA |
| 286 expect(driver.performAnalysisTask(), true); | 281 expect(driver.performAnalysisTask(), true); |
| 287 CaughtException exception = context.getCacheEntry(target).exception; | 282 expect(context.getCacheEntry(target).getValue(resultA), 10); |
| 288 expect(exception, isNotNull); | 283 expect(context.getCacheEntry(target).getValue(resultB), -2); |
| 289 expect(exception.exception, new isInstanceOf<InfiniteTaskLoopException>()); | 284 // compute resultB |
| 285 expect(driver.performAnalysisTask(), true); |
| 286 expect(context.getCacheEntry(target).getValue(resultA), 10); |
| 287 expect(context.getCacheEntry(target).getValue(resultB), 20); |
| 288 // done |
| 289 expect(driver.performAnalysisTask(), false); |
| 290 } | 290 } |
| 291 | 291 |
| 292 test_performWorkItem_exceptionInTask() { | 292 test_performWorkItem_exceptionInTask() { |
| 293 AnalysisTarget target = new TestSource(); | 293 AnalysisTarget target = new TestSource(); |
| 294 ResultDescriptor result = new ResultDescriptor('result', null); | 294 ResultDescriptor result = new ResultDescriptor('result', null); |
| 295 CaughtException exception = | 295 CaughtException exception = |
| 296 new CaughtException(new AnalysisException(), null); | 296 new CaughtException(new AnalysisException(), null); |
| 297 TestAnalysisTask task; | 297 TestAnalysisTask task; |
| 298 TaskDescriptor descriptor = new TaskDescriptor( | 298 TaskDescriptor descriptor = new TaskDescriptor( |
| 299 'task', (context, target) => task, (target) => {}, [result]); | 299 'task', (context, target) => task, (target) => {}, [result]); |
| (...skipping 202 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 502 WorkOrder order = new WorkOrder(manager, workItem); | 502 WorkOrder order = new WorkOrder(manager, workItem); |
| 503 // "item" has no child items | 503 // "item" has no child items |
| 504 expect(order.moveNext(), isTrue); | 504 expect(order.moveNext(), isTrue); |
| 505 expect(order.current, workItem); | 505 expect(order.current, workItem); |
| 506 // done | 506 // done |
| 507 expect(order.moveNext(), isFalse); | 507 expect(order.moveNext(), isFalse); |
| 508 expect(order.current, isNull); | 508 expect(order.current, isNull); |
| 509 } | 509 } |
| 510 } | 510 } |
| 511 | 511 |
| 512 class _TestContext implements ExtendedAnalysisContext { | 512 class _TestContext implements InternalAnalysisContext { |
| 513 InternalAnalysisContext baseContext = | 513 InternalAnalysisContext baseContext = |
| 514 AnalysisContextFactory.contextWithCore(); | 514 AnalysisContextFactory.contextWithCore(); |
| 515 | 515 |
| 516 @override | 516 @override |
| 517 List<AnalysisTarget> explicitTargets = <AnalysisTarget>[]; | 517 List<AnalysisTarget> explicitTargets = <AnalysisTarget>[]; |
| 518 | 518 |
| 519 Map<AnalysisTarget, CacheEntry> entryMap = | 519 Map<AnalysisTarget, CacheEntry> entryMap = |
| 520 new HashMap<AnalysisTarget, CacheEntry>(); | 520 new HashMap<AnalysisTarget, CacheEntry>(); |
| 521 | 521 |
| 522 @override | 522 @override |
| (...skipping 30 matching lines...) Expand all Loading... |
| 553 | 553 |
| 554 @override | 554 @override |
| 555 List<Source> get launchableClientLibrarySources => | 555 List<Source> get launchableClientLibrarySources => |
| 556 baseContext.launchableClientLibrarySources; | 556 baseContext.launchableClientLibrarySources; |
| 557 | 557 |
| 558 @override | 558 @override |
| 559 List<Source> get launchableServerLibrarySources => | 559 List<Source> get launchableServerLibrarySources => |
| 560 baseContext.launchableServerLibrarySources; | 560 baseContext.launchableServerLibrarySources; |
| 561 | 561 |
| 562 @override | 562 @override |
| 563 LibraryResolverFactory get libraryResolverFactory => |
| 564 baseContext.libraryResolverFactory; |
| 565 |
| 566 @override |
| 563 List<Source> get librarySources => baseContext.librarySources; | 567 List<Source> get librarySources => baseContext.librarySources; |
| 564 | 568 |
| 565 @override | 569 @override |
| 566 Stream<SourcesChangedEvent> get onSourcesChanged => | 570 Stream<SourcesChangedEvent> get onSourcesChanged => |
| 567 baseContext.onSourcesChanged; | 571 baseContext.onSourcesChanged; |
| 568 | 572 |
| 569 @override | 573 @override |
| 570 List<Source> get prioritySources => baseContext.prioritySources; | 574 List<Source> get prioritySources => baseContext.prioritySources; |
| 571 | 575 |
| 572 @override | 576 @override |
| 573 List<Source> get refactoringUnsafeSources => | 577 List<Source> get refactoringUnsafeSources => |
| 574 baseContext.refactoringUnsafeSources; | 578 baseContext.refactoringUnsafeSources; |
| 575 | 579 |
| 576 @override | 580 @override |
| 577 LibraryResolverFactory get libraryResolverFactory => | |
| 578 baseContext.libraryResolverFactory; | |
| 579 | |
| 580 @override | |
| 581 ResolverVisitorFactory get resolverVisitorFactory => | 581 ResolverVisitorFactory get resolverVisitorFactory => |
| 582 baseContext.resolverVisitorFactory; | 582 baseContext.resolverVisitorFactory; |
| 583 | 583 |
| 584 SourceFactory get sourceFactory => baseContext.sourceFactory; | 584 SourceFactory get sourceFactory => baseContext.sourceFactory; |
| 585 | 585 |
| 586 void set sourceFactory(SourceFactory factory) { | 586 void set sourceFactory(SourceFactory factory) { |
| 587 baseContext.sourceFactory = factory; | 587 baseContext.sourceFactory = factory; |
| 588 } | 588 } |
| 589 | 589 |
| 590 @override | 590 @override |
| (...skipping 274 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 865 void setContents(Source source, String contents) { | 865 void setContents(Source source, String contents) { |
| 866 baseContext.setContents(source, contents); | 866 baseContext.setContents(source, contents); |
| 867 } | 867 } |
| 868 | 868 |
| 869 @override | 869 @override |
| 870 void visitCacheItems(void callback(Source source, SourceEntry dartEntry, | 870 void visitCacheItems(void callback(Source source, SourceEntry dartEntry, |
| 871 DataDescriptor rowDesc, CacheState state)) { | 871 DataDescriptor rowDesc, CacheState state)) { |
| 872 baseContext.visitCacheItems(callback); | 872 baseContext.visitCacheItems(callback); |
| 873 } | 873 } |
| 874 } | 874 } |
| OLD | NEW |