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

Side by Side 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 unified diff | Download patch
OLDNEW
1 // Copyright 2015 The Chromium Authors. All rights reserved. 1 // Copyright 2015 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be 2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file. 3 // found in the LICENSE file.
4 4
5 #include "ash/display/extended_mouse_warp_controller.h" 5 #include "ash/display/extended_mouse_warp_controller.h"
6 6
7 #include "ash/display/display_layout_builder.h"
7 #include "ash/display/display_layout_store.h" 8 #include "ash/display/display_layout_store.h"
8 #include "ash/display/display_manager.h" 9 #include "ash/display/display_manager.h"
9 #include "ash/display/mouse_cursor_event_filter.h" 10 #include "ash/display/mouse_cursor_event_filter.h"
10 #include "ash/shell.h" 11 #include "ash/shell.h"
11 #include "ash/test/ash_test_base.h" 12 #include "ash/test/ash_test_base.h"
12 #include "ash/test/display_manager_test_api.h" 13 #include "ash/test/display_manager_test_api.h"
13 #include "ui/events/test/event_generator.h" 14 #include "ui/events/test/event_generator.h"
14 #include "ui/gfx/display.h" 15 #include "ui/gfx/display.h"
15 #include "ui/gfx/screen.h" 16 #include "ui/gfx/screen.h"
16 17
17 namespace ash { 18 namespace ash {
18 19
19 class ExtendedMouseWarpControllerTest : public test::AshTestBase { 20 class ExtendedMouseWarpControllerTest : public test::AshTestBase {
20 public: 21 public:
21 ExtendedMouseWarpControllerTest() {} 22 ExtendedMouseWarpControllerTest() {}
22 ~ExtendedMouseWarpControllerTest() override {} 23 ~ExtendedMouseWarpControllerTest() override {}
23 24
24 protected: 25 protected:
25 MouseCursorEventFilter* event_filter() { 26 MouseCursorEventFilter* event_filter() {
26 return Shell::GetInstance()->mouse_cursor_filter(); 27 return Shell::GetInstance()->mouse_cursor_filter();
27 } 28 }
28 29
29 ExtendedMouseWarpController* mouse_warp_controller() { 30 ExtendedMouseWarpController* mouse_warp_controller() {
30 return static_cast<ExtendedMouseWarpController*>( 31 return static_cast<ExtendedMouseWarpController*>(
31 event_filter()->mouse_warp_controller_for_test()); 32 event_filter()->mouse_warp_controller_for_test());
32 } 33 }
33 34
35 size_t GetWarpRegionsCount() {
36 return mouse_warp_controller()->warp_regions_.size();
37 }
38
39 const ExtendedMouseWarpController::WarpRegion* GetWarpRegion(size_t index) {
40 return mouse_warp_controller()->warp_regions_[index].get();
41 }
42
43 const gfx::Rect& GetIndicatorBounds(int64_t id) {
44 return GetWarpRegion(0)->GetIndicatorBoundsForTest(id);
45 }
46
34 private: 47 private:
35 DISALLOW_COPY_AND_ASSIGN(ExtendedMouseWarpControllerTest); 48 DISALLOW_COPY_AND_ASSIGN(ExtendedMouseWarpControllerTest);
36 }; 49 };
37 50
38 // Verifies if MouseCursorEventFilter's bounds calculation works correctly. 51 // Verifies if MouseCursorEventFilter's bounds calculation works correctly.
39 TEST_F(ExtendedMouseWarpControllerTest, IndicatorBoundsTestOnRight) { 52 TEST_F(ExtendedMouseWarpControllerTest, IndicatorBoundsTestOnRight) {
40 if (!SupportsMultipleDisplays()) 53 if (!SupportsMultipleDisplays())
41 return; 54 return;
42 55
43 UpdateDisplay("360x360,700x700"); 56 UpdateDisplay("360x360,700x700");
44 aura::Window::Windows root_windows = Shell::GetAllRootWindows(); 57 aura::Window::Windows root_windows = Shell::GetAllRootWindows();
58 int64_t display_0_id =
59 gfx::Screen::GetScreen()->GetDisplayNearestWindow(root_windows[0]).id();
60 int64_t display_1_id =
61 gfx::Screen::GetScreen()->GetDisplayNearestWindow(root_windows[1]).id();
45 62
46 DisplayManager* display_manager = Shell::GetInstance()->display_manager(); 63 DisplayManager* display_manager = Shell::GetInstance()->display_manager();
47 scoped_ptr<DisplayLayout> layout( 64 scoped_ptr<DisplayLayout> layout(
48 test::CreateDisplayLayout(DisplayPlacement::RIGHT, 0)); 65 test::CreateDisplayLayout(DisplayPlacement::RIGHT, 0));
66
49 display_manager->SetLayoutForCurrentDisplays(layout->Copy()); 67 display_manager->SetLayoutForCurrentDisplays(layout->Copy());
50 event_filter()->ShowSharedEdgeIndicator(root_windows[0] /* primary */); 68 event_filter()->ShowSharedEdgeIndicator(root_windows[0] /* primary */);
51 69
52 ASSERT_EQ(1U, mouse_warp_controller()->warp_regions_.size()); 70 ASSERT_EQ(1U, GetWarpRegionsCount());
53 EXPECT_EQ(gfx::Rect(359, 16, 1, 344), 71 EXPECT_EQ(gfx::Rect(359, 16, 1, 344), GetIndicatorBounds(display_0_id));
54 mouse_warp_controller()->warp_regions_[0]->a_indicator_bounds()); 72 EXPECT_EQ(gfx::Rect(360, 0, 1, 360), GetIndicatorBounds(display_1_id));
55 EXPECT_EQ(gfx::Rect(360, 0, 1, 360), 73
56 mouse_warp_controller()->warp_regions_[0]->b_indicator_bounds());
57 event_filter()->ShowSharedEdgeIndicator(root_windows[1] /* secondary */); 74 event_filter()->ShowSharedEdgeIndicator(root_windows[1] /* secondary */);
58 EXPECT_EQ(gfx::Rect(360, 16, 1, 344), 75 EXPECT_EQ(gfx::Rect(359, 0, 1, 360), GetIndicatorBounds(display_0_id));
59 mouse_warp_controller()->warp_regions_[0]->a_indicator_bounds()); 76 EXPECT_EQ(gfx::Rect(360, 16, 1, 344), GetIndicatorBounds(display_1_id));
60 EXPECT_EQ(gfx::Rect(359, 0, 1, 360),
61 mouse_warp_controller()->warp_regions_[0]->b_indicator_bounds());
62 77
63 // Move 2nd display downwards a bit. 78 // Move 2nd display downwards a bit.
64 layout->placement_list[0].offset = 5; 79 layout->placement_list[0].offset = 5;
65 display_manager->SetLayoutForCurrentDisplays(layout->Copy()); 80 display_manager->SetLayoutForCurrentDisplays(layout->Copy());
66 event_filter()->ShowSharedEdgeIndicator(root_windows[0] /* primary */); 81 event_filter()->ShowSharedEdgeIndicator(root_windows[0] /* primary */);
67 // This is same as before because the 2nd display's y is above 82 // This is same as before because the 2nd display's y is above
68 // the indicator's x. 83 // the indicator's x.
69 ASSERT_EQ(1U, mouse_warp_controller()->warp_regions_.size()); 84 ASSERT_EQ(1U, GetWarpRegionsCount());
70 EXPECT_EQ(gfx::Rect(359, 16, 1, 344), 85 EXPECT_EQ(gfx::Rect(359, 16, 1, 344), GetIndicatorBounds(display_0_id));
71 mouse_warp_controller()->warp_regions_[0]->a_indicator_bounds()); 86 EXPECT_EQ(gfx::Rect(360, 5, 1, 355), GetIndicatorBounds(display_1_id));
72 EXPECT_EQ(gfx::Rect(360, 5, 1, 355), 87
73 mouse_warp_controller()->warp_regions_[0]->b_indicator_bounds());
74 event_filter()->ShowSharedEdgeIndicator(root_windows[1] /* secondary */); 88 event_filter()->ShowSharedEdgeIndicator(root_windows[1] /* secondary */);
75 EXPECT_EQ(gfx::Rect(360, 21, 1, 339), 89 EXPECT_EQ(gfx::Rect(359, 5, 1, 355), GetIndicatorBounds(display_0_id));
76 mouse_warp_controller()->warp_regions_[0]->a_indicator_bounds()); 90 EXPECT_EQ(gfx::Rect(360, 21, 1, 339), GetIndicatorBounds(display_1_id));
77 EXPECT_EQ(gfx::Rect(359, 5, 1, 355),
78 mouse_warp_controller()->warp_regions_[0]->b_indicator_bounds());
79 91
80 // Move it down further so that the shared edge is shorter than 92 // Move it down further so that the shared edge is shorter than
81 // minimum hole size (160). 93 // minimum hole size (160).
82 layout->placement_list[0].offset = 200; 94 layout->placement_list[0].offset = 200;
83 display_manager->SetLayoutForCurrentDisplays(layout->Copy()); 95 display_manager->SetLayoutForCurrentDisplays(layout->Copy());
84 event_filter()->ShowSharedEdgeIndicator(root_windows[0] /* primary */); 96 event_filter()->ShowSharedEdgeIndicator(root_windows[0] /* primary */);
85 ASSERT_EQ(1U, mouse_warp_controller()->warp_regions_.size()); 97 ASSERT_EQ(1U, GetWarpRegionsCount());
86 EXPECT_EQ(gfx::Rect(359, 200, 1, 160), 98 EXPECT_EQ(gfx::Rect(359, 200, 1, 160), GetIndicatorBounds(display_0_id));
87 mouse_warp_controller()->warp_regions_[0]->a_indicator_bounds()); 99 EXPECT_EQ(gfx::Rect(360, 200, 1, 160), GetIndicatorBounds(display_1_id));
88 EXPECT_EQ(gfx::Rect(360, 200, 1, 160), 100
89 mouse_warp_controller()->warp_regions_[0]->b_indicator_bounds());
90 event_filter()->ShowSharedEdgeIndicator(root_windows[1] /* secondary */); 101 event_filter()->ShowSharedEdgeIndicator(root_windows[1] /* secondary */);
91 ASSERT_EQ(1U, mouse_warp_controller()->warp_regions_.size()); 102 ASSERT_EQ(1U, GetWarpRegionsCount());
92 EXPECT_EQ(gfx::Rect(360, 200, 1, 160), 103 EXPECT_EQ(gfx::Rect(359, 200, 1, 160), GetIndicatorBounds(display_0_id));
93 mouse_warp_controller()->warp_regions_[0]->a_indicator_bounds()); 104 EXPECT_EQ(gfx::Rect(360, 200, 1, 160), GetIndicatorBounds(display_1_id));
94 EXPECT_EQ(gfx::Rect(359, 200, 1, 160),
95 mouse_warp_controller()->warp_regions_[0]->b_indicator_bounds());
96 105
97 // Now move 2nd display upwards 106 // Now move 2nd display upwards
98 layout->placement_list[0].offset = -5; 107 layout->placement_list[0].offset = -5;
99 display_manager->SetLayoutForCurrentDisplays(layout->Copy()); 108 display_manager->SetLayoutForCurrentDisplays(layout->Copy());
100 event_filter()->ShowSharedEdgeIndicator(root_windows[0] /* primary */); 109 event_filter()->ShowSharedEdgeIndicator(root_windows[0] /* primary */);
101 ASSERT_EQ(1U, mouse_warp_controller()->warp_regions_.size()); 110 ASSERT_EQ(1U, GetWarpRegionsCount());
102 EXPECT_EQ(gfx::Rect(359, 16, 1, 344), 111 EXPECT_EQ(gfx::Rect(359, 16, 1, 344), GetIndicatorBounds(display_0_id));
103 mouse_warp_controller()->warp_regions_[0]->a_indicator_bounds()); 112 EXPECT_EQ(gfx::Rect(360, 0, 1, 360), GetIndicatorBounds(display_1_id));
104 EXPECT_EQ(gfx::Rect(360, 0, 1, 360),
105 mouse_warp_controller()->warp_regions_[0]->b_indicator_bounds());
106 event_filter()->ShowSharedEdgeIndicator(root_windows[1] /* secondary */); 113 event_filter()->ShowSharedEdgeIndicator(root_windows[1] /* secondary */);
107 // 16 px are reserved on 2nd display from top, so y must be 114 // 16 px are reserved on 2nd display from top, so y must be
108 // (16 - 5) = 11 115 // (16 - 5) = 11
109 ASSERT_EQ(1U, mouse_warp_controller()->warp_regions_.size()); 116 ASSERT_EQ(1U, GetWarpRegionsCount());
110 EXPECT_EQ(gfx::Rect(360, 11, 1, 349), 117 EXPECT_EQ(gfx::Rect(359, 0, 1, 360), GetIndicatorBounds(display_0_id));
111 mouse_warp_controller()->warp_regions_[0]->a_indicator_bounds()); 118 EXPECT_EQ(gfx::Rect(360, 11, 1, 349), GetIndicatorBounds(display_1_id));
112 EXPECT_EQ(gfx::Rect(359, 0, 1, 360),
113 mouse_warp_controller()->warp_regions_[0]->b_indicator_bounds());
114 119
115 event_filter()->HideSharedEdgeIndicator(); 120 event_filter()->HideSharedEdgeIndicator();
116 } 121 }
117 122
118 TEST_F(ExtendedMouseWarpControllerTest, IndicatorBoundsTestOnLeft) { 123 TEST_F(ExtendedMouseWarpControllerTest, IndicatorBoundsTestOnLeft) {
119 if (!SupportsMultipleDisplays()) 124 if (!SupportsMultipleDisplays())
120 return; 125 return;
121 126
122 UpdateDisplay("360x360,700x700"); 127 UpdateDisplay("360x360,700x700");
123 aura::Window::Windows root_windows = Shell::GetAllRootWindows(); 128 aura::Window::Windows root_windows = Shell::GetAllRootWindows();
124 129
130 int64_t display_0_id =
131 gfx::Screen::GetScreen()->GetDisplayNearestWindow(root_windows[0]).id();
132 int64_t display_1_id =
133 gfx::Screen::GetScreen()->GetDisplayNearestWindow(root_windows[1]).id();
134
125 DisplayManager* display_manager = Shell::GetInstance()->display_manager(); 135 DisplayManager* display_manager = Shell::GetInstance()->display_manager();
126 scoped_ptr<DisplayLayout> layout( 136 scoped_ptr<DisplayLayout> layout(
127 test::CreateDisplayLayout(DisplayPlacement::LEFT, 0)); 137 test::CreateDisplayLayout(DisplayPlacement::LEFT, 0));
128 display_manager->SetLayoutForCurrentDisplays(layout->Copy()); 138 display_manager->SetLayoutForCurrentDisplays(layout->Copy());
139
129 event_filter()->ShowSharedEdgeIndicator(root_windows[0] /* primary */); 140 event_filter()->ShowSharedEdgeIndicator(root_windows[0] /* primary */);
130 ASSERT_EQ(1U, mouse_warp_controller()->warp_regions_.size()); 141 ASSERT_EQ(1U, GetWarpRegionsCount());
131 EXPECT_EQ(gfx::Rect(0, 16, 1, 344), 142 EXPECT_EQ(gfx::Rect(0, 16, 1, 344), GetIndicatorBounds(display_0_id));
132 mouse_warp_controller()->warp_regions_[0]->a_indicator_bounds()); 143 EXPECT_EQ(gfx::Rect(-1, 0, 1, 360), GetIndicatorBounds(display_1_id));
133 EXPECT_EQ(gfx::Rect(-1, 0, 1, 360), 144
134 mouse_warp_controller()->warp_regions_[0]->b_indicator_bounds());
135 event_filter()->ShowSharedEdgeIndicator(root_windows[1] /* secondary */); 145 event_filter()->ShowSharedEdgeIndicator(root_windows[1] /* secondary */);
136 ASSERT_EQ(1U, mouse_warp_controller()->warp_regions_.size()); 146 ASSERT_EQ(1U, GetWarpRegionsCount());
137 EXPECT_EQ(gfx::Rect(-1, 16, 1, 344), 147 EXPECT_EQ(gfx::Rect(0, 0, 1, 360), GetIndicatorBounds(display_0_id));
138 mouse_warp_controller()->warp_regions_[0]->a_indicator_bounds()); 148 EXPECT_EQ(gfx::Rect(-1, 16, 1, 344), GetIndicatorBounds(display_1_id));
139 EXPECT_EQ(gfx::Rect(0, 0, 1, 360),
140 mouse_warp_controller()->warp_regions_[0]->b_indicator_bounds());
141 149
142 layout->placement_list[0].offset = 250; 150 layout->placement_list[0].offset = 250;
143 display_manager->SetLayoutForCurrentDisplays(layout->Copy()); 151 display_manager->SetLayoutForCurrentDisplays(layout->Copy());
144 event_filter()->ShowSharedEdgeIndicator(root_windows[0] /* primary */); 152 event_filter()->ShowSharedEdgeIndicator(root_windows[0] /* primary */);
145 ASSERT_EQ(1U, mouse_warp_controller()->warp_regions_.size()); 153 ASSERT_EQ(1U, GetWarpRegionsCount());
146 EXPECT_EQ(gfx::Rect(0, 250, 1, 110), 154 EXPECT_EQ(gfx::Rect(0, 250, 1, 110), GetIndicatorBounds(display_0_id));
147 mouse_warp_controller()->warp_regions_[0]->a_indicator_bounds()); 155 EXPECT_EQ(gfx::Rect(-1, 250, 1, 110), GetIndicatorBounds(display_1_id));
148 EXPECT_EQ(gfx::Rect(-1, 250, 1, 110), 156
149 mouse_warp_controller()->warp_regions_[0]->b_indicator_bounds());
150 event_filter()->ShowSharedEdgeIndicator(root_windows[1] /* secondary */); 157 event_filter()->ShowSharedEdgeIndicator(root_windows[1] /* secondary */);
151 ASSERT_EQ(1U, mouse_warp_controller()->warp_regions_.size()); 158 ASSERT_EQ(1U, GetWarpRegionsCount());
152 EXPECT_EQ(gfx::Rect(-1, 250, 1, 110), 159 EXPECT_EQ(gfx::Rect(0, 250, 1, 110), GetIndicatorBounds(display_0_id));
153 mouse_warp_controller()->warp_regions_[0]->a_indicator_bounds()); 160 EXPECT_EQ(gfx::Rect(-1, 250, 1, 110), GetIndicatorBounds(display_1_id));
154 EXPECT_EQ(gfx::Rect(0, 250, 1, 110), 161
155 mouse_warp_controller()->warp_regions_[0]->b_indicator_bounds());
156 event_filter()->HideSharedEdgeIndicator(); 162 event_filter()->HideSharedEdgeIndicator();
157 } 163 }
158 164
159 TEST_F(ExtendedMouseWarpControllerTest, IndicatorBoundsTestOnTopBottom) { 165 TEST_F(ExtendedMouseWarpControllerTest, IndicatorBoundsTestOnTopBottom) {
160 if (!SupportsMultipleDisplays()) 166 if (!SupportsMultipleDisplays())
161 return; 167 return;
162 168
163 UpdateDisplay("360x360,700x700"); 169 UpdateDisplay("360x360,700x700");
164 aura::Window::Windows root_windows = Shell::GetAllRootWindows(); 170 aura::Window::Windows root_windows = Shell::GetAllRootWindows();
171 int64_t display_0_id =
172 gfx::Screen::GetScreen()->GetDisplayNearestWindow(root_windows[0]).id();
173 int64_t display_1_id =
174 gfx::Screen::GetScreen()->GetDisplayNearestWindow(root_windows[1]).id();
165 175
166 DisplayManager* display_manager = Shell::GetInstance()->display_manager(); 176 DisplayManager* display_manager = Shell::GetInstance()->display_manager();
167 scoped_ptr<DisplayLayout> layout( 177 scoped_ptr<DisplayLayout> layout(
168 test::CreateDisplayLayout(DisplayPlacement::TOP, 0)); 178 test::CreateDisplayLayout(DisplayPlacement::TOP, 0));
169 display_manager->SetLayoutForCurrentDisplays(layout->Copy()); 179 display_manager->SetLayoutForCurrentDisplays(layout->Copy());
170 event_filter()->ShowSharedEdgeIndicator(root_windows[0] /* primary */); 180 event_filter()->ShowSharedEdgeIndicator(root_windows[0] /* primary */);
171 ASSERT_EQ(1U, mouse_warp_controller()->warp_regions_.size()); 181 ASSERT_EQ(1U, GetWarpRegionsCount());
172 EXPECT_EQ(gfx::Rect(0, 0, 360, 1), 182 EXPECT_EQ(gfx::Rect(0, 0, 360, 1), GetIndicatorBounds(display_0_id));
173 mouse_warp_controller()->warp_regions_[0]->a_indicator_bounds()); 183 EXPECT_EQ(gfx::Rect(0, -1, 360, 1), GetIndicatorBounds(display_1_id));
174 EXPECT_EQ(gfx::Rect(0, -1, 360, 1), 184
175 mouse_warp_controller()->warp_regions_[0]->b_indicator_bounds());
176 event_filter()->ShowSharedEdgeIndicator(root_windows[1] /* secondary */); 185 event_filter()->ShowSharedEdgeIndicator(root_windows[1] /* secondary */);
177 ASSERT_EQ(1U, mouse_warp_controller()->warp_regions_.size()); 186 ASSERT_EQ(1U, GetWarpRegionsCount());
178 EXPECT_EQ(gfx::Rect(0, -1, 360, 1), 187 EXPECT_EQ(gfx::Rect(0, 0, 360, 1), GetIndicatorBounds(display_0_id));
179 mouse_warp_controller()->warp_regions_[0]->a_indicator_bounds()); 188 EXPECT_EQ(gfx::Rect(0, -1, 360, 1), GetIndicatorBounds(display_1_id));
180 EXPECT_EQ(gfx::Rect(0, 0, 360, 1),
181 mouse_warp_controller()->warp_regions_[0]->b_indicator_bounds());
182 189
183 layout->placement_list[0].offset = 250; 190 layout->placement_list[0].offset = 250;
184 display_manager->SetLayoutForCurrentDisplays(layout->Copy()); 191 display_manager->SetLayoutForCurrentDisplays(layout->Copy());
185 event_filter()->ShowSharedEdgeIndicator(root_windows[0] /* primary */); 192 event_filter()->ShowSharedEdgeIndicator(root_windows[0] /* primary */);
186 ASSERT_EQ(1U, mouse_warp_controller()->warp_regions_.size()); 193 ASSERT_EQ(1U, GetWarpRegionsCount());
187 EXPECT_EQ(gfx::Rect(250, 0, 110, 1), 194 EXPECT_EQ(gfx::Rect(250, 0, 110, 1), GetIndicatorBounds(display_0_id));
188 mouse_warp_controller()->warp_regions_[0]->a_indicator_bounds()); 195 EXPECT_EQ(gfx::Rect(250, -1, 110, 1), GetIndicatorBounds(display_1_id));
189 EXPECT_EQ(gfx::Rect(250, -1, 110, 1), 196
190 mouse_warp_controller()->warp_regions_[0]->b_indicator_bounds());
191 event_filter()->ShowSharedEdgeIndicator(root_windows[1] /* secondary */); 197 event_filter()->ShowSharedEdgeIndicator(root_windows[1] /* secondary */);
192 ASSERT_EQ(1U, mouse_warp_controller()->warp_regions_.size()); 198 ASSERT_EQ(1U, GetWarpRegionsCount());
193 EXPECT_EQ(gfx::Rect(250, -1, 110, 1), 199 EXPECT_EQ(gfx::Rect(250, 0, 110, 1), GetIndicatorBounds(display_0_id));
194 mouse_warp_controller()->warp_regions_[0]->a_indicator_bounds()); 200 EXPECT_EQ(gfx::Rect(250, -1, 110, 1), GetIndicatorBounds(display_1_id));
195 EXPECT_EQ(gfx::Rect(250, 0, 110, 1),
196 mouse_warp_controller()->warp_regions_[0]->b_indicator_bounds());
197 201
198 layout->placement_list[0].position = DisplayPlacement::BOTTOM; 202 layout->placement_list[0].position = DisplayPlacement::BOTTOM;
199 layout->placement_list[0].offset = 0; 203 layout->placement_list[0].offset = 0;
200 display_manager->SetLayoutForCurrentDisplays(layout->Copy()); 204 display_manager->SetLayoutForCurrentDisplays(layout->Copy());
201 event_filter()->ShowSharedEdgeIndicator(root_windows[0] /* primary */); 205 event_filter()->ShowSharedEdgeIndicator(root_windows[0] /* primary */);
202 ASSERT_EQ(1U, mouse_warp_controller()->warp_regions_.size()); 206 ASSERT_EQ(1U, GetWarpRegionsCount());
203 EXPECT_EQ(gfx::Rect(0, 359, 360, 1), 207 EXPECT_EQ(gfx::Rect(0, 359, 360, 1), GetIndicatorBounds(display_0_id));
204 mouse_warp_controller()->warp_regions_[0]->a_indicator_bounds()); 208 EXPECT_EQ(gfx::Rect(0, 360, 360, 1), GetIndicatorBounds(display_1_id));
205 EXPECT_EQ(gfx::Rect(0, 360, 360, 1), 209
206 mouse_warp_controller()->warp_regions_[0]->b_indicator_bounds());
207 event_filter()->ShowSharedEdgeIndicator(root_windows[1] /* secondary */); 210 event_filter()->ShowSharedEdgeIndicator(root_windows[1] /* secondary */);
208 ASSERT_EQ(1U, mouse_warp_controller()->warp_regions_.size()); 211 ASSERT_EQ(1U, GetWarpRegionsCount());
209 EXPECT_EQ(gfx::Rect(0, 360, 360, 1), 212 EXPECT_EQ(gfx::Rect(0, 359, 360, 1), GetIndicatorBounds(display_0_id));
210 mouse_warp_controller()->warp_regions_[0]->a_indicator_bounds()); 213 EXPECT_EQ(gfx::Rect(0, 360, 360, 1), GetIndicatorBounds(display_1_id));
211 EXPECT_EQ(gfx::Rect(0, 359, 360, 1),
212 mouse_warp_controller()->warp_regions_[0]->b_indicator_bounds());
213 214
214 event_filter()->HideSharedEdgeIndicator(); 215 event_filter()->HideSharedEdgeIndicator();
215 } 216 }
216 217
217 // Verify indicators show up as expected with 3+ displays. 218 // Verify indicators show up as expected with 3+ displays.
218 TEST_F(ExtendedMouseWarpControllerTest, IndicatorBoundsTestThreeDisplays) { 219 TEST_F(ExtendedMouseWarpControllerTest, IndicatorBoundsTestThreeDisplays) {
219 if (!SupportsMultipleDisplays()) 220 if (!SupportsMultipleDisplays())
220 return; 221 return;
221 222
222 auto run_test = [this] { 223 UpdateDisplay("360x360,700x700,1000x1000");
223 aura::Window::Windows root_windows = Shell::GetAllRootWindows(); 224 aura::Window::Windows root_windows = Shell::GetAllRootWindows();
225 gfx::Screen* screen = gfx::Screen::GetScreen();
226 int64_t display_0_id = screen->GetDisplayNearestWindow(root_windows[0]).id();
227 int64_t display_1_id = screen->GetDisplayNearestWindow(root_windows[1]).id();
228 int64_t display_2_id = screen->GetDisplayNearestWindow(root_windows[2]).id();
224 229
225 // Left most display 230 // Drag from left most display
226 event_filter()->ShowSharedEdgeIndicator(root_windows[0]); 231 event_filter()->ShowSharedEdgeIndicator(root_windows[0]);
227 ASSERT_EQ(2U, mouse_warp_controller()->warp_regions_.size()); 232 ASSERT_EQ(2U, GetWarpRegionsCount());
228 EXPECT_EQ(gfx::Rect(359, 16, 1, 344), 233 const ExtendedMouseWarpController::WarpRegion* region_0 = GetWarpRegion(0);
229 mouse_warp_controller()->warp_regions_[0]->a_indicator_bounds()); 234 const ExtendedMouseWarpController::WarpRegion* region_1 = GetWarpRegion(1);
230 EXPECT_EQ(gfx::Rect(360, 0, 1, 360), 235 EXPECT_EQ(gfx::Rect(359, 16, 1, 344),
231 mouse_warp_controller()->warp_regions_[0]->b_indicator_bounds()); 236 region_1->GetIndicatorBoundsForTest(display_0_id));
232 EXPECT_EQ(gfx::Rect(1060, 16, 1, 684), 237 EXPECT_EQ(gfx::Rect(360, 0, 1, 360),
233 mouse_warp_controller()->warp_regions_[1]->a_indicator_bounds()); 238 region_1->GetIndicatorBoundsForTest(display_1_id));
234 EXPECT_EQ(gfx::Rect(1059, 0, 1, 700), 239 EXPECT_EQ(gfx::Rect(1059, 0, 1, 700),
235 mouse_warp_controller()->warp_regions_[1]->b_indicator_bounds()); 240 region_0->GetIndicatorBoundsForTest(display_1_id));
241 EXPECT_EQ(gfx::Rect(1060, 0, 1, 700),
242 region_0->GetIndicatorBoundsForTest(display_2_id));
236 243
237 // Middle display 244 // Drag from middle display
238 event_filter()->ShowSharedEdgeIndicator(root_windows[1]); 245 event_filter()->ShowSharedEdgeIndicator(root_windows[1]);
239 ASSERT_EQ(2U, mouse_warp_controller()->warp_regions_.size()); 246 ASSERT_EQ(2U, mouse_warp_controller()->warp_regions_.size());
240 EXPECT_EQ(gfx::Rect(360, 16, 1, 344), 247 region_0 = GetWarpRegion(0);
241 mouse_warp_controller()->warp_regions_[0]->a_indicator_bounds()); 248 region_1 = GetWarpRegion(1);
242 EXPECT_EQ(gfx::Rect(359, 0, 1, 360), 249 EXPECT_EQ(gfx::Rect(359, 0, 1, 360),
243 mouse_warp_controller()->warp_regions_[0]->b_indicator_bounds()); 250 region_1->GetIndicatorBoundsForTest(display_0_id));
244 EXPECT_EQ(gfx::Rect(1059, 16, 1, 684), 251 EXPECT_EQ(gfx::Rect(360, 16, 1, 344),
245 mouse_warp_controller()->warp_regions_[1]->a_indicator_bounds()); 252 region_1->GetIndicatorBoundsForTest(display_1_id));
246 EXPECT_EQ(gfx::Rect(1060, 0, 1, 700), 253 EXPECT_EQ(gfx::Rect(1059, 16, 1, 684),
247 mouse_warp_controller()->warp_regions_[1]->b_indicator_bounds()); 254 region_0->GetIndicatorBoundsForTest(display_1_id));
255 EXPECT_EQ(gfx::Rect(1060, 0, 1, 700),
256 region_0->GetIndicatorBoundsForTest(display_2_id));
248 257
249 // Right most display 258 // Right most display
250 event_filter()->ShowSharedEdgeIndicator(root_windows[2]); 259 event_filter()->ShowSharedEdgeIndicator(root_windows[2]);
251 ASSERT_EQ(2U, mouse_warp_controller()->warp_regions_.size()); 260 ASSERT_EQ(2U, mouse_warp_controller()->warp_regions_.size());
252 EXPECT_EQ(gfx::Rect(360, 16, 1, 344), 261 region_0 = GetWarpRegion(0);
253 mouse_warp_controller()->warp_regions_[0]->a_indicator_bounds()); 262 region_1 = GetWarpRegion(1);
254 EXPECT_EQ(gfx::Rect(359, 0, 1, 360), 263 EXPECT_EQ(gfx::Rect(359, 0, 1, 360),
255 mouse_warp_controller()->warp_regions_[0]->b_indicator_bounds()); 264 region_1->GetIndicatorBoundsForTest(display_0_id));
256 EXPECT_EQ(gfx::Rect(1060, 16, 1, 684), 265 EXPECT_EQ(gfx::Rect(360, 0, 1, 360),
257 mouse_warp_controller()->warp_regions_[1]->a_indicator_bounds()); 266 region_1->GetIndicatorBoundsForTest(display_1_id));
258 EXPECT_EQ(gfx::Rect(1059, 0, 1, 700), 267 EXPECT_EQ(gfx::Rect(1059, 0, 1, 700),
259 mouse_warp_controller()->warp_regions_[1]->b_indicator_bounds()); 268 region_0->GetIndicatorBoundsForTest(display_1_id));
269 EXPECT_EQ(gfx::Rect(1060, 16, 1, 684),
270 region_0->GetIndicatorBoundsForTest(display_2_id));
271 event_filter()->HideSharedEdgeIndicator();
272 // TODO(oshima): Add test cases primary swap.
273 }
260 274
261 event_filter()->HideSharedEdgeIndicator(); 275 TEST_F(ExtendedMouseWarpControllerTest,
262 }; 276 IndicatorBoundsTestThreeDisplaysWithLayout) {
277 if (!SupportsMultipleDisplays())
278 return;
279 UpdateDisplay("700x500,500x500,1000x1000");
280 aura::Window::Windows root_windows = Shell::GetAllRootWindows();
281 gfx::Screen* screen = gfx::Screen::GetScreen();
282 int64_t display_0_id = screen->GetDisplayNearestWindow(root_windows[0]).id();
283 int64_t display_1_id = screen->GetDisplayNearestWindow(root_windows[1]).id();
284 int64_t display_2_id = screen->GetDisplayNearestWindow(root_windows[2]).id();
263 285
264 UpdateDisplay("360x360,700x700,1000x1000"); 286 // Layout so that all displays touches togter like this:
265 run_test(); 287 // +-----+---+
288 // | 0 | 1 |
289 // +-+---+--++
290 // | 2 |
291 // +------+
292 ash::DisplayLayoutBuilder builder(display_0_id);
293 builder.AddDisplayPlacement(display_1_id, display_0_id,
294 ash::DisplayPlacement::RIGHT, 0);
295 builder.AddDisplayPlacement(display_2_id, display_0_id,
296 ash::DisplayPlacement::BOTTOM, 100);
266 297
267 // TODO(oshima): Add test cases with layouts, primary swap. 298 DisplayManager* display_manager = Shell::GetInstance()->display_manager();
299 display_manager->SetLayoutForCurrentDisplays(builder.Build());
300 ASSERT_EQ(3U, GetWarpRegionsCount());
301
302 // Drag from 0.
303 event_filter()->ShowSharedEdgeIndicator(root_windows[0]);
304 ASSERT_EQ(3U, GetWarpRegionsCount());
305 const ExtendedMouseWarpController::WarpRegion* region_0 = GetWarpRegion(0);
306 const ExtendedMouseWarpController::WarpRegion* region_1 = GetWarpRegion(1);
307 const ExtendedMouseWarpController::WarpRegion* region_2 = GetWarpRegion(2);
308 // between 2 and 0
309 EXPECT_EQ(gfx::Rect(100, 499, 600, 1),
310 region_0->GetIndicatorBoundsForTest(display_0_id));
311 EXPECT_EQ(gfx::Rect(100, 500, 600, 1),
312 region_0->GetIndicatorBoundsForTest(display_2_id));
313 // between 2 and 1
314 EXPECT_EQ(gfx::Rect(700, 499, 400, 1),
315 region_1->GetIndicatorBoundsForTest(display_1_id));
316 EXPECT_EQ(gfx::Rect(700, 500, 400, 1),
317 region_1->GetIndicatorBoundsForTest(display_2_id));
318 // between 1 and 0
319 EXPECT_EQ(gfx::Rect(699, 16, 1, 484),
320 region_2->GetIndicatorBoundsForTest(display_0_id));
321 EXPECT_EQ(gfx::Rect(700, 0, 1, 500),
322 region_2->GetIndicatorBoundsForTest(display_1_id));
323 event_filter()->HideSharedEdgeIndicator();
324 }
325
326 TEST_F(ExtendedMouseWarpControllerTest,
327 IndicatorBoundsTestThreeDisplaysWithLayout2) {
328 if (!SupportsMultipleDisplays())
329 return;
330 UpdateDisplay("700x500,500x500,1000x1000");
331 aura::Window::Windows root_windows = Shell::GetAllRootWindows();
332 gfx::Screen* screen = gfx::Screen::GetScreen();
333 int64_t display_0_id = screen->GetDisplayNearestWindow(root_windows[0]).id();
334 int64_t display_1_id = screen->GetDisplayNearestWindow(root_windows[1]).id();
335 int64_t display_2_id = screen->GetDisplayNearestWindow(root_windows[2]).id();
336
337 // Layout so that 0 and 1 displays are disconnected.
338 // +-----+ +---+
339 // | 0 | |1 |
340 // +-+---+-+++
341 // | 2 |
342 // +------+
343 ash::DisplayLayoutBuilder builder(display_0_id);
344 builder.AddDisplayPlacement(display_2_id, display_0_id,
345 ash::DisplayPlacement::BOTTOM, 100);
346 builder.AddDisplayPlacement(display_1_id, display_2_id,
347 ash::DisplayPlacement::TOP, 800);
348
349 DisplayManager* display_manager = Shell::GetInstance()->display_manager();
350 display_manager->SetLayoutForCurrentDisplays(builder.Build());
351 ASSERT_EQ(2U, GetWarpRegionsCount());
352
353 // Drag from 0.
354 event_filter()->ShowSharedEdgeIndicator(root_windows[0]);
355 ASSERT_EQ(2U, GetWarpRegionsCount());
356 const ExtendedMouseWarpController::WarpRegion* region_0 = GetWarpRegion(0);
357 const ExtendedMouseWarpController::WarpRegion* region_1 = GetWarpRegion(1);
358 // between 2 and 0
359 EXPECT_EQ(gfx::Rect(100, 499, 600, 1),
360 region_0->GetIndicatorBoundsForTest(display_0_id));
361 EXPECT_EQ(gfx::Rect(100, 500, 600, 1),
362 region_0->GetIndicatorBoundsForTest(display_2_id));
363 // between 2 and 1
364 EXPECT_EQ(gfx::Rect(900, 499, 200, 1),
365 region_1->GetIndicatorBoundsForTest(display_1_id));
366 EXPECT_EQ(gfx::Rect(900, 500, 200, 1),
367 region_1->GetIndicatorBoundsForTest(display_2_id));
368 event_filter()->HideSharedEdgeIndicator();
268 } 369 }
269 370
270 } // namespace ash 371 } // namespace ash
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698