import 'package:sky/widgets.dart'; import 'package:test/test.dart'; import '../engine/mock_events.dart'; import 'widget_tester.dart'; void main() { test('Uncontested scrolls start immediately', () { WidgetTester tester = new WidgetTester(); TestPointer pointer = new TestPointer(7); bool didStartDrag = false; double updatedDragDelta; bool didEndDrag = false; Widget builder() { return new GestureDetector( onVerticalDragStart: () { didStartDrag = true; }, onVerticalDragUpdate: (double scrollDelta) { updatedDragDelta = scrollDelta; }, onVerticalDragEnd: (Offset velocity) { didEndDrag = true; }, child: new Container() ); } tester.pumpFrame(builder); expect(didStartDrag, isFalse); expect(updatedDragDelta, isNull); expect(didEndDrag, isFalse); Point firstLocation = new Point(10.0, 10.0); tester.dispatchEvent(pointer.down(firstLocation), firstLocation); expect(didStartDrag, isTrue); didStartDrag = false; expect(updatedDragDelta, isNull); expect(didEndDrag, isFalse); Point secondLocation = new Point(10.0, 9.0); tester.dispatchEvent(pointer.move(secondLocation), firstLocation); expect(didStartDrag, isFalse); expect(updatedDragDelta, 1.0); updatedDragDelta = null; expect(didEndDrag, isFalse); tester.dispatchEvent(pointer.up(), firstLocation); expect(didStartDrag, isFalse); expect(updatedDragDelta, isNull); expect(didEndDrag, isTrue); didEndDrag = false; tester.pumpFrame(() => new Container()); }); test('Match two scroll gestures in succession', () { WidgetTester tester = new WidgetTester(); TestPointer pointer = new TestPointer(7); int gestureCount = 0; double dragDistance = 0.0; Point downLocation = new Point(10.0, 10.0); Point upLocation = new Point(10.0, 20.0); Widget builder() { return new GestureDetector( onVerticalDragUpdate: (double delta) { dragDistance += delta; }, onVerticalDragEnd: (Offset velocity) { gestureCount += 1; }, onHorizontalDragUpdate: (_) { fail("gesture should not match"); }, onHorizontalDragEnd: (Offset velocity) { fail("gesture should not match"); }, child: new Container() ); } tester.pumpFrame(builder); tester.dispatchEvent(pointer.down(downLocation), downLocation); tester.dispatchEvent(pointer.move(upLocation), downLocation); tester.dispatchEvent(pointer.up(), downLocation); tester.dispatchEvent(pointer.down(downLocation), downLocation); tester.dispatchEvent(pointer.move(upLocation), downLocation); tester.dispatchEvent(pointer.up(), downLocation); expect(gestureCount, 2); expect(dragDistance, -20.0); }); }