| // 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/cupertino.dart'; |
| import 'package:flutter/material.dart'; |
| import 'package:flutter/src/foundation/platform.dart'; |
| import 'package:flutter_test/flutter_test.dart'; |
| |
| import '../widgets/editable_text_utils.dart'; |
| |
| Finder findCupertinoOverflowNextButton() { |
| return find.byWidgetPredicate((Widget widget) { |
| return widget is CustomPaint && '${widget.painter?.runtimeType}' == '_RightCupertinoChevronPainter'; |
| }); |
| } |
| |
| Finder findCupertinoOverflowBackButton() { |
| return find.byWidgetPredicate((Widget widget) { |
| return widget is CustomPaint && '${widget.painter?.runtimeType}' == '_LeftCupertinoChevronPainter'; |
| }); |
| } |
| |
| Future<void> tapCupertinoOverflowNextButton(WidgetTester tester) async{ |
| await tester.tapAt(tester.getCenter(findCupertinoOverflowNextButton())); |
| await tester.pumpAndSettle(); |
| } |
| |
| void expectNoCupertinoToolbar() { |
| expect(find.byType(CupertinoButton), findsNothing); |
| } |
| |
| // Check that the Cupertino text selection toolbars show the expected buttons |
| // when the content is partially selected. |
| void expectCupertinoToolbarForPartialSelection() { |
| if (isContextMenuProvidedByPlatform) { |
| expectNoCupertinoToolbar(); |
| return; |
| } |
| |
| switch (defaultTargetPlatform) { |
| case TargetPlatform.android: |
| expect(find.byType(CupertinoButton), findsNWidgets(5)); |
| expect(find.text('Cut'), findsOneWidget); |
| expect(find.text('Copy'), findsOneWidget); |
| expect(find.text('Paste'), findsOneWidget); |
| expect(find.text('Share...'), findsOneWidget); |
| expect(find.text('Select All'), findsOneWidget); |
| case TargetPlatform.iOS: |
| expect(find.byType(CupertinoButton), findsNWidgets(6)); |
| expect(find.text('Cut'), findsOneWidget); |
| expect(find.text('Copy'), findsOneWidget); |
| expect(find.text('Paste'), findsOneWidget); |
| expect(find.text('Share...'), findsOneWidget); |
| expect(find.text('Look Up'), findsOneWidget); |
| expect(find.text('Search Web'), findsOneWidget); |
| case TargetPlatform.macOS: |
| expect(find.byType(CupertinoButton), findsNWidgets(3)); |
| expect(find.text('Cut'), findsOneWidget); |
| expect(find.text('Copy'), findsOneWidget); |
| expect(find.text('Paste'), findsOneWidget); |
| case TargetPlatform.fuchsia: |
| case TargetPlatform.linux: |
| case TargetPlatform.windows: |
| expect(find.byType(CupertinoButton), findsNWidgets(4)); |
| expect(find.text('Cut'), findsOneWidget); |
| expect(find.text('Copy'), findsOneWidget); |
| expect(find.text('Paste'), findsOneWidget); |
| expect(find.text('Select All'), findsOneWidget); |
| } |
| } |
| |
| // Check that the Cupertino text selection toolbar shows the expected buttons |
| // when the content is fully selected. |
| void expectCupertinoToolbarForFullSelection() { |
| if (isContextMenuProvidedByPlatform) { |
| expectNoCupertinoToolbar(); |
| return; |
| } |
| |
| switch (defaultTargetPlatform) { |
| case TargetPlatform.android: |
| expect(find.byType(CupertinoButton), findsNWidgets(4)); |
| expect(find.text('Cut'), findsOneWidget); |
| expect(find.text('Copy'), findsOneWidget); |
| expect(find.text('Paste'), findsOneWidget); |
| expect(find.text('Share...'), findsOneWidget); |
| case TargetPlatform.iOS: |
| expect(find.byType(CupertinoButton), findsNWidgets(6)); |
| expect(find.text('Cut'), findsOneWidget); |
| expect(find.text('Copy'), findsOneWidget); |
| expect(find.text('Paste'), findsOneWidget); |
| expect(find.text('Share...'), findsOneWidget); |
| expect(find.text('Look Up'), findsOneWidget); |
| expect(find.text('Search Web'), findsOneWidget); |
| case TargetPlatform.fuchsia: |
| case TargetPlatform.linux: |
| case TargetPlatform.macOS: |
| case TargetPlatform.windows: |
| expect(find.byType(CupertinoButton), findsNWidgets(3)); |
| expect(find.text('Cut'), findsOneWidget); |
| expect(find.text('Copy'), findsOneWidget); |
| expect(find.text('Paste'), findsOneWidget); |
| } |
| } |
| |
| // Check that the Cupertino text selection toolbar is correct for a collapsed selection. |
| void expectCupertinoToolbarForCollapsedSelection() { |
| if (isContextMenuProvidedByPlatform) { |
| expectNoCupertinoToolbar(); |
| return; |
| } |
| |
| switch (defaultTargetPlatform) { |
| case TargetPlatform.android: |
| expect(find.byType(CupertinoButton), findsNWidgets(4)); |
| expect(find.text('Cut'), findsOneWidget); |
| expect(find.text('Copy'), findsOneWidget); |
| expect(find.text('Paste'), findsOneWidget); |
| expect(find.text('Share...'), findsOneWidget); |
| case TargetPlatform.iOS: |
| expect(find.byType(CupertinoButton), findsNWidgets(2)); |
| expect(find.text('Paste'), findsOneWidget); |
| expect(find.text('Select All'), findsOneWidget); |
| case TargetPlatform.fuchsia: |
| case TargetPlatform.linux: |
| case TargetPlatform.windows: |
| case TargetPlatform.macOS: |
| expect(find.byType(CupertinoButton), findsNWidgets(1)); |
| expect(find.text('Paste'), findsOneWidget); |
| } |
| } |
| |
| void expectNoMaterialToolbar() { |
| expect(find.byType(TextButton), findsNothing); |
| } |
| |
| // Check that the Material text selection toolbars show the expected buttons |
| // when the content is partially selected. |
| void expectMaterialToolbarForPartialSelection() { |
| if (isContextMenuProvidedByPlatform) { |
| expectNoMaterialToolbar(); |
| return; |
| } |
| |
| switch (defaultTargetPlatform) { |
| case TargetPlatform.android: |
| expect(find.byType(TextButton), findsNWidgets(5)); |
| expect(find.text('Cut'), findsOneWidget); |
| expect(find.text('Copy'), findsOneWidget); |
| expect(find.text('Paste'), findsOneWidget); |
| expect(find.text('Share'), findsOneWidget); |
| expect(find.text('Select all'), findsOneWidget); |
| case TargetPlatform.iOS: |
| case TargetPlatform.macOS: |
| case TargetPlatform.fuchsia: |
| case TargetPlatform.linux: |
| case TargetPlatform.windows: |
| expect(find.byType(TextButton), findsNWidgets(4)); |
| expect(find.text('Cut'), findsOneWidget); |
| expect(find.text('Copy'), findsOneWidget); |
| expect(find.text('Paste'), findsOneWidget); |
| expect(find.text('Select all'), findsOneWidget); |
| } |
| } |
| |
| // Check that the Material text selection toolbar shows the expected buttons |
| // when the content is fully selected. |
| void expectMaterialToolbarForFullSelection() { |
| if (isContextMenuProvidedByPlatform) { |
| expectNoMaterialToolbar(); |
| return; |
| } |
| |
| switch (defaultTargetPlatform) { |
| case TargetPlatform.android: |
| expect(find.byType(TextButton), findsNWidgets(4)); |
| expect(find.text('Cut'), findsOneWidget); |
| expect(find.text('Copy'), findsOneWidget); |
| expect(find.text('Paste'), findsOneWidget); |
| expect(find.text('Share'), findsOneWidget); |
| case TargetPlatform.iOS: |
| case TargetPlatform.fuchsia: |
| case TargetPlatform.linux: |
| case TargetPlatform.macOS: |
| case TargetPlatform.windows: |
| expect(find.byType(TextButton), findsNWidgets(3)); |
| expect(find.text('Cut'), findsOneWidget); |
| expect(find.text('Copy'), findsOneWidget); |
| expect(find.text('Paste'), findsOneWidget); |
| } |
| } |
| |
| Finder findMaterialOverflowNextButton() { |
| return find.byIcon(Icons.more_vert); |
| } |
| |
| Finder findMaterialOverflowBackButton() { |
| return find.byIcon(Icons.arrow_back); |
| } |
| |
| Future<void> tapMaterialOverflowNextButton(WidgetTester tester) async { |
| await tester.tapAt(tester.getCenter(findMaterialOverflowNextButton())); |
| await tester.pumpAndSettle(); |
| } |