mirror of
https://github.com/flutter/flutter
synced 2024-10-02 14:34:22 +00:00
Prepare images for tests individually to enable clean up of cache. (#149693)
This commit is contained in:
parent
1fdb40ea95
commit
35a4933ba8
|
@ -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(),
|
||||
|
|
Loading…
Reference in a new issue