Skip to content

Commit f52fe4f

Browse files
authored
[leak-tracking] Add leak tracking in test/painting #2 (flutter#136169)
1 parent 6dce142 commit f52fe4f

File tree

2 files changed

+31
-29
lines changed

2 files changed

+31
-29
lines changed

packages/flutter/test/painting/continuous_rectangle_border_test.dart

+8-7
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,7 @@ library;
99

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';
1213

1314
void main() {
1415
test('ContinuousRectangleBorder defaults', () {
@@ -108,7 +109,7 @@ void main() {
108109
expect(border.getInnerPath(rect,textDirection: TextDirection.rtl), looksLikeRectRtl);
109110
});
110111

111-
testWidgets('Golden test even radii', (WidgetTester tester) async {
112+
testWidgetsWithLeakTracking('Golden test even radii', (WidgetTester tester) async {
112113
await tester.pumpWidget(RepaintBoundary(
113114
child: Material(
114115
color: Colors.blueAccent[400],
@@ -126,7 +127,7 @@ void main() {
126127
);
127128
});
128129

129-
testWidgets('Golden test varying radii', (WidgetTester tester) async {
130+
testWidgetsWithLeakTracking('Golden test varying radii', (WidgetTester tester) async {
130131
await tester.pumpWidget(RepaintBoundary(
131132
child: Material(
132133
color: Colors.green[100],
@@ -149,7 +150,7 @@ void main() {
149150
);
150151
});
151152

152-
testWidgets('Golden test topLeft radii', (WidgetTester tester) async {
153+
testWidgetsWithLeakTracking('Golden test topLeft radii', (WidgetTester tester) async {
153154
await tester.pumpWidget(RepaintBoundary(
154155
child: Material(
155156
color: Colors.green[200],
@@ -169,7 +170,7 @@ void main() {
169170
);
170171
});
171172

172-
testWidgets('Golden test topRight radii', (WidgetTester tester) async {
173+
testWidgetsWithLeakTracking('Golden test topRight radii', (WidgetTester tester) async {
173174
await tester.pumpWidget(RepaintBoundary(
174175
child: Material(
175176
color: Colors.green[300],
@@ -189,7 +190,7 @@ void main() {
189190
);
190191
});
191192

192-
testWidgets('Golden test bottomLeft radii', (WidgetTester tester) async {
193+
testWidgetsWithLeakTracking('Golden test bottomLeft radii', (WidgetTester tester) async {
193194
await tester.pumpWidget(RepaintBoundary(
194195
child: Material(
195196
color: Colors.green[400],
@@ -209,7 +210,7 @@ void main() {
209210
);
210211
});
211212

212-
testWidgets('Golden test bottomRight radii', (WidgetTester tester) async {
213+
testWidgetsWithLeakTracking('Golden test bottomRight radii', (WidgetTester tester) async {
213214
await tester.pumpWidget(RepaintBoundary(
214215
child: Material(
215216
color: Colors.green[500],
@@ -229,7 +230,7 @@ void main() {
229230
);
230231
});
231232

232-
testWidgets('Golden test large radii', (WidgetTester tester) async {
233+
testWidgetsWithLeakTracking('Golden test large radii', (WidgetTester tester) async {
233234
await tester.pumpWidget(RepaintBoundary(
234235
child: Material(
235236
color: Colors.redAccent[400],

packages/flutter/test/painting/image_stream_test.dart

+23-22
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,7 @@ import 'package:flutter/foundation.dart';
99
import 'package:flutter/painting.dart';
1010
import 'package:flutter/scheduler.dart' show SchedulerBinding, timeDilation;
1111
import 'package:flutter_test/flutter_test.dart';
12+
import 'package:leak_tracker_flutter_testing/leak_tracker_flutter_testing.dart';
1213

1314
import '../image_data.dart';
1415
import 'fake_codec.dart';
@@ -84,7 +85,7 @@ void main() {
8485
image200x100 = await createTestImage(width: 200, height: 100);
8586
});
8687

87-
testWidgets('Codec future fails', (WidgetTester tester) async {
88+
testWidgetsWithLeakTracking('Codec future fails', (WidgetTester tester) async {
8889
final Completer<Codec> completer = Completer<Codec>();
8990
MultiFrameImageStreamCompleter(
9091
codec: completer.future,
@@ -95,7 +96,7 @@ void main() {
9596
expect(tester.takeException(), 'failure message');
9697
});
9798

98-
testWidgets('Decoding starts when a listener is added after codec is ready', (WidgetTester tester) async {
99+
testWidgetsWithLeakTracking('Decoding starts when a listener is added after codec is ready', (WidgetTester tester) async {
99100
final Completer<Codec> completer = Completer<Codec>();
100101
final MockCodec mockCodec = MockCodec();
101102
mockCodec.frameCount = 1;
@@ -114,7 +115,7 @@ void main() {
114115
expect(mockCodec.numFramesAsked, 1);
115116
});
116117

117-
testWidgets('Decoding starts when a codec is ready after a listener is added', (WidgetTester tester) async {
118+
testWidgetsWithLeakTracking('Decoding starts when a codec is ready after a listener is added', (WidgetTester tester) async {
118119
final Completer<Codec> completer = Completer<Codec>();
119120
final MockCodec mockCodec = MockCodec();
120121
mockCodec.frameCount = 1;
@@ -133,7 +134,7 @@ void main() {
133134
expect(mockCodec.numFramesAsked, 1);
134135
});
135136

136-
testWidgets('Decoding does not crash when disposed', (WidgetTester tester) async {
137+
testWidgetsWithLeakTracking('Decoding does not crash when disposed', (WidgetTester tester) async {
137138
final Completer<Codec> completer = Completer<Codec>();
138139
final MockCodec mockCodec = MockCodec();
139140
mockCodec.frameCount = 1;
@@ -158,7 +159,7 @@ void main() {
158159
await tester.idle();
159160
});
160161

161-
testWidgets('Chunk events of base ImageStreamCompleter are delivered', (WidgetTester tester) async {
162+
testWidgetsWithLeakTracking('Chunk events of base ImageStreamCompleter are delivered', (WidgetTester tester) async {
162163
final List<ImageChunkEvent> chunkEvents = <ImageChunkEvent>[];
163164
final StreamController<ImageChunkEvent> streamController = StreamController<ImageChunkEvent>();
164165
final ImageStreamCompleter imageStream = FakeEventReportingImageStreamCompleter(
@@ -182,7 +183,7 @@ void main() {
182183
expect(chunkEvents[1].expectedTotalBytes, 3);
183184
});
184185

185-
testWidgets('Chunk events of base ImageStreamCompleter are not buffered before listener registration', (WidgetTester tester) async {
186+
testWidgetsWithLeakTracking('Chunk events of base ImageStreamCompleter are not buffered before listener registration', (WidgetTester tester) async {
186187
final List<ImageChunkEvent> chunkEvents = <ImageChunkEvent>[];
187188
final StreamController<ImageChunkEvent> streamController = StreamController<ImageChunkEvent>();
188189
final ImageStreamCompleter imageStream = FakeEventReportingImageStreamCompleter(
@@ -205,7 +206,7 @@ void main() {
205206
expect(chunkEvents[0].expectedTotalBytes, 3);
206207
});
207208

208-
testWidgets('Chunk events of MultiFrameImageStreamCompleter are delivered', (WidgetTester tester) async {
209+
testWidgetsWithLeakTracking('Chunk events of MultiFrameImageStreamCompleter are delivered', (WidgetTester tester) async {
209210
final List<ImageChunkEvent> chunkEvents = <ImageChunkEvent>[];
210211
final Completer<Codec> completer = Completer<Codec>();
211212
final StreamController<ImageChunkEvent> streamController = StreamController<ImageChunkEvent>();
@@ -232,7 +233,7 @@ void main() {
232233
expect(chunkEvents[1].expectedTotalBytes, 3);
233234
});
234235

235-
testWidgets('Chunk events of MultiFrameImageStreamCompleter are not buffered before listener registration', (WidgetTester tester) async {
236+
testWidgetsWithLeakTracking('Chunk events of MultiFrameImageStreamCompleter are not buffered before listener registration', (WidgetTester tester) async {
236237
final List<ImageChunkEvent> chunkEvents = <ImageChunkEvent>[];
237238
final Completer<Codec> completer = Completer<Codec>();
238239
final StreamController<ImageChunkEvent> streamController = StreamController<ImageChunkEvent>();
@@ -258,7 +259,7 @@ void main() {
258259
expect(chunkEvents[0].expectedTotalBytes, 3);
259260
});
260261

261-
testWidgets('Chunk errors are reported', (WidgetTester tester) async {
262+
testWidgetsWithLeakTracking('Chunk errors are reported', (WidgetTester tester) async {
262263
final List<ImageChunkEvent> chunkEvents = <ImageChunkEvent>[];
263264
final Completer<Codec> completer = Completer<Codec>();
264265
final StreamController<ImageChunkEvent> streamController = StreamController<ImageChunkEvent>();
@@ -284,7 +285,7 @@ void main() {
284285
expect(chunkEvents[0].expectedTotalBytes, 3);
285286
});
286287

287-
testWidgets('getNextFrame future fails', (WidgetTester tester) async {
288+
testWidgetsWithLeakTracking('getNextFrame future fails', (WidgetTester tester) async {
288289
final MockCodec mockCodec = MockCodec();
289290
mockCodec.frameCount = 1;
290291
final Completer<Codec> codecCompleter = Completer<Codec>();
@@ -309,7 +310,7 @@ void main() {
309310
expect(tester.takeException(), 'frame completion error');
310311
});
311312

312-
testWidgets('ImageStream emits frame (static image)', (WidgetTester tester) async {
313+
testWidgetsWithLeakTracking('ImageStream emits frame (static image)', (WidgetTester tester) async {
313314
final MockCodec mockCodec = MockCodec();
314315
mockCodec.frameCount = 1;
315316
final Completer<Codec> codecCompleter = Completer<Codec>();
@@ -334,7 +335,7 @@ void main() {
334335
expect(emittedImages.every((ImageInfo info) => info.image.isCloneOf(frame.image)), true);
335336
});
336337

337-
testWidgets('ImageStream emits frames (animated images)', (WidgetTester tester) async {
338+
testWidgetsWithLeakTracking('ImageStream emits frames (animated images)', (WidgetTester tester) async {
338339
final MockCodec mockCodec = MockCodec();
339340
mockCodec.frameCount = 2;
340341
mockCodec.repetitionCount = -1;
@@ -380,7 +381,7 @@ void main() {
380381
await tester.pump(const Duration(milliseconds: 400));
381382
});
382383

383-
testWidgets('animation wraps back', (WidgetTester tester) async {
384+
testWidgetsWithLeakTracking('animation wraps back', (WidgetTester tester) async {
384385
final MockCodec mockCodec = MockCodec();
385386
mockCodec.frameCount = 2;
386387
mockCodec.repetitionCount = -1;
@@ -421,7 +422,7 @@ void main() {
421422
await tester.pump(const Duration(milliseconds: 200));
422423
});
423424

424-
testWidgets("animation doesn't repeat more than specified", (WidgetTester tester) async {
425+
testWidgetsWithLeakTracking("animation doesn't repeat more than specified", (WidgetTester tester) async {
425426
final MockCodec mockCodec = MockCodec();
426427
mockCodec.frameCount = 2;
427428
mockCodec.repetitionCount = 0;
@@ -459,7 +460,7 @@ void main() {
459460
expect(emittedImages[1].image.isCloneOf(frame2.image), true);
460461
});
461462

462-
testWidgets('frames are only decoded when there are listeners', (WidgetTester tester) async {
463+
testWidgetsWithLeakTracking('frames are only decoded when there are listeners', (WidgetTester tester) async {
463464
final MockCodec mockCodec = MockCodec();
464465
mockCodec.frameCount = 2;
465466
mockCodec.repetitionCount = -1;
@@ -499,7 +500,7 @@ void main() {
499500
handle.dispose();
500501
});
501502

502-
testWidgets('multiple stream listeners', (WidgetTester tester) async {
503+
testWidgetsWithLeakTracking('multiple stream listeners', (WidgetTester tester) async {
503504
final MockCodec mockCodec = MockCodec();
504505
mockCodec.frameCount = 2;
505506
mockCodec.repetitionCount = -1;
@@ -546,7 +547,7 @@ void main() {
546547

547548
});
548549

549-
testWidgets('timer is canceled when listeners are removed', (WidgetTester tester) async {
550+
testWidgetsWithLeakTracking('timer is canceled when listeners are removed', (WidgetTester tester) async {
550551
final MockCodec mockCodec = MockCodec();
551552
mockCodec.frameCount = 2;
552553
mockCodec.repetitionCount = -1;
@@ -579,7 +580,7 @@ void main() {
579580
// point.
580581
});
581582

582-
testWidgets('timeDilation affects animation frame timers', (WidgetTester tester) async {
583+
testWidgetsWithLeakTracking('timeDilation affects animation frame timers', (WidgetTester tester) async {
583584
final MockCodec mockCodec = MockCodec();
584585
mockCodec.frameCount = 2;
585586
mockCodec.repetitionCount = -1;
@@ -616,7 +617,7 @@ void main() {
616617
timeDilation = 1.0; // restore time dilation, or it will affect other tests
617618
});
618619

619-
testWidgets('error handlers can intercept errors', (WidgetTester tester) async {
620+
testWidgetsWithLeakTracking('error handlers can intercept errors', (WidgetTester tester) async {
620621
final MockCodec mockCodec = MockCodec();
621622
mockCodec.frameCount = 1;
622623
final Completer<Codec> codecCompleter = Completer<Codec>();
@@ -651,7 +652,7 @@ void main() {
651652
expect(capturedException, 'frame completion error');
652653
});
653654

654-
testWidgets('remove and add listener ', (WidgetTester tester) async {
655+
testWidgetsWithLeakTracking('remove and add listener ', (WidgetTester tester) async {
655656
final MockCodec mockCodec = MockCodec();
656657
mockCodec.frameCount = 3;
657658
mockCodec.repetitionCount = 0;
@@ -682,7 +683,7 @@ void main() {
682683
await tester.pump(const Duration(milliseconds: 200)); // emit 2nd frame.
683684
});
684685

685-
testWidgets('ImageStreamListener hashCode and equals', (WidgetTester tester) async {
686+
testWidgetsWithLeakTracking('ImageStreamListener hashCode and equals', (WidgetTester tester) async {
686687
void handleImage(ImageInfo image, bool synchronousCall) { }
687688
void handleImageDifferently(ImageInfo image, bool synchronousCall) { }
688689
void handleError(dynamic error, StackTrace? stackTrace) { }
@@ -714,7 +715,7 @@ void main() {
714715
compare(onImage1: handleImage, onChunk1: handleChunk, onError1: handleError, onImage2: handleImage, onError2: handleError, areEqual: false);
715716
});
716717

717-
testWidgets('Keep alive handles do not drive frames or prevent last listener callbacks', (WidgetTester tester) async {
718+
testWidgetsWithLeakTracking('Keep alive handles do not drive frames or prevent last listener callbacks', (WidgetTester tester) async {
718719
final Image image10x10 = (await tester.runAsync(() => createTestImage(width: 10, height: 10)))!;
719720
final MockCodec mockCodec = MockCodec();
720721
mockCodec.frameCount = 2;

0 commit comments

Comments
 (0)