Skip to content

Commit 96a4ae9

Browse files
authored
Cover more test/widgets tests with leak tracking #10 (flutter#135143)
1 parent 9b767e6 commit 96a4ae9

33 files changed

+506
-294
lines changed

packages/flutter/test/widgets/sliver_fill_viewport_test.dart

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -5,9 +5,10 @@
55
import 'package:flutter/material.dart';
66
import 'package:flutter/rendering.dart';
77
import 'package:flutter_test/flutter_test.dart';
8+
import 'package:leak_tracker_flutter_testing/leak_tracker_flutter_testing.dart';
89

910
void main() {
10-
testWidgets('SliverFillViewport control test', (WidgetTester tester) async {
11+
testWidgetsWithLeakTracking('SliverFillViewport control test', (WidgetTester tester) async {
1112
final List<Widget> children = List<Widget>.generate(20, (int i) {
1213
return ColoredBox(color: Colors.green, child: Text('$i', textDirection: TextDirection.ltr));
1314
});
@@ -158,7 +159,7 @@ void main() {
158159
);
159160
});
160161

161-
testWidgets('SliverFillViewport padding test', (WidgetTester tester) async {
162+
testWidgetsWithLeakTracking('SliverFillViewport padding test', (WidgetTester tester) async {
162163
final SliverChildListDelegate delegate = SliverChildListDelegate(
163164
<Widget>[
164165
const Text('0'),

packages/flutter/test/widgets/sliver_list_test.dart

Lines changed: 25 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -4,15 +4,17 @@
44

55
import 'package:flutter/material.dart';
66
import 'package:flutter_test/flutter_test.dart';
7+
import 'package:leak_tracker_flutter_testing/leak_tracker_flutter_testing.dart';
78

89
void main() {
9-
testWidgets('SliverList reverse children (with keys)', (WidgetTester tester) async {
10+
testWidgetsWithLeakTracking('SliverList reverse children (with keys)', (WidgetTester tester) async {
1011
final List<int> items = List<int>.generate(20, (int i) => i);
1112
const double itemHeight = 300.0;
1213
const double viewportHeight = 500.0;
1314

1415
const double scrollPosition = 18 * itemHeight;
1516
final ScrollController controller = ScrollController(initialScrollOffset: scrollPosition);
17+
addTearDown(controller.dispose);
1618

1719
await tester.pumpWidget(_buildSliverList(
1820
items: items,
@@ -53,13 +55,14 @@ void main() {
5355
expect(find.text('Tile 0'), findsNothing);
5456
});
5557

56-
testWidgets('SliverList replace children (with keys)', (WidgetTester tester) async {
58+
testWidgetsWithLeakTracking('SliverList replace children (with keys)', (WidgetTester tester) async {
5759
final List<int> items = List<int>.generate(20, (int i) => i);
5860
const double itemHeight = 300.0;
5961
const double viewportHeight = 500.0;
6062

6163
const double scrollPosition = 18 * itemHeight;
6264
final ScrollController controller = ScrollController(initialScrollOffset: scrollPosition);
65+
addTearDown(controller.dispose);
6366

6467
await tester.pumpWidget(_buildSliverList(
6568
items: items,
@@ -105,13 +108,14 @@ void main() {
105108
expect(find.text('Tile 119'), findsNothing);
106109
});
107110

108-
testWidgets('SliverList replace with shorter children list (with keys)', (WidgetTester tester) async {
111+
testWidgetsWithLeakTracking('SliverList replace with shorter children list (with keys)', (WidgetTester tester) async {
109112
final List<int> items = List<int>.generate(20, (int i) => i);
110113
const double itemHeight = 300.0;
111114
const double viewportHeight = 500.0;
112115

113116
final double scrollPosition = items.length * itemHeight - viewportHeight;
114117
final ScrollController controller = ScrollController(initialScrollOffset: scrollPosition);
118+
addTearDown(controller.dispose);
115119

116120
await tester.pumpWidget(_buildSliverList(
117121
items: items,
@@ -145,28 +149,33 @@ void main() {
145149
expect(find.text('Tile 19'), findsNothing);
146150
});
147151

148-
testWidgets('SliverList should layout first child in case of child reordering', (WidgetTester tester) async {
152+
testWidgetsWithLeakTracking('SliverList should layout first child in case of child reordering', (WidgetTester tester) async {
149153
// Regression test for https://github.com/flutter/flutter/issues/35904.
150154
List<String> items = <String>['1', '2'];
151-
152-
await tester.pumpWidget(_buildSliverListRenderWidgetChild(items));
155+
final ScrollController controller1 = ScrollController();
156+
addTearDown(controller1.dispose);
157+
await tester.pumpWidget(_buildSliverListRenderWidgetChild(items, controller1));
153158
await tester.pumpAndSettle();
154159

155160
expect(find.text('Tile 1'), findsOneWidget);
156161
expect(find.text('Tile 2'), findsOneWidget);
157162

158163
items = items.reversed.toList();
159-
await tester.pumpWidget(_buildSliverListRenderWidgetChild(items));
164+
final ScrollController controller2 = ScrollController();
165+
addTearDown(controller2.dispose);
166+
await tester.pumpWidget(_buildSliverListRenderWidgetChild(items, controller2));
160167
await tester.pumpAndSettle();
161168

162169
expect(find.text('Tile 1'), findsOneWidget);
163170
expect(find.text('Tile 2'), findsOneWidget);
164171
});
165172

166-
testWidgets('SliverList should recalculate inaccurate layout offset case 1', (WidgetTester tester) async {
173+
testWidgetsWithLeakTracking('SliverList should recalculate inaccurate layout offset case 1', (WidgetTester tester) async {
167174
// Regression test for https://github.com/flutter/flutter/issues/42142.
168175
final List<int> items = List<int>.generate(20, (int i) => i);
169176
final ScrollController controller = ScrollController();
177+
addTearDown(controller.dispose);
178+
170179
await tester.pumpWidget(
171180
_buildSliverList(
172181
items: List<int>.from(items),
@@ -223,10 +232,12 @@ void main() {
223232

224233
});
225234

226-
testWidgets('SliverList should recalculate inaccurate layout offset case 2', (WidgetTester tester) async {
235+
testWidgetsWithLeakTracking('SliverList should recalculate inaccurate layout offset case 2', (WidgetTester tester) async {
227236
// Regression test for https://github.com/flutter/flutter/issues/42142.
228237
final List<int> items = List<int>.generate(20, (int i) => i);
229238
final ScrollController controller = ScrollController();
239+
addTearDown(controller.dispose);
240+
230241
await tester.pumpWidget(
231242
_buildSliverList(
232243
items: List<int>.from(items),
@@ -275,10 +286,12 @@ void main() {
275286
expect(find.text('Tile 3'), findsOneWidget);
276287
});
277288

278-
testWidgets('SliverList should start to perform layout from the initial child when there is no valid offset', (WidgetTester tester) async {
289+
testWidgetsWithLeakTracking('SliverList should start to perform layout from the initial child when there is no valid offset', (WidgetTester tester) async {
279290
// Regression test for https://github.com/flutter/flutter/issues/66198.
280291
bool isShow = true;
281292
final ScrollController controller = ScrollController();
293+
addTearDown(controller.dispose);
294+
282295
Widget buildSliverList(ScrollController controller) {
283296
return Directionality(
284297
textDirection: TextDirection.ltr,
@@ -335,15 +348,15 @@ void main() {
335348
});
336349
}
337350

338-
Widget _buildSliverListRenderWidgetChild(List<String> items) {
351+
Widget _buildSliverListRenderWidgetChild(List<String> items, ScrollController controller) {
339352
return MaterialApp(
340353
home: Directionality(
341354
textDirection: TextDirection.ltr,
342355
child: Material(
343356
child: SizedBox(
344357
height: 500,
345358
child: CustomScrollView(
346-
controller: ScrollController(),
359+
controller: controller,
347360
slivers: <Widget>[
348361
SliverList(
349362
delegate: SliverChildListDelegate(

packages/flutter/test/widgets/sliver_main_axis_group_test.dart

Lines changed: 41 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,7 @@
55
import 'package:flutter/material.dart';
66
import 'package:flutter/rendering.dart';
77
import 'package:flutter_test/flutter_test.dart';
8+
import 'package:leak_tracker_flutter_testing/leak_tracker_flutter_testing.dart';
89

910
import '../rendering/sliver_utils.dart';
1011

@@ -13,9 +14,10 @@ const double VIEWPORT_HEIGHT = 600;
1314
const double VIEWPORT_WIDTH = 300;
1415

1516
void main() {
16-
testWidgets('SliverMainAxisGroup is laid out properly', (WidgetTester tester) async {
17+
testWidgetsWithLeakTracking('SliverMainAxisGroup is laid out properly', (WidgetTester tester) async {
1718
final List<int> items = List<int>.generate(20, (int i) => i);
1819
final ScrollController controller = ScrollController();
20+
addTearDown(controller.dispose);
1921

2022
await tester.pumpWidget(
2123
_buildSliverMainAxisGroup(
@@ -64,9 +66,10 @@ void main() {
6466
expect(renderGroup.geometry!.hasVisualOverflow, isTrue);
6567
});
6668

67-
testWidgets('SliverMainAxisGroup is laid out properly when reversed', (WidgetTester tester) async {
69+
testWidgetsWithLeakTracking('SliverMainAxisGroup is laid out properly when reversed', (WidgetTester tester) async {
6870
final List<int> items = List<int>.generate(20, (int i) => i);
6971
final ScrollController controller = ScrollController();
72+
addTearDown(controller.dispose);
7073

7174
await tester.pumpWidget(
7275
_buildSliverMainAxisGroup(
@@ -116,9 +119,10 @@ void main() {
116119
expect(renderGroup.geometry!.hasVisualOverflow, isTrue);
117120
});
118121

119-
testWidgets('SliverMainAxisGroup is laid out properly when horizontal', (WidgetTester tester) async {
122+
testWidgetsWithLeakTracking('SliverMainAxisGroup is laid out properly when horizontal', (WidgetTester tester) async {
120123
final List<int> items = List<int>.generate(20, (int i) => i);
121124
final ScrollController controller = ScrollController();
125+
addTearDown(controller.dispose);
122126

123127
await tester.pumpWidget(
124128
_buildSliverMainAxisGroup(
@@ -173,9 +177,10 @@ void main() {
173177
expect(renderGroup.geometry!.hasVisualOverflow, isTrue);
174178
});
175179

176-
testWidgets('SliverMainAxisGroup is laid out properly when horizontal, reversed', (WidgetTester tester) async {
180+
testWidgetsWithLeakTracking('SliverMainAxisGroup is laid out properly when horizontal, reversed', (WidgetTester tester) async {
177181
final List<int> items = List<int>.generate(20, (int i) => i);
178182
final ScrollController controller = ScrollController();
183+
addTearDown(controller.dispose);
179184

180185
await tester.pumpWidget(
181186
_buildSliverMainAxisGroup(
@@ -231,9 +236,10 @@ void main() {
231236
expect(renderGroup.geometry!.hasVisualOverflow, isTrue);
232237
});
233238

234-
testWidgets('Hit test works properly on various parts of SliverMainAxisGroup', (WidgetTester tester) async {
239+
testWidgetsWithLeakTracking('Hit test works properly on various parts of SliverMainAxisGroup', (WidgetTester tester) async {
235240
final List<int> items = List<int>.generate(20, (int i) => i);
236241
final ScrollController controller = ScrollController();
242+
addTearDown(controller.dispose);
237243

238244
String? clickedTile;
239245

@@ -303,7 +309,7 @@ void main() {
303309
expect(clickedTile, equals('Group 1 Tile 2'));
304310
});
305311

306-
testWidgets('applyPaintTransform is implemented properly', (WidgetTester tester) async {
312+
testWidgetsWithLeakTracking('applyPaintTransform is implemented properly', (WidgetTester tester) async {
307313
await tester.pumpWidget(_buildSliverMainAxisGroup(
308314
slivers: <Widget>[
309315
const SliverToBoxAdapter(child: Text('first box')),
@@ -319,8 +325,10 @@ void main() {
319325
expect(second.localToGlobal(Offset.zero), Offset(0, first.size.height));
320326
});
321327

322-
testWidgets('visitChildrenForSemantics visits children in the correct order', (WidgetTester tester) async {
328+
testWidgetsWithLeakTracking('visitChildrenForSemantics visits children in the correct order', (WidgetTester tester) async {
323329
final ScrollController controller = ScrollController();
330+
addTearDown(controller.dispose);
331+
324332
await tester.pumpWidget(_buildSliverMainAxisGroup(
325333
controller: controller,
326334
slivers: const <Widget>[
@@ -344,8 +352,10 @@ void main() {
344352
expect(visitedChildren[1].geometry!.scrollExtent, equals(500));
345353
});
346354

347-
testWidgets('SliverPinnedPersistentHeader is painted within bounds of SliverMainAxisGroup', (WidgetTester tester) async {
355+
testWidgetsWithLeakTracking('SliverPinnedPersistentHeader is painted within bounds of SliverMainAxisGroup', (WidgetTester tester) async {
348356
final ScrollController controller = ScrollController();
357+
addTearDown(controller.dispose);
358+
349359
await tester.pumpWidget(_buildSliverMainAxisGroup(
350360
controller: controller,
351361
slivers: <Widget>[
@@ -371,8 +381,10 @@ void main() {
371381
});
372382

373383

374-
testWidgets('SliverFloatingPersistentHeader is painted within bounds of SliverMainAxisGroup', (WidgetTester tester) async {
384+
testWidgetsWithLeakTracking('SliverFloatingPersistentHeader is painted within bounds of SliverMainAxisGroup', (WidgetTester tester) async {
375385
final ScrollController controller = ScrollController();
386+
addTearDown(controller.dispose);
387+
376388
await tester.pumpWidget(_buildSliverMainAxisGroup(
377389
controller: controller,
378390
slivers: <Widget>[
@@ -400,8 +412,10 @@ void main() {
400412
expect((renderHeader.parentData! as SliverPhysicalParentData).paintOffset.dy, equals(0.0));
401413
});
402414

403-
testWidgets('SliverPinnedPersistentHeader is painted within bounds of SliverMainAxisGroup with different minExtent/maxExtent', (WidgetTester tester) async {
415+
testWidgetsWithLeakTracking('SliverPinnedPersistentHeader is painted within bounds of SliverMainAxisGroup with different minExtent/maxExtent', (WidgetTester tester) async {
404416
final ScrollController controller = ScrollController();
417+
addTearDown(controller.dispose);
418+
405419
await tester.pumpWidget(_buildSliverMainAxisGroup(
406420
controller: controller,
407421
slivers: <Widget>[
@@ -429,8 +443,10 @@ void main() {
429443
expect((renderHeader.parentData! as SliverPhysicalParentData).paintOffset.dy, equals(0.0));
430444
});
431445

432-
testWidgets('SliverFloatingPersistentHeader is painted within bounds of SliverMainAxisGroup with different minExtent/maxExtent', (WidgetTester tester) async {
446+
testWidgetsWithLeakTracking('SliverFloatingPersistentHeader is painted within bounds of SliverMainAxisGroup with different minExtent/maxExtent', (WidgetTester tester) async {
433447
final ScrollController controller = ScrollController();
448+
addTearDown(controller.dispose);
449+
434450
await tester.pumpWidget(_buildSliverMainAxisGroup(
435451
controller: controller,
436452
slivers: <Widget>[
@@ -465,8 +481,10 @@ void main() {
465481
expect((renderHeader.parentData! as SliverPhysicalParentData).paintOffset.dy, equals(0.0));
466482
});
467483

468-
testWidgets('SliverPinnedFloatingPersistentHeader is painted within bounds of SliverMainAxisGroup with different minExtent/maxExtent', (WidgetTester tester) async {
484+
testWidgetsWithLeakTracking('SliverPinnedFloatingPersistentHeader is painted within bounds of SliverMainAxisGroup with different minExtent/maxExtent', (WidgetTester tester) async {
469485
final ScrollController controller = ScrollController();
486+
addTearDown(controller.dispose);
487+
470488
await tester.pumpWidget(_buildSliverMainAxisGroup(
471489
controller: controller,
472490
slivers: <Widget>[
@@ -502,8 +520,10 @@ void main() {
502520
expect((renderHeader.parentData! as SliverPhysicalParentData).paintOffset.dy, equals(0.0));
503521
});
504522

505-
testWidgets('SliverAppBar with floating: false, pinned: false, snap: false is painted within bounds of SliverMainAxisGroup', (WidgetTester tester) async {
523+
testWidgetsWithLeakTracking('SliverAppBar with floating: false, pinned: false, snap: false is painted within bounds of SliverMainAxisGroup', (WidgetTester tester) async {
506524
final ScrollController controller = ScrollController();
525+
addTearDown(controller.dispose);
526+
507527
await tester.pumpWidget(_buildSliverMainAxisGroup(
508528
controller: controller,
509529
slivers: <Widget>[
@@ -532,8 +552,10 @@ void main() {
532552
expect(renderHeader.geometry!.layoutExtent, equals(0.0));
533553
});
534554

535-
testWidgets('SliverAppBar with floating: true, pinned: false, snap: true is painted within bounds of SliverMainAxisGroup', (WidgetTester tester) async {
555+
testWidgetsWithLeakTracking('SliverAppBar with floating: true, pinned: false, snap: true is painted within bounds of SliverMainAxisGroup', (WidgetTester tester) async {
536556
final ScrollController controller = ScrollController();
557+
addTearDown(controller.dispose);
558+
537559
await tester.pumpWidget(_buildSliverMainAxisGroup(
538560
controller: controller,
539561
slivers: <Widget>[
@@ -572,8 +594,10 @@ void main() {
572594
expect((renderHeader.parentData! as SliverPhysicalParentData).paintOffset.dy, equals(-50.0));
573595
});
574596

575-
testWidgets('SliverAppBar with floating: true, pinned: true, snap: true is painted within bounds of SliverMainAxisGroup', (WidgetTester tester) async {
597+
testWidgetsWithLeakTracking('SliverAppBar with floating: true, pinned: true, snap: true is painted within bounds of SliverMainAxisGroup', (WidgetTester tester) async {
576598
final ScrollController controller = ScrollController();
599+
addTearDown(controller.dispose);
600+
577601
await tester.pumpWidget(_buildSliverMainAxisGroup(
578602
controller: controller,
579603
slivers: <Widget>[
@@ -612,8 +636,9 @@ void main() {
612636
expect((renderHeader.parentData! as SliverPhysicalParentData).paintOffset.dy, equals(-50.0));
613637
});
614638

615-
testWidgets('SliverMainAxisGroup skips painting invisible children', (WidgetTester tester) async {
639+
testWidgetsWithLeakTracking('SliverMainAxisGroup skips painting invisible children', (WidgetTester tester) async {
616640
final ScrollController controller = ScrollController();
641+
addTearDown(controller.dispose);
617642

618643
int counter = 0;
619644
void incrementCounter() {

packages/flutter/test/widgets/sliver_persistent_header_test.dart

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -5,9 +5,10 @@
55
import 'package:flutter/material.dart';
66
import 'package:flutter/src/rendering/sliver_persistent_header.dart';
77
import 'package:flutter_test/flutter_test.dart';
8+
import 'package:leak_tracker_flutter_testing/leak_tracker_flutter_testing.dart';
89

910
void main() {
10-
testWidgets(
11+
testWidgetsWithLeakTracking(
1112
'_SliverScrollingPersistentHeader should update stretchConfiguration',
1213
(WidgetTester tester) async {
1314
for (final double stretchTriggerOffset in <double>[10.0, 20.0]) {
@@ -37,7 +38,7 @@ void main() {
3738
expect(render.stretchConfiguration?.stretchTriggerOffset, 20);
3839
});
3940

40-
testWidgets(
41+
testWidgetsWithLeakTracking(
4142
'_SliverPinnedPersistentHeader should update stretchConfiguration',
4243
(WidgetTester tester) async {
4344
for (final double stretchTriggerOffset in <double>[10.0, 20.0]) {
@@ -68,7 +69,7 @@ void main() {
6869
expect(render.stretchConfiguration?.stretchTriggerOffset, 20);
6970
});
7071

71-
testWidgets(
72+
testWidgetsWithLeakTracking(
7273
'_SliverPinnedPersistentHeader should update showOnScreenConfiguration',
7374
(WidgetTester tester) async {
7475
for (final double maxShowOnScreenExtent in <double>[1000, 2000]) {

0 commit comments

Comments
 (0)