| 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); |
| }); |
| } |