Visitar URL original
Fix leak in hardware_keyboard_test.dart (#134380) · Mairramer/flutter@3302c87 · GitHub
Skip to content

Commit 3302c87

Browse files
derdillaMairramer
authored andcommitted
Fix leak in hardware_keyboard_test.dart (flutter#134380)
1 parent 51b5666 commit 3302c87

2 files changed

Lines changed: 54 additions & 43 deletions

File tree

‎packages/flutter/test/services/hardware_keyboard_test.dart‎

Lines changed: 20 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -8,9 +8,10 @@ import 'package:flutter/foundation.dart';
88
import 'package:flutter/services.dart';
99
import 'package:flutter/widgets.dart';
1010
import 'package:flutter_test/flutter_test.dart';
11+
import 'package:leak_tracker_flutter_testing/leak_tracker_flutter_testing.dart';
1112

1213
void main() {
13-
testWidgets('HardwareKeyboard records pressed keys and enabled locks', (WidgetTester tester) async {
14+
testWidgetsWithLeakTracking('HardwareKeyboard records pressed keys and enabled locks', (WidgetTester tester) async {
1415
await simulateKeyDownEvent(LogicalKeyboardKey.numLock, platform: 'windows');
1516
expect(HardwareKeyboard.instance.physicalKeysPressed,
1617
equals(<PhysicalKeyboardKey>{PhysicalKeyboardKey.numLock}));
@@ -68,7 +69,7 @@ void main() {
6869
equals(<KeyboardLockMode>{}));
6970
}, variant: KeySimulatorTransitModeVariant.keyDataThenRawKeyData());
7071

71-
testWidgets('KeyboardManager synthesizes modifier keys in rawKeyData mode', (WidgetTester tester) async {
72+
testWidgetsWithLeakTracking('KeyboardManager synthesizes modifier keys in rawKeyData mode', (WidgetTester tester) async {
7273
final List<KeyEvent> events = <KeyEvent>[];
7374
HardwareKeyboard.instance.addHandler((KeyEvent event) {
7475
events.add(event);
@@ -96,8 +97,9 @@ void main() {
9697
expect(events[1].synthesized, false);
9798
});
9899

99-
testWidgets('Dispatch events to all handlers', (WidgetTester tester) async {
100+
testWidgetsWithLeakTracking('Dispatch events to all handlers', (WidgetTester tester) async {
100101
final FocusNode focusNode = FocusNode();
102+
addTearDown(focusNode.dispose);
101103
final List<int> logs = <int>[];
102104

103105
await tester.pumpWidget(
@@ -201,8 +203,9 @@ void main() {
201203
// _CastError on _hardwareKeyboard.lookUpLayout(key). The original scenario
202204
// that this is triggered on Android is unknown. Here we make up a scenario
203205
// where a ShiftLeft key down is dispatched but the modifier bit is not set.
204-
testWidgets('Correctly convert down events that are synthesized released', (WidgetTester tester) async {
206+
testWidgetsWithLeakTracking('Correctly convert down events that are synthesized released', (WidgetTester tester) async {
205207
final FocusNode focusNode = FocusNode();
208+
addTearDown(focusNode.dispose);
206209
final List<KeyEvent> events = <KeyEvent>[];
207210

208211
await tester.pumpWidget(
@@ -244,8 +247,9 @@ void main() {
244247
KeyDataTransitMode.rawKeyData,
245248
}));
246249

247-
testWidgets('Instantly dispatch synthesized key events when the queue is empty', (WidgetTester tester) async {
250+
testWidgetsWithLeakTracking('Instantly dispatch synthesized key events when the queue is empty', (WidgetTester tester) async {
248251
final FocusNode focusNode = FocusNode();
252+
addTearDown(focusNode.dispose);
249253
final List<int> logs = <int>[];
250254

251255
await tester.pumpWidget(
@@ -276,19 +280,22 @@ void main() {
276280
logs.clear();
277281
}, variant: KeySimulatorTransitModeVariant.keyDataThenRawKeyData());
278282

279-
testWidgets('Postpone synthesized key events when the queue is not empty', (WidgetTester tester) async {
280-
final FocusNode focusNode = FocusNode();
283+
testWidgetsWithLeakTracking('Postpone synthesized key events when the queue is not empty', (WidgetTester tester) async {
284+
final FocusNode keyboardListenerFocusNode = FocusNode();
285+
addTearDown(keyboardListenerFocusNode.dispose);
286+
final FocusNode rawKeyboardListenerFocusNode = FocusNode();
287+
addTearDown(rawKeyboardListenerFocusNode.dispose);
281288
final List<String> logs = <String>[];
282289

283290
await tester.pumpWidget(
284291
RawKeyboardListener(
285-
focusNode: FocusNode(),
292+
focusNode: rawKeyboardListenerFocusNode,
286293
onKey: (RawKeyEvent event) {
287294
logs.add('${event.runtimeType}');
288295
},
289296
child: KeyboardListener(
290297
autofocus: true,
291-
focusNode: focusNode,
298+
focusNode: keyboardListenerFocusNode,
292299
child: Container(),
293300
onKeyEvent: (KeyEvent event) {
294301
logs.add('${event.runtimeType}');
@@ -331,7 +338,7 @@ void main() {
331338
// In that case, the key data should not be converted to any [KeyEvent]s,
332339
// but is only used so that *a* key data comes before the raw key message
333340
// and makes [KeyEventManager] infer [KeyDataTransitMode.keyDataThenRawKeyData].
334-
testWidgets('Empty keyData yields no event but triggers inference', (WidgetTester tester) async {
341+
testWidgetsWithLeakTracking('Empty keyData yields no event but triggers inference', (WidgetTester tester) async {
335342
final List<KeyEvent> events = <KeyEvent>[];
336343
final List<RawKeyEvent> rawEvents = <RawKeyEvent>[];
337344
tester.binding.keyboard.addHandler((KeyEvent event) {
@@ -383,7 +390,7 @@ void main() {
383390
expect(rawEvents.length, 2);
384391
});
385392

386-
testWidgets('Exceptions from keyMessageHandler are caught and reported', (WidgetTester tester) async {
393+
testWidgetsWithLeakTracking('Exceptions from keyMessageHandler are caught and reported', (WidgetTester tester) async {
387394
final KeyMessageHandler? oldKeyMessageHandler = tester.binding.keyEventManager.keyMessageHandler;
388395
addTearDown(() {
389396
tester.binding.keyEventManager.keyMessageHandler = oldKeyMessageHandler;
@@ -426,7 +433,7 @@ void main() {
426433
expect(record, isNull);
427434
});
428435

429-
testWidgets('Exceptions from HardwareKeyboard handlers are caught and reported', (WidgetTester tester) async {
436+
testWidgetsWithLeakTracking('Exceptions from HardwareKeyboard handlers are caught and reported', (WidgetTester tester) async {
430437
bool throwingCallback(KeyEvent event) {
431438
throw 1;
432439
}
@@ -466,7 +473,7 @@ void main() {
466473
expect(record, isNull);
467474
}, variant: KeySimulatorTransitModeVariant.all());
468475

469-
testWidgets('debugPrintKeyboardEvents causes logging of key events', (WidgetTester tester) async {
476+
testWidgetsWithLeakTracking('debugPrintKeyboardEvents causes logging of key events', (WidgetTester tester) async {
470477
final bool oldDebugPrintKeyboardEvents = debugPrintKeyboardEvents;
471478
final DebugPrintCallback oldDebugPrint = debugPrint;
472479
final StringBuffer messages = StringBuffer();

0 commit comments

Comments
 (0)