From aaee3b93da69055cffdc87d511ca1c7febecd2db Mon Sep 17 00:00:00 2001 From: Hixie Date: Thu, 5 Nov 2015 15:58:53 -0800 Subject: [PATCH] Add more Gesture Arena tests ...and clean them up so it's easier to understand them. --- packages/unit/test/gestures/arena_test.dart | 344 ++++++++------------ 1 file changed, 133 insertions(+), 211 deletions(-) diff --git a/packages/unit/test/gestures/arena_test.dart b/packages/unit/test/gestures/arena_test.dart index 4f0d062fd6..a5b59f7746 100644 --- a/packages/unit/test/gestures/arena_test.dart +++ b/packages/unit/test/gestures/arena_test.dart @@ -3,239 +3,161 @@ import 'package:test/test.dart'; typedef void GestureArenaCallback(Object key); +const int primaryKey = 4; + class TestGestureArenaMember extends GestureArenaMember { - TestGestureArenaMember({ this.onAcceptGesture, this.onRejectGesture }); - - final GestureArenaCallback onAcceptGesture; - final GestureArenaCallback onRejectGesture; - + bool acceptRan = false; void acceptGesture(Object key) { - onAcceptGesture(key); + expect(key, equals(primaryKey)); + acceptRan = true; + } + bool rejectRan = false; + void rejectGesture(Object key) { + expect(key, equals(primaryKey)); + rejectRan = true; + } +} + +class GestureTester { + GestureArena arena = new GestureArena(); + TestGestureArenaMember first = new TestGestureArenaMember(); + TestGestureArenaMember second = new TestGestureArenaMember(); + + GestureArenaEntry firstEntry; + void addFirst() { + firstEntry = arena.add(primaryKey, first); } - void rejectGesture(Object key) { - onRejectGesture(key); + 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); } } void main() { test('Should win by accepting', () { - GestureArena arena = new GestureArena(); - - int primaryKey = 4; - bool firstAcceptRan = false; - bool firstRejectRan = false; - bool secondAcceptRan = false; - bool secondRejectRan = false; - - TestGestureArenaMember first = new TestGestureArenaMember( - onAcceptGesture: (int key) { - expect(key, equals(primaryKey)); - firstAcceptRan = true; - }, - onRejectGesture: (int key) { - expect(key, equals(primaryKey)); - firstRejectRan = true; - } - ); - - TestGestureArenaMember second = new TestGestureArenaMember( - onAcceptGesture: (int key) { - expect(key, equals(primaryKey)); - secondAcceptRan = true; - }, - onRejectGesture: (int key) { - expect(key, equals(primaryKey)); - secondRejectRan = true; - } - ); - - GestureArenaEntry firstEntry = arena.add(primaryKey, first); - arena.add(primaryKey, second); - arena.close(primaryKey); - - expect(firstAcceptRan, isFalse); - expect(firstRejectRan, isFalse); - expect(secondAcceptRan, isFalse); - expect(secondRejectRan, isFalse); - - firstEntry.resolve(GestureDisposition.accepted); - - expect(firstAcceptRan, isTrue); - expect(firstRejectRan, isFalse); - expect(secondAcceptRan, isFalse); - expect(secondRejectRan, isTrue); + GestureTester tester = new GestureTester(); + tester.addFirst(); + tester.addSecond(); + tester.arena.close(primaryKey); + tester.expectNothing(); + tester.firstEntry.resolve(GestureDisposition.accepted); + tester.expectFirstWin(); }); test('Should win by sweep', () { - GestureArena arena = new GestureArena(); - - int primaryKey = 4; - bool firstAcceptRan = false; - bool firstRejectRan = false; - bool secondAcceptRan = false; - bool secondRejectRan = false; - - TestGestureArenaMember first = new TestGestureArenaMember( - onAcceptGesture: (int key) { - expect(key, equals(primaryKey)); - firstAcceptRan = true; - }, - onRejectGesture: (int key) { - expect(key, equals(primaryKey)); - firstRejectRan = true; - } - ); - - TestGestureArenaMember second = new TestGestureArenaMember( - onAcceptGesture: (int key) { - expect(key, equals(primaryKey)); - secondAcceptRan = true; - }, - onRejectGesture: (int key) { - expect(key, equals(primaryKey)); - secondRejectRan = true; - } - ); - - arena.add(primaryKey, first); - arena.add(primaryKey, second); - arena.close(primaryKey); - - expect(firstAcceptRan, isFalse); - expect(firstRejectRan, isFalse); - expect(secondAcceptRan, isFalse); - expect(secondRejectRan, isFalse); - - arena.sweep(primaryKey); - - expect(firstAcceptRan, isTrue); - expect(firstRejectRan, isFalse); - expect(secondAcceptRan, isFalse); - expect(secondRejectRan, isTrue); + GestureTester tester = new GestureTester(); + tester.addFirst(); + tester.addSecond(); + tester.arena.close(primaryKey); + tester.expectNothing(); + tester.arena.sweep(primaryKey); + tester.expectFirstWin(); }); test('Should win on release after hold sweep release', () { - GestureArena arena = new GestureArena(); - - int primaryKey = 4; - bool firstAcceptRan = false; - bool firstRejectRan = false; - bool secondAcceptRan = false; - bool secondRejectRan = false; - - TestGestureArenaMember first = new TestGestureArenaMember( - onAcceptGesture: (int key) { - expect(key, equals(primaryKey)); - firstAcceptRan = true; - }, - onRejectGesture: (int key) { - expect(key, equals(primaryKey)); - firstRejectRan = true; - } - ); - - TestGestureArenaMember second = new TestGestureArenaMember( - onAcceptGesture: (int key) { - expect(key, equals(primaryKey)); - secondAcceptRan = true; - }, - onRejectGesture: (int key) { - expect(key, equals(primaryKey)); - secondRejectRan = true; - } - ); - - arena.add(primaryKey, first); - arena.add(primaryKey, second); - arena.close(primaryKey); - - expect(firstAcceptRan, isFalse); - expect(firstRejectRan, isFalse); - expect(secondAcceptRan, isFalse); - expect(secondRejectRan, isFalse); - - arena.hold(primaryKey); - - expect(firstAcceptRan, isFalse); - expect(firstRejectRan, isFalse); - expect(secondAcceptRan, isFalse); - expect(secondRejectRan, isFalse); - - arena.sweep(primaryKey); - - expect(firstAcceptRan, isFalse); - expect(firstRejectRan, isFalse); - expect(secondAcceptRan, isFalse); - expect(secondRejectRan, isFalse); - - arena.release(primaryKey); - - expect(firstAcceptRan, isTrue); - expect(firstRejectRan, isFalse); - expect(secondAcceptRan, isFalse); - expect(secondRejectRan, isTrue); + GestureTester tester = new GestureTester(); + 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(); }); test('Should win on sweep after hold release sweep', () { - GestureArena arena = new GestureArena(); + GestureTester tester = new GestureTester(); + 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(); + }); - int primaryKey = 4; - bool firstAcceptRan = false; - bool firstRejectRan = false; - bool secondAcceptRan = false; - bool secondRejectRan = false; + test('Only first winner should win', () { + GestureTester tester = new GestureTester(); + tester.addFirst(); + tester.addSecond(); + tester.arena.close(primaryKey); + tester.expectNothing(); + tester.firstEntry.resolve(GestureDisposition.accepted); + tester.secondEntry.resolve(GestureDisposition.accepted); + tester.expectFirstWin(); + }); - TestGestureArenaMember first = new TestGestureArenaMember( - onAcceptGesture: (int key) { - expect(key, equals(primaryKey)); - firstAcceptRan = true; - }, - onRejectGesture: (int key) { - expect(key, equals(primaryKey)); - firstRejectRan = true; - } - ); + test('Only first winner should win, regardless of order', () { + GestureTester tester = new GestureTester(); + tester.addFirst(); + tester.addSecond(); + tester.arena.close(primaryKey); + tester.expectNothing(); + tester.secondEntry.resolve(GestureDisposition.accepted); + tester.firstEntry.resolve(GestureDisposition.accepted); + tester.expectSecondWin(); + }); - TestGestureArenaMember second = new TestGestureArenaMember( - onAcceptGesture: (int key) { - expect(key, equals(primaryKey)); - secondAcceptRan = true; - }, - onRejectGesture: (int key) { - expect(key, equals(primaryKey)); - secondRejectRan = true; - } - ); + test('Win before close is delayed to close', () { + GestureTester tester = new GestureTester(); + tester.addFirst(); + tester.addSecond(); + tester.expectNothing(); + tester.firstEntry.resolve(GestureDisposition.accepted); + tester.expectNothing(); + tester.arena.close(primaryKey); + tester.expectFirstWin(); + }); - arena.add(primaryKey, first); - arena.add(primaryKey, second); - arena.close(primaryKey); + test('Win before close is delayed to close, and only first winner should win', () { + GestureTester tester = new GestureTester(); + tester.addFirst(); + tester.addSecond(); + tester.expectNothing(); + tester.firstEntry.resolve(GestureDisposition.accepted); + tester.secondEntry.resolve(GestureDisposition.accepted); + tester.expectNothing(); + tester.arena.close(primaryKey); + tester.expectFirstWin(); + }); - expect(firstAcceptRan, isFalse); - expect(firstRejectRan, isFalse); - expect(secondAcceptRan, isFalse); - expect(secondRejectRan, isFalse); - - arena.hold(primaryKey); - - expect(firstAcceptRan, isFalse); - expect(firstRejectRan, isFalse); - expect(secondAcceptRan, isFalse); - expect(secondRejectRan, isFalse); - - arena.release(primaryKey); - - expect(firstAcceptRan, isFalse); - expect(firstRejectRan, isFalse); - expect(secondAcceptRan, isFalse); - expect(secondRejectRan, isFalse); - - arena.sweep(primaryKey); - - expect(firstAcceptRan, isTrue); - expect(firstRejectRan, isFalse); - expect(secondAcceptRan, isFalse); - expect(secondRejectRan, isTrue); + test('Win before close is delayed to close, and only first winner should win, regardless of order', () { + GestureTester tester = new GestureTester(); + tester.addFirst(); + tester.addSecond(); + tester.expectNothing(); + tester.secondEntry.resolve(GestureDisposition.accepted); + tester.firstEntry.resolve(GestureDisposition.accepted); + tester.expectNothing(); + tester.arena.close(primaryKey); + tester.expectSecondWin(); }); }