Skip to content

Commit e6d160a

Browse files
authored
Cover more test/widgets tests with leak tracking #7 (flutter#134943)
1 parent b0a90ae commit e6d160a

29 files changed

+409
-263
lines changed

packages/flutter/test/widgets/pop_scope_test.dart

+5-4
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,7 @@ import 'package:flutter/foundation.dart';
66
import 'package:flutter/material.dart';
77
import 'package:flutter/services.dart';
88
import 'package:flutter_test/flutter_test.dart';
9+
import 'package:leak_tracker_flutter_testing/leak_tracker_flutter_testing.dart';
910

1011
import 'navigator_utils.dart';
1112

@@ -34,7 +35,7 @@ void main() {
3435
.setMockMethodCallHandler(SystemChannels.platform, null);
3536
});
3637

37-
testWidgets('toggling canPop on root route allows/prevents backs', (WidgetTester tester) async {
38+
testWidgetsWithLeakTracking('toggling canPop on root route allows/prevents backs', (WidgetTester tester) async {
3839
bool canPop = false;
3940
late StateSetter setState;
4041
late BuildContext context;
@@ -79,7 +80,7 @@ void main() {
7980
variant: TargetPlatformVariant.all(),
8081
);
8182

82-
testWidgets('toggling canPop on secondary route allows/prevents backs', (WidgetTester tester) async {
83+
testWidgetsWithLeakTracking('toggling canPop on secondary route allows/prevents backs', (WidgetTester tester) async {
8384
final GlobalKey<NavigatorState> nav = GlobalKey<NavigatorState>();
8485
bool canPop = true;
8586
late StateSetter setState;
@@ -247,7 +248,7 @@ void main() {
247248
variant: TargetPlatformVariant.all(),
248249
);
249250

250-
testWidgets('removing PopScope from the tree removes its effect on navigation', (WidgetTester tester) async {
251+
testWidgetsWithLeakTracking('removing PopScope from the tree removes its effect on navigation', (WidgetTester tester) async {
251252
bool usePopScope = true;
252253
late StateSetter setState;
253254
late BuildContext context;
@@ -299,7 +300,7 @@ void main() {
299300
variant: TargetPlatformVariant.all(),
300301
);
301302

302-
testWidgets('identical PopScopes', (WidgetTester tester) async {
303+
testWidgetsWithLeakTracking('identical PopScopes', (WidgetTester tester) async {
303304
bool usePopScope1 = true;
304305
bool usePopScope2 = true;
305306
late StateSetter setState;

packages/flutter/test/widgets/positioned_test.dart

+3-2
Original file line numberDiff line numberDiff line change
@@ -7,9 +7,10 @@ import 'dart:async';
77
import 'package:flutter/rendering.dart';
88
import 'package:flutter/widgets.dart';
99
import 'package:flutter_test/flutter_test.dart';
10+
import 'package:leak_tracker_flutter_testing/leak_tracker_flutter_testing.dart';
1011

1112
void main() {
12-
testWidgets('Positioned constructors', (WidgetTester tester) async {
13+
testWidgetsWithLeakTracking('Positioned constructors', (WidgetTester tester) async {
1314
final Widget child = Container();
1415
final Positioned a = Positioned(
1516
left: 101.0,
@@ -56,7 +57,7 @@ void main() {
5657
expect(c.height, null);
5758
});
5859

59-
testWidgets('Can animate position data', (WidgetTester tester) async {
60+
testWidgetsWithLeakTracking('Can animate position data', (WidgetTester tester) async {
6061
final RelativeRectTween rect = RelativeRectTween(
6162
begin: RelativeRect.fromRect(
6263
const Rect.fromLTRB(10.0, 20.0, 20.0, 30.0),

packages/flutter/test/widgets/range_maintaining_scroll_physics_test.dart

+7-6
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,7 @@ import 'package:flutter/foundation.dart';
66
import 'package:flutter/gestures.dart';
77
import 'package:flutter/material.dart';
88
import 'package:flutter_test/flutter_test.dart';
9+
import 'package:leak_tracker_flutter_testing/leak_tracker_flutter_testing.dart';
910

1011
class ExpandingBox extends StatefulWidget {
1112
const ExpandingBox({ super.key, required this.collapsedSize, required this.expandedSize });
@@ -53,7 +54,7 @@ class _ExpandingBoxState extends State<ExpandingBox> with AutomaticKeepAliveClie
5354
}
5455

5556
void main() {
56-
testWidgets('shrink listview', (WidgetTester tester) async {
57+
testWidgetsWithLeakTracking('shrink listview', (WidgetTester tester) async {
5758
await tester.pumpWidget(MaterialApp(
5859
home: ListView.builder(
5960
itemBuilder: (BuildContext context, int index) => index == 0
@@ -98,7 +99,7 @@ void main() {
9899
expect(position.pixels, 100.0);
99100
});
100101

101-
testWidgets('shrink listview while dragging', (WidgetTester tester) async {
102+
testWidgetsWithLeakTracking('shrink listview while dragging', (WidgetTester tester) async {
102103
await tester.pumpWidget(MaterialApp(
103104
home: ListView.builder(
104105
itemBuilder: (BuildContext context, int index) => index == 0
@@ -157,7 +158,7 @@ void main() {
157158
expect(position.pixels, 50.0);
158159
});
159160

160-
testWidgets('shrink listview while ballistic', (WidgetTester tester) async {
161+
testWidgetsWithLeakTracking('shrink listview while ballistic', (WidgetTester tester) async {
161162
await tester.pumpWidget(MaterialApp(
162163
home: GestureDetector(
163164
onTap: () { assert(false); },
@@ -220,7 +221,7 @@ void main() {
220221
expect(position.pixels, 0.0);
221222
});
222223

223-
testWidgets('expanding page views', (WidgetTester tester) async {
224+
testWidgetsWithLeakTracking('expanding page views', (WidgetTester tester) async {
224225
await tester.pumpWidget(const Padding(padding: EdgeInsets.only(right: 200.0), child: TabBarDemo()));
225226
await tester.tap(find.text('bike'));
226227
await tester.pump();
@@ -231,7 +232,7 @@ void main() {
231232
expect(bike2.center, bike1.shift(const Offset(100.0, 0.0)).center);
232233
});
233234

234-
testWidgets('changing the size of the viewport when overscrolled', (WidgetTester tester) async {
235+
testWidgetsWithLeakTracking('changing the size of the viewport when overscrolled', (WidgetTester tester) async {
235236
Widget build(double height) {
236237
return Directionality(
237238
textDirection: TextDirection.rtl,
@@ -265,7 +266,7 @@ void main() {
265266
expect(oldPosition, newPosition);
266267
});
267268

268-
testWidgets('inserting and removing an item when overscrolled', (WidgetTester tester) async {
269+
testWidgetsWithLeakTracking('inserting and removing an item when overscrolled', (WidgetTester tester) async {
269270
// Regression test for https://github.com/flutter/flutter/issues/62890
270271

271272
const double itemExtent = 100.0;

packages/flutter/test/widgets/raw_keyboard_listener_test.dart

+9-7
Original file line numberDiff line numberDiff line change
@@ -5,19 +5,22 @@
55
import 'package:flutter/services.dart';
66
import 'package:flutter/widgets.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('Can dispose without keyboard', (WidgetTester tester) async {
11+
testWidgetsWithLeakTracking('Can dispose without keyboard', (WidgetTester tester) async {
1112
final FocusNode focusNode = FocusNode();
13+
addTearDown(focusNode.dispose);
1214
await tester.pumpWidget(RawKeyboardListener(focusNode: focusNode, child: Container()));
1315
await tester.pumpWidget(RawKeyboardListener(focusNode: focusNode, child: Container()));
1416
await tester.pumpWidget(Container());
1517
});
1618

17-
testWidgets('Fuchsia key event', (WidgetTester tester) async {
19+
testWidgetsWithLeakTracking('Fuchsia key event', (WidgetTester tester) async {
1820
final List<RawKeyEvent> events = <RawKeyEvent>[];
1921

2022
final FocusNode focusNode = FocusNode();
23+
addTearDown(focusNode.dispose);
2124

2225
await tester.pumpWidget(
2326
RawKeyboardListener(
@@ -43,13 +46,13 @@ void main() {
4346
expect(typedData.isModifierPressed(ModifierKey.metaModifier, side: KeyboardSide.left), isTrue);
4447

4548
await tester.pumpWidget(Container());
46-
focusNode.dispose();
4749
}, skip: isBrowser); // [intended] This is a Fuchsia-specific test.
4850

49-
testWidgets('Web key event', (WidgetTester tester) async {
51+
testWidgetsWithLeakTracking('Web key event', (WidgetTester tester) async {
5052
final List<RawKeyEvent> events = <RawKeyEvent>[];
5153

5254
final FocusNode focusNode = FocusNode();
55+
addTearDown(focusNode.dispose);
5356

5457
await tester.pumpWidget(
5558
RawKeyboardListener(
@@ -74,13 +77,13 @@ void main() {
7477
expect(typedData.isModifierPressed(ModifierKey.metaModifier, side: KeyboardSide.left), isTrue);
7578

7679
await tester.pumpWidget(Container());
77-
focusNode.dispose();
7880
});
7981

80-
testWidgets('Defunct listeners do not receive events', (WidgetTester tester) async {
82+
testWidgetsWithLeakTracking('Defunct listeners do not receive events', (WidgetTester tester) async {
8183
final List<RawKeyEvent> events = <RawKeyEvent>[];
8284

8385
final FocusNode focusNode = FocusNode();
86+
addTearDown(focusNode.dispose);
8487

8588
await tester.pumpWidget(
8689
RawKeyboardListener(
@@ -108,6 +111,5 @@ void main() {
108111
expect(events.length, 0);
109112

110113
await tester.pumpWidget(Container());
111-
focusNode.dispose();
112114
});
113115
}

packages/flutter/test/widgets/reassemble_test.dart

+2-1
Original file line numberDiff line numberDiff line change
@@ -4,9 +4,10 @@
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('reassemble does not crash', (WidgetTester tester) async {
10+
testWidgetsWithLeakTracking('reassemble does not crash', (WidgetTester tester) async {
1011
await tester.pumpWidget(const MaterialApp(
1112
home: Text('Hello World'),
1213
));

packages/flutter/test/widgets/render_object_element_test.dart

+2-1
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,7 @@
55
import 'package:flutter/rendering.dart';
66
import 'package:flutter/widgets.dart';
77
import 'package:flutter_test/flutter_test.dart';
8+
import 'package:leak_tracker_flutter_testing/leak_tracker_flutter_testing.dart';
89

910
@immutable
1011
class Pair<T> {
@@ -239,7 +240,7 @@ class RenderSwapper extends RenderBox {
239240
BoxParentData parentDataFor(RenderObject renderObject) => renderObject.parentData! as BoxParentData;
240241

241242
void main() {
242-
testWidgets('RenderObjectElement *RenderObjectChild methods get called with correct arguments', (WidgetTester tester) async {
243+
testWidgetsWithLeakTracking('RenderObjectElement *RenderObjectChild methods get called with correct arguments', (WidgetTester tester) async {
243244
const Key redKey = ValueKey<String>('red');
244245
const Key blueKey = ValueKey<String>('blue');
245246
Widget widget() {

packages/flutter/test/widgets/render_object_widget_test.dart

+6-5
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,7 @@
55
import 'package:flutter/rendering.dart';
66
import 'package:flutter/widgets.dart';
77
import 'package:flutter_test/flutter_test.dart';
8+
import 'package:leak_tracker_flutter_testing/leak_tracker_flutter_testing.dart';
89

910
final BoxDecoration kBoxDecorationA = BoxDecoration(border: nonconst(null));
1011
final BoxDecoration kBoxDecorationB = BoxDecoration(border: nonconst(null));
@@ -75,7 +76,7 @@ class TestNonVisitingRenderObject extends RenderBox with RenderObjectWithChildMi
7576
}
7677

7778
void main() {
78-
testWidgets('RenderObjectWidget smoke test', (WidgetTester tester) async {
79+
testWidgetsWithLeakTracking('RenderObjectWidget smoke test', (WidgetTester tester) async {
7980
await tester.pumpWidget(DecoratedBox(decoration: kBoxDecorationA));
8081
SingleChildRenderObjectElement element =
8182
tester.element(find.byElementType(SingleChildRenderObjectElement));
@@ -94,7 +95,7 @@ void main() {
9495
expect(renderObject.position, equals(DecorationPosition.background));
9596
});
9697

97-
testWidgets('RenderObjectWidget can add and remove children', (WidgetTester tester) async {
98+
testWidgetsWithLeakTracking('RenderObjectWidget can add and remove children', (WidgetTester tester) async {
9899

99100
void checkFullTree() {
100101
final SingleChildRenderObjectElement element =
@@ -178,7 +179,7 @@ void main() {
178179
childBareTree();
179180
});
180181

181-
testWidgets('Detached render tree is intact', (WidgetTester tester) async {
182+
testWidgetsWithLeakTracking('Detached render tree is intact', (WidgetTester tester) async {
182183

183184
await tester.pumpWidget(DecoratedBox(
184185
decoration: kBoxDecorationA,
@@ -220,7 +221,7 @@ void main() {
220221
expect(grandChild.child, isNull);
221222
});
222223

223-
testWidgets('Can watch inherited widgets', (WidgetTester tester) async {
224+
testWidgetsWithLeakTracking('Can watch inherited widgets', (WidgetTester tester) async {
224225
final Key boxKey = UniqueKey();
225226
final TestOrientedBox box = TestOrientedBox(key: boxKey);
226227

@@ -242,7 +243,7 @@ void main() {
242243
expect(decoration.color, equals(const Color(0xFF0000FF)));
243244
});
244245

245-
testWidgets('RenderObject not visiting children provides helpful error message', (WidgetTester tester) async {
246+
testWidgetsWithLeakTracking('RenderObject not visiting children provides helpful error message', (WidgetTester tester) async {
246247
await tester.pumpWidget(
247248
TestNonVisitingWidget(
248249
child: Container(color: const Color(0xFFED1D7F)),

0 commit comments

Comments
 (0)