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

Unified Diff: ash/display/extended_mouse_warp_controller_unittest.cc

Issue 1823913002: Allow moving cursors between connected displays. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Created 4 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
Index: ash/display/extended_mouse_warp_controller_unittest.cc
diff --git a/ash/display/extended_mouse_warp_controller_unittest.cc b/ash/display/extended_mouse_warp_controller_unittest.cc
index 13f5e02c18b9558e6a3a6296fb7588a79c6c1e0d..85988cc74f7b52702acf299d58b63fbe8a96f9d2 100644
--- a/ash/display/extended_mouse_warp_controller_unittest.cc
+++ b/ash/display/extended_mouse_warp_controller_unittest.cc
@@ -4,6 +4,7 @@
#include "ash/display/extended_mouse_warp_controller.h"
+#include "ash/display/display_layout_builder.h"
#include "ash/display/display_layout_store.h"
#include "ash/display/display_manager.h"
#include "ash/display/mouse_cursor_event_filter.h"
@@ -31,6 +32,18 @@ class ExtendedMouseWarpControllerTest : public test::AshTestBase {
event_filter()->mouse_warp_controller_for_test());
}
+ size_t GetWarpRegionsCount() {
+ return mouse_warp_controller()->warp_regions_.size();
+ }
+
+ const ExtendedMouseWarpController::WarpRegion* GetWarpRegion(size_t index) {
+ return mouse_warp_controller()->warp_regions_[index].get();
+ }
+
+ const gfx::Rect& GetIndicatorBounds(int64_t id) {
+ return GetWarpRegion(0)->GetIndicatorBoundsForTest(id);
+ }
+
private:
DISALLOW_COPY_AND_ASSIGN(ExtendedMouseWarpControllerTest);
};
@@ -42,23 +55,25 @@ TEST_F(ExtendedMouseWarpControllerTest, IndicatorBoundsTestOnRight) {
UpdateDisplay("360x360,700x700");
aura::Window::Windows root_windows = Shell::GetAllRootWindows();
+ int64_t display_0_id =
+ gfx::Screen::GetScreen()->GetDisplayNearestWindow(root_windows[0]).id();
+ int64_t display_1_id =
+ gfx::Screen::GetScreen()->GetDisplayNearestWindow(root_windows[1]).id();
DisplayManager* display_manager = Shell::GetInstance()->display_manager();
scoped_ptr<DisplayLayout> layout(
test::CreateDisplayLayout(DisplayPlacement::RIGHT, 0));
+
display_manager->SetLayoutForCurrentDisplays(layout->Copy());
event_filter()->ShowSharedEdgeIndicator(root_windows[0] /* primary */);
- ASSERT_EQ(1U, mouse_warp_controller()->warp_regions_.size());
- EXPECT_EQ(gfx::Rect(359, 16, 1, 344),
- mouse_warp_controller()->warp_regions_[0]->a_indicator_bounds());
- EXPECT_EQ(gfx::Rect(360, 0, 1, 360),
- mouse_warp_controller()->warp_regions_[0]->b_indicator_bounds());
+ ASSERT_EQ(1U, GetWarpRegionsCount());
+ EXPECT_EQ(gfx::Rect(359, 16, 1, 344), GetIndicatorBounds(display_0_id));
+ EXPECT_EQ(gfx::Rect(360, 0, 1, 360), GetIndicatorBounds(display_1_id));
+
event_filter()->ShowSharedEdgeIndicator(root_windows[1] /* secondary */);
- EXPECT_EQ(gfx::Rect(360, 16, 1, 344),
- mouse_warp_controller()->warp_regions_[0]->a_indicator_bounds());
- EXPECT_EQ(gfx::Rect(359, 0, 1, 360),
- mouse_warp_controller()->warp_regions_[0]->b_indicator_bounds());
+ EXPECT_EQ(gfx::Rect(359, 0, 1, 360), GetIndicatorBounds(display_0_id));
+ EXPECT_EQ(gfx::Rect(360, 16, 1, 344), GetIndicatorBounds(display_1_id));
// Move 2nd display downwards a bit.
layout->placement_list[0].offset = 5;
@@ -66,51 +81,41 @@ TEST_F(ExtendedMouseWarpControllerTest, IndicatorBoundsTestOnRight) {
event_filter()->ShowSharedEdgeIndicator(root_windows[0] /* primary */);
// This is same as before because the 2nd display's y is above
// the indicator's x.
- ASSERT_EQ(1U, mouse_warp_controller()->warp_regions_.size());
- EXPECT_EQ(gfx::Rect(359, 16, 1, 344),
- mouse_warp_controller()->warp_regions_[0]->a_indicator_bounds());
- EXPECT_EQ(gfx::Rect(360, 5, 1, 355),
- mouse_warp_controller()->warp_regions_[0]->b_indicator_bounds());
+ ASSERT_EQ(1U, GetWarpRegionsCount());
+ EXPECT_EQ(gfx::Rect(359, 16, 1, 344), GetIndicatorBounds(display_0_id));
+ EXPECT_EQ(gfx::Rect(360, 5, 1, 355), GetIndicatorBounds(display_1_id));
+
event_filter()->ShowSharedEdgeIndicator(root_windows[1] /* secondary */);
- EXPECT_EQ(gfx::Rect(360, 21, 1, 339),
- mouse_warp_controller()->warp_regions_[0]->a_indicator_bounds());
- EXPECT_EQ(gfx::Rect(359, 5, 1, 355),
- mouse_warp_controller()->warp_regions_[0]->b_indicator_bounds());
+ EXPECT_EQ(gfx::Rect(359, 5, 1, 355), GetIndicatorBounds(display_0_id));
+ EXPECT_EQ(gfx::Rect(360, 21, 1, 339), GetIndicatorBounds(display_1_id));
// Move it down further so that the shared edge is shorter than
// minimum hole size (160).
layout->placement_list[0].offset = 200;
display_manager->SetLayoutForCurrentDisplays(layout->Copy());
event_filter()->ShowSharedEdgeIndicator(root_windows[0] /* primary */);
- ASSERT_EQ(1U, mouse_warp_controller()->warp_regions_.size());
- EXPECT_EQ(gfx::Rect(359, 200, 1, 160),
- mouse_warp_controller()->warp_regions_[0]->a_indicator_bounds());
- EXPECT_EQ(gfx::Rect(360, 200, 1, 160),
- mouse_warp_controller()->warp_regions_[0]->b_indicator_bounds());
+ ASSERT_EQ(1U, GetWarpRegionsCount());
+ EXPECT_EQ(gfx::Rect(359, 200, 1, 160), GetIndicatorBounds(display_0_id));
+ EXPECT_EQ(gfx::Rect(360, 200, 1, 160), GetIndicatorBounds(display_1_id));
+
event_filter()->ShowSharedEdgeIndicator(root_windows[1] /* secondary */);
- ASSERT_EQ(1U, mouse_warp_controller()->warp_regions_.size());
- EXPECT_EQ(gfx::Rect(360, 200, 1, 160),
- mouse_warp_controller()->warp_regions_[0]->a_indicator_bounds());
- EXPECT_EQ(gfx::Rect(359, 200, 1, 160),
- mouse_warp_controller()->warp_regions_[0]->b_indicator_bounds());
+ ASSERT_EQ(1U, GetWarpRegionsCount());
+ EXPECT_EQ(gfx::Rect(359, 200, 1, 160), GetIndicatorBounds(display_0_id));
+ EXPECT_EQ(gfx::Rect(360, 200, 1, 160), GetIndicatorBounds(display_1_id));
// Now move 2nd display upwards
layout->placement_list[0].offset = -5;
display_manager->SetLayoutForCurrentDisplays(layout->Copy());
event_filter()->ShowSharedEdgeIndicator(root_windows[0] /* primary */);
- ASSERT_EQ(1U, mouse_warp_controller()->warp_regions_.size());
- EXPECT_EQ(gfx::Rect(359, 16, 1, 344),
- mouse_warp_controller()->warp_regions_[0]->a_indicator_bounds());
- EXPECT_EQ(gfx::Rect(360, 0, 1, 360),
- mouse_warp_controller()->warp_regions_[0]->b_indicator_bounds());
+ ASSERT_EQ(1U, GetWarpRegionsCount());
+ EXPECT_EQ(gfx::Rect(359, 16, 1, 344), GetIndicatorBounds(display_0_id));
+ EXPECT_EQ(gfx::Rect(360, 0, 1, 360), GetIndicatorBounds(display_1_id));
event_filter()->ShowSharedEdgeIndicator(root_windows[1] /* secondary */);
// 16 px are reserved on 2nd display from top, so y must be
// (16 - 5) = 11
- ASSERT_EQ(1U, mouse_warp_controller()->warp_regions_.size());
- EXPECT_EQ(gfx::Rect(360, 11, 1, 349),
- mouse_warp_controller()->warp_regions_[0]->a_indicator_bounds());
- EXPECT_EQ(gfx::Rect(359, 0, 1, 360),
- mouse_warp_controller()->warp_regions_[0]->b_indicator_bounds());
+ ASSERT_EQ(1U, GetWarpRegionsCount());
+ EXPECT_EQ(gfx::Rect(359, 0, 1, 360), GetIndicatorBounds(display_0_id));
+ EXPECT_EQ(gfx::Rect(360, 11, 1, 349), GetIndicatorBounds(display_1_id));
event_filter()->HideSharedEdgeIndicator();
}
@@ -122,37 +127,38 @@ TEST_F(ExtendedMouseWarpControllerTest, IndicatorBoundsTestOnLeft) {
UpdateDisplay("360x360,700x700");
aura::Window::Windows root_windows = Shell::GetAllRootWindows();
+ int64_t display_0_id =
+ gfx::Screen::GetScreen()->GetDisplayNearestWindow(root_windows[0]).id();
+ int64_t display_1_id =
+ gfx::Screen::GetScreen()->GetDisplayNearestWindow(root_windows[1]).id();
+
DisplayManager* display_manager = Shell::GetInstance()->display_manager();
scoped_ptr<DisplayLayout> layout(
test::CreateDisplayLayout(DisplayPlacement::LEFT, 0));
display_manager->SetLayoutForCurrentDisplays(layout->Copy());
+
event_filter()->ShowSharedEdgeIndicator(root_windows[0] /* primary */);
- ASSERT_EQ(1U, mouse_warp_controller()->warp_regions_.size());
- EXPECT_EQ(gfx::Rect(0, 16, 1, 344),
- mouse_warp_controller()->warp_regions_[0]->a_indicator_bounds());
- EXPECT_EQ(gfx::Rect(-1, 0, 1, 360),
- mouse_warp_controller()->warp_regions_[0]->b_indicator_bounds());
+ ASSERT_EQ(1U, GetWarpRegionsCount());
+ EXPECT_EQ(gfx::Rect(0, 16, 1, 344), GetIndicatorBounds(display_0_id));
+ EXPECT_EQ(gfx::Rect(-1, 0, 1, 360), GetIndicatorBounds(display_1_id));
+
event_filter()->ShowSharedEdgeIndicator(root_windows[1] /* secondary */);
- ASSERT_EQ(1U, mouse_warp_controller()->warp_regions_.size());
- EXPECT_EQ(gfx::Rect(-1, 16, 1, 344),
- mouse_warp_controller()->warp_regions_[0]->a_indicator_bounds());
- EXPECT_EQ(gfx::Rect(0, 0, 1, 360),
- mouse_warp_controller()->warp_regions_[0]->b_indicator_bounds());
+ ASSERT_EQ(1U, GetWarpRegionsCount());
+ EXPECT_EQ(gfx::Rect(0, 0, 1, 360), GetIndicatorBounds(display_0_id));
+ EXPECT_EQ(gfx::Rect(-1, 16, 1, 344), GetIndicatorBounds(display_1_id));
layout->placement_list[0].offset = 250;
display_manager->SetLayoutForCurrentDisplays(layout->Copy());
event_filter()->ShowSharedEdgeIndicator(root_windows[0] /* primary */);
- ASSERT_EQ(1U, mouse_warp_controller()->warp_regions_.size());
- EXPECT_EQ(gfx::Rect(0, 250, 1, 110),
- mouse_warp_controller()->warp_regions_[0]->a_indicator_bounds());
- EXPECT_EQ(gfx::Rect(-1, 250, 1, 110),
- mouse_warp_controller()->warp_regions_[0]->b_indicator_bounds());
+ ASSERT_EQ(1U, GetWarpRegionsCount());
+ EXPECT_EQ(gfx::Rect(0, 250, 1, 110), GetIndicatorBounds(display_0_id));
+ EXPECT_EQ(gfx::Rect(-1, 250, 1, 110), GetIndicatorBounds(display_1_id));
+
event_filter()->ShowSharedEdgeIndicator(root_windows[1] /* secondary */);
- ASSERT_EQ(1U, mouse_warp_controller()->warp_regions_.size());
- EXPECT_EQ(gfx::Rect(-1, 250, 1, 110),
- mouse_warp_controller()->warp_regions_[0]->a_indicator_bounds());
- EXPECT_EQ(gfx::Rect(0, 250, 1, 110),
- mouse_warp_controller()->warp_regions_[0]->b_indicator_bounds());
+ ASSERT_EQ(1U, GetWarpRegionsCount());
+ EXPECT_EQ(gfx::Rect(0, 250, 1, 110), GetIndicatorBounds(display_0_id));
+ EXPECT_EQ(gfx::Rect(-1, 250, 1, 110), GetIndicatorBounds(display_1_id));
+
event_filter()->HideSharedEdgeIndicator();
}
@@ -162,54 +168,49 @@ TEST_F(ExtendedMouseWarpControllerTest, IndicatorBoundsTestOnTopBottom) {
UpdateDisplay("360x360,700x700");
aura::Window::Windows root_windows = Shell::GetAllRootWindows();
+ int64_t display_0_id =
+ gfx::Screen::GetScreen()->GetDisplayNearestWindow(root_windows[0]).id();
+ int64_t display_1_id =
+ gfx::Screen::GetScreen()->GetDisplayNearestWindow(root_windows[1]).id();
DisplayManager* display_manager = Shell::GetInstance()->display_manager();
scoped_ptr<DisplayLayout> layout(
test::CreateDisplayLayout(DisplayPlacement::TOP, 0));
display_manager->SetLayoutForCurrentDisplays(layout->Copy());
event_filter()->ShowSharedEdgeIndicator(root_windows[0] /* primary */);
- ASSERT_EQ(1U, mouse_warp_controller()->warp_regions_.size());
- EXPECT_EQ(gfx::Rect(0, 0, 360, 1),
- mouse_warp_controller()->warp_regions_[0]->a_indicator_bounds());
- EXPECT_EQ(gfx::Rect(0, -1, 360, 1),
- mouse_warp_controller()->warp_regions_[0]->b_indicator_bounds());
+ ASSERT_EQ(1U, GetWarpRegionsCount());
+ EXPECT_EQ(gfx::Rect(0, 0, 360, 1), GetIndicatorBounds(display_0_id));
+ EXPECT_EQ(gfx::Rect(0, -1, 360, 1), GetIndicatorBounds(display_1_id));
+
event_filter()->ShowSharedEdgeIndicator(root_windows[1] /* secondary */);
- ASSERT_EQ(1U, mouse_warp_controller()->warp_regions_.size());
- EXPECT_EQ(gfx::Rect(0, -1, 360, 1),
- mouse_warp_controller()->warp_regions_[0]->a_indicator_bounds());
- EXPECT_EQ(gfx::Rect(0, 0, 360, 1),
- mouse_warp_controller()->warp_regions_[0]->b_indicator_bounds());
+ ASSERT_EQ(1U, GetWarpRegionsCount());
+ EXPECT_EQ(gfx::Rect(0, 0, 360, 1), GetIndicatorBounds(display_0_id));
+ EXPECT_EQ(gfx::Rect(0, -1, 360, 1), GetIndicatorBounds(display_1_id));
layout->placement_list[0].offset = 250;
display_manager->SetLayoutForCurrentDisplays(layout->Copy());
event_filter()->ShowSharedEdgeIndicator(root_windows[0] /* primary */);
- ASSERT_EQ(1U, mouse_warp_controller()->warp_regions_.size());
- EXPECT_EQ(gfx::Rect(250, 0, 110, 1),
- mouse_warp_controller()->warp_regions_[0]->a_indicator_bounds());
- EXPECT_EQ(gfx::Rect(250, -1, 110, 1),
- mouse_warp_controller()->warp_regions_[0]->b_indicator_bounds());
+ ASSERT_EQ(1U, GetWarpRegionsCount());
+ EXPECT_EQ(gfx::Rect(250, 0, 110, 1), GetIndicatorBounds(display_0_id));
+ EXPECT_EQ(gfx::Rect(250, -1, 110, 1), GetIndicatorBounds(display_1_id));
+
event_filter()->ShowSharedEdgeIndicator(root_windows[1] /* secondary */);
- ASSERT_EQ(1U, mouse_warp_controller()->warp_regions_.size());
- EXPECT_EQ(gfx::Rect(250, -1, 110, 1),
- mouse_warp_controller()->warp_regions_[0]->a_indicator_bounds());
- EXPECT_EQ(gfx::Rect(250, 0, 110, 1),
- mouse_warp_controller()->warp_regions_[0]->b_indicator_bounds());
+ ASSERT_EQ(1U, GetWarpRegionsCount());
+ EXPECT_EQ(gfx::Rect(250, 0, 110, 1), GetIndicatorBounds(display_0_id));
+ EXPECT_EQ(gfx::Rect(250, -1, 110, 1), GetIndicatorBounds(display_1_id));
layout->placement_list[0].position = DisplayPlacement::BOTTOM;
layout->placement_list[0].offset = 0;
display_manager->SetLayoutForCurrentDisplays(layout->Copy());
event_filter()->ShowSharedEdgeIndicator(root_windows[0] /* primary */);
- ASSERT_EQ(1U, mouse_warp_controller()->warp_regions_.size());
- EXPECT_EQ(gfx::Rect(0, 359, 360, 1),
- mouse_warp_controller()->warp_regions_[0]->a_indicator_bounds());
- EXPECT_EQ(gfx::Rect(0, 360, 360, 1),
- mouse_warp_controller()->warp_regions_[0]->b_indicator_bounds());
+ ASSERT_EQ(1U, GetWarpRegionsCount());
+ EXPECT_EQ(gfx::Rect(0, 359, 360, 1), GetIndicatorBounds(display_0_id));
+ EXPECT_EQ(gfx::Rect(0, 360, 360, 1), GetIndicatorBounds(display_1_id));
+
event_filter()->ShowSharedEdgeIndicator(root_windows[1] /* secondary */);
- ASSERT_EQ(1U, mouse_warp_controller()->warp_regions_.size());
- EXPECT_EQ(gfx::Rect(0, 360, 360, 1),
- mouse_warp_controller()->warp_regions_[0]->a_indicator_bounds());
- EXPECT_EQ(gfx::Rect(0, 359, 360, 1),
- mouse_warp_controller()->warp_regions_[0]->b_indicator_bounds());
+ ASSERT_EQ(1U, GetWarpRegionsCount());
+ EXPECT_EQ(gfx::Rect(0, 359, 360, 1), GetIndicatorBounds(display_0_id));
+ EXPECT_EQ(gfx::Rect(0, 360, 360, 1), GetIndicatorBounds(display_1_id));
event_filter()->HideSharedEdgeIndicator();
}
@@ -219,52 +220,152 @@ TEST_F(ExtendedMouseWarpControllerTest, IndicatorBoundsTestThreeDisplays) {
if (!SupportsMultipleDisplays())
return;
- auto run_test = [this] {
- aura::Window::Windows root_windows = Shell::GetAllRootWindows();
-
- // Left most display
- event_filter()->ShowSharedEdgeIndicator(root_windows[0]);
- ASSERT_EQ(2U, mouse_warp_controller()->warp_regions_.size());
- EXPECT_EQ(gfx::Rect(359, 16, 1, 344),
- mouse_warp_controller()->warp_regions_[0]->a_indicator_bounds());
- EXPECT_EQ(gfx::Rect(360, 0, 1, 360),
- mouse_warp_controller()->warp_regions_[0]->b_indicator_bounds());
- EXPECT_EQ(gfx::Rect(1060, 16, 1, 684),
- mouse_warp_controller()->warp_regions_[1]->a_indicator_bounds());
- EXPECT_EQ(gfx::Rect(1059, 0, 1, 700),
- mouse_warp_controller()->warp_regions_[1]->b_indicator_bounds());
-
- // Middle display
- event_filter()->ShowSharedEdgeIndicator(root_windows[1]);
- ASSERT_EQ(2U, mouse_warp_controller()->warp_regions_.size());
- EXPECT_EQ(gfx::Rect(360, 16, 1, 344),
- mouse_warp_controller()->warp_regions_[0]->a_indicator_bounds());
- EXPECT_EQ(gfx::Rect(359, 0, 1, 360),
- mouse_warp_controller()->warp_regions_[0]->b_indicator_bounds());
- EXPECT_EQ(gfx::Rect(1059, 16, 1, 684),
- mouse_warp_controller()->warp_regions_[1]->a_indicator_bounds());
- EXPECT_EQ(gfx::Rect(1060, 0, 1, 700),
- mouse_warp_controller()->warp_regions_[1]->b_indicator_bounds());
-
- // Right most display
- event_filter()->ShowSharedEdgeIndicator(root_windows[2]);
- ASSERT_EQ(2U, mouse_warp_controller()->warp_regions_.size());
- EXPECT_EQ(gfx::Rect(360, 16, 1, 344),
- mouse_warp_controller()->warp_regions_[0]->a_indicator_bounds());
- EXPECT_EQ(gfx::Rect(359, 0, 1, 360),
- mouse_warp_controller()->warp_regions_[0]->b_indicator_bounds());
- EXPECT_EQ(gfx::Rect(1060, 16, 1, 684),
- mouse_warp_controller()->warp_regions_[1]->a_indicator_bounds());
- EXPECT_EQ(gfx::Rect(1059, 0, 1, 700),
- mouse_warp_controller()->warp_regions_[1]->b_indicator_bounds());
-
- event_filter()->HideSharedEdgeIndicator();
- };
-
UpdateDisplay("360x360,700x700,1000x1000");
- run_test();
+ aura::Window::Windows root_windows = Shell::GetAllRootWindows();
+ gfx::Screen* screen = gfx::Screen::GetScreen();
+ int64_t display_0_id = screen->GetDisplayNearestWindow(root_windows[0]).id();
+ int64_t display_1_id = screen->GetDisplayNearestWindow(root_windows[1]).id();
+ int64_t display_2_id = screen->GetDisplayNearestWindow(root_windows[2]).id();
+
+ // Drag from left most display
+ event_filter()->ShowSharedEdgeIndicator(root_windows[0]);
+ ASSERT_EQ(2U, GetWarpRegionsCount());
+ const ExtendedMouseWarpController::WarpRegion* region_0 = GetWarpRegion(0);
+ const ExtendedMouseWarpController::WarpRegion* region_1 = GetWarpRegion(1);
+ EXPECT_EQ(gfx::Rect(359, 16, 1, 344),
+ region_1->GetIndicatorBoundsForTest(display_0_id));
+ EXPECT_EQ(gfx::Rect(360, 0, 1, 360),
+ region_1->GetIndicatorBoundsForTest(display_1_id));
+ EXPECT_EQ(gfx::Rect(1059, 0, 1, 700),
+ region_0->GetIndicatorBoundsForTest(display_1_id));
+ EXPECT_EQ(gfx::Rect(1060, 0, 1, 700),
+ region_0->GetIndicatorBoundsForTest(display_2_id));
+
+ // Drag from middle display
+ event_filter()->ShowSharedEdgeIndicator(root_windows[1]);
+ ASSERT_EQ(2U, mouse_warp_controller()->warp_regions_.size());
+ region_0 = GetWarpRegion(0);
+ region_1 = GetWarpRegion(1);
+ EXPECT_EQ(gfx::Rect(359, 0, 1, 360),
+ region_1->GetIndicatorBoundsForTest(display_0_id));
+ EXPECT_EQ(gfx::Rect(360, 16, 1, 344),
+ region_1->GetIndicatorBoundsForTest(display_1_id));
+ EXPECT_EQ(gfx::Rect(1059, 16, 1, 684),
+ region_0->GetIndicatorBoundsForTest(display_1_id));
+ EXPECT_EQ(gfx::Rect(1060, 0, 1, 700),
+ region_0->GetIndicatorBoundsForTest(display_2_id));
+
+ // Right most display
+ event_filter()->ShowSharedEdgeIndicator(root_windows[2]);
+ ASSERT_EQ(2U, mouse_warp_controller()->warp_regions_.size());
+ region_0 = GetWarpRegion(0);
+ region_1 = GetWarpRegion(1);
+ EXPECT_EQ(gfx::Rect(359, 0, 1, 360),
+ region_1->GetIndicatorBoundsForTest(display_0_id));
+ EXPECT_EQ(gfx::Rect(360, 0, 1, 360),
+ region_1->GetIndicatorBoundsForTest(display_1_id));
+ EXPECT_EQ(gfx::Rect(1059, 0, 1, 700),
+ region_0->GetIndicatorBoundsForTest(display_1_id));
+ EXPECT_EQ(gfx::Rect(1060, 16, 1, 684),
+ region_0->GetIndicatorBoundsForTest(display_2_id));
+ event_filter()->HideSharedEdgeIndicator();
+ // TODO(oshima): Add test cases primary swap.
+}
- // TODO(oshima): Add test cases with layouts, primary swap.
+TEST_F(ExtendedMouseWarpControllerTest,
+ IndicatorBoundsTestThreeDisplaysWithLayout) {
+ if (!SupportsMultipleDisplays())
+ return;
+ UpdateDisplay("700x500,500x500,1000x1000");
+ aura::Window::Windows root_windows = Shell::GetAllRootWindows();
+ gfx::Screen* screen = gfx::Screen::GetScreen();
+ int64_t display_0_id = screen->GetDisplayNearestWindow(root_windows[0]).id();
+ int64_t display_1_id = screen->GetDisplayNearestWindow(root_windows[1]).id();
+ int64_t display_2_id = screen->GetDisplayNearestWindow(root_windows[2]).id();
+
+ // Layout so that all displays touches togter like this:
+ // +-----+---+
+ // | 0 | 1 |
+ // +-+---+--++
+ // | 2 |
+ // +------+
+ ash::DisplayLayoutBuilder builder(display_0_id);
+ builder.AddDisplayPlacement(display_1_id, display_0_id,
+ ash::DisplayPlacement::RIGHT, 0);
+ builder.AddDisplayPlacement(display_2_id, display_0_id,
+ ash::DisplayPlacement::BOTTOM, 100);
+
+ DisplayManager* display_manager = Shell::GetInstance()->display_manager();
+ display_manager->SetLayoutForCurrentDisplays(builder.Build());
+ ASSERT_EQ(3U, GetWarpRegionsCount());
+
+ // Drag from 0.
+ event_filter()->ShowSharedEdgeIndicator(root_windows[0]);
+ ASSERT_EQ(3U, GetWarpRegionsCount());
+ const ExtendedMouseWarpController::WarpRegion* region_0 = GetWarpRegion(0);
+ const ExtendedMouseWarpController::WarpRegion* region_1 = GetWarpRegion(1);
+ const ExtendedMouseWarpController::WarpRegion* region_2 = GetWarpRegion(2);
+ // between 2 and 0
+ EXPECT_EQ(gfx::Rect(100, 499, 600, 1),
+ region_0->GetIndicatorBoundsForTest(display_0_id));
+ EXPECT_EQ(gfx::Rect(100, 500, 600, 1),
+ region_0->GetIndicatorBoundsForTest(display_2_id));
+ // between 2 and 1
+ EXPECT_EQ(gfx::Rect(700, 499, 400, 1),
+ region_1->GetIndicatorBoundsForTest(display_1_id));
+ EXPECT_EQ(gfx::Rect(700, 500, 400, 1),
+ region_1->GetIndicatorBoundsForTest(display_2_id));
+ // between 1 and 0
+ EXPECT_EQ(gfx::Rect(699, 16, 1, 484),
+ region_2->GetIndicatorBoundsForTest(display_0_id));
+ EXPECT_EQ(gfx::Rect(700, 0, 1, 500),
+ region_2->GetIndicatorBoundsForTest(display_1_id));
+ event_filter()->HideSharedEdgeIndicator();
+}
+
+TEST_F(ExtendedMouseWarpControllerTest,
+ IndicatorBoundsTestThreeDisplaysWithLayout2) {
+ if (!SupportsMultipleDisplays())
+ return;
+ UpdateDisplay("700x500,500x500,1000x1000");
+ aura::Window::Windows root_windows = Shell::GetAllRootWindows();
+ gfx::Screen* screen = gfx::Screen::GetScreen();
+ int64_t display_0_id = screen->GetDisplayNearestWindow(root_windows[0]).id();
+ int64_t display_1_id = screen->GetDisplayNearestWindow(root_windows[1]).id();
+ int64_t display_2_id = screen->GetDisplayNearestWindow(root_windows[2]).id();
+
+ // Layout so that 0 and 1 displays are disconnected.
+ // +-----+ +---+
+ // | 0 | |1 |
+ // +-+---+-+++
+ // | 2 |
+ // +------+
+ ash::DisplayLayoutBuilder builder(display_0_id);
+ builder.AddDisplayPlacement(display_2_id, display_0_id,
+ ash::DisplayPlacement::BOTTOM, 100);
+ builder.AddDisplayPlacement(display_1_id, display_2_id,
+ ash::DisplayPlacement::TOP, 800);
+
+ DisplayManager* display_manager = Shell::GetInstance()->display_manager();
+ display_manager->SetLayoutForCurrentDisplays(builder.Build());
+ ASSERT_EQ(2U, GetWarpRegionsCount());
+
+ // Drag from 0.
+ event_filter()->ShowSharedEdgeIndicator(root_windows[0]);
+ ASSERT_EQ(2U, GetWarpRegionsCount());
+ const ExtendedMouseWarpController::WarpRegion* region_0 = GetWarpRegion(0);
+ const ExtendedMouseWarpController::WarpRegion* region_1 = GetWarpRegion(1);
+ // between 2 and 0
+ EXPECT_EQ(gfx::Rect(100, 499, 600, 1),
+ region_0->GetIndicatorBoundsForTest(display_0_id));
+ EXPECT_EQ(gfx::Rect(100, 500, 600, 1),
+ region_0->GetIndicatorBoundsForTest(display_2_id));
+ // between 2 and 1
+ EXPECT_EQ(gfx::Rect(900, 499, 200, 1),
+ region_1->GetIndicatorBoundsForTest(display_1_id));
+ EXPECT_EQ(gfx::Rect(900, 500, 200, 1),
+ region_1->GetIndicatorBoundsForTest(display_2_id));
+ event_filter()->HideSharedEdgeIndicator();
}
} // namespace ash

Powered by Google App Engine
This is Rietveld 408576698