Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(3552)

Unified Diff: ash/display/multi_display_manager_unittest.cc

Issue 11363124: Move DisplayManager and DisplayChangeObserverX11 from aura to ash. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: fix rebase Created 8 years, 1 month ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
« no previous file with comments | « ash/display/multi_display_manager.cc ('k') | ash/extended_desktop_unittest.cc » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: ash/display/multi_display_manager_unittest.cc
diff --git a/ash/display/multi_display_manager_unittest.cc b/ash/display/multi_display_manager_unittest.cc
deleted file mode 100644
index 1bf60a7d24b1a08ae9cf90a40be28daf3c08d593..0000000000000000000000000000000000000000
--- a/ash/display/multi_display_manager_unittest.cc
+++ /dev/null
@@ -1,510 +0,0 @@
-// Copyright (c) 2012 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 "ash/display/multi_display_manager.h"
-
-#include "ash/display/display_controller.h"
-#include "ash/screen_ash.h"
-#include "ash/shell.h"
-#include "ash/test/ash_test_base.h"
-#include "base/format_macros.h"
-#include "base/stringprintf.h"
-#include "ui/aura/display_observer.h"
-#include "ui/aura/env.h"
-#include "ui/aura/root_window.h"
-#include "ui/aura/window_observer.h"
-#include "ui/gfx/display.h"
-
-namespace ash {
-namespace internal {
-
-using std::vector;
-using std::string;
-
-class MultiDisplayManagerTest : public test::AshTestBase,
- public aura::DisplayObserver,
- public aura::WindowObserver {
- public:
- MultiDisplayManagerTest()
- : removed_count_(0U),
- root_window_destroyed_(false) {
- }
- virtual ~MultiDisplayManagerTest() {}
-
- virtual void SetUp() OVERRIDE {
- AshTestBase::SetUp();
- display_manager()->AddObserver(this);
- Shell::GetPrimaryRootWindow()->AddObserver(this);
- }
- virtual void TearDown() OVERRIDE {
- Shell::GetPrimaryRootWindow()->RemoveObserver(this);
- display_manager()->RemoveObserver(this);
- AshTestBase::TearDown();
- }
-
- MultiDisplayManager* display_manager() {
- return static_cast<MultiDisplayManager*>(
- aura::Env::GetInstance()->display_manager());
- }
- const vector<gfx::Display>& changed() const { return changed_; }
- const vector<gfx::Display>& added() const { return added_; }
-
- string GetCountSummary() const {
- return StringPrintf("%"PRIuS" %"PRIuS" %"PRIuS,
- changed_.size(), added_.size(), removed_count_);
- }
-
- void reset() {
- changed_.clear();
- added_.clear();
- removed_count_ = 0U;
- root_window_destroyed_ = false;
- }
-
- bool root_window_destroyed() const {
- return root_window_destroyed_;
- }
-
- const gfx::Display& FindDisplayForId(int64 id) {
- return display_manager()->FindDisplayForId(id);
- }
-
- // aura::DisplayObserver overrides:
- virtual void OnDisplayBoundsChanged(const gfx::Display& display) OVERRIDE {
- changed_.push_back(display);
- }
- virtual void OnDisplayAdded(const gfx::Display& new_display) OVERRIDE {
- added_.push_back(new_display);
- }
- virtual void OnDisplayRemoved(const gfx::Display& old_display) OVERRIDE {
- ++removed_count_;
- }
-
- // aura::WindowObserver overrides:
- virtual void OnWindowDestroying(aura::Window* window) {
- ASSERT_EQ(Shell::GetPrimaryRootWindow(), window);
- root_window_destroyed_ = true;
- }
-
- private:
- vector<gfx::Display> changed_;
- vector<gfx::Display> added_;
- size_t removed_count_;
- bool root_window_destroyed_;
-
- DISALLOW_COPY_AND_ASSIGN(MultiDisplayManagerTest);
-};
-
-#if defined(OS_CHROMEOS)
-// TODO(oshima): This fails with non extended desktop on windows.
-// Reenable when extended desktop is enabled by default.
-#define MAYBE_NativeDisplayTest NativeDisplayTest
-#define MAYBE_EmulatorTest EmulatorTest
-#define MAYBE_OverscanInsetsTest OverscanInsetsTest
-#define MAYBE_ZeroOverscanInsets ZeroOverscanInsets
-#else
-#define MAYBE_NativeDisplayTest DISABLED_NativeDisplayTest
-#define MAYBE_EmulatorTest DISABLED_EmulatorTest
-#define MAYBE_OverscanInsetsTest DISABLED_OverscanInsetsTest
-#define MAYBE_ZeroOverscanInsets DISABLED_ZeroOverscanInsets
-#endif
-
-TEST_F(MultiDisplayManagerTest, MAYBE_NativeDisplayTest) {
- aura::DisplayManager::set_use_fullscreen_host_window(true);
-
- EXPECT_EQ(1U, display_manager()->GetNumDisplays());
-
- // Update primary and add seconary.
- UpdateDisplay("100+0-500x500,0+501-400x400");
- EXPECT_EQ(2U, display_manager()->GetNumDisplays());
- EXPECT_EQ("0,0 500x500",
- display_manager()->GetDisplayAt(0)->bounds().ToString());
-
- EXPECT_EQ("1 1 0", GetCountSummary());
- EXPECT_EQ(display_manager()->GetDisplayAt(0)->id(), changed()[0].id());
- EXPECT_EQ(display_manager()->GetDisplayAt(1)->id(), added()[0].id());
- EXPECT_EQ("0,0 500x500", changed()[0].bounds().ToString());
- // Secondary display is on right.
- EXPECT_EQ("500,0 400x400", added()[0].bounds().ToString());
- EXPECT_EQ("0,501 400x400", added()[0].bounds_in_pixel().ToString());
- reset();
-
- // Delete secondary.
- UpdateDisplay("100+0-500x500");
- EXPECT_EQ("0 0 1", GetCountSummary());
- reset();
-
- // Change primary.
- UpdateDisplay("0+0-1000x600");
- EXPECT_EQ("1 0 0", GetCountSummary());
- EXPECT_EQ(display_manager()->GetDisplayAt(0)->id(), changed()[0].id());
- EXPECT_EQ("0,0 1000x600", changed()[0].bounds().ToString());
- reset();
-
- // Add secondary.
- UpdateDisplay("0+0-1000x600,1001+0-600x400");
- EXPECT_EQ(2U, display_manager()->GetNumDisplays());
- EXPECT_EQ("0 1 0", GetCountSummary());
- EXPECT_EQ(display_manager()->GetDisplayAt(1)->id(), added()[0].id());
- // Secondary display is on right.
- EXPECT_EQ("1000,0 600x400", added()[0].bounds().ToString());
- EXPECT_EQ("1001,0 600x400", added()[0].bounds_in_pixel().ToString());
- reset();
-
- // Secondary removed, primary changed.
- UpdateDisplay("0+0-800x300");
- EXPECT_EQ(1U, display_manager()->GetNumDisplays());
- EXPECT_EQ("1 0 1", GetCountSummary());
- EXPECT_EQ(display_manager()->GetDisplayAt(0)->id(), changed()[0].id());
- EXPECT_EQ("0,0 800x300", changed()[0].bounds().ToString());
- reset();
-
- // # of display can go to zero when screen is off.
- const vector<gfx::Display> empty;
- display_manager()->OnNativeDisplaysChanged(empty);
- EXPECT_EQ(1U, display_manager()->GetNumDisplays());
- EXPECT_EQ("0 0 0", GetCountSummary());
- EXPECT_FALSE(root_window_destroyed());
- // Display configuration stays the same
- EXPECT_EQ("0,0 800x300",
- display_manager()->GetDisplayAt(0)->bounds().ToString());
- reset();
-
- // Connect to display again
- UpdateDisplay("100+100-500x400");
- EXPECT_EQ(1U, display_manager()->GetNumDisplays());
- EXPECT_EQ("1 0 0", GetCountSummary());
- EXPECT_FALSE(root_window_destroyed());
- EXPECT_EQ("0,0 500x400", changed()[0].bounds().ToString());
- EXPECT_EQ("100,100 500x400", changed()[0].bounds_in_pixel().ToString());
- reset();
-
- // Go back to zero and wake up with multiple displays.
- display_manager()->OnNativeDisplaysChanged(empty);
- EXPECT_EQ(1U, display_manager()->GetNumDisplays());
- EXPECT_FALSE(root_window_destroyed());
- reset();
-
- // Add secondary.
- UpdateDisplay("0+0-1000x600,1000+1000-600x400");
- EXPECT_EQ(2U, display_manager()->GetNumDisplays());
- EXPECT_EQ("0,0 1000x600",
- display_manager()->GetDisplayAt(0)->bounds().ToString());
- // Secondary display is on right.
- EXPECT_EQ("1000,0 600x400",
- display_manager()->GetDisplayAt(1)->bounds().ToString());
- EXPECT_EQ("1000,1000 600x400",
- display_manager()->GetDisplayAt(1)->bounds_in_pixel().ToString());
- reset();
-
- aura::DisplayManager::set_use_fullscreen_host_window(false);
-}
-
-// Test in emulation mode (use_fullscreen_host_window=false)
-TEST_F(MultiDisplayManagerTest, MAYBE_EmulatorTest) {
- EXPECT_EQ(1U, display_manager()->GetNumDisplays());
-
- MultiDisplayManager::CycleDisplay();
- // Update primary and add seconary.
- EXPECT_EQ(2U, display_manager()->GetNumDisplays());
- EXPECT_EQ("0 1 0", GetCountSummary());
- reset();
-
- MultiDisplayManager::CycleDisplay();
- EXPECT_EQ(1U, display_manager()->GetNumDisplays());
- EXPECT_EQ("0 0 1", GetCountSummary());
- reset();
-
- MultiDisplayManager::CycleDisplay();
- EXPECT_EQ(2U, display_manager()->GetNumDisplays());
- EXPECT_EQ("0 1 0", GetCountSummary());
- reset();
-}
-
-TEST_F(MultiDisplayManagerTest, MAYBE_OverscanInsetsTest) {
- UpdateDisplay("0+0-500x500,0+501-400x400");
- reset();
- ASSERT_EQ(2u, display_manager()->GetNumDisplays());
- gfx::Display display1(*display_manager()->GetDisplayAt(0));
- gfx::Display display2(*display_manager()->GetDisplayAt(1));
-
- display_manager()->SetOverscanInsets(
- display2.id(), gfx::Insets(13, 12, 11, 10));
- std::vector<gfx::Display> changed_displays = changed();
- EXPECT_EQ(1u, changed_displays.size());
- EXPECT_EQ(display2.id(), changed_displays[0].id());
- EXPECT_EQ("0,0 500x500",
- display_manager()->GetDisplayAt(0)->bounds_in_pixel().ToString());
- EXPECT_EQ("12,514 378x376",
- display_manager()->GetDisplayAt(1)->bounds_in_pixel().ToString());
-
- display_manager()->SetOverscanInsets(
- display2.id(), gfx::Insets(10, 11, 12, 13));
- EXPECT_EQ("0,0 500x500",
- display_manager()->GetDisplayAt(0)->bounds_in_pixel().ToString());
- EXPECT_EQ("11,511 376x378",
- display_manager()->GetDisplayAt(1)->bounds_in_pixel().ToString());
-
- // Recreate a new 2nd display. It won't apply the overscan inset because the
- // new display has a different ID.
- UpdateDisplay("0+0-500x500");
- UpdateDisplay("0+0-500x500,0+501-400x400");
- EXPECT_EQ("0,0 500x500",
- display_manager()->GetDisplayAt(0)->bounds_in_pixel().ToString());
- EXPECT_EQ("0,501 400x400",
- display_manager()->GetDisplayAt(1)->bounds_in_pixel().ToString());
-
- // Recreate the displays with the same ID. It should apply the overscan
- // inset.
- UpdateDisplay("0+0-500x500");
- std::vector<gfx::Display> displays;
- displays.push_back(display1);
- displays.push_back(display2);
- display_manager()->OnNativeDisplaysChanged(displays);
- EXPECT_EQ("0,0 500x500",
- display_manager()->GetDisplayAt(0)->bounds_in_pixel().ToString());
- EXPECT_EQ("11,511 376x378",
- display_manager()->GetDisplayAt(1)->bounds_in_pixel().ToString());
-
- // HiDPI but overscan display. The specified insets size should be doubled.
- UpdateDisplay("0+0-500x500");
- UpdateDisplay("0+0-500x500,0+501-400x400*2");
- display_manager()->SetOverscanInsets(
- display_manager()->GetDisplayAt(1)->id(), gfx::Insets(4, 5, 6, 7));
- EXPECT_EQ("0,0 500x500",
- display_manager()->GetDisplayAt(0)->bounds_in_pixel().ToString());
- EXPECT_EQ("10,509 376x380",
- display_manager()->GetDisplayAt(1)->bounds_in_pixel().ToString());
- EXPECT_EQ("188x190", display_manager()->GetDisplayAt(1)->size().ToString());
-}
-
-TEST_F(MultiDisplayManagerTest, MAYBE_ZeroOverscanInsets) {
- // Make sure the display change events is emitted for overscan inset changes.
- UpdateDisplay("0+0-500x500,0+501-400x400");
- ASSERT_EQ(2u, display_manager()->GetNumDisplays());
- int64 display2_id = display_manager()->GetDisplayAt(1)->id();
-
- reset();
- display_manager()->SetOverscanInsets(display2_id, gfx::Insets(0, 0, 0, 0));
- EXPECT_EQ(0u, changed().size());
-
- reset();
- display_manager()->SetOverscanInsets(display2_id, gfx::Insets(1, 0, 0, 0));
- EXPECT_EQ(1u, changed().size());
- EXPECT_EQ(display2_id, changed()[0].id());
-
- reset();
- display_manager()->SetOverscanInsets(display2_id, gfx::Insets(0, 0, 0, 0));
- EXPECT_EQ(1u, changed().size());
- EXPECT_EQ(display2_id, changed()[0].id());
-}
-
-// TODO(oshima): Device scale factor is supported on chromeos only for now.
-#if defined(OS_CHROMEOS)
-#define MAYBE_TestDeviceScaleOnlyChange TestDeviceScaleOnlyChange
-#define MAYBE_TestNativeDisplaysChanged TestNativeDisplaysChanged
-#define MAYBE_NativeDisplaysChangedAfterPrimaryChange \
- NativeDisplaysChangedAfterPrimaryChange
-#else
-#define MAYBE_TestDeviceScaleOnlyChange DISABLED_TestDeviceScaleOnlyChange
-#define MAYBE_TestNativeDisplaysChanged DISABLED_TestNativeDisplaysChanged
-#define MAYBE_NativeDisplaysChangedAfterPrimaryChange \
- DISABLED_NativeDisplaysChangedAfterPrimaryChange
-#endif
-
-TEST_F(MultiDisplayManagerTest, MAYBE_TestDeviceScaleOnlyChange) {
- aura::DisplayManager::set_use_fullscreen_host_window(true);
- UpdateDisplay("1000x600");
- EXPECT_EQ(1,
- Shell::GetPrimaryRootWindow()->compositor()->device_scale_factor());
- EXPECT_EQ("1000x600",
- Shell::GetPrimaryRootWindow()->bounds().size().ToString());
- UpdateDisplay("1000x600*2");
- EXPECT_EQ(2,
- Shell::GetPrimaryRootWindow()->compositor()->device_scale_factor());
- EXPECT_EQ("500x300",
- Shell::GetPrimaryRootWindow()->bounds().size().ToString());
- aura::DisplayManager::set_use_fullscreen_host_window(false);
-}
-
-TEST_F(MultiDisplayManagerTest, MAYBE_TestNativeDisplaysChanged) {
- const int64 internal_display_id =
- display_manager()->SetFirstDisplayAsInternalDisplayForTest();
- const gfx::Display native_display(internal_display_id,
- gfx::Rect(0, 0, 500, 500));
-
- EXPECT_EQ(1U, display_manager()->GetNumDisplays());
- std::string default_bounds =
- display_manager()->GetDisplayAt(0)->bounds().ToString();
-
- std::vector<gfx::Display> displays;
- // Primary disconnected.
- display_manager()->OnNativeDisplaysChanged(displays);
- EXPECT_EQ(1U, display_manager()->GetNumDisplays());
- EXPECT_EQ(default_bounds,
- display_manager()->GetDisplayAt(0)->bounds().ToString());
-
- // External connected while primary was disconnected.
- displays.push_back(gfx::Display(10, gfx::Rect(1, 1, 100, 100)));
- display_manager()->OnNativeDisplaysChanged(displays);
- EXPECT_EQ(2U, display_manager()->GetNumDisplays());
- EXPECT_EQ(default_bounds,
- FindDisplayForId(internal_display_id).bounds().ToString());
- EXPECT_EQ("1,1 100x100",
- FindDisplayForId(10).bounds_in_pixel().ToString());
-
- // Primary connected, with different bounds.
- displays.clear();
- displays.push_back(native_display);
- displays.push_back(gfx::Display(10, gfx::Rect(1, 1, 100, 100)));
- display_manager()->OnNativeDisplaysChanged(displays);
- EXPECT_EQ(2U, display_manager()->GetNumDisplays());
- EXPECT_EQ("0,0 500x500",
- FindDisplayForId(internal_display_id).bounds().ToString());
- EXPECT_EQ("1,1 100x100",
- FindDisplayForId(10).bounds_in_pixel().ToString());
-
- // Turn off primary.
- displays.clear();
- displays.push_back(gfx::Display(10, gfx::Rect(1, 1, 100, 100)));
- display_manager()->OnNativeDisplaysChanged(displays);
- EXPECT_EQ(2U, display_manager()->GetNumDisplays());
- EXPECT_EQ("0,0 500x500",
- FindDisplayForId(internal_display_id).bounds().ToString());
- EXPECT_EQ("1,1 100x100",
- FindDisplayForId(10).bounds_in_pixel().ToString());
-
- // Emulate suspend.
- displays.clear();
- display_manager()->OnNativeDisplaysChanged(displays);
- EXPECT_EQ(2U, display_manager()->GetNumDisplays());
- EXPECT_EQ("0,0 500x500",
- FindDisplayForId(internal_display_id).bounds().ToString());
- EXPECT_EQ("1,1 100x100",
- FindDisplayForId(10).bounds_in_pixel().ToString());
-
- // External display has disconnected then resumed.
- displays.push_back(native_display);
- display_manager()->OnNativeDisplaysChanged(displays);
- EXPECT_EQ(1U, display_manager()->GetNumDisplays());
- EXPECT_EQ("0,0 500x500",
- FindDisplayForId(internal_display_id).bounds().ToString());
-}
-
-#if defined(OS_CHROMEOS)
-#define MAYBE_EnsurePointerInDisplays EnsurePointerInDisplays
-#define MAYBE_EnsurePointerInDisplays_2ndOnLeft \
- EnsurePointerInDisplays_2ndOnLeft
-#else
-// TODO(oshima): Re-enable these tests on WinAura (http://crbug.com/158163).
-#define MAYBE_EnsurePointerInDisplays DISABLED_EnsurePointerInDisplays
-#define MAYBE_EnsurePointerInDisplays_2ndOnLeft \
- DISABLED_EnsurePointerInDisplays_2ndOnLeft
-#endif
-
-TEST_F(MultiDisplayManagerTest, MAYBE_EnsurePointerInDisplays) {
- UpdateDisplay("200x200,300x300");
- Shell::RootWindowList root_windows = Shell::GetAllRootWindows();
-
- aura::Env* env = aura::Env::GetInstance();
-
- // Set the initial position.
- root_windows[0]->MoveCursorTo(gfx::Point(350, 150));
- EXPECT_EQ("350,150", env->last_mouse_location().ToString());
-
- // A mouse pointer will be inside 2nd display.
- UpdateDisplay("300x300,200x200");
- EXPECT_EQ("350,150", env->last_mouse_location().ToString());
-
- // A mouse pointer will be outside of displays and move to the
- // center of 2nd display.
- UpdateDisplay("300x300,100x100");
- EXPECT_EQ("350,50", env->last_mouse_location().ToString());
-
- // 2nd display was disconnected, but the mouse pointer says in the
- // 1st display.
- UpdateDisplay("400x400");
- EXPECT_EQ("350,50", env->last_mouse_location().ToString());
-
- // 1st display's resolution has changed, and the mouse pointer is
- // now outside. Move the mouse pointer to the center of 1st display.
- UpdateDisplay("300x300");
- EXPECT_EQ("150,150", env->last_mouse_location().ToString());
-
- // Move the mouse pointer to the bottom of 1st display.
- root_windows[0]->MoveCursorTo(gfx::Point(150, 290));
- EXPECT_EQ("150,290", env->last_mouse_location().ToString());
-
- // The mouse pointer is outside and closest display is 1st one.
- UpdateDisplay("300x280,200x200");
- EXPECT_EQ("150,140", env->last_mouse_location().ToString());
-}
-
-TEST_F(MultiDisplayManagerTest, MAYBE_EnsurePointerInDisplays_2ndOnLeft) {
- UpdateDisplay("200x200,300x300");
- Shell::RootWindowList root_windows = Shell::GetAllRootWindows();
-
- // Set the 2nd display on the left.
- DisplayController* display_controller =
- Shell::GetInstance()->display_controller();
- DisplayLayout layout = display_controller->default_display_layout();
- layout.position = DisplayLayout::LEFT;
- display_controller->SetDefaultDisplayLayout(layout);
-
- EXPECT_EQ("-300,0 300x300",
- ScreenAsh::GetSecondaryDisplay().bounds().ToString());
-
- aura::Env* env = aura::Env::GetInstance();
-
- // Set the initial position.
- root_windows[0]->MoveCursorTo(gfx::Point(-150, 150));
- EXPECT_EQ("-150,150", env->last_mouse_location().ToString());
-
- // A mouse pointer will be in 2nd display.
- UpdateDisplay("300x300,200x200");
- EXPECT_EQ("-150,150", env->last_mouse_location().ToString());
-
- // A mouse pointer will be outside of displays and move to the
- // center of 2nd display.
- UpdateDisplay("300x300,200x100");
- EXPECT_EQ("-100,50", env->last_mouse_location().ToString());
-
- // 2nd display was disconnected. Mouse pointer should move to
- // 1st display.
- UpdateDisplay("300x300");
- EXPECT_EQ("150,150", env->last_mouse_location().ToString());
-}
-
-TEST_F(MultiDisplayManagerTest, MAYBE_NativeDisplaysChangedAfterPrimaryChange) {
- const int64 internal_display_id =
- display_manager()->SetFirstDisplayAsInternalDisplayForTest();
- const gfx::Display native_display(internal_display_id,
- gfx::Rect(0, 0, 500, 500));
- const gfx::Display secondary_display(10, gfx::Rect(1, 1, 100, 100));
-
- std::vector<gfx::Display> displays;
- displays.push_back(native_display);
- displays.push_back(secondary_display);
- display_manager()->OnNativeDisplaysChanged(displays);
- EXPECT_EQ(2U, display_manager()->GetNumDisplays());
- EXPECT_EQ("0,0 500x500",
- FindDisplayForId(internal_display_id).bounds().ToString());
- EXPECT_EQ("500,0 100x100", FindDisplayForId(10).bounds().ToString());
-
- ash::Shell::GetInstance()->display_controller()->SetPrimaryDisplay(
- secondary_display);
- EXPECT_EQ("-500,0 500x500",
- FindDisplayForId(internal_display_id).bounds().ToString());
- EXPECT_EQ("0,0 100x100", FindDisplayForId(10).bounds().ToString());
-
- // OnNativeDisplaysChanged may change the display bounds. Here makes sure
- // nothing changed if the exactly same displays are specified.
- display_manager()->OnNativeDisplaysChanged(displays);
- EXPECT_EQ("-500,0 500x500",
- FindDisplayForId(internal_display_id).bounds().ToString());
- EXPECT_EQ("0,0 100x100", FindDisplayForId(10).bounds().ToString());
-}
-
-} // namespace internal
-} // namespace ash
« no previous file with comments | « ash/display/multi_display_manager.cc ('k') | ash/extended_desktop_unittest.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698