4 #include "flutter/fml/macros.h"
6 #include "flutter/shell/platform/windows/testing/flutter_windows_engine_builder.h"
7 #include "flutter/shell/platform/windows/testing/mock_window_binding_handler_delegate.h"
8 #include "flutter/shell/platform/windows/testing/mock_windows_proc_table.h"
9 #include "flutter/shell/platform/windows/testing/windows_test.h"
10 #include "flutter/shell/platform/windows/testing/wm_builders.h"
12 #include "gmock/gmock.h"
13 #include "gtest/gtest.h"
19 using ::testing::AnyNumber;
21 using ::testing::Invoke;
22 using ::testing::Return;
25 static constexpr int32_t kDefaultPointerDeviceId = 0;
27 class MockFlutterWindow :
public FlutterWindow {
29 explicit MockFlutterWindow(
bool reset_view_on_exit =
true)
30 : reset_view_on_exit_(reset_view_on_exit) {
31 ON_CALL(*
this, GetDpiScale())
36 MockFlutterWindow(
int width,
38 std::shared_ptr<WindowsProcTable> proc_table =
nullptr)
39 : FlutterWindow(width, height, nullptr, std::move(proc_table)) {}
41 virtual ~MockFlutterWindow() {
42 if (reset_view_on_exit_) {
48 UINT GetDpi() {
return GetCurrentDPI(); }
50 LRESULT InjectWindowMessage(UINT
const message,
52 LPARAM
const lparam) {
53 return HandleMessage(
message, wparam, lparam);
56 MOCK_METHOD(
void, OnDpiScale, (
unsigned int), (
override));
57 MOCK_METHOD(
void, OnResize, (
unsigned int,
unsigned int), (
override));
58 MOCK_METHOD(
float, GetScrollOffsetMultiplier, (), (
override));
59 MOCK_METHOD(
float, GetDpiScale, (), (
override));
60 MOCK_METHOD(
void, UpdateCursorRect, (
const Rect&), (
override));
61 MOCK_METHOD(
void, OnResetImeComposing, (), (
override));
62 MOCK_METHOD(UINT, Win32DispatchMessage, (UINT, WPARAM, LPARAM), (
override));
63 MOCK_METHOD(BOOL, Win32PeekMessage, (LPMSG, UINT, UINT, UINT), (
override));
64 MOCK_METHOD(uint32_t, Win32MapVkToChar, (uint32_t), (
override));
65 MOCK_METHOD(HWND, GetWindowHandle, (), (
override));
66 MOCK_METHOD(ui::AXFragmentRootDelegateWin*,
67 GetAxFragmentRootDelegate,
74 LRESULT Win32DefWindowProc(HWND hWnd,
77 LPARAM lParam)
override {
78 return kWmResultDefault;
82 bool reset_view_on_exit_;
83 FML_DISALLOW_COPY_AND_ASSIGN(MockFlutterWindow);
86 class MockFlutterWindowsView :
public FlutterWindowsView {
89 std::unique_ptr<WindowBindingHandler> window_binding)
92 std::move(window_binding),
98 NotifyWinEventWrapper,
99 (ui::AXPlatformNodeWin*, ax::mojom::Event),
103 FML_DISALLOW_COPY_AND_ASSIGN(MockFlutterWindowsView);
106 class FlutterWindowTest :
public WindowsTest {};
110 TEST_F(FlutterWindowTest, CreateDestroy) {
111 std::unique_ptr<FlutterWindowsEngine> engine =
112 FlutterWindowsEngineBuilder{GetContext()}.Build();
117 TEST_F(FlutterWindowTest, OnBitmapSurfaceUpdated) {
118 std::unique_ptr<FlutterWindowsEngine> engine =
119 FlutterWindowsEngineBuilder{GetContext()}.Build();
120 FlutterWindow win32window(100, 100, engine->display_manager());
121 int old_handle_count = GetGuiResources(GetCurrentProcess(), GR_GDIOBJECTS);
123 constexpr
size_t row_bytes = 100 * 4;
124 constexpr
size_t height = 100;
125 std::array<char, row_bytes * height> allocation;
128 int new_handle_count = GetGuiResources(GetCurrentProcess(), GR_GDIOBJECTS);
130 EXPECT_EQ(old_handle_count, new_handle_count);
136 TEST_F(FlutterWindowTest, OnCursorRectUpdatedRegularDPI) {
137 MockFlutterWindow win32window;
138 EXPECT_CALL(win32window, GetDpiScale()).WillOnce(Return(1.0));
140 Rect cursor_rect(Point(10, 20), Size(30, 40));
141 EXPECT_CALL(win32window, UpdateCursorRect(cursor_rect)).Times(1);
143 win32window.OnCursorRectUpdated(cursor_rect);
149 TEST_F(FlutterWindowTest, OnCursorRectUpdatedHighDPI) {
150 MockFlutterWindow win32window;
151 EXPECT_CALL(win32window, GetDpiScale()).WillOnce(Return(1.5));
153 Rect expected_cursor_rect(Point(15, 30), Size(45, 60));
154 EXPECT_CALL(win32window, UpdateCursorRect(expected_cursor_rect)).Times(1);
156 Rect cursor_rect(Point(10, 20), Size(30, 40));
157 win32window.OnCursorRectUpdated(cursor_rect);
160 TEST_F(FlutterWindowTest, OnPointerStarSendsDeviceType) {
161 std::unique_ptr<FlutterWindowsEngine> engine =
162 FlutterWindowsEngineBuilder{GetContext()}.Build();
163 FlutterWindow win32window(100, 100, engine->display_manager());
164 MockWindowBindingHandlerDelegate delegate;
165 EXPECT_CALL(delegate, OnWindowStateEvent).Times(AnyNumber());
166 win32window.
SetView(&delegate);
169 EXPECT_CALL(delegate,
170 OnPointerMove(10.0, 10.0, kFlutterPointerDeviceKindMouse,
171 kDefaultPointerDeviceId, 0, 0, 0))
173 EXPECT_CALL(delegate,
174 OnPointerMove(10.0, 10.0, kFlutterPointerDeviceKindTouch,
175 kDefaultPointerDeviceId, 0, 0, 0))
177 EXPECT_CALL(delegate,
178 OnPointerMove(10.0, 10.0, kFlutterPointerDeviceKindStylus,
179 kDefaultPointerDeviceId, 0, 0, 0))
183 EXPECT_CALL(delegate,
184 OnPointerDown(10.0, 10.0, kFlutterPointerDeviceKindMouse,
185 kDefaultPointerDeviceId,
186 kFlutterPointerButtonMousePrimary, 0, 0))
188 EXPECT_CALL(delegate,
189 OnPointerDown(10.0, 10.0, kFlutterPointerDeviceKindTouch,
190 kDefaultPointerDeviceId,
191 kFlutterPointerButtonMousePrimary, 0, 0))
193 EXPECT_CALL(delegate,
194 OnPointerDown(10.0, 10.0, kFlutterPointerDeviceKindStylus,
195 kDefaultPointerDeviceId,
196 kFlutterPointerButtonMousePrimary, 0, 0))
200 EXPECT_CALL(delegate, OnPointerUp(10.0, 10.0, kFlutterPointerDeviceKindMouse,
201 kDefaultPointerDeviceId,
202 kFlutterPointerButtonMousePrimary))
204 EXPECT_CALL(delegate, OnPointerUp(10.0, 10.0, kFlutterPointerDeviceKindTouch,
205 kDefaultPointerDeviceId,
206 kFlutterPointerButtonMousePrimary))
208 EXPECT_CALL(delegate, OnPointerUp(10.0, 10.0, kFlutterPointerDeviceKindStylus,
209 kDefaultPointerDeviceId,
210 kFlutterPointerButtonMousePrimary))
214 EXPECT_CALL(delegate,
215 OnPointerLeave(10.0, 10.0, kFlutterPointerDeviceKindMouse,
216 kDefaultPointerDeviceId))
218 EXPECT_CALL(delegate,
219 OnPointerLeave(10.0, 10.0, kFlutterPointerDeviceKindTouch,
220 kDefaultPointerDeviceId))
222 EXPECT_CALL(delegate,
223 OnPointerLeave(10.0, 10.0, kFlutterPointerDeviceKindStylus,
224 kDefaultPointerDeviceId))
227 win32window.
OnPointerMove(10.0, 10.0, kFlutterPointerDeviceKindMouse,
228 kDefaultPointerDeviceId, 0, 0, 0);
229 win32window.
OnPointerDown(10.0, 10.0, kFlutterPointerDeviceKindMouse,
230 kDefaultPointerDeviceId, WM_LBUTTONDOWN, 0, 0);
231 win32window.
OnPointerUp(10.0, 10.0, kFlutterPointerDeviceKindMouse,
232 kDefaultPointerDeviceId, WM_LBUTTONDOWN);
233 win32window.
OnPointerLeave(10.0, 10.0, kFlutterPointerDeviceKindMouse,
234 kDefaultPointerDeviceId);
237 win32window.
OnPointerMove(10.0, 10.0, kFlutterPointerDeviceKindTouch,
238 kDefaultPointerDeviceId, 0, 0, 0);
239 win32window.
OnPointerDown(10.0, 10.0, kFlutterPointerDeviceKindTouch,
240 kDefaultPointerDeviceId, WM_LBUTTONDOWN, 0, 0);
241 win32window.
OnPointerUp(10.0, 10.0, kFlutterPointerDeviceKindTouch,
242 kDefaultPointerDeviceId, WM_LBUTTONDOWN);
243 win32window.
OnPointerLeave(10.0, 10.0, kFlutterPointerDeviceKindTouch,
244 kDefaultPointerDeviceId);
247 win32window.
OnPointerMove(10.0, 10.0, kFlutterPointerDeviceKindStylus,
248 kDefaultPointerDeviceId, 0, 0, 0);
249 win32window.
OnPointerDown(10.0, 10.0, kFlutterPointerDeviceKindStylus,
250 kDefaultPointerDeviceId, WM_LBUTTONDOWN, 0, 0);
251 win32window.
OnPointerUp(10.0, 10.0, kFlutterPointerDeviceKindStylus,
252 kDefaultPointerDeviceId, WM_LBUTTONDOWN);
253 win32window.
OnPointerLeave(10.0, 10.0, kFlutterPointerDeviceKindStylus,
254 kDefaultPointerDeviceId);
261 TEST_F(FlutterWindowTest, OnStylusPointerDown) {
262 auto mock_proc_table = std::make_shared<MockWindowsProcTable>();
265 EXPECT_CALL(*mock_proc_table, GetPointerInfo(_, _))
266 .WillRepeatedly([](UINT32 pointer_id, POINTER_INFO* pointer_info) {
267 if (pointer_info !=
nullptr) {
268 pointer_info->pointerType = PT_PEN;
269 pointer_info->pointerId = pointer_id;
270 pointer_info->pointerFlags = POINTER_FLAG_INCONTACT;
275 EXPECT_CALL(*mock_proc_table, GetPointerPenInfo(_, _))
276 .WillRepeatedly([](UINT32 pointer_id, POINTER_PEN_INFO* pen_info) {
277 if (pen_info !=
nullptr) {
278 pen_info->pressure = 720;
279 pen_info->rotation = 0;
284 POINTER_INFO test_pointer_info = {};
285 BOOL result = mock_proc_table->GetPointerInfo(1, &test_pointer_info);
287 MockFlutterWindow win32window(100, 100, mock_proc_table);
288 MockWindowBindingHandlerDelegate delegate;
290 win32window.SetView(&delegate);
292 EXPECT_CALL(delegate,
293 OnPointerDown(10.0, 10.0, kFlutterPointerDeviceKindStylus,
294 kDefaultPointerDeviceId,
295 kFlutterPointerButtonMousePrimary, 720, 0))
298 UINT32 pointerId = 1;
299 WPARAM wparam =
static_cast<WPARAM
>(pointerId);
300 LPARAM lparam = MAKELPARAM(10, 10);
302 win32window.InjectWindowMessage(WM_POINTERDOWN, wparam, lparam);
305 TEST_F(FlutterWindowTest, OnStylusPointerMove) {
306 auto mock_proc_table = std::make_shared<MockWindowsProcTable>();
308 EXPECT_CALL(*mock_proc_table, GetPointerInfo(_, _))
309 .WillRepeatedly([](UINT32 pointer_id, POINTER_INFO* pointer_info) {
310 if (pointer_info !=
nullptr) {
311 pointer_info->pointerType = PT_PEN;
312 pointer_info->pointerId = pointer_id;
313 pointer_info->pointerFlags =
314 POINTER_FLAG_INCONTACT | POINTER_FLAG_UPDATE;
319 EXPECT_CALL(*mock_proc_table, GetPointerPenInfo(_, _))
320 .WillRepeatedly([](UINT32 pointer_id, POINTER_PEN_INFO* pen_info) {
321 if (pen_info !=
nullptr) {
322 pen_info->pressure = 720;
323 pen_info->rotation = 10;
328 MockFlutterWindow win32window(100, 100, mock_proc_table);
329 MockWindowBindingHandlerDelegate delegate;
330 win32window.SetView(&delegate);
332 EXPECT_CALL(delegate, OnPointerMove(15, 20, kFlutterPointerDeviceKindStylus,
333 kDefaultPointerDeviceId, 10, 720, 0))
336 UINT32 pointerId = 1;
337 WPARAM wparam =
static_cast<WPARAM
>(pointerId);
338 LPARAM lparam = MAKELPARAM(15, 20);
340 win32window.InjectWindowMessage(WM_POINTERUPDATE, wparam, lparam);
343 TEST_F(FlutterWindowTest, OnStylusPointerUp) {
344 auto mock_proc_table = std::make_shared<MockWindowsProcTable>();
346 EXPECT_CALL(*mock_proc_table, GetPointerInfo(_, _))
347 .WillRepeatedly([](UINT32 pointer_id, POINTER_INFO* pointer_info) {
348 if (pointer_info !=
nullptr) {
349 pointer_info->pointerType = PT_PEN;
350 pointer_info->pointerId = pointer_id;
351 pointer_info->pointerFlags = POINTER_FLAG_UP;
356 EXPECT_CALL(*mock_proc_table, GetPointerPenInfo(_, _))
357 .WillRepeatedly([](UINT32 pointer_id, POINTER_PEN_INFO* pen_info) {
358 if (pen_info !=
nullptr) {
359 pen_info->pressure = 720;
360 pen_info->rotation = 0;
365 MockFlutterWindow win32window(100, 100, mock_proc_table);
366 MockWindowBindingHandlerDelegate delegate;
367 win32window.SetView(&delegate);
369 EXPECT_CALL(delegate, OnPointerUp(25, 30, kFlutterPointerDeviceKindStylus,
370 kDefaultPointerDeviceId,
371 kFlutterPointerButtonMousePrimary))
374 UINT32 pointerId = 1;
375 WPARAM wparam =
static_cast<WPARAM
>(pointerId);
376 LPARAM lparam = MAKELPARAM(25, 30);
378 win32window.InjectWindowMessage(WM_POINTERUP, wparam, lparam);
381 TEST_F(FlutterWindowTest, OnStylusPointerLeave) {
382 auto mock_proc_table = std::make_shared<MockWindowsProcTable>();
384 EXPECT_CALL(*mock_proc_table, GetPointerInfo(_, _))
385 .WillRepeatedly([](UINT32 pointer_id, POINTER_INFO* pointer_info) {
386 if (pointer_info !=
nullptr) {
387 pointer_info->pointerType = PT_PEN;
388 pointer_info->pointerId = pointer_id;
389 pointer_info->pointerFlags = POINTER_FLAG_UP;
394 EXPECT_CALL(*mock_proc_table, GetPointerPenInfo(_, _))
395 .WillRepeatedly([](UINT32 pointer_id, POINTER_PEN_INFO* pen_info) {
396 if (pen_info !=
nullptr) {
397 pen_info->pressure = 720;
398 pen_info->rotation = 0;
403 MockFlutterWindow win32window(100, 100, mock_proc_table);
404 MockWindowBindingHandlerDelegate delegate;
405 win32window.SetView(&delegate);
407 EXPECT_CALL(delegate, OnPointerLeave(35, 40, kFlutterPointerDeviceKindStylus,
408 kDefaultPointerDeviceId))
411 UINT32 pointerId = 1;
412 WPARAM wparam =
static_cast<WPARAM
>(pointerId);
413 LPARAM lparam = MAKELPARAM(35, 40);
415 win32window.InjectWindowMessage(WM_POINTERLEAVE, wparam, lparam);
418 TEST_F(FlutterWindowTest, OnStylusPointerHover) {
421 auto mock_proc_table = std::make_shared<MockWindowsProcTable>();
423 EXPECT_CALL(*mock_proc_table, GetPointerInfo(_, _))
424 .WillRepeatedly([](UINT32 pointer_id, POINTER_INFO* pointer_info) {
425 if (pointer_info !=
nullptr) {
426 pointer_info->pointerId = 1;
427 pointer_info->pointerType = PT_PEN;
429 pointer_info->pointerFlags = POINTER_FLAG_UPDATE;
430 pointer_info->ptPixelLocation.x = 45;
431 pointer_info->ptPixelLocation.y = 50;
436 EXPECT_CALL(*mock_proc_table, GetPointerPenInfo(_, _))
437 .WillRepeatedly([](UINT32 pointer_id, POINTER_PEN_INFO* pen_info) {
438 if (pen_info !=
nullptr) {
439 pen_info->pressure = 0;
440 pen_info->rotation = 0;
445 MockFlutterWindow win32window(100, 100, mock_proc_table);
446 MockWindowBindingHandlerDelegate delegate;
447 win32window.SetView(&delegate);
450 EXPECT_CALL(delegate,
451 OnPointerDown(45, 50, kFlutterPointerDeviceKindStylus, 0,
452 kFlutterPointerButtonMousePrimary, 0, 0))
455 UINT32 pointerId = 1;
456 WPARAM wparam =
static_cast<WPARAM
>(pointerId);
457 LPARAM lparam = MAKELPARAM(45, 50);
458 win32window.InjectWindowMessage(WM_POINTERDOWN, wparam, lparam);
461 EXPECT_CALL(delegate, OnPointerMove(45, 50, kFlutterPointerDeviceKindStylus,
466 win32window.InjectWindowMessage(WM_POINTERUPDATE, wparam, lparam);
469 TEST_F(FlutterWindowTest, OnMousePointerDown) {
470 auto mock_proc_table = std::make_shared<MockWindowsProcTable>();
472 EXPECT_CALL(*mock_proc_table, GetPointerInfo(_, _))
473 .WillRepeatedly([](UINT32 pointer_id, POINTER_INFO* pointer_info) {
474 if (pointer_info !=
nullptr) {
475 pointer_info->pointerType = PT_MOUSE;
476 pointer_info->pointerId = pointer_id;
477 pointer_info->pointerFlags = POINTER_FLAG_INCONTACT;
482 MockFlutterWindow win32window(100, 100, mock_proc_table);
483 MockWindowBindingHandlerDelegate delegate;
484 win32window.SetView(&delegate);
486 EXPECT_CALL(delegate, OnPointerDown(45, 50, kFlutterPointerDeviceKindMouse,
487 kDefaultPointerDeviceId,
488 kFlutterPointerButtonMousePrimary, 0, 0))
491 UINT32 pointerId = 1;
492 WPARAM wparam =
static_cast<WPARAM
>(pointerId);
493 LPARAM lparam = MAKELPARAM(45, 50);
495 win32window.InjectWindowMessage(WM_POINTERDOWN, wparam, lparam);
498 TEST_F(FlutterWindowTest, OnTouchPointerDown) {
499 auto mock_proc_table = std::make_shared<MockWindowsProcTable>();
501 EXPECT_CALL(*mock_proc_table, GetPointerInfo(_, _))
502 .WillRepeatedly([](UINT32 pointer_id, POINTER_INFO* pointer_info) {
503 if (pointer_info !=
nullptr) {
504 pointer_info->pointerType = PT_TOUCH;
505 pointer_info->pointerId = pointer_id;
506 pointer_info->pointerFlags = POINTER_FLAG_INCONTACT;
511 MockFlutterWindow win32window(100, 100, mock_proc_table);
512 MockWindowBindingHandlerDelegate delegate;
513 win32window.SetView(&delegate);
515 EXPECT_CALL(delegate, OnPointerDown(55, 60, kFlutterPointerDeviceKindTouch,
516 kDefaultPointerDeviceId,
517 kFlutterPointerButtonMousePrimary, 0, 0))
520 UINT32 pointerId = 1;
521 WPARAM wparam =
static_cast<WPARAM
>(pointerId);
522 LPARAM lparam = MAKELPARAM(55, 60);
524 win32window.InjectWindowMessage(WM_POINTERDOWN, wparam, lparam);
529 TEST_F(FlutterWindowTest, OnScrollCallsGetScrollOffsetMultiplier) {
530 MockFlutterWindow win32window;
531 MockWindowBindingHandlerDelegate delegate;
532 EXPECT_CALL(win32window, OnWindowStateEvent).Times(AnyNumber());
533 win32window.SetView(&delegate);
535 EXPECT_CALL(win32window, GetWindowHandle).WillOnce([&win32window]() {
536 return win32window.FlutterWindow::GetWindowHandle();
538 EXPECT_CALL(win32window, GetScrollOffsetMultiplier).WillOnce(Return(120.0f));
540 EXPECT_CALL(delegate,
541 OnScroll(_, _, 0, 0, 120.0f, kFlutterPointerDeviceKindMouse,
542 kDefaultPointerDeviceId))
545 win32window.OnScroll(0.0f, 0.0f, kFlutterPointerDeviceKindMouse,
546 kDefaultPointerDeviceId);
549 TEST_F(FlutterWindowTest, OnWindowRepaint) {
550 MockFlutterWindow win32window;
551 MockWindowBindingHandlerDelegate delegate;
552 EXPECT_CALL(win32window, OnWindowStateEvent).Times(AnyNumber());
553 win32window.SetView(&delegate);
555 EXPECT_CALL(delegate, OnWindowRepaint()).Times(1);
557 win32window.InjectWindowMessage(WM_PAINT, 0, 0);
560 TEST_F(FlutterWindowTest, OnThemeChange) {
561 MockFlutterWindow win32window;
562 MockWindowBindingHandlerDelegate delegate;
563 EXPECT_CALL(win32window, OnWindowStateEvent).Times(AnyNumber());
564 win32window.SetView(&delegate);
566 EXPECT_CALL(delegate, OnHighContrastChanged).Times(1);
568 win32window.InjectWindowMessage(WM_THEMECHANGED, 0, 0);
574 TEST_F(FlutterWindowTest, AccessibilityNodeWithoutView) {
575 MockFlutterWindow win32window;
577 EXPECT_EQ(win32window.GetNativeViewAccessible(),
nullptr);
583 std::unique_ptr<FlutterWindowsEngine> engine =
584 FlutterWindowsEngineBuilder{GetContext()}.Build();
585 auto win32window = std::make_unique<MockFlutterWindow>();
586 EXPECT_CALL(*win32window.get(), GetAxFragmentRootDelegate())
587 .WillRepeatedly(Return(
nullptr));
588 EXPECT_CALL(*win32window.get(), OnWindowStateEvent).Times(AnyNumber());
589 EXPECT_CALL(*win32window.get(), GetWindowHandle).Times(AnyNumber());
590 MockFlutterWindowsView view{engine.get(), std::move(win32window)};
591 std::wstring
message = L
"Test alert";
592 EXPECT_CALL(view, NotifyWinEventWrapper(_, ax::mojom::Event::kAlert))
597 VARIANT
self{.vt = VT_I4, .lVal = CHILDID_SELF};
599 alert->get_accName(
self, &strptr);
602 alert->get_accDescription(
self, &strptr);
605 alert->get_accValue(
self, &strptr);
609 alert->get_accRole(
self, &role);
610 EXPECT_EQ(role.vt, VT_I4);
611 EXPECT_EQ(role.lVal, ROLE_SYSTEM_ALERT);
614 TEST_F(FlutterWindowTest, LifecycleFocusMessages) {
615 MockFlutterWindow win32window;
616 EXPECT_CALL(win32window, GetWindowHandle)
617 .WillRepeatedly(Return(
reinterpret_cast<HWND
>(1)));
618 MockWindowBindingHandlerDelegate delegate;
621 EXPECT_CALL(delegate, OnWindowStateEvent)
625 EXPECT_CALL(win32window, OnWindowStateEvent)
627 win32window.FlutterWindow::OnWindowStateEvent(event);
629 EXPECT_CALL(win32window, OnResize).Times(AnyNumber());
631 win32window.SetView(&delegate);
633 win32window.InjectWindowMessage(WM_SIZE, 0, 0);
636 win32window.InjectWindowMessage(WM_SIZE, 0, MAKEWORD(1, 1));
639 EXPECT_CALL(delegate, OnFocus(Eq(FlutterViewFocusState::kFocused),
640 Eq(FlutterViewFocusDirection::kUndefined)))
642 win32window.InjectWindowMessage(WM_SETFOCUS, 0, 0);
645 EXPECT_CALL(delegate, OnFocus(Eq(FlutterViewFocusState::kUnfocused),
646 Eq(FlutterViewFocusDirection::kUndefined)))
648 win32window.InjectWindowMessage(WM_KILLFOCUS, 0, 0);
652 TEST_F(FlutterWindowTest, CachedLifecycleMessage) {
653 MockFlutterWindow win32window;
654 EXPECT_CALL(win32window, GetWindowHandle)
655 .WillRepeatedly(Return(
reinterpret_cast<HWND
>(1)));
656 EXPECT_CALL(win32window, OnWindowStateEvent)
658 win32window.FlutterWindow::OnWindowStateEvent(event);
660 EXPECT_CALL(win32window, OnResize).Times(1);
663 win32window.InjectWindowMessage(WM_SIZE, 0, MAKEWORD(1, 1));
666 win32window.InjectWindowMessage(WM_SETFOCUS, 0, 0);
668 MockWindowBindingHandlerDelegate delegate;
669 bool focused =
false;
670 bool restored =
false;
671 EXPECT_CALL(delegate, OnWindowStateEvent)
680 EXPECT_CALL(delegate, OnFocus(Eq(FlutterViewFocusState::kFocused),
681 Eq(FlutterViewFocusDirection::kUndefined)))
683 win32window.SetView(&delegate);
684 EXPECT_TRUE(focused);
685 EXPECT_TRUE(restored);
virtual void OnPointerMove(double x, double y, FlutterPointerDeviceKind device_kind, int32_t device_id, uint32_t rotation, uint32_t pressure, int modifiers_state)
virtual void OnPointerLeave(double x, double y, FlutterPointerDeviceKind device_kind, int32_t device_id)
virtual bool OnBitmapSurfaceUpdated(const void *allocation, size_t row_bytes, size_t height) override
virtual void OnPointerDown(double x, double y, FlutterPointerDeviceKind device_kind, int32_t device_id, UINT button, uint32_t rotation, uint32_t pressure)
virtual void OnPointerUp(double x, double y, FlutterPointerDeviceKind device_kind, int32_t device_id, UINT button)
virtual void SetView(WindowBindingHandlerDelegate *view) override
virtual float GetDpiScale() override
FlutterWindowsView(FlutterViewId view_id, FlutterWindowsEngine *engine, std::unique_ptr< WindowBindingHandler > window_binding, bool is_sized_to_content, const BoxConstraints &box_constraints, FlutterWindowsViewSizingDelegate *sizing_delegate=nullptr, std::shared_ptr< WindowsProcTable > windows_proc_table=nullptr)
MOCK_METHOD(void, NotifyWinEventWrapper,(ui::AXPlatformNodeWin *, ax::mojom::Event),(override))
MockFlutterWindowsView(FlutterWindowsEngine *engine, std::unique_ptr< WindowBindingHandler > wbh)
TEST_F(AccessibilityPluginTest, DirectAnnounceCall)
WindowStateEvent
An event representing a change in window state that may update the.
constexpr FlutterViewId kImplicitViewId