blob: a367c003dbcd0af4edcf9bad3346b5a507ddd249 [file] [log] [blame]
// Copyright 2016 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/display.h"
#include <tuple>
#include <vector>
#include "testing/gtest/include/gtest/gtest.h"
#include "ui/display/display_layout.h"
#include "ui/display/display_layout_builder.h"
namespace display {
using Position = DisplayPlacement::Position;
TEST(DisplayLayoutTest, Empty) {
Displays display_list;
std::vector<int64_t> updated_ids;
DisplayLayout display_layout;
display_layout.ApplyToDisplayList(&display_list, &updated_ids, 0);
EXPECT_EQ(0u, updated_ids.size());
EXPECT_EQ(0u, display_list.size());
}
TEST(DisplayLayoutTest, SingleDisplayNoPlacements) {
Displays display_list;
display_list.emplace_back(0, gfx::Rect(0, 0, 800, 600));
std::vector<int64_t> updated_ids;
DisplayLayout display_layout;
display_layout.ApplyToDisplayList(&display_list, &updated_ids, 0);
EXPECT_EQ(0u, updated_ids.size());
ASSERT_EQ(1u, display_list.size());
EXPECT_EQ(gfx::Rect(0, 0, 800, 600), display_list[0].bounds());
}
TEST(DisplayLayoutTest, SingleDisplayNonRelevantPlacement) {
Displays display_list;
display_list.emplace_back(0, gfx::Rect(0, 0, 800, 600));
std::vector<int64_t> updated_ids;
DisplayLayoutBuilder builder(20);
builder.AddDisplayPlacement(20, 40, DisplayPlacement::Position::LEFT, 150);
std::unique_ptr<DisplayLayout> display_layout(builder.Build());
display_layout->ApplyToDisplayList(&display_list, &updated_ids, 0);
EXPECT_EQ(0u, updated_ids.size());
ASSERT_EQ(1u, display_list.size());
EXPECT_EQ(gfx::Rect(0, 0, 800, 600), display_list[0].bounds());
}
TEST(DisplayLayoutTest, SwapPrimaryDisplay) {
std::unique_ptr<DisplayLayout> layout =
DisplayLayoutBuilder(123)
.AddDisplayPlacement(456, 123, Position::LEFT, 150)
.Build();
// Initial layout will be 123 <-- 456
EXPECT_EQ(123, layout->primary_id);
EXPECT_EQ(456, layout->placement_list[0].display_id);
EXPECT_EQ(123, layout->placement_list[0].parent_display_id);
EXPECT_EQ(Position::LEFT, layout->placement_list[0].position);
EXPECT_EQ(150, layout->placement_list[0].offset);
// Swap layout to 123 --> 456.
layout->SwapPrimaryDisplay(456);
EXPECT_EQ(456, layout->primary_id);
EXPECT_EQ(123, layout->placement_list[0].display_id);
EXPECT_EQ(456, layout->placement_list[0].parent_display_id);
EXPECT_EQ(Position::RIGHT, layout->placement_list[0].position);
EXPECT_EQ(-150, layout->placement_list[0].offset);
// Swap layout back to 123 <-- 456.
layout->SwapPrimaryDisplay(123);
EXPECT_EQ(123, layout->primary_id);
EXPECT_EQ(456, layout->placement_list[0].display_id);
EXPECT_EQ(123, layout->placement_list[0].parent_display_id);
EXPECT_EQ(Position::LEFT, layout->placement_list[0].position);
EXPECT_EQ(150, layout->placement_list[0].offset);
}
TEST(DisplayLayoutTest, SwapPrimaryDisplayThreeDisplays) {
std::unique_ptr<DisplayLayout> layout =
DisplayLayoutBuilder(456)
.AddDisplayPlacement(123, 456, Position::LEFT, 0)
.AddDisplayPlacement(789, 456, Position::RIGHT, 0)
.Build();
// Note: Placement order is determined by least significant 8 bits of IDs.
// Initial layout will be 123 (0x7B) --> 456 (0x1C8) <-- 789 (0x315).
EXPECT_EQ(456, layout->primary_id);
EXPECT_EQ(789, layout->placement_list[0].display_id);
EXPECT_EQ(456, layout->placement_list[0].parent_display_id);
EXPECT_EQ(Position::RIGHT, layout->placement_list[0].position);
EXPECT_EQ(123, layout->placement_list[1].display_id);
EXPECT_EQ(456, layout->placement_list[1].parent_display_id);
EXPECT_EQ(Position::LEFT, layout->placement_list[1].position);
// Swap layout to 123 --> 456 --> 789.
layout->SwapPrimaryDisplay(789);
EXPECT_EQ(789, layout->primary_id);
EXPECT_EQ(123, layout->placement_list[0].display_id);
EXPECT_EQ(456, layout->placement_list[0].parent_display_id);
EXPECT_EQ(Position::LEFT, layout->placement_list[0].position);
EXPECT_EQ(456, layout->placement_list[1].display_id);
EXPECT_EQ(789, layout->placement_list[1].parent_display_id);
EXPECT_EQ(Position::LEFT, layout->placement_list[1].position);
// Swap layout to 123 <-- 456 <-- 789.
layout->SwapPrimaryDisplay(123);
EXPECT_EQ(123, layout->primary_id);
EXPECT_EQ(789, layout->placement_list[0].display_id);
EXPECT_EQ(456, layout->placement_list[0].parent_display_id);
EXPECT_EQ(Position::RIGHT, layout->placement_list[0].position);
EXPECT_EQ(456, layout->placement_list[1].display_id);
EXPECT_EQ(123, layout->placement_list[1].parent_display_id);
EXPECT_EQ(Position::RIGHT, layout->placement_list[1].position);
}
// Makes sure that only the least significant 8 bits of the display IDs in the
// placement lists are used to validate their sort order.
TEST(DisplayLayoutTest, PlacementSortOrder) {
// Sorted placement lists by full IDs, but not sorted by the least significant
// 8 bits of the IDs.
std::unique_ptr<DisplayLayout> layout(new DisplayLayout);
layout->primary_id = 456;
layout->placement_list.emplace_back(0x0405, 456, Position::LEFT, 0,
DisplayPlacement::TOP_LEFT);
layout->placement_list.emplace_back(0x0506, 0x0405, Position::RIGHT, 0,
DisplayPlacement::TOP_LEFT);
layout->placement_list.emplace_back(0x0604, 0x0506, Position::RIGHT, 0,
DisplayPlacement::TOP_LEFT);
EXPECT_FALSE(DisplayLayout::Validate({456, 0x0405, 0x0506, 0x0604}, *layout));
// Full IDs not sorted, but least significant 8 bits of the IDs are sorted.
layout->placement_list.clear();
layout->placement_list.emplace_back(0x0504, 456, Position::LEFT, 0,
DisplayPlacement::TOP_LEFT);
layout->placement_list.emplace_back(0x0605, 0x0504, Position::RIGHT, 0,
DisplayPlacement::TOP_LEFT);
layout->placement_list.emplace_back(0x0406, 0x0605, Position::RIGHT, 0,
DisplayPlacement::TOP_LEFT);
EXPECT_TRUE(DisplayLayout::Validate({456, 0x0504, 0x0605, 0x0406}, *layout));
}
namespace {
class TwoDisplays
: public testing::TestWithParam<std::tuple<
// Primary Display Bounds
gfx::Rect,
// Secondary Display Bounds
gfx::Rect,
// Secondary Layout Position
DisplayPlacement::Position,
// Secondary Layout Offset
int,
// Minimum Offset Overlap
int,
// Expected Primary Display Bounds
gfx::Rect,
// Expected Secondary Display Bounds
gfx::Rect>> {
public:
TwoDisplays() = default;
private:
DISALLOW_COPY_AND_ASSIGN(TwoDisplays);
};
} // namespace
TEST_P(TwoDisplays, Placement) {
gfx::Rect primary_display_bounds = std::get<0>(GetParam());
gfx::Rect secondary_display_bounds = std::get<1>(GetParam());
DisplayPlacement::Position position = std::get<2>(GetParam());
int offset = std::get<3>(GetParam());
int minimum_offset_overlap = std::get<4>(GetParam());
gfx::Rect expected_primary_display_bounds = std::get<5>(GetParam());
gfx::Rect expected_secondary_display_bounds = std::get<6>(GetParam());
Displays display_list;
display_list.emplace_back(0, primary_display_bounds);
display_list.emplace_back(1, secondary_display_bounds);
std::vector<int64_t> updated_ids;
DisplayLayoutBuilder builder(0);
builder.AddDisplayPlacement(1, 0, position, offset);
std::unique_ptr<DisplayLayout> display_layout(builder.Build());
display_layout->ApplyToDisplayList(
&display_list, &updated_ids, minimum_offset_overlap);
ASSERT_EQ(1u, updated_ids.size());
EXPECT_EQ(1u, updated_ids[0]);
ASSERT_EQ(2u, display_list.size());
EXPECT_EQ(expected_primary_display_bounds, display_list[0].bounds());
EXPECT_EQ(expected_secondary_display_bounds, display_list[1].bounds());
}
INSTANTIATE_TEST_CASE_P(DisplayLayoutTestZero, TwoDisplays, testing::Values(
std::make_tuple(
gfx::Rect(0, 0, 800, 600), gfx::Rect(0, 0, 1024, 768),
DisplayPlacement::Position::LEFT, 0, 0,
gfx::Rect(0, 0, 800, 600), gfx::Rect(-1024, 0, 1024, 768)),
std::make_tuple(
gfx::Rect(0, 0, 800, 600), gfx::Rect(0, 0, 1024, 768),
DisplayPlacement::Position::TOP, 0, 0,
gfx::Rect(0, 0, 800, 600), gfx::Rect(0, -768, 1024, 768)),
std::make_tuple(
gfx::Rect(0, 0, 800, 600), gfx::Rect(0, 0, 1024, 768),
DisplayPlacement::Position::RIGHT, 0, 0,
gfx::Rect(0, 0, 800, 600), gfx::Rect(800, 0, 1024, 768)),
std::make_tuple(
gfx::Rect(0, 0, 800, 600), gfx::Rect(0, 0, 1024, 768),
DisplayPlacement::Position::BOTTOM, 0, 0,
gfx::Rect(0, 0, 800, 600), gfx::Rect(0, 600, 1024, 768))));
INSTANTIATE_TEST_CASE_P(DisplayLayoutTestOffset, TwoDisplays, testing::Values(
std::make_tuple(
gfx::Rect(0, 0, 800, 600), gfx::Rect(0, 0, 1024, 768),
DisplayPlacement::Position::LEFT, 37, 0,
gfx::Rect(0, 0, 800, 600), gfx::Rect(-1024, 37, 1024, 768)),
std::make_tuple(
gfx::Rect(0, 0, 800, 600), gfx::Rect(0, 0, 1024, 768),
DisplayPlacement::Position::TOP, 37, 0,
gfx::Rect(0, 0, 800, 600), gfx::Rect(37, -768, 1024, 768)),
std::make_tuple(
gfx::Rect(0, 0, 800, 600), gfx::Rect(0, 0, 1024, 768),
DisplayPlacement::Position::RIGHT, 37, 0,
gfx::Rect(0, 0, 800, 600), gfx::Rect(800, 37, 1024, 768)),
std::make_tuple(
gfx::Rect(0, 0, 800, 600), gfx::Rect(0, 0, 1024, 768),
DisplayPlacement::Position::BOTTOM, 37, 0,
gfx::Rect(0, 0, 800, 600), gfx::Rect(37, 600, 1024, 768))));
INSTANTIATE_TEST_CASE_P(DisplayLayoutTestCorner, TwoDisplays, testing::Values(
// Top-Left
std::make_tuple(
gfx::Rect(0, 0, 20, 40), gfx::Rect(0, 0, 30, 60),
DisplayPlacement::Position::LEFT, -60, 0,
gfx::Rect(0, 0, 20, 40), gfx::Rect(-30, -60, 30, 60)),
std::make_tuple(
gfx::Rect(0, 0, 20, 40), gfx::Rect(0, 0, 30, 60),
DisplayPlacement::Position::TOP, -30, 0,
gfx::Rect(0, 0, 20, 40), gfx::Rect(-30, -60, 30, 60)),
// Top-Right
std::make_tuple(
gfx::Rect(0, 0, 20, 40), gfx::Rect(0, 0, 30, 60),
DisplayPlacement::Position::RIGHT, -60, 0,
gfx::Rect(0, 0, 20, 40), gfx::Rect(20, -60, 30, 60)),
std::make_tuple(
gfx::Rect(0, 0, 20, 40), gfx::Rect(0, 0, 30, 60),
DisplayPlacement::Position::TOP, 20, 0,
gfx::Rect(0, 0, 20, 40), gfx::Rect(20, -60, 30, 60)),
// Bottom-Right
std::make_tuple(
gfx::Rect(0, 0, 20, 40), gfx::Rect(0, 0, 30, 60),
DisplayPlacement::Position::RIGHT, 40, 0,
gfx::Rect(0, 0, 20, 40), gfx::Rect(20, 40, 30, 60)),
std::make_tuple(
gfx::Rect(0, 0, 20, 40), gfx::Rect(0, 0, 30, 60),
DisplayPlacement::Position::BOTTOM, 20, 0,
gfx::Rect(0, 0, 20, 40), gfx::Rect(20, 40, 30, 60)),
// Bottom-Left
std::make_tuple(
gfx::Rect(0, 0, 20, 40), gfx::Rect(0, 0, 30, 60),
DisplayPlacement::Position::LEFT, 40, 0,
gfx::Rect(0, 0, 20, 40), gfx::Rect(-30, 40, 30, 60)),
std::make_tuple(
gfx::Rect(0, 0, 20, 40), gfx::Rect(0, 0, 30, 60),
DisplayPlacement::Position::BOTTOM, -30, 0,
gfx::Rect(0, 0, 20, 40), gfx::Rect(-30, 40, 30, 60))));
INSTANTIATE_TEST_CASE_P(DisplayLayoutTestZeroMinimumOverlap, TwoDisplays,
testing::Values(
std::make_tuple(
gfx::Rect(0, 0, 800, 600), gfx::Rect(0, 0, 1024, 768),
DisplayPlacement::Position::LEFT, 0, 14,
gfx::Rect(0, 0, 800, 600), gfx::Rect(-1024, 0, 1024, 768)),
std::make_tuple(
gfx::Rect(0, 0, 800, 600), gfx::Rect(0, 0, 1024, 768),
DisplayPlacement::Position::TOP, 0, 14,
gfx::Rect(0, 0, 800, 600), gfx::Rect(0, -768, 1024, 768)),
std::make_tuple(
gfx::Rect(0, 0, 800, 600), gfx::Rect(0, 0, 1024, 768),
DisplayPlacement::Position::RIGHT, 0, 14,
gfx::Rect(0, 0, 800, 600), gfx::Rect(800, 0, 1024, 768)),
std::make_tuple(
gfx::Rect(0, 0, 800, 600), gfx::Rect(0, 0, 1024, 768),
DisplayPlacement::Position::BOTTOM, 0, 14,
gfx::Rect(0, 0, 800, 600), gfx::Rect(0, 600, 1024, 768))));
INSTANTIATE_TEST_CASE_P(DisplayLayoutTestOffsetMinimumOverlap, TwoDisplays,
testing::Values(
std::make_tuple(
gfx::Rect(0, 0, 800, 600), gfx::Rect(0, 0, 1024, 768),
DisplayPlacement::Position::LEFT, 37, 14,
gfx::Rect(0, 0, 800, 600), gfx::Rect(-1024, 37, 1024, 768)),
std::make_tuple(
gfx::Rect(0, 0, 800, 600), gfx::Rect(0, 0, 1024, 768),
DisplayPlacement::Position::TOP, 37, 14,
gfx::Rect(0, 0, 800, 600), gfx::Rect(37, -768, 1024, 768)),
std::make_tuple(
gfx::Rect(0, 0, 800, 600), gfx::Rect(0, 0, 1024, 768),
DisplayPlacement::Position::RIGHT, 37, 14,
gfx::Rect(0, 0, 800, 600), gfx::Rect(800, 37, 1024, 768)),
std::make_tuple(
gfx::Rect(0, 0, 800, 600), gfx::Rect(0, 0, 1024, 768),
DisplayPlacement::Position::BOTTOM, 37, 14,
gfx::Rect(0, 0, 800, 600), gfx::Rect(37, 600, 1024, 768))));
INSTANTIATE_TEST_CASE_P(DisplayLayoutTestMinimumOverlap, TwoDisplays,
testing::Values(
// Top-Left
std::make_tuple(
gfx::Rect(0, 0, 20, 40), gfx::Rect(0, 0, 30, 60),
DisplayPlacement::Position::LEFT, -60, 14,
gfx::Rect(0, 0, 20, 40), gfx::Rect(-30, -46, 30, 60)),
std::make_tuple(
gfx::Rect(0, 0, 20, 40), gfx::Rect(0, 0, 30, 60),
DisplayPlacement::Position::TOP, -30, 14,
gfx::Rect(0, 0, 20, 40), gfx::Rect(-16, -60, 30, 60)),
// Top-Right
std::make_tuple(
gfx::Rect(0, 0, 20, 40), gfx::Rect(0, 0, 30, 60),
DisplayPlacement::Position::RIGHT, -60, 14,
gfx::Rect(0, 0, 20, 40), gfx::Rect(20, -46, 30, 60)),
std::make_tuple(
gfx::Rect(0, 0, 20, 40), gfx::Rect(0, 0, 30, 60),
DisplayPlacement::Position::TOP, 20, 14,
gfx::Rect(0, 0, 20, 40), gfx::Rect(6, -60, 30, 60)),
// Bottom-Right
std::make_tuple(
gfx::Rect(0, 0, 20, 40), gfx::Rect(0, 0, 30, 60),
DisplayPlacement::Position::RIGHT, 40, 14,
gfx::Rect(0, 0, 20, 40), gfx::Rect(20, 26, 30, 60)),
std::make_tuple(
gfx::Rect(0, 0, 20, 40), gfx::Rect(0, 0, 30, 60),
DisplayPlacement::Position::BOTTOM, 20, 14,
gfx::Rect(0, 0, 20, 40), gfx::Rect(6, 40, 30, 60)),
// Bottom-Left
std::make_tuple(
gfx::Rect(0, 0, 20, 40), gfx::Rect(0, 0, 30, 60),
DisplayPlacement::Position::LEFT, 40, 14,
gfx::Rect(0, 0, 20, 40), gfx::Rect(-30, 26, 30, 60)),
std::make_tuple(
gfx::Rect(0, 0, 20, 40), gfx::Rect(0, 0, 30, 60),
DisplayPlacement::Position::BOTTOM, -30, 14,
gfx::Rect(0, 0, 20, 40), gfx::Rect(-16, 40, 30, 60))));
// Display Layout
// [1] [4]
// [0][3] [6]
// [2] [5]
TEST(DisplayLayoutTest, MultipleDisplays) {
Displays display_list;
display_list.emplace_back(0, gfx::Rect(0, 0, 100, 100));
display_list.emplace_back(1, gfx::Rect(0, 0, 100, 100));
display_list.emplace_back(2, gfx::Rect(0, 0, 100, 100));
display_list.emplace_back(3, gfx::Rect(0, 0, 100, 100));
display_list.emplace_back(4, gfx::Rect(0, 0, 100, 100));
display_list.emplace_back(5, gfx::Rect(0, 0, 100, 100));
display_list.emplace_back(6, gfx::Rect(0, 0, 100, 100));
std::vector<int64_t> updated_ids;
DisplayLayoutBuilder builder(0);
builder.AddDisplayPlacement(1, 0, DisplayPlacement::Position::TOP, 50);
builder.AddDisplayPlacement(2, 0, DisplayPlacement::Position::LEFT, 100);
builder.AddDisplayPlacement(3, 0, DisplayPlacement::Position::RIGHT, 0);
builder.AddDisplayPlacement(4, 3, DisplayPlacement::Position::RIGHT, -100);
builder.AddDisplayPlacement(5, 3, DisplayPlacement::Position::BOTTOM, -50);
builder.AddDisplayPlacement(6, 4, DisplayPlacement::Position::BOTTOM, 100);
std::unique_ptr<DisplayLayout> display_layout(builder.Build());
display_layout->ApplyToDisplayList(&display_list, &updated_ids, 0);
ASSERT_EQ(6u, updated_ids.size());
std::sort(updated_ids.begin(), updated_ids.end());
EXPECT_EQ(1u, updated_ids[0]);
EXPECT_EQ(2u, updated_ids[1]);
EXPECT_EQ(3u, updated_ids[2]);
EXPECT_EQ(4u, updated_ids[3]);
EXPECT_EQ(5u, updated_ids[4]);
EXPECT_EQ(6u, updated_ids[5]);
EXPECT_EQ(gfx::Rect(0, 0, 100, 100), display_list[0].bounds());
EXPECT_EQ(gfx::Rect(50, -100, 100, 100), display_list[1].bounds());
EXPECT_EQ(gfx::Rect(-100, 100, 100, 100), display_list[2].bounds());
EXPECT_EQ(gfx::Rect(100, 0, 100, 100), display_list[3].bounds());
EXPECT_EQ(gfx::Rect(200, -100, 100, 100), display_list[4].bounds());
EXPECT_EQ(gfx::Rect(50, 100, 100, 100), display_list[5].bounds());
EXPECT_EQ(gfx::Rect(300, 0, 100, 100), display_list[6].bounds());
}
namespace {
class TwoDisplaysBottomRightReference
: public testing::TestWithParam<std::tuple<
// Primary Display Bounds
gfx::Rect,
// Secondary Display Bounds
gfx::Rect,
// Secondary Layout Position
DisplayPlacement::Position,
// Secondary Layout Offset
int,
// Minimum Offset Overlap
int,
// Expected Primary Display Bounds
gfx::Rect,
// Expected Secondary Display Bounds
gfx::Rect>> {
public:
TwoDisplaysBottomRightReference() = default;
private:
DISALLOW_COPY_AND_ASSIGN(TwoDisplaysBottomRightReference);
};
} // namespace
TEST_P(TwoDisplaysBottomRightReference, Placement) {
gfx::Rect primary_display_bounds = std::get<0>(GetParam());
gfx::Rect secondary_display_bounds = std::get<1>(GetParam());
DisplayPlacement::Position position = std::get<2>(GetParam());
int offset = std::get<3>(GetParam());
int minimum_offset_overlap = std::get<4>(GetParam());
gfx::Rect expected_primary_display_bounds = std::get<5>(GetParam());
gfx::Rect expected_secondary_display_bounds = std::get<6>(GetParam());
Displays display_list;
display_list.emplace_back(0, primary_display_bounds);
display_list.emplace_back(1, secondary_display_bounds);
std::vector<int64_t> updated_ids;
DisplayLayoutBuilder builder(0);
DisplayPlacement placement;
placement.display_id = 1;
placement.parent_display_id = 0;
placement.position = position;
placement.offset = offset;
placement.offset_reference = DisplayPlacement::OffsetReference::BOTTOM_RIGHT;
builder.AddDisplayPlacement(placement);
std::unique_ptr<DisplayLayout> display_layout(builder.Build());
display_layout->ApplyToDisplayList(
&display_list, &updated_ids, minimum_offset_overlap);
ASSERT_EQ(1u, updated_ids.size());
EXPECT_EQ(1u, updated_ids[0]);
ASSERT_EQ(2u, display_list.size());
EXPECT_EQ(expected_primary_display_bounds, display_list[0].bounds());
EXPECT_EQ(expected_secondary_display_bounds, display_list[1].bounds());
}
INSTANTIATE_TEST_CASE_P(DisplayLayoutTestZero, TwoDisplaysBottomRightReference,
testing::Values(
std::make_tuple(
gfx::Rect(0, 0, 800, 600), gfx::Rect(0, 0, 1024, 768),
DisplayPlacement::Position::LEFT, 0, 0,
gfx::Rect(0, 0, 800, 600), gfx::Rect(-1024, -168, 1024, 768)),
std::make_tuple(
gfx::Rect(0, 0, 800, 600), gfx::Rect(0, 0, 1024, 768),
DisplayPlacement::Position::TOP, 0, 0,
gfx::Rect(0, 0, 800, 600), gfx::Rect(-224, -768, 1024, 768)),
std::make_tuple(
gfx::Rect(0, 0, 800, 600), gfx::Rect(0, 0, 1024, 768),
DisplayPlacement::Position::RIGHT, 0, 0,
gfx::Rect(0, 0, 800, 600), gfx::Rect(800, -168, 1024, 768)),
std::make_tuple(
gfx::Rect(0, 0, 800, 600), gfx::Rect(0, 0, 1024, 768),
DisplayPlacement::Position::BOTTOM, 0, 0,
gfx::Rect(0, 0, 800, 600), gfx::Rect(-224, 600, 1024, 768))));
INSTANTIATE_TEST_CASE_P(DisplayLayoutTestOffset,
TwoDisplaysBottomRightReference, testing::Values(
std::make_tuple(
gfx::Rect(0, 0, 800, 600), gfx::Rect(0, 0, 1024, 768),
DisplayPlacement::Position::LEFT, 7, 0,
gfx::Rect(0, 0, 800, 600), gfx::Rect(-1024, -175, 1024, 768)),
std::make_tuple(
gfx::Rect(0, 0, 800, 600), gfx::Rect(0, 0, 1024, 768),
DisplayPlacement::Position::TOP, 7, 0,
gfx::Rect(0, 0, 800, 600), gfx::Rect(-231, -768, 1024, 768)),
std::make_tuple(
gfx::Rect(0, 0, 800, 600), gfx::Rect(0, 0, 1024, 768),
DisplayPlacement::Position::RIGHT, 7, 0,
gfx::Rect(0, 0, 800, 600), gfx::Rect(800, -175, 1024, 768)),
std::make_tuple(
gfx::Rect(0, 0, 800, 600), gfx::Rect(0, 0, 1024, 768),
DisplayPlacement::Position::BOTTOM, 7, 0,
gfx::Rect(0, 0, 800, 600), gfx::Rect(-231, 600, 1024, 768))));
} // namespace display