| // Copyright 2013 The Flutter Authors. All rights reserved. |
| // Use of this source code is governed by a BSD-style license that can be |
| // found in the LICENSE file. |
| |
| import 'package:test/bootstrap/browser.dart'; |
| import 'package:test/test.dart'; |
| import 'package:ui/src/engine/util.dart'; |
| |
| typedef TestCacheEntry = ({String key, int value}); |
| |
| void main() { |
| internalBootstrapBrowserTest(() => testMain); |
| } |
| |
| void testMain() { |
| test('$LruCache starts out empty', () { |
| final LruCache<String, int> cache = LruCache<String, int>(10); |
| expect(cache.length, 0); |
| }); |
| |
| test('$LruCache adds up to a maximum number of items in most recently used first order', () { |
| final LruCache<String, int> cache = LruCache<String, int>(3); |
| cache.cache('a', 1); |
| expect(cache.debugItemQueue.toList(), <TestCacheEntry>[ |
| (key: 'a', value: 1), |
| ]); |
| expect(cache['a'], 1); |
| expect(cache['b'], isNull); |
| |
| cache.cache('b', 2); |
| expect(cache.debugItemQueue.toList(), <TestCacheEntry>[ |
| (key: 'b', value: 2), |
| (key: 'a', value: 1), |
| ]); |
| expect(cache['a'], 1); |
| expect(cache['b'], 2); |
| |
| cache.cache('c', 3); |
| expect(cache.debugItemQueue.toList(), <TestCacheEntry>[ |
| (key: 'c', value: 3), |
| (key: 'b', value: 2), |
| (key: 'a', value: 1), |
| ]); |
| |
| cache.cache('d', 4); |
| expect(cache.debugItemQueue.toList(), <TestCacheEntry>[ |
| (key: 'd', value: 4), |
| (key: 'c', value: 3), |
| (key: 'b', value: 2), |
| ]); |
| |
| cache.cache('e', 5); |
| expect(cache.debugItemQueue.toList(), <TestCacheEntry>[ |
| (key: 'e', value: 5), |
| (key: 'd', value: 4), |
| (key: 'c', value: 3), |
| ]); |
| }); |
| |
| test('$LruCache promotes entry to most recently used position', () { |
| final LruCache<String, int> cache = LruCache<String, int>(3); |
| cache.cache('a', 1); |
| cache.cache('b', 2); |
| cache.cache('c', 3); |
| expect(cache.debugItemQueue.toList(), <TestCacheEntry>[ |
| (key: 'c', value: 3), |
| (key: 'b', value: 2), |
| (key: 'a', value: 1), |
| ]); |
| |
| cache.cache('b', 2); |
| expect(cache.debugItemQueue.toList(), <TestCacheEntry>[ |
| (key: 'b', value: 2), |
| (key: 'c', value: 3), |
| (key: 'a', value: 1), |
| ]); |
| }); |
| |
| test('$LruCache updates and promotes entry to most recently used position', () { |
| final LruCache<String, int> cache = LruCache<String, int>(3); |
| cache.cache('a', 1); |
| cache.cache('b', 2); |
| cache.cache('c', 3); |
| expect(cache.debugItemQueue.toList(), <TestCacheEntry>[ |
| (key: 'c', value: 3), |
| (key: 'b', value: 2), |
| (key: 'a', value: 1), |
| ]); |
| expect(cache['b'], 2); |
| |
| cache.cache('b', 42); |
| expect(cache.debugItemQueue.toList(), <TestCacheEntry>[ |
| (key: 'b', value: 42), |
| (key: 'c', value: 3), |
| (key: 'a', value: 1), |
| ]); |
| expect(cache['b'], 42); |
| }); |
| } |