long_press_test.dart 4.22 KB
Newer Older
Ian Hickson's avatar
Ian Hickson committed
1 2 3 4
// Copyright 2015 The Chromium Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.

5
import 'package:flutter/gestures.dart';
6 7
import 'package:test/test.dart';

8 9
import 'gesture_tester.dart';

Ian Hickson's avatar
Ian Hickson committed
10
const PointerDownEvent down = const PointerDownEvent(
11
  pointer: 5,
12
  position: const Offset(10.0, 10.0)
13 14
);

Ian Hickson's avatar
Ian Hickson committed
15
const PointerUpEvent up = const PointerUpEvent(
16
  pointer: 5,
17
  position: const Offset(11.0, 9.0)
18 19 20
);

void main() {
21
  setUp(ensureGestureBinding);
22

23
  testGesture('Should recognize long press', (GestureTester tester) {
24
    final LongPressGestureRecognizer longPress = new LongPressGestureRecognizer();
25 26 27 28 29 30

    bool longPressRecognized = false;
    longPress.onLongPress = () {
      longPressRecognized = true;
    };

31 32 33 34 35 36 37 38 39
    longPress.addPointer(down);
    tester.closeArena(5);
    expect(longPressRecognized, isFalse);
    tester.route(down);
    expect(longPressRecognized, isFalse);
    tester.async.elapse(const Duration(milliseconds: 300));
    expect(longPressRecognized, isFalse);
    tester.async.elapse(const Duration(milliseconds: 700));
    expect(longPressRecognized, isTrue);
40 41 42 43

    longPress.dispose();
  });

44
  testGesture('Up cancels long press', (GestureTester tester) {
45
    final LongPressGestureRecognizer longPress = new LongPressGestureRecognizer();
46 47 48 49 50 51

    bool longPressRecognized = false;
    longPress.onLongPress = () {
      longPressRecognized = true;
    };

52 53 54 55 56 57 58 59 60 61 62
    longPress.addPointer(down);
    tester.closeArena(5);
    expect(longPressRecognized, isFalse);
    tester.route(down);
    expect(longPressRecognized, isFalse);
    tester.async.elapse(const Duration(milliseconds: 300));
    expect(longPressRecognized, isFalse);
    tester.route(up);
    expect(longPressRecognized, isFalse);
    tester.async.elapse(const Duration(seconds: 1));
    expect(longPressRecognized, isFalse);
63 64 65 66

    longPress.dispose();
  });

67
  testGesture('Should recognize both tap down and long press', (GestureTester tester) {
68 69
    final LongPressGestureRecognizer longPress = new LongPressGestureRecognizer();
    final TapGestureRecognizer tap = new TapGestureRecognizer();
70

Hixie's avatar
Hixie committed
71 72 73
    bool tapDownRecognized = false;
    tap.onTapDown = (_) {
      tapDownRecognized = true;
74 75 76 77 78 79 80
    };

    bool longPressRecognized = false;
    longPress.onLongPress = () {
      longPressRecognized = true;
    };

81 82 83 84 85 86 87 88 89 90 91 92 93 94
    tap.addPointer(down);
    longPress.addPointer(down);
    tester.closeArena(5);
    expect(tapDownRecognized, isFalse);
    expect(longPressRecognized, isFalse);
    tester.route(down);
    expect(tapDownRecognized, isFalse);
    expect(longPressRecognized, isFalse);
    tester.async.elapse(const Duration(milliseconds: 300));
    expect(tapDownRecognized, isTrue);
    expect(longPressRecognized, isFalse);
    tester.async.elapse(const Duration(milliseconds: 700));
    expect(tapDownRecognized, isTrue);
    expect(longPressRecognized, isTrue);
95

Hixie's avatar
Hixie committed
96
    tap.dispose();
97 98
    longPress.dispose();
  });
99 100

  testGesture('Drag start delayed by microtask', (GestureTester tester) {
101 102
    final LongPressGestureRecognizer longPress = new LongPressGestureRecognizer();
    final HorizontalDragGestureRecognizer drag = new HorizontalDragGestureRecognizer();
103 104 105 106

    bool isDangerousStack = false;

    bool dragStartRecognized = false;
107
    drag.onStart = (DragStartDetails details) {
108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139
      expect(isDangerousStack, isFalse);
      dragStartRecognized = true;
    };

    bool longPressRecognized = false;
    longPress.onLongPress = () {
      expect(isDangerousStack, isFalse);
      longPressRecognized = true;
    };

    drag.addPointer(down);
    longPress.addPointer(down);
    tester.closeArena(5);
    expect(dragStartRecognized, isFalse);
    expect(longPressRecognized, isFalse);
    tester.route(down);
    expect(dragStartRecognized, isFalse);
    expect(longPressRecognized, isFalse);
    tester.async.elapse(const Duration(milliseconds: 300));
    expect(dragStartRecognized, isFalse);
    expect(longPressRecognized, isFalse);
    isDangerousStack = true;
    longPress.dispose();
    isDangerousStack = false;
    expect(dragStartRecognized, isFalse);
    expect(longPressRecognized, isFalse);
    tester.async.flushMicrotasks();
    expect(dragStartRecognized, isTrue);
    expect(longPressRecognized, isFalse);
    drag.dispose();
  });

140
}