| Index: ash/display/mirror_window_controller_unittest.cc
|
| diff --git a/ash/display/mirror_window_controller_unittest.cc b/ash/display/mirror_window_controller_unittest.cc
|
| index 06e233eb86eb692c20b17ab575e20d7c3c51f466..15bdefaf5871fa086d2ac579464c12ded8976377 100644
|
| --- a/ash/display/mirror_window_controller_unittest.cc
|
| +++ b/ash/display/mirror_window_controller_unittest.cc
|
| @@ -5,13 +5,17 @@
|
| #include "ash/display/mirror_window_controller.h"
|
|
|
| #include "ash/ash_switches.h"
|
| +#include "ash/display/display_controller.h"
|
| #include "ash/display/display_manager.h"
|
| +#include "ash/screen_util.h"
|
| #include "ash/shell.h"
|
| #include "ash/test/ash_test_base.h"
|
| +#include "ash/test/cursor_manager_test_api.h"
|
| #include "ash/test/display_manager_test_api.h"
|
| #include "ash/test/mirror_window_test_api.h"
|
| #include "base/command_line.h"
|
| #include "base/strings/stringprintf.h"
|
| +#include "ui/aura/env.h"
|
| #include "ui/aura/test/test_window_delegate.h"
|
| #include "ui/aura/test/test_windows.h"
|
| #include "ui/aura/window.h"
|
| @@ -54,12 +58,14 @@ typedef test::AshTestBase MirrorWindowControllerTest;
|
| // Software mirroring does not work on win.
|
| #define MAYBE_MirrorCursorBasic DISABLED_MirrorCursorBasic
|
| #define MAYBE_MirrorCursorLocations DISABLED_MirrorCursorLocations
|
| +#define MAYBE_MirrorCursorMoveOnEnter DISABLED_MirrorCursorMoveOnEnter
|
| #define MAYBE_MirrorCursorRotate DISABLED_MirrorCursorRotate
|
| #define MAYBE_DockMode DISABLED_DockMode
|
| #define MAYBE_MirrorOnBoot DISABLED_MirrorOnBoot
|
| #else
|
| #define MAYBE_MirrorCursorBasic MirrorCursorBasic
|
| #define MAYBE_MirrorCursorLocations MirrorCursorLocations
|
| +#define MAYBE_MirrorCursorMoveOnEnter MirrorCursorMoveOnEnter
|
| #define MAYBE_MirrorCursorRotate MirrorCursorRotate
|
| #define MAYBE_DockMode DockMode
|
| #define MAYBE_MirrorOnBoot MirrorOnBoot
|
| @@ -89,21 +95,16 @@ TEST_F(MirrorWindowControllerTest, MAYBE_MirrorCursorBasic) {
|
| generator.MoveMouseTo(10, 10);
|
|
|
| // Test if cursor movement is propertly reflected in mirror window.
|
| - gfx::Point hot_point = test_api.GetCursorHotPoint();
|
| - gfx::Point cursor_window_origin =
|
| - test_api.GetCursorWindow()->bounds().origin();
|
| - EXPECT_EQ("4,4", hot_point.ToString());
|
| - EXPECT_EQ(10 - hot_point.x(), cursor_window_origin.x());
|
| - EXPECT_EQ(10 - hot_point.y(), cursor_window_origin.y());
|
| + EXPECT_EQ("4,4", test_api.GetCursorHotPoint().ToString());
|
| + EXPECT_EQ("10,10",
|
| + test_api.GetCursorHotPointLocationInRootWindow().ToString());
|
| EXPECT_EQ(ui::kCursorNull, test_api.GetCurrentCursorType());
|
| EXPECT_TRUE(test_api.GetCursorWindow()->IsVisible());
|
|
|
| // Test if cursor type change is propertly reflected in mirror window.
|
| generator.MoveMouseTo(100, 100);
|
| - hot_point = test_api.GetCursorHotPoint();
|
| - cursor_window_origin = test_api.GetCursorWindow()->bounds().origin();
|
| - EXPECT_EQ(100 - hot_point.x(), cursor_window_origin.x());
|
| - EXPECT_EQ(100 - hot_point.y(), cursor_window_origin.y());
|
| + EXPECT_EQ("100,100",
|
| + test_api.GetCursorHotPointLocationInRootWindow().ToString());
|
| EXPECT_EQ(ui::kCursorNorthResize, test_api.GetCurrentCursorType());
|
|
|
| // Test if visibility change is propertly reflected in mirror window.
|
| @@ -114,10 +115,8 @@ TEST_F(MirrorWindowControllerTest, MAYBE_MirrorCursorBasic) {
|
|
|
| // Mouse event makes it visible again.
|
| generator.MoveMouseTo(300, 300);
|
| - hot_point = test_api.GetCursorHotPoint();
|
| - cursor_window_origin = test_api.GetCursorWindow()->bounds().origin();
|
| - EXPECT_EQ(300 - hot_point.x(), cursor_window_origin.x());
|
| - EXPECT_EQ(300 - hot_point.y(), cursor_window_origin.y());
|
| + EXPECT_EQ("300,300",
|
| + test_api.GetCursorHotPointLocationInRootWindow().ToString());
|
| EXPECT_EQ(ui::kCursorNull, test_api.GetCurrentCursorType());
|
| EXPECT_TRUE(test_api.GetCursorWindow()->IsVisible());
|
| }
|
| @@ -146,44 +145,35 @@ TEST_F(MirrorWindowControllerTest, MAYBE_MirrorCursorRotate) {
|
| generator.MoveMouseToInHost(100, 100);
|
|
|
| // Test if cursor movement is propertly reflected in mirror window.
|
| - gfx::Point hot_point = test_api.GetCursorHotPoint();
|
| - gfx::Point cursor_window_origin =
|
| - test_api.GetCursorWindow()->bounds().origin();
|
| - EXPECT_EQ("11,12", hot_point.ToString());
|
| - EXPECT_EQ(100 - hot_point.x(), cursor_window_origin.x());
|
| - EXPECT_EQ(100 - hot_point.y(), cursor_window_origin.y());
|
| + EXPECT_EQ("11,12", test_api.GetCursorHotPoint().ToString());
|
| + EXPECT_EQ("100,100",
|
| + test_api.GetCursorHotPointLocationInRootWindow().ToString());
|
| EXPECT_EQ(ui::kCursorNorthResize, test_api.GetCurrentCursorType());
|
|
|
| UpdateDisplay("400x400/r,400x400"); // 90 degrees.
|
| generator.MoveMouseToInHost(300, 100);
|
| - hot_point = test_api.GetCursorHotPoint();
|
| - cursor_window_origin = test_api.GetCursorWindow()->bounds().origin();
|
| EXPECT_EQ(ui::kCursorNorthResize, test_api.GetCurrentCursorType());
|
| // The size of cursor image is 25x25, so the rotated hot point must
|
| // be (25-12, 11).
|
| - EXPECT_EQ("13,11", hot_point.ToString());
|
| - EXPECT_EQ(300 - hot_point.x(), cursor_window_origin.x());
|
| - EXPECT_EQ(100 - hot_point.y(), cursor_window_origin.y());
|
| + EXPECT_EQ("13,11", test_api.GetCursorHotPoint().ToString());
|
| + EXPECT_EQ("300,100",
|
| + test_api.GetCursorHotPointLocationInRootWindow().ToString());
|
|
|
| UpdateDisplay("400x400/u,400x400"); // 180 degrees.
|
| generator.MoveMouseToInHost(300, 300);
|
| - hot_point = test_api.GetCursorHotPoint();
|
| - cursor_window_origin = test_api.GetCursorWindow()->bounds().origin();
|
| EXPECT_EQ(ui::kCursorNorthResize, test_api.GetCurrentCursorType());
|
| // Rotated hot point must be (25-11, 25-12).
|
| - EXPECT_EQ("14,13", hot_point.ToString());
|
| - EXPECT_EQ(300 - hot_point.x(), cursor_window_origin.x());
|
| - EXPECT_EQ(300 - hot_point.y(), cursor_window_origin.y());
|
| + EXPECT_EQ("14,13", test_api.GetCursorHotPoint().ToString());
|
| + EXPECT_EQ("300,300",
|
| + test_api.GetCursorHotPointLocationInRootWindow().ToString());
|
|
|
| UpdateDisplay("400x400/l,400x400"); // 270 degrees.
|
| generator.MoveMouseToInHost(100, 300);
|
| - hot_point = test_api.GetCursorHotPoint();
|
| - cursor_window_origin = test_api.GetCursorWindow()->bounds().origin();
|
| EXPECT_EQ(ui::kCursorNorthResize, test_api.GetCurrentCursorType());
|
| // Rotated hot point must be (12, 25-11).
|
| - EXPECT_EQ("12,14", hot_point.ToString());
|
| - EXPECT_EQ(100 - hot_point.x(), cursor_window_origin.x());
|
| - EXPECT_EQ(300 - hot_point.y(), cursor_window_origin.y());
|
| + EXPECT_EQ("12,14", test_api.GetCursorHotPoint().ToString());
|
| + EXPECT_EQ("100,300",
|
| + test_api.GetCursorHotPointLocationInRootWindow().ToString());
|
| }
|
|
|
| // Make sure that the mirror cursor's location is same as
|
| @@ -201,32 +191,71 @@ TEST_F(MirrorWindowControllerTest, MAYBE_MirrorCursorLocations) {
|
| ui::test::EventGenerator generator(root);
|
| generator.MoveMouseToInHost(10, 20);
|
|
|
| - gfx::Point hot_point = test_api.GetCursorHotPoint();
|
| - EXPECT_EQ("8,9", hot_point.ToString());
|
| - gfx::Point cursor_window_origin =
|
| - test_api.GetCursorWindow()->bounds().origin();
|
| - EXPECT_EQ(10 - hot_point.x(), cursor_window_origin.x());
|
| - EXPECT_EQ(20 - hot_point.y(), cursor_window_origin.y());
|
| + EXPECT_EQ("8,9", test_api.GetCursorHotPoint().ToString());
|
| + EXPECT_EQ("10,20",
|
| + test_api.GetCursorHotPointLocationInRootWindow().ToString());
|
|
|
| // Test with ui scale
|
| UpdateDisplay("400x600*0.5,400x600");
|
| generator.MoveMouseToInHost(20, 30);
|
|
|
| - hot_point = test_api.GetCursorHotPoint();
|
| - EXPECT_EQ("4,4", hot_point.ToString());
|
| - cursor_window_origin = test_api.GetCursorWindow()->bounds().origin();
|
| - EXPECT_EQ(20 - hot_point.x(), cursor_window_origin.x());
|
| - EXPECT_EQ(30 - hot_point.y(), cursor_window_origin.y());
|
| + EXPECT_EQ("4,4", test_api.GetCursorHotPoint().ToString());
|
| + EXPECT_EQ("20,30",
|
| + test_api.GetCursorHotPointLocationInRootWindow().ToString());
|
|
|
| // Test with rotation
|
| UpdateDisplay("400x600/r,400x600");
|
| generator.MoveMouseToInHost(30, 40);
|
|
|
| - hot_point = test_api.GetCursorHotPoint();
|
| - EXPECT_EQ("21,4", hot_point.ToString());
|
| - cursor_window_origin = test_api.GetCursorWindow()->bounds().origin();
|
| - EXPECT_EQ(30 - hot_point.x(), cursor_window_origin.x());
|
| - EXPECT_EQ(40 - hot_point.y(), cursor_window_origin.y());
|
| + EXPECT_EQ("21,4", test_api.GetCursorHotPoint().ToString());
|
| + EXPECT_EQ("30,40",
|
| + test_api.GetCursorHotPointLocationInRootWindow().ToString());
|
| +}
|
| +
|
| +// Test the behavior of the cursor when entering software mirror mode swaps the
|
| +// cursor's display.
|
| +TEST_F(MirrorWindowControllerTest, MAYBE_MirrorCursorMoveOnEnter) {
|
| + aura::Env* env = aura::Env::GetInstance();
|
| + Shell* shell = Shell::GetInstance();
|
| + DisplayController* display_controller = shell->display_controller();
|
| + DisplayManager* display_manager = shell->display_manager();
|
| +
|
| + UpdateDisplay("400x400*2/r,400x400");
|
| + int64 primary_display_id = display_controller->GetPrimaryDisplayId();
|
| + int64 secondary_display_id = ScreenUtil::GetSecondaryDisplay().id();
|
| + test::DisplayManagerTestApi(display_manager)
|
| + .SetInternalDisplayId(primary_display_id);
|
| +
|
| + // Chrome uses the internal display as the source display for software mirror
|
| + // mode. Move the cursor to the external display.
|
| + aura::Window* secondary_root_window =
|
| + display_controller->GetRootWindowForDisplayId(secondary_display_id);
|
| + secondary_root_window->MoveCursorTo(gfx::Point(100, 200));
|
| + EXPECT_EQ("300,200", env->last_mouse_location().ToString());
|
| + test::CursorManagerTestApi cursor_test_api(shell->cursor_manager());
|
| + EXPECT_EQ(1.0f, cursor_test_api.GetCurrentCursor().device_scale_factor());
|
| + EXPECT_EQ(gfx::Display::ROTATE_0, cursor_test_api.GetCurrentCursorRotation());
|
| +
|
| + display_manager->SetSecondDisplayMode(DisplayManager::MIRRORING);
|
| + UpdateDisplay("400x400*2/r,400x400");
|
| +
|
| + // Entering mirror mode should have centered the cursor on the primary display
|
| + // because the cursor's previous position is out of bounds.
|
| + // Check real cursor's position and properties.
|
| + EXPECT_EQ("100,100", env->last_mouse_location().ToString());
|
| + EXPECT_EQ(2.0f, cursor_test_api.GetCurrentCursor().device_scale_factor());
|
| + EXPECT_EQ(gfx::Display::ROTATE_90,
|
| + cursor_test_api.GetCurrentCursorRotation());
|
| +
|
| + // Check mirrored cursor's location.
|
| + test::MirrorWindowTestApi test_api;
|
| + gfx::Point hot_point = test_api.GetCursorHotPoint();
|
| + // Rotated hot point must be (25-9, 8).
|
| + EXPECT_EQ("16,8", test_api.GetCursorHotPoint().ToString());
|
| + // New coordinates are not (200,200) because (200,200) is not the center of
|
| + // the display.
|
| + EXPECT_EQ("199,200",
|
| + test_api.GetCursorHotPointLocationInRootWindow().ToString());
|
| }
|
|
|
| // Make sure that the compositor based mirroring can switch
|
|
|