1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155
|
// Copyright 2012 The Chromium Authors
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
#include "ui/display/screen.h"
#include "testing/gtest/include/gtest/gtest.h"
#include "ui/display/display.h"
#include "ui/display/scoped_display_for_new_windows.h"
#include "ui/display/test/test_screen.h"
#include "ui/gfx/native_widget_types.h"
namespace display {
namespace {
const int DEFAULT_DISPLAY_ID = 0x1337;
const int DEFAULT_DISPLAY_WIDTH = 2560;
const int DEFAULT_DISPLAY_HEIGHT = 1440;
const int DISPLAY_2_ID = 0xc001;
} // namespace
class ScreenTest : public testing::Test {
public:
ScreenTest() {
const Display test_display = test_screen_.GetPrimaryDisplay();
Display display(test_display);
display.set_id(DEFAULT_DISPLAY_ID);
display.set_bounds(
gfx::Rect(0, 0, DEFAULT_DISPLAY_WIDTH, DEFAULT_DISPLAY_HEIGHT));
test_screen_.display_list().RemoveDisplay(test_display.id());
test_screen_.display_list().AddDisplay(display, DisplayList::Type::PRIMARY);
test_screen_.display_list().AddDisplay(Display(DISPLAY_2_ID),
DisplayList::Type::NOT_PRIMARY);
Screen::SetScreenInstance(&test_screen_);
}
ScreenTest(const ScreenTest&) = delete;
ScreenTest& operator=(const ScreenTest&) = delete;
~ScreenTest() override { Screen::SetScreenInstance(nullptr); }
private:
test::TestScreen test_screen_;
};
class ZeroDisplayScreenTest : public testing::Test {
public:
ZeroDisplayScreenTest() {
const Display test_display = test_screen_.GetPrimaryDisplay();
test_screen_.display_list().RemoveDisplay(test_display.id());
Screen::SetScreenInstance(&test_screen_);
}
ZeroDisplayScreenTest(const ZeroDisplayScreenTest&) = delete;
ZeroDisplayScreenTest& operator=(const ZeroDisplayScreenTest&) = delete;
~ZeroDisplayScreenTest() override { Screen::SetScreenInstance(nullptr); }
private:
test::TestScreen test_screen_;
};
TEST_F(ScreenTest, GetPrimaryDisplaySize) {
const gfx::Size size = Screen::GetScreen()->GetPrimaryDisplay().size();
EXPECT_EQ(DEFAULT_DISPLAY_WIDTH, size.width());
EXPECT_EQ(DEFAULT_DISPLAY_HEIGHT, size.height());
}
TEST_F(ScreenTest, GetNumDisplays) {
EXPECT_EQ(Screen::GetScreen()->GetNumDisplays(), 2);
}
TEST_F(ScreenTest, GetDisplayWithDisplayId) {
Display display;
EXPECT_TRUE(Screen::GetScreen()->GetDisplayWithDisplayId(DEFAULT_DISPLAY_ID,
&display));
EXPECT_EQ(DEFAULT_DISPLAY_ID, display.id());
EXPECT_EQ(DEFAULT_DISPLAY_WIDTH, display.size().width());
EXPECT_EQ(DEFAULT_DISPLAY_HEIGHT, display.size().height());
}
TEST_F(ScreenTest, GetDisplayForNewWindows) {
Screen* screen = Screen::GetScreen();
// Display for new windows defaults to the primary display.
EXPECT_EQ(screen->GetPrimaryDisplay().id(),
screen->GetDisplayForNewWindows().id());
}
TEST_F(ScreenTest, ScopedDisplayForNewWindows) {
Screen* screen = Screen::GetScreen();
// Set primary as default;
screen->SetDisplayForNewWindows(DEFAULT_DISPLAY_ID);
EXPECT_EQ(DEFAULT_DISPLAY_ID, screen->GetDisplayForNewWindows().id());
// ScopedDisplayForNewWindows overrides while it is in scope.
{
ScopedDisplayForNewWindows scoped(DISPLAY_2_ID);
EXPECT_EQ(DISPLAY_2_ID, screen->GetDisplayForNewWindows().id());
}
EXPECT_EQ(DEFAULT_DISPLAY_ID, screen->GetDisplayForNewWindows().id());
}
TEST_F(ScreenTest, GetScreenInfosNearestDisplay) {
Screen* screen = Screen::GetScreen();
// Nearest default
{
ScreenInfos screen_infos =
screen->GetScreenInfosNearestDisplay(DEFAULT_DISPLAY_ID);
ASSERT_EQ(screen_infos.screen_infos.size(), 2u);
// Verify that the current display is also the primary display.
EXPECT_EQ(screen_infos.current().display_id, DEFAULT_DISPLAY_ID);
EXPECT_EQ(screen->GetPrimaryDisplay().id(),
screen_infos.current().display_id);
EXPECT_TRUE(screen_infos.current().is_primary);
}
// Nearest display 2
{
ScreenInfos screen_infos =
screen->GetScreenInfosNearestDisplay(DISPLAY_2_ID);
ASSERT_EQ(screen_infos.screen_infos.size(), 2u);
// Display 2 is current, but not the primary display.
EXPECT_EQ(screen_infos.current().display_id, DISPLAY_2_ID);
EXPECT_NE(screen->GetPrimaryDisplay().id(),
screen_infos.current().display_id);
EXPECT_FALSE(screen_infos.current().is_primary);
}
}
// This unit test is a cross-platform replication of some Fuchsia unit tests
// which have no displays (and don't need displays) but also need to have
// this function return non-empty ScreenInfos.
TEST_F(ZeroDisplayScreenTest, GetScreenInfosZeroDisplays) {
Screen* screen = Screen::GetScreen();
ScreenInfos screen_infos =
screen->GetScreenInfosNearestDisplay(kInvalidDisplayId);
EXPECT_TRUE(screen->GetAllDisplays().empty());
EXPECT_EQ(screen_infos.screen_infos.size(), 1u);
EXPECT_NE(screen_infos.current().display_id, kInvalidDisplayId);
EXPECT_EQ(screen->GetPrimaryDisplay().id(),
screen_infos.current().display_id);
EXPECT_TRUE(screen_infos.current().is_primary);
}
} // namespace display
|