Flutter Engine Uber Docs
Docs for the entire Flutter Engine repo.
 
Loading...
Searching...
No Matches
fl_mouse_cursor_handler_test.cc
Go to the documentation of this file.
1// Copyright 2013 The Flutter Authors. All rights reserved.
2// Use of this source code is governed by a BSD-style license that can be
3// found in the LICENSE file.
4
6
9
10#include "gtest/gtest.h"
11
12// Activates a system cursor by sending an activateSystemCursor method call with
13// the given kind, returning whether a response was received.
14static gboolean activate_system_cursor(FlMockBinaryMessenger* messenger,
15 const gchar* kind) {
18
19 gboolean called = FALSE;
21 messenger, "flutter/mousecursor", "activateSystemCursor", args,
22 [](FlMockBinaryMessenger* messenger, FlMethodResponse* response,
23 gpointer user_data) {
24 gboolean* called = static_cast<gboolean*>(user_data);
25 *called = TRUE;
26
27 EXPECT_TRUE(FL_IS_METHOD_SUCCESS_RESPONSE(response));
28 },
29 &called);
30
31 return called;
32}
33
34// A newly created handler has no cursor set.
35TEST(FlMouseCursorHandlerTest, InitialCursorName) {
36 g_autoptr(FlMockBinaryMessenger) messenger = fl_mock_binary_messenger_new();
37 g_autoptr(FlMouseCursorHandler) handler =
38 fl_mouse_cursor_handler_new(FL_BINARY_MESSENGER(messenger));
39
41}
42
43// Activating a known cursor kind maps it to the matching GTK cursor name.
44TEST(FlMouseCursorHandlerTest, ActivateSystemCursor) {
45 g_autoptr(FlMockBinaryMessenger) messenger = fl_mock_binary_messenger_new();
46 g_autoptr(FlMouseCursorHandler) handler =
47 fl_mouse_cursor_handler_new(FL_BINARY_MESSENGER(messenger));
48
49 EXPECT_TRUE(activate_system_cursor(messenger, "click"));
50
51 EXPECT_STREQ(fl_mouse_cursor_handler_get_cursor_name(handler), "pointer");
52}
53
54// The "basic" cursor kind maps to the GTK "default" cursor.
55TEST(FlMouseCursorHandlerTest, BasicCursor) {
56 g_autoptr(FlMockBinaryMessenger) messenger = fl_mock_binary_messenger_new();
57 g_autoptr(FlMouseCursorHandler) handler =
58 fl_mouse_cursor_handler_new(FL_BINARY_MESSENGER(messenger));
59
60 EXPECT_TRUE(activate_system_cursor(messenger, "basic"));
61
62 EXPECT_STREQ(fl_mouse_cursor_handler_get_cursor_name(handler), "default");
63}
64
65// An unknown cursor kind falls back to the GTK "default" cursor.
66TEST(FlMouseCursorHandlerTest, UnknownCursorFallsBackToDefault) {
67 g_autoptr(FlMockBinaryMessenger) messenger = fl_mock_binary_messenger_new();
68 g_autoptr(FlMouseCursorHandler) handler =
69 fl_mouse_cursor_handler_new(FL_BINARY_MESSENGER(messenger));
70
71 EXPECT_TRUE(activate_system_cursor(messenger, "madeUpCursorKind"));
72
73 EXPECT_STREQ(fl_mouse_cursor_handler_get_cursor_name(handler), "default");
74}
75
76// A call whose argument map omits the "kind" key falls back to the GTK
77// "default" cursor without crashing.
78TEST(FlMouseCursorHandlerTest, MissingKindFallsBackToDefault) {
79 g_autoptr(FlMockBinaryMessenger) messenger = fl_mock_binary_messenger_new();
80 g_autoptr(FlMouseCursorHandler) handler =
81 fl_mouse_cursor_handler_new(FL_BINARY_MESSENGER(messenger));
82
83 gboolean called = FALSE;
86 messenger, "flutter/mousecursor", "activateSystemCursor", args,
87 [](FlMockBinaryMessenger* messenger, FlMethodResponse* response,
88 gpointer user_data) {
89 gboolean* called = static_cast<gboolean*>(user_data);
90 *called = TRUE;
91
92 EXPECT_TRUE(FL_IS_METHOD_SUCCESS_RESPONSE(response));
93 },
94 &called);
95 EXPECT_TRUE(called);
96
97 EXPECT_STREQ(fl_mouse_cursor_handler_get_cursor_name(handler), "default");
98}
99
100// Changing the cursor emits the cursor-changed signal.
101TEST(FlMouseCursorHandlerTest, CursorChangedSignal) {
102 g_autoptr(FlMockBinaryMessenger) messenger = fl_mock_binary_messenger_new();
103 g_autoptr(FlMouseCursorHandler) handler =
104 fl_mouse_cursor_handler_new(FL_BINARY_MESSENGER(messenger));
105
106 gboolean cursor_changed = FALSE;
107 g_signal_connect_swapped(
108 handler, "cursor-changed",
109 G_CALLBACK(+[](gboolean* cursor_changed) { *cursor_changed = TRUE; }),
110 &cursor_changed);
111
112 EXPECT_TRUE(activate_system_cursor(messenger, "grab"));
113
114 EXPECT_TRUE(cursor_changed);
116}
117
118// A call with malformed (non-map) arguments returns an error response.
119TEST(FlMouseCursorHandlerTest, BadArguments) {
120 g_autoptr(FlMockBinaryMessenger) messenger = fl_mock_binary_messenger_new();
121 g_autoptr(FlMouseCursorHandler) handler =
122 fl_mouse_cursor_handler_new(FL_BINARY_MESSENGER(messenger));
123
124 gboolean called = FALSE;
127 messenger, "flutter/mousecursor", "activateSystemCursor", args,
128 [](FlMockBinaryMessenger* messenger, FlMethodResponse* response,
129 gpointer user_data) {
130 gboolean* called = static_cast<gboolean*>(user_data);
131 *called = TRUE;
132
133 EXPECT_TRUE(FL_IS_METHOD_ERROR_RESPONSE(response));
135 FL_METHOD_ERROR_RESPONSE(response)),
136 "Bad Arguments");
137 },
138 &called);
139 EXPECT_TRUE(called);
140
141 // The cursor is unchanged.
143}
144
145// An unknown method returns a not-implemented response.
146TEST(FlMouseCursorHandlerTest, UnknownMethod) {
147 g_autoptr(FlMockBinaryMessenger) messenger = fl_mock_binary_messenger_new();
148 g_autoptr(FlMouseCursorHandler) handler =
149 fl_mouse_cursor_handler_new(FL_BINARY_MESSENGER(messenger));
150
151 gboolean called = FALSE;
154 messenger, "flutter/mousecursor", "someUnknownMethod", args,
155 [](FlMockBinaryMessenger* messenger, FlMethodResponse* response,
156 gpointer user_data) {
157 gboolean* called = static_cast<gboolean*>(user_data);
158 *called = TRUE;
159
160 EXPECT_TRUE(FL_IS_METHOD_NOT_IMPLEMENTED_RESPONSE(response));
161 },
162 &called);
163 EXPECT_TRUE(called);
164}
g_autoptr(FlEngine) engine
return TRUE
G_BEGIN_DECLS G_MODULE_EXPORT FlValue * args
G_MODULE_EXPORT const gchar * fl_method_error_response_get_code(FlMethodErrorResponse *self)
void fl_mock_binary_messenger_invoke_standard_method(FlMockBinaryMessenger *self, const gchar *channel, const char *name, FlValue *args, FlMockBinaryMessengerMethodCallback callback, gpointer user_data)
const gchar FlBinaryMessengerMessageHandler handler
FlMockBinaryMessenger * fl_mock_binary_messenger_new()
const gchar * fl_mouse_cursor_handler_get_cursor_name(FlMouseCursorHandler *self)
FlMouseCursorHandler * fl_mouse_cursor_handler_new(FlBinaryMessenger *messenger)
static gboolean activate_system_cursor(FlMockBinaryMessenger *messenger, const gchar *kind)
TEST(FlMouseCursorHandlerTest, InitialCursorName)
G_MODULE_EXPORT FlValue * fl_value_new_map()
Definition fl_value.cc:366
G_MODULE_EXPORT void fl_value_set_string_take(FlValue *self, const gchar *key, FlValue *value)
Definition fl_value.cc:650
G_MODULE_EXPORT FlValue * fl_value_new_null()
Definition fl_value.cc:251
G_MODULE_EXPORT FlValue * fl_value_new_string(const gchar *value)
Definition fl_value.cc:276
typedefG_BEGIN_DECLS struct _FlValue FlValue
Definition fl_value.h:42