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

Unified Diff: ash/display/mirror_window_controller_unittest.cc

Issue 948583005: Add more tests for mouse rotation,scale&position after display change (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Created 5 years, 9 months 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/display_manager_unittest.cc ('k') | ash/test/mirror_window_test_api.h » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
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
« no previous file with comments | « ash/display/display_manager_unittest.cc ('k') | ash/test/mirror_window_test_api.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698