webrtc/modules/desktop_capture/mouse_cursor_monitor_unittest.cc
Philipp Hancke 79098821a2 reenable mouse_cursor_monitor tests on linux
BUG=webrtc:3245

Change-Id: Ibf9cd929b22a0a519950621da46eb9f5b3febd73
Reviewed-on: https://webrtc-review.googlesource.com/c/src/+/181367
Reviewed-by: Tommi <tommi@webrtc.org>
Reviewed-by: Sergey Ulanov <sergeyu@google.com>
Commit-Queue: Tommi <tommi@webrtc.org>
Cr-Commit-Position: refs/heads/master@{#31940}
2020-08-17 09:27:49 +00:00

127 lines
4 KiB
C++

/*
* Copyright (c) 2013 The WebRTC project authors. All Rights Reserved.
*
* Use of this source code is governed by a BSD-style license
* that can be found in the LICENSE file in the root of the source
* tree. An additional intellectual property rights grant can be found
* in the file PATENTS. All contributing project authors may
* be found in the AUTHORS file in the root of the source tree.
*/
#include "modules/desktop_capture/mouse_cursor_monitor.h"
#include <assert.h>
#include <stddef.h>
#include <memory>
#include "modules/desktop_capture/desktop_capture_options.h"
#include "modules/desktop_capture/desktop_capturer.h"
#include "modules/desktop_capture/desktop_frame.h"
#include "modules/desktop_capture/mouse_cursor.h"
#include "rtc_base/checks.h"
#include "test/gtest.h"
namespace webrtc {
class MouseCursorMonitorTest : public ::testing::Test,
public MouseCursorMonitor::Callback {
public:
MouseCursorMonitorTest() : position_received_(false) {}
// MouseCursorMonitor::Callback interface
void OnMouseCursor(MouseCursor* cursor_image) override {
cursor_image_.reset(cursor_image);
}
void OnMouseCursorPosition(const DesktopVector& position) override {
position_ = position;
position_received_ = true;
}
protected:
std::unique_ptr<MouseCursor> cursor_image_;
DesktopVector position_;
bool position_received_;
};
// TODO(sergeyu): On Mac we need to initialize NSApplication before running the
// tests. Figure out how to do that without breaking other tests in
// modules_unittests and enable these tests on Mac.
// https://code.google.com/p/webrtc/issues/detail?id=2532
//
// Disabled on Windows due to flake, see:
// https://code.google.com/p/webrtc/issues/detail?id=3408
#if !defined(WEBRTC_MAC) && !defined(WEBRTC_WIN)
#define MAYBE(x) x
#else
#define MAYBE(x) DISABLED_##x
#endif
TEST_F(MouseCursorMonitorTest, MAYBE(FromScreen)) {
std::unique_ptr<MouseCursorMonitor> capturer(
MouseCursorMonitor::CreateForScreen(
DesktopCaptureOptions::CreateDefault(),
webrtc::kFullDesktopScreenId));
assert(capturer.get());
capturer->Init(this, MouseCursorMonitor::SHAPE_AND_POSITION);
capturer->Capture();
EXPECT_TRUE(cursor_image_.get());
EXPECT_GE(cursor_image_->hotspot().x(), 0);
EXPECT_LE(cursor_image_->hotspot().x(),
cursor_image_->image()->size().width());
EXPECT_GE(cursor_image_->hotspot().y(), 0);
EXPECT_LE(cursor_image_->hotspot().y(),
cursor_image_->image()->size().height());
EXPECT_TRUE(position_received_);
}
TEST_F(MouseCursorMonitorTest, MAYBE(FromWindow)) {
DesktopCaptureOptions options = DesktopCaptureOptions::CreateDefault();
// First get list of windows.
std::unique_ptr<DesktopCapturer> window_capturer(
DesktopCapturer::CreateWindowCapturer(options));
// If window capturing is not supported then skip this test.
if (!window_capturer.get())
return;
DesktopCapturer::SourceList sources;
EXPECT_TRUE(window_capturer->GetSourceList(&sources));
// Iterate over all windows and try capturing mouse cursor for each of them.
for (size_t i = 0; i < sources.size(); ++i) {
cursor_image_.reset();
position_received_ = false;
std::unique_ptr<MouseCursorMonitor> capturer(
MouseCursorMonitor::CreateForWindow(
DesktopCaptureOptions::CreateDefault(), sources[i].id));
assert(capturer.get());
capturer->Init(this, MouseCursorMonitor::SHAPE_AND_POSITION);
capturer->Capture();
EXPECT_TRUE(cursor_image_.get());
EXPECT_TRUE(position_received_);
}
}
// Make sure that OnMouseCursorPosition() is not called in the SHAPE_ONLY mode.
TEST_F(MouseCursorMonitorTest, MAYBE(ShapeOnly)) {
std::unique_ptr<MouseCursorMonitor> capturer(
MouseCursorMonitor::CreateForScreen(
DesktopCaptureOptions::CreateDefault(),
webrtc::kFullDesktopScreenId));
assert(capturer.get());
capturer->Init(this, MouseCursorMonitor::SHAPE_ONLY);
capturer->Capture();
EXPECT_TRUE(cursor_image_.get());
EXPECT_FALSE(position_received_);
}
} // namespace webrtc