OLD | NEW |
1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. | 1 // Copyright (c) 2012 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/wm/workspace/multi_window_resize_controller.h" | 5 #include "ash/wm/workspace/multi_window_resize_controller.h" |
6 | 6 |
7 #include "ash/ash_constants.h" | 7 #include "ash/ash_constants.h" |
8 #include "ash/frame/custom_frame_view_ash.h" | 8 #include "ash/frame/custom_frame_view_ash.h" |
9 #include "ash/shell.h" | 9 #include "ash/shell.h" |
10 #include "ash/test/ash_test_base.h" | 10 #include "ash/test/ash_test_base.h" |
(...skipping 104 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
115 | 115 |
116 MultiWindowResizeController* resize_controller_; | 116 MultiWindowResizeController* resize_controller_; |
117 | 117 |
118 private: | 118 private: |
119 DISALLOW_COPY_AND_ASSIGN(MultiWindowResizeControllerTest); | 119 DISALLOW_COPY_AND_ASSIGN(MultiWindowResizeControllerTest); |
120 }; | 120 }; |
121 | 121 |
122 // Assertions around moving mouse over 2 windows. | 122 // Assertions around moving mouse over 2 windows. |
123 TEST_F(MultiWindowResizeControllerTest, BasicTests) { | 123 TEST_F(MultiWindowResizeControllerTest, BasicTests) { |
124 aura::test::TestWindowDelegate delegate1; | 124 aura::test::TestWindowDelegate delegate1; |
125 scoped_ptr<aura::Window> w1( | 125 std::unique_ptr<aura::Window> w1( |
126 CreateTestWindow(&delegate1, gfx::Rect(0, 0, 100, 100))); | 126 CreateTestWindow(&delegate1, gfx::Rect(0, 0, 100, 100))); |
127 delegate1.set_window_component(HTRIGHT); | 127 delegate1.set_window_component(HTRIGHT); |
128 aura::test::TestWindowDelegate delegate2; | 128 aura::test::TestWindowDelegate delegate2; |
129 scoped_ptr<aura::Window> w2( | 129 std::unique_ptr<aura::Window> w2( |
130 CreateTestWindow(&delegate2, gfx::Rect(100, 0, 100, 100))); | 130 CreateTestWindow(&delegate2, gfx::Rect(100, 0, 100, 100))); |
131 delegate2.set_window_component(HTRIGHT); | 131 delegate2.set_window_component(HTRIGHT); |
132 ui::test::EventGenerator generator(w1->GetRootWindow()); | 132 ui::test::EventGenerator generator(w1->GetRootWindow()); |
133 generator.MoveMouseTo(w1->bounds().CenterPoint()); | 133 generator.MoveMouseTo(w1->bounds().CenterPoint()); |
134 EXPECT_TRUE(HasPendingShow()); | 134 EXPECT_TRUE(HasPendingShow()); |
135 EXPECT_TRUE(IsShowing()); | 135 EXPECT_TRUE(IsShowing()); |
136 | 136 |
137 // Force a show now. | 137 // Force a show now. |
138 ShowNow(); | 138 ShowNow(); |
139 EXPECT_FALSE(HasPendingShow()); | 139 EXPECT_FALSE(HasPendingShow()); |
140 EXPECT_TRUE(IsShowing()); | 140 EXPECT_TRUE(IsShowing()); |
141 | 141 |
142 EXPECT_FALSE(IsOverWindows(gfx::Point(200, 200))); | 142 EXPECT_FALSE(IsOverWindows(gfx::Point(200, 200))); |
143 | 143 |
144 // Have to explicitly invoke this as MouseWatcher listens for native events. | 144 // Have to explicitly invoke this as MouseWatcher listens for native events. |
145 resize_controller_->MouseMovedOutOfHost(); | 145 resize_controller_->MouseMovedOutOfHost(); |
146 EXPECT_FALSE(HasPendingShow()); | 146 EXPECT_FALSE(HasPendingShow()); |
147 EXPECT_FALSE(IsShowing()); | 147 EXPECT_FALSE(IsShowing()); |
148 } | 148 } |
149 | 149 |
150 // Test the behavior of IsOverWindows(). | 150 // Test the behavior of IsOverWindows(). |
151 TEST_F(MultiWindowResizeControllerTest, IsOverWindows) { | 151 TEST_F(MultiWindowResizeControllerTest, IsOverWindows) { |
152 // Create the following layout: | 152 // Create the following layout: |
153 // __________________ | 153 // __________________ |
154 // | w1 | w2 | | 154 // | w1 | w2 | |
155 // | |________| | 155 // | |________| |
156 // | | w3 | | 156 // | | w3 | |
157 // |________|________| | 157 // |________|________| |
158 scoped_ptr<views::Widget> w1(new views::Widget); | 158 std::unique_ptr<views::Widget> w1(new views::Widget); |
159 views::Widget::InitParams params1; | 159 views::Widget::InitParams params1; |
160 params1.delegate = new TestWidgetDelegate; | 160 params1.delegate = new TestWidgetDelegate; |
161 params1.ownership = views::Widget::InitParams::WIDGET_OWNS_NATIVE_WIDGET; | 161 params1.ownership = views::Widget::InitParams::WIDGET_OWNS_NATIVE_WIDGET; |
162 params1.bounds = gfx::Rect(100, 200); | 162 params1.bounds = gfx::Rect(100, 200); |
163 params1.context = CurrentContext(); | 163 params1.context = CurrentContext(); |
164 w1->Init(params1); | 164 w1->Init(params1); |
165 w1->Show(); | 165 w1->Show(); |
166 | 166 |
167 scoped_ptr<views::Widget> w2(new views::Widget); | 167 std::unique_ptr<views::Widget> w2(new views::Widget); |
168 views::Widget::InitParams params2; | 168 views::Widget::InitParams params2; |
169 params2.delegate = new TestWidgetDelegate; | 169 params2.delegate = new TestWidgetDelegate; |
170 params2.ownership = views::Widget::InitParams::WIDGET_OWNS_NATIVE_WIDGET; | 170 params2.ownership = views::Widget::InitParams::WIDGET_OWNS_NATIVE_WIDGET; |
171 params2.bounds = gfx::Rect(100, 0, 100, 100); | 171 params2.bounds = gfx::Rect(100, 0, 100, 100); |
172 params2.context = CurrentContext(); | 172 params2.context = CurrentContext(); |
173 w2->Init(params2); | 173 w2->Init(params2); |
174 w2->Show(); | 174 w2->Show(); |
175 | 175 |
176 scoped_ptr<views::Widget> w3(new views::Widget); | 176 std::unique_ptr<views::Widget> w3(new views::Widget); |
177 views::Widget::InitParams params3; | 177 views::Widget::InitParams params3; |
178 params3.delegate = new TestWidgetDelegate; | 178 params3.delegate = new TestWidgetDelegate; |
179 params3.ownership = views::Widget::InitParams::WIDGET_OWNS_NATIVE_WIDGET; | 179 params3.ownership = views::Widget::InitParams::WIDGET_OWNS_NATIVE_WIDGET; |
180 params3.bounds = gfx::Rect(100, 100, 100, 100); | 180 params3.bounds = gfx::Rect(100, 100, 100, 100); |
181 params3.context = CurrentContext(); | 181 params3.context = CurrentContext(); |
182 w3->Init(params3); | 182 w3->Init(params3); |
183 w3->Show(); | 183 w3->Show(); |
184 | 184 |
185 ui::test::EventGenerator& generator = GetEventGenerator(); | 185 ui::test::EventGenerator& generator = GetEventGenerator(); |
186 generator.MoveMouseTo(gfx::Point(100, 150)); | 186 generator.MoveMouseTo(gfx::Point(100, 150)); |
(...skipping 29 matching lines...) Expand all Loading... |
216 EXPECT_FALSE(IsOverWindows(gfx::Point(100 + kResizeOutsideBoundsSize, 150))); | 216 EXPECT_FALSE(IsOverWindows(gfx::Point(100 + kResizeOutsideBoundsSize, 150))); |
217 | 217 |
218 // Check that the multi-window resize handles eventually hide if the mouse | 218 // Check that the multi-window resize handles eventually hide if the mouse |
219 // moves between |w1| and |w2|. | 219 // moves between |w1| and |w2|. |
220 EXPECT_FALSE(IsOverWindows(gfx::Point(100, 50))); | 220 EXPECT_FALSE(IsOverWindows(gfx::Point(100, 50))); |
221 } | 221 } |
222 | 222 |
223 // Makes sure deleting a window hides. | 223 // Makes sure deleting a window hides. |
224 TEST_F(MultiWindowResizeControllerTest, DeleteWindow) { | 224 TEST_F(MultiWindowResizeControllerTest, DeleteWindow) { |
225 aura::test::TestWindowDelegate delegate1; | 225 aura::test::TestWindowDelegate delegate1; |
226 scoped_ptr<aura::Window> w1( | 226 std::unique_ptr<aura::Window> w1( |
227 CreateTestWindow(&delegate1, gfx::Rect(0, 0, 100, 100))); | 227 CreateTestWindow(&delegate1, gfx::Rect(0, 0, 100, 100))); |
228 delegate1.set_window_component(HTRIGHT); | 228 delegate1.set_window_component(HTRIGHT); |
229 aura::test::TestWindowDelegate delegate2; | 229 aura::test::TestWindowDelegate delegate2; |
230 scoped_ptr<aura::Window> w2( | 230 std::unique_ptr<aura::Window> w2( |
231 CreateTestWindow(&delegate2, gfx::Rect(100, 0, 100, 100))); | 231 CreateTestWindow(&delegate2, gfx::Rect(100, 0, 100, 100))); |
232 delegate2.set_window_component(HTRIGHT); | 232 delegate2.set_window_component(HTRIGHT); |
233 ui::test::EventGenerator generator(w1->GetRootWindow()); | 233 ui::test::EventGenerator generator(w1->GetRootWindow()); |
234 generator.MoveMouseTo(w1->bounds().CenterPoint()); | 234 generator.MoveMouseTo(w1->bounds().CenterPoint()); |
235 EXPECT_TRUE(HasPendingShow()); | 235 EXPECT_TRUE(HasPendingShow()); |
236 EXPECT_TRUE(IsShowing()); | 236 EXPECT_TRUE(IsShowing()); |
237 | 237 |
238 // Force a show now. | 238 // Force a show now. |
239 ShowNow(); | 239 ShowNow(); |
240 EXPECT_FALSE(HasPendingShow()); | 240 EXPECT_FALSE(HasPendingShow()); |
(...skipping 14 matching lines...) Expand all Loading... |
255 w2.reset(); | 255 w2.reset(); |
256 EXPECT_TRUE(resize_widget() == NULL); | 256 EXPECT_TRUE(resize_widget() == NULL); |
257 EXPECT_FALSE(HasPendingShow()); | 257 EXPECT_FALSE(HasPendingShow()); |
258 EXPECT_FALSE(IsShowing()); | 258 EXPECT_FALSE(IsShowing()); |
259 EXPECT_FALSE(HasTarget(w1.get())); | 259 EXPECT_FALSE(HasTarget(w1.get())); |
260 } | 260 } |
261 | 261 |
262 // Tests resizing. | 262 // Tests resizing. |
263 TEST_F(MultiWindowResizeControllerTest, Drag) { | 263 TEST_F(MultiWindowResizeControllerTest, Drag) { |
264 aura::test::TestWindowDelegate delegate1; | 264 aura::test::TestWindowDelegate delegate1; |
265 scoped_ptr<aura::Window> w1( | 265 std::unique_ptr<aura::Window> w1( |
266 CreateTestWindow(&delegate1, gfx::Rect(0, 0, 100, 100))); | 266 CreateTestWindow(&delegate1, gfx::Rect(0, 0, 100, 100))); |
267 delegate1.set_window_component(HTRIGHT); | 267 delegate1.set_window_component(HTRIGHT); |
268 aura::test::TestWindowDelegate delegate2; | 268 aura::test::TestWindowDelegate delegate2; |
269 scoped_ptr<aura::Window> w2( | 269 std::unique_ptr<aura::Window> w2( |
270 CreateTestWindow(&delegate2, gfx::Rect(100, 0, 100, 100))); | 270 CreateTestWindow(&delegate2, gfx::Rect(100, 0, 100, 100))); |
271 delegate2.set_window_component(HTRIGHT); | 271 delegate2.set_window_component(HTRIGHT); |
272 ui::test::EventGenerator generator(w1->GetRootWindow()); | 272 ui::test::EventGenerator generator(w1->GetRootWindow()); |
273 generator.MoveMouseTo(w1->bounds().CenterPoint()); | 273 generator.MoveMouseTo(w1->bounds().CenterPoint()); |
274 EXPECT_TRUE(HasPendingShow()); | 274 EXPECT_TRUE(HasPendingShow()); |
275 EXPECT_TRUE(IsShowing()); | 275 EXPECT_TRUE(IsShowing()); |
276 | 276 |
277 // Force a show now. | 277 // Force a show now. |
278 ShowNow(); | 278 ShowNow(); |
279 EXPECT_FALSE(HasPendingShow()); | 279 EXPECT_FALSE(HasPendingShow()); |
(...skipping 14 matching lines...) Expand all Loading... |
294 EXPECT_TRUE(resize_widget()); | 294 EXPECT_TRUE(resize_widget()); |
295 EXPECT_FALSE(HasPendingShow()); | 295 EXPECT_FALSE(HasPendingShow()); |
296 EXPECT_TRUE(IsShowing()); | 296 EXPECT_TRUE(IsShowing()); |
297 EXPECT_EQ("0,0 110x100", w1->bounds().ToString()); | 297 EXPECT_EQ("0,0 110x100", w1->bounds().ToString()); |
298 EXPECT_EQ("110,0 100x100", w2->bounds().ToString()); | 298 EXPECT_EQ("110,0 100x100", w2->bounds().ToString()); |
299 } | 299 } |
300 | 300 |
301 // Makes sure three windows are picked up. | 301 // Makes sure three windows are picked up. |
302 TEST_F(MultiWindowResizeControllerTest, Three) { | 302 TEST_F(MultiWindowResizeControllerTest, Three) { |
303 aura::test::TestWindowDelegate delegate1; | 303 aura::test::TestWindowDelegate delegate1; |
304 scoped_ptr<aura::Window> w1( | 304 std::unique_ptr<aura::Window> w1( |
305 CreateTestWindow(&delegate1, gfx::Rect(0, 0, 100, 100))); | 305 CreateTestWindow(&delegate1, gfx::Rect(0, 0, 100, 100))); |
306 delegate1.set_window_component(HTRIGHT); | 306 delegate1.set_window_component(HTRIGHT); |
307 aura::test::TestWindowDelegate delegate2; | 307 aura::test::TestWindowDelegate delegate2; |
308 scoped_ptr<aura::Window> w2( | 308 std::unique_ptr<aura::Window> w2( |
309 CreateTestWindow(&delegate2, gfx::Rect(100, 0, 100, 100))); | 309 CreateTestWindow(&delegate2, gfx::Rect(100, 0, 100, 100))); |
310 delegate2.set_window_component(HTRIGHT); | 310 delegate2.set_window_component(HTRIGHT); |
311 aura::test::TestWindowDelegate delegate3; | 311 aura::test::TestWindowDelegate delegate3; |
312 scoped_ptr<aura::Window> w3( | 312 std::unique_ptr<aura::Window> w3( |
313 CreateTestWindow(&delegate3, gfx::Rect(200, 0, 100, 100))); | 313 CreateTestWindow(&delegate3, gfx::Rect(200, 0, 100, 100))); |
314 delegate3.set_window_component(HTRIGHT); | 314 delegate3.set_window_component(HTRIGHT); |
315 | 315 |
316 ui::test::EventGenerator generator(w1->GetRootWindow()); | 316 ui::test::EventGenerator generator(w1->GetRootWindow()); |
317 generator.MoveMouseTo(w1->bounds().CenterPoint()); | 317 generator.MoveMouseTo(w1->bounds().CenterPoint()); |
318 EXPECT_TRUE(HasPendingShow()); | 318 EXPECT_TRUE(HasPendingShow()); |
319 EXPECT_TRUE(IsShowing()); | 319 EXPECT_TRUE(IsShowing()); |
320 EXPECT_FALSE(HasTarget(w3.get())); | 320 EXPECT_FALSE(HasTarget(w3.get())); |
321 | 321 |
322 ShowNow(); | 322 ShowNow(); |
(...skipping 11 matching lines...) Expand all Loading... |
334 // Release the mouse. The resizer should still be visible and a subsequent | 334 // Release the mouse. The resizer should still be visible and a subsequent |
335 // press should not trigger a DCHECK. | 335 // press should not trigger a DCHECK. |
336 generator.ReleaseLeftButton(); | 336 generator.ReleaseLeftButton(); |
337 EXPECT_TRUE(IsShowing()); | 337 EXPECT_TRUE(IsShowing()); |
338 generator.PressLeftButton(); | 338 generator.PressLeftButton(); |
339 } | 339 } |
340 | 340 |
341 // Tests that clicking outside of the resize handle dismisses it. | 341 // Tests that clicking outside of the resize handle dismisses it. |
342 TEST_F(MultiWindowResizeControllerTest, ClickOutside) { | 342 TEST_F(MultiWindowResizeControllerTest, ClickOutside) { |
343 aura::test::TestWindowDelegate delegate1; | 343 aura::test::TestWindowDelegate delegate1; |
344 scoped_ptr<aura::Window> w1( | 344 std::unique_ptr<aura::Window> w1( |
345 CreateTestWindow(&delegate1, gfx::Rect(0, 0, 100, 100))); | 345 CreateTestWindow(&delegate1, gfx::Rect(0, 0, 100, 100))); |
346 delegate1.set_window_component(HTRIGHT); | 346 delegate1.set_window_component(HTRIGHT); |
347 aura::test::TestWindowDelegate delegate2; | 347 aura::test::TestWindowDelegate delegate2; |
348 scoped_ptr<aura::Window> w2( | 348 std::unique_ptr<aura::Window> w2( |
349 CreateTestWindow(&delegate2, gfx::Rect(100, 0, 100, 100))); | 349 CreateTestWindow(&delegate2, gfx::Rect(100, 0, 100, 100))); |
350 delegate2.set_window_component(HTLEFT); | 350 delegate2.set_window_component(HTLEFT); |
351 | 351 |
352 ui::test::EventGenerator& generator(GetEventGenerator()); | 352 ui::test::EventGenerator& generator(GetEventGenerator()); |
353 gfx::Point w1_center_in_screen = w1->GetBoundsInScreen().CenterPoint(); | 353 gfx::Point w1_center_in_screen = w1->GetBoundsInScreen().CenterPoint(); |
354 generator.MoveMouseTo(w1_center_in_screen); | 354 generator.MoveMouseTo(w1_center_in_screen); |
355 EXPECT_TRUE(HasPendingShow()); | 355 EXPECT_TRUE(HasPendingShow()); |
356 EXPECT_TRUE(IsShowing()); | 356 EXPECT_TRUE(IsShowing()); |
357 ShowNow(); | 357 ShowNow(); |
358 EXPECT_TRUE(IsShowing()); | 358 EXPECT_TRUE(IsShowing()); |
359 | 359 |
360 gfx::Rect resize_widget_bounds_in_screen = | 360 gfx::Rect resize_widget_bounds_in_screen = |
361 resize_widget()->GetWindowBoundsInScreen(); | 361 resize_widget()->GetWindowBoundsInScreen(); |
362 | 362 |
363 // Clicking on the resize handle should not do anything. | 363 // Clicking on the resize handle should not do anything. |
364 generator.MoveMouseTo(resize_widget_bounds_in_screen.CenterPoint()); | 364 generator.MoveMouseTo(resize_widget_bounds_in_screen.CenterPoint()); |
365 generator.ClickLeftButton(); | 365 generator.ClickLeftButton(); |
366 EXPECT_TRUE(IsShowing()); | 366 EXPECT_TRUE(IsShowing()); |
367 | 367 |
368 // Clicking outside the resize handle should immediately hide the resize | 368 // Clicking outside the resize handle should immediately hide the resize |
369 // handle. | 369 // handle. |
370 EXPECT_FALSE(resize_widget_bounds_in_screen.Contains(w1_center_in_screen)); | 370 EXPECT_FALSE(resize_widget_bounds_in_screen.Contains(w1_center_in_screen)); |
371 generator.MoveMouseTo(w1_center_in_screen); | 371 generator.MoveMouseTo(w1_center_in_screen); |
372 generator.ClickLeftButton(); | 372 generator.ClickLeftButton(); |
373 EXPECT_FALSE(IsShowing()); | 373 EXPECT_FALSE(IsShowing()); |
374 } | 374 } |
375 | 375 |
376 } // namespace ash | 376 } // namespace ash |
OLD | NEW |