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