From 6cb91191488fec2b1a3189e9259e59df08d41532 Mon Sep 17 00:00:00 2001 From: Kostia Sokolovskyi Date: Mon, 20 May 2024 19:47:10 +0200 Subject: [PATCH] Add tests for logical_key_set.0.dart API example. (#147735) This PR contributes to https://github.com/flutter/flutter/issues/130459 ### Description - Corrects the name for `examples/api/test/widgets/shortcuts/logical_key_set.0_test.dart` test file - Update tests for `examples/api/lib/widgets/shortcuts/logical_key_set.0.dart` --- dev/bots/check_code_samples.dart | 1 - .../shortcuts/logical_key_set.0_test.dart | 118 ++++++++++++++++++ 2 files changed, 118 insertions(+), 1 deletion(-) create mode 100644 examples/api/test/widgets/shortcuts/logical_key_set.0_test.dart diff --git a/dev/bots/check_code_samples.dart b/dev/bots/check_code_samples.dart index ba3b254451..b473032223 100644 --- a/dev/bots/check_code_samples.dart +++ b/dev/bots/check_code_samples.dart @@ -413,7 +413,6 @@ final Set _knownMissingTests = { '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', - 'examples/api/test/widgets/shortcuts/logical_key_set.0_test.dart', 'examples/api/test/widgets/page_storage/page_storage.0_test.dart', 'examples/api/test/widgets/scrollbar/raw_scrollbar.1_test.dart', 'examples/api/test/widgets/scrollbar/raw_scrollbar.2_test.dart', diff --git a/examples/api/test/widgets/shortcuts/logical_key_set.0_test.dart b/examples/api/test/widgets/shortcuts/logical_key_set.0_test.dart new file mode 100644 index 0000000000..8c6c0a766d --- /dev/null +++ b/examples/api/test/widgets/shortcuts/logical_key_set.0_test.dart @@ -0,0 +1,118 @@ +// 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/services.dart'; +import 'package:flutter_api_samples/widgets/shortcuts/logical_key_set.0.dart' + as example; +import 'package:flutter_test/flutter_test.dart'; + +void main() { + Future sendKeyCombination( + WidgetTester tester, + List keys, + ) async { + for (final LogicalKeyboardKey key in keys) { + await tester.sendKeyDownEvent(key); + } + for (final LogicalKeyboardKey key in keys.reversed) { + await tester.sendKeyUpEvent(key); + } + } + + testWidgets('Verify correct labels are displayed', (WidgetTester tester) async { + await tester.pumpWidget( + const example.LogicalKeySetExampleApp(), + ); + + expect(find.text('LogicalKeySet Sample'), findsOneWidget); + expect( + find.text('Add to the counter by pressing Ctrl+C'), + findsOneWidget, + ); + expect(find.text('count: 0'), findsOneWidget); + }); + + testWidgets('CtrlLeft+C or C+CtrlLeft key combination updates counter', (WidgetTester tester) async { + await tester.pumpWidget( + const example.LogicalKeySetExampleApp(), + ); + + for (int counter = 0; counter < 10; counter++) { + expect(find.text('count: $counter'), findsOneWidget); + + await sendKeyCombination( + tester, + counter.isEven + ? [ + LogicalKeyboardKey.controlLeft, + LogicalKeyboardKey.keyC, + ] + : [ + LogicalKeyboardKey.keyC, + LogicalKeyboardKey.controlLeft, + ], + ); + await tester.pump(); + } + }); + + testWidgets('CtrlRight+C key combination updates counter', (WidgetTester tester) async { + await tester.pumpWidget( + const example.LogicalKeySetExampleApp(), + ); + + for (int counter = 0; counter < 10; counter++) { + expect(find.text('count: $counter'), findsOneWidget); + + await sendKeyCombination( + tester, + [ + LogicalKeyboardKey.controlRight, + LogicalKeyboardKey.keyC, + ], + ); + await tester.pump(); + } + }); + + testWidgets('CtrlLeft+A+C key combination does not update counter', (WidgetTester tester) async { + await tester.pumpWidget( + const example.LogicalKeySetExampleApp(), + ); + + for (int counter = 0; counter < 10; counter++) { + expect(find.text('count: 0'), findsOneWidget); + + await sendKeyCombination( + tester, + [ + LogicalKeyboardKey.controlLeft, + LogicalKeyboardKey.keyA, + LogicalKeyboardKey.keyC, + ], + ); + await tester.pump(); + } + }); + + testWidgets('CtrlRight+A+C key combination does not update counter', (WidgetTester tester) async { + await tester.pumpWidget( + const example.LogicalKeySetExampleApp(), + ); + + for (int counter = 0; counter < 10; counter++) { + expect(find.text('count: 0'), findsOneWidget); + + await sendKeyCombination( + tester, + [ + LogicalKeyboardKey.controlRight, + LogicalKeyboardKey.keyA, + LogicalKeyboardKey.keyC, + ], + ); + await tester.pump(); + } + }); +}