9 #include "flutter/shell/platform/windows/client_wrapper/testing/stub_flutter_windows_api.h"
10 #include "gtest/gtest.h"
17 class TestWindowsApi :
public testing::StubFlutterWindowsApi {
19 void PluginRegistrarRegisterTopLevelWindowProcDelegate(
22 ++registered_delegate_count_;
23 last_registered_delegate_ = delegate;
27 void PluginRegistrarUnregisterTopLevelWindowProcDelegate(
29 --registered_delegate_count_;
32 int registered_delegate_count() {
return registered_delegate_count_; }
35 return last_registered_delegate_;
38 void* last_registered_user_data() {
return last_registered_user_data_; }
41 int registered_delegate_count_ = 0;
43 void* last_registered_user_data_ =
nullptr;
48 class TestPlugin :
public Plugin {
52 TestPlugin(PluginRegistrarWindows* registrar,
53 bool* registrar_valid_at_destruction)
54 : registrar_(registrar),
55 registrar_valid_at_destruction_(registrar_valid_at_destruction) {}
56 virtual ~TestPlugin() {
57 *registrar_valid_at_destruction_ = registrar_->GetView() !=
nullptr;
61 PluginRegistrarWindows* registrar_;
62 bool* registrar_valid_at_destruction_;
67 TEST(PluginRegistrarWindowsTest, GetView) {
68 testing::ScopedStubFlutterWindowsApi scoped_api_stub(
69 std::make_unique<TestWindowsApi>());
70 auto test_api =
static_cast<TestWindowsApi*
>(scoped_api_stub.stub());
73 EXPECT_NE(registrar.
GetView(),
nullptr);
77 TEST(PluginRegistrarWindowsTest, PluginDestroyedBeforeRegistrar) {
78 auto dummy_registrar_handle =
80 bool registrar_valid_at_destruction =
false;
84 auto plugin = std::make_unique<TestPlugin>(®istrar,
85 ®istrar_valid_at_destruction);
88 EXPECT_TRUE(registrar_valid_at_destruction);
91 TEST(PluginRegistrarWindowsTest, RegisterUnregister) {
92 testing::ScopedStubFlutterWindowsApi scoped_api_stub(
93 std::make_unique<TestWindowsApi>());
94 auto test_api =
static_cast<TestWindowsApi*
>(scoped_api_stub.stub());
100 return std::optional<LRESULT>();
103 EXPECT_EQ(test_api->registered_delegate_count(), 1);
107 EXPECT_EQ(test_api->registered_delegate_count(), 1);
112 EXPECT_EQ(test_api->registered_delegate_count(), 1);
115 EXPECT_EQ(test_api->registered_delegate_count(), 0);
117 EXPECT_NE(id_a, id_b);
120 TEST(PluginRegistrarWindowsTest, CallsRegisteredDelegates) {
121 testing::ScopedStubFlutterWindowsApi scoped_api_stub(
122 std::make_unique<TestWindowsApi>());
123 auto test_api =
static_cast<TestWindowsApi*
>(scoped_api_stub.stub());
128 bool called_a =
false;
130 HWND hwnd, UINT
message, WPARAM wparam,
133 EXPECT_EQ(hwnd, dummy_hwnd);
135 EXPECT_EQ(wparam, 3);
136 EXPECT_EQ(lparam, 4);
137 return std::optional<LRESULT>();
139 bool called_b =
false;
141 WPARAM wparam, LPARAM lparam) {
143 return std::optional<LRESULT>();
149 bool handled = test_api->last_registered_delegate()(
150 dummy_hwnd, 2, 3, 4, test_api->last_registered_user_data(), &result);
151 EXPECT_TRUE(called_a);
152 EXPECT_TRUE(called_b);
153 EXPECT_FALSE(handled);
156 TEST(PluginRegistrarWindowsTest, StopsOnceHandled) {
157 testing::ScopedStubFlutterWindowsApi scoped_api_stub(
158 std::make_unique<TestWindowsApi>());
159 auto test_api =
static_cast<TestWindowsApi*
>(scoped_api_stub.stub());
163 bool called_a =
false;
165 WPARAM wparam, LPARAM lparam) {
167 return std::optional<LRESULT>(7);
169 bool called_b =
false;
171 WPARAM wparam, LPARAM lparam) {
173 return std::optional<LRESULT>(7);
180 bool handled = test_api->last_registered_delegate()(
181 dummy_hwnd, 2, 3, 4, test_api->last_registered_user_data(), &result);
184 EXPECT_TRUE(called_a || called_b);
185 EXPECT_NE(called_a, called_b);
187 EXPECT_TRUE(handled);
188 EXPECT_EQ(result, 7);