From a484aa260bd5340870129523e68b98eaeddab518 Mon Sep 17 00:00:00 2001 From: Valentin Vignal <32538273+ValentinVignal@users.noreply.github.com> Date: Tue, 22 Oct 2024 15:25:25 +0800 Subject: [PATCH] Add test for `selectable_region.0.dart` (#157258) Contributes to https://github.com/flutter/flutter/issues/130459 It adds a test for - `examples/api/test/material/selectable_region/selectable_region.0_test.dart` --- dev/bots/check_code_samples.dart | 1 - .../selectable_region.0.dart | 2 + .../selectable_region.0_test.dart | 53 +++++++++++++++++++ 3 files changed, 55 insertions(+), 1 deletion(-) create mode 100644 examples/api/test/material/selectable_region/selectable_region.0_test.dart diff --git a/dev/bots/check_code_samples.dart b/dev/bots/check_code_samples.dart index 2d6820d078..10b0a78427 100644 --- a/dev/bots/check_code_samples.dart +++ b/dev/bots/check_code_samples.dart @@ -309,7 +309,6 @@ class SampleChecker { // TODO(gspencergoog): implement the missing tests. // See https://github.com/flutter/flutter/issues/130459 final Set _knownMissingTests = { - 'examples/api/test/material/selectable_region/selectable_region.0_test.dart', 'examples/api/test/material/color_scheme/dynamic_content_color.0_test.dart', 'examples/api/test/material/platform_menu_bar/platform_menu_bar.0_test.dart', 'examples/api/test/painting/star_border/star_border.0_test.dart', diff --git a/examples/api/lib/material/selectable_region/selectable_region.0.dart b/examples/api/lib/material/selectable_region/selectable_region.0.dart index 3442f72c8f..72925863a1 100644 --- a/examples/api/lib/material/selectable_region/selectable_region.0.dart +++ b/examples/api/lib/material/selectable_region/selectable_region.0.dart @@ -322,6 +322,8 @@ class _RenderSelectableAdapter extends RenderProxyBox with Selectable, Selection @override void dispose() { _geometry.dispose(); + _startHandle = null; + _endHandle = null; super.dispose(); } } diff --git a/examples/api/test/material/selectable_region/selectable_region.0_test.dart b/examples/api/test/material/selectable_region/selectable_region.0_test.dart new file mode 100644 index 0000000000..c7e95a1b3b --- /dev/null +++ b/examples/api/test/material/selectable_region/selectable_region.0_test.dart @@ -0,0 +1,53 @@ +// 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/foundation.dart'; +import 'package:flutter/material.dart'; +import 'package:flutter/services.dart'; +import 'package:flutter_api_samples/material/selectable_region/selectable_region.0.dart' as example; +import 'package:flutter_test/flutter_test.dart'; + +void main() { + Future sendKeyCombination( + WidgetTester tester, + LogicalKeyboardKey key, + ) async { + final LogicalKeyboardKey modifier = switch (defaultTargetPlatform) { + TargetPlatform.iOS || TargetPlatform.macOS => LogicalKeyboardKey.meta, + _ => LogicalKeyboardKey.control, + }; + await tester.sendKeyDownEvent(modifier); + await tester.sendKeyDownEvent(key); + await tester.sendKeyUpEvent(key); + await tester.sendKeyUpEvent(modifier); + await tester.pump(); + } + + testWidgets('The icon can be selected with the text', (WidgetTester tester) async { + String? clipboard; + tester.binding.defaultBinaryMessenger.setMockMethodCallHandler(SystemChannels.platform, (MethodCall methodCall) async { + if (methodCall.method == 'Clipboard.setData') { + clipboard = (methodCall.arguments as Map)['text'] as String; + } + return null; + }); + addTearDown(() { + TestDefaultBinaryMessengerBinding.instance.defaultBinaryMessenger.setMockMethodCallHandler(SystemChannels.platform, null); + }); + + await tester.pumpWidget( + const example.SelectableRegionExampleApp(), + ); + + await tester.tap(find.byIcon(Icons.key)); // Focus the application. + await tester.pump(); + + // Keyboard select all. + await sendKeyCombination(tester,LogicalKeyboardKey.keyA); + // Keyboard copy. + await sendKeyCombination(tester,LogicalKeyboardKey.keyC); + + expect(clipboard, 'SelectableRegion SampleSelect this iconCustom Text'); + }, variant: TargetPlatformVariant.all()); +}