From 2e5569eb225730b72c9d930a79f0900ddb84f9f0 Mon Sep 17 00:00:00 2001 From: Mouad Debbar Date: Mon, 5 Apr 2021 20:49:02 -0700 Subject: [PATCH] [web] Enable Cupertino text field tests on web (#79817) --- .../test/cupertino/text_field_test.dart | 71 +++++++++++-------- 1 file changed, 40 insertions(+), 31 deletions(-) diff --git a/packages/flutter/test/cupertino/text_field_test.dart b/packages/flutter/test/cupertino/text_field_test.dart index bd23599aecf..52cf344f079 100644 --- a/packages/flutter/test/cupertino/text_field_test.dart +++ b/packages/flutter/test/cupertino/text_field_test.dart @@ -2,7 +2,6 @@ // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. -@TestOn('!chrome') import 'dart:ui' as ui show BoxHeightStyle, BoxWidthStyle, Color; import 'package:flutter/cupertino.dart'; @@ -15,6 +14,9 @@ import 'package:flutter_test/flutter_test.dart'; import '../rendering/mock_canvas.dart'; import '../widgets/semantics_tester.dart'; +// On web, the context menu (aka toolbar) is provided by the browser. +final bool isContextMenuProvidedByPlatform = isBrowser; + class MockClipboard { Object _clipboardData = { 'text': null, @@ -332,7 +334,7 @@ void main() { await tester.pumpAndSettle(); expect(focusNode.hasFocus, isTrue); semantics.dispose(); - }, variant: const TargetPlatformVariant({ TargetPlatform.macOS }), skip: kIsWeb); + }, variant: const TargetPlatformVariant({ TargetPlatform.macOS })); testWidgets( 'takes available space horizontally and takes intrinsic space vertically no-strut', @@ -446,6 +448,9 @@ void main() { const Size(200, 36), ); }, + // TODO(mdebbar): Strut styles support. + // https://github.com/flutter/flutter/issues/32243 + skip: isBrowser, ); testWidgets( @@ -474,6 +479,9 @@ void main() { const Size(200, 66), ); }, + // TODO(mdebbar): Strut styles support. + // https://github.com/flutter/flutter/issues/32243 + skip: isBrowser, ); testWidgets( @@ -1476,8 +1484,7 @@ void main() { expect(text.style!.fontSize, 14); expect(text.style!.letterSpacing, -0.15); expect(text.style!.fontWeight, FontWeight.w400); - }); - + }, skip: isContextMenuProvidedByPlatform); testWidgets('text field toolbar options correctly changes options', (WidgetTester tester) async { final TextEditingController controller = TextEditingController( @@ -1520,7 +1527,8 @@ void main() { expect(find.text('Copy'), findsOneWidget); expect(find.text('Cut'), findsNothing); expect(find.text('Select All'), findsNothing); - }); + }, skip: isContextMenuProvidedByPlatform); + testWidgets('Read only text field', (WidgetTester tester) async { final TextEditingController controller = TextEditingController(text: 'readonly'); @@ -1556,7 +1564,7 @@ void main() { expect(find.text('Copy'), findsOneWidget); expect(find.text('Paste'), findsNothing); expect(find.text('Cut'), findsNothing); - }); + }, skip: isContextMenuProvidedByPlatform); testWidgets('copy paste', (WidgetTester tester) async { await tester.pumpWidget( @@ -1607,7 +1615,7 @@ void main() { expect(find.text('field 1'), findsOneWidget); expect(find.text("j'aime la poutine"), findsOneWidget); expect(find.text('field 2'), findsNothing); - }); + }, skip: isContextMenuProvidedByPlatform); testWidgets( 'tap moves cursor to the edge of the word it tapped on', @@ -1711,7 +1719,7 @@ void main() { ); // Selected text shows 3 toolbar buttons. - expect(find.byType(CupertinoButton), findsNWidgets(3)); + expect(find.byType(CupertinoButton), isContextMenuProvidedByPlatform ? findsNothing : findsNWidgets(3)); }, ); @@ -1772,7 +1780,7 @@ void main() { ); // Selected text shows 3 toolbar buttons. - expect(find.byType(CupertinoButton), findsNWidgets(3)); + expect(find.byType(CupertinoButton), isContextMenuProvidedByPlatform ? findsNothing : findsNWidgets(3)); }, ); @@ -1807,7 +1815,7 @@ void main() { ); // Selected text shows 3 toolbar buttons. - expect(find.byType(CupertinoButton), findsNWidgets(3)); + expect(find.byType(CupertinoButton), isContextMenuProvidedByPlatform ? findsNothing : findsNWidgets(3)); await gesture.up(); await tester.pump(); @@ -1817,7 +1825,7 @@ void main() { controller.selection, const TextSelection(baseOffset: 8, extentOffset: 12), ); - expect(find.byType(CupertinoButton), findsNWidgets(3)); + expect(find.byType(CupertinoButton), isContextMenuProvidedByPlatform ? findsNothing : findsNWidgets(3)); }, ); @@ -2135,7 +2143,7 @@ void main() { ); // Selected text shows paste toolbar buttons. - expect(find.byType(CupertinoButton), findsNWidgets(1)); + expect(find.byType(CupertinoButton), isContextMenuProvidedByPlatform ? findsNothing : findsNWidgets(1)); await gesture.up(); await tester.pump(); @@ -2145,7 +2153,7 @@ void main() { controller.selection, const TextSelection(baseOffset: 0, extentOffset: 35), ); - expect(find.byType(CupertinoButton), findsNWidgets(1)); + expect(find.byType(CupertinoButton), isContextMenuProvidedByPlatform ? findsNothing : findsNWidgets(1)); }, ); @@ -2191,7 +2199,7 @@ void main() { expect(find.text('Select All'), findsOneWidget); expect(find.text('Copy'), findsNothing); expect(find.text('Cut'), findsNothing); - }); + }, skip: isContextMenuProvidedByPlatform); testWidgets( 'long press moves cursor to the exact long press position and shows toolbar', @@ -2221,7 +2229,7 @@ void main() { ); // Collapsed toolbar shows 2 buttons. - expect(find.byType(CupertinoButton), findsNWidgets(2)); + expect(find.byType(CupertinoButton), isContextMenuProvidedByPlatform ? findsNothing : findsNWidgets(2)); }, ); @@ -2320,7 +2328,7 @@ void main() { const TextSelection.collapsed(offset: 9, affinity: TextAffinity.upstream), ); // The toolbar now shows up. - expect(find.byType(CupertinoButton), findsNWidgets(2)); + expect(find.byType(CupertinoButton), isContextMenuProvidedByPlatform ? findsNothing : findsNWidgets(2)); }, ); @@ -2350,7 +2358,7 @@ void main() { expect(lastCharEndpoint.length, 1); // Just testing the test and making sure that the last character is off // the right side of the screen. - expect(lastCharEndpoint[0].point.dx, moreOrLessEquals(1094.73, epsilon: 0.01)); + expect(lastCharEndpoint[0].point.dx, moreOrLessEquals(1094.73, epsilon: 0.25)); final Offset textfieldStart = tester.getTopLeft(find.byType(CupertinoTextField)); @@ -2395,7 +2403,7 @@ void main() { const TextSelection.collapsed(offset: 66, affinity: TextAffinity.upstream), ); // The toolbar now shows up. - expect(find.byType(CupertinoButton), findsNWidgets(2)); + expect(find.byType(CupertinoButton), isContextMenuProvidedByPlatform ? findsNothing : findsNWidgets(2)); lastCharEndpoint = renderEditable.getEndpointsForSelection( const TextSelection.collapsed(offset: 66), // Last character's position. @@ -2403,14 +2411,14 @@ void main() { expect(lastCharEndpoint.length, 1); // The last character is now on screen. - expect(lastCharEndpoint[0].point.dx, moreOrLessEquals(786.73, epsilon: 0.01)); + expect(lastCharEndpoint[0].point.dx, moreOrLessEquals(786.73, epsilon: 0.25)); final List firstCharEndpoint = renderEditable.getEndpointsForSelection( const TextSelection.collapsed(offset: 0), // First character's position. ); expect(firstCharEndpoint.length, 1); // The first character is now offscreen to the left. - expect(firstCharEndpoint[0].point.dx, moreOrLessEquals(-308.20, epsilon: 0.01)); + expect(firstCharEndpoint[0].point.dx, moreOrLessEquals(-308.20, epsilon: 0.25)); }); testWidgets( @@ -2451,7 +2459,7 @@ void main() { ); // Long press toolbar. - expect(find.byType(CupertinoButton), findsNWidgets(2)); + expect(find.byType(CupertinoButton), isContextMenuProvidedByPlatform ? findsNothing : findsNWidgets(2)); }, ); @@ -2492,7 +2500,7 @@ void main() { const TextSelection(baseOffset: 8, extentOffset: 12), ); // Shows toolbar. - expect(find.byType(CupertinoButton), findsNWidgets(3)); + expect(find.byType(CupertinoButton), isContextMenuProvidedByPlatform ? findsNothing : findsNWidgets(3)); }, ); @@ -2526,7 +2534,7 @@ void main() { controller.selection, const TextSelection(baseOffset: 0, extentOffset: 7), ); - expect(find.byType(CupertinoButton), findsNWidgets(3)); + expect(find.byType(CupertinoButton), isContextMenuProvidedByPlatform ? findsNothing : findsNWidgets(3)); // Double tap selecting the same word somewhere else is fine. await tester.tapAt(textfieldStart + const Offset(100.0, 5.0)); @@ -2542,7 +2550,7 @@ void main() { controller.selection, const TextSelection(baseOffset: 0, extentOffset: 7), ); - expect(find.byType(CupertinoButton), findsNWidgets(3)); + expect(find.byType(CupertinoButton), isContextMenuProvidedByPlatform ? findsNothing : findsNWidgets(3)); await tester.tapAt(textfieldStart + const Offset(150.0, 5.0)); await tester.pump(const Duration(milliseconds: 50)); @@ -2557,7 +2565,7 @@ void main() { controller.selection, const TextSelection(baseOffset: 8, extentOffset: 12), ); - expect(find.byType(CupertinoButton), findsNWidgets(3)); + expect(find.byType(CupertinoButton), isContextMenuProvidedByPlatform ? findsNothing : findsNWidgets(3)); }, ); @@ -2598,7 +2606,7 @@ void main() { await gesture.up(); await tester.pumpAndSettle(); // Shows toolbar. - expect(find.byType(CupertinoButton), findsNWidgets(3)); + expect(find.byType(CupertinoButton), isContextMenuProvidedByPlatform ? findsNothing : findsNWidgets(3)); }); testWidgets('force press on unsupported devices falls back to tap', (WidgetTester tester) async { @@ -2842,7 +2850,7 @@ void main() { final EditableTextState editableText = tester.state(find.byType(EditableText)); expect(editableText.selectionOverlay!.handlesAreVisible, isFalse); - expect(editableText.selectionOverlay!.toolbarIsVisible, isTrue); + expect(editableText.selectionOverlay!.toolbarIsVisible, isContextMenuProvidedByPlatform ? isFalse : isTrue); }); testWidgets( @@ -2870,7 +2878,7 @@ void main() { final EditableTextState editableText = tester.state(find.byType(EditableText)); expect(editableText.selectionOverlay!.handlesAreVisible, isTrue); - expect(editableText.selectionOverlay!.toolbarIsVisible, isTrue); + expect(editableText.selectionOverlay!.toolbarIsVisible, isContextMenuProvidedByPlatform ? isFalse : isTrue); }, ); @@ -2899,7 +2907,7 @@ void main() { final EditableTextState editableText = tester.state(find.byType(EditableText)); expect(editableText.selectionOverlay!.handlesAreVisible, isFalse); - expect(editableText.selectionOverlay!.toolbarIsVisible, isTrue); + expect(editableText.selectionOverlay!.toolbarIsVisible, isContextMenuProvidedByPlatform ? isFalse : isTrue); }, ); @@ -3214,6 +3222,7 @@ void main() { textFieldTopLeft = tester.getTopLeft(find.byType(CupertinoTextField)); expect(toolbarTopLeft.dy, lessThan(textFieldTopLeft.dy)); }, + skip: isContextMenuProvidedByPlatform, ); testWidgets('text field respects keyboardAppearance from theme', (WidgetTester tester) async { @@ -3810,7 +3819,7 @@ void main() { expect(find.byType(CupertinoTextSelectionToolbar), findsOneWidget); expect(tester.takeException(), null); }); - }); + }, skip: isContextMenuProvidedByPlatform); group('textAlignVertical position', () { group('simple case', () { @@ -4243,7 +4252,7 @@ void main() { // Long press shows the selection menu. await tester.longPressAt(textOffsetToPosition(tester, 0)); await tester.pumpAndSettle(); - expect(find.text('Paste'), findsOneWidget); + expect(find.text('Paste'), isContextMenuProvidedByPlatform ? findsNothing : findsOneWidget); }, ); });