| 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/generated/ast.dart'; | 8 import 'package:analyzer/src/generated/ast.dart'; |
| 9 import 'package:analyzer/src/generated/engine.dart' | 9 import 'package:analyzer/src/generated/engine.dart' |
| 10 show AnalysisContext, CacheState, RetentionPriority; | 10 show AnalysisContext, CacheState, RetentionPriority; |
| (...skipping 10 matching lines...) Expand all Loading... |
| 21 | 21 |
| 22 main() { | 22 main() { |
| 23 groupSep = ' | '; | 23 groupSep = ' | '; |
| 24 runReflectiveTests(AnalysisCacheTest); | 24 runReflectiveTests(AnalysisCacheTest); |
| 25 runReflectiveTests(CacheEntryTest); | 25 runReflectiveTests(CacheEntryTest); |
| 26 runReflectiveTests(SdkCachePartitionTest); | 26 runReflectiveTests(SdkCachePartitionTest); |
| 27 runReflectiveTests(UniversalCachePartitionTest); | 27 runReflectiveTests(UniversalCachePartitionTest); |
| 28 runReflectiveTests(ResultDataTest); | 28 runReflectiveTests(ResultDataTest); |
| 29 } | 29 } |
| 30 | 30 |
| 31 AnalysisCache createCache({AnalysisContext context, |
| 32 RetentionPriority policy: RetentionPriority.LOW}) { |
| 33 CachePartition partition = new UniversalCachePartition( |
| 34 context, 8, new TestCacheRetentionPolicy(policy)); |
| 35 return new AnalysisCache(<CachePartition>[partition]); |
| 36 } |
| 37 |
| 31 @reflectiveTest | 38 @reflectiveTest |
| 32 class AnalysisCacheTest extends EngineTestCase { | 39 class AnalysisCacheTest extends EngineTestCase { |
| 33 AnalysisCache createCache({AnalysisContext context, | |
| 34 RetentionPriority policy: RetentionPriority.LOW}) { | |
| 35 CachePartition partition = new UniversalCachePartition( | |
| 36 context, 8, new TestCacheRetentionPolicy(policy)); | |
| 37 return new AnalysisCache(<CachePartition>[partition]); | |
| 38 } | |
| 39 | |
| 40 void test_astSize_empty() { | 40 void test_astSize_empty() { |
| 41 AnalysisCache cache = createCache(); | 41 AnalysisCache cache = createCache(); |
| 42 expect(cache.astSize, 0); | 42 expect(cache.astSize, 0); |
| 43 } | 43 } |
| 44 | 44 |
| 45 void test_astSize_nonEmpty() { | 45 void test_astSize_nonEmpty() { |
| 46 ResultDescriptor result = new ResultDescriptor('test', null); | 46 ResultDescriptor result = new ResultDescriptor('test', null); |
| 47 AstNode node = new NullLiteral(null); | 47 AstNode node = new NullLiteral(null); |
| 48 AnalysisCache cache = createCache(); | 48 AnalysisCache cache = createCache(); |
| 49 AnalysisTarget target1 = new TestSource('/test1.dart'); | 49 AnalysisTarget target1 = new TestSource('/test1.dart'); |
| 50 CacheEntry entry1 = new CacheEntry(); | 50 CacheEntry entry1 = new CacheEntry(); |
| 51 entry1.setValue(result, node); | 51 entry1.setValue(result, node, TargetedResult.EMPTY_LIST); |
| 52 AnalysisTarget target2 = new TestSource('/test2.dart'); | 52 AnalysisTarget target2 = new TestSource('/test2.dart'); |
| 53 CacheEntry entry2 = new CacheEntry(); | 53 CacheEntry entry2 = new CacheEntry(); |
| 54 entry2.setValue(result, node); | 54 entry2.setValue(result, node, TargetedResult.EMPTY_LIST); |
| 55 cache.put(target1, entry1); | 55 cache.put(target1, entry1); |
| 56 cache.accessedAst(target1); | 56 cache.accessedAst(target1); |
| 57 cache.put(target2, entry2); | 57 cache.put(target2, entry2); |
| 58 cache.accessedAst(target2); | 58 cache.accessedAst(target2); |
| 59 expect(cache.astSize, 2); | 59 expect(cache.astSize, 2); |
| 60 } | 60 } |
| 61 | 61 |
| 62 void test_creation() { | 62 void test_creation() { |
| 63 expect(createCache(), isNotNull); | 63 expect(createCache(), isNotNull); |
| 64 } | 64 } |
| (...skipping 41 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 106 void test_setMaxCacheSize() { | 106 void test_setMaxCacheSize() { |
| 107 CachePartition partition = new UniversalCachePartition( | 107 CachePartition partition = new UniversalCachePartition( |
| 108 null, 8, new TestCacheRetentionPolicy(RetentionPriority.MEDIUM)); | 108 null, 8, new TestCacheRetentionPolicy(RetentionPriority.MEDIUM)); |
| 109 AnalysisCache cache = new AnalysisCache(<CachePartition>[partition]); | 109 AnalysisCache cache = new AnalysisCache(<CachePartition>[partition]); |
| 110 ResultDescriptor result = new ResultDescriptor('test', null); | 110 ResultDescriptor result = new ResultDescriptor('test', null); |
| 111 AstNode node = new NullLiteral(null); | 111 AstNode node = new NullLiteral(null); |
| 112 int size = 6; | 112 int size = 6; |
| 113 for (int i = 0; i < size; i++) { | 113 for (int i = 0; i < size; i++) { |
| 114 AnalysisTarget target = new TestSource("/test$i.dart"); | 114 AnalysisTarget target = new TestSource("/test$i.dart"); |
| 115 CacheEntry entry = new CacheEntry(); | 115 CacheEntry entry = new CacheEntry(); |
| 116 entry.setValue(result, node); | 116 entry.setValue(result, node, TargetedResult.EMPTY_LIST); |
| 117 cache.put(target, entry); | 117 cache.put(target, entry); |
| 118 cache.accessedAst(target); | 118 cache.accessedAst(target); |
| 119 } | 119 } |
| 120 | 120 |
| 121 void _assertNonFlushedCount(int expectedCount, AnalysisCache cache) { | 121 void _assertNonFlushedCount(int expectedCount, AnalysisCache cache) { |
| 122 int nonFlushedCount = 0; | 122 int nonFlushedCount = 0; |
| 123 MapIterator<AnalysisTarget, CacheEntry> iterator = cache.iterator(); | 123 MapIterator<AnalysisTarget, CacheEntry> iterator = cache.iterator(); |
| 124 while (iterator.moveNext()) { | 124 while (iterator.moveNext()) { |
| 125 if (iterator.value.getState(result) != CacheState.FLUSHED) { | 125 if (iterator.value.getState(result) != CacheState.FLUSHED) { |
| 126 nonFlushedCount++; | 126 nonFlushedCount++; |
| (...skipping 38 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 165 expect(entry.exception, exception); | 165 expect(entry.exception, exception); |
| 166 } | 166 } |
| 167 | 167 |
| 168 test_fixExceptionState_noError_exception() { | 168 test_fixExceptionState_noError_exception() { |
| 169 ResultDescriptor result = new ResultDescriptor('test', null); | 169 ResultDescriptor result = new ResultDescriptor('test', null); |
| 170 CacheEntry entry = new CacheEntry(); | 170 CacheEntry entry = new CacheEntry(); |
| 171 // set one result to ERROR | 171 // set one result to ERROR |
| 172 CaughtException exception = new CaughtException(null, null); | 172 CaughtException exception = new CaughtException(null, null); |
| 173 entry.setErrorState(exception, <ResultDescriptor>[result]); | 173 entry.setErrorState(exception, <ResultDescriptor>[result]); |
| 174 // set the same result to VALID | 174 // set the same result to VALID |
| 175 entry.setValue(result, 1); | 175 entry.setValue(result, 1, TargetedResult.EMPTY_LIST); |
| 176 // fix the exception state | 176 // fix the exception state |
| 177 entry.fixExceptionState(); | 177 entry.fixExceptionState(); |
| 178 expect(entry.exception, isNull); | 178 expect(entry.exception, isNull); |
| 179 } | 179 } |
| 180 | 180 |
| 181 test_fixExceptionState_noError_noException() { | 181 test_fixExceptionState_noError_noException() { |
| 182 ResultDescriptor result = new ResultDescriptor('test', null); | 182 ResultDescriptor result = new ResultDescriptor('test', null); |
| 183 CacheEntry entry = new CacheEntry(); | 183 CacheEntry entry = new CacheEntry(); |
| 184 entry.fixExceptionState(); | 184 entry.fixExceptionState(); |
| 185 expect(entry.getState(result), CacheState.INVALID); | 185 expect(entry.getState(result), CacheState.INVALID); |
| 186 expect(entry.exception, isNull); | 186 expect(entry.exception, isNull); |
| 187 } | 187 } |
| 188 | 188 |
| 189 test_flushAstStructures() { | 189 test_flushAstStructures() { |
| 190 ResultDescriptor result = new ResultDescriptor('test', null); | 190 ResultDescriptor result = new ResultDescriptor('test', null); |
| 191 CacheEntry entry = new CacheEntry(); | 191 CacheEntry entry = new CacheEntry(); |
| 192 entry.setValue(result, new NullLiteral(null)); | 192 entry.setValue(result, new NullLiteral(null), TargetedResult.EMPTY_LIST); |
| 193 expect(entry.hasAstStructure, true); | 193 expect(entry.hasAstStructure, true); |
| 194 entry.flushAstStructures(); | 194 entry.flushAstStructures(); |
| 195 expect(entry.hasAstStructure, false); | 195 expect(entry.hasAstStructure, false); |
| 196 } | 196 } |
| 197 | 197 |
| 198 test_getState() { | 198 test_getState() { |
| 199 ResultDescriptor result = new ResultDescriptor('test', null); | 199 ResultDescriptor result = new ResultDescriptor('test', null); |
| 200 CacheEntry entry = new CacheEntry(); | 200 CacheEntry entry = new CacheEntry(); |
| 201 expect(entry.getState(result), CacheState.INVALID); | 201 expect(entry.getState(result), CacheState.INVALID); |
| 202 } | 202 } |
| 203 | 203 |
| 204 test_getValue() { | 204 test_getValue() { |
| 205 String defaultValue = 'value'; | 205 String defaultValue = 'value'; |
| 206 ResultDescriptor result = new ResultDescriptor('test', defaultValue); | 206 ResultDescriptor result = new ResultDescriptor('test', defaultValue); |
| 207 CacheEntry entry = new CacheEntry(); | 207 CacheEntry entry = new CacheEntry(); |
| 208 expect(entry.getValue(result), defaultValue); | 208 expect(entry.getValue(result), defaultValue); |
| 209 } | 209 } |
| 210 | 210 |
| 211 test_hasAstStructure_false() { | 211 test_hasAstStructure_false() { |
| 212 CacheEntry entry = new CacheEntry(); | 212 CacheEntry entry = new CacheEntry(); |
| 213 expect(entry.hasAstStructure, false); | 213 expect(entry.hasAstStructure, false); |
| 214 } | 214 } |
| 215 | 215 |
| 216 test_hasAstStructure_true() { | 216 test_hasAstStructure_true() { |
| 217 ResultDescriptor result = new ResultDescriptor('test', null); | 217 ResultDescriptor result = new ResultDescriptor('test', null); |
| 218 CacheEntry entry = new CacheEntry(); | 218 CacheEntry entry = new CacheEntry(); |
| 219 entry.setValue(result, new NullLiteral(null)); | 219 entry.setValue(result, new NullLiteral(null), TargetedResult.EMPTY_LIST); |
| 220 expect(entry.hasAstStructure, true); | 220 expect(entry.hasAstStructure, true); |
| 221 } | 221 } |
| 222 | 222 |
| 223 test_hasErrorState_false() { | 223 test_hasErrorState_false() { |
| 224 CacheEntry entry = new CacheEntry(); | 224 CacheEntry entry = new CacheEntry(); |
| 225 expect(entry.hasErrorState(), false); | 225 expect(entry.hasErrorState(), false); |
| 226 } | 226 } |
| 227 | 227 |
| 228 test_hasErrorState_true() { | 228 test_hasErrorState_true() { |
| 229 ResultDescriptor result = new ResultDescriptor('test', null); | 229 ResultDescriptor result = new ResultDescriptor('test', null); |
| 230 CaughtException exception = new CaughtException(null, null); | 230 CaughtException exception = new CaughtException(null, null); |
| 231 CacheEntry entry = new CacheEntry(); | 231 CacheEntry entry = new CacheEntry(); |
| 232 entry.setErrorState(exception, <ResultDescriptor>[result]); | 232 entry.setErrorState(exception, <ResultDescriptor>[result]); |
| 233 expect(entry.hasErrorState(), true); | 233 expect(entry.hasErrorState(), true); |
| 234 } | 234 } |
| 235 | 235 |
| 236 test_invalidateAllInformation() { | 236 test_invalidateAllInformation() { |
| 237 ResultDescriptor result = new ResultDescriptor('test', null); | 237 ResultDescriptor result = new ResultDescriptor('test', null); |
| 238 CacheEntry entry = new CacheEntry(); | 238 CacheEntry entry = new CacheEntry(); |
| 239 entry.setValue(result, 'value'); | 239 entry.setValue(result, 'value', TargetedResult.EMPTY_LIST); |
| 240 entry.invalidateAllInformation(); | 240 entry.invalidateAllInformation(); |
| 241 expect(entry.getState(result), CacheState.INVALID); | 241 expect(entry.getState(result), CacheState.INVALID); |
| 242 expect(entry.getValue(result), isNull); | 242 expect(entry.getValue(result), isNull); |
| 243 } | 243 } |
| 244 | 244 |
| 245 test_setErrorState() { | 245 test_setErrorState() { |
| 246 ResultDescriptor result1 = new ResultDescriptor('res1', 1); | 246 ResultDescriptor result1 = new ResultDescriptor('res1', 1); |
| 247 ResultDescriptor result2 = new ResultDescriptor('res2', 2); | 247 ResultDescriptor result2 = new ResultDescriptor('res2', 2); |
| 248 ResultDescriptor result3 = new ResultDescriptor('res3', 3); | 248 ResultDescriptor result3 = new ResultDescriptor('res3', 3); |
| 249 // prepare some good state | 249 // prepare some good state |
| 250 CacheEntry entry = new CacheEntry(); | 250 CacheEntry entry = new CacheEntry(); |
| 251 entry.setValue(result1, 10); | 251 entry.setValue(result1, 10, TargetedResult.EMPTY_LIST); |
| 252 entry.setValue(result2, 20); | 252 entry.setValue(result2, 20, TargetedResult.EMPTY_LIST); |
| 253 entry.setValue(result3, 30); | 253 entry.setValue(result3, 30, TargetedResult.EMPTY_LIST); |
| 254 // set error state | 254 // set error state |
| 255 CaughtException exception = new CaughtException(null, null); | 255 CaughtException exception = new CaughtException(null, null); |
| 256 entry.setErrorState(exception, <ResultDescriptor>[result1, result2]); | 256 entry.setErrorState(exception, <ResultDescriptor>[result1, result2]); |
| 257 // verify | 257 // verify |
| 258 expect(entry.exception, exception); | 258 expect(entry.exception, exception); |
| 259 expect(entry.getState(result1), CacheState.ERROR); | 259 expect(entry.getState(result1), CacheState.ERROR); |
| 260 expect(entry.getState(result2), CacheState.ERROR); | 260 expect(entry.getState(result2), CacheState.ERROR); |
| 261 expect(entry.getState(result3), CacheState.VALID); | 261 expect(entry.getState(result3), CacheState.VALID); |
| 262 expect(entry.getValue(result1), 1); | 262 expect(entry.getValue(result1), 1); |
| 263 expect(entry.getValue(result2), 2); | 263 expect(entry.getValue(result2), 2); |
| 264 expect(entry.getValue(result3), 30); | 264 expect(entry.getValue(result3), 30); |
| 265 } | 265 } |
| 266 | 266 |
| 267 test_setErrorState_invalidateDependent() { |
| 268 AnalysisCache cache = createCache(); |
| 269 AnalysisTarget target = new TestSource(); |
| 270 CacheEntry entry = new CacheEntry(); |
| 271 cache.put(target, entry); |
| 272 ResultDescriptor result1 = new ResultDescriptor('result1', -1); |
| 273 ResultDescriptor result2 = new ResultDescriptor('result2', -2); |
| 274 ResultDescriptor result3 = new ResultDescriptor('result3', -3); |
| 275 ResultDescriptor result4 = new ResultDescriptor('result4', -4); |
| 276 // set results, all of them are VALID |
| 277 entry.setValue(result1, 111, TargetedResult.EMPTY_LIST); |
| 278 entry.setValue(result2, 222, [new TargetedResult(target, result1)]); |
| 279 entry.setValue(result3, 333, [new TargetedResult(target, result2)]); |
| 280 entry.setValue(result4, 444, []); |
| 281 expect(entry.getState(result1), CacheState.VALID); |
| 282 expect(entry.getState(result2), CacheState.VALID); |
| 283 expect(entry.getState(result3), CacheState.VALID); |
| 284 expect(entry.getState(result4), CacheState.VALID); |
| 285 expect(entry.getValue(result1), 111); |
| 286 expect(entry.getValue(result2), 222); |
| 287 expect(entry.getValue(result3), 333); |
| 288 expect(entry.getValue(result4), 444); |
| 289 // set error state |
| 290 CaughtException exception = new CaughtException(null, null); |
| 291 entry.setErrorState(exception, <ResultDescriptor>[result1]); |
| 292 // result2 and result3 are invalidated, result4 is intact |
| 293 expect(entry.getState(result1), CacheState.ERROR); |
| 294 expect(entry.getState(result2), CacheState.ERROR); |
| 295 expect(entry.getState(result3), CacheState.ERROR); |
| 296 expect(entry.getState(result4), CacheState.VALID); |
| 297 expect(entry.getValue(result1), -1); |
| 298 expect(entry.getValue(result2), -2); |
| 299 expect(entry.getValue(result3), -3); |
| 300 expect(entry.getValue(result4), 444); |
| 301 } |
| 302 |
| 267 test_setErrorState_noDescriptors() { | 303 test_setErrorState_noDescriptors() { |
| 268 CaughtException exception = new CaughtException(null, null); | 304 CaughtException exception = new CaughtException(null, null); |
| 269 CacheEntry entry = new CacheEntry(); | 305 CacheEntry entry = new CacheEntry(); |
| 270 expect(() { | 306 expect(() { |
| 271 entry.setErrorState(exception, <ResultDescriptor>[]); | 307 entry.setErrorState(exception, <ResultDescriptor>[]); |
| 272 }, throwsArgumentError); | 308 }, throwsArgumentError); |
| 273 } | 309 } |
| 274 | 310 |
| 275 test_setErrorState_noException() { | 311 test_setErrorState_noException() { |
| 276 ResultDescriptor result = new ResultDescriptor('test', null); | 312 ResultDescriptor result = new ResultDescriptor('test', null); |
| 277 CacheEntry entry = new CacheEntry(); | 313 CacheEntry entry = new CacheEntry(); |
| 278 expect(() { | 314 expect(() { |
| 279 entry.setErrorState(null, <ResultDescriptor>[result]); | 315 entry.setErrorState(null, <ResultDescriptor>[result]); |
| 280 }, throwsArgumentError); | 316 }, throwsArgumentError); |
| 281 } | 317 } |
| 282 | 318 |
| 283 test_setErrorState_nullDescriptors() { | 319 test_setErrorState_nullDescriptors() { |
| 284 CaughtException exception = new CaughtException(null, null); | 320 CaughtException exception = new CaughtException(null, null); |
| 285 CacheEntry entry = new CacheEntry(); | 321 CacheEntry entry = new CacheEntry(); |
| 286 expect(() { | 322 expect(() { |
| 287 entry.setErrorState(exception, null); | 323 entry.setErrorState(exception, null); |
| 288 }, throwsArgumentError); | 324 }, throwsArgumentError); |
| 289 } | 325 } |
| 290 | 326 |
| 291 test_setState_error() { | 327 test_setState_error() { |
| 292 ResultDescriptor result = new ResultDescriptor('test', null); | 328 ResultDescriptor result = new ResultDescriptor('test', null); |
| 293 CacheEntry entry = new CacheEntry(); | 329 CacheEntry entry = new CacheEntry(); |
| 294 entry.setValue(result, 42); | 330 entry.setValue(result, 42, TargetedResult.EMPTY_LIST); |
| 295 // an invalid state change | 331 // an invalid state change |
| 296 expect(() { | 332 expect(() { |
| 297 entry.setState(result, CacheState.ERROR); | 333 entry.setState(result, CacheState.ERROR); |
| 298 }, throwsArgumentError); | 334 }, throwsArgumentError); |
| 299 // no changes | 335 // no changes |
| 300 expect(entry.getState(result), CacheState.VALID); | 336 expect(entry.getState(result), CacheState.VALID); |
| 301 expect(entry.getValue(result), 42); | 337 expect(entry.getValue(result), 42); |
| 302 } | 338 } |
| 303 | 339 |
| 304 test_setState_flushed() { | 340 test_setState_flushed() { |
| 305 ResultDescriptor result = new ResultDescriptor('test', 1); | 341 ResultDescriptor result = new ResultDescriptor('test', 1); |
| 306 CacheEntry entry = new CacheEntry(); | 342 CacheEntry entry = new CacheEntry(); |
| 307 // set VALID | 343 // set VALID |
| 308 entry.setValue(result, 10); | 344 entry.setValue(result, 10, TargetedResult.EMPTY_LIST); |
| 309 expect(entry.getState(result), CacheState.VALID); | 345 expect(entry.getState(result), CacheState.VALID); |
| 310 expect(entry.getValue(result), 10); | 346 expect(entry.getValue(result), 10); |
| 311 // set FLUSHED | 347 // set FLUSHED |
| 312 entry.setState(result, CacheState.FLUSHED); | 348 entry.setState(result, CacheState.FLUSHED); |
| 313 expect(entry.getState(result), CacheState.FLUSHED); | 349 expect(entry.getState(result), CacheState.FLUSHED); |
| 314 expect(entry.getValue(result), 1); | 350 expect(entry.getValue(result), 1); |
| 315 } | 351 } |
| 316 | 352 |
| 317 test_setState_inProcess() { | 353 test_setState_inProcess() { |
| 318 ResultDescriptor result = new ResultDescriptor('test', 1); | 354 ResultDescriptor result = new ResultDescriptor('test', 1); |
| 319 CacheEntry entry = new CacheEntry(); | 355 CacheEntry entry = new CacheEntry(); |
| 320 // set VALID | 356 // set VALID |
| 321 entry.setValue(result, 10); | 357 entry.setValue(result, 10, TargetedResult.EMPTY_LIST); |
| 322 expect(entry.getState(result), CacheState.VALID); | 358 expect(entry.getState(result), CacheState.VALID); |
| 323 expect(entry.getValue(result), 10); | 359 expect(entry.getValue(result), 10); |
| 324 // set IN_PROCESS | 360 // set IN_PROCESS |
| 325 entry.setState(result, CacheState.IN_PROCESS); | 361 entry.setState(result, CacheState.IN_PROCESS); |
| 326 expect(entry.getState(result), CacheState.IN_PROCESS); | 362 expect(entry.getState(result), CacheState.IN_PROCESS); |
| 327 expect(entry.getValue(result), 10); | 363 expect(entry.getValue(result), 10); |
| 328 } | 364 } |
| 329 | 365 |
| 330 test_setState_invalid() { | 366 test_setState_invalid() { |
| 331 ResultDescriptor result = new ResultDescriptor('test', 1); | 367 ResultDescriptor result = new ResultDescriptor('test', 1); |
| 332 CacheEntry entry = new CacheEntry(); | 368 CacheEntry entry = new CacheEntry(); |
| 333 // set VALID | 369 // set VALID |
| 334 entry.setValue(result, 10); | 370 entry.setValue(result, 10, TargetedResult.EMPTY_LIST); |
| 335 expect(entry.getState(result), CacheState.VALID); | 371 expect(entry.getState(result), CacheState.VALID); |
| 336 expect(entry.getValue(result), 10); | 372 expect(entry.getValue(result), 10); |
| 337 // set INVALID | 373 // set INVALID |
| 338 entry.setState(result, CacheState.INVALID); | 374 entry.setState(result, CacheState.INVALID); |
| 339 expect(entry.getState(result), CacheState.INVALID); | 375 expect(entry.getState(result), CacheState.INVALID); |
| 340 expect(entry.getValue(result), 1); | 376 expect(entry.getValue(result), 1); |
| 341 } | 377 } |
| 342 | 378 |
| 379 test_setState_invalid_invalidateDependent() { |
| 380 AnalysisCache cache = createCache(); |
| 381 AnalysisTarget target = new TestSource(); |
| 382 CacheEntry entry = new CacheEntry(); |
| 383 cache.put(target, entry); |
| 384 ResultDescriptor result1 = new ResultDescriptor('result1', -1); |
| 385 ResultDescriptor result2 = new ResultDescriptor('result2', -2); |
| 386 ResultDescriptor result3 = new ResultDescriptor('result3', -3); |
| 387 ResultDescriptor result4 = new ResultDescriptor('result4', -4); |
| 388 // set results, all of them are VALID |
| 389 entry.setValue(result1, 111, TargetedResult.EMPTY_LIST); |
| 390 entry.setValue(result2, 222, [new TargetedResult(target, result1)]); |
| 391 entry.setValue(result3, 333, [new TargetedResult(target, result2)]); |
| 392 entry.setValue(result4, 444, []); |
| 393 expect(entry.getState(result1), CacheState.VALID); |
| 394 expect(entry.getState(result2), CacheState.VALID); |
| 395 expect(entry.getState(result3), CacheState.VALID); |
| 396 expect(entry.getState(result4), CacheState.VALID); |
| 397 expect(entry.getValue(result1), 111); |
| 398 expect(entry.getValue(result2), 222); |
| 399 expect(entry.getValue(result3), 333); |
| 400 expect(entry.getValue(result4), 444); |
| 401 // invalidate result1, invalidates result2 and result3, result4 is intact |
| 402 entry.setState(result1, CacheState.INVALID); |
| 403 expect(entry.getState(result1), CacheState.INVALID); |
| 404 expect(entry.getState(result2), CacheState.INVALID); |
| 405 expect(entry.getState(result3), CacheState.INVALID); |
| 406 expect(entry.getState(result4), CacheState.VALID); |
| 407 expect(entry.getValue(result1), -1); |
| 408 expect(entry.getValue(result2), -2); |
| 409 expect(entry.getValue(result3), -3); |
| 410 expect(entry.getValue(result4), 444); |
| 411 } |
| 412 |
| 343 test_setState_valid() { | 413 test_setState_valid() { |
| 344 ResultDescriptor result = new ResultDescriptor('test', null); | 414 ResultDescriptor result = new ResultDescriptor('test', null); |
| 345 CacheEntry entry = new CacheEntry(); | 415 CacheEntry entry = new CacheEntry(); |
| 346 expect(() => entry.setState(result, CacheState.VALID), throwsArgumentError); | 416 expect(() => entry.setState(result, CacheState.VALID), throwsArgumentError); |
| 347 } | 417 } |
| 348 | 418 |
| 349 test_setValue() { | 419 test_setValue() { |
| 350 String value = 'value'; | 420 String value = 'value'; |
| 351 ResultDescriptor result = new ResultDescriptor('test', null); | 421 ResultDescriptor result = new ResultDescriptor('test', null); |
| 352 CacheEntry entry = new CacheEntry(); | 422 CacheEntry entry = new CacheEntry(); |
| 353 entry.setValue(result, value); | 423 entry.setValue(result, value, TargetedResult.EMPTY_LIST); |
| 354 expect(entry.getState(result), CacheState.VALID); | 424 expect(entry.getState(result), CacheState.VALID); |
| 355 expect(entry.getValue(result), value); | 425 expect(entry.getValue(result), value); |
| 356 } | 426 } |
| 357 | 427 |
| 428 test_setValue_invalidateDependent() { |
| 429 AnalysisCache cache = createCache(); |
| 430 AnalysisTarget target = new TestSource(); |
| 431 CacheEntry entry = new CacheEntry(); |
| 432 cache.put(target, entry); |
| 433 ResultDescriptor result1 = new ResultDescriptor('result1', -1); |
| 434 ResultDescriptor result2 = new ResultDescriptor('result2', -2); |
| 435 ResultDescriptor result3 = new ResultDescriptor('result3', -3); |
| 436 ResultDescriptor result4 = new ResultDescriptor('result4', -4); |
| 437 // set results, all of them are VALID |
| 438 entry.setValue(result1, 111, TargetedResult.EMPTY_LIST); |
| 439 entry.setValue(result2, 222, [new TargetedResult(target, result1)]); |
| 440 entry.setValue(result3, 333, [new TargetedResult(target, result2)]); |
| 441 entry.setValue(result4, 444, []); |
| 442 expect(entry.getState(result1), CacheState.VALID); |
| 443 expect(entry.getState(result2), CacheState.VALID); |
| 444 expect(entry.getState(result3), CacheState.VALID); |
| 445 expect(entry.getState(result4), CacheState.VALID); |
| 446 expect(entry.getValue(result1), 111); |
| 447 expect(entry.getValue(result2), 222); |
| 448 expect(entry.getValue(result3), 333); |
| 449 expect(entry.getValue(result4), 444); |
| 450 // set result1, invalidates result2 and result3, result4 is intact |
| 451 entry.setValue(result1, 1111, TargetedResult.EMPTY_LIST); |
| 452 expect(entry.getState(result1), CacheState.VALID); |
| 453 expect(entry.getState(result2), CacheState.INVALID); |
| 454 expect(entry.getState(result3), CacheState.INVALID); |
| 455 expect(entry.getState(result4), CacheState.VALID); |
| 456 expect(entry.getValue(result1), 1111); |
| 457 expect(entry.getValue(result2), -2); |
| 458 expect(entry.getValue(result3), -3); |
| 459 expect(entry.getValue(result4), 444); |
| 460 } |
| 461 |
| 462 test_setValue_invalidateDependent2() { |
| 463 AnalysisCache cache = createCache(); |
| 464 AnalysisTarget target1 = new TestSource('a'); |
| 465 AnalysisTarget target2 = new TestSource('b'); |
| 466 CacheEntry entry1 = new CacheEntry(); |
| 467 CacheEntry entry2 = new CacheEntry(); |
| 468 cache.put(target1, entry1); |
| 469 cache.put(target2, entry2); |
| 470 ResultDescriptor result1 = new ResultDescriptor('result1', -1); |
| 471 ResultDescriptor result2 = new ResultDescriptor('result2', -2); |
| 472 ResultDescriptor result3 = new ResultDescriptor('result3', -3); |
| 473 // set results, all of them are VALID |
| 474 entry1.setValue(result1, 111, TargetedResult.EMPTY_LIST); |
| 475 entry1.setValue(result2, 222, [new TargetedResult(target1, result1)]); |
| 476 entry2.setValue(result3, 333, [new TargetedResult(target1, result2)]); |
| 477 expect(entry1.getState(result1), CacheState.VALID); |
| 478 expect(entry1.getState(result2), CacheState.VALID); |
| 479 expect(entry2.getState(result3), CacheState.VALID); |
| 480 expect(entry1.getValue(result1), 111); |
| 481 expect(entry1.getValue(result2), 222); |
| 482 expect(entry2.getValue(result3), 333); |
| 483 // set result1, invalidates result2 and result3 |
| 484 entry1.setValue(result1, 1111, TargetedResult.EMPTY_LIST); |
| 485 expect(entry1.getState(result1), CacheState.VALID); |
| 486 expect(entry1.getState(result2), CacheState.INVALID); |
| 487 expect(entry2.getState(result3), CacheState.INVALID); |
| 488 expect(entry1.getValue(result1), 1111); |
| 489 expect(entry1.getValue(result2), -2); |
| 490 expect(entry2.getValue(result3), -3); |
| 491 } |
| 492 |
| 358 test_toString_empty() { | 493 test_toString_empty() { |
| 359 CacheEntry entry = new CacheEntry(); | 494 CacheEntry entry = new CacheEntry(); |
| 360 expect(entry.toString(), isNotNull); | 495 expect(entry.toString(), isNotNull); |
| 361 } | 496 } |
| 362 | 497 |
| 363 test_toString_nonEmpty() { | 498 test_toString_nonEmpty() { |
| 364 String value = 'value'; | 499 String value = 'value'; |
| 365 ResultDescriptor result = new ResultDescriptor('test', null); | 500 ResultDescriptor result = new ResultDescriptor('test', null); |
| 366 CacheEntry entry = new CacheEntry(); | 501 CacheEntry entry = new CacheEntry(); |
| 367 entry.setValue(result, value); | 502 entry.setValue(result, value, TargetedResult.EMPTY_LIST); |
| 368 expect(entry.toString(), isNotNull); | 503 expect(entry.toString(), isNotNull); |
| 369 } | 504 } |
| 370 } | 505 } |
| 371 | 506 |
| 372 abstract class CachePartitionTest extends EngineTestCase { | 507 abstract class CachePartitionTest extends EngineTestCase { |
| 373 CachePartition createPartition([CacheRetentionPolicy policy = null]); | 508 CachePartition createPartition([CacheRetentionPolicy policy = null]); |
| 374 | 509 |
| 375 void test_creation() { | 510 void test_creation() { |
| 376 expect(createPartition(), isNotNull); | 511 expect(createPartition(), isNotNull); |
| 377 } | 512 } |
| (...skipping 36 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 414 | 549 |
| 415 void test_setMaxCacheSize() { | 550 void test_setMaxCacheSize() { |
| 416 CachePartition partition = | 551 CachePartition partition = |
| 417 createPartition(new TestCacheRetentionPolicy(RetentionPriority.LOW)); | 552 createPartition(new TestCacheRetentionPolicy(RetentionPriority.LOW)); |
| 418 ResultDescriptor result = new ResultDescriptor('result', null); | 553 ResultDescriptor result = new ResultDescriptor('result', null); |
| 419 NullLiteral node = new NullLiteral(null); | 554 NullLiteral node = new NullLiteral(null); |
| 420 int size = 6; // Must be <= partition.maxCacheSize | 555 int size = 6; // Must be <= partition.maxCacheSize |
| 421 for (int i = 0; i < size; i++) { | 556 for (int i = 0; i < size; i++) { |
| 422 AnalysisTarget target = new TestSource("/test$i.dart"); | 557 AnalysisTarget target = new TestSource("/test$i.dart"); |
| 423 CacheEntry entry = new CacheEntry(); | 558 CacheEntry entry = new CacheEntry(); |
| 424 entry.setValue(result, node); | 559 entry.setValue(result, node, TargetedResult.EMPTY_LIST); |
| 425 partition.put(target, entry); | 560 partition.put(target, entry); |
| 426 partition.accessedAst(target); | 561 partition.accessedAst(target); |
| 427 } | 562 } |
| 428 | 563 |
| 429 void assertNonFlushedCount(int expectedCount, CachePartition partition) { | 564 void assertNonFlushedCount(int expectedCount, CachePartition partition) { |
| 430 int nonFlushedCount = 0; | 565 int nonFlushedCount = 0; |
| 431 Map<AnalysisTarget, CacheEntry> entryMap = partition.map; | 566 Map<AnalysisTarget, CacheEntry> entryMap = partition.map; |
| 432 entryMap.values.forEach((CacheEntry entry) { | 567 entryMap.values.forEach((CacheEntry entry) { |
| 433 if (entry.getState(result) != CacheState.FLUSHED) { | 568 if (entry.getState(result) != CacheState.FLUSHED) { |
| 434 nonFlushedCount++; | 569 nonFlushedCount++; |
| (...skipping 69 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 504 return new UniversalCachePartition(null, 8, policy); | 639 return new UniversalCachePartition(null, 8, policy); |
| 505 } | 640 } |
| 506 | 641 |
| 507 void test_contains() { | 642 void test_contains() { |
| 508 UniversalCachePartition partition = | 643 UniversalCachePartition partition = |
| 509 new UniversalCachePartition(null, 8, null); | 644 new UniversalCachePartition(null, 8, null); |
| 510 TestSource source = new TestSource(); | 645 TestSource source = new TestSource(); |
| 511 expect(partition.contains(source), isTrue); | 646 expect(partition.contains(source), isTrue); |
| 512 } | 647 } |
| 513 } | 648 } |
| OLD | NEW |