blob: 701bb27d425c08b88fe3810233974384f100d758 [file] [log] [blame]
henrike@webrtc.orgf0488722014-05-13 18:00:26 +00001/*
2 * Copyright 2010 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 */
tfarina5237aaf2015-11-10 23:44:30 -080010#include "webrtc/base/arraysize.h"
henrike@webrtc.orgf0488722014-05-13 18:00:26 +000011#include "webrtc/base/gunit.h"
12#include "webrtc/base/common.h"
13#include "webrtc/base/logging.h"
14#include "webrtc/base/win32window.h"
15#include "webrtc/base/win32windowpicker.h"
16#include "webrtc/base/windowpicker.h"
17
18#if !defined(WEBRTC_WIN)
19#error Only for Windows
20#endif
21
22namespace rtc {
23
24static const TCHAR* kVisibleWindowTitle = L"Visible Window";
25static const TCHAR* kInvisibleWindowTitle = L"Invisible Window";
26
27class Win32WindowPickerForTest : public Win32WindowPicker {
28 public:
29 Win32WindowPickerForTest() {
30 EXPECT_TRUE(visible_window_.Create(NULL, kVisibleWindowTitle, WS_VISIBLE,
31 0, 0, 0, 0, 0));
32 EXPECT_TRUE(invisible_window_.Create(NULL, kInvisibleWindowTitle, 0,
33 0, 0, 0, 0, 0));
34 }
35
36 ~Win32WindowPickerForTest() {
37 visible_window_.Destroy();
38 invisible_window_.Destroy();
39 }
40
41 virtual bool GetWindowList(WindowDescriptionList* descriptions) {
42 if (!Win32WindowPicker::EnumProc(visible_window_.handle(),
43 reinterpret_cast<LPARAM>(descriptions))) {
44 return false;
45 }
46 if (!Win32WindowPicker::EnumProc(invisible_window_.handle(),
47 reinterpret_cast<LPARAM>(descriptions))) {
48 return false;
49 }
50 return true;
51 }
52
53 Win32Window* visible_window() {
54 return &visible_window_;
55 }
56
57 Win32Window* invisible_window() {
58 return &invisible_window_;
59 }
60
61 private:
62 Win32Window visible_window_;
63 Win32Window invisible_window_;
64};
65
66TEST(Win32WindowPickerTest, TestGetWindowList) {
67 Win32WindowPickerForTest window_picker;
68 WindowDescriptionList descriptions;
69 EXPECT_TRUE(window_picker.GetWindowList(&descriptions));
70 EXPECT_EQ(1, descriptions.size());
71 WindowDescription desc = descriptions.front();
72 EXPECT_EQ(window_picker.visible_window()->handle(), desc.id().id());
73 TCHAR window_title[500];
74 GetWindowText(window_picker.visible_window()->handle(), window_title,
tfarina5237aaf2015-11-10 23:44:30 -080075 arraysize(window_title));
henrike@webrtc.orgf0488722014-05-13 18:00:26 +000076 EXPECT_EQ(0, wcscmp(window_title, kVisibleWindowTitle));
77}
78
79TEST(Win32WindowPickerTest, TestIsVisible) {
80 Win32WindowPickerForTest window_picker;
81 HWND visible_id = window_picker.visible_window()->handle();
82 HWND invisible_id = window_picker.invisible_window()->handle();
83 EXPECT_TRUE(window_picker.IsVisible(WindowId(visible_id)));
84 EXPECT_FALSE(window_picker.IsVisible(WindowId(invisible_id)));
85}
86
87TEST(Win32WindowPickerTest, TestMoveToFront) {
88 Win32WindowPickerForTest window_picker;
89 HWND visible_id = window_picker.visible_window()->handle();
90 HWND invisible_id = window_picker.invisible_window()->handle();
91
92 // There are a number of condition where SetForegroundWindow might
93 // fail depending on the state of the calling process. To be on the
94 // safe side we doesn't expect MoveToFront to return true, just test
95 // that we don't crash.
96 window_picker.MoveToFront(WindowId(visible_id));
97 window_picker.MoveToFront(WindowId(invisible_id));
98}
99
100} // namespace rtc