From 35a4933ba885ef075ab8be40b896c14eab426dd7 Mon Sep 17 00:00:00 2001 From: Polina Cherkasova Date: Fri, 7 Jun 2024 09:30:56 -0700 Subject: [PATCH] Prepare images for tests individually to enable clean up of cache. (#149693) --- .../test/widgets/box_decoration_test.dart | 32 ++++++++++++------- 1 file changed, 20 insertions(+), 12 deletions(-) diff --git a/packages/flutter/test/widgets/box_decoration_test.dart b/packages/flutter/test/widgets/box_decoration_test.dart index b1abf8d198..5475e93fb5 100644 --- a/packages/flutter/test/widgets/box_decoration_test.dart +++ b/packages/flutter/test/widgets/box_decoration_test.dart @@ -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 { final Future future; - static late ui.Image image; + static final List _images = []; + + static Future prepareImages(int count) async { + for (int i = 0; i < count; i++) { + _images.add(await decodeImageFromList(Uint8List.fromList(kTransparentImage))); + } + } @override Future obtainKey(ImageConfiguration configuration) { @@ -27,20 +32,25 @@ class TestImageProvider extends ImageProvider { @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((void value) => ImageInfo(image: image)), + future.then((void value) { + final ImageInfo result = ImageInfo(image: image); + return result; + }), ); } } Future 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 completer = Completer(); await tester.pumpWidget( @@ -63,10 +73,8 @@ Future 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 completer = Completer(); final Widget subtree = KeyedSubtree( key: GlobalKey(),