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

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

Issue 1053673008: Initial re-write of analysis context for the new task model (Closed) Base URL: https://dart.googlecode.com/svn/branches/bleeding_edge/dart
Patch Set: Created 5 years, 8 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 '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
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
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
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
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 }
OLDNEW
« pkg/analyzer/lib/src/generated/engine.dart ('K') | « pkg/analyzer/test/src/task/dart_test.dart ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698