Prepare images for tests individually to enable clean up of cache. (#149693)

This commit is contained in:
Polina Cherkasova 2024-06-07 09:30:56 -07:00 committed by GitHub
parent 1fdb40ea95
commit 35a4933ba8
No known key found for this signature in database
GPG key ID: B5690EEEBB952194

View file

@ -9,7 +9,6 @@ import 'dart:ui' as ui show Image;
import 'package:flutter/foundation.dart';
import 'package:flutter/material.dart';
import 'package:flutter_test/flutter_test.dart';
import 'package:leak_tracker_flutter_testing/leak_tracker_flutter_testing.dart';
import '../image_data.dart';
@ -18,7 +17,13 @@ class TestImageProvider extends ImageProvider<TestImageProvider> {
final Future<void> future;
static late ui.Image image;
static final List<ui.Image> _images = <ui.Image>[];
static Future<void> prepareImages(int count) async {
for (int i = 0; i < count; i++) {
_images.add(await decodeImageFromList(Uint8List.fromList(kTransparentImage)));
}
}
@override
Future<TestImageProvider> obtainKey(ImageConfiguration configuration) {
@ -27,20 +32,25 @@ class TestImageProvider extends ImageProvider<TestImageProvider> {
@override
ImageStreamCompleter loadImage(TestImageProvider key, ImageDecoderCallback decode) {
assert(_images.isNotEmpty, 'ask for more images in `prepareImages`');
final ui.Image image = _images.last;
_images.removeLast();
return OneFrameImageStreamCompleter(
future.then<ImageInfo>((void value) => ImageInfo(image: image)),
future.then<ImageInfo>((void value) {
final ImageInfo result = ImageInfo(image: image);
return result;
}),
);
}
}
Future<void> main() async {
AutomatedTestWidgetsFlutterBinding();
TestImageProvider.image = await decodeImageFromList(Uint8List.fromList(kTransparentImage));
await TestImageProvider.prepareImages(2);
testWidgets('DecoratedBox handles loading images',
// TODO(polina-c): dispose ImageStreamCompleterHandle, https://github.com/flutter/flutter/issues/145599 [leaks-to-clean]
experimentalLeakTesting: LeakTesting.settings.withIgnoredAll(),
(WidgetTester tester) async {
testWidgets('DecoratedBox handles loading images', (WidgetTester tester) async {
addTearDown(imageCache.clear);
final GlobalKey key = GlobalKey();
final Completer<void> completer = Completer<void>();
await tester.pumpWidget(
@ -63,10 +73,8 @@ Future<void> main() async {
expect(tester.binding.hasScheduledFrame, isFalse);
});
testWidgets('Moving a DecoratedBox',
// TODO(polina-c): dispose ImageStreamCompleterHandle, https://github.com/flutter/flutter/issues/145599 [leaks-to-clean]
experimentalLeakTesting: LeakTesting.settings.withIgnoredAll(),
(WidgetTester tester) async {
testWidgets('Moving a DecoratedBox', (WidgetTester tester) async {
addTearDown(imageCache.clear);
final Completer<void> completer = Completer<void>();
final Widget subtree = KeyedSubtree(
key: GlobalKey(),