| Index: ash/display/display_controller_unittest.cc
|
| diff --git a/ash/display/display_controller_unittest.cc b/ash/display/display_controller_unittest.cc
|
| index f1eb85914efce8e0c7a8a416cc51c5bb9cd30ebf..454b2875c28492db51b5010635e920e5289c7843 100644
|
| --- a/ash/display/display_controller_unittest.cc
|
| +++ b/ash/display/display_controller_unittest.cc
|
| @@ -4,6 +4,7 @@
|
|
|
| #include "ash/display/display_controller.h"
|
|
|
| +#include "ash/display/display_info.h"
|
| #include "ash/display/display_manager.h"
|
| #include "ash/launcher/launcher.h"
|
| #include "ash/screen_ash.h"
|
| @@ -12,11 +13,17 @@
|
| #include "ash/test/cursor_manager_test_api.h"
|
| #include "ui/aura/env.h"
|
| #include "ui/aura/root_window.h"
|
| +#include "ui/aura/test/event_generator.h"
|
| #include "ui/aura/window_tracker.h"
|
| +#include "ui/base/events/event_handler.h"
|
| #include "ui/gfx/display.h"
|
| #include "ui/gfx/screen.h"
|
| #include "ui/views/widget/widget.h"
|
|
|
| +#if defined(OS_WIN)
|
| +#include "win8/util/win8_util.h"
|
| +#endif
|
| +
|
| namespace ash {
|
| namespace test {
|
| namespace {
|
| @@ -76,10 +83,40 @@ class DisplayControllerShutdownTest : public test::AshTestBase {
|
| virtual void TearDown() OVERRIDE {
|
| test::AshTestBase::TearDown();
|
| // Make sure that primary display is accessible after shutdown.
|
| - gfx::Display primary = gfx::Screen::GetNativeScreen()->GetPrimaryDisplay();
|
| + gfx::Display primary = Shell::GetScreen()->GetPrimaryDisplay();
|
| EXPECT_EQ("0,0 444x333", primary.bounds().ToString());
|
| - EXPECT_EQ(2, gfx::Screen::GetNativeScreen()->GetNumDisplays());
|
| + EXPECT_EQ(2, Shell::GetScreen()->GetNumDisplays());
|
| + }
|
| +};
|
| +
|
| +class TestEventHandler : public ui::EventHandler {
|
| + public:
|
| + TestEventHandler() : target_root_(NULL) {}
|
| + virtual ~TestEventHandler() {}
|
| +
|
| + virtual void OnMouseEvent(ui::MouseEvent* event) OVERRIDE {
|
| + aura::Window* target = static_cast<aura::Window*>(event->target());
|
| + // Only record when the target is the background which covers
|
| + // entire root window.
|
| + if (target->name() != "DesktopBackgroundView")
|
| + return;
|
| + mouse_location_ = event->location();
|
| + target_root_ = target->GetRootWindow();
|
| + event->StopPropagation();
|
| + }
|
| +
|
| + std::string GetLocationAndReset() {
|
| + std::string result = mouse_location_.ToString();
|
| + mouse_location_.SetPoint(0, 0);
|
| + target_root_ = NULL;
|
| + return result;
|
| }
|
| +
|
| + private:
|
| + gfx::Point mouse_location_;
|
| + aura::RootWindow* target_root_;
|
| +
|
| + DISALLOW_COPY_AND_ASSIGN(TestEventHandler);
|
| };
|
|
|
| } // namespace
|
| @@ -536,5 +573,113 @@ TEST_F(DisplayControllerTest, MAYBE_UpdateDisplayWithHostOrigin) {
|
| EXPECT_EQ("200x300", root_windows[1]->GetHostSize().ToString());
|
| }
|
|
|
| +#if defined(OS_WIN)
|
| +// TODO(oshima): Windows does not supoprts insets.
|
| +#define MAYBE_OverscanInsets DISABLED_OverscanInsets
|
| +#else
|
| +#define MAYBE_OverscanInsets OverscanInsets
|
| +#endif
|
| +
|
| +TEST_F(DisplayControllerTest, MAYBE_OverscanInsets) {
|
| + DisplayController* display_controller =
|
| + Shell::GetInstance()->display_controller();
|
| + TestEventHandler event_handler;
|
| + Shell::GetInstance()->AddPreTargetHandler(&event_handler);
|
| +
|
| + UpdateDisplay("120x200,300x400*2");
|
| + gfx::Display display1 = Shell::GetScreen()->GetPrimaryDisplay();
|
| + Shell::RootWindowList root_windows = Shell::GetAllRootWindows();
|
| +
|
| + display_controller->SetOverscanInsets(display1.id(),
|
| + gfx::Insets(10, 15, 20, 25));
|
| + EXPECT_EQ("0,0 80x170", root_windows[0]->bounds().ToString());
|
| + EXPECT_EQ("150x200", root_windows[1]->bounds().size().ToString());
|
| + EXPECT_EQ("80,0 150x200",
|
| + ScreenAsh::GetSecondaryDisplay().bounds().ToString());
|
| +
|
| + aura::test::EventGenerator generator(root_windows[0]);
|
| + generator.MoveMouseTo(20, 25);
|
| + EXPECT_EQ("5,15", event_handler.GetLocationAndReset());
|
| +
|
| + display_controller->ClearCustomOverscanInsets(display1.id());
|
| + EXPECT_EQ("0,0 120x200", root_windows[0]->bounds().ToString());
|
| + EXPECT_EQ("120,0 150x200",
|
| + ScreenAsh::GetSecondaryDisplay().bounds().ToString());
|
| +
|
| + generator.MoveMouseTo(30, 20);
|
| + EXPECT_EQ("30,20", event_handler.GetLocationAndReset());
|
| +
|
| + Shell::GetInstance()->RemovePreTargetHandler(&event_handler);
|
| +}
|
| +
|
| +TEST_F(DisplayControllerTest, Rotate) {
|
| +#if defined(OS_WIN)
|
| + // On Win8 Metro mode, the host window can't be resized and
|
| + // SetTransform updates the window using the orignal host window
|
| + // size. Just skip this test on win8, so that this test still rusn
|
| + // on win7 bots.
|
| + if (win8::IsSingleWindowMetroMode())
|
| + return;
|
| +#endif
|
| +
|
| + DisplayController* display_controller =
|
| + Shell::GetInstance()->display_controller();
|
| + internal::DisplayManager* display_manager =
|
| + Shell::GetInstance()->display_manager();
|
| + TestEventHandler event_handler;
|
| + Shell::GetInstance()->AddPreTargetHandler(&event_handler);
|
| +
|
| + UpdateDisplay("120x200,300x400*2");
|
| + gfx::Display display1 = Shell::GetScreen()->GetPrimaryDisplay();
|
| + int64 display2_id = ScreenAsh::GetSecondaryDisplay().id();
|
| + Shell::RootWindowList root_windows = Shell::GetAllRootWindows();
|
| + aura::test::EventGenerator generator1(root_windows[0]);
|
| +
|
| + EXPECT_EQ("120x200", root_windows[0]->bounds().size().ToString());
|
| + EXPECT_EQ("150x200", root_windows[1]->bounds().size().ToString());
|
| + EXPECT_EQ("120,0 150x200",
|
| + ScreenAsh::GetSecondaryDisplay().bounds().ToString());
|
| + generator1.MoveMouseTo(50, 40);
|
| + EXPECT_EQ("50,40", event_handler.GetLocationAndReset());
|
| +
|
| + display_manager->SetDisplayRotation(display1.id(),
|
| + internal::DisplayInfo::Rotate90);
|
| + EXPECT_EQ("200x120", root_windows[0]->bounds().size().ToString());
|
| + EXPECT_EQ("150x200", root_windows[1]->bounds().size().ToString());
|
| + EXPECT_EQ("200,0 150x200",
|
| + ScreenAsh::GetSecondaryDisplay().bounds().ToString());
|
| + generator1.MoveMouseTo(50, 40);
|
| + EXPECT_EQ("40,70", event_handler.GetLocationAndReset());
|
| +
|
| + DisplayLayout display_layout(DisplayLayout::BOTTOM, 50);
|
| + display_controller->SetLayoutForCurrentDisplays(display_layout);
|
| + EXPECT_EQ("50,120 150x200",
|
| + ScreenAsh::GetSecondaryDisplay().bounds().ToString());
|
| +
|
| + display_manager->SetDisplayRotation(display2_id,
|
| + internal::DisplayInfo::Rotate270);
|
| + EXPECT_EQ("200x120", root_windows[0]->bounds().size().ToString());
|
| + EXPECT_EQ("200x150", root_windows[1]->bounds().size().ToString());
|
| + EXPECT_EQ("50,120 200x150",
|
| + ScreenAsh::GetSecondaryDisplay().bounds().ToString());
|
| +
|
| + aura::test::EventGenerator generator2(root_windows[1]);
|
| + generator2.MoveMouseTo(50, 40);
|
| + EXPECT_EQ("180,25", event_handler.GetLocationAndReset());
|
| + display_manager->SetDisplayRotation(display1.id(),
|
| + internal::DisplayInfo::Rotate180);
|
| +
|
| + EXPECT_EQ("120x200", root_windows[0]->bounds().size().ToString());
|
| + EXPECT_EQ("200x150", root_windows[1]->bounds().size().ToString());
|
| + // Dislay must share at least 100, so the x's offset becomes 20.
|
| + EXPECT_EQ("20,200 200x150",
|
| + ScreenAsh::GetSecondaryDisplay().bounds().ToString());
|
| +
|
| + generator1.MoveMouseTo(50, 40);
|
| + EXPECT_EQ("70,160", event_handler.GetLocationAndReset());
|
| +
|
| + Shell::GetInstance()->RemovePreTargetHandler(&event_handler);
|
| +}
|
| +
|
| } // namespace test
|
| } // namespace ash
|
|
|