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

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: Fixes for review comments. 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 }
148 99
149 @reflectiveTest 100 @reflectiveTest
150 class CacheEntryTest extends EngineTestCase { 101 class CacheEntryTest extends EngineTestCase {
102 InternalAnalysisContext context;
103 AnalysisCache cache;
104
105 void setUp() {
106 context = new _InternalAnalysisContextMock();
107 when(context.priorityTargets).thenReturn([]);
108 cache = createCache(context: context);
109 // when(context.analysisCache).thenReturn(cache);
110 }
111
151 test_explicitlyAdded() { 112 test_explicitlyAdded() {
152 CacheEntry entry = new CacheEntry(); 113 CacheEntry entry = new CacheEntry();
153 expect(entry.explicitlyAdded, false); 114 expect(entry.explicitlyAdded, false);
154 entry.explicitlyAdded = true; 115 entry.explicitlyAdded = true;
155 expect(entry.explicitlyAdded, true); 116 expect(entry.explicitlyAdded, true);
156 } 117 }
157 118
158 test_fixExceptionState_error_exception() { 119 test_fixExceptionState_error_exception() {
159 ResultDescriptor result = new ResultDescriptor('test', null); 120 ResultDescriptor result = new ResultDescriptor('test', null);
160 CaughtException exception = new CaughtException(null, null); 121 CaughtException exception = new CaughtException(null, null);
(...skipping 18 matching lines...) Expand all
179 } 140 }
180 141
181 test_fixExceptionState_noError_noException() { 142 test_fixExceptionState_noError_noException() {
182 ResultDescriptor result = new ResultDescriptor('test', null); 143 ResultDescriptor result = new ResultDescriptor('test', null);
183 CacheEntry entry = new CacheEntry(); 144 CacheEntry entry = new CacheEntry();
184 entry.fixExceptionState(); 145 entry.fixExceptionState();
185 expect(entry.getState(result), CacheState.INVALID); 146 expect(entry.getState(result), CacheState.INVALID);
186 expect(entry.exception, isNull); 147 expect(entry.exception, isNull);
187 } 148 }
188 149
189 test_flushAstStructures() { 150 test_getMemento_noResult() {
190 ResultDescriptor result = new ResultDescriptor('test', null); 151 String defaultValue = 'value';
152 ResultDescriptor result = new ResultDescriptor('test', defaultValue);
191 CacheEntry entry = new CacheEntry(); 153 CacheEntry entry = new CacheEntry();
192 entry.setValue( 154 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 } 155 }
198 156
199 test_getState() { 157 test_getState() {
200 ResultDescriptor result = new ResultDescriptor('test', null); 158 ResultDescriptor result = new ResultDescriptor('test', null);
201 CacheEntry entry = new CacheEntry(); 159 CacheEntry entry = new CacheEntry();
202 expect(entry.getState(result), CacheState.INVALID); 160 expect(entry.getState(result), CacheState.INVALID);
203 } 161 }
204 162
205 test_getValue() { 163 test_getValue() {
206 String defaultValue = 'value'; 164 String defaultValue = 'value';
207 ResultDescriptor result = new ResultDescriptor('test', defaultValue); 165 ResultDescriptor result = new ResultDescriptor('test', defaultValue);
208 CacheEntry entry = new CacheEntry(); 166 CacheEntry entry = new CacheEntry();
209 expect(entry.getValue(result), defaultValue); 167 expect(entry.getValue(result), defaultValue);
210 } 168 }
211 169
212 test_getMemento_noResult() { 170 test_getValue_flushResults() {
213 String defaultValue = 'value'; 171 ResultCachingPolicy cachingPolicy = new SimpleResultCachingPolicy(2, 2);
214 ResultDescriptor result = new ResultDescriptor('test', defaultValue); 172 ResultDescriptor descriptor1 =
173 new ResultDescriptor('result1', null, cachingPolicy: cachingPolicy);
174 ResultDescriptor descriptor2 =
175 new ResultDescriptor('result2', null, cachingPolicy: cachingPolicy);
176 ResultDescriptor descriptor3 =
177 new ResultDescriptor('result3', null, cachingPolicy: cachingPolicy);
178 AnalysisTarget target = new TestSource();
215 CacheEntry entry = new CacheEntry(); 179 CacheEntry entry = new CacheEntry();
216 expect(entry.getMemento(result), null); 180 cache.put(target, entry);
217 } 181 {
218 182 entry.setValue(descriptor1, 1, TargetedResult.EMPTY_LIST, null);
219 test_hasAstStructure_false() { 183 expect(entry.getState(descriptor1), CacheState.VALID);
220 CacheEntry entry = new CacheEntry(); 184 }
221 expect(entry.hasAstStructure, false); 185 {
222 } 186 entry.setValue(descriptor2, 2, TargetedResult.EMPTY_LIST, null);
223 187 expect(entry.getState(descriptor1), CacheState.VALID);
224 test_hasAstStructure_true() { 188 expect(entry.getState(descriptor2), CacheState.VALID);
225 ResultDescriptor result = new ResultDescriptor('test', null); 189 }
226 CacheEntry entry = new CacheEntry(); 190 // get descriptor1, so that descriptor2 will be flushed
227 entry.setValue( 191 entry.getValue(descriptor1);
228 result, new NullLiteral(null), TargetedResult.EMPTY_LIST, null); 192 {
229 expect(entry.hasAstStructure, true); 193 entry.setValue(descriptor3, 3, TargetedResult.EMPTY_LIST, null);
194 expect(entry.getState(descriptor1), CacheState.VALID);
195 expect(entry.getState(descriptor2), CacheState.FLUSHED);
196 expect(entry.getState(descriptor3), CacheState.VALID);
197 }
230 } 198 }
231 199
232 test_hasErrorState_false() { 200 test_hasErrorState_false() {
233 CacheEntry entry = new CacheEntry(); 201 CacheEntry entry = new CacheEntry();
234 expect(entry.hasErrorState(), false); 202 expect(entry.hasErrorState(), false);
235 } 203 }
236 204
237 test_hasErrorState_true() { 205 test_hasErrorState_true() {
238 ResultDescriptor result = new ResultDescriptor('test', null); 206 ResultDescriptor result = new ResultDescriptor('test', null);
239 CaughtException exception = new CaughtException(null, null); 207 CaughtException exception = new CaughtException(null, null);
(...skipping 27 matching lines...) Expand all
267 expect(entry.exception, exception); 235 expect(entry.exception, exception);
268 expect(entry.getState(result1), CacheState.ERROR); 236 expect(entry.getState(result1), CacheState.ERROR);
269 expect(entry.getState(result2), CacheState.ERROR); 237 expect(entry.getState(result2), CacheState.ERROR);
270 expect(entry.getState(result3), CacheState.VALID); 238 expect(entry.getState(result3), CacheState.VALID);
271 expect(entry.getValue(result1), 1); 239 expect(entry.getValue(result1), 1);
272 expect(entry.getValue(result2), 2); 240 expect(entry.getValue(result2), 2);
273 expect(entry.getValue(result3), 30); 241 expect(entry.getValue(result3), 30);
274 } 242 }
275 243
276 test_setErrorState_invalidateDependent() { 244 test_setErrorState_invalidateDependent() {
277 AnalysisCache cache = createCache();
278 AnalysisTarget target = new TestSource(); 245 AnalysisTarget target = new TestSource();
279 CacheEntry entry = new CacheEntry(); 246 CacheEntry entry = new CacheEntry();
280 cache.put(target, entry); 247 cache.put(target, entry);
281 ResultDescriptor result1 = new ResultDescriptor('result1', -1); 248 ResultDescriptor result1 = new ResultDescriptor('result1', -1);
282 ResultDescriptor result2 = new ResultDescriptor('result2', -2); 249 ResultDescriptor result2 = new ResultDescriptor('result2', -2);
283 ResultDescriptor result3 = new ResultDescriptor('result3', -3); 250 ResultDescriptor result3 = new ResultDescriptor('result3', -3);
284 ResultDescriptor result4 = new ResultDescriptor('result4', -4); 251 ResultDescriptor result4 = new ResultDescriptor('result4', -4);
285 // set results, all of them are VALID 252 // set results, all of them are VALID
286 entry.setValue(result1, 111, TargetedResult.EMPTY_LIST, null); 253 entry.setValue(result1, 111, TargetedResult.EMPTY_LIST, null);
287 entry.setValue(result2, 222, [new TargetedResult(target, result1)], null); 254 entry.setValue(result2, 222, [new TargetedResult(target, result1)], null);
(...skipping 93 matching lines...) Expand 10 before | Expand all | Expand 10 after
381 expect(entry.getState(result), CacheState.VALID); 348 expect(entry.getState(result), CacheState.VALID);
382 expect(entry.getValue(result), 10); 349 expect(entry.getValue(result), 10);
383 // set INVALID 350 // set INVALID
384 entry.setState(result, CacheState.INVALID); 351 entry.setState(result, CacheState.INVALID);
385 expect(entry.getState(result), CacheState.INVALID); 352 expect(entry.getState(result), CacheState.INVALID);
386 expect(entry.getValue(result), 1); 353 expect(entry.getValue(result), 1);
387 expect(entry.getMemento(result), memento); 354 expect(entry.getMemento(result), memento);
388 } 355 }
389 356
390 test_setState_invalid_invalidateDependent() { 357 test_setState_invalid_invalidateDependent() {
391 AnalysisCache cache = createCache();
392 AnalysisTarget target = new TestSource(); 358 AnalysisTarget target = new TestSource();
393 CacheEntry entry = new CacheEntry(); 359 CacheEntry entry = new CacheEntry();
394 cache.put(target, entry); 360 cache.put(target, entry);
395 ResultDescriptor result1 = new ResultDescriptor('result1', -1); 361 ResultDescriptor result1 = new ResultDescriptor('result1', -1);
396 ResultDescriptor result2 = new ResultDescriptor('result2', -2); 362 ResultDescriptor result2 = new ResultDescriptor('result2', -2);
397 ResultDescriptor result3 = new ResultDescriptor('result3', -3); 363 ResultDescriptor result3 = new ResultDescriptor('result3', -3);
398 ResultDescriptor result4 = new ResultDescriptor('result4', -4); 364 ResultDescriptor result4 = new ResultDescriptor('result4', -4);
399 // set results, all of them are VALID 365 // set results, all of them are VALID
400 entry.setValue(result1, 111, TargetedResult.EMPTY_LIST, null); 366 entry.setValue(result1, 111, TargetedResult.EMPTY_LIST, null);
401 entry.setValue(result2, 222, [new TargetedResult(target, result1)], null); 367 entry.setValue(result2, 222, [new TargetedResult(target, result1)], null);
(...skipping 29 matching lines...) Expand all
431 ResultDescriptor result = new ResultDescriptor('test', null); 397 ResultDescriptor result = new ResultDescriptor('test', null);
432 String value = 'value'; 398 String value = 'value';
433 String memento = 'main() {}'; 399 String memento = 'main() {}';
434 CacheEntry entry = new CacheEntry(); 400 CacheEntry entry = new CacheEntry();
435 entry.setValue(result, value, TargetedResult.EMPTY_LIST, memento); 401 entry.setValue(result, value, TargetedResult.EMPTY_LIST, memento);
436 expect(entry.getState(result), CacheState.VALID); 402 expect(entry.getState(result), CacheState.VALID);
437 expect(entry.getValue(result), value); 403 expect(entry.getValue(result), value);
438 expect(entry.getMemento(result), memento); 404 expect(entry.getMemento(result), memento);
439 } 405 }
440 406
441 test_setValue_invalidateDependent() { 407 test_setValue_flushResults() {
442 AnalysisCache cache = createCache(); 408 ResultCachingPolicy cachingPolicy = new SimpleResultCachingPolicy(2, 2);
409 ResultDescriptor descriptor1 =
410 new ResultDescriptor('result1', null, cachingPolicy: cachingPolicy);
411 ResultDescriptor descriptor2 =
412 new ResultDescriptor('result2', null, cachingPolicy: cachingPolicy);
413 ResultDescriptor descriptor3 =
414 new ResultDescriptor('result3', null, cachingPolicy: cachingPolicy);
443 AnalysisTarget target = new TestSource(); 415 AnalysisTarget target = new TestSource();
444 CacheEntry entry = new CacheEntry(); 416 CacheEntry entry = new CacheEntry();
445 cache.put(target, entry); 417 cache.put(target, entry);
418 {
419 entry.setValue(descriptor1, 1, TargetedResult.EMPTY_LIST, null);
420 expect(entry.getState(descriptor1), CacheState.VALID);
421 }
422 {
423 entry.setValue(descriptor2, 2, TargetedResult.EMPTY_LIST, null);
424 expect(entry.getState(descriptor1), CacheState.VALID);
425 expect(entry.getState(descriptor2), CacheState.VALID);
426 }
427 {
428 entry.setValue(descriptor3, 3, TargetedResult.EMPTY_LIST, null);
429 expect(entry.getState(descriptor1), CacheState.FLUSHED);
430 expect(entry.getState(descriptor2), CacheState.VALID);
431 expect(entry.getState(descriptor3), CacheState.VALID);
432 }
433 }
434
435 test_setValue_invalidateDependent() {
436 AnalysisTarget target = new TestSource();
437 CacheEntry entry = new CacheEntry();
438 cache.put(target, entry);
446 ResultDescriptor result1 = new ResultDescriptor('result1', -1); 439 ResultDescriptor result1 = new ResultDescriptor('result1', -1);
447 ResultDescriptor result2 = new ResultDescriptor('result2', -2); 440 ResultDescriptor result2 = new ResultDescriptor('result2', -2);
448 ResultDescriptor result3 = new ResultDescriptor('result3', -3); 441 ResultDescriptor result3 = new ResultDescriptor('result3', -3);
449 ResultDescriptor result4 = new ResultDescriptor('result4', -4); 442 ResultDescriptor result4 = new ResultDescriptor('result4', -4);
450 // set results, all of them are VALID 443 // set results, all of them are VALID
451 entry.setValue(result1, 111, TargetedResult.EMPTY_LIST, null); 444 entry.setValue(result1, 111, TargetedResult.EMPTY_LIST, null);
452 entry.setValue(result2, 222, [new TargetedResult(target, result1)], null); 445 entry.setValue(result2, 222, [new TargetedResult(target, result1)], null);
453 entry.setValue(result3, 333, [new TargetedResult(target, result2)], null); 446 entry.setValue(result3, 333, [new TargetedResult(target, result2)], null);
454 entry.setValue(result4, 444, [], null); 447 entry.setValue(result4, 444, [], null);
455 expect(entry.getState(result1), CacheState.VALID); 448 expect(entry.getState(result1), CacheState.VALID);
(...skipping 10 matching lines...) Expand all
466 expect(entry.getState(result2), CacheState.INVALID); 459 expect(entry.getState(result2), CacheState.INVALID);
467 expect(entry.getState(result3), CacheState.INVALID); 460 expect(entry.getState(result3), CacheState.INVALID);
468 expect(entry.getState(result4), CacheState.VALID); 461 expect(entry.getState(result4), CacheState.VALID);
469 expect(entry.getValue(result1), 1111); 462 expect(entry.getValue(result1), 1111);
470 expect(entry.getValue(result2), -2); 463 expect(entry.getValue(result2), -2);
471 expect(entry.getValue(result3), -3); 464 expect(entry.getValue(result3), -3);
472 expect(entry.getValue(result4), 444); 465 expect(entry.getValue(result4), 444);
473 } 466 }
474 467
475 test_setValue_invalidateDependent2() { 468 test_setValue_invalidateDependent2() {
476 AnalysisCache cache = createCache();
477 AnalysisTarget target1 = new TestSource('a'); 469 AnalysisTarget target1 = new TestSource('a');
478 AnalysisTarget target2 = new TestSource('b'); 470 AnalysisTarget target2 = new TestSource('b');
479 CacheEntry entry1 = new CacheEntry(); 471 CacheEntry entry1 = new CacheEntry();
480 CacheEntry entry2 = new CacheEntry(); 472 CacheEntry entry2 = new CacheEntry();
481 cache.put(target1, entry1); 473 cache.put(target1, entry1);
482 cache.put(target2, entry2); 474 cache.put(target2, entry2);
483 ResultDescriptor result1 = new ResultDescriptor('result1', -1); 475 ResultDescriptor result1 = new ResultDescriptor('result1', -1);
484 ResultDescriptor result2 = new ResultDescriptor('result2', -2); 476 ResultDescriptor result2 = new ResultDescriptor('result2', -2);
485 ResultDescriptor result3 = new ResultDescriptor('result3', -3); 477 ResultDescriptor result3 = new ResultDescriptor('result3', -3);
486 // set results, all of them are VALID 478 // set results, all of them are VALID
(...skipping 23 matching lines...) Expand all
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 11 matching lines...) Expand all
543 } 676 }
544 677
545 void test_put_noFlush() { 678 void test_put_noFlush() {
546 CachePartition partition = createPartition(); 679 CachePartition partition = createPartition();
547 AnalysisTarget target = new TestSource(); 680 AnalysisTarget target = new TestSource();
548 CacheEntry entry = new CacheEntry(); 681 CacheEntry entry = new CacheEntry();
549 partition.put(target, entry); 682 partition.put(target, entry);
550 expect(partition.get(target), entry); 683 expect(partition.get(target), entry);
551 } 684 }
552 685
686 void test_put_alreadyInPartition() {
687 CachePartition partition1 = createPartition();
688 CachePartition partition2 = createPartition();
689 AnalysisTarget target = new TestSource();
690 CacheEntry entry = new CacheEntry();
691 partition1.put(target, entry);
692 expect(() => partition2.put(target, entry), throwsStateError);
693 }
694
553 void test_remove() { 695 void test_remove() {
554 CachePartition partition = createPartition(); 696 CachePartition partition = createPartition();
555 AnalysisTarget target = new TestSource(); 697 AnalysisTarget target = new TestSource();
556 CacheEntry entry = new CacheEntry(); 698 CacheEntry entry = new CacheEntry();
557 partition.put(target, entry); 699 partition.put(target, entry);
558 expect(partition.get(target), entry); 700 expect(partition.get(target), entry);
559 partition.remove(target); 701 partition.remove(target);
560 expect(partition.get(target), isNull); 702 expect(partition.get(target), isNull);
561 } 703 }
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 } 704 }
605 705
606 @reflectiveTest 706 @reflectiveTest
607 class ResultDataTest extends EngineTestCase { 707 class ResultDataTest extends EngineTestCase {
608 test_creation() { 708 test_creation() {
609 String value = 'value'; 709 String value = 'value';
610 ResultData data = new ResultData(new ResultDescriptor('test', value)); 710 ResultData data = new ResultData(new ResultDescriptor('test', value));
611 expect(data, isNotNull); 711 expect(data, isNotNull);
612 expect(data.state, CacheState.INVALID); 712 expect(data.state, CacheState.INVALID);
613 expect(data.value, value); 713 expect(data.value, value);
614 } 714 }
615 } 715 }
616 716
617 @reflectiveTest 717 @reflectiveTest
618 class SdkCachePartitionTest extends CachePartitionTest { 718 class SdkCachePartitionTest extends CachePartitionTest {
619 CachePartition createPartition([CacheRetentionPolicy policy = null]) { 719 CachePartition createPartition() {
620 return new SdkCachePartition(null, 8); 720 return new SdkCachePartition(null);
621 } 721 }
622 722
623 void test_contains_false() { 723 void test_contains_false() {
624 CachePartition partition = createPartition(); 724 CachePartition partition = createPartition();
625 AnalysisTarget target = new TestSource(); 725 AnalysisTarget target = new TestSource();
626 expect(partition.contains(target), isFalse); 726 expect(partition.contains(target), isFalse);
627 } 727 }
628 728
629 void test_contains_true() { 729 void test_contains_true() {
630 SdkCachePartition partition = new SdkCachePartition(null, 8); 730 SdkCachePartition partition = new SdkCachePartition(null);
631 SourceFactory factory = new SourceFactory( 731 SourceFactory factory = new SourceFactory(
632 [new DartUriResolver(DirectoryBasedDartSdk.defaultSdk)]); 732 [new DartUriResolver(DirectoryBasedDartSdk.defaultSdk)]);
633 AnalysisTarget target = factory.forUri("dart:core"); 733 AnalysisTarget target = factory.forUri("dart:core");
634 expect(partition.contains(target), isTrue); 734 expect(partition.contains(target), isTrue);
635 } 735 }
636 } 736 }
637 737
638 @reflectiveTest 738 @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 { 739 class UniversalCachePartitionTest extends CachePartitionTest {
651 CachePartition createPartition([CacheRetentionPolicy policy = null]) { 740 CachePartition createPartition() {
652 return new UniversalCachePartition(null, 8, policy); 741 return new UniversalCachePartition(null);
653 } 742 }
654 743
655 void test_contains() { 744 void test_contains() {
656 UniversalCachePartition partition = 745 UniversalCachePartition partition = new UniversalCachePartition(null);
657 new UniversalCachePartition(null, 8, null);
658 TestSource source = new TestSource(); 746 TestSource source = new TestSource();
659 expect(partition.contains(source), isTrue); 747 expect(partition.contains(source), isTrue);
660 } 748 }
661 } 749 }
750
751 class _InternalAnalysisContextMock extends TypedMock
752 implements InternalAnalysisContext {
753 noSuchMethod(Invocation invocation) => super.noSuchMethod(invocation);
754 }
OLDNEW
« no previous file with comments | « pkg/analyzer/test/generated/engine_test.dart ('k') | pkg/analyzer/test/src/context/context_test.dart » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698