twonly-app-dependencies/lottie/test/render_cache_store_test.dart
2025-12-07 16:10:41 +01:00

107 lines
2.7 KiB
Dart

import 'dart:io';
import 'dart:ui';
import 'package:flutter_test/flutter_test.dart';
import 'package:lottie/lottie.dart';
import 'package:lottie/src/render_cache/key.dart';
import 'package:lottie/src/render_cache/store_raster.dart';
void main() {
var animationBytes = File(
'example/assets/AndroidWave.json',
).readAsBytesSync();
var key1 = CacheKey(
composition: LottieComposition.parseJsonBytes(animationBytes),
size: const Size(10, 10),
config: const [FrameRate.composition],
delegates: 0,
);
var key2 = CacheKey(
composition: LottieComposition.parseJsonBytes(animationBytes),
size: const Size(20, 10),
config: const [FrameRate.composition],
delegates: 0,
);
test('RenderCache acquire/release logic', () async {
var cache = RasterStore(5000000);
var user = Object();
var handle = cache.acquire(user);
var entry = handle.withKey(key1);
entry.imageForProgress(0, (p0) {});
expect(cache.imageCount, 1);
cache.release(user);
expect(cache.imageCount, 0);
});
test('RenderCache change key', () async {
var cache = RasterStore(500000);
var user = Object();
var handle = cache.acquire(user);
var entry = handle.withKey(key1);
entry.imageForProgress(0, (p0) {});
expect(cache.imageCount, 1);
entry = handle.withKey(key2);
expect(cache.imageCount, 0);
entry.imageForProgress(0, (p0) {});
entry.imageForProgress(0, (p0) {});
expect(cache.imageCount, 1);
});
test('RenderCache acquire with same key', () async {
var cache = RasterStore(5000000);
var user1 = Object();
var user2 = Object();
var handle1 = cache.acquire(user1);
var entry1 = handle1.withKey(key1);
entry1.imageForProgress(0, (p0) {});
expect(cache.imageCount, 1);
var handle2 = cache.acquire(user2);
var entry2 = handle2.withKey(key1);
expect(entry1, entry2);
cache.release(user2);
expect(cache.imageCount, 1);
entry1.imageForProgress(1, (p0) {});
expect(cache.imageCount, 2);
});
test('RenderCache change key and release', () async {
var cache = RasterStore(50000000);
var user1 = Object();
var user2 = Object();
var handle1 = cache.acquire(user1);
var entry1 = handle1.withKey(key1);
entry1.imageForProgress(0, (p0) {});
expect(cache.imageCount, 1);
var handle2 = cache.acquire(user2);
var entry2 = handle2.withKey(key1);
expect(entry1, entry2);
entry2 = handle2.withKey(key2);
expect(entry1, isNot(equals(entry2)));
expect(cache.imageCount, 1);
entry2.imageForProgress(0, (p0) {});
expect(cache.imageCount, 2);
cache.release(user2);
expect(cache.imageCount, 1);
cache.release(user1);
expect(cache.imageCount, 0);
});
}