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

Side by Side Diff: pkg/analyzer/test/src/context/cache_test.dart

Issue 1133513003: Cache flushing implementation for the task model. (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/generated/ast.dart';
9 import 'package:analyzer/src/generated/engine.dart' 8 import 'package:analyzer/src/generated/engine.dart'
10 show AnalysisContext, CacheState, RetentionPriority; 9 show
10 AnalysisContext,
11 CacheState,
12 InternalAnalysisContext,
13 RetentionPriority;
11 import 'package:analyzer/src/generated/java_engine.dart'; 14 import 'package:analyzer/src/generated/java_engine.dart';
12 import 'package:analyzer/src/generated/sdk_io.dart'; 15 import 'package:analyzer/src/generated/sdk_io.dart';
13 import 'package:analyzer/src/generated/source.dart'; 16 import 'package:analyzer/src/generated/source.dart';
14 import 'package:analyzer/src/generated/utilities_collection.dart'; 17 import 'package:analyzer/src/generated/utilities_collection.dart';
18 import 'package:analyzer/src/task/model.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/engine_test.dart'; 23 import '../../generated/engine_test.dart';
19 import '../../generated/test_support.dart'; 24 import '../../generated/test_support.dart';
20 import '../../reflective_tests.dart'; 25 import '../../reflective_tests.dart';
21 26
22 main() { 27 main() {
23 groupSep = ' | '; 28 groupSep = ' | ';
24 runReflectiveTests(AnalysisCacheTest); 29 runReflectiveTests(AnalysisCacheTest);
25 runReflectiveTests(CacheEntryTest); 30 runReflectiveTests(CacheEntryTest);
31 runReflectiveTests(CacheFlushManagerTest);
26 runReflectiveTests(SdkCachePartitionTest); 32 runReflectiveTests(SdkCachePartitionTest);
27 runReflectiveTests(UniversalCachePartitionTest); 33 runReflectiveTests(UniversalCachePartitionTest);
28 runReflectiveTests(ResultDataTest); 34 runReflectiveTests(ResultDataTest);
29 } 35 }
30 36
31 AnalysisCache createCache({AnalysisContext context, 37 AnalysisCache createCache({AnalysisContext context,
32 RetentionPriority policy: RetentionPriority.LOW}) { 38 RetentionPriority policy: RetentionPriority.LOW}) {
33 CachePartition partition = new UniversalCachePartition( 39 CachePartition partition = new UniversalCachePartition(context);
34 context, 8, new TestCacheRetentionPolicy(policy));
35 return new AnalysisCache(<CachePartition>[partition]); 40 return new AnalysisCache(<CachePartition>[partition]);
36 } 41 }
37 42
38 @reflectiveTest 43 @reflectiveTest
39 class AnalysisCacheTest extends EngineTestCase { 44 class AnalysisCacheTest extends EngineTestCase {
40 void test_astSize_empty() {
41 AnalysisCache cache = createCache();
42 expect(cache.astSize, 0);
43 }
44
45 void test_astSize_nonEmpty() {
46 ResultDescriptor result = new ResultDescriptor('test', null);
47 AstNode node = new NullLiteral(null);
48 AnalysisCache cache = createCache();
49 AnalysisTarget target1 = new TestSource('/test1.dart');
50 CacheEntry entry1 = new CacheEntry();
51 entry1.setValue(result, node, TargetedResult.EMPTY_LIST, null);
52 AnalysisTarget target2 = new TestSource('/test2.dart');
53 CacheEntry entry2 = new CacheEntry();
54 entry2.setValue(result, node, TargetedResult.EMPTY_LIST, null);
55 cache.put(target1, entry1);
56 cache.accessedAst(target1);
57 cache.put(target2, entry2);
58 cache.accessedAst(target2);
59 expect(cache.astSize, 2);
60 }
61
62 void test_creation() { 45 void test_creation() {
63 expect(createCache(), isNotNull); 46 expect(createCache(), isNotNull);
64 } 47 }
65 48
66 void test_get() { 49 void test_get() {
67 AnalysisCache cache = createCache(); 50 AnalysisCache cache = createCache();
68 AnalysisTarget target = new TestSource(); 51 AnalysisTarget target = new TestSource();
69 expect(cache.get(target), isNull); 52 expect(cache.get(target), isNull);
70 } 53 }
71 54
(...skipping 24 matching lines...) Expand all
96 cache.put(target, entry); 79 cache.put(target, entry);
97 expect(cache.get(target), entry); 80 expect(cache.get(target), entry);
98 } 81 }
99 82
100 void test_remove() { 83 void test_remove() {
101 AnalysisCache cache = createCache(); 84 AnalysisCache cache = createCache();
102 AnalysisTarget target = new TestSource(); 85 AnalysisTarget target = new TestSource();
103 cache.remove(target); 86 cache.remove(target);
104 } 87 }
105 88
106 void test_setMaxCacheSize() {
107 CachePartition partition = new UniversalCachePartition(
108 null, 8, new TestCacheRetentionPolicy(RetentionPriority.MEDIUM));
109 AnalysisCache cache = new AnalysisCache(<CachePartition>[partition]);
110 ResultDescriptor result = new ResultDescriptor('test', null);
111 AstNode node = new NullLiteral(null);
112 int size = 6;
113 for (int i = 0; i < size; i++) {
114 AnalysisTarget target = new TestSource("/test$i.dart");
115 CacheEntry entry = new CacheEntry();
116 entry.setValue(result, node, TargetedResult.EMPTY_LIST, null);
117 cache.put(target, entry);
118 cache.accessedAst(target);
119 }
120
121 void _assertNonFlushedCount(int expectedCount, AnalysisCache cache) {
122 int nonFlushedCount = 0;
123 MapIterator<AnalysisTarget, CacheEntry> iterator = cache.iterator();
124 while (iterator.moveNext()) {
125 if (iterator.value.getState(result) != CacheState.FLUSHED) {
126 nonFlushedCount++;
127 }
128 }
129 expect(nonFlushedCount, expectedCount);
130 }
131
132 _assertNonFlushedCount(size, cache);
133 int newSize = size - 2;
134 partition.maxCacheSize = newSize;
135 _assertNonFlushedCount(newSize, cache);
136 }
137
138 void test_size() { 89 void test_size() {
139 AnalysisCache cache = createCache(); 90 AnalysisCache cache = createCache();
140 int size = 4; 91 int size = 4;
141 for (int i = 0; i < size; i++) { 92 for (int i = 0; i < size; i++) {
142 AnalysisTarget target = new TestSource("/test$i.dart"); 93 AnalysisTarget target = new TestSource("/test$i.dart");
143 cache.put(target, new CacheEntry()); 94 cache.put(target, new CacheEntry());
144 } 95 }
145 expect(cache.size(), size); 96 expect(cache.size(), size);
146 } 97 }
147 } 98 }
(...skipping 31 matching lines...) Expand 10 before | Expand all | Expand 10 after
179 } 130 }
180 131
181 test_fixExceptionState_noError_noException() { 132 test_fixExceptionState_noError_noException() {
182 ResultDescriptor result = new ResultDescriptor('test', null); 133 ResultDescriptor result = new ResultDescriptor('test', null);
183 CacheEntry entry = new CacheEntry(); 134 CacheEntry entry = new CacheEntry();
184 entry.fixExceptionState(); 135 entry.fixExceptionState();
185 expect(entry.getState(result), CacheState.INVALID); 136 expect(entry.getState(result), CacheState.INVALID);
186 expect(entry.exception, isNull); 137 expect(entry.exception, isNull);
187 } 138 }
188 139
189 test_flushAstStructures() { 140 test_getMemento_noResult() {
190 ResultDescriptor result = new ResultDescriptor('test', null); 141 String defaultValue = 'value';
142 ResultDescriptor result = new ResultDescriptor('test', defaultValue);
191 CacheEntry entry = new CacheEntry(); 143 CacheEntry entry = new CacheEntry();
192 entry.setValue( 144 expect(entry.getMemento(result), null);
193 result, new NullLiteral(null), TargetedResult.EMPTY_LIST, null);
194 expect(entry.hasAstStructure, true);
195 entry.flushAstStructures();
196 expect(entry.hasAstStructure, false);
197 } 145 }
198 146
199 test_getState() { 147 test_getState() {
200 ResultDescriptor result = new ResultDescriptor('test', null); 148 ResultDescriptor result = new ResultDescriptor('test', null);
201 CacheEntry entry = new CacheEntry(); 149 CacheEntry entry = new CacheEntry();
202 expect(entry.getState(result), CacheState.INVALID); 150 expect(entry.getState(result), CacheState.INVALID);
203 } 151 }
204 152
205 test_getValue() { 153 test_getValue() {
206 String defaultValue = 'value'; 154 String defaultValue = 'value';
207 ResultDescriptor result = new ResultDescriptor('test', defaultValue); 155 ResultDescriptor result = new ResultDescriptor('test', defaultValue);
208 CacheEntry entry = new CacheEntry(); 156 CacheEntry entry = new CacheEntry();
209 expect(entry.getValue(result), defaultValue); 157 expect(entry.getValue(result), defaultValue);
210 } 158 }
211 159
212 test_getMemento_noResult() { 160 test_getValue_flushResults() {
213 String defaultValue = 'value'; 161 ResultCachingPolicy cachingPolicy = new SimpleResultCachingPolicy(2, 2);
214 ResultDescriptor result = new ResultDescriptor('test', defaultValue); 162 ResultDescriptor descriptor1 =
163 new ResultDescriptor('result1', null, cachingPolicy: cachingPolicy);
164 ResultDescriptor descriptor2 =
165 new ResultDescriptor('result2', null, cachingPolicy: cachingPolicy);
166 ResultDescriptor descriptor3 =
167 new ResultDescriptor('result3', null, cachingPolicy: cachingPolicy);
168 AnalysisTarget target = new TestSource();
169 InternalAnalysisContext context = new _InternalAnalysisContextMock();
170 when(context.priorityTargets).thenReturn([]);
171 AnalysisCache cache = createCache(context: context);
215 CacheEntry entry = new CacheEntry(); 172 CacheEntry entry = new CacheEntry();
216 expect(entry.getMemento(result), null); 173 cache.put(target, entry);
217 } 174 {
218 175 entry.setValue(descriptor1, 1, TargetedResult.EMPTY_LIST, null);
219 test_hasAstStructure_false() { 176 expect(entry.getState(descriptor1), CacheState.VALID);
220 CacheEntry entry = new CacheEntry(); 177 }
221 expect(entry.hasAstStructure, false); 178 {
222 } 179 entry.setValue(descriptor2, 2, TargetedResult.EMPTY_LIST, null);
223 180 expect(entry.getState(descriptor1), CacheState.VALID);
224 test_hasAstStructure_true() { 181 expect(entry.getState(descriptor2), CacheState.VALID);
225 ResultDescriptor result = new ResultDescriptor('test', null); 182 }
226 CacheEntry entry = new CacheEntry(); 183 // get descriptor1, so that descriptor2 will be flushed
227 entry.setValue( 184 entry.getValue(descriptor1);
228 result, new NullLiteral(null), TargetedResult.EMPTY_LIST, null); 185 {
229 expect(entry.hasAstStructure, true); 186 entry.setValue(descriptor3, 3, TargetedResult.EMPTY_LIST, null);
187 expect(entry.getState(descriptor1), CacheState.VALID);
188 expect(entry.getState(descriptor2), CacheState.FLUSHED);
189 expect(entry.getState(descriptor3), CacheState.VALID);
190 }
230 } 191 }
231 192
232 test_hasErrorState_false() { 193 test_hasErrorState_false() {
233 CacheEntry entry = new CacheEntry(); 194 CacheEntry entry = new CacheEntry();
234 expect(entry.hasErrorState(), false); 195 expect(entry.hasErrorState(), false);
235 } 196 }
236 197
237 test_hasErrorState_true() { 198 test_hasErrorState_true() {
238 ResultDescriptor result = new ResultDescriptor('test', null); 199 ResultDescriptor result = new ResultDescriptor('test', null);
239 CaughtException exception = new CaughtException(null, null); 200 CaughtException exception = new CaughtException(null, null);
(...skipping 191 matching lines...) Expand 10 before | Expand all | Expand 10 after
431 ResultDescriptor result = new ResultDescriptor('test', null); 392 ResultDescriptor result = new ResultDescriptor('test', null);
432 String value = 'value'; 393 String value = 'value';
433 String memento = 'main() {}'; 394 String memento = 'main() {}';
434 CacheEntry entry = new CacheEntry(); 395 CacheEntry entry = new CacheEntry();
435 entry.setValue(result, value, TargetedResult.EMPTY_LIST, memento); 396 entry.setValue(result, value, TargetedResult.EMPTY_LIST, memento);
436 expect(entry.getState(result), CacheState.VALID); 397 expect(entry.getState(result), CacheState.VALID);
437 expect(entry.getValue(result), value); 398 expect(entry.getValue(result), value);
438 expect(entry.getMemento(result), memento); 399 expect(entry.getMemento(result), memento);
439 } 400 }
440 401
402 test_setValue_flushResults() {
403 ResultCachingPolicy cachingPolicy = new SimpleResultCachingPolicy(2, 2);
404 ResultDescriptor descriptor1 =
405 new ResultDescriptor('result1', null, cachingPolicy: cachingPolicy);
406 ResultDescriptor descriptor2 =
407 new ResultDescriptor('result2', null, cachingPolicy: cachingPolicy);
408 ResultDescriptor descriptor3 =
409 new ResultDescriptor('result3', null, cachingPolicy: cachingPolicy);
410 AnalysisTarget target = new TestSource();
411 InternalAnalysisContext context = new _InternalAnalysisContextMock();
412 when(context.priorityTargets).thenReturn([]);
413 AnalysisCache cache = createCache(context: context);
414 CacheEntry entry = new CacheEntry();
415 cache.put(target, entry);
416 {
417 entry.setValue(descriptor1, 1, TargetedResult.EMPTY_LIST, null);
418 expect(entry.getState(descriptor1), CacheState.VALID);
419 }
420 {
421 entry.setValue(descriptor2, 2, TargetedResult.EMPTY_LIST, null);
422 expect(entry.getState(descriptor1), CacheState.VALID);
423 expect(entry.getState(descriptor2), CacheState.VALID);
424 }
425 {
426 entry.setValue(descriptor3, 3, TargetedResult.EMPTY_LIST, null);
427 expect(entry.getState(descriptor1), CacheState.FLUSHED);
428 expect(entry.getState(descriptor2), CacheState.VALID);
429 expect(entry.getState(descriptor3), CacheState.VALID);
430 }
431 }
432
441 test_setValue_invalidateDependent() { 433 test_setValue_invalidateDependent() {
442 AnalysisCache cache = createCache(); 434 AnalysisCache cache = createCache();
443 AnalysisTarget target = new TestSource(); 435 AnalysisTarget target = new TestSource();
444 CacheEntry entry = new CacheEntry(); 436 CacheEntry entry = new CacheEntry();
445 cache.put(target, entry); 437 cache.put(target, entry);
446 ResultDescriptor result1 = new ResultDescriptor('result1', -1); 438 ResultDescriptor result1 = new ResultDescriptor('result1', -1);
447 ResultDescriptor result2 = new ResultDescriptor('result2', -2); 439 ResultDescriptor result2 = new ResultDescriptor('result2', -2);
448 ResultDescriptor result3 = new ResultDescriptor('result3', -3); 440 ResultDescriptor result3 = new ResultDescriptor('result3', -3);
449 ResultDescriptor result4 = new ResultDescriptor('result4', -4); 441 ResultDescriptor result4 = new ResultDescriptor('result4', -4);
450 // set results, all of them are VALID 442 // set results, all of them are VALID
(...skipping 59 matching lines...) Expand 10 before | Expand all | Expand 10 after
510 502
511 test_toString_nonEmpty() { 503 test_toString_nonEmpty() {
512 String value = 'value'; 504 String value = 'value';
513 ResultDescriptor result = new ResultDescriptor('test', null); 505 ResultDescriptor result = new ResultDescriptor('test', null);
514 CacheEntry entry = new CacheEntry(); 506 CacheEntry entry = new CacheEntry();
515 entry.setValue(result, value, TargetedResult.EMPTY_LIST, null); 507 entry.setValue(result, value, TargetedResult.EMPTY_LIST, null);
516 expect(entry.toString(), isNotNull); 508 expect(entry.toString(), isNotNull);
517 } 509 }
518 } 510 }
519 511
512 @reflectiveTest
513 class CacheFlushManagerTest {
514 CacheFlushManager manager = new CacheFlushManager(
515 new SimpleResultCachingPolicy(15, 3), (AnalysisTarget target) => false);
516
517 test_madeActive() {
518 manager.madeActive();
519 expect(manager.maxSize, 15);
520 }
521
522 test_madeIdle() {
523 manager.madeActive();
524 AnalysisTarget target = new TestSource();
525 // prepare TargetedResult(s)
526 List<TargetedResult> results = <TargetedResult>[];
527 for (int i = 0; i < 15; i++) {
528 ResultDescriptor descriptor = new ResultDescriptor('result$i', null);
529 results.add(new TargetedResult(target, descriptor));
530 }
531 // notify about storing TargetedResult(s)
532 for (TargetedResult result in results) {
533 manager.resultStored(result, null);
534 }
535 expect(manager.recentlyUsed, results);
536 expect(manager.currentSize, 15);
537 // make idle
538 List<TargetedResult> resultsToFlush = manager.madeIdle();
539 expect(manager.maxSize, 3);
540 expect(manager.recentlyUsed, results.skip(15 - 3));
541 expect(resultsToFlush, results.take(15 - 3));
542 }
543
544 test_new() {
545 expect(manager.maxActiveSize, 15);
546 expect(manager.maxIdleSize, 3);
547 expect(manager.maxSize, 3);
548 expect(manager.currentSize, 0);
549 expect(manager.recentlyUsed, isEmpty);
550 }
551
552 test_resultAccessed() {
553 ResultDescriptor descriptor1 = new ResultDescriptor('result1', null);
554 ResultDescriptor descriptor2 = new ResultDescriptor('result2', null);
555 ResultDescriptor descriptor3 = new ResultDescriptor('result3', null);
556 AnalysisTarget target = new TestSource();
557 TargetedResult result1 = new TargetedResult(target, descriptor1);
558 TargetedResult result2 = new TargetedResult(target, descriptor2);
559 TargetedResult result3 = new TargetedResult(target, descriptor3);
560 manager.resultStored(result1, null);
561 manager.resultStored(result2, null);
562 manager.resultStored(result3, null);
563 expect(manager.currentSize, 3);
564 expect(manager.recentlyUsed, orderedEquals([result1, result2, result3]));
565 // access result2
566 manager.resultAccessed(result2);
567 expect(manager.currentSize, 3);
568 expect(manager.recentlyUsed, orderedEquals([result1, result3, result2]));
569 }
570
571 test_resultAccessed_noSuchResult() {
572 ResultDescriptor descriptor1 = new ResultDescriptor('result1', null);
573 ResultDescriptor descriptor2 = new ResultDescriptor('result2', null);
574 ResultDescriptor descriptor3 = new ResultDescriptor('result3', null);
575 AnalysisTarget target = new TestSource();
576 TargetedResult result1 = new TargetedResult(target, descriptor1);
577 TargetedResult result2 = new TargetedResult(target, descriptor2);
578 TargetedResult result3 = new TargetedResult(target, descriptor3);
579 manager.resultStored(result1, null);
580 manager.resultStored(result2, null);
581 expect(manager.currentSize, 2);
582 expect(manager.recentlyUsed, orderedEquals([result1, result2]));
583 // access result3, no-op
584 manager.resultAccessed(result3);
585 expect(manager.currentSize, 2);
586 expect(manager.recentlyUsed, orderedEquals([result1, result2]));
587 }
588
589 test_resultStored() {
590 ResultDescriptor descriptor1 = new ResultDescriptor('result1', null);
591 ResultDescriptor descriptor2 = new ResultDescriptor('result2', null);
592 ResultDescriptor descriptor3 = new ResultDescriptor('result3', null);
593 ResultDescriptor descriptor4 = new ResultDescriptor('result4', null);
594 AnalysisTarget target = new TestSource();
595 TargetedResult result1 = new TargetedResult(target, descriptor1);
596 TargetedResult result2 = new TargetedResult(target, descriptor2);
597 TargetedResult result3 = new TargetedResult(target, descriptor3);
598 TargetedResult result4 = new TargetedResult(target, descriptor4);
599 manager.resultStored(result1, null);
600 manager.resultStored(result2, null);
601 manager.resultStored(result3, null);
602 expect(manager.currentSize, 3);
603 expect(manager.recentlyUsed, orderedEquals([result1, result2, result3]));
604 // store result2 again
605 {
606 List<TargetedResult> resultsToFlush = manager.resultStored(result2, null);
607 expect(resultsToFlush, isEmpty);
608 expect(manager.currentSize, 3);
609 expect(manager.recentlyUsed, orderedEquals([result1, result3, result2]));
610 }
611 // store result4
612 {
613 List<TargetedResult> resultsToFlush = manager.resultStored(result4, null);
614 expect(resultsToFlush, [result1]);
615 expect(manager.currentSize, 3);
616 expect(manager.recentlyUsed, orderedEquals([result3, result2, result4]));
617 expect(manager.resultSizeMap, {result3: 1, result2: 1, result4: 1});
618 }
619 }
620
621 test_targetRemoved() {
622 ResultDescriptor descriptor1 = new ResultDescriptor('result1', null);
623 ResultDescriptor descriptor2 = new ResultDescriptor('result2', null);
624 ResultDescriptor descriptor3 = new ResultDescriptor('result3', null);
625 AnalysisTarget target1 = new TestSource('a.dart');
626 AnalysisTarget target2 = new TestSource('b.dart');
627 TargetedResult result1 = new TargetedResult(target1, descriptor1);
628 TargetedResult result2 = new TargetedResult(target2, descriptor2);
629 TargetedResult result3 = new TargetedResult(target1, descriptor3);
630 manager.resultStored(result1, null);
631 manager.resultStored(result2, null);
632 manager.resultStored(result3, null);
633 expect(manager.currentSize, 3);
634 expect(manager.recentlyUsed, orderedEquals([result1, result2, result3]));
635 expect(manager.resultSizeMap, {result1: 1, result2: 1, result3: 1});
636 // remove target1
637 {
638 manager.targetRemoved(target1);
639 expect(manager.currentSize, 1);
640 expect(manager.recentlyUsed, orderedEquals([result2]));
641 expect(manager.resultSizeMap, {result2: 1});
642 }
643 // remove target2
644 {
645 manager.targetRemoved(target2);
646 expect(manager.currentSize, 0);
647 expect(manager.recentlyUsed, isEmpty);
648 expect(manager.resultSizeMap, isEmpty);
649 }
650 }
651 }
652
520 abstract class CachePartitionTest extends EngineTestCase { 653 abstract class CachePartitionTest extends EngineTestCase {
521 CachePartition createPartition([CacheRetentionPolicy policy = null]); 654 CachePartition createPartition();
522 655
523 void test_creation() { 656 void test_creation() {
524 expect(createPartition(), isNotNull); 657 expect(createPartition(), isNotNull);
525 } 658 }
526 659
527 void test_entrySet() { 660 void test_entrySet() {
528 CachePartition partition = createPartition(); 661 CachePartition partition = createPartition();
529 AnalysisTarget target = new TestSource(); 662 AnalysisTarget target = new TestSource();
530 CacheEntry entry = new CacheEntry(); 663 CacheEntry entry = new CacheEntry();
531 partition.put(target, entry); 664 partition.put(target, entry);
(...skipping 20 matching lines...) Expand all
552 685
553 void test_remove() { 686 void test_remove() {
554 CachePartition partition = createPartition(); 687 CachePartition partition = createPartition();
555 AnalysisTarget target = new TestSource(); 688 AnalysisTarget target = new TestSource();
556 CacheEntry entry = new CacheEntry(); 689 CacheEntry entry = new CacheEntry();
557 partition.put(target, entry); 690 partition.put(target, entry);
558 expect(partition.get(target), entry); 691 expect(partition.get(target), entry);
559 partition.remove(target); 692 partition.remove(target);
560 expect(partition.get(target), isNull); 693 expect(partition.get(target), isNull);
561 } 694 }
562
563 void test_setMaxCacheSize() {
564 CachePartition partition =
565 createPartition(new TestCacheRetentionPolicy(RetentionPriority.LOW));
566 ResultDescriptor result = new ResultDescriptor('result', null);
567 NullLiteral node = new NullLiteral(null);
568 int size = 6; // Must be <= partition.maxCacheSize
569 for (int i = 0; i < size; i++) {
570 AnalysisTarget target = new TestSource("/test$i.dart");
571 CacheEntry entry = new CacheEntry();
572 entry.setValue(result, node, TargetedResult.EMPTY_LIST, null);
573 partition.put(target, entry);
574 partition.accessedAst(target);
575 }
576
577 void assertNonFlushedCount(int expectedCount, CachePartition partition) {
578 int nonFlushedCount = 0;
579 Map<AnalysisTarget, CacheEntry> entryMap = partition.map;
580 entryMap.values.forEach((CacheEntry entry) {
581 if (entry.getState(result) != CacheState.FLUSHED) {
582 nonFlushedCount++;
583 }
584 });
585 expect(nonFlushedCount, expectedCount);
586 }
587
588 assertNonFlushedCount(size, partition);
589 int newSize = size - 2;
590 partition.maxCacheSize = newSize;
591 assertNonFlushedCount(newSize, partition);
592 }
593
594 void test_size() {
595 CachePartition partition = createPartition();
596 int size = 4;
597 for (int i = 0; i < size; i++) {
598 AnalysisTarget target = new TestSource("/test$i.dart");
599 partition.put(target, new CacheEntry());
600 partition.accessedAst(target);
601 }
602 expect(partition.size(), size);
603 }
604 } 695 }
605 696
606 @reflectiveTest 697 @reflectiveTest
607 class ResultDataTest extends EngineTestCase { 698 class ResultDataTest extends EngineTestCase {
608 test_creation() { 699 test_creation() {
609 String value = 'value'; 700 String value = 'value';
610 ResultData data = new ResultData(new ResultDescriptor('test', value)); 701 ResultData data = new ResultData(new ResultDescriptor('test', value));
611 expect(data, isNotNull); 702 expect(data, isNotNull);
612 expect(data.state, CacheState.INVALID); 703 expect(data.state, CacheState.INVALID);
613 expect(data.value, value); 704 expect(data.value, value);
614 } 705 }
615 } 706 }
616 707
617 @reflectiveTest 708 @reflectiveTest
618 class SdkCachePartitionTest extends CachePartitionTest { 709 class SdkCachePartitionTest extends CachePartitionTest {
619 CachePartition createPartition([CacheRetentionPolicy policy = null]) { 710 CachePartition createPartition() {
620 return new SdkCachePartition(null, 8); 711 return new SdkCachePartition(null);
621 } 712 }
622 713
623 void test_contains_false() { 714 void test_contains_false() {
624 CachePartition partition = createPartition(); 715 CachePartition partition = createPartition();
625 AnalysisTarget target = new TestSource(); 716 AnalysisTarget target = new TestSource();
626 expect(partition.contains(target), isFalse); 717 expect(partition.contains(target), isFalse);
627 } 718 }
628 719
629 void test_contains_true() { 720 void test_contains_true() {
630 SdkCachePartition partition = new SdkCachePartition(null, 8); 721 SdkCachePartition partition = new SdkCachePartition(null);
631 SourceFactory factory = new SourceFactory( 722 SourceFactory factory = new SourceFactory(
632 [new DartUriResolver(DirectoryBasedDartSdk.defaultSdk)]); 723 [new DartUriResolver(DirectoryBasedDartSdk.defaultSdk)]);
633 AnalysisTarget target = factory.forUri("dart:core"); 724 AnalysisTarget target = factory.forUri("dart:core");
634 expect(partition.contains(target), isTrue); 725 expect(partition.contains(target), isTrue);
635 } 726 }
636 } 727 }
637 728
638 @reflectiveTest 729 @reflectiveTest
639 class TestCacheRetentionPolicy extends CacheRetentionPolicy {
640 final RetentionPriority policy;
641
642 TestCacheRetentionPolicy([this.policy = RetentionPriority.MEDIUM]);
643
644 @override
645 RetentionPriority getAstPriority(AnalysisTarget target, CacheEntry entry) =>
646 policy;
647 }
648
649 @reflectiveTest
650 class UniversalCachePartitionTest extends CachePartitionTest { 730 class UniversalCachePartitionTest extends CachePartitionTest {
651 CachePartition createPartition([CacheRetentionPolicy policy = null]) { 731 CachePartition createPartition() {
652 return new UniversalCachePartition(null, 8, policy); 732 return new UniversalCachePartition(null);
653 } 733 }
654 734
655 void test_contains() { 735 void test_contains() {
656 UniversalCachePartition partition = 736 UniversalCachePartition partition = new UniversalCachePartition(null);
657 new UniversalCachePartition(null, 8, null);
658 TestSource source = new TestSource(); 737 TestSource source = new TestSource();
659 expect(partition.contains(source), isTrue); 738 expect(partition.contains(source), isTrue);
660 } 739 }
661 } 740 }
741
742 class _InternalAnalysisContextMock extends TypedMock
743 implements InternalAnalysisContext {
744 noSuchMethod(Invocation invocation) => super.noSuchMethod(invocation);
745 }
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698