arena_test.dart 4.9 KB
Newer Older
Ian Hickson's avatar
Ian Hickson committed
1
// Copyright 2014 The Flutter Authors. All rights reserved.
Ian Hickson's avatar
Ian Hickson committed
2 3 4
// 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 '../flutter_test_alternative.dart';
Adam Barth's avatar
Adam Barth committed
8

9
typedef GestureArenaCallback = void Function(Object key);
Adam Barth's avatar
Adam Barth committed
10

Hixie's avatar
Hixie committed
11 12
const int primaryKey = 4;

Adam Barth's avatar
Adam Barth committed
13
class TestGestureArenaMember extends GestureArenaMember {
Hixie's avatar
Hixie committed
14
  bool acceptRan = false;
15 16

  @override
17
  void acceptGesture(int key) {
Hixie's avatar
Hixie committed
18 19 20 21
    expect(key, equals(primaryKey));
    acceptRan = true;
  }
  bool rejectRan = false;
22 23

  @override
24
  void rejectGesture(int key) {
Hixie's avatar
Hixie committed
25 26 27 28
    expect(key, equals(primaryKey));
    rejectRan = true;
  }
}
Adam Barth's avatar
Adam Barth committed
29

Hixie's avatar
Hixie committed
30
class GestureTester {
31 32 33
  GestureArenaManager arena = GestureArenaManager();
  TestGestureArenaMember first = TestGestureArenaMember();
  TestGestureArenaMember second = TestGestureArenaMember();
Adam Barth's avatar
Adam Barth committed
34

Hixie's avatar
Hixie committed
35 36 37
  GestureArenaEntry firstEntry;
  void addFirst() {
    firstEntry = arena.add(primaryKey, first);
Adam Barth's avatar
Adam Barth committed
38 39
  }

Hixie's avatar
Hixie committed
40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63
  GestureArenaEntry secondEntry;
  void addSecond() {
    secondEntry = arena.add(primaryKey, second);
  }

  void expectNothing() {
    expect(first.acceptRan, isFalse);
    expect(first.rejectRan, isFalse);
    expect(second.acceptRan, isFalse);
    expect(second.rejectRan, isFalse);
  }

  void expectFirstWin() {
    expect(first.acceptRan, isTrue);
    expect(first.rejectRan, isFalse);
    expect(second.acceptRan, isFalse);
    expect(second.rejectRan, isTrue);
  }

  void expectSecondWin() {
    expect(first.acceptRan, isFalse);
    expect(first.rejectRan, isTrue);
    expect(second.acceptRan, isTrue);
    expect(second.rejectRan, isFalse);
Adam Barth's avatar
Adam Barth committed
64 65 66 67 68
  }
}

void main() {
  test('Should win by accepting', () {
69
    final GestureTester tester = GestureTester();
Hixie's avatar
Hixie committed
70 71 72 73 74 75
    tester.addFirst();
    tester.addSecond();
    tester.arena.close(primaryKey);
    tester.expectNothing();
    tester.firstEntry.resolve(GestureDisposition.accepted);
    tester.expectFirstWin();
Adam Barth's avatar
Adam Barth committed
76
  });
77 78

  test('Should win by sweep', () {
79
    final GestureTester tester = GestureTester();
Hixie's avatar
Hixie committed
80 81 82 83 84 85
    tester.addFirst();
    tester.addSecond();
    tester.arena.close(primaryKey);
    tester.expectNothing();
    tester.arena.sweep(primaryKey);
    tester.expectFirstWin();
86 87 88
  });

  test('Should win on release after hold sweep release', () {
89
    final GestureTester tester = GestureTester();
Hixie's avatar
Hixie committed
90 91 92 93 94 95 96 97 98 99
    tester.addFirst();
    tester.addSecond();
    tester.arena.close(primaryKey);
    tester.expectNothing();
    tester.arena.hold(primaryKey);
    tester.expectNothing();
    tester.arena.sweep(primaryKey);
    tester.expectNothing();
    tester.arena.release(primaryKey);
    tester.expectFirstWin();
100 101 102
  });

  test('Should win on sweep after hold release sweep', () {
103
    final GestureTester tester = GestureTester();
Hixie's avatar
Hixie committed
104 105 106 107 108 109 110 111 112 113 114 115 116
    tester.addFirst();
    tester.addSecond();
    tester.arena.close(primaryKey);
    tester.expectNothing();
    tester.arena.hold(primaryKey);
    tester.expectNothing();
    tester.arena.release(primaryKey);
    tester.expectNothing();
    tester.arena.sweep(primaryKey);
    tester.expectFirstWin();
  });

  test('Only first winner should win', () {
117
    final GestureTester tester = GestureTester();
Hixie's avatar
Hixie committed
118 119 120 121 122 123 124 125 126 127
    tester.addFirst();
    tester.addSecond();
    tester.arena.close(primaryKey);
    tester.expectNothing();
    tester.firstEntry.resolve(GestureDisposition.accepted);
    tester.secondEntry.resolve(GestureDisposition.accepted);
    tester.expectFirstWin();
  });

  test('Only first winner should win, regardless of order', () {
128
    final GestureTester tester = GestureTester();
Hixie's avatar
Hixie committed
129 130 131 132 133 134 135 136 137 138
    tester.addFirst();
    tester.addSecond();
    tester.arena.close(primaryKey);
    tester.expectNothing();
    tester.secondEntry.resolve(GestureDisposition.accepted);
    tester.firstEntry.resolve(GestureDisposition.accepted);
    tester.expectSecondWin();
  });

  test('Win before close is delayed to close', () {
139
    final GestureTester tester = GestureTester();
Hixie's avatar
Hixie committed
140 141 142 143 144 145 146 147 148 149
    tester.addFirst();
    tester.addSecond();
    tester.expectNothing();
    tester.firstEntry.resolve(GestureDisposition.accepted);
    tester.expectNothing();
    tester.arena.close(primaryKey);
    tester.expectFirstWin();
  });

  test('Win before close is delayed to close, and only first winner should win', () {
150
    final GestureTester tester = GestureTester();
Hixie's avatar
Hixie committed
151 152 153 154 155 156 157 158 159 160 161
    tester.addFirst();
    tester.addSecond();
    tester.expectNothing();
    tester.firstEntry.resolve(GestureDisposition.accepted);
    tester.secondEntry.resolve(GestureDisposition.accepted);
    tester.expectNothing();
    tester.arena.close(primaryKey);
    tester.expectFirstWin();
  });

  test('Win before close is delayed to close, and only first winner should win, regardless of order', () {
162
    final GestureTester tester = GestureTester();
Hixie's avatar
Hixie committed
163 164 165 166 167 168 169 170
    tester.addFirst();
    tester.addSecond();
    tester.expectNothing();
    tester.secondEntry.resolve(GestureDisposition.accepted);
    tester.firstEntry.resolve(GestureDisposition.accepted);
    tester.expectNothing();
    tester.arena.close(primaryKey);
    tester.expectSecondWin();
171
  });
Adam Barth's avatar
Adam Barth committed
172
}