|
2 | 2 | // Use of this source code is governed by a BSD-style license that can be |
3 | 3 | // found in the LICENSE file. |
4 | 4 |
|
5 | | -#include "dart_api.h" |
6 | | -#include "runtime/dart_isolate.h" |
7 | 5 | #define FML_USED_ON_EMBEDDER |
8 | 6 |
|
9 | 7 | #include <memory> |
10 | 8 |
|
11 | 9 | #include "flutter/lib/ui/window/platform_configuration.h" |
12 | 10 |
|
13 | | -#include "flutter/fml/mapping.h" |
| 11 | +#include "flutter/common/task_runners.h" |
| 12 | +#include "flutter/fml/synchronization/waitable_event.h" |
| 13 | +#include "flutter/lib/ui/painting/vertices.h" |
14 | 14 | #include "flutter/runtime/dart_vm.h" |
| 15 | +#include "flutter/shell/common/shell_test.h" |
| 16 | +#include "flutter/shell/common/thread_host.h" |
15 | 17 | #include "flutter/testing/testing.h" |
16 | | -#include "gtest/gtest.h" |
17 | | -#include "lib/ui/text/font_collection.h" |
18 | 18 |
|
19 | 19 | namespace flutter { |
20 | 20 | namespace testing { |
@@ -48,29 +48,91 @@ class DummyPlatformConfigurationClient : public PlatformConfigurationClient { |
48 | 48 | std::shared_ptr<const fml::Mapping> isolate_data_; |
49 | 49 | }; |
50 | 50 |
|
51 | | -// TEST(PlatformConfigurationTest, PlatformConfigurationInitialization) { |
52 | | -// DummyPlatformConfigurationClient client; |
53 | | -// PlatformConfiguration configuration(&client); |
54 | | - |
55 | | -// ASSERT_EQ(configuration.client(), &client); |
56 | | -// ASSERT_EQ(configuration.window()->viewport_metrics().device_pixel_ratio, 1.0); |
57 | | -// ASSERT_EQ(configuration.window()->viewport_metrics().physical_width, 0.0); |
58 | | -// ASSERT_EQ(configuration.window()->viewport_metrics().physical_height, 0.0); |
59 | | -// } |
60 | | - |
61 | | -// This doesn't actually work until I figure out how to instantiate an Isolate |
62 | | -// and set it up properly. |
63 | | - |
64 | | -// TEST(PlatformConfigurationTest, PlatformConfigurationWindowMetricsUpdate) { |
65 | | -// DummyPlatformConfigurationClient client; |
66 | | -// PlatformConfiguration configuration(&client); |
67 | | -// configuration.DidCreateIsolate(); |
68 | | -// |
69 | | -// configuration.window()->UpdateWindowMetrics(ViewportMetrics{2.0, 10.0, 20.0}); |
70 | | -// ASSERT_EQ(configuration.window()->viewport_metrics().device_pixel_ratio, 2.0); |
71 | | -// ASSERT_EQ(configuration.window()->viewport_metrics().physical_width, 10.0); |
72 | | -// ASSERT_EQ(configuration.window()->viewport_metrics().physical_height, 20.0); |
73 | | -// } |
| 51 | +TEST_F(ShellTest, PlatformConfigurationInitialization) { |
| 52 | + fml::AutoResetWaitableEvent message_latch; |
| 53 | + |
| 54 | + auto nativeValidateConfiguration = [&](Dart_NativeArguments args) { |
| 55 | + PlatformConfiguration* configuration = |
| 56 | + UIDartState::Current()->platform_configuration(); |
| 57 | + ASSERT_NE(configuration->window(), nullptr); |
| 58 | + ASSERT_EQ(configuration->window()->viewport_metrics().device_pixel_ratio, |
| 59 | + 1.0); |
| 60 | + ASSERT_EQ(configuration->window()->viewport_metrics().physical_width, 0.0); |
| 61 | + ASSERT_EQ(configuration->window()->viewport_metrics().physical_height, 0.0); |
| 62 | + |
| 63 | + message_latch.Signal(); |
| 64 | + }; |
| 65 | + |
| 66 | + Settings settings = CreateSettingsForFixture(); |
| 67 | + TaskRunners task_runners("test", // label |
| 68 | + GetCurrentTaskRunner(), // platform |
| 69 | + CreateNewThread(), // raster |
| 70 | + CreateNewThread(), // ui |
| 71 | + CreateNewThread() // io |
| 72 | + ); |
| 73 | + |
| 74 | + AddNativeCallback("ValidateConfiguration", |
| 75 | + CREATE_NATIVE_ENTRY(nativeValidateConfiguration)); |
| 76 | + |
| 77 | + std::unique_ptr<Shell> shell = |
| 78 | + CreateShell(std::move(settings), std::move(task_runners)); |
| 79 | + |
| 80 | + ASSERT_TRUE(shell->IsSetup()); |
| 81 | + auto run_configuration = RunConfiguration::InferFromSettings(settings); |
| 82 | + run_configuration.SetEntrypoint("validateConfiguration"); |
| 83 | + |
| 84 | + shell->RunEngine(std::move(run_configuration), [&](auto result) { |
| 85 | + ASSERT_EQ(result, Engine::RunStatus::Success); |
| 86 | + }); |
| 87 | + |
| 88 | + message_latch.Wait(); |
| 89 | + DestroyShell(std::move(shell), std::move(task_runners)); |
| 90 | +} |
| 91 | + |
| 92 | +TEST_F(ShellTest, PlatformConfigurationWindowMetricsUpdate) { |
| 93 | + fml::AutoResetWaitableEvent message_latch; |
| 94 | + |
| 95 | + auto nativeValidateConfiguration = [&](Dart_NativeArguments args) { |
| 96 | + PlatformConfiguration* configuration = |
| 97 | + UIDartState::Current()->platform_configuration(); |
| 98 | + |
| 99 | + ASSERT_NE(configuration->window(), nullptr); |
| 100 | + configuration->window()->UpdateWindowMetrics( |
| 101 | + ViewportMetrics{2.0, 10.0, 20.0}); |
| 102 | + ASSERT_EQ(configuration->window()->viewport_metrics().device_pixel_ratio, |
| 103 | + 2.0); |
| 104 | + ASSERT_EQ(configuration->window()->viewport_metrics().physical_width, 10.0); |
| 105 | + ASSERT_EQ(configuration->window()->viewport_metrics().physical_height, |
| 106 | + 20.0); |
| 107 | + |
| 108 | + message_latch.Signal(); |
| 109 | + }; |
| 110 | + |
| 111 | + Settings settings = CreateSettingsForFixture(); |
| 112 | + TaskRunners task_runners("test", // label |
| 113 | + GetCurrentTaskRunner(), // platform |
| 114 | + CreateNewThread(), // raster |
| 115 | + CreateNewThread(), // ui |
| 116 | + CreateNewThread() // io |
| 117 | + ); |
| 118 | + |
| 119 | + AddNativeCallback("ValidateConfiguration", |
| 120 | + CREATE_NATIVE_ENTRY(nativeValidateConfiguration)); |
| 121 | + |
| 122 | + std::unique_ptr<Shell> shell = |
| 123 | + CreateShell(std::move(settings), std::move(task_runners)); |
| 124 | + |
| 125 | + ASSERT_TRUE(shell->IsSetup()); |
| 126 | + auto run_configuration = RunConfiguration::InferFromSettings(settings); |
| 127 | + run_configuration.SetEntrypoint("validateConfiguration"); |
| 128 | + |
| 129 | + shell->RunEngine(std::move(run_configuration), [&](auto result) { |
| 130 | + ASSERT_EQ(result, Engine::RunStatus::Success); |
| 131 | + }); |
| 132 | + |
| 133 | + message_latch.Wait(); |
| 134 | + DestroyShell(std::move(shell), std::move(task_runners)); |
| 135 | +} |
74 | 136 |
|
75 | 137 | } // namespace testing |
76 | 138 | } // namespace flutter |
0 commit comments