mirror of
https://github.com/alibaba/flutter-go.git
synced 2025-07-15 03:04:25 +08:00
63 lines
1.8 KiB
Dart
63 lines
1.8 KiB
Dart
// Copyright 2017 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 'dart:async';
|
|
import 'package:flutter_web_ui/ui.dart' as ui;
|
|
|
|
import 'package:flutter_web/foundation.dart';
|
|
import 'package:flutter_web/gestures.dart';
|
|
|
|
import '../flutter_test_alternative.dart';
|
|
|
|
typedef HandleEventCallback = void Function(PointerEvent event);
|
|
|
|
class TestGestureFlutterBinding extends BindingBase with GestureBinding {
|
|
HandleEventCallback callback;
|
|
|
|
@override
|
|
void handleEvent(PointerEvent event, HitTestEntry entry) {
|
|
if (callback != null) callback(event);
|
|
super.handleEvent(event, entry);
|
|
}
|
|
|
|
static const ui.PointerDataPacket packet =
|
|
ui.PointerDataPacket(data: <ui.PointerData>[
|
|
ui.PointerData(change: ui.PointerChange.down),
|
|
ui.PointerData(change: ui.PointerChange.up),
|
|
]);
|
|
|
|
Future<void> test(VoidCallback callback) {
|
|
assert(callback != null);
|
|
return _binding.lockEvents(() async {
|
|
ui.window.onPointerDataPacket(packet);
|
|
callback();
|
|
});
|
|
}
|
|
}
|
|
|
|
TestGestureFlutterBinding _binding = TestGestureFlutterBinding();
|
|
|
|
void ensureTestGestureBinding() {
|
|
_binding ??= TestGestureFlutterBinding();
|
|
assert(GestureBinding.instance != null);
|
|
}
|
|
|
|
void main() {
|
|
setUp(ensureTestGestureBinding);
|
|
|
|
test('Pointer events are locked during reassemble', () async {
|
|
final List<PointerEvent> events = <PointerEvent>[];
|
|
_binding.callback = events.add;
|
|
bool tested = false;
|
|
await _binding.test(() {
|
|
expect(events.length, 0);
|
|
tested = true;
|
|
});
|
|
expect(tested, isTrue);
|
|
expect(events.length, 2);
|
|
expect(events[0].runtimeType, equals(PointerDownEvent));
|
|
expect(events[1].runtimeType, equals(PointerUpEvent));
|
|
});
|
|
}
|