mirror of
https://github.com/flutter/flutter.git
synced 2026-02-20 02:29:02 +08:00
Now dart:ui does the decoding of the pointer data itself, which means we don't need to do it in the framework.
136 lines
4.2 KiB
Dart
136 lines
4.2 KiB
Dart
// Copyright 2016 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:ui' as ui;
|
|
|
|
import 'package:flutter/foundation.dart';
|
|
import 'package:flutter/gestures.dart';
|
|
import 'package:test/test.dart';
|
|
|
|
typedef void HandleEventCallback(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);
|
|
}
|
|
}
|
|
|
|
TestGestureFlutterBinding _binding = new TestGestureFlutterBinding();
|
|
|
|
void ensureTestGestureBinding() {
|
|
if (_binding == null)
|
|
_binding = new TestGestureFlutterBinding();
|
|
assert(GestureBinding.instance != null);
|
|
}
|
|
|
|
void main() {
|
|
setUp(ensureTestGestureBinding);
|
|
|
|
test('Pointer tap events', () {
|
|
ui.PointerDataPacket packet = new ui.PointerDataPacket(
|
|
pointers: <ui.PointerData>[
|
|
new ui.PointerData(change: ui.PointerChange.down),
|
|
new ui.PointerData(change: ui.PointerChange.up),
|
|
]
|
|
);
|
|
|
|
List<PointerEvent> events = <PointerEvent>[];
|
|
_binding.callback = (PointerEvent event) => events.add(event);
|
|
|
|
ui.window.onPointerDataPacket(packet);
|
|
expect(events.length, 2);
|
|
expect(events[0].runtimeType, equals(PointerDownEvent));
|
|
expect(events[1].runtimeType, equals(PointerUpEvent));
|
|
});
|
|
|
|
test('Pointer move events', () {
|
|
ui.PointerDataPacket packet = new ui.PointerDataPacket(
|
|
pointers: <ui.PointerData>[
|
|
new ui.PointerData(change: ui.PointerChange.down),
|
|
new ui.PointerData(change: ui.PointerChange.move),
|
|
new ui.PointerData(change: ui.PointerChange.up),
|
|
]
|
|
);
|
|
|
|
List<PointerEvent> events = <PointerEvent>[];
|
|
_binding.callback = (PointerEvent event) => events.add(event);
|
|
|
|
ui.window.onPointerDataPacket(packet);
|
|
expect(events.length, 3);
|
|
expect(events[0].runtimeType, equals(PointerDownEvent));
|
|
expect(events[1].runtimeType, equals(PointerMoveEvent));
|
|
expect(events[2].runtimeType, equals(PointerUpEvent));
|
|
});
|
|
|
|
test('Synthetic move events', () {
|
|
ui.PointerDataPacket packet = new ui.PointerDataPacket(
|
|
pointers: <ui.PointerData>[
|
|
new ui.PointerData(
|
|
change: ui.PointerChange.down,
|
|
physicalX: 1.0,
|
|
physicalY: 3.0,
|
|
),
|
|
new ui.PointerData(
|
|
change: ui.PointerChange.up,
|
|
physicalX: 10.0,
|
|
physicalY: 15.0,
|
|
),
|
|
]
|
|
);
|
|
|
|
List<PointerEvent> events = <PointerEvent>[];
|
|
_binding.callback = (PointerEvent event) => events.add(event);
|
|
|
|
ui.window.onPointerDataPacket(packet);
|
|
expect(events.length, 3);
|
|
expect(events[0].runtimeType, equals(PointerDownEvent));
|
|
expect(events[1].runtimeType, equals(PointerMoveEvent));
|
|
expect(events[1].delta, equals(const Offset(9.0, 12.0)));
|
|
expect(events[2].runtimeType, equals(PointerUpEvent));
|
|
});
|
|
|
|
test('Pointer cancel events', () {
|
|
ui.PointerDataPacket packet = new ui.PointerDataPacket(
|
|
pointers: <ui.PointerData>[
|
|
new ui.PointerData(change: ui.PointerChange.down),
|
|
new ui.PointerData(change: ui.PointerChange.cancel),
|
|
]
|
|
);
|
|
|
|
List<PointerEvent> events = <PointerEvent>[];
|
|
_binding.callback = (PointerEvent event) => events.add(event);
|
|
|
|
ui.window.onPointerDataPacket(packet);
|
|
expect(events.length, 2);
|
|
expect(events[0].runtimeType, equals(PointerDownEvent));
|
|
expect(events[1].runtimeType, equals(PointerCancelEvent));
|
|
});
|
|
|
|
test('Can cancel pointers', () {
|
|
ui.PointerDataPacket packet = new ui.PointerDataPacket(
|
|
pointers: <ui.PointerData>[
|
|
new ui.PointerData(change: ui.PointerChange.down),
|
|
new ui.PointerData(change: ui.PointerChange.up),
|
|
]
|
|
);
|
|
|
|
List<PointerEvent> events = <PointerEvent>[];
|
|
_binding.callback = (PointerEvent event) {
|
|
events.add(event);
|
|
if (event is PointerDownEvent)
|
|
_binding.cancelPointer(event.pointer);
|
|
};
|
|
|
|
ui.window.onPointerDataPacket(packet);
|
|
expect(events.length, 2);
|
|
expect(events[0].runtimeType, equals(PointerDownEvent));
|
|
expect(events[1].runtimeType, equals(PointerCancelEvent));
|
|
});
|
|
}
|