arena_test.dart 4.86 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
import 'package:flutter_test/flutter_test.dart';
Adam Barth's avatar
Adam Barth committed
7

Hixie's avatar
Hixie committed
8 9
const int primaryKey = 4;

Adam Barth's avatar
Adam Barth committed
10
class TestGestureArenaMember extends GestureArenaMember {
Hixie's avatar
Hixie committed
11
  bool acceptRan = false;
12 13

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

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

Hixie's avatar
Hixie committed
27
class GestureTester {
28 29 30
  GestureArenaManager arena = GestureArenaManager();
  TestGestureArenaMember first = TestGestureArenaMember();
  TestGestureArenaMember second = TestGestureArenaMember();
Adam Barth's avatar
Adam Barth committed
31

32
  late GestureArenaEntry firstEntry;
Hixie's avatar
Hixie committed
33 34
  void addFirst() {
    firstEntry = arena.add(primaryKey, first);
Adam Barth's avatar
Adam Barth committed
35 36
  }

37
  late GestureArenaEntry secondEntry;
Hixie's avatar
Hixie committed
38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60
  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
61 62 63 64 65
  }
}

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

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

  test('Should win on release after hold sweep release', () {
86
    final GestureTester tester = GestureTester();
Hixie's avatar
Hixie committed
87 88 89 90 91 92 93 94 95 96
    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();
97 98 99
  });

  test('Should win on sweep after hold release sweep', () {
100
    final GestureTester tester = GestureTester();
Hixie's avatar
Hixie committed
101 102 103 104 105 106 107 108 109 110 111 112 113
    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', () {
114
    final GestureTester tester = GestureTester();
Hixie's avatar
Hixie committed
115 116 117 118 119 120 121 122 123 124
    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', () {
125
    final GestureTester tester = GestureTester();
Hixie's avatar
Hixie committed
126 127 128 129 130 131 132 133 134 135
    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', () {
136
    final GestureTester tester = GestureTester();
Hixie's avatar
Hixie committed
137 138 139 140 141 142 143 144 145 146
    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', () {
147
    final GestureTester tester = GestureTester();
Hixie's avatar
Hixie committed
148 149 150 151 152 153 154 155 156 157 158
    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', () {
159
    final GestureTester tester = GestureTester();
Hixie's avatar
Hixie committed
160 161 162 163 164 165 166 167
    tester.addFirst();
    tester.addSecond();
    tester.expectNothing();
    tester.secondEntry.resolve(GestureDisposition.accepted);
    tester.firstEntry.resolve(GestureDisposition.accepted);
    tester.expectNothing();
    tester.arena.close(primaryKey);
    tester.expectSecondWin();
168
  });
Adam Barth's avatar
Adam Barth committed
169
}