147be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org/*
247be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org *  Copyright 2012 The WebRTC Project Authors. All rights reserved.
347be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org *
447be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org *  Use of this source code is governed by a BSD-style license
547be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org *  that can be found in the LICENSE file in the root of the source
647be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org *  tree. An additional intellectual property rights grant can be found
747be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org *  in the file PATENTS.  All contributing project authors may
847be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org *  be found in the AUTHORS file in the root of the source tree.
947be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org */
1047be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org#include "webrtc/base/gunit.h"
1147be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org#include "webrtc/base/testutils.h"
1247be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org#include "webrtc/base/window.h"
1347be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org#include "webrtc/base/windowpicker.h"
1447be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org#include "webrtc/base/windowpickerfactory.h"
1547be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org
1647be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org#if defined(WEBRTC_MAC) && !defined(WEBRTC_IOS)
1747be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org#  define DISABLE_ON_MAC(name) DISABLED_ ## name
1847be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org#else
1947be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org#  define DISABLE_ON_MAC(name) name
2047be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org#endif
2147be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org
2247be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.orgTEST(WindowPickerTest, GetWindowList) {
2347be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org  MAYBE_SKIP_SCREENCAST_TEST();
2447be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org  if (!rtc::WindowPickerFactory::IsSupported()) {
2547be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org    LOG(LS_INFO) << "skipping test: window capturing is not supported with "
2647be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org                 << "current configuration.";
2747be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org  }
2847be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org  rtc::scoped_ptr<rtc::WindowPicker> picker(
2947be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org      rtc::WindowPickerFactory::CreateWindowPicker());
3047be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org  EXPECT_TRUE(picker->Init());
3147be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org  rtc::WindowDescriptionList descriptions;
3247be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org  EXPECT_TRUE(picker->GetWindowList(&descriptions));
3347be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org}
3447be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org
3547be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org// TODO(hughv) Investigate why this fails on pulse but not locally after
3647be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org// upgrading to XCode 4.5.  The failure is GetDesktopList returning FALSE.
3747be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.orgTEST(WindowPickerTest, DISABLE_ON_MAC(GetDesktopList)) {
3847be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org  MAYBE_SKIP_SCREENCAST_TEST();
3947be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org  if (!rtc::WindowPickerFactory::IsSupported()) {
4047be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org    LOG(LS_INFO) << "skipping test: window capturing is not supported with "
4147be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org                 << "current configuration.";
4247be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org  }
4347be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org  rtc::scoped_ptr<rtc::WindowPicker> picker(
4447be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org      rtc::WindowPickerFactory::CreateWindowPicker());
4547be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org  EXPECT_TRUE(picker->Init());
4647be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org  rtc::DesktopDescriptionList descriptions;
4747be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org  EXPECT_TRUE(picker->GetDesktopList(&descriptions));
4847be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org  if (descriptions.size() > 0) {
4947be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org    int width = 0;
5047be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org    int height = 0;
5147be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org    EXPECT_TRUE(picker->GetDesktopDimensions(descriptions[0].id(), &width,
5247be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org                                             &height));
5347be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org    EXPECT_GT(width, 0);
5447be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org    EXPECT_GT(height, 0);
5547be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org
5647be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org    // Test |IsPrimaryDesktop|. Only one desktop should be a primary.
5747be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org    bool found_primary = false;
5847be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org    for (rtc::DesktopDescriptionList::iterator it = descriptions.begin();
5947be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org         it != descriptions.end(); ++it) {
6047be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org      if (it->primary()) {
6147be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org        EXPECT_FALSE(found_primary);
6247be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org        found_primary = true;
6347be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org      }
6447be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org    }
6547be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org    EXPECT_TRUE(found_primary);
6647be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org  }
6747be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org}
68