blob: 9fb994f255410f42a3174c82dcf1464288698d06 [file] [log] [blame]
// Copyright 2017 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 "ui/display/unified_desktop_utils.h"
#include <memory>
#include "testing/gtest/include/gtest/gtest.h"
#include "ui/display/display_layout_builder.h"
#include "ui/display/types/display_constants.h"
namespace display {
TEST(UnifiedDesktopLayoutTests, ValidateMatrix) {
UnifiedDesktopLayoutMatrix matrix;
// Empty matrix.
EXPECT_FALSE(ValidateMatrix(matrix));
// Matrix with unequal row sizes.
matrix.resize(2);
matrix[0].emplace_back(1);
matrix[0].emplace_back(2);
matrix[1].emplace_back(3);
EXPECT_FALSE(ValidateMatrix(matrix));
// Matrix with a hole.
matrix[1].emplace_back(display::kInvalidDisplayId);
EXPECT_FALSE(ValidateMatrix(matrix));
}
TEST(UnifiedDesktopLayoutTests, PrimaryIdNotInList) {
DisplayLayoutBuilder builder(20);
builder.AddDisplayPlacement(30, 20, DisplayPlacement::Position::RIGHT, 0);
builder.AddDisplayPlacement(40, 30, DisplayPlacement::Position::TOP, 0);
builder.AddDisplayPlacement(50, 20, DisplayPlacement::Position::TOP, 0);
UnifiedDesktopLayoutMatrix matrix;
std::unique_ptr<DisplayLayout> layout = builder.Build();
EXPECT_FALSE(BuildUnifiedDesktopMatrix({30, 40, 50}, *layout, &matrix));
EXPECT_TRUE(matrix.empty());
}
TEST(UnifiedDesktopLayoutTests, ExtraPlacement) {
DisplayLayoutBuilder builder(20);
builder.AddDisplayPlacement(30, 20, DisplayPlacement::Position::RIGHT, 0);
builder.AddDisplayPlacement(40, 30, DisplayPlacement::Position::TOP, 0);
builder.AddDisplayPlacement(50, 20, DisplayPlacement::Position::TOP, 0);
UnifiedDesktopLayoutMatrix matrix;
std::unique_ptr<DisplayLayout> layout = builder.Build();
EXPECT_FALSE(BuildUnifiedDesktopMatrix({20, 30, 40}, *layout, &matrix));
EXPECT_TRUE(matrix.empty());
}
TEST(UnifiedDesktopLayoutTests, MissingPlacement) {
DisplayLayoutBuilder builder(20);
builder.AddDisplayPlacement(30, 20, DisplayPlacement::Position::RIGHT, 0);
builder.AddDisplayPlacement(40, 30, DisplayPlacement::Position::TOP, 0);
UnifiedDesktopLayoutMatrix matrix;
std::unique_ptr<DisplayLayout> layout = builder.Build();
EXPECT_FALSE(BuildUnifiedDesktopMatrix({20, 30, 40, 50}, *layout, &matrix));
EXPECT_TRUE(matrix.empty());
}
TEST(UnifiedDesktopLayoutTests, PrimaryIsNotRoot) {
DisplayLayoutBuilder builder(20);
builder.AddDisplayPlacement(30, 60, DisplayPlacement::Position::LEFT, 0);
builder.AddDisplayPlacement(40, 30, DisplayPlacement::Position::TOP, 0);
builder.AddDisplayPlacement(50, 40, DisplayPlacement::Position::LEFT, 0);
builder.AddDisplayPlacement(60, 40, DisplayPlacement::Position::BOTTOM, 0);
UnifiedDesktopLayoutMatrix matrix;
std::unique_ptr<DisplayLayout> layout = builder.Build();
EXPECT_FALSE(
BuildUnifiedDesktopMatrix({20, 30, 40, 50, 60}, *layout, &matrix));
EXPECT_TRUE(matrix.empty());
}
TEST(UnifiedDesktopLayoutTests, CycleThroughPrimary) {
DisplayLayoutBuilder builder(20);
builder.AddDisplayPlacement(30, 20, DisplayPlacement::Position::RIGHT, 0);
builder.AddDisplayPlacement(20, 40, DisplayPlacement::Position::BOTTOM, 0);
builder.AddDisplayPlacement(40, 50, DisplayPlacement::Position::RIGHT, 0);
builder.AddDisplayPlacement(50, 30, DisplayPlacement::Position::TOP, 0);
UnifiedDesktopLayoutMatrix matrix;
std::unique_ptr<DisplayLayout> layout = builder.Build();
EXPECT_FALSE(BuildUnifiedDesktopMatrix({20, 30, 40, 50}, *layout, &matrix));
EXPECT_TRUE(matrix.empty());
}
TEST(UnifiedDesktopLayoutTests, NoPlacementOffsets) {
DisplayLayoutBuilder builder(20);
builder.AddDisplayPlacement(30, 20, DisplayPlacement::Position::RIGHT, 20);
builder.AddDisplayPlacement(40, 30, DisplayPlacement::Position::TOP, 0);
builder.AddDisplayPlacement(50, 20, DisplayPlacement::Position::TOP, 0);
UnifiedDesktopLayoutMatrix matrix;
std::unique_ptr<DisplayLayout> layout = builder.Build();
EXPECT_FALSE(BuildUnifiedDesktopMatrix({20, 30, 40, 50}, *layout, &matrix));
EXPECT_TRUE(matrix.empty());
}
TEST(UnifiedDesktopLayoutTests, TwoChildrenOnOneSide) {
DisplayLayoutBuilder builder(20);
builder.AddDisplayPlacement(30, 20, DisplayPlacement::Position::RIGHT, 0);
builder.AddDisplayPlacement(40, 30, DisplayPlacement::Position::TOP, 0);
builder.AddDisplayPlacement(50, 20, DisplayPlacement::Position::TOP, 0);
builder.AddDisplayPlacement(60, 30, DisplayPlacement::Position::RIGHT, 0);
builder.AddDisplayPlacement(70, 30, DisplayPlacement::Position::RIGHT, 0);
UnifiedDesktopLayoutMatrix matrix;
std::unique_ptr<DisplayLayout> layout = builder.Build();
EXPECT_FALSE(
BuildUnifiedDesktopMatrix({20, 30, 40, 50, 60, 70}, *layout, &matrix));
EXPECT_TRUE(matrix.empty());
}
TEST(UnifiedDesktopLayoutTests, EmptyHoles) {
DisplayLayoutBuilder builder(20);
builder.AddDisplayPlacement(30, 20, DisplayPlacement::Position::RIGHT, 0);
builder.AddDisplayPlacement(40, 30, DisplayPlacement::Position::TOP, 0);
builder.AddDisplayPlacement(50, 20, DisplayPlacement::Position::TOP, 0);
builder.AddDisplayPlacement(60, 30, DisplayPlacement::Position::RIGHT, 0);
builder.AddDisplayPlacement(70, 50, DisplayPlacement::Position::LEFT, 0);
UnifiedDesktopLayoutMatrix matrix;
std::unique_ptr<DisplayLayout> layout = builder.Build();
EXPECT_FALSE(
BuildUnifiedDesktopMatrix({20, 30, 40, 50, 60, 70}, *layout, &matrix));
EXPECT_TRUE(matrix.empty());
}
TEST(UnifiedDesktopLayoutTests, ValidHorizontalMatrix) {
DisplayLayoutBuilder builder(20);
builder.AddDisplayPlacement(30, 20, DisplayPlacement::Position::RIGHT, 0);
builder.AddDisplayPlacement(40, 30, DisplayPlacement::Position::RIGHT, 0);
builder.AddDisplayPlacement(50, 40, DisplayPlacement::Position::RIGHT, 0);
UnifiedDesktopLayoutMatrix matrix;
std::unique_ptr<DisplayLayout> layout = builder.Build();
EXPECT_TRUE(BuildUnifiedDesktopMatrix({20, 30, 40, 50}, *layout, &matrix));
EXPECT_FALSE(matrix.empty());
// 1 x 4 matrix.
EXPECT_EQ(1u, matrix.size());
EXPECT_EQ(4u, matrix[0].size());
// [[20, 30, 40, 50]].
EXPECT_EQ(20, matrix[0][0]);
EXPECT_EQ(30, matrix[0][1]);
EXPECT_EQ(40, matrix[0][2]);
EXPECT_EQ(50, matrix[0][3]);
}
TEST(UnifiedDesktopLayoutTests, ValidHorizontalMatrixReverse) {
DisplayLayoutBuilder builder(60);
builder.AddDisplayPlacement(50, 60, DisplayPlacement::Position::RIGHT, 0);
builder.AddDisplayPlacement(40, 50, DisplayPlacement::Position::RIGHT, 0);
builder.AddDisplayPlacement(30, 40, DisplayPlacement::Position::RIGHT, 0);
builder.AddDisplayPlacement(20, 30, DisplayPlacement::Position::RIGHT, 0);
UnifiedDesktopLayoutMatrix matrix;
std::unique_ptr<DisplayLayout> layout = builder.Build();
EXPECT_TRUE(
BuildUnifiedDesktopMatrix({20, 30, 40, 50, 60}, *layout, &matrix));
EXPECT_FALSE(matrix.empty());
// 1 x 4 matrix.
EXPECT_EQ(1u, matrix.size());
EXPECT_EQ(5u, matrix[0].size());
// [[60, 50, 40, 30, 20]].
EXPECT_EQ(60, matrix[0][0]);
EXPECT_EQ(50, matrix[0][1]);
EXPECT_EQ(40, matrix[0][2]);
EXPECT_EQ(30, matrix[0][3]);
EXPECT_EQ(20, matrix[0][4]);
}
TEST(UnifiedDesktopLayoutTests, ValidVerticalMatrix) {
DisplayLayoutBuilder builder(20);
builder.AddDisplayPlacement(30, 20, DisplayPlacement::Position::BOTTOM, 0);
builder.AddDisplayPlacement(40, 30, DisplayPlacement::Position::BOTTOM, 0);
builder.AddDisplayPlacement(50, 40, DisplayPlacement::Position::BOTTOM, 0);
UnifiedDesktopLayoutMatrix matrix;
std::unique_ptr<DisplayLayout> layout = builder.Build();
EXPECT_TRUE(BuildUnifiedDesktopMatrix({20, 30, 40, 50}, *layout, &matrix));
EXPECT_FALSE(matrix.empty());
// 4 x 1 matrix.
EXPECT_EQ(4u, matrix.size());
EXPECT_EQ(1u, matrix[0].size());
// [[20],
// [30],
// [40],
// [50]].
EXPECT_EQ(20, matrix[0][0]);
EXPECT_EQ(30, matrix[1][0]);
EXPECT_EQ(40, matrix[2][0]);
EXPECT_EQ(50, matrix[3][0]);
}
TEST(UnifiedDesktopLayoutTests, ValidGridMatrix) {
DisplayLayoutBuilder builder(20);
builder.AddDisplayPlacement(30, 20, DisplayPlacement::Position::RIGHT, 0);
builder.AddDisplayPlacement(40, 30, DisplayPlacement::Position::TOP, 0);
builder.AddDisplayPlacement(50, 20, DisplayPlacement::Position::TOP, 0);
builder.AddDisplayPlacement(60, 30, DisplayPlacement::Position::RIGHT, 0);
builder.AddDisplayPlacement(70, 40, DisplayPlacement::Position::RIGHT, 0);
UnifiedDesktopLayoutMatrix matrix;
std::unique_ptr<DisplayLayout> layout = builder.Build();
EXPECT_TRUE(
BuildUnifiedDesktopMatrix({20, 30, 40, 50, 60, 70}, *layout, &matrix));
EXPECT_FALSE(matrix.empty());
// 2 x 3 matrix.
EXPECT_EQ(2u, matrix.size());
EXPECT_EQ(3u, matrix[0].size());
// [[50, 40, 70],
// [20, 30, 60]].
EXPECT_EQ(50, matrix[0][0]);
EXPECT_EQ(40, matrix[0][1]);
EXPECT_EQ(70, matrix[0][2]);
EXPECT_EQ(20, matrix[1][0]);
EXPECT_EQ(30, matrix[1][1]);
EXPECT_EQ(60, matrix[1][2]);
}
} // namespace display