9 #include "flutter/fml/macros.h"
14 #include "flutter/shell/platform/windows/testing/flutter_windows_engine_builder.h"
15 #include "flutter/shell/platform/windows/testing/mock_window_binding_handler.h"
16 #include "flutter/shell/platform/windows/testing/test_binary_messenger.h"
17 #include "flutter/shell/platform/windows/testing/windows_test.h"
18 #include "gmock/gmock.h"
19 #include "gtest/gtest.h"
26 using ::testing::NotNull;
27 using ::testing::Return;
29 static constexpr
char kChannelName[] =
"flutter/mousecursor";
33 "createCustomCursor/windows";
36 "deleteCustomCursor/windows";
38 void SimulateCursorMessage(TestBinaryMessenger* messenger,
39 const std::string& method_name,
40 std::unique_ptr<EncodableValue> arguments,
41 MethodResult<EncodableValue>* result_handler) {
42 MethodCall<> call(method_name, std::move(arguments));
46 EXPECT_TRUE(messenger->SimulateEngineMessage(
48 [&result_handler](
const uint8_t* reply,
size_t reply_size) {
49 StandardMethodCodec::GetInstance().DecodeAndProcessResponseEnvelope(
50 reply, reply_size, result_handler);
64 MockWindowBindingHandler*
window() {
return window_; }
67 FlutterWindowsEngineBuilder builder{GetContext()};
69 engine_ = builder.Build();
73 FlutterWindowsEngineBuilder builder{GetContext()};
75 auto window = std::make_unique<MockWindowBindingHandler>();
78 EXPECT_CALL(*window_, SetView).Times(1);
79 EXPECT_CALL(*window_, GetRenderTarget).WillOnce(Return(
nullptr));
81 engine_ = builder.Build();
82 view_ = std::make_unique<FlutterWindowsView>(std::move(
window));
84 engine_->SetView(view_.get());
88 std::unique_ptr<FlutterWindowsEngine> engine_;
89 std::unique_ptr<FlutterWindowsView> view_;
90 MockWindowBindingHandler* window_;
96 use_engine_with_view();
98 TestBinaryMessenger messenger;
101 EXPECT_CALL(*window(), UpdateFlutterCursor(
"click")).Times(1);
103 bool success =
false;
107 EXPECT_EQ(result,
nullptr);
118 EXPECT_TRUE(success);
122 use_headless_engine();
124 TestBinaryMessenger messenger;
130 [&error](
const std::string& error_code,
const std::string& error_message,
133 EXPECT_EQ(error_message,
134 "Cursor is not available in Windows headless mode");
149 use_engine_with_view();
151 TestBinaryMessenger messenger;
155 std::vector<uint8_t> buffer(4 * 4 * 4, 0);
157 bool success =
false;
161 EXPECT_EQ(std::get<std::string>(*result),
"hello");
176 EXPECT_TRUE(success);
180 use_engine_with_view();
182 TestBinaryMessenger messenger;
186 std::vector<uint8_t> buffer(4 * 4 * 4, 0);
188 bool success =
false;
193 EXPECT_EQ(result,
nullptr);
197 EXPECT_CALL(*window(), SetFlutterCursor(NotNull())).Times(1);
208 &create_result_handler);
214 &set_result_handler);
216 EXPECT_TRUE(success);
220 use_headless_engine();
222 TestBinaryMessenger messenger;
226 std::vector<uint8_t> buffer(4 * 4 * 4, 0);
232 [&error](
const std::string& error_code,
const std::string& error_message,
235 EXPECT_EQ(error_message,
236 "Cursor is not available in Windows headless mode");
249 &create_result_handler);
255 &set_result_handler);
261 use_engine_with_view();
263 TestBinaryMessenger messenger;
269 [&error](
const std::string& error_code,
const std::string& error_message,
274 "The custom cursor identified by the argument key cannot be found");
278 EXPECT_CALL(*window(), SetFlutterCursor).Times(0);
290 use_engine_with_view();
292 TestBinaryMessenger messenger;
296 std::vector<uint8_t> buffer(4 * 4 * 4, 0);
298 bool success =
false;
303 EXPECT_EQ(result,
nullptr);
316 &create_result_handler);
322 &delete_result_handler);
324 EXPECT_TRUE(success);
328 use_engine_with_view();
330 TestBinaryMessenger messenger;
333 bool success =
false;
337 EXPECT_EQ(result,
nullptr);
347 EXPECT_TRUE(success);