| // Copyright 2013 The Flutter Authors. All rights reserved. | |
| // Use of this source code is governed by a BSD-style license that can be | |
| // found in the LICENSE file. | |
| #include "flutter/shell/platform/linux/fl_pointer_manager.h" | |
| #include "flutter/shell/platform/embedder/test_utils/proc_table_replacement.h" | |
| #include "flutter/shell/platform/linux/fl_engine_private.h" | |
| #include "flutter/shell/platform/linux/testing/fl_test.h" | |
| #include "gtest/gtest.h" | |
| static void log_pointer_events( | |
| FlEngine* engine, | |
| std::vector<FlutterPointerEvent>& pointer_events) { | |
| FlutterEngineProcTable* embedder_api = fl_engine_get_embedder_api(engine); | |
| embedder_api->SendPointerEvent = MOCK_ENGINE_PROC( | |
| SendPointerEvent, | |
| ([&pointer_events](auto engine, const FlutterPointerEvent* events, | |
| size_t events_count) { | |
| for (size_t i = 0; i < events_count; i++) { | |
| pointer_events.push_back(events[i]); | |
| } | |
| return kSuccess; | |
| })); | |
| } | |
| TEST(FlPointerManagerTest, EnterLeave) { | |
| g_autoptr(FlEngine) engine = make_mock_engine(); | |
| std::vector<FlutterPointerEvent> pointer_events; | |
| log_pointer_events(engine, pointer_events); | |
| g_autoptr(FlPointerManager) manager = fl_pointer_manager_new(42, engine); | |
| fl_pointer_manager_handle_enter(manager, 1234, kFlutterPointerDeviceKindMouse, | |
| 1.0, 2.0); | |
| fl_pointer_manager_handle_leave(manager, 1235, kFlutterPointerDeviceKindMouse, | |
| 3.0, 4.0); | |
| EXPECT_EQ(pointer_events.size(), 2u); | |
| EXPECT_EQ(pointer_events[0].timestamp, 1234000u); | |
| EXPECT_EQ(pointer_events[0].x, 1.0); | |
| EXPECT_EQ(pointer_events[0].y, 2.0); | |
| EXPECT_EQ(pointer_events[0].device_kind, kFlutterPointerDeviceKindMouse); | |
| EXPECT_EQ(pointer_events[0].buttons, 0); | |
| EXPECT_EQ(pointer_events[0].view_id, 42); | |
| EXPECT_EQ(pointer_events[1].timestamp, 1235000u); | |
| EXPECT_EQ(pointer_events[1].x, 3.0); | |
| EXPECT_EQ(pointer_events[1].y, 4.0); | |
| EXPECT_EQ(pointer_events[1].device_kind, kFlutterPointerDeviceKindMouse); | |
| EXPECT_EQ(pointer_events[1].buttons, 0); | |
| EXPECT_EQ(pointer_events[1].view_id, 42); | |
| } | |
| TEST(FlPointerManagerTest, EnterEnter) { | |
| g_autoptr(FlEngine) engine = make_mock_engine(); | |
| std::vector<FlutterPointerEvent> pointer_events; | |
| log_pointer_events(engine, pointer_events); | |
| g_autoptr(FlPointerManager) manager = fl_pointer_manager_new(42, engine); | |
| fl_pointer_manager_handle_enter(manager, 1234, kFlutterPointerDeviceKindMouse, | |
| 1.0, 2.0); | |
| // Duplicate enter is ignored | |
| fl_pointer_manager_handle_enter(manager, 1235, kFlutterPointerDeviceKindMouse, | |
| 3.0, 4.0); | |
| EXPECT_EQ(pointer_events.size(), 1u); | |
| EXPECT_EQ(pointer_events[0].timestamp, 1234000u); | |
| EXPECT_EQ(pointer_events[0].x, 1.0); | |
| EXPECT_EQ(pointer_events[0].y, 2.0); | |
| EXPECT_EQ(pointer_events[0].device_kind, kFlutterPointerDeviceKindMouse); | |
| EXPECT_EQ(pointer_events[0].buttons, 0); | |
| EXPECT_EQ(pointer_events[0].view_id, 42); | |
| } | |
| TEST(FlPointerManagerTest, EnterLeaveLeave) { | |
| g_autoptr(FlEngine) engine = make_mock_engine(); | |
| std::vector<FlutterPointerEvent> pointer_events; | |
| log_pointer_events(engine, pointer_events); | |
| g_autoptr(FlPointerManager) manager = fl_pointer_manager_new(42, engine); | |
| fl_pointer_manager_handle_enter(manager, 1234, kFlutterPointerDeviceKindMouse, | |
| 1.0, 2.0); | |
| fl_pointer_manager_handle_leave(manager, 1235, kFlutterPointerDeviceKindMouse, | |
| 3.0, 4.0); | |
| // Duplicate leave is ignored | |
| fl_pointer_manager_handle_leave(manager, 1235, kFlutterPointerDeviceKindMouse, | |
| 5.0, 6.0); | |
| EXPECT_EQ(pointer_events.size(), 2u); | |
| EXPECT_EQ(pointer_events[0].timestamp, 1234000u); | |
| EXPECT_EQ(pointer_events[0].x, 1.0); | |
| EXPECT_EQ(pointer_events[0].y, 2.0); | |
| EXPECT_EQ(pointer_events[0].device_kind, kFlutterPointerDeviceKindMouse); | |
| EXPECT_EQ(pointer_events[0].buttons, 0); | |
| EXPECT_EQ(pointer_events[0].view_id, 42); | |
| EXPECT_EQ(pointer_events[1].timestamp, 1235000u); | |
| EXPECT_EQ(pointer_events[1].x, 3.0); | |
| EXPECT_EQ(pointer_events[1].y, 4.0); | |
| EXPECT_EQ(pointer_events[1].device_kind, kFlutterPointerDeviceKindMouse); | |
| EXPECT_EQ(pointer_events[1].buttons, 0); | |
| EXPECT_EQ(pointer_events[1].view_id, 42); | |
| } | |
| TEST(FlPointerManagerTest, EnterButtonPress) { | |
| g_autoptr(FlEngine) engine = make_mock_engine(); | |
| std::vector<FlutterPointerEvent> pointer_events; | |
| log_pointer_events(engine, pointer_events); | |
| g_autoptr(FlPointerManager) manager = fl_pointer_manager_new(42, engine); | |
| fl_pointer_manager_handle_enter(manager, 1234, kFlutterPointerDeviceKindMouse, | |
| 1.0, 2.0); | |
| fl_pointer_manager_handle_button_press( | |
| manager, 1235, kFlutterPointerDeviceKindMouse, 4.0, 8.0, | |
| kFlutterPointerButtonMousePrimary); | |
| EXPECT_EQ(pointer_events.size(), 2u); | |
| EXPECT_EQ(pointer_events[0].timestamp, 1234000u); | |
| EXPECT_EQ(pointer_events[0].x, 1.0); | |
| EXPECT_EQ(pointer_events[0].y, 2.0); | |
| EXPECT_EQ(pointer_events[0].device_kind, kFlutterPointerDeviceKindMouse); | |
| EXPECT_EQ(pointer_events[0].buttons, 0); | |
| EXPECT_EQ(pointer_events[0].view_id, 42); | |
| EXPECT_EQ(pointer_events[1].timestamp, 1235000u); | |
| EXPECT_EQ(pointer_events[1].x, 4.0); | |
| EXPECT_EQ(pointer_events[1].y, 8.0); | |
| EXPECT_EQ(pointer_events[1].device_kind, kFlutterPointerDeviceKindMouse); | |
| EXPECT_EQ(pointer_events[1].buttons, kFlutterPointerButtonMousePrimary); | |
| EXPECT_EQ(pointer_events[1].view_id, 42); | |
| } | |
| TEST(FlPointerManagerTest, NoEnterButtonPress) { | |
| g_autoptr(FlEngine) engine = make_mock_engine(); | |
| std::vector<FlutterPointerEvent> pointer_events; | |
| log_pointer_events(engine, pointer_events); | |
| g_autoptr(FlPointerManager) manager = fl_pointer_manager_new(42, engine); | |
| fl_pointer_manager_handle_button_press( | |
| manager, 1234, kFlutterPointerDeviceKindMouse, 4.0, 8.0, | |
| kFlutterPointerButtonMousePrimary); | |
| EXPECT_EQ(pointer_events.size(), 2u); | |
| // Synthetic enter events | |
| EXPECT_EQ(pointer_events[0].timestamp, 1234000u); | |
| EXPECT_EQ(pointer_events[0].x, 4.0); | |
| EXPECT_EQ(pointer_events[0].y, 8.0); | |
| EXPECT_EQ(pointer_events[0].device_kind, kFlutterPointerDeviceKindMouse); | |
| EXPECT_EQ(pointer_events[0].buttons, 0); | |
| EXPECT_EQ(pointer_events[0].view_id, 42); | |
| EXPECT_EQ(pointer_events[1].timestamp, 1234000u); | |
| EXPECT_EQ(pointer_events[1].x, 4.0); | |
| EXPECT_EQ(pointer_events[1].y, 8.0); | |
| EXPECT_EQ(pointer_events[1].device_kind, kFlutterPointerDeviceKindMouse); | |
| EXPECT_EQ(pointer_events[1].buttons, kFlutterPointerButtonMousePrimary); | |
| EXPECT_EQ(pointer_events[1].view_id, 42); | |
| } | |
| TEST(FlPointerManagerTest, ButtonPressButtonRelease) { | |
| g_autoptr(FlEngine) engine = make_mock_engine(); | |
| std::vector<FlutterPointerEvent> pointer_events; | |
| log_pointer_events(engine, pointer_events); | |
| g_autoptr(FlPointerManager) manager = fl_pointer_manager_new(42, engine); | |
| fl_pointer_manager_handle_button_press( | |
| manager, 1234, kFlutterPointerDeviceKindMouse, 4.0, 8.0, | |
| kFlutterPointerButtonMousePrimary); | |
| fl_pointer_manager_handle_button_release( | |
| manager, 1235, kFlutterPointerDeviceKindMouse, 5.0, 9.0, | |
| kFlutterPointerButtonMousePrimary); | |
| EXPECT_EQ(pointer_events.size(), 3u); | |
| // Ignore first synthetic enter event | |
| EXPECT_EQ(pointer_events[1].timestamp, 1234000u); | |
| EXPECT_EQ(pointer_events[1].x, 4.0); | |
| EXPECT_EQ(pointer_events[1].y, 8.0); | |
| EXPECT_EQ(pointer_events[1].device_kind, kFlutterPointerDeviceKindMouse); | |
| EXPECT_EQ(pointer_events[1].buttons, kFlutterPointerButtonMousePrimary); | |
| EXPECT_EQ(pointer_events[1].view_id, 42); | |
| EXPECT_EQ(pointer_events[2].timestamp, 1235000u); | |
| EXPECT_EQ(pointer_events[2].x, 5.0); | |
| EXPECT_EQ(pointer_events[2].y, 9.0); | |
| EXPECT_EQ(pointer_events[2].device_kind, kFlutterPointerDeviceKindMouse); | |
| EXPECT_EQ(pointer_events[2].buttons, 0); | |
| EXPECT_EQ(pointer_events[2].view_id, 42); | |
| } | |
| TEST(FlPointerManagerTest, ButtonPressButtonReleaseThreeButtons) { | |
| g_autoptr(FlEngine) engine = make_mock_engine(); | |
| std::vector<FlutterPointerEvent> pointer_events; | |
| log_pointer_events(engine, pointer_events); | |
| g_autoptr(FlPointerManager) manager = fl_pointer_manager_new(42, engine); | |
| // Press buttons 1-2-3, release 3-2-1 | |
| fl_pointer_manager_handle_button_press( | |
| manager, 1234, kFlutterPointerDeviceKindMouse, 1.0, 2.0, | |
| kFlutterPointerButtonMousePrimary); | |
| fl_pointer_manager_handle_button_press( | |
| manager, 1235, kFlutterPointerDeviceKindMouse, 3.0, 4.0, | |
| kFlutterPointerButtonMouseSecondary); | |
| fl_pointer_manager_handle_button_press(manager, 1236, | |
| kFlutterPointerDeviceKindMouse, 5.0, | |
| 6.0, kFlutterPointerButtonMouseMiddle); | |
| fl_pointer_manager_handle_button_release( | |
| manager, 1237, kFlutterPointerDeviceKindMouse, 7.0, 8.0, | |
| kFlutterPointerButtonMouseMiddle); | |
| fl_pointer_manager_handle_button_release( | |
| manager, 1238, kFlutterPointerDeviceKindMouse, 9.0, 10.0, | |
| kFlutterPointerButtonMouseSecondary); | |
| fl_pointer_manager_handle_button_release( | |
| manager, 1239, kFlutterPointerDeviceKindMouse, 11.0, 12.0, | |
| kFlutterPointerButtonMousePrimary); | |
| EXPECT_EQ(pointer_events.size(), 7u); | |
| // Ignore first synthetic enter event | |
| EXPECT_EQ(pointer_events[1].timestamp, 1234000u); | |
| EXPECT_EQ(pointer_events[1].x, 1.0); | |
| EXPECT_EQ(pointer_events[1].y, 2.0); | |
| EXPECT_EQ(pointer_events[1].buttons, kFlutterPointerButtonMousePrimary); | |
| EXPECT_EQ(pointer_events[2].timestamp, 1235000u); | |
| EXPECT_EQ(pointer_events[2].x, 3.0); | |
| EXPECT_EQ(pointer_events[2].y, 4.0); | |
| EXPECT_EQ(pointer_events[2].buttons, kFlutterPointerButtonMousePrimary | | |
| kFlutterPointerButtonMouseSecondary); | |
| EXPECT_EQ(pointer_events[3].timestamp, 1236000u); | |
| EXPECT_EQ(pointer_events[3].x, 5.0); | |
| EXPECT_EQ(pointer_events[3].y, 6.0); | |
| EXPECT_EQ(pointer_events[3].buttons, kFlutterPointerButtonMousePrimary | | |
| kFlutterPointerButtonMouseSecondary | | |
| kFlutterPointerButtonMouseMiddle); | |
| EXPECT_EQ(pointer_events[4].timestamp, 1237000u); | |
| EXPECT_EQ(pointer_events[4].x, 7.0); | |
| EXPECT_EQ(pointer_events[4].y, 8.0); | |
| EXPECT_EQ(pointer_events[4].buttons, kFlutterPointerButtonMousePrimary | | |
| kFlutterPointerButtonMouseSecondary); | |
| EXPECT_EQ(pointer_events[5].timestamp, 1238000u); | |
| EXPECT_EQ(pointer_events[5].x, 9.0); | |
| EXPECT_EQ(pointer_events[5].y, 10.0); | |
| EXPECT_EQ(pointer_events[5].buttons, kFlutterPointerButtonMousePrimary); | |
| EXPECT_EQ(pointer_events[6].timestamp, 1239000u); | |
| EXPECT_EQ(pointer_events[6].x, 11.0); | |
| EXPECT_EQ(pointer_events[6].y, 12.0); | |
| EXPECT_EQ(pointer_events[6].buttons, 0); | |
| } | |
| TEST(FlPointerManagerTest, ButtonPressButtonPressButtonRelease) { | |
| g_autoptr(FlEngine) engine = make_mock_engine(); | |
| std::vector<FlutterPointerEvent> pointer_events; | |
| log_pointer_events(engine, pointer_events); | |
| g_autoptr(FlPointerManager) manager = fl_pointer_manager_new(42, engine); | |
| fl_pointer_manager_handle_button_press( | |
| manager, 1234, kFlutterPointerDeviceKindMouse, 4.0, 8.0, | |
| kFlutterPointerButtonMousePrimary); | |
| // Ignore duplicate press | |
| fl_pointer_manager_handle_button_press( | |
| manager, 1234, kFlutterPointerDeviceKindMouse, 6.0, 10.0, | |
| kFlutterPointerButtonMousePrimary); | |
| fl_pointer_manager_handle_button_release( | |
| manager, 1235, kFlutterPointerDeviceKindMouse, 5.0, 9.0, | |
| kFlutterPointerButtonMousePrimary); | |
| EXPECT_EQ(pointer_events.size(), 3u); | |
| // Ignore first synthetic enter event | |
| EXPECT_EQ(pointer_events[1].timestamp, 1234000u); | |
| EXPECT_EQ(pointer_events[1].x, 4.0); | |
| EXPECT_EQ(pointer_events[1].y, 8.0); | |
| EXPECT_EQ(pointer_events[1].device_kind, kFlutterPointerDeviceKindMouse); | |
| EXPECT_EQ(pointer_events[1].buttons, kFlutterPointerButtonMousePrimary); | |
| EXPECT_EQ(pointer_events[1].view_id, 42); | |
| EXPECT_EQ(pointer_events[2].timestamp, 1235000u); | |
| EXPECT_EQ(pointer_events[2].x, 5.0); | |
| EXPECT_EQ(pointer_events[2].y, 9.0); | |
| EXPECT_EQ(pointer_events[2].device_kind, kFlutterPointerDeviceKindMouse); | |
| EXPECT_EQ(pointer_events[2].buttons, 0); | |
| EXPECT_EQ(pointer_events[2].view_id, 42); | |
| } | |
| TEST(FlPointerManagerTest, ButtonPressButtonReleaseButtonRelease) { | |
| g_autoptr(FlEngine) engine = make_mock_engine(); | |
| std::vector<FlutterPointerEvent> pointer_events; | |
| log_pointer_events(engine, pointer_events); | |
| g_autoptr(FlPointerManager) manager = fl_pointer_manager_new(42, engine); | |
| fl_pointer_manager_handle_button_press( | |
| manager, 1234, kFlutterPointerDeviceKindMouse, 4.0, 8.0, | |
| kFlutterPointerButtonMousePrimary); | |
| fl_pointer_manager_handle_button_release( | |
| manager, 1235, kFlutterPointerDeviceKindMouse, 5.0, 9.0, | |
| kFlutterPointerButtonMousePrimary); | |
| // Ignore duplicate release | |
| fl_pointer_manager_handle_button_release( | |
| manager, 1235, kFlutterPointerDeviceKindMouse, 6.0, 10.0, | |
| kFlutterPointerButtonMousePrimary); | |
| EXPECT_EQ(pointer_events.size(), 3u); | |
| // Ignore first synthetic enter event | |
| EXPECT_EQ(pointer_events[1].timestamp, 1234000u); | |
| EXPECT_EQ(pointer_events[1].x, 4.0); | |
| EXPECT_EQ(pointer_events[1].y, 8.0); | |
| EXPECT_EQ(pointer_events[1].device_kind, kFlutterPointerDeviceKindMouse); | |
| EXPECT_EQ(pointer_events[1].buttons, kFlutterPointerButtonMousePrimary); | |
| EXPECT_EQ(pointer_events[1].view_id, 42); | |
| EXPECT_EQ(pointer_events[2].timestamp, 1235000u); | |
| EXPECT_EQ(pointer_events[2].x, 5.0); | |
| EXPECT_EQ(pointer_events[2].y, 9.0); | |
| EXPECT_EQ(pointer_events[2].device_kind, kFlutterPointerDeviceKindMouse); | |
| EXPECT_EQ(pointer_events[2].buttons, 0); | |
| EXPECT_EQ(pointer_events[2].view_id, 42); | |
| } | |
| TEST(FlPointerManagerTest, NoButtonPressButtonRelease) { | |
| g_autoptr(FlEngine) engine = make_mock_engine(); | |
| std::vector<FlutterPointerEvent> pointer_events; | |
| log_pointer_events(engine, pointer_events); | |
| g_autoptr(FlPointerManager) manager = fl_pointer_manager_new(42, engine); | |
| // Release without associated press, will be ignored | |
| fl_pointer_manager_handle_button_release( | |
| manager, 1235, kFlutterPointerDeviceKindMouse, 5.0, 9.0, | |
| kFlutterPointerButtonMousePrimary); | |
| EXPECT_EQ(pointer_events.size(), 0u); | |
| } | |
| TEST(FlPointerManagerTest, Motion) { | |
| g_autoptr(FlEngine) engine = make_mock_engine(); | |
| std::vector<FlutterPointerEvent> pointer_events; | |
| log_pointer_events(engine, pointer_events); | |
| g_autoptr(FlPointerManager) manager = fl_pointer_manager_new(42, engine); | |
| fl_pointer_manager_handle_motion(manager, 1234, | |
| kFlutterPointerDeviceKindMouse, 1.0, 2.0); | |
| fl_pointer_manager_handle_motion(manager, 1235, | |
| kFlutterPointerDeviceKindMouse, 3.0, 4.0); | |
| fl_pointer_manager_handle_motion(manager, 1236, | |
| kFlutterPointerDeviceKindMouse, 5.0, 6.0); | |
| EXPECT_EQ(pointer_events.size(), 4u); | |
| // Ignore first synthetic enter event | |
| EXPECT_EQ(pointer_events[1].timestamp, 1234000u); | |
| EXPECT_EQ(pointer_events[1].x, 1.0); | |
| EXPECT_EQ(pointer_events[1].y, 2.0); | |
| EXPECT_EQ(pointer_events[1].device_kind, kFlutterPointerDeviceKindMouse); | |
| EXPECT_EQ(pointer_events[1].buttons, 0); | |
| EXPECT_EQ(pointer_events[1].view_id, 42); | |
| EXPECT_EQ(pointer_events[2].timestamp, 1235000u); | |
| EXPECT_EQ(pointer_events[2].x, 3.0); | |
| EXPECT_EQ(pointer_events[2].y, 4.0); | |
| EXPECT_EQ(pointer_events[2].device_kind, kFlutterPointerDeviceKindMouse); | |
| EXPECT_EQ(pointer_events[2].buttons, 0); | |
| EXPECT_EQ(pointer_events[2].view_id, 42); | |
| EXPECT_EQ(pointer_events[3].timestamp, 1236000u); | |
| EXPECT_EQ(pointer_events[3].x, 5.0); | |
| EXPECT_EQ(pointer_events[3].y, 6.0); | |
| EXPECT_EQ(pointer_events[3].device_kind, kFlutterPointerDeviceKindMouse); | |
| EXPECT_EQ(pointer_events[3].buttons, 0); | |
| EXPECT_EQ(pointer_events[3].view_id, 42); | |
| } | |
| TEST(FlPointerManagerTest, Drag) { | |
| g_autoptr(FlEngine) engine = make_mock_engine(); | |
| std::vector<FlutterPointerEvent> pointer_events; | |
| log_pointer_events(engine, pointer_events); | |
| g_autoptr(FlPointerManager) manager = fl_pointer_manager_new(42, engine); | |
| fl_pointer_manager_handle_motion(manager, 1234, | |
| kFlutterPointerDeviceKindMouse, 1.0, 2.0); | |
| fl_pointer_manager_handle_button_press( | |
| manager, 1235, kFlutterPointerDeviceKindMouse, 3.0, 4.0, | |
| kFlutterPointerButtonMousePrimary); | |
| fl_pointer_manager_handle_motion(manager, 1236, | |
| kFlutterPointerDeviceKindMouse, 5.0, 6.0); | |
| fl_pointer_manager_handle_button_release( | |
| manager, 1237, kFlutterPointerDeviceKindMouse, 7.0, 8.0, | |
| kFlutterPointerButtonMousePrimary); | |
| fl_pointer_manager_handle_motion(manager, 1238, | |
| kFlutterPointerDeviceKindMouse, 9.0, 10.0); | |
| EXPECT_EQ(pointer_events.size(), 6u); | |
| // Ignore first synthetic enter event | |
| EXPECT_EQ(pointer_events[1].timestamp, 1234000u); | |
| EXPECT_EQ(pointer_events[1].x, 1.0); | |
| EXPECT_EQ(pointer_events[1].y, 2.0); | |
| EXPECT_EQ(pointer_events[1].buttons, 0); | |
| EXPECT_EQ(pointer_events[1].view_id, 42); | |
| EXPECT_EQ(pointer_events[2].timestamp, 1235000u); | |
| EXPECT_EQ(pointer_events[2].x, 3.0); | |
| EXPECT_EQ(pointer_events[2].y, 4.0); | |
| EXPECT_EQ(pointer_events[2].buttons, kFlutterPointerButtonMousePrimary); | |
| EXPECT_EQ(pointer_events[2].view_id, 42); | |
| EXPECT_EQ(pointer_events[3].timestamp, 1236000u); | |
| EXPECT_EQ(pointer_events[3].x, 5.0); | |
| EXPECT_EQ(pointer_events[3].y, 6.0); | |
| EXPECT_EQ(pointer_events[3].buttons, kFlutterPointerButtonMousePrimary); | |
| EXPECT_EQ(pointer_events[3].view_id, 42); | |
| EXPECT_EQ(pointer_events[4].timestamp, 1237000u); | |
| EXPECT_EQ(pointer_events[4].x, 7.0); | |
| EXPECT_EQ(pointer_events[4].y, 8.0); | |
| EXPECT_EQ(pointer_events[4].buttons, 0); | |
| EXPECT_EQ(pointer_events[4].view_id, 42); | |
| EXPECT_EQ(pointer_events[5].timestamp, 1238000u); | |
| EXPECT_EQ(pointer_events[5].x, 9.0); | |
| EXPECT_EQ(pointer_events[5].y, 10.0); | |
| EXPECT_EQ(pointer_events[5].buttons, 0); | |
| EXPECT_EQ(pointer_events[5].view_id, 42); | |
| } | |
| TEST(FlPointerManagerTest, DeviceKind) { | |
| g_autoptr(FlEngine) engine = make_mock_engine(); | |
| std::vector<FlutterPointerEvent> pointer_events; | |
| log_pointer_events(engine, pointer_events); | |
| g_autoptr(FlPointerManager) manager = fl_pointer_manager_new(42, engine); | |
| fl_pointer_manager_handle_enter(manager, 1234, | |
| kFlutterPointerDeviceKindTrackpad, 1.0, 2.0); | |
| fl_pointer_manager_handle_button_press( | |
| manager, 1235, kFlutterPointerDeviceKindTrackpad, 1.0, 2.0, | |
| kFlutterPointerButtonMousePrimary); | |
| fl_pointer_manager_handle_motion(manager, 1238, | |
| kFlutterPointerDeviceKindTrackpad, 3.0, 4.0); | |
| fl_pointer_manager_handle_button_release( | |
| manager, 1237, kFlutterPointerDeviceKindTrackpad, 3.0, 4.0, | |
| kFlutterPointerButtonMousePrimary); | |
| fl_pointer_manager_handle_leave(manager, 1235, | |
| kFlutterPointerDeviceKindTrackpad, 3.0, 4.0); | |
| EXPECT_EQ(pointer_events.size(), 5u); | |
| EXPECT_EQ(pointer_events[0].device_kind, kFlutterPointerDeviceKindTrackpad); | |
| EXPECT_EQ(pointer_events[1].device_kind, kFlutterPointerDeviceKindTrackpad); | |
| EXPECT_EQ(pointer_events[2].device_kind, kFlutterPointerDeviceKindTrackpad); | |
| EXPECT_EQ(pointer_events[3].device_kind, kFlutterPointerDeviceKindTrackpad); | |
| EXPECT_EQ(pointer_events[4].device_kind, kFlutterPointerDeviceKindTrackpad); | |
| } |