Chromium Code Reviews| Index: ash/display/display_controller_unittest.cc |
| diff --git a/ash/display/display_controller_unittest.cc b/ash/display/display_controller_unittest.cc |
| index d298eee41796e40011fd47ab153dbefa49cf34e8..a753d1b9bcf246602c9cfba62f702f4dfef71ea2 100644 |
| --- a/ash/display/display_controller_unittest.cc |
| +++ b/ash/display/display_controller_unittest.cc |
| @@ -961,61 +961,6 @@ TEST_F(DisplayControllerTest, SwapPrimaryById) { |
| EXPECT_TRUE(primary_root->Contains(shelf_window)); |
| } |
| -TEST_F(DisplayControllerTest, CursorDeviceScaleFactorSwapPrimary) { |
|
pkotwicz
2015/02/24 18:38:08
This test seems redundant
MouseCursorEventFilterT
|
| - if (!SupportsMultipleDisplays()) |
| - return; |
| - |
| - DisplayController* display_controller = |
| - Shell::GetInstance()->display_controller(); |
| - |
| - UpdateDisplay("200x200,200x200*2"); |
| - gfx::Display primary_display = Shell::GetScreen()->GetPrimaryDisplay(); |
| - gfx::Display secondary_display = ScreenUtil::GetSecondaryDisplay(); |
| - |
| - aura::Window* primary_root = |
| - display_controller->GetRootWindowForDisplayId(primary_display.id()); |
| - aura::Window* secondary_root = |
| - display_controller->GetRootWindowForDisplayId(secondary_display.id()); |
| - EXPECT_NE(primary_root, secondary_root); |
| - |
| - test::CursorManagerTestApi test_api(Shell::GetInstance()->cursor_manager()); |
| - |
| - EXPECT_EQ(1.0f, primary_root->GetHost()->compositor()-> |
| - device_scale_factor()); |
| - primary_root->MoveCursorTo(gfx::Point(50, 50)); |
| - EXPECT_EQ(1.0f, test_api.GetCurrentCursor().device_scale_factor()); |
| - EXPECT_EQ(2.0f, secondary_root->GetHost()->compositor()-> |
| - device_scale_factor()); |
| - secondary_root->MoveCursorTo(gfx::Point(50, 50)); |
| - EXPECT_EQ(2.0f, test_api.GetCurrentCursor().device_scale_factor()); |
| - |
| - // Switch primary and secondary |
| - display_controller->SetPrimaryDisplay(secondary_display); |
| - |
| - // Cursor's device scale factor should be updated accroding to the swap of |
| - // primary and secondary. |
| - EXPECT_EQ(1.0f, secondary_root->GetHost()->compositor()-> |
| - device_scale_factor()); |
| - secondary_root->MoveCursorTo(gfx::Point(50, 50)); |
| - EXPECT_EQ(1.0f, test_api.GetCurrentCursor().device_scale_factor()); |
| - primary_root->MoveCursorTo(gfx::Point(50, 50)); |
| - EXPECT_EQ(2.0f, primary_root->GetHost()->compositor()-> |
| - device_scale_factor()); |
| - EXPECT_EQ(2.0f, test_api.GetCurrentCursor().device_scale_factor()); |
| - |
| - // Deleting 2nd display. |
| - UpdateDisplay("200x200"); |
| - RunAllPendingInMessageLoop(); // RootWindow is deleted in a posted task. |
| - |
| - // Cursor's device scale factor should be updated even without moving cursor. |
| - EXPECT_EQ(1.0f, test_api.GetCurrentCursor().device_scale_factor()); |
| - |
| - primary_root->MoveCursorTo(gfx::Point(50, 50)); |
| - EXPECT_EQ(1.0f, primary_root->GetHost()->compositor()-> |
| - device_scale_factor()); |
| - EXPECT_EQ(1.0f, test_api.GetCurrentCursor().device_scale_factor()); |
| -} |
| - |
| TEST_F(DisplayControllerTest, OverscanInsets) { |
| if (!SupportsMultipleDisplays()) |
| return; |
| @@ -1374,4 +1319,145 @@ TEST_F(DisplayControllerTest, XWidowNameForRootWindow) { |
| } |
| #endif |
| +TEST_F(DisplayControllerTest, UpdateMouseLocationAfterDisplayChange) { |
| + if (!SupportsMultipleDisplays()) |
| + return; |
| + |
| + UpdateDisplay("200x200,300x300"); |
| + aura::Window::Windows root_windows = Shell::GetAllRootWindows(); |
| + |
| + aura::Env* env = aura::Env::GetInstance(); |
| + |
| + ui::test::EventGenerator generator(root_windows[0]); |
| + |
| + // Set the initial position. |
| + generator.MoveMouseToInHost(350, 150); |
| + EXPECT_EQ("350,150", env->last_mouse_location().ToString()); |
| + |
| + // A mouse pointer will stay in the 2nd display. |
| + UpdateDisplay("300x300,200x200"); |
| + EXPECT_EQ("450,50", 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, and the cursor is |
| + // now in the 1st display. |
| + UpdateDisplay("400x400"); |
| + EXPECT_EQ("50,350", 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. |
| + generator.MoveMouseToInHost(150, 290); |
| + EXPECT_EQ("150,290", env->last_mouse_location().ToString()); |
| + |
| + // The mouse pointer is now on 2nd display. |
| + UpdateDisplay("300x280,200x200"); |
| + EXPECT_EQ("450,10", env->last_mouse_location().ToString()); |
| +} |
| + |
| +TEST_F(DisplayControllerTest, UpdateMouseLocationAfterDisplayChange_2ndOnLeft) { |
| + if (!SupportsMultipleDisplays()) |
| + return; |
| + |
| + // Set the 2nd display on the left. |
| + DisplayLayoutStore* layout_store = |
| + Shell::GetInstance()->display_manager()->layout_store(); |
| + DisplayLayout layout = layout_store->default_display_layout(); |
| + layout.position = DisplayLayout::LEFT; |
| + layout_store->SetDefaultDisplayLayout(layout); |
| + |
| + UpdateDisplay("200x200,300x300"); |
| + aura::Window::Windows root_windows = Shell::GetAllRootWindows(); |
| + |
| + EXPECT_EQ("-300,0 300x300", |
| + ScreenUtil::GetSecondaryDisplay().bounds().ToString()); |
| + |
| + aura::Env* env = aura::Env::GetInstance(); |
| + |
| + // Set the initial position. |
| + root_windows[0]->MoveCursorTo(gfx::Point(-150, 250)); |
| + EXPECT_EQ("-150,250", env->last_mouse_location().ToString()); |
| + |
| + // A mouse pointer will stay in 2nd display. |
| + UpdateDisplay("300x300,200x300"); |
| + EXPECT_EQ("-50,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 that the cursor swaps displays and that its scale factor and rotation |
| +// are updated when the primary display is swapped. |
| +TEST_F(DisplayControllerTest, |
| + UpdateMouseLocationAfterDisplayChange_SwapPrimary) { |
| + if (!SupportsMultipleDisplays()) |
| + return; |
| + |
| + UpdateDisplay("200x200,200x200*2/r"); |
| + |
| + aura::Env* env = aura::Env::GetInstance(); |
| + Shell* shell = Shell::GetInstance(); |
| + DisplayController* display_controller = shell->display_controller(); |
| + test::CursorManagerTestApi test_api(shell->cursor_manager()); |
| + |
| + display_controller->GetPrimaryRootWindow()->MoveCursorTo(gfx::Point(20, 50)); |
| + |
| + EXPECT_EQ("20,50", env->last_mouse_location().ToString()); |
| + EXPECT_EQ(1.0f, test_api.GetCurrentCursor().device_scale_factor()); |
| + EXPECT_EQ(gfx::Display::ROTATE_0, test_api.GetCurrentCursorRotation()); |
| + |
| + display_controller->SwapPrimaryDisplay(); |
| + |
| + EXPECT_EQ("20,50", env->last_mouse_location().ToString()); |
| + EXPECT_EQ(2.0f, test_api.GetCurrentCursor().device_scale_factor()); |
| + EXPECT_EQ(gfx::Display::ROTATE_90, test_api.GetCurrentCursorRotation()); |
| +} |
| + |
| +// Test that the cursor moves to the other display and that its scale factor |
| +// and rotation are updated when the primary display is disconnected. |
| +TEST_F(DisplayControllerTest, |
| + UpdateMouseLocationAfterDisplayChange_PrimaryDisconnected) { |
| + if (!SupportsMultipleDisplays()) |
| + return; |
| + |
| + aura::Env* env = aura::Env::GetInstance(); |
| + Shell* shell = Shell::GetInstance(); |
| + DisplayController* display_controller = shell->display_controller(); |
| + test::CursorManagerTestApi test_api(shell->cursor_manager()); |
| + |
| + UpdateDisplay("300x300*2/r,200x200"); |
| + // Swap the primary display to make it possible to remove the primary display |
| + // via UpdateDisplay(). |
| + display_controller->SwapPrimaryDisplay(); |
| + int primary_display_id = display_controller->GetPrimaryDisplayId(); |
| + |
| + display_controller->GetPrimaryRootWindow()->MoveCursorTo(gfx::Point(20, 50)); |
| + |
| + EXPECT_EQ("20,50", env->last_mouse_location().ToString()); |
| + EXPECT_EQ(1.0f, test_api.GetCurrentCursor().device_scale_factor()); |
| + EXPECT_EQ(gfx::Display::ROTATE_0, test_api.GetCurrentCursorRotation()); |
| + |
| + UpdateDisplay("300x300*2/r"); |
| + ASSERT_NE(primary_display_id, display_controller->GetPrimaryDisplayId()); |
| + |
| + // Cursor should be centered on the remaining display. |
| + EXPECT_EQ("75,75", env->last_mouse_location().ToString()); |
| + EXPECT_EQ(2.0f, test_api.GetCurrentCursor().device_scale_factor()); |
| + EXPECT_EQ(gfx::Display::ROTATE_90, test_api.GetCurrentCursorRotation()); |
| +} |
| + |
| } // namespace ash |