blob: 6de8b24938cd2f1c41d31247920288dd302d5b9e [file] [log] [blame]
// Copyright 2019 The Chromium Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
#include "remoting/host/desktop_display_info.h"
#include "base/location.h"
#include "testing/gtest/include/gtest/gtest.h"
namespace remoting {
class DesktopDisplayInfoTest : public testing::Test {
public:
void AddDisplay(int x, int y, int width, int height) {
auto* display = new DisplayGeometry();
display->x = x;
display->y = y;
display->width = width;
display->height = height;
display->dpi = 96;
display->bpp = 24;
display->is_default = false;
info_.AddDisplay(display);
}
void VerifyDisplayOffset(const base::Location& from_here,
unsigned int id,
int x,
int y) {
webrtc::DesktopVector offset = info_.CalcDisplayOffset(id);
EXPECT_EQ(x, offset.x()) << "Location: " << from_here.ToString();
EXPECT_EQ(y, offset.y()) << "Location: " << from_here.ToString();
}
protected:
DesktopDisplayInfo info_;
};
// o---------+
// | 0 |
// | 300x200 |
// +---------+
// o = desktop origin
TEST_F(DesktopDisplayInfoTest, SingleDisplay) {
AddDisplay(0, 0, 300, 200);
VerifyDisplayOffset(FROM_HERE, 0, 0, 0);
}
// o---------+------------+
// | 0 | 1 |
// | 300x200 | 500x400 |
// +---------+ |
// +------------+
TEST_F(DesktopDisplayInfoTest, DualDisplayRight) {
AddDisplay(0, 0, 300, 200);
AddDisplay(300, 0, 500, 400);
VerifyDisplayOffset(FROM_HERE, 0, 0, 0);
VerifyDisplayOffset(FROM_HERE, 1, 300, 0);
}
// o---------+------------+
// | 1 | 0 |
// | 300x200 | 500x400 |
// +---------+ |
// +------------+
TEST_F(DesktopDisplayInfoTest, DualDisplayRight_ReverseOrder) {
AddDisplay(300, 0, 500, 400);
AddDisplay(0, 0, 300, 200);
VerifyDisplayOffset(FROM_HERE, 0, 300, 0);
VerifyDisplayOffset(FROM_HERE, 1, 0, 0);
}
// +---------o------------+
// | 1 | 0 |
// | 300x200 | 500x400 |
// +---------+ |
// +------------+
TEST_F(DesktopDisplayInfoTest, DualDisplayLeft) {
AddDisplay(0, 0, 500, 400);
AddDisplay(-300, 0, 300, 200);
VerifyDisplayOffset(FROM_HERE, 0, 300, 0);
VerifyDisplayOffset(FROM_HERE, 1, 0, 0);
}
// +---------o------------+
// | 0 | 1 |
// | 300x200 | 500x400 |
// +---------+ |
// +------------+
TEST_F(DesktopDisplayInfoTest, DualDisplayLeft_ReverseOrder) {
AddDisplay(-300, 0, 300, 200);
AddDisplay(0, 0, 500, 400);
VerifyDisplayOffset(FROM_HERE, 0, 0, 0);
VerifyDisplayOffset(FROM_HERE, 1, 300, 0);
}
// +---------o------------+
// | 0 | 1 +---------+
// | 300x200 | 500x400 | 2 |
// +---------+ | 400x350 |
// +------------+---------+
TEST_F(DesktopDisplayInfoTest, TripleDisplayMiddle) {
AddDisplay(-300, 0, 300, 200);
AddDisplay(0, 0, 500, 400); // Default display.
AddDisplay(500, 50, 400, 350);
VerifyDisplayOffset(FROM_HERE, 0, 0, 0);
VerifyDisplayOffset(FROM_HERE, 1, 300, 0);
VerifyDisplayOffset(FROM_HERE, 2, 800, 50);
}
// x o-----------+ - 0
// | 0 |
// +---------+ 500x400 | - 350
// | 2 +-------+---+-------+ - 400
// | 300x200 | | 1 |
// +---------+ | 600x450 | - 550
// +-----------+ - 950
// | | | | |
// -300 0 300 500 900
TEST_F(DesktopDisplayInfoTest, Multimon3) {
AddDisplay(0, 0, 500, 400); // Default display.
AddDisplay(300, 400, 600, 450);
AddDisplay(-300, 350, 300, 200);
VerifyDisplayOffset(FROM_HERE, 0, 300, 0);
VerifyDisplayOffset(FROM_HERE, 1, 600, 400);
VerifyDisplayOffset(FROM_HERE, 2, 0, 350);
}
// x +-------+ -- -50
// | 1 |
// +-------+ | 60x40 | -- -20
// | 4 | +---+---+-----+ -- -10
// | 40x70 o---------+ 0 | -- 0
// +-------+ | 6 | 70x60 | -- 40
// | 2 +-------+ 80x55 +------+--+-----+ -- 50
// | 30x60 | +---------+ | 3 | -- 55
// | | | 55x65 |
// +-------+ +--------+ | -- 100
// | 5 +--------+ -- 115
// | 65x20 |
// +--------+ -- 120
// | | | | | | | | | |
// - - 0 6 7 8 1 1 1 1
// 7 4 0 0 0 2 3 5 9
// 0 0 0 5 0 0
TEST_F(DesktopDisplayInfoTest, Multimon7) {
AddDisplay(80, -10, 70, 60);
AddDisplay(60, -50, 60, 40);
AddDisplay(-70, 40, 30, 60);
AddDisplay(135, 50, 55, 65);
AddDisplay(-40, -20, 40, 70);
AddDisplay(70, 100, 65, 20);
AddDisplay(0, 0, 80, 55); // Default display.
VerifyDisplayOffset(FROM_HERE, 0, 150, 40);
VerifyDisplayOffset(FROM_HERE, 1, 130, 0);
VerifyDisplayOffset(FROM_HERE, 2, 0, 90);
VerifyDisplayOffset(FROM_HERE, 3, 205, 100);
VerifyDisplayOffset(FROM_HERE, 4, 30, 30);
VerifyDisplayOffset(FROM_HERE, 5, 140, 150);
VerifyDisplayOffset(FROM_HERE, 6, 70, 50);
}
} // namespace remoting