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 "webrtc/base/gunit.h"
12#include "webrtc/base/common.h"
13#include "webrtc/base/win32window.h"
14#include "webrtc/base/logging.h"
15
16static LRESULT kDummyResult = 0x1234ABCD;
17
18class TestWindow : public rtc::Win32Window {
19 public:
20  TestWindow() : destroyed_(false) { memset(&msg_, 0, sizeof(msg_)); }
21  const MSG& msg() const { return msg_; }
22  bool destroyed() const { return destroyed_; }
23
24  virtual bool OnMessage(UINT uMsg, WPARAM wParam,
25                         LPARAM lParam, LRESULT& result) {
26    msg_.message = uMsg;
27    msg_.wParam = wParam;
28    msg_.lParam = lParam;
29    result = kDummyResult;
30    return true;
31  }
32  virtual void OnNcDestroy() {
33    destroyed_ = true;
34  }
35
36 private:
37  MSG msg_;
38  bool destroyed_;
39};
40
41TEST(Win32WindowTest, Basics) {
42  TestWindow wnd;
43  EXPECT_TRUE(wnd.handle() == NULL);
44  EXPECT_FALSE(wnd.destroyed());
45  EXPECT_TRUE(wnd.Create(0, L"Test", 0, 0, 0, 0, 100, 100));
46  EXPECT_TRUE(wnd.handle() != NULL);
47  EXPECT_EQ(kDummyResult, ::SendMessage(wnd.handle(), WM_USER, 1, 2));
48  EXPECT_EQ(WM_USER, wnd.msg().message);
49  EXPECT_EQ(1, wnd.msg().wParam);
50  EXPECT_EQ(2, wnd.msg().lParam);
51  wnd.Destroy();
52  EXPECT_TRUE(wnd.handle() == NULL);
53  EXPECT_TRUE(wnd.destroyed());
54}
55
56TEST(Win32WindowTest, MultipleWindows) {
57  TestWindow wnd1, wnd2;
58  EXPECT_TRUE(wnd1.Create(0, L"Test", 0, 0, 0, 0, 100, 100));
59  EXPECT_TRUE(wnd2.Create(0, L"Test", 0, 0, 0, 0, 100, 100));
60  EXPECT_TRUE(wnd1.handle() != NULL);
61  EXPECT_TRUE(wnd2.handle() != NULL);
62  wnd1.Destroy();
63  wnd2.Destroy();
64  EXPECT_TRUE(wnd2.handle() == NULL);
65  EXPECT_TRUE(wnd1.handle() == NULL);
66}
67