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 WindowCreationRequest* creation_request() {
return &creation_request_; }
50 std::unique_ptr<FlutterWindowsEngine> engine_;
51 std::optional<flutter::Isolate> isolate_;
52 WindowCreationRequest creation_request_{
55 .has_preferred_view_size =
true,
56 .preferred_view_width = 800,
57 .preferred_view_height = 600,
61 FML_DISALLOW_COPY_AND_ASSIGN(WindowManagerTest);
66 TEST_F(WindowManagerTest, WindowingInitialize) {
69 static bool received_message =
false;
74 const int64_t view_id =
76 engine_id(), creation_request());
78 engine_id(), view_id));
80 EXPECT_TRUE(received_message);
83 TEST_F(WindowManagerTest, HasTopLevelWindows) {
86 bool has_top_level_windows =
88 EXPECT_FALSE(has_top_level_windows);
92 has_top_level_windows =
94 EXPECT_TRUE(has_top_level_windows);
97 TEST_F(WindowManagerTest, CreateRegularWindow) {
100 const int64_t view_id =
102 engine_id(), creation_request());
103 EXPECT_EQ(view_id, 0);
106 TEST_F(WindowManagerTest, GetWindowHandle) {
109 const int64_t view_id =
111 engine_id(), creation_request());
112 const HWND window_handle =
115 EXPECT_NE(window_handle,
nullptr);
118 TEST_F(WindowManagerTest, GetWindowSize) {
121 const int64_t view_id =
123 engine_id(), creation_request());
124 const HWND window_handle =
131 EXPECT_EQ(size.
width,
132 creation_request()->preferred_size.preferred_view_width);
134 creation_request()->preferred_size.preferred_view_height);
137 TEST_F(WindowManagerTest, SetWindowSize) {
140 const int64_t view_id =
142 engine_id(), creation_request());
143 const HWND window_handle =
150 .preferred_view_width = 640,
151 .preferred_view_height = 480,
158 EXPECT_EQ(actual_size.
width, 640);
159 EXPECT_EQ(actual_size.
height, 480);
162 TEST_F(WindowManagerTest, CanConstrainByMinimiumSize) {
165 const int64_t view_id =
167 engine_id(), creation_request());
168 const HWND window_handle =
172 .view_min_width = 900,
173 .view_min_height = 700,
174 .view_max_width = 10000,
175 .view_max_height = 10000};
181 EXPECT_EQ(actual_size.
width, 900);
182 EXPECT_EQ(actual_size.
height, 700);
185 TEST_F(WindowManagerTest, CanConstrainByMaximumSize) {
188 const int64_t view_id =
190 engine_id(), creation_request());
191 const HWND window_handle =
196 .view_min_height = 0,
197 .view_max_width = 500,
198 .view_max_height = 500};
204 EXPECT_EQ(actual_size.
width, 500);
205 EXPECT_EQ(actual_size.
height, 500);
208 TEST_F(WindowManagerTest, CanFullscreenWindow) {
211 const int64_t view_id =
213 engine_id(), creation_request());
214 const HWND window_handle =
221 int screen_width = GetSystemMetrics(SM_CXSCREEN);
222 int screen_height = GetSystemMetrics(SM_CYSCREEN);
225 EXPECT_EQ(actual_size.
width, screen_width);
226 EXPECT_EQ(actual_size.
height, screen_height);
231 TEST_F(WindowManagerTest, CanUnfullscreenWindow) {
234 const int64_t view_id =
236 engine_id(), creation_request());
237 const HWND window_handle =
244 request.fullscreen =
false;
249 EXPECT_EQ(actual_size.
width, 800);
250 EXPECT_EQ(actual_size.
height, 600);
255 TEST_F(WindowManagerTest, CanSetWindowSizeWhileFullscreen) {
258 const int64_t view_id =
260 engine_id(), creation_request());
261 const HWND window_handle =
271 .preferred_view_width = 500,
272 .preferred_view_height = 500,
277 request.fullscreen =
false;
282 EXPECT_EQ(actual_size.
width, 500);
283 EXPECT_EQ(actual_size.
height, 500);
286 TEST_F(WindowManagerTest, CanSetWindowConstraintsWhileFullscreen) {
289 const int64_t view_id =
291 engine_id(), creation_request());
292 const HWND window_handle =
301 .view_min_height = 0,
302 .view_max_width = 500,
303 .view_max_height = 500};
307 request.fullscreen =
false;
312 EXPECT_EQ(actual_size.
width, 500);
313 EXPECT_EQ(actual_size.
height, 500);
TEST_F(CompositorOpenGLTest, CreateBackingStore)
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)
void InternalFlutterWindows_WindowManager_SetFullscreen(HWND hwnd, const flutter::FullscreenRequest *request)
flutter::ActualWindowSize InternalFlutterWindows_WindowManager_GetWindowContentSize(HWND hwnd)
bool InternalFlutterWindows_WindowManager_HasTopLevelWindows(int64_t engine_id)
FlutterViewId InternalFlutterWindows_WindowManager_CreateRegularWindow(int64_t engine_id, const flutter::WindowCreationRequest *request)
HWND InternalFlutterWindows_WindowManager_GetTopLevelWindowHandle(int64_t engine_id, FlutterViewId view_id)