diff --git a/engine/src/flutter/lib/web_ui/dev/browser.dart b/engine/src/flutter/lib/web_ui/dev/browser.dart index 43015a37517..5f1d31774c5 100644 --- a/engine/src/flutter/lib/web_ui/dev/browser.dart +++ b/engine/src/flutter/lib/web_ui/dev/browser.dart @@ -10,8 +10,6 @@ import 'package:pedantic/pedantic.dart'; import 'package:stack_trace/stack_trace.dart'; import 'package:typed_data/typed_buffers.dart'; -import 'package:test_api/src/utils.dart' show getErrorMessage; - /// An interface for running browser instances. /// /// This is intentionally coarse-grained: browsers are controlled primary from @@ -123,8 +121,9 @@ abstract class Browser { return; } _onExitCompleter.completeError( - Exception('Failed to run $name: ${getErrorMessage(error)}.'), - stackTrace); + Exception('Failed to run $name: $error.'), + stackTrace, + ); }); } diff --git a/engine/src/flutter/lib/web_ui/pubspec.yaml b/engine/src/flutter/lib/web_ui/pubspec.yaml index dfd598452ef..daabb9d19c8 100644 --- a/engine/src/flutter/lib/web_ui/pubspec.yaml +++ b/engine/src/flutter/lib/web_ui/pubspec.yaml @@ -16,7 +16,7 @@ dev_dependencies: image: 3.0.1 path: 1.8.0 quiver: 3.0.0 - test: 1.16.6 + test: 1.17.7 yaml: 3.0.0 watcher: 1.0.0 web_test_utils: diff --git a/engine/src/flutter/lib/web_ui/test/text_editing_test.dart b/engine/src/flutter/lib/web_ui/test/text_editing_test.dart index 143e6ffaef8..44db0a3dc53 100644 --- a/engine/src/flutter/lib/web_ui/test/text_editing_test.dart +++ b/engine/src/flutter/lib/web_ui/test/text_editing_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. -// @dart = 2.9 import 'dart:async'; import 'dart:html'; import 'dart:js_util' as js_util; @@ -23,9 +22,9 @@ const MethodCodec codec = JSONMethodCodec(); /// Add unit tests for [FirefoxTextEditingStrategy]. /// TODO(nurhan): https://github.com/flutter/flutter/issues/46891 -DefaultTextEditingStrategy editingStrategy; -EditingState lastEditingState; -String lastInputAction; +DefaultTextEditingStrategy? editingStrategy; +EditingState? lastEditingState; +String? lastInputAction; final InputConfiguration singlelineConfig = InputConfiguration( inputType: EngineInputType.text, @@ -40,11 +39,11 @@ final InputConfiguration multilineConfig = InputConfiguration( final Map flutterMultilineConfig = createFlutterConfig('multiline'); -void trackEditingState(EditingState editingState) { +void trackEditingState(EditingState? editingState) { lastEditingState = editingState; } -void trackInputAction(String inputAction) { +void trackInputAction(String? inputAction) { lastInputAction = inputAction; } @@ -62,7 +61,7 @@ void testMain() { }); group('$GloballyPositionedTextEditingStrategy', () { - HybridTextEditing testTextEditing; + late HybridTextEditing testTextEditing; setUp(() { testTextEditing = HybridTextEditing(); @@ -82,7 +81,7 @@ void testMain() { expect(document.activeElement, document.body); expect(defaultTextEditingRoot.activeElement, null); - editingStrategy.enable( + editingStrategy!.enable( singlelineConfig, onChange: trackEditingState, onAction: trackInputAction, @@ -92,19 +91,19 @@ void testMain() { defaultTextEditingRoot.querySelectorAll('input'), hasLength(1), ); - final InputElement input = defaultTextEditingRoot.querySelector('input'); + final Element input = defaultTextEditingRoot.querySelector('input')!; // Now the editing element should have focus. expect(document.activeElement, domRenderer.glassPaneElement); expect(defaultTextEditingRoot.activeElement, input); - expect(editingStrategy.domElement, input); + expect(editingStrategy!.domElement, input); expect(input.getAttribute('type'), null); // Input is appended to the right point of the DOM. - expect(defaultTextEditingRoot.contains(editingStrategy.domElement), isTrue); + expect(defaultTextEditingRoot.contains(editingStrategy!.domElement), isTrue); - editingStrategy.disable(); + editingStrategy!.disable(); expect( defaultTextEditingRoot.querySelectorAll('input'), hasLength(0), @@ -118,78 +117,78 @@ void testMain() { final InputConfiguration config = InputConfiguration( readOnly: true, ); - editingStrategy.enable( + editingStrategy!.enable( config, onChange: trackEditingState, onAction: trackInputAction, ); expect(defaultTextEditingRoot.querySelectorAll('input'), hasLength(1)); - final InputElement input = defaultTextEditingRoot.querySelector('input'); - expect(editingStrategy.domElement, input); + final Element input = defaultTextEditingRoot.querySelector('input')!; + expect(editingStrategy!.domElement, input); expect(input.getAttribute('readonly'), 'readonly'); - editingStrategy.disable(); + editingStrategy!.disable(); }); test('Knows how to create password fields', () { final InputConfiguration config = InputConfiguration( obscureText: true, ); - editingStrategy.enable( + editingStrategy!.enable( config, onChange: trackEditingState, onAction: trackInputAction, ); expect(defaultTextEditingRoot.querySelectorAll('input'), hasLength(1)); - final InputElement input = defaultTextEditingRoot.querySelector('input'); - expect(editingStrategy.domElement, input); + final Element input = defaultTextEditingRoot.querySelector('input')!; + expect(editingStrategy!.domElement, input); expect(input.getAttribute('type'), 'password'); - editingStrategy.disable(); + editingStrategy!.disable(); }); test('Knows to turn autocorrect off', () { final InputConfiguration config = InputConfiguration( autocorrect: false, ); - editingStrategy.enable( + editingStrategy!.enable( config, onChange: trackEditingState, onAction: trackInputAction, ); expect(defaultTextEditingRoot.querySelectorAll('input'), hasLength(1)); - final InputElement input = defaultTextEditingRoot.querySelector('input'); - expect(editingStrategy.domElement, input); + final Element input = defaultTextEditingRoot.querySelector('input')!; + expect(editingStrategy!.domElement, input); expect(input.getAttribute('autocorrect'), 'off'); - editingStrategy.disable(); + editingStrategy!.disable(); }); test('Knows to turn autocorrect on', () { final InputConfiguration config = InputConfiguration( autocorrect: true, ); - editingStrategy.enable( + editingStrategy!.enable( config, onChange: trackEditingState, onAction: trackInputAction, ); expect(defaultTextEditingRoot.querySelectorAll('input'), hasLength(1)); - final InputElement input = defaultTextEditingRoot.querySelector('input'); - expect(editingStrategy.domElement, input); + final Element input = defaultTextEditingRoot.querySelector('input')!; + expect(editingStrategy!.domElement, input); expect(input.getAttribute('autocorrect'), 'on'); - editingStrategy.disable(); + editingStrategy!.disable(); }); test('Can read editing state correctly', () { - editingStrategy.enable( + editingStrategy!.enable( singlelineConfig, onChange: trackEditingState, onAction: trackInputAction, ); - final InputElement input = editingStrategy.domElement; + final InputElement input = editingStrategy!.domElement as InputElement; input.value = 'foo bar'; input.dispatchEvent(Event.eventType('Event', 'input')); expect( @@ -209,15 +208,15 @@ void testMain() { }); test('Can set editing state correctly', () { - editingStrategy.enable( + editingStrategy!.enable( singlelineConfig, onChange: trackEditingState, onAction: trackInputAction, ); - editingStrategy.setEditingState( + editingStrategy!.setEditingState( EditingState(text: 'foo bar baz', baseOffset: 2, extentOffset: 7)); - checkInputEditingState(editingStrategy.domElement, 'foo bar baz', 2, 7); + checkInputEditingState(editingStrategy!.domElement!, 'foo bar baz', 2, 7); // There should be no input action. expect(lastInputAction, isNull); @@ -226,7 +225,7 @@ void testMain() { test('Multi-line mode also works', () { // The textarea element is created lazily. expect(document.getElementsByTagName('textarea'), hasLength(0)); - editingStrategy.enable( + editingStrategy!.enable( multilineConfig, onChange: trackEditingState, onAction: trackInputAction, @@ -234,10 +233,10 @@ void testMain() { expect(defaultTextEditingRoot.querySelectorAll('textarea'), hasLength(1)); final TextAreaElement textarea = - defaultTextEditingRoot.querySelector('textarea'); + defaultTextEditingRoot.querySelector('textarea') as TextAreaElement; // Now the textarea should have focus. expect(defaultTextEditingRoot.activeElement, textarea); - expect(editingStrategy.domElement, textarea); + expect(editingStrategy!.domElement, textarea); textarea.value = 'foo\nbar'; textarea.dispatchEvent(Event.eventType('Event', 'input')); @@ -250,11 +249,11 @@ void testMain() { ); // Can set textarea state correctly (and preserves new lines). - editingStrategy.setEditingState( + editingStrategy!.setEditingState( EditingState(text: 'bar\nbaz', baseOffset: 2, extentOffset: 7)); checkTextAreaEditingState(textarea, 'bar\nbaz', 2, 7); - editingStrategy.disable(); + editingStrategy!.disable(); // The textarea should be cleaned up. expect(defaultTextEditingRoot.querySelectorAll('textarea'), hasLength(0)); // The focus is back to the body. @@ -270,7 +269,7 @@ void testMain() { expect(document.getElementsByTagName('textarea'), hasLength(0)); // Use single-line config and expect an `` to be created. - editingStrategy.enable( + editingStrategy!.enable( singlelineConfig, onChange: trackEditingState, onAction: trackInputAction, @@ -279,12 +278,12 @@ void testMain() { expect(defaultTextEditingRoot.querySelectorAll('textarea'), hasLength(0)); // Disable and check that all DOM elements were removed. - editingStrategy.disable(); + editingStrategy!.disable(); expect(defaultTextEditingRoot.querySelectorAll('input'), hasLength(0)); expect(defaultTextEditingRoot.querySelectorAll('textarea'), hasLength(0)); // Use multi-line config and expect an `