blob: ba1dfcaea0fd600738f29fdfa5b54d26a60ef511 [file] [log] [blame]
// 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);
});
}