Skip to content

Commit 35a4933

Browse files
authored
Prepare images for tests individually to enable clean up of cache. (#149693)
1 parent 1fdb40e commit 35a4933

File tree

1 file changed

+20
-12
lines changed

1 file changed

+20
-12
lines changed

packages/flutter/test/widgets/box_decoration_test.dart

+20-12
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,6 @@ import 'dart:ui' as ui show Image;
99
import 'package:flutter/foundation.dart';
1010
import 'package:flutter/material.dart';
1111
import 'package:flutter_test/flutter_test.dart';
12-
import 'package:leak_tracker_flutter_testing/leak_tracker_flutter_testing.dart';
1312

1413
import '../image_data.dart';
1514

@@ -18,7 +17,13 @@ class TestImageProvider extends ImageProvider<TestImageProvider> {
1817

1918
final Future<void> future;
2019

21-
static late ui.Image image;
20+
static final List<ui.Image> _images = <ui.Image>[];
21+
22+
static Future<void> prepareImages(int count) async {
23+
for (int i = 0; i < count; i++) {
24+
_images.add(await decodeImageFromList(Uint8List.fromList(kTransparentImage)));
25+
}
26+
}
2227

2328
@override
2429
Future<TestImageProvider> obtainKey(ImageConfiguration configuration) {
@@ -27,20 +32,25 @@ class TestImageProvider extends ImageProvider<TestImageProvider> {
2732

2833
@override
2934
ImageStreamCompleter loadImage(TestImageProvider key, ImageDecoderCallback decode) {
35+
assert(_images.isNotEmpty, 'ask for more images in `prepareImages`');
36+
final ui.Image image = _images.last;
37+
_images.removeLast();
38+
3039
return OneFrameImageStreamCompleter(
31-
future.then<ImageInfo>((void value) => ImageInfo(image: image)),
40+
future.then<ImageInfo>((void value) {
41+
final ImageInfo result = ImageInfo(image: image);
42+
return result;
43+
}),
3244
);
3345
}
3446
}
3547

3648
Future<void> main() async {
3749
AutomatedTestWidgetsFlutterBinding();
38-
TestImageProvider.image = await decodeImageFromList(Uint8List.fromList(kTransparentImage));
50+
await TestImageProvider.prepareImages(2);
3951

40-
testWidgets('DecoratedBox handles loading images',
41-
// TODO(polina-c): dispose ImageStreamCompleterHandle, https://github.com/flutter/flutter/issues/145599 [leaks-to-clean]
42-
experimentalLeakTesting: LeakTesting.settings.withIgnoredAll(),
43-
(WidgetTester tester) async {
52+
testWidgets('DecoratedBox handles loading images', (WidgetTester tester) async {
53+
addTearDown(imageCache.clear);
4454
final GlobalKey key = GlobalKey();
4555
final Completer<void> completer = Completer<void>();
4656
await tester.pumpWidget(
@@ -63,10 +73,8 @@ Future<void> main() async {
6373
expect(tester.binding.hasScheduledFrame, isFalse);
6474
});
6575

66-
testWidgets('Moving a DecoratedBox',
67-
// TODO(polina-c): dispose ImageStreamCompleterHandle, https://github.com/flutter/flutter/issues/145599 [leaks-to-clean]
68-
experimentalLeakTesting: LeakTesting.settings.withIgnoredAll(),
69-
(WidgetTester tester) async {
76+
testWidgets('Moving a DecoratedBox', (WidgetTester tester) async {
77+
addTearDown(imageCache.clear);
7078
final Completer<void> completer = Completer<void>();
7179
final Widget subtree = KeyedSubtree(
7280
key: GlobalKey(),

0 commit comments

Comments
 (0)