6#include "gtest/gtest.h"
14#define FLUTTER_NOINLINE __declspec(noinline)
16#define FLUTTER_NOINLINE __attribute__((noinline))
19using TestWindowProcDelegate = std::function<std::optional<
25bool TestWindowProcCallback(HWND hwnd,
31 TestWindowProcDelegate& delegate =
32 *
static_cast<TestWindowProcDelegate*
>(
user_data);
33 auto delegate_result = delegate(hwnd,
message, wparam, lparam);
34 if (delegate_result) {
35 *result = *delegate_result;
37 return delegate_result.has_value();
42bool TestWindowProcCallback2(HWND hwnd,
54TEST(WindowProcDelegateManagerTest, CallsCorrectly) {
59 TestWindowProcDelegate delegate = [&called, &dummy_hwnd](
63 EXPECT_EQ(hwnd, dummy_hwnd);
67 return std::optional<LRESULT>();
69 manager.RegisterTopLevelWindowProcDelegate(TestWindowProcCallback, &delegate);
70 auto result =
manager.OnTopLevelWindowProc(dummy_hwnd, 2, 3, 4);
76TEST(WindowProcDelegateManagerTest, ReplacementRegister) {
79 bool called_a =
false;
80 TestWindowProcDelegate delegate_a =
83 return std::optional<LRESULT>();
85 bool called_b =
false;
86 TestWindowProcDelegate delegate_b =
89 return std::optional<LRESULT>();
91 manager.RegisterTopLevelWindowProcDelegate(TestWindowProcCallback,
94 manager.RegisterTopLevelWindowProcDelegate(TestWindowProcCallback,
96 manager.OnTopLevelWindowProc(
nullptr, 0, 0, 0);
98 EXPECT_FALSE(called_a);
99 EXPECT_TRUE(called_b);
102TEST(WindowProcDelegateManagerTest, RegisterMultiple) {
105 bool called_a =
false;
106 TestWindowProcDelegate delegate_a =
109 return std::optional<LRESULT>();
111 bool called_b =
false;
112 TestWindowProcDelegate delegate_b =
115 return std::optional<LRESULT>();
117 manager.RegisterTopLevelWindowProcDelegate(TestWindowProcCallback,
120 manager.RegisterTopLevelWindowProcDelegate(TestWindowProcCallback2,
122 manager.OnTopLevelWindowProc(
nullptr, 0, 0, 0);
124 EXPECT_TRUE(called_a);
125 EXPECT_TRUE(called_b);
128TEST(WindowProcDelegateManagerTest, Ordered) {
130 LPARAM lparam) {
return 1; };
132 LPARAM lparam) {
return 2; };
139 manager.RegisterTopLevelWindowProcDelegate(TestWindowProcCallback2,
142 std::optional<LRESULT> result =
143 manager.OnTopLevelWindowProc(
nullptr, 0, 0, 0);
145 EXPECT_EQ(result, 1);
153 manager.RegisterTopLevelWindowProcDelegate(TestWindowProcCallback,
156 std::optional<LRESULT> result =
157 manager.OnTopLevelWindowProc(
nullptr, 0, 0, 0);
159 EXPECT_EQ(result, 2);
163TEST(WindowProcDelegateManagerTest, ConflictingDelegates) {
166 bool called_a =
false;
167 TestWindowProcDelegate delegate_a =
170 return std::optional<LRESULT>(1);
172 bool called_b =
false;
173 TestWindowProcDelegate delegate_b =
176 return std::optional<LRESULT>(1);
178 manager.RegisterTopLevelWindowProcDelegate(TestWindowProcCallback,
180 manager.RegisterTopLevelWindowProcDelegate(TestWindowProcCallback2,
182 auto result =
manager.OnTopLevelWindowProc(
nullptr, 0, 0, 0);
188 EXPECT_TRUE(called_a || called_b);
189 EXPECT_NE(called_a, called_b);
192TEST(WindowProcDelegateManagerTest, Unregister) {
196 TestWindowProcDelegate delegate = [&called](HWND hwnd,
UINT message,
199 return std::optional<LRESULT>();
201 manager.RegisterTopLevelWindowProcDelegate(TestWindowProcCallback, &delegate);
202 manager.UnregisterTopLevelWindowProcDelegate(TestWindowProcCallback);
203 auto result =
manager.OnTopLevelWindowProc(
nullptr, 0, 0, 0);
205 EXPECT_FALSE(result);
206 EXPECT_FALSE(called);
void RegisterTopLevelWindowProcDelegate(FlutterDesktopWindowProcCallback callback, void *user_data)
G_BEGIN_DECLS GBytes * message
TEST(NativeAssetsManagerTest, NoAvailableAssets)
it will be possible to load the file into Perfetto s trace viewer use test Running tests that layout and measure text will not yield consistent results across various platforms Enabling this option will make font resolution default to the Ahem test font on all disable asset Prevents usage of any non test fonts unless they were explicitly Loaded via prefetched default font manager