88#include " flutter/shell/platform/embedder/test_utils/proc_table_replacement.h"
99#include " flutter/shell/platform/windows/flutter_windows_view.h"
1010#include " flutter/shell/platform/windows/testing/engine_modifier.h"
11+ #include " flutter/shell/platform/windows/testing/flutter_windows_engine_builder.h"
1112#include " flutter/shell/platform/windows/testing/mock_window_binding_handler.h"
1213#include " flutter/shell/platform/windows/testing/test_keyboard.h"
1314#include " flutter/shell/platform/windows/testing/windows_test.h"
2122namespace flutter {
2223namespace testing {
2324
24- namespace {
25-
26- // Returns an engine instance configured with dummy project path values.
27- std::unique_ptr<FlutterWindowsEngine> GetTestEngine () {
28- FlutterDesktopEngineProperties properties = {};
29- properties.assets_path = L" C:\\ foo\\ flutter_assets" ;
30- properties.icu_data_path = L" C:\\ foo\\ icudtl.dat" ;
31- properties.aot_library_path = L" C:\\ foo\\ aot.so" ;
32-
33- std::vector<const char *> test_arguments = {" arg1" , " arg2" };
34- properties.dart_entrypoint_argc = test_arguments.size ();
35- properties.dart_entrypoint_argv = test_arguments.data ();
36-
37- FlutterProjectBundle project (properties);
38- auto engine = std::make_unique<FlutterWindowsEngine>(project);
39-
40- EngineModifier modifier (engine.get ());
41- // Force the non-AOT path unless overridden by the test.
42- modifier.embedder_api ().RunsAOTCompiledDartCode = []() { return false ; };
43-
44- return engine;
45- }
46- } // namespace
47-
4825class FlutterWindowsEngineTest : public WindowsTest {};
4926
5027TEST_F (FlutterWindowsEngineTest, RunDoesExpectedInitialization) {
51- std::unique_ptr<FlutterWindowsEngine> engine = GetTestEngine ();
28+ FlutterWindowsEngineBuilder builder{GetContext ()};
29+ builder.AddDartEntrypointArgument (" arg1" );
30+ builder.AddDartEntrypointArgument (" arg2" );
31+
32+ std::unique_ptr<FlutterWindowsEngine> engine = builder.Build ();
5233 EngineModifier modifier (engine.get ());
5334
5435 // The engine should be run with expected configuration values.
@@ -67,8 +48,8 @@ TEST_F(FlutterWindowsEngineTest, RunDoesExpectedInitialization) {
6748 EXPECT_EQ (config->type , kOpenGL );
6849 EXPECT_EQ (user_data, engine_instance);
6950 // Spot-check arguments.
70- EXPECT_STREQ (args->assets_path , " C: \\ foo \\ flutter_assets " );
71- EXPECT_STREQ (args->icu_data_path , " C: \\ foo \\ icudtl.dat " );
51+ EXPECT_NE (args->assets_path , nullptr );
52+ EXPECT_NE (args->icu_data_path , nullptr );
7253 EXPECT_EQ (args->dart_entrypoint_argc , 2U );
7354 EXPECT_EQ (strcmp (args->dart_entrypoint_argv [0 ], " arg1" ), 0 );
7455 EXPECT_EQ (strcmp (args->dart_entrypoint_argv [1 ], " arg2" ), 0 );
@@ -159,7 +140,8 @@ TEST_F(FlutterWindowsEngineTest, RunDoesExpectedInitialization) {
159140}
160141
161142TEST_F (FlutterWindowsEngineTest, ConfiguresFrameVsync) {
162- std::unique_ptr<FlutterWindowsEngine> engine = GetTestEngine ();
143+ FlutterWindowsEngineBuilder builder{GetContext ()};
144+ std::unique_ptr<FlutterWindowsEngine> engine = builder.Build ();
163145 EngineModifier modifier (engine.get ());
164146 bool on_vsync_called = false ;
165147
@@ -185,7 +167,8 @@ TEST_F(FlutterWindowsEngineTest, ConfiguresFrameVsync) {
185167}
186168
187169TEST_F (FlutterWindowsEngineTest, RunWithoutANGLEUsesSoftware) {
188- std::unique_ptr<FlutterWindowsEngine> engine = GetTestEngine ();
170+ FlutterWindowsEngineBuilder builder{GetContext ()};
171+ std::unique_ptr<FlutterWindowsEngine> engine = builder.Build ();
189172 EngineModifier modifier (engine.get ());
190173
191174 modifier.embedder_api ().NotifyDisplayUpdate =
@@ -237,7 +220,8 @@ TEST_F(FlutterWindowsEngineTest, RunWithoutANGLEUsesSoftware) {
237220}
238221
239222TEST_F (FlutterWindowsEngineTest, SendPlatformMessageWithoutResponse) {
240- std::unique_ptr<FlutterWindowsEngine> engine = GetTestEngine ();
223+ FlutterWindowsEngineBuilder builder{GetContext ()};
224+ std::unique_ptr<FlutterWindowsEngine> engine = builder.Build ();
241225 EngineModifier modifier (engine.get ());
242226
243227 const char * channel = " test" ;
@@ -263,14 +247,10 @@ TEST_F(FlutterWindowsEngineTest, SendPlatformMessageWithoutResponse) {
263247}
264248
265249TEST_F (FlutterWindowsEngineTest, PlatformMessageRoundTrip) {
266- FlutterDesktopEngineProperties properties = {};
267- properties.assets_path = GetContext ().GetAssetsPath ().c_str ();
268- properties.icu_data_path = GetContext ().GetIcuDataPath ().c_str ();
269- properties.dart_entrypoint = " hiPlatformChannels" ;
270-
271- FlutterProjectBundle project (properties);
272- auto engine = std::make_unique<FlutterWindowsEngine>(project);
250+ FlutterWindowsEngineBuilder builder{GetContext ()};
251+ builder.SetDartEntrypoint (" hiPlatformChannels" );
273252
253+ std::unique_ptr<FlutterWindowsEngine> engine = builder.Build ();
274254 EngineModifier modifier (engine.get ());
275255 modifier.embedder_api ().RunsAOTCompiledDartCode = []() { return false ; };
276256
@@ -312,13 +292,10 @@ TEST_F(FlutterWindowsEngineTest, PlatformMessageRoundTrip) {
312292}
313293
314294TEST_F (FlutterWindowsEngineTest, PlatformMessageRespondOnDifferentThread) {
315- FlutterDesktopEngineProperties properties = {};
316- properties.assets_path = GetContext ().GetAssetsPath ().c_str ();
317- properties.icu_data_path = GetContext ().GetIcuDataPath ().c_str ();
318- properties.dart_entrypoint = " hiPlatformChannels" ;
295+ FlutterWindowsEngineBuilder builder{GetContext ()};
296+ builder.SetDartEntrypoint (" hiPlatformChannels" );
319297
320- FlutterProjectBundle project (properties);
321- auto engine = std::make_unique<FlutterWindowsEngine>(project);
298+ std::unique_ptr<FlutterWindowsEngine> engine = builder.Build ();
322299
323300 EngineModifier modifier (engine.get ());
324301 modifier.embedder_api ().RunsAOTCompiledDartCode = []() { return false ; };
@@ -366,7 +343,8 @@ TEST_F(FlutterWindowsEngineTest, PlatformMessageRespondOnDifferentThread) {
366343}
367344
368345TEST_F (FlutterWindowsEngineTest, SendPlatformMessageWithResponse) {
369- std::unique_ptr<FlutterWindowsEngine> engine = GetTestEngine ();
346+ FlutterWindowsEngineBuilder builder{GetContext ()};
347+ std::unique_ptr<FlutterWindowsEngine> engine = builder.Build ();
370348 EngineModifier modifier (engine.get ());
371349
372350 const char * channel = " test" ;
@@ -424,7 +402,8 @@ TEST_F(FlutterWindowsEngineTest, SendPlatformMessageWithResponse) {
424402}
425403
426404TEST_F (FlutterWindowsEngineTest, DispatchSemanticsAction) {
427- std::unique_ptr<FlutterWindowsEngine> engine = GetTestEngine ();
405+ FlutterWindowsEngineBuilder builder{GetContext ()};
406+ std::unique_ptr<FlutterWindowsEngine> engine = builder.Build ();
428407 EngineModifier modifier (engine.get ());
429408
430409 bool called = false ;
@@ -469,7 +448,8 @@ TEST_F(FlutterWindowsEngineTest, SetsThreadPriority) {
469448}
470449
471450TEST_F (FlutterWindowsEngineTest, AddPluginRegistrarDestructionCallback) {
472- std::unique_ptr<FlutterWindowsEngine> engine = GetTestEngine ();
451+ FlutterWindowsEngineBuilder builder{GetContext ()};
452+ std::unique_ptr<FlutterWindowsEngine> engine = builder.Build ();
473453 EngineModifier modifier (engine.get ());
474454
475455 MockEmbedderApiForKeyboard (modifier,
@@ -499,7 +479,8 @@ TEST_F(FlutterWindowsEngineTest, AddPluginRegistrarDestructionCallback) {
499479}
500480
501481TEST_F (FlutterWindowsEngineTest, ScheduleFrame) {
502- std::unique_ptr<FlutterWindowsEngine> engine = GetTestEngine ();
482+ FlutterWindowsEngineBuilder builder{GetContext ()};
483+ std::unique_ptr<FlutterWindowsEngine> engine = builder.Build ();
503484 EngineModifier modifier (engine.get ());
504485
505486 bool called = false ;
@@ -514,7 +495,8 @@ TEST_F(FlutterWindowsEngineTest, ScheduleFrame) {
514495}
515496
516497TEST_F (FlutterWindowsEngineTest, SetNextFrameCallback) {
517- std::unique_ptr<FlutterWindowsEngine> engine = GetTestEngine ();
498+ FlutterWindowsEngineBuilder builder{GetContext ()};
499+ std::unique_ptr<FlutterWindowsEngine> engine = builder.Build ();
518500 EngineModifier modifier (engine.get ());
519501
520502 bool called = false ;
@@ -529,14 +511,16 @@ TEST_F(FlutterWindowsEngineTest, SetNextFrameCallback) {
529511}
530512
531513TEST_F (FlutterWindowsEngineTest, GetExecutableName) {
532- std::unique_ptr<FlutterWindowsEngine> engine = GetTestEngine ();
514+ FlutterWindowsEngineBuilder builder{GetContext ()};
515+ std::unique_ptr<FlutterWindowsEngine> engine = builder.Build ();
533516 EXPECT_EQ (engine->GetExecutableName (), " flutter_windows_unittests.exe" );
534517}
535518
536519// Ensure that after setting or resetting the high contrast feature,
537520// the corresponding status flag can be retrieved from the engine.
538521TEST_F (FlutterWindowsEngineTest, UpdateHighContrastFeature) {
539- std::unique_ptr<FlutterWindowsEngine> engine = GetTestEngine ();
522+ FlutterWindowsEngineBuilder builder{GetContext ()};
523+ std::unique_ptr<FlutterWindowsEngine> engine = builder.Build ();
540524 EngineModifier modifier (engine.get ());
541525
542526 bool called = false ;
@@ -561,7 +545,8 @@ TEST_F(FlutterWindowsEngineTest, UpdateHighContrastFeature) {
561545}
562546
563547TEST_F (FlutterWindowsEngineTest, PostRasterThreadTask) {
564- std::unique_ptr<FlutterWindowsEngine> engine = GetTestEngine ();
548+ FlutterWindowsEngineBuilder builder{GetContext ()};
549+ std::unique_ptr<FlutterWindowsEngine> engine = builder.Build ();
565550 EngineModifier modifier (engine.get ());
566551
567552 modifier.embedder_api ().PostRenderThreadTask = MOCK_ENGINE_PROC (
@@ -586,20 +571,16 @@ class MockFlutterWindowsView : public FlutterWindowsView {
586571};
587572
588573TEST_F (FlutterWindowsEngineTest, AlertPlatformMessage) {
589- FlutterDesktopEngineProperties properties = {};
590- properties.assets_path = GetContext ().GetAssetsPath ().c_str ();
591- properties.icu_data_path = GetContext ().GetIcuDataPath ().c_str ();
592- properties.dart_entrypoint = " alertPlatformChannel" ;
593-
594- FlutterProjectBundle project (properties);
574+ FlutterWindowsEngineBuilder builder{GetContext ()};
575+ builder.SetDartEntrypoint (" alertPlatformChannel" );
595576
596577 auto window_binding_handler =
597578 std::make_unique<::testing::NiceMock<MockWindowBindingHandler>>();
598579 AccessibilityRootNode* root_node = AccessibilityRootNode::Create ();
599580 ON_CALL (*window_binding_handler, GetAccessibilityRootNode)
600581 .WillByDefault (::testing::Return (root_node));
601582 MockFlutterWindowsView view (std::move (window_binding_handler));
602- view.SetEngine (std::make_unique<FlutterWindowsEngine>(project ));
583+ view.SetEngine (builder. Build ( ));
603584 FlutterWindowsEngine* engine = view.GetEngine ();
604585
605586 EngineModifier modifier (engine);
0 commit comments