@@ -8,9 +8,10 @@ import 'package:flutter/foundation.dart';
88import 'package:flutter/services.dart' ;
99import 'package:flutter/widgets.dart' ;
1010import 'package:flutter_test/flutter_test.dart' ;
11+ import 'package:leak_tracker_flutter_testing/leak_tracker_flutter_testing.dart' ;
1112
1213void 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