Skip to content

Commit ffecedb

Browse files
authored
Cover more test/widgets tests with leak tracking #11 (flutter#135231)
1 parent daea6e0 commit ffecedb

20 files changed

+410
-247
lines changed

packages/flutter/test/cupertino/action_sheet_test.dart

+1-1
Original file line numberDiff line numberDiff line change
@@ -31,7 +31,7 @@ void main() {
3131
await tester.tapAt(const Offset(20.0, 20.0));
3232
await tester.pump();
3333
expect(find.text('Action Sheet'), findsNothing);
34-
}, leakTrackingTestConfig: LeakTrackingTestConfig.debugNotDisposed());
34+
});
3535

3636
testWidgetsWithLeakTracking('Verify that a tap on title section (not buttons) does not dismiss an action sheet', (WidgetTester tester) async {
3737
await tester.pumpWidget(

packages/flutter/test/widgets/text_semantics_test.dart

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

1011
import 'semantics_tester.dart';
1112

1213
void main() {
13-
testWidgets('SemanticsNode ids are stable', (WidgetTester tester) async {
14+
testWidgetsWithLeakTracking('SemanticsNode ids are stable', (WidgetTester tester) async {
1415
// Regression test for b/151732341.
1516
final SemanticsTester semantics = SemanticsTester(tester);
1617
await tester.pumpWidget(Directionality(

packages/flutter/test/widgets/text_test.dart

+46-44
Large diffs are not rendered by default.

packages/flutter/test/widgets/texture_test.dart

+9-4
Original file line numberDiff line numberDiff line change
@@ -5,9 +5,10 @@
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
void main() {
10-
testWidgets('Texture with freeze set to true', (WidgetTester tester) async {
11+
testWidgetsWithLeakTracking('Texture with freeze set to true', (WidgetTester tester) async {
1112
await tester.pumpWidget(
1213
const Center(child: Texture(textureId: 1, freeze: true)),
1314
);
@@ -25,6 +26,7 @@ void main() {
2526
expect(textureBox.freeze, true);
2627

2728
final ContainerLayer containerLayer = ContainerLayer();
29+
addTearDown(containerLayer.dispose);
2830
final PaintingContext paintingContext = PaintingContext(containerLayer, Rect.zero);
2931
textureBox.paint(paintingContext, Offset.zero);
3032
final Layer layer = containerLayer.lastChild!;
@@ -35,7 +37,7 @@ void main() {
3537
expect(textureLayer.freeze, true);
3638
});
3739

38-
testWidgets('Texture with default FilterQuality', (WidgetTester tester) async {
40+
testWidgetsWithLeakTracking('Texture with default FilterQuality', (WidgetTester tester) async {
3941
await tester.pumpWidget(
4042
const Center(child: Texture(textureId: 1)),
4143
);
@@ -53,6 +55,7 @@ void main() {
5355
expect(textureBox.filterQuality, FilterQuality.low);
5456

5557
final ContainerLayer containerLayer = ContainerLayer();
58+
addTearDown(containerLayer.dispose);
5659
final PaintingContext paintingContext = PaintingContext(containerLayer, Rect.zero);
5760
textureBox.paint(paintingContext, Offset.zero);
5861
final Layer layer = containerLayer.lastChild!;
@@ -64,7 +67,7 @@ void main() {
6467
});
6568

6669

67-
testWidgets('Texture with FilterQuality.none', (WidgetTester tester) async {
70+
testWidgetsWithLeakTracking('Texture with FilterQuality.none', (WidgetTester tester) async {
6871
await tester.pumpWidget(
6972
const Center(child: Texture(textureId: 1, filterQuality: FilterQuality.none)),
7073
);
@@ -82,6 +85,7 @@ void main() {
8285
expect(textureBox.filterQuality, FilterQuality.none);
8386

8487
final ContainerLayer containerLayer = ContainerLayer();
88+
addTearDown(containerLayer.dispose);
8589
final PaintingContext paintingContext = PaintingContext(containerLayer, Rect.zero);
8690
textureBox.paint(paintingContext, Offset.zero);
8791
final Layer layer = containerLayer.lastChild!;
@@ -92,7 +96,7 @@ void main() {
9296
expect(textureLayer.filterQuality, FilterQuality.none);
9397
});
9498

95-
testWidgets('Texture with FilterQuality.low', (WidgetTester tester) async {
99+
testWidgetsWithLeakTracking('Texture with FilterQuality.low', (WidgetTester tester) async {
96100
await tester.pumpWidget(
97101
const Center(child: Texture(textureId: 1)),
98102
);
@@ -110,6 +114,7 @@ void main() {
110114
expect(textureBox.filterQuality, FilterQuality.low);
111115

112116
final ContainerLayer containerLayer = ContainerLayer();
117+
addTearDown(containerLayer.dispose);
113118
final PaintingContext paintingContext = PaintingContext(containerLayer, Rect.zero);
114119
textureBox.paint(paintingContext, Offset.zero);
115120
final Layer layer = containerLayer.lastChild!;

packages/flutter/test/widgets/ticker_mode_test.dart

+7-6
Original file line numberDiff line numberDiff line change
@@ -5,9 +5,10 @@
55
import 'package:flutter/material.dart';
66
import 'package:flutter/scheduler.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('Nested TickerMode cannot turn tickers back on', (WidgetTester tester) async {
11+
testWidgetsWithLeakTracking('Nested TickerMode cannot turn tickers back on', (WidgetTester tester) async {
1112
int outerTickCount = 0;
1213
int innerTickCount = 0;
1314

@@ -99,7 +100,7 @@ void main() {
99100
expect(innerTickCount, 0);
100101
});
101102

102-
testWidgets('Changing TickerMode does not rebuild widgets with SingleTickerProviderStateMixin', (WidgetTester tester) async {
103+
testWidgetsWithLeakTracking('Changing TickerMode does not rebuild widgets with SingleTickerProviderStateMixin', (WidgetTester tester) async {
103104
Widget widgetUnderTest({required bool tickerEnabled}) {
104105
return TickerMode(
105106
enabled: tickerEnabled,
@@ -121,7 +122,7 @@ void main() {
121122
expect(state().buildCount, 1);
122123
});
123124

124-
testWidgets('Changing TickerMode does not rebuild widgets with TickerProviderStateMixin', (WidgetTester tester) async {
125+
testWidgetsWithLeakTracking('Changing TickerMode does not rebuild widgets with TickerProviderStateMixin', (WidgetTester tester) async {
125126
Widget widgetUnderTest({required bool tickerEnabled}) {
126127
return TickerMode(
127128
enabled: tickerEnabled,
@@ -143,7 +144,7 @@ void main() {
143144
expect(state().buildCount, 1);
144145
});
145146

146-
testWidgets('Moving widgets with SingleTickerProviderStateMixin to a new TickerMode ancestor works', (WidgetTester tester) async {
147+
testWidgetsWithLeakTracking('Moving widgets with SingleTickerProviderStateMixin to a new TickerMode ancestor works', (WidgetTester tester) async {
147148
final GlobalKey tickingWidgetKey = GlobalKey();
148149
Widget widgetUnderTest({required LocalKey tickerModeKey, required bool tickerEnabled}) {
149150
return TickerMode(
@@ -164,7 +165,7 @@ void main() {
164165
expect(tickingState.ticker.isTicking, isFalse);
165166
});
166167

167-
testWidgets('Moving widgets with TickerProviderStateMixin to a new TickerMode ancestor works', (WidgetTester tester) async {
168+
testWidgetsWithLeakTracking('Moving widgets with TickerProviderStateMixin to a new TickerMode ancestor works', (WidgetTester tester) async {
168169
final GlobalKey tickingWidgetKey = GlobalKey();
169170
Widget widgetUnderTest({required LocalKey tickerModeKey, required bool tickerEnabled}) {
170171
return TickerMode(
@@ -185,7 +186,7 @@ void main() {
185186
expect(tickingState.ticker.isTicking, isFalse);
186187
});
187188

188-
testWidgets('Ticking widgets in old route do not rebuild when new route is pushed', (WidgetTester tester) async {
189+
testWidgetsWithLeakTracking('Ticking widgets in old route do not rebuild when new route is pushed', (WidgetTester tester) async {
189190
await tester.pumpWidget(MaterialApp(
190191
routes: <String, WidgetBuilder>{
191192
'/foo' : (BuildContext context) => const Text('New route'),

packages/flutter/test/widgets/ticker_provider_test.dart

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

1011
void main() {
11-
testWidgets('TickerMode', (WidgetTester tester) async {
12+
testWidgetsWithLeakTracking('TickerMode', (WidgetTester tester) async {
1213
const Widget widget = TickerMode(
1314
enabled: false,
1415
child: CircularProgressIndicator(),
@@ -34,7 +35,7 @@ void main() {
3435
expect(tester.binding.transientCallbackCount, 0);
3536
});
3637

37-
testWidgets('Navigation with TickerMode', (WidgetTester tester) async {
38+
testWidgetsWithLeakTracking('Navigation with TickerMode', (WidgetTester tester) async {
3839
await tester.pumpWidget(MaterialApp(
3940
home: const LinearProgressIndicator(),
4041
routes: <String, WidgetBuilder>{
@@ -56,7 +57,7 @@ void main() {
5657
expect(tester.binding.transientCallbackCount, 1);
5758
});
5859

59-
testWidgets('SingleTickerProviderStateMixin can handle not being used', (WidgetTester tester) async {
60+
testWidgetsWithLeakTracking('SingleTickerProviderStateMixin can handle not being used', (WidgetTester tester) async {
6061
const Widget widget = BoringTickerTest();
6162
expect(widget.toString, isNot(throwsException));
6263

@@ -96,7 +97,7 @@ void main() {
9697
));
9798
});
9899

99-
testWidgets('SingleTickerProviderStateMixin dispose while active', (WidgetTester tester) async {
100+
testWidgetsWithLeakTracking('SingleTickerProviderStateMixin dispose while active', (WidgetTester tester) async {
100101
final GlobalKey<_SingleTickerTestState> key = GlobalKey<_SingleTickerTestState>();
101102
final Widget widget = _SingleTickerTest(key: key);
102103
await tester.pumpWidget(widget);
@@ -136,7 +137,7 @@ void main() {
136137
}
137138
});
138139

139-
testWidgets('SingleTickerProviderStateMixin dispose while active', (WidgetTester tester) async {
140+
testWidgetsWithLeakTracking('SingleTickerProviderStateMixin dispose while active', (WidgetTester tester) async {
140141
final GlobalKey<_SingleTickerTestState> key = GlobalKey<_SingleTickerTestState>();
141142
final Widget widget = _SingleTickerTest(key: key);
142143
await tester.pumpWidget(widget);
@@ -176,7 +177,7 @@ void main() {
176177
}
177178
});
178179

179-
testWidgets('TickerProviderStateMixin dispose while any ticker is active', (WidgetTester tester) async {
180+
testWidgetsWithLeakTracking('TickerProviderStateMixin dispose while any ticker is active', (WidgetTester tester) async {
180181
final GlobalKey<_MultipleTickerTestState> key = GlobalKey<_MultipleTickerTestState>();
181182
final Widget widget = _MultipleTickerTest(key: key);
182183
await tester.pumpWidget(widget);
@@ -216,12 +217,12 @@ void main() {
216217
});
217218
});
218219

219-
testWidgets('SingleTickerProviderStateMixin does not call State.toString', (WidgetTester tester) async {
220+
testWidgetsWithLeakTracking('SingleTickerProviderStateMixin does not call State.toString', (WidgetTester tester) async {
220221
await tester.pumpWidget(const _SingleTickerTest());
221222
expect(tester.state<_SingleTickerTestState>(find.byType(_SingleTickerTest)).toStringCount, 0);
222223
});
223224

224-
testWidgets('TickerProviderStateMixin does not call State.toString', (WidgetTester tester) async {
225+
testWidgetsWithLeakTracking('TickerProviderStateMixin does not call State.toString', (WidgetTester tester) async {
225226
await tester.pumpWidget(const _MultipleTickerTest());
226227
expect(tester.state<_MultipleTickerTestState>(find.byType(_MultipleTickerTest)).toStringCount, 0);
227228
});

packages/flutter/test/widgets/title_test.dart

+5-4
Original file line numberDiff line numberDiff line change
@@ -5,9 +5,10 @@
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('toString control test', (WidgetTester tester) async {
11+
testWidgetsWithLeakTracking('toString control test', (WidgetTester tester) async {
1112
final Widget widget = Title(
1213
color: const Color(0xFF00FF00),
1314
title: 'Awesome app',
@@ -16,7 +17,7 @@ void main() {
1617
expect(widget.toString, isNot(throwsException));
1718
});
1819

19-
testWidgets('should handle having no title', (WidgetTester tester) async {
20+
testWidgetsWithLeakTracking('should handle having no title', (WidgetTester tester) async {
2021
final Title widget = Title(
2122
color: const Color(0xFF00FF00),
2223
child: Container(),
@@ -26,14 +27,14 @@ void main() {
2627
expect(widget.color, equals(const Color(0xFF00FF00)));
2728
});
2829

29-
testWidgets('should not allow non-opaque color', (WidgetTester tester) async {
30+
testWidgetsWithLeakTracking('should not allow non-opaque color', (WidgetTester tester) async {
3031
expect(() => Title(
3132
color: const Color(0x00000000),
3233
child: Container(),
3334
), throwsAssertionError);
3435
});
3536

36-
testWidgets('should not pass "null" to setApplicationSwitcherDescription', (WidgetTester tester) async {
37+
testWidgetsWithLeakTracking('should not pass "null" to setApplicationSwitcherDescription', (WidgetTester tester) async {
3738
final List<MethodCall> log = <MethodCall>[];
3839

3940
tester.binding.defaultBinaryMessenger.setMockMethodCallHandler(SystemChannels.platform, (MethodCall methodCall) async {

packages/flutter/test/widgets/tracking_scroll_controller_test.dart

+3-1
Original file line numberDiff line numberDiff line change
@@ -4,10 +4,12 @@
44

55
import 'package:flutter/widgets.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('TrackingScrollController saves offset', (WidgetTester tester) async {
10+
testWidgetsWithLeakTracking('TrackingScrollController saves offset', (WidgetTester tester) async {
1011
final TrackingScrollController controller = TrackingScrollController();
12+
addTearDown(controller.dispose);
1113
const double listItemHeight = 100.0;
1214

1315
await tester.pumpWidget(

packages/flutter/test/widgets/transformed_scrollable_test.dart

+13-4
Original file line numberDiff line numberDiff line change
@@ -6,10 +6,13 @@ import 'dart:math' as math;
66

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
void main() {
11-
testWidgets('Scrollable scaled up', (WidgetTester tester) async {
12+
testWidgetsWithLeakTracking('Scrollable scaled up', (WidgetTester tester) async {
1213
final ScrollController controller = ScrollController();
14+
addTearDown(controller.dispose);
15+
1316
await tester.pumpWidget(
1417
MaterialApp(
1518
home: Transform.scale(
@@ -52,8 +55,10 @@ void main() {
5255
expect(controller.offset, 42.5); // 85.0 - (85.0 / 2)
5356
});
5457

55-
testWidgets('Scrollable scaled down', (WidgetTester tester) async {
58+
testWidgetsWithLeakTracking('Scrollable scaled down', (WidgetTester tester) async {
5659
final ScrollController controller = ScrollController();
60+
addTearDown(controller.dispose);
61+
5762
await tester.pumpWidget(
5863
MaterialApp(
5964
home: Transform.scale(
@@ -96,8 +101,10 @@ void main() {
96101
expect(controller.offset, 0.0); // 340.0 - (170.0 * 2)
97102
});
98103

99-
testWidgets('Scrollable rotated 90 degrees', (WidgetTester tester) async {
104+
testWidgetsWithLeakTracking('Scrollable rotated 90 degrees', (WidgetTester tester) async {
100105
final ScrollController controller = ScrollController();
106+
addTearDown(controller.dispose);
107+
101108
await tester.pumpWidget(
102109
MaterialApp(
103110
home: Transform.rotate(
@@ -136,8 +143,10 @@ void main() {
136143
expect(controller.offset, 30.0); // 100.0 - 70.0
137144
});
138145

139-
testWidgets('Perspective transform on scrollable', (WidgetTester tester) async {
146+
testWidgetsWithLeakTracking('Perspective transform on scrollable', (WidgetTester tester) async {
140147
final ScrollController controller = ScrollController();
148+
addTearDown(controller.dispose);
149+
141150
await tester.pumpWidget(
142151
MaterialApp(
143152
home: Transform(

0 commit comments

Comments
 (0)