1 /*
2  *  Copyright 2009 The WebRTC Project Authors. All rights reserved.
3  *
4  *  Use of this source code is governed by a BSD-style license
5  *  that can be found in the LICENSE file in the root of the source
6  *  tree. An additional intellectual property rights grant can be found
7  *  in the file PATENTS.  All contributing project authors may
8  *  be found in the AUTHORS file in the root of the source tree.
9  */
10 
11 #include "rtc_base/win32window.h"
12 #include "rtc_base/gunit.h"
13 #include "rtc_base/logging.h"
14 
15 static LRESULT kDummyResult = 0x1234ABCD;
16 
17 class TestWindow : public rtc::Win32Window {
18  public:
TestWindow()19   TestWindow() : destroyed_(false) { memset(&msg_, 0, sizeof(msg_)); }
msg() const20   const MSG& msg() const { return msg_; }
destroyed() const21   bool destroyed() const { return destroyed_; }
22 
OnMessage(UINT uMsg,WPARAM wParam,LPARAM lParam,LRESULT & result)23   bool OnMessage(UINT uMsg,
24                  WPARAM wParam,
25                  LPARAM lParam,
26                  LRESULT& result) override {
27     msg_.message = uMsg;
28     msg_.wParam = wParam;
29     msg_.lParam = lParam;
30     result = kDummyResult;
31     return true;
32   }
OnNcDestroy()33   void OnNcDestroy() override { destroyed_ = true; }
34 
35  private:
36   MSG msg_;
37   bool destroyed_;
38 };
39 
TEST(Win32WindowTest,Basics)40 TEST(Win32WindowTest, Basics) {
41   TestWindow wnd;
42   EXPECT_TRUE(wnd.handle() == nullptr);
43   EXPECT_FALSE(wnd.destroyed());
44   EXPECT_TRUE(wnd.Create(0, L"Test", 0, 0, 0, 0, 100, 100));
45   EXPECT_TRUE(wnd.handle() != nullptr);
46   EXPECT_EQ(kDummyResult, ::SendMessage(wnd.handle(), WM_USER, 1, 2));
47   EXPECT_EQ(static_cast<UINT>(WM_USER), wnd.msg().message);
48   EXPECT_EQ(1u, wnd.msg().wParam);
49   EXPECT_EQ(2l, wnd.msg().lParam);
50   wnd.Destroy();
51   EXPECT_TRUE(wnd.handle() == nullptr);
52   EXPECT_TRUE(wnd.destroyed());
53 }
54 
TEST(Win32WindowTest,MultipleWindows)55 TEST(Win32WindowTest, MultipleWindows) {
56   TestWindow wnd1, wnd2;
57   EXPECT_TRUE(wnd1.Create(0, L"Test", 0, 0, 0, 0, 100, 100));
58   EXPECT_TRUE(wnd2.Create(0, L"Test", 0, 0, 0, 0, 100, 100));
59   EXPECT_TRUE(wnd1.handle() != nullptr);
60   EXPECT_TRUE(wnd2.handle() != nullptr);
61   wnd1.Destroy();
62   wnd2.Destroy();
63   EXPECT_TRUE(wnd2.handle() == nullptr);
64   EXPECT_TRUE(wnd1.handle() == nullptr);
65 }
66