Adam Barth 51b1550df7 Delay win-by-default in gesture arena (#3552)
Wait until the end of the microtask to tell gesture recognizers that
they've won in the gesture arena. This lets recognizers dispose reject
themselves at arbitrary times without triggering gestures in awkward
call stacks.

Fixes #3183
2016-04-26 14:52:31 -07:00

42 lines
1.1 KiB
Dart

// 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.
import 'package:flutter/foundation.dart';
import 'package:flutter/gestures.dart';
import 'package:test/test.dart';
import 'package:quiver/testing/async.dart';
class TestGestureFlutterBinding extends BindingBase with GestureBinding { }
void ensureGestureBinding() {
if (GestureBinding.instance == null)
new TestGestureFlutterBinding();
assert(GestureBinding.instance != null);
}
class GestureTester {
GestureTester._(this.async);
final FakeAsync async;
void closeArena(int pointer) {
GestureBinding.instance.gestureArena.close(pointer);
}
void route(PointerEvent event) {
GestureBinding.instance.pointerRouter.route(event);
async.flushMicrotasks();
}
}
typedef void GestureTest(GestureTester tester);
void testGesture(String description, GestureTest callback) {
test(description, () {
new FakeAsync().run((FakeAsync async) {
callback(new GestureTester._(async));
});
});
}