5 #include "flutter/shell/platform/windows/testing/flutter_windows_engine_builder.h"
6 #include "flutter/shell/platform/windows/testing/windows_test.h"
8 #include "gtest/gtest.h"
15 class WindowManagerTest :
public WindowsTest {
17 WindowManagerTest() =
default;
18 virtual ~WindowManagerTest() =
default;
21 void SetUp()
override {
22 auto& context = GetContext();
23 FlutterWindowsEngineBuilder builder(context);
24 ::CoInitializeEx(
nullptr, COINIT_APARTMENTTHREADED);
26 engine_ = builder.Build();
29 engine_->SetRootIsolateCreateCallback(context.GetRootIsolateCallback());
30 ASSERT_TRUE(engine_->Run(
"testWindowController"));
32 bool signalled =
false;
33 context.AddNativeFunction(
34 "Signal", CREATE_NATIVE_ENTRY([&](Dart_NativeArguments args) {
39 engine_->task_runner()->ProcessTasks();
43 void TearDown()
override { engine_->Stop(); }
45 int64_t engine_id() {
return reinterpret_cast<int64_t
>(engine_.get()); }
47 RegularWindowCreationRequest* regular_creation_request() {
48 return ®ular_creation_request_;
52 std::unique_ptr<FlutterWindowsEngine> engine_;
53 std::optional<flutter::Isolate> isolate_;
54 RegularWindowCreationRequest regular_creation_request_{
57 .has_preferred_view_size =
true,
58 .preferred_view_width = 800,
59 .preferred_view_height = 600,
63 FML_DISALLOW_COPY_AND_ASSIGN(WindowManagerTest);
68 TEST_F(WindowManagerTest, WindowingInitialize) {
71 static bool received_message =
false;
76 const int64_t view_id =
78 engine_id(), regular_creation_request());
80 engine_id(), view_id));
82 EXPECT_TRUE(received_message);
85 TEST_F(WindowManagerTest, CreateRegularWindow) {
88 const int64_t view_id =
90 engine_id(), regular_creation_request());
91 EXPECT_EQ(view_id, 0);
94 TEST_F(WindowManagerTest, GetWindowHandle) {
97 const int64_t view_id =
99 engine_id(), regular_creation_request());
100 const HWND window_handle =
103 EXPECT_NE(window_handle,
nullptr);
106 TEST_F(WindowManagerTest, GetWindowSize) {
109 const int64_t view_id =
111 engine_id(), regular_creation_request());
112 const HWND window_handle =
119 EXPECT_EQ(size.
width,
120 regular_creation_request()->preferred_size.preferred_view_width);
122 regular_creation_request()->preferred_size.preferred_view_height);
125 TEST_F(WindowManagerTest, SetWindowSize) {
128 const int64_t view_id =
130 engine_id(), regular_creation_request());
131 const HWND window_handle =
138 .preferred_view_width = 640,
139 .preferred_view_height = 480,
146 EXPECT_EQ(actual_size.
width, 640);
147 EXPECT_EQ(actual_size.
height, 480);
150 TEST_F(WindowManagerTest, CanConstrainByMinimiumSize) {
153 const int64_t view_id =
155 engine_id(), regular_creation_request());
156 const HWND window_handle =
160 .view_min_width = 900,
161 .view_min_height = 700,
162 .view_max_width = 10000,
163 .view_max_height = 10000};
169 EXPECT_EQ(actual_size.
width, 900);
170 EXPECT_EQ(actual_size.
height, 700);
173 TEST_F(WindowManagerTest, CanConstrainByMaximumSize) {
176 const int64_t view_id =
178 engine_id(), regular_creation_request());
179 const HWND window_handle =
184 .view_min_height = 0,
185 .view_max_width = 500,
186 .view_max_height = 500};
192 EXPECT_EQ(actual_size.
width, 500);
193 EXPECT_EQ(actual_size.
height, 500);
196 TEST_F(WindowManagerTest, CanFullscreenWindow) {
199 const int64_t view_id =
201 engine_id(), regular_creation_request());
202 const HWND window_handle =
209 int screen_width = GetSystemMetrics(SM_CXSCREEN);
210 int screen_height = GetSystemMetrics(SM_CYSCREEN);
213 EXPECT_EQ(actual_size.
width, screen_width);
214 EXPECT_EQ(actual_size.
height, screen_height);
219 TEST_F(WindowManagerTest, CanUnfullscreenWindow) {
222 const int64_t view_id =
224 engine_id(), regular_creation_request());
225 const HWND window_handle =
232 request.fullscreen =
false;
237 EXPECT_EQ(actual_size.
width, 800);
238 EXPECT_EQ(actual_size.
height, 600);
243 TEST_F(WindowManagerTest, CanSetWindowSizeWhileFullscreen) {
246 const int64_t view_id =
248 engine_id(), regular_creation_request());
249 const HWND window_handle =
259 .preferred_view_width = 500,
260 .preferred_view_height = 500,
265 request.fullscreen =
false;
270 EXPECT_EQ(actual_size.
width, 500);
271 EXPECT_EQ(actual_size.
height, 500);
274 TEST_F(WindowManagerTest, CanSetWindowConstraintsWhileFullscreen) {
277 const int64_t view_id =
279 engine_id(), regular_creation_request());
280 const HWND window_handle =
289 .view_min_height = 0,
290 .view_max_width = 500,
291 .view_max_height = 500};
295 request.fullscreen =
false;
300 EXPECT_EQ(actual_size.
width, 500);
301 EXPECT_EQ(actual_size.
height, 500);
304 TEST_F(WindowManagerTest, CreateModelessDialogWindow) {
308 .preferred_view_width = 800,
309 .preferred_view_height = 600},
310 .preferred_constraints = {.has_view_constraints =
false},
311 .title = L
"Hello World",
312 .parent_or_null =
nullptr};
313 const int64_t view_id =
315 engine_id(), &creation_request);
316 EXPECT_EQ(view_id, 0);
319 TEST_F(WindowManagerTest, CreateModalDialogWindow) {
322 const int64_t parent_view_id =
324 engine_id(), regular_creation_request());
325 const HWND parent_window_handle =
327 engine_id(), parent_view_id);
333 .preferred_view_width = 800,
334 .preferred_view_height = 600,
336 .preferred_constraints = {.has_view_constraints =
false},
337 .title = L
"Hello World",
338 .parent_or_null = parent_window_handle};
340 const int64_t view_id =
342 engine_id(), &creation_request);
343 EXPECT_EQ(view_id, 1);
345 const HWND window_handle =
350 parent_window_handle);
353 TEST_F(WindowManagerTest, DialogCanNeverBeFullscreen) {
358 .preferred_view_width = 800,
359 .preferred_view_height = 600},
360 .preferred_constraints = {.has_view_constraints =
false},
361 .title = L
"Hello World",
362 .parent_or_null =
nullptr};
364 const int64_t view_id =
366 engine_id(), &creation_request);
367 const HWND window_handle =
HWND GetWindowHandle() const
HostWindow * GetOwnerWindow() const
static HostWindow * GetThisFromHandle(HWND hwnd)
TEST_F(AccessibilityPluginTest, DirectAnnounceCall)
WindowSizeRequest preferred_size
bool has_view_constraints
bool has_preferred_view_size
void(* on_message)(WindowsMessage *)
void InternalFlutterWindows_WindowManager_Initialize(int64_t engine_id, const flutter::WindowingInitRequest *request)
void InternalFlutterWindows_WindowManager_SetWindowConstraints(HWND hwnd, const flutter::WindowConstraints *constraints)
bool InternalFlutterWindows_WindowManager_GetFullscreen(HWND hwnd)
void InternalFlutterWindows_WindowManager_SetWindowSize(HWND hwnd, const flutter::WindowSizeRequest *size)
FlutterViewId InternalFlutterWindows_WindowManager_CreateRegularWindow(int64_t engine_id, const flutter::RegularWindowCreationRequest *request)
FLUTTER_EXPORT FlutterViewId InternalFlutterWindows_WindowManager_CreateDialogWindow(int64_t engine_id, const flutter::DialogWindowCreationRequest *request)
void InternalFlutterWindows_WindowManager_SetFullscreen(HWND hwnd, const flutter::FullscreenRequest *request)
flutter::ActualWindowSize InternalFlutterWindows_WindowManager_GetWindowContentSize(HWND hwnd)
HWND InternalFlutterWindows_WindowManager_GetTopLevelWindowHandle(int64_t engine_id, FlutterViewId view_id)