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