diff --git a/dev/bots/check_code_samples.dart b/dev/bots/check_code_samples.dart index b590bb2bb39..0a86dd0ccbf 100644 --- a/dev/bots/check_code_samples.dart +++ b/dev/bots/check_code_samples.dart @@ -325,5 +325,4 @@ final Set _knownMissingTests = { 'examples/api/test/widgets/notification_listener/notification.0_test.dart', 'examples/api/test/widgets/overscroll_indicator/glowing_overscroll_indicator.1_test.dart', 'examples/api/test/widgets/overscroll_indicator/glowing_overscroll_indicator.0_test.dart', - 'examples/api/test/widgets/focus_scope/focus_scope.0_test.dart', }; diff --git a/examples/api/test/widgets/focus_scope/focus_scope.0_test.dart b/examples/api/test/widgets/focus_scope/focus_scope.0_test.dart new file mode 100644 index 00000000000..1ec1a5fe992 --- /dev/null +++ b/examples/api/test/widgets/focus_scope/focus_scope.0_test.dart @@ -0,0 +1,58 @@ +// 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_scope/focus_scope.0.dart' + as example; +import 'package:flutter_test/flutter_test.dart'; + +void main() { + bool hasFocus(WidgetTester tester, IconData icon) => + tester.widget( + find.ancestor( + of: find.byIcon(icon), + matching: find.byType(IconButton), + ), + ).focusNode!.hasFocus; + + testWidgets('The focus is restricted to the foreground', (WidgetTester tester) async { + await tester.pumpWidget( + const example.FocusScopeExampleApp(), + ); + + expect(find.text('FOREGROUND'), findsOne); + expect(hasFocus(tester, Icons.menu), true); + + await tester.sendKeyEvent(LogicalKeyboardKey.tab); + await tester.pump(); + + expect(hasFocus(tester, Icons.menu), true); + }); + + testWidgets('The background can be focused', (WidgetTester tester) async { + await tester.pumpWidget( + const example.FocusScopeExampleApp(), + ); + + expect(find.text('FOREGROUND'), findsOne); + expect(hasFocus(tester, Icons.menu), true); + + await tester.tap(find.byIcon(Icons.menu)); + await tester.pumpAndSettle(); + + expect(hasFocus(tester, Icons.close), true); + + await tester.sendKeyEvent(LogicalKeyboardKey.tab); + await tester.pump(); + + expect(hasFocus(tester, Icons.menu), false); + expect(hasFocus(tester, Icons.close), false); + + await tester.sendKeyEvent(LogicalKeyboardKey.tab); + await tester.pump(); + + expect(hasFocus(tester, Icons.close), true); + }); +}