Skip to content

Commit 5fe7eeb

Browse files
committed
test: Add error handling listeners to ImageStream tests
1 parent 1e0fe08 commit 5fe7eeb

3 files changed

Lines changed: 134 additions & 119 deletions

File tree

packages/flutter/test/painting/image_provider_and_image_cache_test.dart

Lines changed: 21 additions & 22 deletions
Original file line numberDiff line numberDiff line change
@@ -57,13 +57,15 @@ void main() {
5757
expect(imageCache.pendingImageCount, 0);
5858

5959
final ImageStream stream = provider.resolve(ImageConfiguration.empty);
60+
// Add a listener with onError to ensure the error is reported.
6061
final listener = ImageStreamListener(
6162
(ImageInfo info, bool syncCall) {},
6263
onError: (Object exception, StackTrace? stackTrace) {
6364
throw exception;
6465
},
6566
);
6667
stream.addListener(listener);
68+
addTearDown(() => stream.removeListener(listener));
6769

6870
expect(imageCache.statusForKey(key).pending, true);
6971
expect(imageCache.pendingImageCount, 1);
@@ -72,17 +74,16 @@ void main() {
7274

7375
expect(imageCache.statusForKey(provider).untracked, true);
7476
expect(imageCache.pendingImageCount, 0);
75-
stream.removeListener(listener);
7677
}, skip: isBrowser); // https://github.com/flutter/flutter/issues/56314
7778

7879
test('ImageProvider can evict images', () async {
7980
final bytes = Uint8List.fromList(kTransparentImage);
8081
final imageProvider = MemoryImage(bytes);
8182
final ImageStream stream = imageProvider.resolve(ImageConfiguration.empty);
8283
final completer = Completer<void>();
83-
stream.addListener(
84-
ImageStreamListener((ImageInfo info, bool syncCall) => completer.complete()),
85-
);
84+
final listener = ImageStreamListener((ImageInfo info, bool syncCall) => completer.complete());
85+
stream.addListener(listener);
86+
addTearDown(() => stream.removeListener(listener));
8687
await completer.future;
8788

8889
expect(imageCache.currentSize, 1);
@@ -101,16 +102,14 @@ void main() {
101102
final ImageStream stream = imageProvider.resolve(ImageConfiguration.empty);
102103
final completer = Completer<void>();
103104
final cacheCompleter = Completer<void>();
104-
stream.addListener(
105-
ImageStreamListener((ImageInfo info, bool syncCall) {
106-
completer.complete();
107-
}),
108-
);
109-
cacheStream.addListener(
110-
ImageStreamListener((ImageInfo info, bool syncCall) {
111-
cacheCompleter.complete();
112-
}),
105+
final listener = ImageStreamListener((ImageInfo info, bool syncCall) => completer.complete());
106+
stream.addListener(listener);
107+
addTearDown(() => stream.removeListener(listener));
108+
final cacheListener = ImageStreamListener(
109+
(ImageInfo info, bool syncCall) => cacheCompleter.complete(),
113110
);
111+
cacheStream.addListener(cacheListener);
112+
addTearDown(() => cacheStream.removeListener(cacheListener));
114113
await Future.wait(<Future<void>>[completer.future, cacheCompleter.future]);
115114

116115
expect(otherCache.currentSize, 1);
@@ -127,16 +126,16 @@ void main() {
127126
caughtError.complete(false);
128127
};
129128
final ImageStream stream = imageProvider.resolve(ImageConfiguration.empty);
130-
stream.addListener(
131-
ImageStreamListener(
132-
(ImageInfo info, bool syncCall) {
133-
caughtError.complete(false);
134-
},
135-
onError: (dynamic error, StackTrace? stackTrace) {
136-
caughtError.complete(true);
137-
},
138-
),
129+
final listener = ImageStreamListener(
130+
(ImageInfo info, bool syncCall) {
131+
caughtError.complete(false);
132+
},
133+
onError: (dynamic error, StackTrace? stackTrace) {
134+
caughtError.complete(true);
135+
},
139136
);
137+
stream.addListener(listener);
138+
addTearDown(() => stream.removeListener(listener));
140139
expect(await caughtError.future, true);
141140
});
142141
}

packages/flutter/test/painting/image_provider_test.dart

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -74,23 +74,23 @@ void main() {
7474
expect(imageCache.statusForKey(provider).untracked, true);
7575
expect(imageCache.pendingImageCount, 0);
7676

77-
// Add an active listener to ensure the error is reported.
7877
final ImageStream stream = provider.resolve(ImageConfiguration.empty);
78+
// Add a listener with onError to ensure the error is reported.
7979
final listener = ImageStreamListener(
8080
(ImageInfo info, bool syncCall) {},
8181
onError: (Object exception, StackTrace? stackTrace) {
8282
throw exception;
8383
},
8484
);
8585
stream.addListener(listener);
86+
addTearDown(() => stream.removeListener(listener));
8687

8788
expect(imageCache.statusForKey(provider).pending, true);
8889
expect(imageCache.pendingImageCount, 1);
8990

9091
expect(await error.future, isStateError);
9192
expect(imageCache.statusForKey(provider).untracked, true);
9293
expect(imageCache.pendingImageCount, 0);
93-
stream.removeListener(listener);
9494
});
9595

9696
test('File image with empty file throws expected error (load)', () async {
@@ -111,18 +111,17 @@ void main() {
111111
return Future<Codec>.value(createNoOpCodec());
112112
});
113113
expect(completer, isA<MultiFrameImageStreamCompleter>());
114-
115-
// Add an active listener to ensure the error is reported.
114+
// Add a listener with onError to ensure the error is reported.
116115
final listener = ImageStreamListener(
117116
(ImageInfo info, bool syncCall) {},
118117
onError: (Object exception, StackTrace? stackTrace) {
119118
throw exception;
120119
},
121120
);
122121
completer.addListener(listener);
122+
addTearDown(() => completer.removeListener(listener));
123123

124124
expect(await error.future, isStateError);
125-
completer.removeListener(listener);
126125
});
127126

128127
test('File image sets tag', () async {
@@ -182,13 +181,15 @@ void main() {
182181
expect(imageCache.pendingImageCount, 0);
183182

184183
final ImageStream stream = provider.resolve(ImageConfiguration.empty);
184+
// Add a listener with onError to ensure the error is reported.
185185
final listener = ImageStreamListener(
186186
(ImageInfo info, bool syncCall) {},
187187
onError: (Object exception, StackTrace? stackTrace) {
188188
throw exception;
189189
},
190190
);
191191
stream.addListener(listener);
192+
addTearDown(() => stream.removeListener(listener));
192193

193194
expect(imageCache.statusForKey(provider).pending, true);
194195
expect(imageCache.pendingImageCount, 1);
@@ -205,7 +206,6 @@ void main() {
205206
// Invalid images are marked as pending so that we do not attempt to reload them.
206207
expect(imageCache.statusForKey(provider).untracked, false);
207208
expect(imageCache.pendingImageCount, 1);
208-
stream.removeListener(listener);
209209
}, skip: kIsWeb); // [intended] The web cannot load files.
210210

211211
test('ImageProvider toStrings', () async {

0 commit comments

Comments
 (0)