From 43da705701bc59cf5744436c229375a85801a392 Mon Sep 17 00:00:00 2001 From: Valentin Vignal <32538273+ValentinVignal@users.noreply.github.com> Date: Tue, 23 Jul 2024 15:01:09 +0800 Subject: [PATCH] Add test for focus_traversal_group.0.dart (#151591) Contributes to https://github.com/flutter/flutter/issues/130459 It adds a test for - `examples/api/lib/widgets/focus_traversal/focus_traversal_group.0.dart` --- dev/bots/check_code_samples.dart | 1 - .../focus_traversal_group.0_test.dart | 45 +++++++++++++++++++ 2 files changed, 45 insertions(+), 1 deletion(-) create mode 100644 examples/api/test/widgets/focus_traversal/focus_traversal_group.0_test.dart diff --git a/dev/bots/check_code_samples.dart b/dev/bots/check_code_samples.dart index 5bd22aa7fb..03ca6f1c8f 100644 --- a/dev/bots/check_code_samples.dart +++ b/dev/bots/check_code_samples.dart @@ -355,7 +355,6 @@ final Set _knownMissingTests = { 'examples/api/test/widgets/scroll_position/scroll_metrics_notification.0_test.dart', 'examples/api/test/widgets/media_query/media_query_data.system_gesture_insets.0_test.dart', 'examples/api/test/widgets/animated_list/animated_list.0_test.dart', - 'examples/api/test/widgets/focus_traversal/focus_traversal_group.0_test.dart', 'examples/api/test/widgets/focus_traversal/ordered_traversal_policy.0_test.dart', 'examples/api/test/widgets/image/image.frame_builder.0_test.dart', 'examples/api/test/widgets/image/image.loading_builder.0_test.dart', diff --git a/examples/api/test/widgets/focus_traversal/focus_traversal_group.0_test.dart b/examples/api/test/widgets/focus_traversal/focus_traversal_group.0_test.dart new file mode 100644 index 0000000000..0e6590cbb8 --- /dev/null +++ b/examples/api/test/widgets/focus_traversal/focus_traversal_group.0_test.dart @@ -0,0 +1,45 @@ +// Copyright 2014 The Flutter Authors. All rights reserved. +// Use of this source code is governed by a BSD-style license that can be +// found in the LICENSE file. + +import 'package:flutter/material.dart'; +import 'package:flutter/services.dart'; +import 'package:flutter_api_samples/widgets/focus_traversal/focus_traversal_group.0.dart' as example; +import 'package:flutter_test/flutter_test.dart'; + +void main() { + bool hasFocus(WidgetTester tester, String text) { + return Focus.of(tester.element(find.text(text))).hasPrimaryFocus; + } + + testWidgets('The focus updates should follow the focus traversal groups policy', (WidgetTester tester) async { + await tester.pumpWidget( + const example.FocusTraversalGroupExampleApp(), + ); + + // Set the focus to the first button. + Focus.of(tester.element(find.text('num: 0'))).requestFocus(); + await tester.pump(); + + expect(hasFocus(tester, 'num: 0'), isTrue); + + const List focusOrder = [ + 'num: 1', + 'num: 2', + 'String: A', + 'String: B', + 'String: C', + 'ignored num: 3', + 'ignored num: 2', + 'ignored num: 1', + 'num: 0', + ]; + + for (final String text in focusOrder) { + await tester.sendKeyEvent(LogicalKeyboardKey.tab); + await tester.pump(); + + expect(hasFocus(tester, text), isTrue); + } + }); +}