@@ -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
675684TEST_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
0 commit comments