xref: /aosp_15_r20/external/cronet/base/win/message_window_unittest.cc (revision 6777b5387eb2ff775bb5750e3f5d96f37fb7352b)
1 // Copyright 2013 The Chromium Authors
2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file.
4 
5 #include "base/win/message_window.h"
6 
7 #include <windows.h>
8 
9 #include "base/functional/bind.h"
10 #include "base/strings/utf_string_conversions.h"
11 #include "base/uuid.h"
12 #include "testing/gmock/include/gmock/gmock.h"
13 #include "testing/gtest/include/gtest/gtest.h"
14 
15 // To avoid conflicts with the macro from the Windows SDK...
16 #undef FindWindow
17 
18 namespace base {
19 
20 namespace {
21 
HandleMessage(UINT message,WPARAM wparam,LPARAM lparam,LRESULT * result)22 bool HandleMessage(UINT message,
23                    WPARAM wparam,
24                    LPARAM lparam,
25                    LRESULT* result) {
26   // Return |wparam| as the result of WM_USER message.
27   if (message == WM_USER) {
28     *result = wparam;
29     return true;
30   }
31 
32   return false;
33 }
34 
35 }  // namespace
36 
37 // Checks that a window can be created.
TEST(MessageWindowTest,Create)38 TEST(MessageWindowTest, Create) {
39   win::MessageWindow window;
40   EXPECT_TRUE(window.Create(base::BindRepeating(&HandleMessage)));
41 }
42 
43 // Checks that a named window can be created.
TEST(MessageWindowTest,CreateNamed)44 TEST(MessageWindowTest, CreateNamed) {
45   win::MessageWindow window;
46   EXPECT_TRUE(window.CreateNamed(base::BindRepeating(&HandleMessage),
47                                  UTF8ToWide("test_message_window")));
48 }
49 
50 // Verifies that the created window can receive messages.
TEST(MessageWindowTest,SendMessage)51 TEST(MessageWindowTest, SendMessage) {
52   win::MessageWindow window;
53   EXPECT_TRUE(window.Create(base::BindRepeating(&HandleMessage)));
54 
55   EXPECT_EQ(SendMessage(window.hwnd(), WM_USER, 100, 0), 100);
56 }
57 
58 // Verifies that a named window can be found by name.
TEST(MessageWindowTest,FindWindow)59 TEST(MessageWindowTest, FindWindow) {
60   std::wstring name =
61       UTF8ToWide(base::Uuid::GenerateRandomV4().AsLowercaseString());
62   win::MessageWindow window;
63   EXPECT_TRUE(window.CreateNamed(base::BindRepeating(&HandleMessage), name));
64 
65   HWND hwnd = win::MessageWindow::FindWindow(name);
66   EXPECT_TRUE(hwnd != nullptr);
67   EXPECT_EQ(SendMessage(hwnd, WM_USER, 200, 0), 200);
68 }
69 
70 }  // namespace base
71