| Index: chrome/browser/extensions/api/system_info_display/display_info_provider_chromeos_unittest.cc
|
| diff --git a/chrome/browser/extensions/api/system_info_display/display_info_provider_chromeos_unittest.cc b/chrome/browser/extensions/api/system_info_display/display_info_provider_chromeos_unittest.cc
|
| new file mode 100644
|
| index 0000000000000000000000000000000000000000..db82e6ad64a359654fc0766d65c0d134e95568cf
|
| --- /dev/null
|
| +++ b/chrome/browser/extensions/api/system_info_display/display_info_provider_chromeos_unittest.cc
|
| @@ -0,0 +1,914 @@
|
| +// Copyright (c) 2013 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 "chrome/browser/extensions/api/system_info_display/display_info_provider.h"
|
| +
|
| +#include "ash/display/display_controller.h"
|
| +#include "ash/display/display_manager.h"
|
| +#include "ash/shell.h"
|
| +#include "ash/test/ash_test_base.h"
|
| +#include "ash/test/display_manager_test_api.h"
|
| +#include "base/strings/string_number_conversions.h"
|
| +#include "base/strings/stringprintf.h"
|
| +#include "ui/gfx/display.h"
|
| +#include "ui/gfx/rect.h"
|
| +
|
| +namespace extensions {
|
| +namespace {
|
| +
|
| +void BindRequestDisplayInfoResult(DisplayInfo* target,
|
| + const DisplayInfo& result,
|
| + bool success) {
|
| + ASSERT_TRUE(success);
|
| + *target = result;
|
| +}
|
| +
|
| +void BindSetDisplayUnitInfoResult(bool* success,
|
| + std::string* error,
|
| + bool success_in,
|
| + const std::string& error_in) {
|
| + *success = success_in;
|
| + *error = error_in;
|
| +}
|
| +
|
| +class DisplayInfoProviderChromeosTest : public ash::test::AshTestBase {
|
| + public:
|
| + DisplayInfoProviderChromeosTest() {}
|
| +
|
| + virtual ~DisplayInfoProviderChromeosTest() {}
|
| +
|
| + protected:
|
| + void CallRequestDisplayInfo(DisplayInfo* result) {
|
| + DisplayInfoProvider::GetProvider()->RequestInfo(
|
| + base::Bind(&BindRequestDisplayInfoResult, result));
|
| + RunAllPendingInMessageLoop();
|
| + }
|
| +
|
| + void CallSetDisplayUnitInfo(
|
| + const std::string& display_id,
|
| + const api::system_info_display::DisplayProperties& info,
|
| + bool* success,
|
| + std::string* error) {
|
| + DisplayInfoProvider::GetProvider()->SetInfo(display_id, info,
|
| + base::Bind(&BindSetDisplayUnitInfoResult, success, error));
|
| + RunAllPendingInMessageLoop();
|
| + }
|
| +
|
| + bool DisplayExists(int64 display_id) const {
|
| + const gfx::Display& display =
|
| + GetDisplayManager()->GetDisplayForId(display_id);
|
| + return display.id() != gfx::Display::kInvalidDisplayID;
|
| + }
|
| +
|
| + ash::internal::DisplayManager* GetDisplayManager() const {
|
| + return ash::Shell::GetInstance()->display_manager();
|
| + }
|
| +
|
| + ash::DisplayController* GetDisplayController() const {
|
| + return ash::Shell::GetInstance()->display_controller();
|
| + }
|
| +
|
| + std::string SystemInfoDisplayInsetsToString(
|
| + const api::system_info_display::Insets& insets) const {
|
| + // Order to match gfx::Insets::ToString().
|
| + return base::StringPrintf("%d,%d,%d,%d",
|
| + insets.top, insets.left, insets.bottom, insets.right);
|
| + }
|
| +
|
| + std::string SystemInfoDisplayBoundsToString(
|
| + const api::system_info_display::Bounds& bounds) const {
|
| + // Order to match gfx::Rect::ToString().
|
| + return base::StringPrintf("%d,%d %dx%d",
|
| + bounds.left, bounds.top, bounds.width, bounds.height);
|
| + }
|
| +
|
| + DISALLOW_COPY_AND_ASSIGN(DisplayInfoProviderChromeosTest);
|
| +};
|
| +
|
| +TEST_F(DisplayInfoProviderChromeosTest, GetBasic) {
|
| + UpdateDisplay("500x600,400x520");
|
| + DisplayInfo result;
|
| + CallRequestDisplayInfo(&result);
|
| +
|
| + ASSERT_EQ(2u, result.size());
|
| +
|
| + int64 display_id;
|
| + ASSERT_TRUE(base::StringToInt64(result[0]->id, &display_id))
|
| + << "Display id must be convertable to integer: " << result[0]->id;
|
| +
|
| + ASSERT_TRUE(DisplayExists(display_id)) << display_id << " not found";
|
| + EXPECT_EQ("0,0 500x600", SystemInfoDisplayBoundsToString(result[0]->bounds));
|
| + EXPECT_EQ("0,0,0,0", SystemInfoDisplayInsetsToString(result[0]->overscan));
|
| + EXPECT_EQ(0, result[0]->rotation);
|
| + EXPECT_TRUE(result[0]->is_primary);
|
| + EXPECT_EQ(96, result[0]->dpi_x);
|
| + EXPECT_EQ(96, result[0]->dpi_y);
|
| + EXPECT_TRUE(result[0]->mirroring_source_id.empty());
|
| + EXPECT_TRUE(result[0]->is_enabled);
|
| +
|
| + ASSERT_TRUE(base::StringToInt64(result[1]->id, &display_id))
|
| + << "Display id must be convertable to integer: " << result[0]->id;
|
| +
|
| + ASSERT_TRUE(DisplayExists(display_id)) << display_id << " not found";
|
| + EXPECT_EQ(GetDisplayManager()->GetDisplayNameForId(display_id),
|
| + result[1]->name);
|
| + // The second display is positioned left of the primary display, whose width
|
| + // is 500.
|
| + EXPECT_EQ("500,0 400x520",
|
| + SystemInfoDisplayBoundsToString(result[1]->bounds));
|
| + EXPECT_EQ("0,0,0,0", SystemInfoDisplayInsetsToString(result[1]->overscan));
|
| + EXPECT_EQ(0, result[1]->rotation);
|
| + EXPECT_FALSE(result[1]->is_primary);
|
| + EXPECT_EQ(96, result[1]->dpi_x);
|
| + EXPECT_EQ(96, result[1]->dpi_y);
|
| + EXPECT_TRUE(result[1]->mirroring_source_id.empty());
|
| + EXPECT_TRUE(result[1]->is_enabled);
|
| +}
|
| +
|
| +TEST_F(DisplayInfoProviderChromeosTest, GetRotation) {
|
| + UpdateDisplay("500x600/r");
|
| + DisplayInfo result;
|
| + CallRequestDisplayInfo(&result);
|
| +
|
| + ASSERT_EQ(1u, result.size());
|
| +
|
| + int64 display_id;
|
| + ASSERT_TRUE(base::StringToInt64(result[0]->id, &display_id))
|
| + << "Display id must be convertable to integer: " << result[0]->id;
|
| +
|
| + ASSERT_TRUE(DisplayExists(display_id)) << display_id << " not found";
|
| + EXPECT_EQ("0,0 600x500", SystemInfoDisplayBoundsToString(result[0]->bounds));
|
| + EXPECT_EQ(90, result[0]->rotation);
|
| +
|
| + GetDisplayManager()->SetDisplayRotation(display_id, gfx::Display::ROTATE_270);
|
| +
|
| + CallRequestDisplayInfo(&result);
|
| +
|
| + ASSERT_EQ(1u, result.size());
|
| +
|
| + EXPECT_EQ(base::Int64ToString(display_id), result[0]->id);
|
| + EXPECT_EQ("0,0 600x500", SystemInfoDisplayBoundsToString(result[0]->bounds));
|
| + EXPECT_EQ(270, result[0]->rotation);
|
| +
|
| + GetDisplayManager()->SetDisplayRotation(display_id, gfx::Display::ROTATE_180);
|
| +
|
| + CallRequestDisplayInfo(&result);
|
| +
|
| + ASSERT_EQ(1u, result.size());
|
| +
|
| + EXPECT_EQ(base::Int64ToString(display_id), result[0]->id);
|
| + EXPECT_EQ("0,0 500x600", SystemInfoDisplayBoundsToString(result[0]->bounds));
|
| + EXPECT_EQ(180, result[0]->rotation);
|
| +
|
| + GetDisplayManager()->SetDisplayRotation(display_id, gfx::Display::ROTATE_0);
|
| +
|
| + CallRequestDisplayInfo(&result);
|
| +
|
| + ASSERT_EQ(1u, result.size());
|
| +
|
| + EXPECT_EQ(base::Int64ToString(display_id), result[0]->id);
|
| + EXPECT_EQ("0,0 500x600", SystemInfoDisplayBoundsToString(result[0]->bounds));
|
| + EXPECT_EQ(0, result[0]->rotation);
|
| +}
|
| +
|
| +TEST_F(DisplayInfoProviderChromeosTest, GetHiDPI) {
|
| + UpdateDisplay("500x600,400x520*2");
|
| + DisplayInfo result;
|
| + CallRequestDisplayInfo(&result);
|
| +
|
| + ASSERT_EQ(2u, result.size());
|
| +
|
| + EXPECT_EQ("0,0 500x600", SystemInfoDisplayBoundsToString(result[0]->bounds));
|
| + EXPECT_EQ(96, result[0]->dpi_x);
|
| + EXPECT_EQ(96, result[0]->dpi_y);
|
| +
|
| + EXPECT_EQ("500,0 200x260",
|
| + SystemInfoDisplayBoundsToString(result[1]->bounds));
|
| + EXPECT_EQ(2 * 96, result[1]->dpi_x);
|
| + EXPECT_EQ(2 * 96, result[1]->dpi_y);
|
| +
|
| + GetDisplayController()->SwapPrimaryDisplay();
|
| +
|
| + CallRequestDisplayInfo(&result);
|
| +
|
| + ASSERT_EQ(2u, result.size());
|
| +
|
| + EXPECT_EQ("-500,0 500x600",
|
| + SystemInfoDisplayBoundsToString(result[0]->bounds));
|
| + EXPECT_EQ(96, result[0]->dpi_x);
|
| + EXPECT_EQ(96, result[0]->dpi_y);
|
| +
|
| + EXPECT_EQ("0,0 200x260", SystemInfoDisplayBoundsToString(result[1]->bounds));
|
| + EXPECT_EQ(2 * 96, result[1]->dpi_x);
|
| + EXPECT_EQ(2 * 96, result[1]->dpi_y);
|
| +}
|
| +
|
| +TEST_F(DisplayInfoProviderChromeosTest, GetVisibleArea) {
|
| + UpdateDisplay("640x720*2/o, 400x520/o");
|
| + DisplayInfo result;
|
| + CallRequestDisplayInfo(&result);
|
| +
|
| + ASSERT_EQ(2u, result.size());
|
| +
|
| + int64 display_id;
|
| + ASSERT_TRUE(base::StringToInt64(result[1]->id, &display_id))
|
| + << "Display id must be convertable to integer: " << result[1]->id;
|
| + ASSERT_TRUE(DisplayExists(display_id)) << display_id << " not found";
|
| +
|
| + // Default overscan is 5%.
|
| + EXPECT_EQ("304,0 380x494",
|
| + SystemInfoDisplayBoundsToString(result[1]->bounds));
|
| + EXPECT_EQ("13,10,13,10",
|
| + SystemInfoDisplayInsetsToString(result[1]->overscan));
|
| +
|
| + GetDisplayManager()->SetOverscanInsets(display_id,
|
| + gfx::Insets(20, 30, 50, 60));
|
| + CallRequestDisplayInfo(&result);
|
| +
|
| + ASSERT_EQ(2u, result.size());
|
| +
|
| + EXPECT_EQ(base::Int64ToString(display_id), result[1]->id);
|
| + EXPECT_EQ("304,0 310x450",
|
| + SystemInfoDisplayBoundsToString(result[1]->bounds));
|
| + EXPECT_EQ("20,30,50,60",
|
| + SystemInfoDisplayInsetsToString(result[1]->overscan));
|
| +
|
| + // Set insets for the primary screen. Note that it has 2x scale.
|
| + ASSERT_TRUE(base::StringToInt64(result[0]->id, &display_id))
|
| + << "Display id must be convertable to integer: " << result[0]->id;
|
| + ASSERT_TRUE(DisplayExists(display_id)) << display_id << " not found";
|
| +
|
| + EXPECT_EQ("0,0 304x342", SystemInfoDisplayBoundsToString(result[0]->bounds));
|
| + EXPECT_EQ("9,8,9,8", SystemInfoDisplayInsetsToString(result[0]->overscan));
|
| +
|
| + GetDisplayManager()->SetOverscanInsets(display_id,
|
| + gfx::Insets(10, 20, 30, 40));
|
| + CallRequestDisplayInfo(&result);
|
| +
|
| + ASSERT_EQ(2u, result.size());
|
| +
|
| + EXPECT_EQ(base::Int64ToString(display_id), result[0]->id);
|
| + EXPECT_EQ("0,0 260x320", SystemInfoDisplayBoundsToString(result[0]->bounds));
|
| + EXPECT_EQ("10,20,30,40",
|
| + SystemInfoDisplayInsetsToString(result[0]->overscan));
|
| +}
|
| +
|
| +TEST_F(DisplayInfoProviderChromeosTest, GetMirroring) {
|
| + UpdateDisplay("600x600, 400x520/o");
|
| + DisplayInfo result;
|
| + CallRequestDisplayInfo(&result);
|
| +
|
| + ASSERT_EQ(2u, result.size());
|
| +
|
| + int64 display_id_primary;
|
| + ASSERT_TRUE(base::StringToInt64(result[0]->id, &display_id_primary))
|
| + << "Display id must be convertable to integer: " << result[0]->id;
|
| + ASSERT_TRUE(DisplayExists(display_id_primary))
|
| + << display_id_primary << " not found";
|
| +
|
| + int64 display_id_secondary;
|
| + ASSERT_TRUE(base::StringToInt64(result[1]->id, &display_id_secondary))
|
| + << "Display id must be convertable to integer: " << result[1]->id;
|
| + ASSERT_TRUE(DisplayExists(display_id_secondary))
|
| + << display_id_secondary << " not found";
|
| +
|
| + ASSERT_FALSE(GetDisplayManager()->IsMirrored());
|
| + EXPECT_TRUE(result[0]->mirroring_source_id.empty());
|
| + EXPECT_TRUE(result[1]->mirroring_source_id.empty());
|
| +
|
| + GetDisplayManager()->SetMirrorMode(true);
|
| + ASSERT_TRUE(GetDisplayManager()->IsMirrored());
|
| +
|
| + CallRequestDisplayInfo(&result);
|
| +
|
| + ASSERT_EQ(1u, result.size());
|
| + EXPECT_EQ(base::Int64ToString(display_id_primary), result[0]->id);
|
| + EXPECT_EQ(base::Int64ToString(display_id_secondary),
|
| + result[0]->mirroring_source_id);
|
| +
|
| + GetDisplayManager()->SetMirrorMode(false);
|
| + ASSERT_FALSE(GetDisplayManager()->IsMirrored());
|
| +
|
| + CallRequestDisplayInfo(&result);
|
| +
|
| + ASSERT_EQ(2u, result.size());
|
| + EXPECT_EQ(base::Int64ToString(display_id_primary), result[0]->id);
|
| + EXPECT_TRUE(result[0]->mirroring_source_id.empty());
|
| + EXPECT_EQ(base::Int64ToString(display_id_secondary), result[1]->id);
|
| + EXPECT_TRUE(result[1]->mirroring_source_id.empty());
|
| +}
|
| +
|
| +TEST_F(DisplayInfoProviderChromeosTest, GetBounds) {
|
| + UpdateDisplay("600x600, 400x520");
|
| + GetDisplayController()->SetLayoutForCurrentDisplays(
|
| + ash::DisplayLayout::FromInts(ash::DisplayLayout::LEFT, -40));
|
| +
|
| + DisplayInfo result;
|
| + CallRequestDisplayInfo(&result);
|
| + ASSERT_EQ(2u, result.size());
|
| + EXPECT_EQ("0,0 600x600", SystemInfoDisplayBoundsToString(result[0]->bounds));
|
| + EXPECT_EQ("-400,-40 400x520",
|
| + SystemInfoDisplayBoundsToString(result[1]->bounds));
|
| +
|
| + GetDisplayController()->SetLayoutForCurrentDisplays(
|
| + ash::DisplayLayout::FromInts(ash::DisplayLayout::TOP, 40));
|
| +
|
| + CallRequestDisplayInfo(&result);
|
| + ASSERT_EQ(2u, result.size());
|
| + EXPECT_EQ("0,0 600x600", SystemInfoDisplayBoundsToString(result[0]->bounds));
|
| + EXPECT_EQ("40,-520 400x520",
|
| + SystemInfoDisplayBoundsToString(result[1]->bounds));
|
| +
|
| + GetDisplayController()->SetLayoutForCurrentDisplays(
|
| + ash::DisplayLayout::FromInts(ash::DisplayLayout::BOTTOM, 80));
|
| +
|
| + CallRequestDisplayInfo(&result);
|
| + ASSERT_EQ(2u, result.size());
|
| + EXPECT_EQ("0,0 600x600", SystemInfoDisplayBoundsToString(result[0]->bounds));
|
| + EXPECT_EQ("80,600 400x520",
|
| + SystemInfoDisplayBoundsToString(result[1]->bounds));
|
| +}
|
| +
|
| +TEST_F(DisplayInfoProviderChromeosTest, SetBoundsOriginLeftExact) {
|
| + UpdateDisplay("1200x600,520x400");
|
| +
|
| + const gfx::Display* secondary = GetDisplayController()->GetSecondaryDisplay();
|
| + api::system_info_display::DisplayProperties info;
|
| + info.bounds_origin_x.reset(new int(-520));
|
| + info.bounds_origin_y.reset(new int(50));
|
| +
|
| + bool success = false;
|
| + std::string error;
|
| + CallSetDisplayUnitInfo(base::Int64ToString(secondary->id()), info,
|
| + &success, &error);
|
| +
|
| + ASSERT_TRUE(success);
|
| + ASSERT_TRUE(error.empty());
|
| +
|
| + EXPECT_EQ("-520,50 520x400", secondary->bounds().ToString());
|
| +}
|
| +
|
| +TEST_F(DisplayInfoProviderChromeosTest, SetBoundsOriginRightExact) {
|
| + UpdateDisplay("1200x600,520x400");
|
| +
|
| + const gfx::Display* secondary = GetDisplayController()->GetSecondaryDisplay();
|
| + api::system_info_display::DisplayProperties info;
|
| + info.bounds_origin_x.reset(new int(1200));
|
| + info.bounds_origin_y.reset(new int(100));
|
| +
|
| + bool success = false;
|
| + std::string error;
|
| + CallSetDisplayUnitInfo(base::Int64ToString(secondary->id()), info,
|
| + &success, &error);
|
| +
|
| + ASSERT_TRUE(success);
|
| + ASSERT_TRUE(error.empty());
|
| +
|
| + EXPECT_EQ("1200,100 520x400", secondary->bounds().ToString());
|
| +}
|
| +
|
| +TEST_F(DisplayInfoProviderChromeosTest, SetBoundsOriginTopExact) {
|
| + UpdateDisplay("1200x600,520x400");
|
| +
|
| + const gfx::Display* secondary = GetDisplayController()->GetSecondaryDisplay();
|
| + api::system_info_display::DisplayProperties info;
|
| + info.bounds_origin_x.reset(new int(1100));
|
| + info.bounds_origin_y.reset(new int(-400));
|
| +
|
| + bool success = false;
|
| + std::string error;
|
| + CallSetDisplayUnitInfo(base::Int64ToString(secondary->id()), info,
|
| + &success, &error);
|
| +
|
| + ASSERT_TRUE(success);
|
| + ASSERT_TRUE(error.empty());
|
| +
|
| + EXPECT_EQ("1100,-400 520x400", secondary->bounds().ToString());
|
| +}
|
| +
|
| +TEST_F(DisplayInfoProviderChromeosTest, SetBoundsOriginBottomExact) {
|
| + UpdateDisplay("1200x600,520x400");
|
| +
|
| + const gfx::Display* secondary = GetDisplayController()->GetSecondaryDisplay();
|
| + api::system_info_display::DisplayProperties info;
|
| + info.bounds_origin_x.reset(new int(-350));
|
| + info.bounds_origin_y.reset(new int(600));
|
| +
|
| + bool success = false;
|
| + std::string error;
|
| + CallSetDisplayUnitInfo(base::Int64ToString(secondary->id()), info,
|
| + &success, &error);
|
| +
|
| + ASSERT_TRUE(success);
|
| + ASSERT_TRUE(error.empty());
|
| +
|
| + EXPECT_EQ("-350,600 520x400", secondary->bounds().ToString());
|
| +}
|
| +
|
| +TEST_F(DisplayInfoProviderChromeosTest, SetBoundsOriginSameCenter) {
|
| + UpdateDisplay("1200x600,520x400");
|
| +
|
| + const gfx::Display* secondary = GetDisplayController()->GetSecondaryDisplay();
|
| + api::system_info_display::DisplayProperties info;
|
| + info.bounds_origin_x.reset(new int(340));
|
| + info.bounds_origin_y.reset(new int(100));
|
| +
|
| + bool success = false;
|
| + std::string error;
|
| + CallSetDisplayUnitInfo(base::Int64ToString(secondary->id()), info,
|
| + &success, &error);
|
| +
|
| + ASSERT_TRUE(success);
|
| + ASSERT_TRUE(error.empty());
|
| +
|
| + EXPECT_EQ("1200,100 520x400", secondary->bounds().ToString());
|
| +}
|
| +
|
| +TEST_F(DisplayInfoProviderChromeosTest, SetBoundsOriginLeftOutside) {
|
| + UpdateDisplay("1200x600,520x400");
|
| +
|
| + const gfx::Display* secondary = GetDisplayController()->GetSecondaryDisplay();
|
| + api::system_info_display::DisplayProperties info;
|
| + info.bounds_origin_x.reset(new int(-1040));
|
| + info.bounds_origin_y.reset(new int(100));
|
| +
|
| + bool success = false;
|
| + std::string error;
|
| + CallSetDisplayUnitInfo(base::Int64ToString(secondary->id()), info,
|
| + &success, &error);
|
| +
|
| + ASSERT_TRUE(success);
|
| + ASSERT_TRUE(error.empty());
|
| +
|
| + EXPECT_EQ("-520,100 520x400", secondary->bounds().ToString());
|
| +}
|
| +
|
| +TEST_F(DisplayInfoProviderChromeosTest, SetBoundsOriginTopOutside) {
|
| + UpdateDisplay("1200x600,520x400");
|
| +
|
| + const gfx::Display* secondary = GetDisplayController()->GetSecondaryDisplay();
|
| + api::system_info_display::DisplayProperties info;
|
| + info.bounds_origin_x.reset(new int(-360));
|
| + info.bounds_origin_y.reset(new int(-301));
|
| +
|
| + bool success = false;
|
| + std::string error;
|
| + CallSetDisplayUnitInfo(base::Int64ToString(secondary->id()), info,
|
| + &success, &error);
|
| +
|
| + ASSERT_TRUE(success);
|
| + ASSERT_TRUE(error.empty());
|
| +
|
| + EXPECT_EQ("-360,-400 520x400", secondary->bounds().ToString());
|
| +}
|
| +
|
| +TEST_F(DisplayInfoProviderChromeosTest,
|
| + SetBoundsOriginLeftButSharesBottomSide) {
|
| + UpdateDisplay("1200x600,1000x100");
|
| +
|
| + const gfx::Display* secondary = GetDisplayController()->GetSecondaryDisplay();
|
| + api::system_info_display::DisplayProperties info;
|
| + info.bounds_origin_x.reset(new int(-650));
|
| + info.bounds_origin_y.reset(new int(700));
|
| +
|
| + bool success = false;
|
| + std::string error;
|
| + CallSetDisplayUnitInfo(base::Int64ToString(secondary->id()), info,
|
| + &success, &error);
|
| +
|
| + ASSERT_TRUE(success);
|
| + ASSERT_TRUE(error.empty());
|
| +
|
| + EXPECT_EQ("-650,600 1000x100", secondary->bounds().ToString());
|
| +}
|
| +
|
| +TEST_F(DisplayInfoProviderChromeosTest,
|
| + SetBoundsOriginRightButSharesTopSide) {
|
| + UpdateDisplay("1200x600,1000x100");
|
| +
|
| + const gfx::Display* secondary = GetDisplayController()->GetSecondaryDisplay();
|
| + api::system_info_display::DisplayProperties info;
|
| + info.bounds_origin_x.reset(new int(850));
|
| + info.bounds_origin_y.reset(new int(-150));
|
| +
|
| + bool success = false;
|
| + std::string error;
|
| + CallSetDisplayUnitInfo(base::Int64ToString(secondary->id()), info,
|
| + &success, &error);
|
| +
|
| + ASSERT_TRUE(success);
|
| + ASSERT_TRUE(error.empty());
|
| +
|
| + EXPECT_EQ("850,-100 1000x100", secondary->bounds().ToString());
|
| +}
|
| +
|
| +TEST_F(DisplayInfoProviderChromeosTest,
|
| + SetBoundsOriginTopButSharesLeftSide) {
|
| + UpdateDisplay("1200x600,1000x100/l");
|
| +
|
| + const gfx::Display* secondary = GetDisplayController()->GetSecondaryDisplay();
|
| + api::system_info_display::DisplayProperties info;
|
| + info.bounds_origin_x.reset(new int(-150));
|
| + info.bounds_origin_y.reset(new int(-650));
|
| +
|
| + bool success = false;
|
| + std::string error;
|
| + CallSetDisplayUnitInfo(base::Int64ToString(secondary->id()), info,
|
| + &success, &error);
|
| +
|
| + ASSERT_TRUE(success);
|
| + ASSERT_TRUE(error.empty());
|
| +
|
| + EXPECT_EQ("-100,-650 100x1000", secondary->bounds().ToString());
|
| +}
|
| +
|
| +TEST_F(DisplayInfoProviderChromeosTest,
|
| + SetBoundsOriginBottomButSharesRightSide) {
|
| + UpdateDisplay("1200x600,1000x100/l");
|
| +
|
| + const gfx::Display* secondary = GetDisplayController()->GetSecondaryDisplay();
|
| + api::system_info_display::DisplayProperties info;
|
| + info.bounds_origin_x.reset(new int(1350));
|
| + info.bounds_origin_y.reset(new int(450));
|
| +
|
| + bool success = false;
|
| + std::string error;
|
| + CallSetDisplayUnitInfo(base::Int64ToString(secondary->id()), info,
|
| + &success, &error);
|
| +
|
| + ASSERT_TRUE(success);
|
| + ASSERT_TRUE(error.empty());
|
| +
|
| + EXPECT_EQ("1200,450 100x1000", secondary->bounds().ToString());
|
| +}
|
| +
|
| +TEST_F(DisplayInfoProviderChromeosTest, SetBoundsOriginPrimaryHiDPI) {
|
| + UpdateDisplay("1200x600*2,500x500");
|
| +
|
| + const gfx::Display* secondary = GetDisplayController()->GetSecondaryDisplay();
|
| + api::system_info_display::DisplayProperties info;
|
| + info.bounds_origin_x.reset(new int(250));
|
| + info.bounds_origin_y.reset(new int(-100));
|
| +
|
| + bool success = false;
|
| + std::string error;
|
| + CallSetDisplayUnitInfo(base::Int64ToString(secondary->id()), info,
|
| + &success, &error);
|
| +
|
| + ASSERT_TRUE(success);
|
| + ASSERT_TRUE(error.empty());
|
| +
|
| + EXPECT_EQ("600,-100 500x500", secondary->bounds().ToString());
|
| +}
|
| +
|
| +TEST_F(DisplayInfoProviderChromeosTest, SetBoundsOriginSecondaryHiDPI) {
|
| + UpdateDisplay("1200x600,600x1000*2");
|
| +
|
| + const gfx::Display* secondary = GetDisplayController()->GetSecondaryDisplay();
|
| + api::system_info_display::DisplayProperties info;
|
| + info.bounds_origin_x.reset(new int(450));
|
| + info.bounds_origin_y.reset(new int(-100));
|
| +
|
| + bool success = false;
|
| + std::string error;
|
| + CallSetDisplayUnitInfo(base::Int64ToString(secondary->id()), info,
|
| + &success, &error);
|
| +
|
| + ASSERT_TRUE(success);
|
| + ASSERT_TRUE(error.empty());
|
| +
|
| + EXPECT_EQ("450,-500 300x500", secondary->bounds().ToString());
|
| +}
|
| +
|
| +TEST_F(DisplayInfoProviderChromeosTest, SetBoundsOriginOutOfBounds) {
|
| + UpdateDisplay("1200x600,600x1000*2");
|
| +
|
| + const gfx::Display* secondary = GetDisplayController()->GetSecondaryDisplay();
|
| + api::system_info_display::DisplayProperties info;
|
| + info.bounds_origin_x.reset(new int(0x200001));
|
| + info.bounds_origin_y.reset(new int(-100));
|
| +
|
| + bool success = false;
|
| + std::string error;
|
| + CallSetDisplayUnitInfo(base::Int64ToString(secondary->id()), info,
|
| + &success, &error);
|
| +
|
| + ASSERT_FALSE(success);
|
| + ASSERT_EQ("Bounds origin x out of bounds.", error);
|
| +
|
| + EXPECT_EQ("1200,0 300x500", secondary->bounds().ToString());
|
| +}
|
| +
|
| +TEST_F(DisplayInfoProviderChromeosTest, SetBoundsOriginOutOfBoundsNegative) {
|
| + UpdateDisplay("1200x600,600x1000*2");
|
| +
|
| + const gfx::Display* secondary = GetDisplayController()->GetSecondaryDisplay();
|
| + api::system_info_display::DisplayProperties info;
|
| + info.bounds_origin_x.reset(new int(300));
|
| + info.bounds_origin_y.reset(new int(-0x200001));
|
| +
|
| + bool success = false;
|
| + std::string error;
|
| + CallSetDisplayUnitInfo(base::Int64ToString(secondary->id()), info,
|
| + &success, &error);
|
| +
|
| + ASSERT_FALSE(success);
|
| + ASSERT_EQ("Bounds origin y out of bounds.", error);
|
| +
|
| + EXPECT_EQ("1200,0 300x500", secondary->bounds().ToString());
|
| +}
|
| +
|
| +TEST_F(DisplayInfoProviderChromeosTest, SetBoundsOriginMaxValues) {
|
| + UpdateDisplay("1200x4600,600x1000*2");
|
| +
|
| + const gfx::Display* secondary = GetDisplayController()->GetSecondaryDisplay();
|
| + api::system_info_display::DisplayProperties info;
|
| + info.bounds_origin_x.reset(new int(200000));
|
| + info.bounds_origin_y.reset(new int(10));
|
| +
|
| + bool success = false;
|
| + std::string error;
|
| + CallSetDisplayUnitInfo(base::Int64ToString(secondary->id()), info,
|
| + &success, &error);
|
| +
|
| + ASSERT_TRUE(success);
|
| + EXPECT_TRUE(error.empty());
|
| +
|
| + EXPECT_EQ("1200,10 300x500", secondary->bounds().ToString());
|
| +}
|
| +
|
| +TEST_F(DisplayInfoProviderChromeosTest, SetBoundsOriginOnPrimary) {
|
| + UpdateDisplay("1200x600,600x1000*2");
|
| +
|
| + const gfx::Display* secondary = GetDisplayController()->GetSecondaryDisplay();
|
| + api::system_info_display::DisplayProperties info;
|
| + info.bounds_origin_x.reset(new int(300));
|
| + info.is_primary.reset(new bool(true));
|
| +
|
| + bool success = false;
|
| + std::string error;
|
| + CallSetDisplayUnitInfo(base::Int64ToString(secondary->id()), info,
|
| + &success, &error);
|
| +
|
| + ASSERT_FALSE(success);
|
| + ASSERT_EQ("Bounds origin not allowed for the primary display.", error);
|
| +
|
| + EXPECT_EQ("1200,0 300x500", secondary->bounds().ToString());
|
| + // The operation failed because the primary property would be set before
|
| + // setting bounds. The primary display shouldn't have been changed, though.
|
| + EXPECT_NE(ash::DisplayController::GetPrimaryDisplay().id(), secondary->id());
|
| +}
|
| +
|
| +TEST_F(DisplayInfoProviderChromeosTest, SetBoundsOriginWithMirroring) {
|
| + UpdateDisplay("1200x600,600x1000*2");
|
| +
|
| + const gfx::Display* secondary = GetDisplayController()->GetSecondaryDisplay();
|
| + const gfx::Display& primary = GetDisplayController()->GetPrimaryDisplay();
|
| +
|
| + api::system_info_display::DisplayProperties info;
|
| + info.bounds_origin_x.reset(new int(300));
|
| + info.mirroring_source_id.reset(
|
| + new std::string(base::Int64ToString(primary.id())));
|
| +
|
| + bool success = false;
|
| + std::string error;
|
| + CallSetDisplayUnitInfo(base::Int64ToString(secondary->id()), info,
|
| + &success, &error);
|
| +
|
| + ASSERT_FALSE(success);
|
| + ASSERT_EQ("No other parameter should be set alongside mirroringSourceId.",
|
| + error);
|
| +}
|
| +
|
| +TEST_F(DisplayInfoProviderChromeosTest, SetRotation) {
|
| + UpdateDisplay("1200x600,600x1000*2");
|
| +
|
| + const gfx::Display* secondary = GetDisplayController()->GetSecondaryDisplay();
|
| + api::system_info_display::DisplayProperties info;
|
| + info.rotation.reset(new int(90));
|
| +
|
| + bool success = false;
|
| + std::string error;
|
| + CallSetDisplayUnitInfo(base::Int64ToString(secondary->id()), info,
|
| + &success, &error);
|
| +
|
| + ASSERT_TRUE(success);
|
| + EXPECT_TRUE(error.empty());
|
| +
|
| + EXPECT_EQ("1200,0 500x300", secondary->bounds().ToString());
|
| + EXPECT_EQ(gfx::Display::ROTATE_90, secondary->rotation());
|
| +
|
| + info.rotation.reset(new int(270));
|
| + CallSetDisplayUnitInfo(base::Int64ToString(secondary->id()), info,
|
| + &success, &error);
|
| +
|
| + ASSERT_TRUE(success);
|
| + EXPECT_TRUE(error.empty());
|
| +
|
| + EXPECT_EQ("1200,0 500x300", secondary->bounds().ToString());
|
| + EXPECT_EQ(gfx::Display::ROTATE_270, secondary->rotation());
|
| +
|
| + info.rotation.reset(new int(180));
|
| + // Switch primary display.
|
| + info.is_primary.reset(new bool(true));
|
| + CallSetDisplayUnitInfo(base::Int64ToString(secondary->id()), info,
|
| + &success, &error);
|
| +
|
| + ASSERT_TRUE(success);
|
| + EXPECT_TRUE(error.empty());
|
| +
|
| + EXPECT_EQ("0,0 300x500", secondary->bounds().ToString());
|
| + EXPECT_EQ(gfx::Display::ROTATE_180, secondary->rotation());
|
| + EXPECT_EQ(ash::DisplayController::GetPrimaryDisplay().id(), secondary->id());
|
| +
|
| + info.rotation.reset(new int(0));
|
| + CallSetDisplayUnitInfo(base::Int64ToString(secondary->id()), info,
|
| + &success, &error);
|
| +
|
| + ASSERT_TRUE(success);
|
| + EXPECT_TRUE(error.empty());
|
| +
|
| + EXPECT_EQ("0,0 300x500", secondary->bounds().ToString());
|
| + EXPECT_EQ(gfx::Display::ROTATE_0, secondary->rotation());
|
| + EXPECT_EQ(ash::DisplayController::GetPrimaryDisplay().id(), secondary->id());
|
| +}
|
| +
|
| +TEST_F(DisplayInfoProviderChromeosTest, SetInvalidRotation) {
|
| + UpdateDisplay("1200x600,600x1000*2");
|
| +
|
| + const gfx::Display* secondary = GetDisplayController()->GetSecondaryDisplay();
|
| + api::system_info_display::DisplayProperties info;
|
| + info.rotation.reset(new int(91));
|
| +
|
| + bool success = false;
|
| + std::string error;
|
| + CallSetDisplayUnitInfo(base::Int64ToString(secondary->id()), info,
|
| + &success, &error);
|
| +
|
| + ASSERT_FALSE(success);
|
| + EXPECT_EQ("Invalid rotation.", error);
|
| +}
|
| +
|
| +TEST_F(DisplayInfoProviderChromeosTest, SetNegativeOverscan) {
|
| + UpdateDisplay("1200x600,600x1000*2");
|
| +
|
| + const gfx::Display* secondary = GetDisplayController()->GetSecondaryDisplay();
|
| + api::system_info_display::DisplayProperties info;
|
| + info.overscan.reset(new api::system_info_display::Insets);
|
| + info.overscan->left= -10;
|
| +
|
| + bool success = false;
|
| + std::string error;
|
| + CallSetDisplayUnitInfo(base::Int64ToString(secondary->id()), info,
|
| + &success, &error);
|
| +
|
| + ASSERT_FALSE(success);
|
| + EXPECT_EQ("Negative overscan not allowed.", error);
|
| +
|
| + EXPECT_EQ("1200,0 300x500", secondary->bounds().ToString());
|
| +
|
| + info.overscan->left= 0;
|
| + info.overscan->right = -200;
|
| +
|
| + CallSetDisplayUnitInfo(base::Int64ToString(secondary->id()), info,
|
| + &success, &error);
|
| +
|
| + ASSERT_FALSE(success);
|
| + EXPECT_EQ("Negative overscan not allowed.", error);
|
| +
|
| + EXPECT_EQ("1200,0 300x500", secondary->bounds().ToString());
|
| +
|
| + info.overscan->right= 0;
|
| + info.overscan->top = -300;
|
| +
|
| + CallSetDisplayUnitInfo(base::Int64ToString(secondary->id()), info,
|
| + &success, &error);
|
| +
|
| + ASSERT_FALSE(success);
|
| + EXPECT_EQ("Negative overscan not allowed.", error);
|
| +
|
| + EXPECT_EQ("1200,0 300x500", secondary->bounds().ToString());
|
| +
|
| + info.overscan->right= 0;
|
| + info.overscan->top = -1000;
|
| +
|
| + CallSetDisplayUnitInfo(base::Int64ToString(secondary->id()), info,
|
| + &success, &error);
|
| +
|
| + ASSERT_FALSE(success);
|
| + EXPECT_EQ("Negative overscan not allowed.", error);
|
| +
|
| + EXPECT_EQ("1200,0 300x500", secondary->bounds().ToString());
|
| +
|
| + info.overscan->right= 0;
|
| + info.overscan->top = 0;
|
| +
|
| + CallSetDisplayUnitInfo(base::Int64ToString(secondary->id()), info,
|
| + &success, &error);
|
| +
|
| + ASSERT_TRUE(success);
|
| + EXPECT_TRUE(error.empty());
|
| +
|
| + EXPECT_EQ("1200,0 300x500", secondary->bounds().ToString());
|
| +}
|
| +
|
| +TEST_F(DisplayInfoProviderChromeosTest, SetOverscanLargerThanHorizontalBounds) {
|
| + UpdateDisplay("1200x600,600x1000*2");
|
| +
|
| + const gfx::Display* secondary = GetDisplayController()->GetSecondaryDisplay();
|
| + api::system_info_display::DisplayProperties info;
|
| + info.overscan.reset(new api::system_info_display::Insets);
|
| + // Horizontal overscan is 151, which would make the bounds width 149.
|
| + info.overscan->left= 50;
|
| + info.overscan->top = 10;
|
| + info.overscan->right = 101;
|
| + info.overscan->bottom = 20;
|
| +
|
| + bool success = false;
|
| + std::string error;
|
| + CallSetDisplayUnitInfo(base::Int64ToString(secondary->id()), info,
|
| + &success, &error);
|
| +
|
| + ASSERT_FALSE(success);
|
| + EXPECT_EQ("Horizontal overscan is more than half of the screen width.",
|
| + error);
|
| +}
|
| +
|
| +TEST_F(DisplayInfoProviderChromeosTest, SetOverscanLargerThanVerticalBounds) {
|
| + UpdateDisplay("1200x600,600x1000");
|
| +
|
| + const gfx::Display* secondary = GetDisplayController()->GetSecondaryDisplay();
|
| + api::system_info_display::DisplayProperties info;
|
| + info.overscan.reset(new api::system_info_display::Insets);
|
| + // Vertical overscan is 501, which would make the bounds height 499.
|
| + info.overscan->left= 20;
|
| + info.overscan->top = 250;
|
| + info.overscan->right = 101;
|
| + info.overscan->bottom = 251;
|
| +
|
| + bool success = false;
|
| + std::string error;
|
| + CallSetDisplayUnitInfo(base::Int64ToString(secondary->id()), info,
|
| + &success, &error);
|
| +
|
| + ASSERT_FALSE(success);
|
| + EXPECT_EQ("Vertical overscan is more than half of the screen height.",
|
| + error);
|
| +}
|
| +
|
| +TEST_F(DisplayInfoProviderChromeosTest, SetOverscan) {
|
| + UpdateDisplay("1200x600,600x1000*2");
|
| +
|
| + const gfx::Display* secondary = GetDisplayController()->GetSecondaryDisplay();
|
| + api::system_info_display::DisplayProperties info;
|
| + info.overscan.reset(new api::system_info_display::Insets);
|
| + info.overscan->left= 20;
|
| + info.overscan->top = 199;
|
| + info.overscan->right = 130;
|
| + info.overscan->bottom = 51;
|
| +
|
| + bool success = false;
|
| + std::string error;
|
| + CallSetDisplayUnitInfo(base::Int64ToString(secondary->id()), info,
|
| + &success, &error);
|
| +
|
| + ASSERT_TRUE(success);
|
| + EXPECT_TRUE(error.empty());
|
| +
|
| + EXPECT_EQ("1200,0 150x250", secondary->bounds().ToString());
|
| + const gfx::Insets overscan =
|
| + GetDisplayManager()->GetOverscanInsets(secondary->id());
|
| +
|
| + EXPECT_EQ(20, overscan.left());
|
| + EXPECT_EQ(199, overscan.top());
|
| + EXPECT_EQ(130, overscan.right());
|
| + EXPECT_EQ(51, overscan.bottom());
|
| +}
|
| +
|
| +TEST_F(DisplayInfoProviderChromeosTest, SetOverscanForInternal) {
|
| + UpdateDisplay("1200x600,600x1000*2");
|
| + const int64 internal_display_id =
|
| + ash::test::DisplayManagerTestApi(GetDisplayManager()).
|
| + SetFirstDisplayAsInternalDisplay();
|
| +
|
| + api::system_info_display::DisplayProperties info;
|
| + info.overscan.reset(new api::system_info_display::Insets);
|
| + // Vertical overscan is 501, which would make the bounds height 499.
|
| + info.overscan->left= 20;
|
| + info.overscan->top = 20;
|
| + info.overscan->right = 20;
|
| + info.overscan->bottom = 20;
|
| +
|
| + bool success = false;
|
| + std::string error;
|
| + CallSetDisplayUnitInfo(base::Int64ToString(internal_display_id), info,
|
| + &success, &error);
|
| +
|
| + ASSERT_FALSE(success);
|
| + EXPECT_EQ("Overscan changes not allowed for the internal monitor.",
|
| + error);
|
| +}
|
| +
|
| +} // namespace
|
| +} // namespace extensions
|
|
|