Skip to content
This repository was archived by the owner on Feb 25, 2025. It is now read-only.

Commit b2c8f9b

Browse files
Unit test
1 parent a28f689 commit b2c8f9b

File tree

3 files changed

+75
-1
lines changed

3 files changed

+75
-1
lines changed

shell/platform/windows/fixtures/main.dart

Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -143,6 +143,22 @@ void enableLifecycleTest() async {
143143
await finished.future;
144144
}
145145

146+
@pragma('vm:entry-point')
147+
void enableLifecycleToFrom() async {
148+
ui.channelBuffers.setListener('flutter/lifecycle', (ByteData? data, ui.PlatformMessageResponseCallback callback) async {
149+
if (data != null) {
150+
ui.PlatformDispatcher.instance.sendPlatformMessage(
151+
'flutter/unittest',
152+
data,
153+
(ByteData? reply) {});
154+
}
155+
});
156+
final Completer<ByteData?> enabledLifecycle = Completer<ByteData?>();
157+
ui.PlatformDispatcher.instance.sendPlatformMessage('flutter/platform', ByteData.sublistView(utf8.encode('{"method":"System.initializationComplete"}')), (ByteData? data) {
158+
enabledLifecycle.complete(data);
159+
});
160+
}
161+
146162
@pragma('vm:entry-point')
147163
void customEntrypoint() {}
148164

shell/platform/windows/flutter_windows_engine_unittests.cc

Lines changed: 58 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -670,6 +670,15 @@ class MockWindowsLifecycleManager : public WindowsLifecycleManager {
670670
MOCK_METHOD4(DispatchMessage, void(HWND, UINT, WPARAM, LPARAM));
671671
MOCK_METHOD0(IsLastWindowOfProcess, bool(void));
672672
MOCK_METHOD1(SetLifecycleState, void(AppLifecycleState));
673+
674+
void BeginProcessingLifecycle() override {
675+
WindowsLifecycleManager::BeginProcessingLifecycle();
676+
if (begin_processing_callback) {
677+
begin_processing_callback();
678+
}
679+
}
680+
681+
std::function<void()> begin_processing_callback = nullptr;
673682
};
674683

675684
TEST_F(FlutterWindowsEngineTest, TestExit) {
@@ -1053,5 +1062,54 @@ TEST_F(FlutterWindowsEngineTest, EnableLifecycleState) {
10531062
}
10541063
}
10551064

1065+
TEST_F(FlutterWindowsEngineTest, LifecycleStateToFrom) {
1066+
FlutterWindowsEngineBuilder builder{GetContext()};
1067+
builder.SetDartEntrypoint("enableLifecycleToFrom");
1068+
bool enabled_lifecycle = false;
1069+
bool dart_responded = false;
1070+
1071+
auto window_binding_handler =
1072+
std::make_unique<::testing::NiceMock<MockWindowBindingHandler>>();
1073+
MockFlutterWindowsView view(std::move(window_binding_handler));
1074+
view.SetEngine(builder.Build());
1075+
FlutterWindowsEngine* engine = view.GetEngine();
1076+
1077+
EngineModifier modifier(engine);
1078+
modifier.embedder_api().RunsAOTCompiledDartCode = []() { return false; };
1079+
auto handler = std::make_unique<MockWindowsLifecycleManager>(engine);
1080+
ON_CALL(*handler, SetLifecycleState)
1081+
.WillByDefault([handler_ptr = handler.get()](AppLifecycleState state) {
1082+
handler_ptr->WindowsLifecycleManager::SetLifecycleState(state);
1083+
});
1084+
handler->begin_processing_callback = [&]() { enabled_lifecycle = true; };
1085+
modifier.SetLifecycleManager(std::move(handler));
1086+
1087+
auto binary_messenger =
1088+
std::make_unique<BinaryMessengerImpl>(engine->messenger());
1089+
binary_messenger->SetMessageHandler(
1090+
"flutter/unittest",
1091+
[&](const uint8_t* message, size_t message_size, BinaryReply reply) {
1092+
std::string contents(message, message + message_size);
1093+
EXPECT_NE(contents.find("AppLifecycleState."), std::string::npos);
1094+
dart_responded = true;
1095+
char response[] = "";
1096+
reply(reinterpret_cast<uint8_t*>(response), 0);
1097+
});
1098+
1099+
engine->Run();
1100+
1101+
while (!enabled_lifecycle) {
1102+
engine->task_runner()->ProcessTasks();
1103+
}
1104+
1105+
HWND hwnd = reinterpret_cast<HWND>(1);
1106+
view.OnWindowStateEvent(hwnd, WindowStateEvent::kShow);
1107+
view.OnWindowStateEvent(hwnd, WindowStateEvent::kHide);
1108+
1109+
while (!dart_responded) {
1110+
engine->task_runner()->ProcessTasks();
1111+
}
1112+
}
1113+
10561114
} // namespace testing
10571115
} // namespace flutter

shell/platform/windows/windows_lifecycle_manager.h

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -54,7 +54,7 @@ class WindowsLifecycleManager {
5454

5555
// Signal to start consuming WM_CLOSE messages and sending lifecycle state
5656
// update messages.
57-
void BeginProcessingLifecycle();
57+
virtual void BeginProcessingLifecycle();
5858

5959
// Update the app lifecycle state in response to a change in window state.
6060
// When the app lifecycle state actually changes, this sends a platform

0 commit comments

Comments
 (0)