flutter/packages/unit/test/widget/gesture_detector_test.dart
2015-10-09 20:44:52 -07:00

126 lines
3.6 KiB
Dart

import 'package:flutter/widgets.dart';
import 'package:test/test.dart';
import '../engine/mock_events.dart';
import 'widget_tester.dart';
void main() {
test('Uncontested scrolls start immediately', () {
testWidgets((WidgetTester tester) {
TestPointer pointer = new TestPointer(7);
bool didStartDrag = false;
double updatedDragDelta;
bool didEndDrag = false;
Widget widget = new GestureDetector(
onVerticalDragStart: () {
didStartDrag = true;
},
onVerticalDragUpdate: (double scrollDelta) {
updatedDragDelta = scrollDelta;
},
onVerticalDragEnd: (Offset velocity) {
didEndDrag = true;
},
child: new Container()
);
tester.pumpWidget(widget);
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.pumpWidget(new Container());
});
});
test('Match two scroll gestures in succession', () {
testWidgets((WidgetTester tester) {
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 widget = 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.pumpWidget(widget);
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);
tester.pumpWidget(new Container());
});
});
test('Pan doesn\'t crash', () {
testWidgets((WidgetTester tester) {
bool didStartPan = false;
Offset panDelta;
bool didEndPan = false;
tester.pumpWidget(
new GestureDetector(
onPanStart: () {
didStartPan = true;
},
onPanUpdate: (Offset delta) {
panDelta = delta;
},
onPanEnd: (_) {
didEndPan = true;
},
child: new Container()
)
);
expect(didStartPan, isFalse);
expect(panDelta, isNull);
expect(didEndPan, isFalse);
tester.scrollAt(new Point(10.0, 10.0), new Offset(20.0, 30.0));
expect(didStartPan, isTrue);
expect(panDelta.dx, 20.0);
expect(panDelta.dy, 30.0);
expect(didEndPan, isTrue);
});
});
}