From 6609aabb0fb1a79975a0209a0e787861f700a717 Mon Sep 17 00:00:00 2001 From: nturgut Date: Thu, 18 Jun 2020 16:56:30 -0700 Subject: [PATCH 1/7] change the version of simulator. luci bots only has 13.0 --- lib/web_ui/dev/browser_lock.yaml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/lib/web_ui/dev/browser_lock.yaml b/lib/web_ui/dev/browser_lock.yaml index 486d7ec242ec2..e8c241854af26 100644 --- a/lib/web_ui/dev/browser_lock.yaml +++ b/lib/web_ui/dev/browser_lock.yaml @@ -12,5 +12,5 @@ edge: launcher_version: '1.2.0.0' ios-safari: majorVersion: 13 - minorVersion: 5 + minorVersion: 0 device: 'iPhone 11' From c0d5c23220b1278b86447fb06453a0e35a3df6f5 Mon Sep 17 00:00:00 2001 From: nturgut Date: Mon, 22 Jun 2020 16:40:01 -0700 Subject: [PATCH 2/7] skip failing pointer binding tests --- .../test/engine/pointer_binding_test.dart | 368 ++++++++++++------ 1 file changed, 255 insertions(+), 113 deletions(-) diff --git a/lib/web_ui/test/engine/pointer_binding_test.dart b/lib/web_ui/test/engine/pointer_binding_test.dart index 3f8ed22b0968c..72151e58aea40 100644 --- a/lib/web_ui/test/engine/pointer_binding_test.dart +++ b/lib/web_ui/test/engine/pointer_binding_test.dart @@ -18,22 +18,43 @@ List _allPointerData(List packets) { return packets.expand((ui.PointerDataPacket packet) => packet.data).toList(); } +/// Helper class for encapsulating test skip information with test `context`. +/// +/// Some tests should be skipped depending on the browser and the OS. This class +/// is used for combining [shouldSkip] information with the `context`. +/// See: [_PointerEventContext] [_MouseEventContext] [_TouchEventContext]. +/// TODO: https://github.com/flutter/flutter/issues/60033 +class _BrowserUnitTestContext { + /// Should this test skipped. + final bool shouldSkip; + + /// Implementation of [_BasicEventContext]. + /// + /// See: [_PointerEventContext] [_MouseEventContext] [_TouchEventContext]. + final T testContext; + + _BrowserUnitTestContext(this.testContext, {this.shouldSkip = false}); +} + typedef _ContextTestBody = void Function(T); void _testEach( - Iterable contexts, + Iterable<_BrowserUnitTestContext> contexts, String description, _ContextTestBody body, ) { - for (T context in contexts) { - if (context.isSupported) { - test('${context.name} $description', () { - body(context); - }); + for (_BrowserUnitTestContext context in contexts) { + if (context.testContext.isSupported) { + test('${context.testContext.name} $description', () { + body(context.testContext); + }, skip: context.shouldSkip); } } } +bool get isIosSafari => (browserEngine == BrowserEngine.webkit && + operatingSystem == OperatingSystem.iOs); + void main() { html.Element glassPane = domRenderer.glassPaneElement; @@ -45,13 +66,13 @@ void main() { }); test('_PointerEventContext generates expected events', () { - if (!_PointerEventContext().isSupported) - return; + if (!_PointerEventContext().isSupported) return; html.PointerEvent expectCorrectType(html.Event e) { expect(e.runtimeType, equals(html.PointerEvent)); return e; } + List expectCorrectTypes(List events) { return events.map(expectCorrectType).toList(); } @@ -68,7 +89,8 @@ void main() { expect(event.client.x, equals(100)); expect(event.client.y, equals(101)); - event = expectCorrectType(context.mouseDown(clientX: 110, clientY: 111, button: 2, buttons: 2)); + event = expectCorrectType( + context.mouseDown(clientX: 110, clientY: 111, button: 2, buttons: 2)); expect(event.type, equals('pointerdown')); expect(event.pointerId, equals(1)); expect(event.button, equals(2)); @@ -102,7 +124,8 @@ void main() { expect(event.client.x, equals(200)); expect(event.client.y, equals(201)); - event = expectCorrectType(context.mouseMove(clientX: 210, clientY: 211, button: _kNoButtonChange, buttons: 6)); + event = expectCorrectType(context.mouseMove( + clientX: 210, clientY: 211, button: _kNoButtonChange, buttons: 6)); expect(event.type, equals('pointermove')); expect(event.pointerId, equals(1)); expect(event.button, equals(-1)); @@ -110,7 +133,8 @@ void main() { expect(event.client.x, equals(210)); expect(event.client.y, equals(211)); - event = expectCorrectType(context.mouseMove(clientX: 212, clientY: 213, button: 2, buttons: 6)); + event = expectCorrectType( + context.mouseMove(clientX: 212, clientY: 213, button: 2, buttons: 6)); expect(event.type, equals('pointermove')); expect(event.pointerId, equals(1)); expect(event.button, equals(2)); @@ -118,7 +142,8 @@ void main() { expect(event.client.x, equals(212)); expect(event.client.y, equals(213)); - event = expectCorrectType(context.mouseMove(clientX: 214, clientY: 215, button: 2, buttons: 1)); + event = expectCorrectType( + context.mouseMove(clientX: 214, clientY: 215, button: 2, buttons: 1)); expect(event.type, equals('pointermove')); expect(event.pointerId, equals(1)); expect(event.button, equals(2)); @@ -152,7 +177,8 @@ void main() { expect(event.client.x, equals(300)); expect(event.client.y, equals(301)); - event = expectCorrectType(context.mouseUp(clientX: 310, clientY: 311, button: 2)); + event = expectCorrectType( + context.mouseUp(clientX: 310, clientY: 311, button: 2)); expect(event.type, equals('pointerup')); expect(event.pointerId, equals(1)); expect(event.button, equals(2)); @@ -206,13 +232,13 @@ void main() { }); test('_TouchEventContext generates expected events', () { - if (!_TouchEventContext().isSupported) - return; + if (!_TouchEventContext().isSupported) return; html.TouchEvent expectCorrectType(html.Event e) { expect(e.runtimeType, equals(html.TouchEvent)); return e; } + List expectCorrectTypes(List events) { return events.map(expectCorrectType).toList(); } @@ -300,8 +326,7 @@ void main() { }); test('_MouseEventContext generates expected events', () { - if (!_MouseEventContext().isSupported) - return; + if (!_MouseEventContext().isSupported) return; html.MouseEvent expectCorrectType(html.Event e) { expect(e.runtimeType, equals(html.MouseEvent)); @@ -318,7 +343,8 @@ void main() { expect(event.client.x, equals(100)); expect(event.client.y, equals(101)); - event = expectCorrectType(context.mouseDown(clientX: 110, clientY: 111, button: 2, buttons: 2)); + event = expectCorrectType( + context.mouseDown(clientX: 110, clientY: 111, button: 2, buttons: 2)); expect(event.type, equals('mousedown')); expect(event.button, equals(2)); expect(event.buttons, equals(2)); @@ -332,21 +358,24 @@ void main() { expect(event.client.x, equals(200)); expect(event.client.y, equals(201)); - event = expectCorrectType(context.mouseMove(clientX: 210, clientY: 211, button: _kNoButtonChange, buttons: 6)); + event = expectCorrectType(context.mouseMove( + clientX: 210, clientY: 211, button: _kNoButtonChange, buttons: 6)); expect(event.type, equals('mousemove')); expect(event.button, equals(0)); expect(event.buttons, equals(6)); expect(event.client.x, equals(210)); expect(event.client.y, equals(211)); - event = expectCorrectType(context.mouseMove(clientX: 212, clientY: 213, button: 2, buttons: 6)); + event = expectCorrectType( + context.mouseMove(clientX: 212, clientY: 213, button: 2, buttons: 6)); expect(event.type, equals('mousedown')); expect(event.button, equals(2)); expect(event.buttons, equals(6)); expect(event.client.x, equals(212)); expect(event.client.y, equals(213)); - event = expectCorrectType(context.mouseMove(clientX: 214, clientY: 215, button: 2, buttons: 1)); + event = expectCorrectType( + context.mouseMove(clientX: 214, clientY: 215, button: 2, buttons: 1)); expect(event.type, equals('mouseup')); expect(event.button, equals(2)); expect(event.buttons, equals(1)); @@ -360,7 +389,8 @@ void main() { expect(event.client.x, equals(300)); expect(event.client.y, equals(301)); - event = expectCorrectType(context.mouseUp(clientX: 310, clientY: 311, button: 2)); + event = expectCorrectType( + context.mouseUp(clientX: 310, clientY: 311, button: 2)); expect(event.type, equals('mouseup')); expect(event.button, equals(2)); expect(event.buttons, equals(0)); @@ -378,7 +408,11 @@ void main() { // ALL ADAPTERS _testEach<_BasicEventContext>( - [_PointerEventContext(), _MouseEventContext(), _TouchEventContext()], + [ + _BrowserUnitTestContext(_PointerEventContext()), + _BrowserUnitTestContext(_MouseEventContext()), + _BrowserUnitTestContext(_TouchEventContext()) + ], 'can receive pointer events on the glass pane', (_BasicEventContext context) { PointerBinding.instance.debugOverrideDetector(context); @@ -395,7 +429,11 @@ void main() { ); _testEach<_BasicEventContext>( - [_PointerEventContext(), _MouseEventContext(), _TouchEventContext()], + [ + _BrowserUnitTestContext(_PointerEventContext()), + _BrowserUnitTestContext(_MouseEventContext()), + _BrowserUnitTestContext(_TouchEventContext()) + ], 'does create an add event if got a pointerdown', (_BasicEventContext context) { PointerBinding.instance.debugOverrideDetector(context); @@ -415,7 +453,11 @@ void main() { ); _testEach<_ButtonedEventMixin>( - [_PointerEventContext(), _MouseEventContext()], + [ + _BrowserUnitTestContext(_PointerEventContext(), shouldSkip: isIosSafari), + _BrowserUnitTestContext(_MouseEventContext(), shouldSkip: isIosSafari), + _BrowserUnitTestContext(_TouchEventContext(), shouldSkip: isIosSafari) + ], 'correctly detects events on the semantics placeholder', (_ButtonedEventMixin context) { PointerBinding.instance.debugOverrideDetector(context); @@ -486,7 +528,10 @@ void main() { // BUTTONED ADAPTERS _testEach<_ButtonedEventMixin>( - [_MouseEventContext(), _PointerEventContext()], + [ + _BrowserUnitTestContext(_PointerEventContext()), + _BrowserUnitTestContext(_MouseEventContext()), + ], 'creates an add event if the first pointer activity is a hover', (_ButtonedEventMixin context) { PointerBinding.instance.debugOverrideDetector(context); @@ -507,7 +552,10 @@ void main() { ); _testEach<_ButtonedEventMixin>( - [_PointerEventContext(), _MouseEventContext()], + [ + _BrowserUnitTestContext(_PointerEventContext()), + _BrowserUnitTestContext(_MouseEventContext()), + ], 'sends a pointermove event instead of the second pointerdown in a row', (_ButtonedEventMixin context) { PointerBinding.instance.debugOverrideDetector(context); @@ -541,7 +589,10 @@ void main() { ); _testEach<_ButtonedEventMixin>( - [_PointerEventContext(), _MouseEventContext()], + [ + _BrowserUnitTestContext(_PointerEventContext(), shouldSkip: isIosSafari), + _BrowserUnitTestContext(_MouseEventContext(), shouldSkip: isIosSafari), + ], 'does synthesize add or hover or move for scroll', (_ButtonedEventMixin context) { PointerBinding.instance.debugOverrideDetector(context); @@ -550,7 +601,8 @@ void main() { packets.add(packet); }; - glassPane.dispatchEvent(html.WheelEvent('wheel', + glassPane.dispatchEvent(html.WheelEvent( + 'wheel', button: 1, clientX: 10, clientY: 10, @@ -558,7 +610,8 @@ void main() { deltaY: 10, )); - glassPane.dispatchEvent(html.WheelEvent('wheel', + glassPane.dispatchEvent(html.WheelEvent( + 'wheel', button: 1, clientX: 20, clientY: 50, @@ -573,7 +626,8 @@ void main() { clientY: 50.0, )); - glassPane.dispatchEvent(html.WheelEvent('wheel', + glassPane.dispatchEvent(html.WheelEvent( + 'wheel', button: 1, clientX: 30, clientY: 60, @@ -594,7 +648,8 @@ void main() { expect(packets[0].data[0].physicalDeltaY, equals(0.0)); expect(packets[0].data[1].change, equals(ui.PointerChange.hover)); - expect(packets[0].data[1].signalKind, equals(ui.PointerSignalKind.scroll)); + expect( + packets[0].data[1].signalKind, equals(ui.PointerSignalKind.scroll)); expect(packets[0].data[1].pointerIdentifier, equals(0)); expect(packets[0].data[1].synthesized, equals(false)); expect(packets[0].data[1].physicalX, equals(10.0)); @@ -613,7 +668,8 @@ void main() { expect(packets[1].data[0].physicalDeltaY, equals(40.0)); expect(packets[1].data[1].change, equals(ui.PointerChange.hover)); - expect(packets[1].data[1].signalKind, equals(ui.PointerSignalKind.scroll)); + expect( + packets[1].data[1].signalKind, equals(ui.PointerSignalKind.scroll)); expect(packets[1].data[1].pointerIdentifier, equals(0)); expect(packets[1].data[1].synthesized, equals(false)); expect(packets[1].data[1].physicalX, equals(20.0)); @@ -643,7 +699,8 @@ void main() { expect(packets[3].data[0].physicalDeltaY, equals(10.0)); expect(packets[3].data[1].change, equals(ui.PointerChange.hover)); - expect(packets[3].data[1].signalKind, equals(ui.PointerSignalKind.scroll)); + expect( + packets[3].data[1].signalKind, equals(ui.PointerSignalKind.scroll)); expect(packets[3].data[1].pointerIdentifier, equals(1)); expect(packets[3].data[1].synthesized, equals(false)); expect(packets[3].data[1].physicalX, equals(30.0)); @@ -654,7 +711,10 @@ void main() { ); _testEach<_ButtonedEventMixin>( - [_PointerEventContext(), _MouseEventContext()], + [ + _BrowserUnitTestContext(_PointerEventContext(), shouldSkip: isIosSafari), + _BrowserUnitTestContext(_MouseEventContext(), shouldSkip: isIosSafari), + ], 'does calculate delta and pointer identifier correctly', (_ButtonedEventMixin context) { PointerBinding.instance.debugOverrideDetector(context); @@ -779,7 +839,10 @@ void main() { ); _testEach<_ButtonedEventMixin>( - [_PointerEventContext(), _MouseEventContext()], + [ + _BrowserUnitTestContext(_PointerEventContext(), shouldSkip: isIosSafari), + _BrowserUnitTestContext(_MouseEventContext(), shouldSkip: isIosSafari), + ], 'correctly converts buttons of down, move and up events', (_ButtonedEventMixin context) { PointerBinding.instance.debugOverrideDetector(context); @@ -946,7 +1009,10 @@ void main() { ); _testEach<_ButtonedEventMixin>( - [_PointerEventContext(), _MouseEventContext()], + [ + _BrowserUnitTestContext(_PointerEventContext()), + _BrowserUnitTestContext(_MouseEventContext()), + ], 'correctly handles button changes during a down sequence', (_ButtonedEventMixin context) { PointerBinding.instance.debugOverrideDetector(context); @@ -1008,7 +1074,10 @@ void main() { ); _testEach<_ButtonedEventMixin>( - [_PointerEventContext(), _MouseEventContext()], + [ + _BrowserUnitTestContext(_PointerEventContext(), shouldSkip: isIosSafari), + _BrowserUnitTestContext(_MouseEventContext(), shouldSkip: isIosSafari), + ], 'synthesizes a pointerup event when pointermove comes before the up', (_ButtonedEventMixin context) { PointerBinding.instance.debugOverrideDetector(context); @@ -1056,7 +1125,6 @@ void main() { expect(packets[0].data[0].buttons, equals(2)); packets.clear(); - glassPane.dispatchEvent(context.mouseMove( button: _kNoButtonChange, buttons: 2, @@ -1072,7 +1140,6 @@ void main() { expect(packets[0].data[0].buttons, equals(2)); packets.clear(); - glassPane.dispatchEvent(context.mouseUp( button: 2, clientX: 20.0, @@ -1090,7 +1157,10 @@ void main() { ); _testEach<_ButtonedEventMixin>( - [_PointerEventContext(), _MouseEventContext()], + [ + _BrowserUnitTestContext(_PointerEventContext()), + _BrowserUnitTestContext(_MouseEventContext()), + ], 'correctly handles uncontinuous button changes during a down sequence', (_ButtonedEventMixin context) { PointerBinding.instance.debugOverrideDetector(context); @@ -1160,7 +1230,10 @@ void main() { ); _testEach<_ButtonedEventMixin>( - [_PointerEventContext(), _MouseEventContext()], + [ + _BrowserUnitTestContext(_PointerEventContext()), + _BrowserUnitTestContext(_MouseEventContext()), + ], 'handles RMB click when the browser sends it as a move', (_ButtonedEventMixin context) { PointerBinding.instance.debugOverrideDetector(context); @@ -1193,7 +1266,10 @@ void main() { ); _testEach<_ButtonedEventMixin>( - [_PointerEventContext(), _MouseEventContext()], + [ + _BrowserUnitTestContext(_PointerEventContext()), + _BrowserUnitTestContext(_MouseEventContext()), + ], 'correctly handles hover after RMB click', (_ButtonedEventMixin context) { PointerBinding.instance.debugOverrideDetector(context); @@ -1241,7 +1317,10 @@ void main() { ); _testEach<_ButtonedEventMixin>( - [_PointerEventContext(), _MouseEventContext()], + [ + _BrowserUnitTestContext(_PointerEventContext()), + _BrowserUnitTestContext(_MouseEventContext()), + ], 'correctly handles LMB click after RMB click', (_ButtonedEventMixin context) { PointerBinding.instance.debugOverrideDetector(context); @@ -1307,7 +1386,10 @@ void main() { ); _testEach<_ButtonedEventMixin>( - [_PointerEventContext(), _MouseEventContext()], + [ + _BrowserUnitTestContext(_PointerEventContext()), + _BrowserUnitTestContext(_MouseEventContext()), + ], 'correctly handles two consecutive RMB clicks with no up in between', (_ButtonedEventMixin context) { PointerBinding.instance.debugOverrideDetector(context); @@ -1369,7 +1451,10 @@ void main() { ); _testEach<_ButtonedEventMixin>( - [_PointerEventContext(), _MouseEventContext()], + [ + _BrowserUnitTestContext(_PointerEventContext()), + _BrowserUnitTestContext(_MouseEventContext()), + ], 'correctly handles two consecutive RMB clicks with up in between', (_ButtonedEventMixin context) { PointerBinding.instance.debugOverrideDetector(context); @@ -1449,7 +1534,10 @@ void main() { ); _testEach<_ButtonedEventMixin>( - [_PointerEventContext(), _MouseEventContext()], + [ + _BrowserUnitTestContext(_PointerEventContext()), + _BrowserUnitTestContext(_MouseEventContext()), + ], 'correctly handles two consecutive RMB clicks in two different locations', (_ButtonedEventMixin context) { PointerBinding.instance.debugOverrideDetector(context); @@ -1516,7 +1604,10 @@ void main() { ); _testEach<_ButtonedEventMixin>( - [_PointerEventContext(), _MouseEventContext()], + [ + _BrowserUnitTestContext(_PointerEventContext(), shouldSkip: true), + _BrowserUnitTestContext(_MouseEventContext(), shouldSkip: true), + ], 'correctly detects up event outside of glasspane', (_ButtonedEventMixin context) { PointerBinding.instance.debugOverrideDetector(context); @@ -1579,7 +1670,10 @@ void main() { // MULTIPOINTER ADAPTERS _testEach<_MultiPointerEventMixin>( - [_PointerEventContext(), _TouchEventContext()], + [ + _BrowserUnitTestContext(_PointerEventContext(), shouldSkip: true), + _BrowserUnitTestContext(_TouchEventContext(), shouldSkip: true), + ], 'treats each pointer separately', (_MultiPointerEventMixin context) { PointerBinding.instance.debugOverrideDetector(context); @@ -1767,7 +1861,10 @@ void main() { ); _testEach<_MultiPointerEventMixin>( - [_PointerEventContext(), _TouchEventContext()], + [ + _BrowserUnitTestContext(_PointerEventContext(), shouldSkip: true), + _BrowserUnitTestContext(_TouchEventContext(), shouldSkip: true), + ], 'correctly parses cancel event', (_MultiPointerEventMixin context) { PointerBinding.instance.debugOverrideDetector(context); @@ -1811,7 +1908,9 @@ void main() { // POINTER ADAPTER _testEach<_PointerEventContext>( - [_PointerEventContext()], + [ + _BrowserUnitTestContext(_PointerEventContext()), + ], 'does not synthesize pointer up if from different device', (_PointerEventContext context) { PointerBinding.instance.debugOverrideDetector(context); @@ -1851,7 +1950,9 @@ void main() { // TOUCH ADAPTER _testEach( - [_TouchEventContext()], + [ + _BrowserUnitTestContext(_TouchEventContext(), shouldSkip: true), + ], 'does calculate delta and pointer identifier correctly', (_TouchEventContext context) { // Mouse and Pointer are in another test since these tests can involve hovering @@ -1955,14 +2056,12 @@ abstract class _BasicEventContext implements PointerSupportDetector { // * For touch, a touch down html.Event primaryDown({double clientX, double clientY}); - // Generate an event that is: // // * For mouse, a drag with LMB down // * For touch, a touch drag html.Event primaryMove({double clientX, double clientY}); - // Generate an event that is: // // * For mouse, release LMB @@ -1972,13 +2071,15 @@ abstract class _BasicEventContext implements PointerSupportDetector { mixin _ButtonedEventMixin on _BasicEventContext { // Generate an event that is a mouse down with the specific buttons. - html.Event mouseDown({double clientX, double clientY, int button, int buttons}); + html.Event mouseDown( + {double clientX, double clientY, int button, int buttons}); // Generate an event that is a mouse drag with the specific buttons, or button // changes during the drag. // // If there is no button change, assign `button` with _kNoButtonChange. - html.Event mouseMove({double clientX, double clientY, int button, int buttons}); + html.Event mouseMove( + {double clientX, double clientY, int button, int buttons}); // Generate an event that releases all mouse buttons. html.Event mouseUp({double clientX, double clientY, int button}); @@ -2002,7 +2103,6 @@ mixin _ButtonedEventMixin on _BasicEventContext { ); } - @override html.Event primaryMove({double clientX, double clientY}) { return mouseMove( @@ -2073,7 +2173,9 @@ mixin _MultiPointerEventMixin on _BasicEventContext { // A test context for `_TouchAdapter`, including its name, PointerSupportDetector // to override, and how to generate events. -class _TouchEventContext extends _BasicEventContext with _MultiPointerEventMixin implements PointerSupportDetector { +class _TouchEventContext extends _BasicEventContext + with _MultiPointerEventMixin + implements PointerSupportDetector { _TouchEventContext() { _target = html.document.createElement('div'); } @@ -2108,16 +2210,20 @@ class _TouchEventContext extends _BasicEventContext with _MultiPointerEventMixin }); } - html.TouchEvent _createTouchEvent(String eventType, List<_TouchDetails> touches) { - return html.TouchEvent(eventType, { - 'changedTouches': touches.map( - (_TouchDetails details) => - _createTouch( - identifier: details.pointer, - clientX: details.clientX, - clientY: details.clientY, - ), - ).toList(), + html.TouchEvent _createTouchEvent( + String eventType, List<_TouchDetails> touches) { + return html.TouchEvent( + eventType, + { + 'changedTouches': touches + .map( + (_TouchDetails details) => _createTouch( + identifier: details.pointer, + clientX: details.clientX, + clientY: details.clientY, + ), + ) + .toList(), }, ); } @@ -2147,7 +2253,9 @@ class _TouchEventContext extends _BasicEventContext with _MultiPointerEventMixin // to override, and how to generate events. // // For the difference between MouseEvent and PointerEvent, see _MouseAdapter. -class _MouseEventContext extends _BasicEventContext with _ButtonedEventMixin implements PointerSupportDetector { +class _MouseEventContext extends _BasicEventContext + with _ButtonedEventMixin + implements PointerSupportDetector { @override String get name => 'MouseAdapter'; @@ -2164,7 +2272,8 @@ class _MouseEventContext extends _BasicEventContext with _ButtonedEventMixin imp bool get hasMouseEvents => true; @override - html.Event mouseDown({double clientX, double clientY, int button, int buttons}) { + html.Event mouseDown( + {double clientX, double clientY, int button, int buttons}) { return _createMouseEvent( 'mousedown', buttons: buttons, @@ -2175,12 +2284,14 @@ class _MouseEventContext extends _BasicEventContext with _ButtonedEventMixin imp } @override - html.Event mouseMove({double clientX, double clientY, int button, int buttons}) { + html.Event mouseMove( + {double clientX, double clientY, int button, int buttons}) { final bool hasButtonChange = button != _kNoButtonChange; - final bool changeIsButtonDown = hasButtonChange && (buttons & convertButtonToButtons(button)) != 0; - final String adjustedType = !hasButtonChange ? 'mousemove' : - changeIsButtonDown ? 'mousedown' : - 'mouseup'; + final bool changeIsButtonDown = + hasButtonChange && (buttons & convertButtonToButtons(button)) != 0; + final String adjustedType = !hasButtonChange + ? 'mousemove' + : changeIsButtonDown ? 'mousedown' : 'mouseup'; final int adjustedButton = hasButtonChange ? button : 0; return _createMouseEvent( adjustedType, @@ -2209,7 +2320,8 @@ class _MouseEventContext extends _BasicEventContext with _ButtonedEventMixin imp double clientX, double clientY, }) { - final Function jsMouseEvent = js_util.getProperty(html.window, 'MouseEvent'); + final Function jsMouseEvent = + js_util.getProperty(html.window, 'MouseEvent'); final List eventArgs = [ type, { @@ -2227,7 +2339,9 @@ class _MouseEventContext extends _BasicEventContext with _ButtonedEventMixin imp // to override, and how to generate events. // // For the difference between MouseEvent and PointerEvent, see _MouseAdapter. -class _PointerEventContext extends _BasicEventContext with _ButtonedEventMixin implements PointerSupportDetector, _MultiPointerEventMixin { +class _PointerEventContext extends _BasicEventContext + with _ButtonedEventMixin + implements PointerSupportDetector, _MultiPointerEventMixin { @override String get name => 'PointerAdapter'; @@ -2245,18 +2359,21 @@ class _PointerEventContext extends _BasicEventContext with _ButtonedEventMixin i @override List multiTouchDown(List<_TouchDetails> touches) { - return touches.map((_TouchDetails details) => _downWithFullDetails( - pointer: details.pointer, - buttons: 1, - button: 0, - clientX: details.clientX, - clientY: details.clientY, - pointerType: 'touch', - )).toList(); + return touches + .map((_TouchDetails details) => _downWithFullDetails( + pointer: details.pointer, + buttons: 1, + button: 0, + clientX: details.clientX, + clientY: details.clientY, + pointerType: 'touch', + )) + .toList(); } @override - html.Event mouseDown({double clientX, double clientY, int button, int buttons}) { + html.Event mouseDown( + {double clientX, double clientY, int button, int buttons}) { return _downWithFullDetails( pointer: 1, buttons: buttons, @@ -2267,7 +2384,13 @@ class _PointerEventContext extends _BasicEventContext with _ButtonedEventMixin i ); } - html.Event _downWithFullDetails({double clientX, double clientY, int button, int buttons, int pointer, String pointerType}) { + html.Event _downWithFullDetails( + {double clientX, + double clientY, + int button, + int buttons, + int pointer, + String pointerType}) { return html.PointerEvent('pointerdown', { 'pointerId': pointer, 'button': button, @@ -2280,18 +2403,21 @@ class _PointerEventContext extends _BasicEventContext with _ButtonedEventMixin i @override List multiTouchMove(List<_TouchDetails> touches) { - return touches.map((_TouchDetails details) => _moveWithFullDetails( - pointer: details.pointer, - buttons: 1, - button: _kNoButtonChange, - clientX: details.clientX, - clientY: details.clientY, - pointerType: 'touch', - )).toList(); + return touches + .map((_TouchDetails details) => _moveWithFullDetails( + pointer: details.pointer, + buttons: 1, + button: _kNoButtonChange, + clientX: details.clientX, + clientY: details.clientY, + pointerType: 'touch', + )) + .toList(); } @override - html.Event mouseMove({double clientX, double clientY, int button, int buttons}) { + html.Event mouseMove( + {double clientX, double clientY, int button, int buttons}) { return _moveWithFullDetails( pointer: 1, buttons: buttons, @@ -2302,7 +2428,13 @@ class _PointerEventContext extends _BasicEventContext with _ButtonedEventMixin i ); } - html.Event _moveWithFullDetails({double clientX, double clientY, int button, int buttons, int pointer, String pointerType}) { + html.Event _moveWithFullDetails( + {double clientX, + double clientY, + int button, + int buttons, + int pointer, + String pointerType}) { return html.PointerEvent('pointermove', { 'pointerId': pointer, 'button': button, @@ -2315,13 +2447,15 @@ class _PointerEventContext extends _BasicEventContext with _ButtonedEventMixin i @override List multiTouchUp(List<_TouchDetails> touches) { - return touches.map((_TouchDetails details) => _upWithFullDetails( - pointer: details.pointer, - button: 0, - clientX: details.clientX, - clientY: details.clientY, - pointerType: 'touch', - )).toList(); + return touches + .map((_TouchDetails details) => _upWithFullDetails( + pointer: details.pointer, + button: 0, + clientX: details.clientX, + clientY: details.clientY, + pointerType: 'touch', + )) + .toList(); } @override @@ -2335,7 +2469,12 @@ class _PointerEventContext extends _BasicEventContext with _ButtonedEventMixin i ); } - html.Event _upWithFullDetails({double clientX, double clientY, int button, int pointer, String pointerType}) { + html.Event _upWithFullDetails( + {double clientX, + double clientY, + int button, + int pointer, + String pointerType}) { return html.PointerEvent('pointerup', { 'pointerId': pointer, 'button': button, @@ -2348,13 +2487,16 @@ class _PointerEventContext extends _BasicEventContext with _ButtonedEventMixin i @override List multiTouchCancel(List<_TouchDetails> touches) { - return touches.map((_TouchDetails details) => html.PointerEvent('pointercancel', { - 'pointerId': details.pointer, - 'button': 0, - 'buttons': 0, - 'clientX': 0, - 'clientY': 0, - 'pointerType': 'touch', - })).toList(); + return touches + .map((_TouchDetails details) => + html.PointerEvent('pointercancel', { + 'pointerId': details.pointer, + 'button': 0, + 'buttons': 0, + 'clientX': 0, + 'clientY': 0, + 'pointerType': 'touch', + })) + .toList(); } } From 9bc3ab62e83872aafb5c1d1527694739eaf67223 Mon Sep 17 00:00:00 2001 From: nturgut Date: Mon, 22 Jun 2020 17:50:10 -0700 Subject: [PATCH 3/7] skip path_metrics (canvaskit) and a method from surface_test --- lib/web_ui/test/canvaskit/path_metrics_test.dart | 4 ++++ lib/web_ui/test/engine/surface/surface_test.dart | 6 +++++- 2 files changed, 9 insertions(+), 1 deletion(-) diff --git a/lib/web_ui/test/canvaskit/path_metrics_test.dart b/lib/web_ui/test/canvaskit/path_metrics_test.dart index 18bab1ced554c..f85d0441f4335 100644 --- a/lib/web_ui/test/canvaskit/path_metrics_test.dart +++ b/lib/web_ui/test/canvaskit/path_metrics_test.dart @@ -3,6 +3,10 @@ // found in the LICENSE file. // @dart = 2.6 +// This test failed on iOS Safari. +// TODO: https://github.com/flutter/flutter/issues/60040 +@TestOn('chrome || firefox') + import 'package:test/test.dart'; import 'package:ui/src/engine.dart'; diff --git a/lib/web_ui/test/engine/surface/surface_test.dart b/lib/web_ui/test/engine/surface/surface_test.dart index 957cacb92f932..9da82f026821e 100644 --- a/lib/web_ui/test/engine/surface/surface_test.dart +++ b/lib/web_ui/test/engine/surface/surface_test.dart @@ -194,7 +194,11 @@ void main() { expect(elementC.parent, elementA); expect(elementB.parent, null); - }); + }, + // This method failed on iOS Safari. + // TODO: https://github.com/flutter/flutter/issues/60036 + skip: (browserEngine == BrowserEngine.webkit && + operatingSystem == OperatingSystem.iOs)); test('is retained', () { final SceneBuilder builder1 = SceneBuilder(); From f1157a681025710e2c8a883098ad205f38761ee4 Mon Sep 17 00:00:00 2001 From: nturgut Date: Tue, 23 Jun 2020 11:12:58 -0700 Subject: [PATCH 4/7] fix analyzer errors --- lib/web_ui/dev/test_platform.dart | 10 +- .../test/canvaskit/path_metrics_test.dart | 102 +++++++++--------- .../test/engine/pointer_binding_test.dart | 14 ++- 3 files changed, 67 insertions(+), 59 deletions(-) diff --git a/lib/web_ui/dev/test_platform.dart b/lib/web_ui/dev/test_platform.dart index 20e16be900217..41acaa50bcf3d 100644 --- a/lib/web_ui/dev/test_platform.dart +++ b/lib/web_ui/dev/test_platform.dart @@ -126,9 +126,9 @@ class BrowserPlatform extends PlatformPlugin { config.suiteDefaults.precompiledPath != null)) .add(_wrapperHandler); // Screenshot tests are only enabled in chrome for now. - if (name == 'chrome') { + //if (name == 'chrome') { cascade = cascade.add(_screeshotHandler); - } + //} } var pipeline = shelf.Pipeline() @@ -142,9 +142,9 @@ class BrowserPlatform extends PlatformPlugin { } Future _screeshotHandler(shelf.Request request) async { - if (browserName != 'chrome') { - throw Exception('Screenshots tests are only available in Chrome.'); - } + // if (browserName != 'chrome') { + // throw Exception('Screenshots tests are only available in Chrome.'); + // } if (!request.requestedUri.path.endsWith('/screenshot')) { return shelf.Response.notFound( diff --git a/lib/web_ui/test/canvaskit/path_metrics_test.dart b/lib/web_ui/test/canvaskit/path_metrics_test.dart index f85d0441f4335..9089a6b57af24 100644 --- a/lib/web_ui/test/canvaskit/path_metrics_test.dart +++ b/lib/web_ui/test/canvaskit/path_metrics_test.dart @@ -3,69 +3,71 @@ // found in the LICENSE file. // @dart = 2.6 -// This test failed on iOS Safari. -// TODO: https://github.com/flutter/flutter/issues/60040 -@TestOn('chrome || firefox') - import 'package:test/test.dart'; import 'package:ui/src/engine.dart'; import 'package:ui/ui.dart' as ui; void main() { - setUpAll(() async { - await ui.webOnlyInitializePlatform(); - }); + group('Path Metrics', () { + setUpAll(() async { + await ui.webOnlyInitializePlatform(); + }); - test('Using CanvasKit', () { - expect(experimentalUseSkia, true); - }); + test('Using CanvasKit', () { + expect(experimentalUseSkia, true); + }); - test(SkPathMetrics, () { - final ui.Path path = ui.Path(); - expect(path, isA()); - expect(path.computeMetrics().length, 0); + test(SkPathMetrics, () { + final ui.Path path = ui.Path(); + expect(path, isA()); + expect(path.computeMetrics().length, 0); - path.addRect(ui.Rect.fromLTRB(0, 0, 10, 10)); - final ui.PathMetric metric = path.computeMetrics().single; - expect(metric.contourIndex, 0); - expect(metric.extractPath(0, 0.5).computeMetrics().length, 1); + path.addRect(ui.Rect.fromLTRB(0, 0, 10, 10)); + final ui.PathMetric metric = path.computeMetrics().single; + expect(metric.contourIndex, 0); + expect(metric.extractPath(0, 0.5).computeMetrics().length, 1); - final ui.Tangent tangent1 = metric.getTangentForOffset(5); - expect(tangent1.position, ui.Offset(5, 0)); - expect(tangent1.vector, ui.Offset(1, 0)); + final ui.Tangent tangent1 = metric.getTangentForOffset(5); + expect(tangent1.position, ui.Offset(5, 0)); + expect(tangent1.vector, ui.Offset(1, 0)); - final ui.Tangent tangent2 = metric.getTangentForOffset(15); - expect(tangent2.position, ui.Offset(10, 5)); - expect(tangent2.vector, ui.Offset(0, 1)); + final ui.Tangent tangent2 = metric.getTangentForOffset(15); + expect(tangent2.position, ui.Offset(10, 5)); + expect(tangent2.vector, ui.Offset(0, 1)); - expect(metric.isClosed, true); + expect(metric.isClosed, true); - path.addOval(ui.Rect.fromLTRB(10, 10, 100, 100)); - expect(path.computeMetrics().length, 2); + path.addOval(ui.Rect.fromLTRB(10, 10, 100, 100)); + expect(path.computeMetrics().length, 2); - // Path metrics can be iterated over multiple times. - final ui.PathMetrics metrics = path.computeMetrics(); - expect(metrics.toList().length, 2); - expect(metrics.toList().length, 2); - expect(metrics.toList().length, 2); + // Path metrics can be iterated over multiple times. + final ui.PathMetrics metrics = path.computeMetrics(); + expect(metrics.toList().length, 2); + expect(metrics.toList().length, 2); + expect(metrics.toList().length, 2); - // Can simultaneously iterate over multiple metrics from the same path. - final ui.PathMetrics metrics1 = path.computeMetrics(); - final ui.PathMetrics metrics2 = path.computeMetrics(); - final Iterator iter1 = metrics1.iterator; - final Iterator iter2 = metrics2.iterator; - expect(iter1.moveNext(), true); - expect(iter2.moveNext(), true); - expect(iter1.current, isNotNull); - expect(iter2.current, isNotNull); - expect(iter1.moveNext(), true); - expect(iter2.moveNext(), true); - expect(iter1.current, isNotNull); - expect(iter2.current, isNotNull); - expect(iter1.moveNext(), false); - expect(iter2.moveNext(), false); - expect(iter1.current, isNull); - expect(iter2.current, isNull); - }); + // Can simultaneously iterate over multiple metrics from the same path. + final ui.PathMetrics metrics1 = path.computeMetrics(); + final ui.PathMetrics metrics2 = path.computeMetrics(); + final Iterator iter1 = metrics1.iterator; + final Iterator iter2 = metrics2.iterator; + expect(iter1.moveNext(), true); + expect(iter2.moveNext(), true); + expect(iter1.current, isNotNull); + expect(iter2.current, isNotNull); + expect(iter1.moveNext(), true); + expect(iter2.moveNext(), true); + expect(iter1.current, isNotNull); + expect(iter2.current, isNotNull); + expect(iter1.moveNext(), false); + expect(iter2.moveNext(), false); + expect(iter1.current, isNull); + expect(iter2.current, isNull); + }); + }, + // This test failed on iOS Safari. + // TODO: https://github.com/flutter/flutter/issues/60040 + skip: (browserEngine == BrowserEngine.webkit && + operatingSystem == OperatingSystem.iOs)); } diff --git a/lib/web_ui/test/engine/pointer_binding_test.dart b/lib/web_ui/test/engine/pointer_binding_test.dart index 72151e58aea40..18ebe9513c3e9 100644 --- a/lib/web_ui/test/engine/pointer_binding_test.dart +++ b/lib/web_ui/test/engine/pointer_binding_test.dart @@ -25,7 +25,7 @@ List _allPointerData(List packets) { /// See: [_PointerEventContext] [_MouseEventContext] [_TouchEventContext]. /// TODO: https://github.com/flutter/flutter/issues/60033 class _BrowserUnitTestContext { - /// Should this test skipped. + /// Should this test be skipped. final bool shouldSkip; /// Implementation of [_BasicEventContext]. @@ -66,7 +66,9 @@ void main() { }); test('_PointerEventContext generates expected events', () { - if (!_PointerEventContext().isSupported) return; + if (!_PointerEventContext().isSupported) { + return; + } html.PointerEvent expectCorrectType(html.Event e) { expect(e.runtimeType, equals(html.PointerEvent)); @@ -232,7 +234,9 @@ void main() { }); test('_TouchEventContext generates expected events', () { - if (!_TouchEventContext().isSupported) return; + if (!_TouchEventContext().isSupported) { + return; + } html.TouchEvent expectCorrectType(html.Event e) { expect(e.runtimeType, equals(html.TouchEvent)); @@ -326,7 +330,9 @@ void main() { }); test('_MouseEventContext generates expected events', () { - if (!_MouseEventContext().isSupported) return; + if (!_MouseEventContext().isSupported) { + return; + } html.MouseEvent expectCorrectType(html.Event e) { expect(e.runtimeType, equals(html.MouseEvent)); From 8b7a8ba8ebb954e29d841395857a066df62c881c Mon Sep 17 00:00:00 2001 From: nturgut Date: Tue, 23 Jun 2020 11:17:31 -0700 Subject: [PATCH 5/7] remove extra added touch event context test --- lib/web_ui/test/engine/pointer_binding_test.dart | 1 - 1 file changed, 1 deletion(-) diff --git a/lib/web_ui/test/engine/pointer_binding_test.dart b/lib/web_ui/test/engine/pointer_binding_test.dart index 18ebe9513c3e9..537b043c87abe 100644 --- a/lib/web_ui/test/engine/pointer_binding_test.dart +++ b/lib/web_ui/test/engine/pointer_binding_test.dart @@ -462,7 +462,6 @@ void main() { [ _BrowserUnitTestContext(_PointerEventContext(), shouldSkip: isIosSafari), _BrowserUnitTestContext(_MouseEventContext(), shouldSkip: isIosSafari), - _BrowserUnitTestContext(_TouchEventContext(), shouldSkip: isIosSafari) ], 'correctly detects events on the semantics placeholder', (_ButtonedEventMixin context) { From 06c48a4fc4acb8778260162e864792b185144e99 Mon Sep 17 00:00:00 2001 From: nturgut Date: Tue, 23 Jun 2020 12:42:39 -0700 Subject: [PATCH 6/7] removing left overs for screenshot debugging --- lib/web_ui/dev/test_platform.dart | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/lib/web_ui/dev/test_platform.dart b/lib/web_ui/dev/test_platform.dart index 41acaa50bcf3d..20e16be900217 100644 --- a/lib/web_ui/dev/test_platform.dart +++ b/lib/web_ui/dev/test_platform.dart @@ -126,9 +126,9 @@ class BrowserPlatform extends PlatformPlugin { config.suiteDefaults.precompiledPath != null)) .add(_wrapperHandler); // Screenshot tests are only enabled in chrome for now. - //if (name == 'chrome') { + if (name == 'chrome') { cascade = cascade.add(_screeshotHandler); - //} + } } var pipeline = shelf.Pipeline() @@ -142,9 +142,9 @@ class BrowserPlatform extends PlatformPlugin { } Future _screeshotHandler(shelf.Request request) async { - // if (browserName != 'chrome') { - // throw Exception('Screenshots tests are only available in Chrome.'); - // } + if (browserName != 'chrome') { + throw Exception('Screenshots tests are only available in Chrome.'); + } if (!request.requestedUri.path.endsWith('/screenshot')) { return shelf.Response.notFound( From f0ca4c7c79c12826b9fab3efb54f926310015735 Mon Sep 17 00:00:00 2001 From: nturgut Date: Tue, 23 Jun 2020 14:21:42 -0700 Subject: [PATCH 7/7] apply reviewers suggestion for skipping tests --- .../test/engine/pointer_binding_test.dart | 120 ++++++++---------- 1 file changed, 52 insertions(+), 68 deletions(-) diff --git a/lib/web_ui/test/engine/pointer_binding_test.dart b/lib/web_ui/test/engine/pointer_binding_test.dart index 537b043c87abe..5f6ac793c38ff 100644 --- a/lib/web_ui/test/engine/pointer_binding_test.dart +++ b/lib/web_ui/test/engine/pointer_binding_test.dart @@ -18,40 +18,24 @@ List _allPointerData(List packets) { return packets.expand((ui.PointerDataPacket packet) => packet.data).toList(); } -/// Helper class for encapsulating test skip information with test `context`. -/// -/// Some tests should be skipped depending on the browser and the OS. This class -/// is used for combining [shouldSkip] information with the `context`. -/// See: [_PointerEventContext] [_MouseEventContext] [_TouchEventContext]. -/// TODO: https://github.com/flutter/flutter/issues/60033 -class _BrowserUnitTestContext { - /// Should this test be skipped. - final bool shouldSkip; - - /// Implementation of [_BasicEventContext]. - /// - /// See: [_PointerEventContext] [_MouseEventContext] [_TouchEventContext]. - final T testContext; - - _BrowserUnitTestContext(this.testContext, {this.shouldSkip = false}); -} - typedef _ContextTestBody = void Function(T); void _testEach( - Iterable<_BrowserUnitTestContext> contexts, + Iterable contexts, String description, _ContextTestBody body, ) { - for (_BrowserUnitTestContext context in contexts) { - if (context.testContext.isSupported) { - test('${context.testContext.name} $description', () { - body(context.testContext); - }, skip: context.shouldSkip); + for (T context in contexts) { + if (context.isSupported) { + test('${context.name} $description', () { + body(context); + }); } } } +/// Some methods in this class are skipped for iOS-Safari. +/// TODO: https://github.com/flutter/flutter/issues/60033 bool get isIosSafari => (browserEngine == BrowserEngine.webkit && operatingSystem == OperatingSystem.iOs); @@ -415,9 +399,9 @@ void main() { _testEach<_BasicEventContext>( [ - _BrowserUnitTestContext(_PointerEventContext()), - _BrowserUnitTestContext(_MouseEventContext()), - _BrowserUnitTestContext(_TouchEventContext()) + _PointerEventContext(), + _MouseEventContext(), + _TouchEventContext(), ], 'can receive pointer events on the glass pane', (_BasicEventContext context) { @@ -436,9 +420,9 @@ void main() { _testEach<_BasicEventContext>( [ - _BrowserUnitTestContext(_PointerEventContext()), - _BrowserUnitTestContext(_MouseEventContext()), - _BrowserUnitTestContext(_TouchEventContext()) + _PointerEventContext(), + _MouseEventContext(), + _TouchEventContext(), ], 'does create an add event if got a pointerdown', (_BasicEventContext context) { @@ -460,8 +444,8 @@ void main() { _testEach<_ButtonedEventMixin>( [ - _BrowserUnitTestContext(_PointerEventContext(), shouldSkip: isIosSafari), - _BrowserUnitTestContext(_MouseEventContext(), shouldSkip: isIosSafari), + if (!isIosSafari) _PointerEventContext(), + if (!isIosSafari) _MouseEventContext(), ], 'correctly detects events on the semantics placeholder', (_ButtonedEventMixin context) { @@ -534,8 +518,8 @@ void main() { _testEach<_ButtonedEventMixin>( [ - _BrowserUnitTestContext(_PointerEventContext()), - _BrowserUnitTestContext(_MouseEventContext()), + _PointerEventContext(), + _MouseEventContext(), ], 'creates an add event if the first pointer activity is a hover', (_ButtonedEventMixin context) { @@ -558,8 +542,8 @@ void main() { _testEach<_ButtonedEventMixin>( [ - _BrowserUnitTestContext(_PointerEventContext()), - _BrowserUnitTestContext(_MouseEventContext()), + _PointerEventContext(), + _MouseEventContext(), ], 'sends a pointermove event instead of the second pointerdown in a row', (_ButtonedEventMixin context) { @@ -595,8 +579,8 @@ void main() { _testEach<_ButtonedEventMixin>( [ - _BrowserUnitTestContext(_PointerEventContext(), shouldSkip: isIosSafari), - _BrowserUnitTestContext(_MouseEventContext(), shouldSkip: isIosSafari), + if (!isIosSafari) _PointerEventContext(), + if (!isIosSafari) _MouseEventContext(), ], 'does synthesize add or hover or move for scroll', (_ButtonedEventMixin context) { @@ -717,8 +701,8 @@ void main() { _testEach<_ButtonedEventMixin>( [ - _BrowserUnitTestContext(_PointerEventContext(), shouldSkip: isIosSafari), - _BrowserUnitTestContext(_MouseEventContext(), shouldSkip: isIosSafari), + if (!isIosSafari) _PointerEventContext(), + if (!isIosSafari) _MouseEventContext() ], 'does calculate delta and pointer identifier correctly', (_ButtonedEventMixin context) { @@ -845,8 +829,8 @@ void main() { _testEach<_ButtonedEventMixin>( [ - _BrowserUnitTestContext(_PointerEventContext(), shouldSkip: isIosSafari), - _BrowserUnitTestContext(_MouseEventContext(), shouldSkip: isIosSafari), + if (!isIosSafari) _PointerEventContext(), + if (!isIosSafari) _MouseEventContext(), ], 'correctly converts buttons of down, move and up events', (_ButtonedEventMixin context) { @@ -1015,8 +999,8 @@ void main() { _testEach<_ButtonedEventMixin>( [ - _BrowserUnitTestContext(_PointerEventContext()), - _BrowserUnitTestContext(_MouseEventContext()), + _PointerEventContext(), + _MouseEventContext(), ], 'correctly handles button changes during a down sequence', (_ButtonedEventMixin context) { @@ -1080,8 +1064,8 @@ void main() { _testEach<_ButtonedEventMixin>( [ - _BrowserUnitTestContext(_PointerEventContext(), shouldSkip: isIosSafari), - _BrowserUnitTestContext(_MouseEventContext(), shouldSkip: isIosSafari), + if (!isIosSafari) _PointerEventContext(), + if (!isIosSafari) _MouseEventContext(), ], 'synthesizes a pointerup event when pointermove comes before the up', (_ButtonedEventMixin context) { @@ -1163,8 +1147,8 @@ void main() { _testEach<_ButtonedEventMixin>( [ - _BrowserUnitTestContext(_PointerEventContext()), - _BrowserUnitTestContext(_MouseEventContext()), + _PointerEventContext(), + _MouseEventContext(), ], 'correctly handles uncontinuous button changes during a down sequence', (_ButtonedEventMixin context) { @@ -1236,8 +1220,8 @@ void main() { _testEach<_ButtonedEventMixin>( [ - _BrowserUnitTestContext(_PointerEventContext()), - _BrowserUnitTestContext(_MouseEventContext()), + _PointerEventContext(), + _MouseEventContext(), ], 'handles RMB click when the browser sends it as a move', (_ButtonedEventMixin context) { @@ -1272,8 +1256,8 @@ void main() { _testEach<_ButtonedEventMixin>( [ - _BrowserUnitTestContext(_PointerEventContext()), - _BrowserUnitTestContext(_MouseEventContext()), + _PointerEventContext(), + _MouseEventContext(), ], 'correctly handles hover after RMB click', (_ButtonedEventMixin context) { @@ -1323,8 +1307,8 @@ void main() { _testEach<_ButtonedEventMixin>( [ - _BrowserUnitTestContext(_PointerEventContext()), - _BrowserUnitTestContext(_MouseEventContext()), + _PointerEventContext(), + _MouseEventContext(), ], 'correctly handles LMB click after RMB click', (_ButtonedEventMixin context) { @@ -1392,8 +1376,8 @@ void main() { _testEach<_ButtonedEventMixin>( [ - _BrowserUnitTestContext(_PointerEventContext()), - _BrowserUnitTestContext(_MouseEventContext()), + _PointerEventContext(), + _MouseEventContext(), ], 'correctly handles two consecutive RMB clicks with no up in between', (_ButtonedEventMixin context) { @@ -1457,8 +1441,8 @@ void main() { _testEach<_ButtonedEventMixin>( [ - _BrowserUnitTestContext(_PointerEventContext()), - _BrowserUnitTestContext(_MouseEventContext()), + _PointerEventContext(), + _MouseEventContext(), ], 'correctly handles two consecutive RMB clicks with up in between', (_ButtonedEventMixin context) { @@ -1540,8 +1524,8 @@ void main() { _testEach<_ButtonedEventMixin>( [ - _BrowserUnitTestContext(_PointerEventContext()), - _BrowserUnitTestContext(_MouseEventContext()), + _PointerEventContext(), + _MouseEventContext(), ], 'correctly handles two consecutive RMB clicks in two different locations', (_ButtonedEventMixin context) { @@ -1610,8 +1594,8 @@ void main() { _testEach<_ButtonedEventMixin>( [ - _BrowserUnitTestContext(_PointerEventContext(), shouldSkip: true), - _BrowserUnitTestContext(_MouseEventContext(), shouldSkip: true), + if (!isIosSafari) _PointerEventContext(), + if (!isIosSafari) _MouseEventContext(), ], 'correctly detects up event outside of glasspane', (_ButtonedEventMixin context) { @@ -1676,8 +1660,8 @@ void main() { _testEach<_MultiPointerEventMixin>( [ - _BrowserUnitTestContext(_PointerEventContext(), shouldSkip: true), - _BrowserUnitTestContext(_TouchEventContext(), shouldSkip: true), + if (!isIosSafari) _PointerEventContext(), + if (!isIosSafari) _TouchEventContext(), ], 'treats each pointer separately', (_MultiPointerEventMixin context) { @@ -1867,8 +1851,8 @@ void main() { _testEach<_MultiPointerEventMixin>( [ - _BrowserUnitTestContext(_PointerEventContext(), shouldSkip: true), - _BrowserUnitTestContext(_TouchEventContext(), shouldSkip: true), + if (!isIosSafari) _PointerEventContext(), + if (!isIosSafari) _TouchEventContext(), ], 'correctly parses cancel event', (_MultiPointerEventMixin context) { @@ -1914,7 +1898,7 @@ void main() { _testEach<_PointerEventContext>( [ - _BrowserUnitTestContext(_PointerEventContext()), + if (!isIosSafari) _PointerEventContext(), ], 'does not synthesize pointer up if from different device', (_PointerEventContext context) { @@ -1956,7 +1940,7 @@ void main() { _testEach( [ - _BrowserUnitTestContext(_TouchEventContext(), shouldSkip: true), + if (!isIosSafari) _TouchEventContext(), ], 'does calculate delta and pointer identifier correctly', (_TouchEventContext context) {