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/workspace_window_resizer.h" | 5 #include "ash/wm/workspace/workspace_window_resizer.h" |
6 | 6 |
7 #include "ash/screen_ash.h" | 7 #include "ash/screen_ash.h" |
8 #include "ash/shell.h" | 8 #include "ash/shell.h" |
9 #include "ash/test/ash_test_base.h" | 9 #include "ash/test/ash_test_base.h" |
10 #include "ash/wm/property_util.h" | 10 #include "ash/wm/property_util.h" |
| 11 #include "ash/wm/workspace_controller.h" |
11 #include "base/string_number_conversions.h" | 12 #include "base/string_number_conversions.h" |
12 #include "ui/aura/root_window.h" | 13 #include "ui/aura/root_window.h" |
13 #include "ui/aura/test/test_window_delegate.h" | 14 #include "ui/aura/test/test_window_delegate.h" |
14 #include "ui/base/hit_test.h" | 15 #include "ui/base/hit_test.h" |
15 #include "ui/gfx/insets.h" | 16 #include "ui/gfx/insets.h" |
16 | 17 |
17 namespace ash { | 18 namespace ash { |
18 namespace internal { | 19 namespace internal { |
19 namespace { | 20 namespace { |
20 | 21 |
(...skipping 69 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
90 if (*i == window_.get() || *i == window2_.get() || *i == window3_.get()) { | 91 if (*i == window_.get() || *i == window2_.get() || *i == window3_.get()) { |
91 if (!result.empty()) | 92 if (!result.empty()) |
92 result += " "; | 93 result += " "; |
93 result += base::IntToString((*i)->id()); | 94 result += base::IntToString((*i)->id()); |
94 } | 95 } |
95 } | 96 } |
96 return result; | 97 return result; |
97 } | 98 } |
98 | 99 |
99 protected: | 100 protected: |
| 101 void SetGridSize(int grid_size) { |
| 102 Shell::TestApi shell_test(Shell::GetInstance()); |
| 103 shell_test.workspace_controller()->SetGridSize(grid_size); |
| 104 } |
100 gfx::Point CalculateDragPoint(const WorkspaceWindowResizer& resizer, | 105 gfx::Point CalculateDragPoint(const WorkspaceWindowResizer& resizer, |
101 int delta_x, | 106 int delta_x, |
102 int delta_y) const { | 107 int delta_y) const { |
103 gfx::Point location = resizer.initial_location_in_parent(); | 108 gfx::Point location = resizer.initial_location_in_parent(); |
104 location.set_x(location.x() + delta_x); | 109 location.set_x(location.x() + delta_x); |
105 location.set_y(location.y() + delta_y); | 110 location.set_y(location.y() + delta_y); |
106 return location; | 111 return location; |
107 } | 112 } |
108 | 113 |
109 std::vector<aura::Window*> empty_windows() const { | 114 std::vector<aura::Window*> empty_windows() const { |
(...skipping 18 matching lines...) Expand all Loading... |
128 #if !defined(OS_WIN) | 133 #if !defined(OS_WIN) |
129 | 134 |
130 // Assertions around attached window resize dragging from the right with 2 | 135 // Assertions around attached window resize dragging from the right with 2 |
131 // windows. | 136 // windows. |
132 TEST_F(WorkspaceWindowResizerTest, AttachedResize_RIGHT_2) { | 137 TEST_F(WorkspaceWindowResizerTest, AttachedResize_RIGHT_2) { |
133 window_->SetBounds(gfx::Rect(0, 300, 400, 300)); | 138 window_->SetBounds(gfx::Rect(0, 300, 400, 300)); |
134 window2_->SetBounds(gfx::Rect(400, 200, 100, 200)); | 139 window2_->SetBounds(gfx::Rect(400, 200, 100, 200)); |
135 | 140 |
136 std::vector<aura::Window*> windows; | 141 std::vector<aura::Window*> windows; |
137 windows.push_back(window2_.get()); | 142 windows.push_back(window2_.get()); |
| 143 SetGridSize(0); |
138 scoped_ptr<WorkspaceWindowResizer> resizer(WorkspaceWindowResizer::Create( | 144 scoped_ptr<WorkspaceWindowResizer> resizer(WorkspaceWindowResizer::Create( |
139 window_.get(), gfx::Point(), HTRIGHT, 0, windows)); | 145 window_.get(), gfx::Point(), HTRIGHT, windows)); |
140 ASSERT_TRUE(resizer.get()); | 146 ASSERT_TRUE(resizer.get()); |
141 // Move it 100 to the right, which should expand w1 and push w2. | 147 // Move it 100 to the right, which should expand w1 and push w2. |
142 resizer->Drag(CalculateDragPoint(*resizer, 100, 10)); | 148 resizer->Drag(CalculateDragPoint(*resizer, 100, 10), 0); |
143 EXPECT_EQ("0,300 500x300", window_->bounds().ToString()); | 149 EXPECT_EQ("0,300 500x300", window_->bounds().ToString()); |
144 EXPECT_EQ("500,200 100x200", window2_->bounds().ToString()); | 150 EXPECT_EQ("500,200 100x200", window2_->bounds().ToString()); |
145 | 151 |
146 // Push off the screen, w2 should be resized to its min. | 152 // Push off the screen, w2 should be resized to its min. |
147 delegate2_.set_min_size(gfx::Size(20, 20)); | 153 delegate2_.set_min_size(gfx::Size(20, 20)); |
148 resizer->Drag(CalculateDragPoint(*resizer, 800, 20)); | 154 resizer->Drag(CalculateDragPoint(*resizer, 800, 20), 0); |
149 EXPECT_EQ("0,300 780x300", window_->bounds().ToString()); | 155 EXPECT_EQ("0,300 780x300", window_->bounds().ToString()); |
150 EXPECT_EQ("780,200 20x200", window2_->bounds().ToString()); | 156 EXPECT_EQ("780,200 20x200", window2_->bounds().ToString()); |
151 | 157 |
152 // Move back to 100 and verify w2 gets its original size. | 158 // Move back to 100 and verify w2 gets its original size. |
153 resizer->Drag(CalculateDragPoint(*resizer, 100, 10)); | 159 resizer->Drag(CalculateDragPoint(*resizer, 100, 10), 0); |
154 EXPECT_EQ("0,300 500x300", window_->bounds().ToString()); | 160 EXPECT_EQ("0,300 500x300", window_->bounds().ToString()); |
155 EXPECT_EQ("500,200 100x200", window2_->bounds().ToString()); | 161 EXPECT_EQ("500,200 100x200", window2_->bounds().ToString()); |
156 | 162 |
157 // Revert and make sure everything moves back. | 163 // Revert and make sure everything moves back. |
158 resizer->Drag(CalculateDragPoint(*resizer, 800, 20)); | 164 resizer->Drag(CalculateDragPoint(*resizer, 800, 20), 0); |
159 resizer->RevertDrag(); | 165 resizer->RevertDrag(); |
160 EXPECT_EQ("0,300 400x300", window_->bounds().ToString()); | 166 EXPECT_EQ("0,300 400x300", window_->bounds().ToString()); |
161 EXPECT_EQ("400,200 100x200", window2_->bounds().ToString()); | 167 EXPECT_EQ("400,200 100x200", window2_->bounds().ToString()); |
162 } | 168 } |
163 | 169 |
164 // Assertions around collapsing and expanding. | 170 // Assertions around collapsing and expanding. |
165 TEST_F(WorkspaceWindowResizerTest, AttachedResize_RIGHT_Compress) { | 171 TEST_F(WorkspaceWindowResizerTest, AttachedResize_RIGHT_Compress) { |
166 window_->SetBounds(gfx::Rect( 0, 300, 400, 300)); | 172 window_->SetBounds(gfx::Rect( 0, 300, 400, 300)); |
167 window2_->SetBounds(gfx::Rect(400, 200, 100, 200)); | 173 window2_->SetBounds(gfx::Rect(400, 200, 100, 200)); |
168 | 174 |
169 std::vector<aura::Window*> windows; | 175 std::vector<aura::Window*> windows; |
170 windows.push_back(window2_.get()); | 176 windows.push_back(window2_.get()); |
| 177 SetGridSize(0); |
171 scoped_ptr<WorkspaceWindowResizer> resizer(WorkspaceWindowResizer::Create( | 178 scoped_ptr<WorkspaceWindowResizer> resizer(WorkspaceWindowResizer::Create( |
172 window_.get(), gfx::Point(), HTRIGHT, 0, windows)); | 179 window_.get(), gfx::Point(), HTRIGHT, windows)); |
173 ASSERT_TRUE(resizer.get()); | 180 ASSERT_TRUE(resizer.get()); |
174 // Move it 100 to the left, which should expand w2 and collapse w1. | 181 // Move it 100 to the left, which should expand w2 and collapse w1. |
175 resizer->Drag(CalculateDragPoint(*resizer, -100, 10)); | 182 resizer->Drag(CalculateDragPoint(*resizer, -100, 10), 0); |
176 EXPECT_EQ("0,300 300x300", window_->bounds().ToString()); | 183 EXPECT_EQ("0,300 300x300", window_->bounds().ToString()); |
177 EXPECT_EQ("300,200 200x200", window2_->bounds().ToString()); | 184 EXPECT_EQ("300,200 200x200", window2_->bounds().ToString()); |
178 | 185 |
179 // Collapse all the way to w1's min. | 186 // Collapse all the way to w1's min. |
180 delegate_.set_min_size(gfx::Size(20, 20)); | 187 delegate_.set_min_size(gfx::Size(20, 20)); |
181 resizer->Drag(CalculateDragPoint(*resizer, -800, 20)); | 188 resizer->Drag(CalculateDragPoint(*resizer, -800, 20), 0); |
182 EXPECT_EQ("0,300 20x300", window_->bounds().ToString()); | 189 EXPECT_EQ("0,300 20x300", window_->bounds().ToString()); |
183 EXPECT_EQ("20,200 480x200", window2_->bounds().ToString()); | 190 EXPECT_EQ("20,200 480x200", window2_->bounds().ToString()); |
184 | 191 |
185 // Move 100 to the left. | 192 // Move 100 to the left. |
186 resizer->Drag(CalculateDragPoint(*resizer, 100, 10)); | 193 resizer->Drag(CalculateDragPoint(*resizer, 100, 10), 0); |
187 EXPECT_EQ("0,300 500x300", window_->bounds().ToString()); | 194 EXPECT_EQ("0,300 500x300", window_->bounds().ToString()); |
188 EXPECT_EQ("500,200 100x200", window2_->bounds().ToString()); | 195 EXPECT_EQ("500,200 100x200", window2_->bounds().ToString()); |
189 | 196 |
190 // Back to -100. | 197 // Back to -100. |
191 resizer->Drag(CalculateDragPoint(*resizer, -100, 20)); | 198 resizer->Drag(CalculateDragPoint(*resizer, -100, 20), 0); |
192 EXPECT_EQ("0,300 300x300", window_->bounds().ToString()); | 199 EXPECT_EQ("0,300 300x300", window_->bounds().ToString()); |
193 EXPECT_EQ("300,200 200x200", window2_->bounds().ToString()); | 200 EXPECT_EQ("300,200 200x200", window2_->bounds().ToString()); |
194 } | 201 } |
195 | 202 |
196 // Assertions around attached window resize dragging from the right with 3 | 203 // Assertions around attached window resize dragging from the right with 3 |
197 // windows. | 204 // windows. |
198 TEST_F(WorkspaceWindowResizerTest, AttachedResize_RIGHT_3) { | 205 TEST_F(WorkspaceWindowResizerTest, AttachedResize_RIGHT_3) { |
199 window_->SetBounds(gfx::Rect( 100, 300, 200, 300)); | 206 window_->SetBounds(gfx::Rect( 100, 300, 200, 300)); |
200 window2_->SetBounds(gfx::Rect(300, 300, 150, 200)); | 207 window2_->SetBounds(gfx::Rect(300, 300, 150, 200)); |
201 window3_->SetBounds(gfx::Rect(450, 300, 100, 200)); | 208 window3_->SetBounds(gfx::Rect(450, 300, 100, 200)); |
202 delegate2_.set_min_size(gfx::Size(52, 50)); | 209 delegate2_.set_min_size(gfx::Size(52, 50)); |
203 delegate3_.set_min_size(gfx::Size(38, 50)); | 210 delegate3_.set_min_size(gfx::Size(38, 50)); |
204 | 211 |
205 std::vector<aura::Window*> windows; | 212 std::vector<aura::Window*> windows; |
206 windows.push_back(window2_.get()); | 213 windows.push_back(window2_.get()); |
207 windows.push_back(window3_.get()); | 214 windows.push_back(window3_.get()); |
| 215 SetGridSize(10); |
208 scoped_ptr<WorkspaceWindowResizer> resizer(WorkspaceWindowResizer::Create( | 216 scoped_ptr<WorkspaceWindowResizer> resizer(WorkspaceWindowResizer::Create( |
209 window_.get(), gfx::Point(), HTRIGHT, 10, windows)); | 217 window_.get(), gfx::Point(), HTRIGHT, windows)); |
210 ASSERT_TRUE(resizer.get()); | 218 ASSERT_TRUE(resizer.get()); |
211 // Move it 100 to the right, which should expand w1 and push w2 and w3. | 219 // Move it 100 to the right, which should expand w1 and push w2 and w3. |
212 resizer->Drag(CalculateDragPoint(*resizer, 100, -10)); | 220 resizer->Drag(CalculateDragPoint(*resizer, 100, -10), 0); |
213 EXPECT_EQ("100,300 300x300", window_->bounds().ToString()); | 221 EXPECT_EQ("100,300 300x300", window_->bounds().ToString()); |
214 EXPECT_EQ("400,300 150x200", window2_->bounds().ToString()); | 222 EXPECT_EQ("400,300 150x200", window2_->bounds().ToString()); |
215 EXPECT_EQ("550,300 100x200", window3_->bounds().ToString()); | 223 EXPECT_EQ("550,300 100x200", window3_->bounds().ToString()); |
216 | 224 |
217 // Move it 296, which should now snap to grid and things should compress. | 225 // Move it 296, which should now snap to grid and things should compress. |
218 resizer->Drag(CalculateDragPoint(*resizer, 296, -10)); | 226 resizer->Drag(CalculateDragPoint(*resizer, 296, -10), 0); |
219 EXPECT_EQ("100,300 500x300", window_->bounds().ToString()); | 227 EXPECT_EQ("100,300 500x300", window_->bounds().ToString()); |
220 EXPECT_EQ("600,300 120x200", window2_->bounds().ToString()); | 228 EXPECT_EQ("600,300 120x200", window2_->bounds().ToString()); |
221 EXPECT_EQ("720,300 80x200", window3_->bounds().ToString()); | 229 EXPECT_EQ("720,300 80x200", window3_->bounds().ToString()); |
222 | 230 |
223 // Move it so much everything ends up at its min. | 231 // Move it so much everything ends up at its min. |
224 resizer->Drag(CalculateDragPoint(*resizer, 798, 50)); | 232 resizer->Drag(CalculateDragPoint(*resizer, 798, 50), 0); |
225 EXPECT_EQ("100,300 600x300", window_->bounds().ToString()); | 233 EXPECT_EQ("100,300 600x300", window_->bounds().ToString()); |
226 EXPECT_EQ("700,300 60x200", window2_->bounds().ToString()); | 234 EXPECT_EQ("700,300 60x200", window2_->bounds().ToString()); |
227 EXPECT_EQ("760,300 40x200", window3_->bounds().ToString()); | 235 EXPECT_EQ("760,300 40x200", window3_->bounds().ToString()); |
228 | 236 |
229 // Revert and make sure everything moves back. | 237 // Revert and make sure everything moves back. |
230 resizer->RevertDrag(); | 238 resizer->RevertDrag(); |
231 EXPECT_EQ("100,300 200x300", window_->bounds().ToString()); | 239 EXPECT_EQ("100,300 200x300", window_->bounds().ToString()); |
232 EXPECT_EQ("300,300 150x200", window2_->bounds().ToString()); | 240 EXPECT_EQ("300,300 150x200", window2_->bounds().ToString()); |
233 EXPECT_EQ("450,300 100x200", window3_->bounds().ToString()); | 241 EXPECT_EQ("450,300 100x200", window3_->bounds().ToString()); |
234 } | 242 } |
235 | 243 |
236 // Assertions around attached window resizing (collapsing and expanding) with | 244 // Assertions around attached window resizing (collapsing and expanding) with |
237 // 3 windows. | 245 // 3 windows. |
238 TEST_F(WorkspaceWindowResizerTest, AttachedResize_RIGHT_3_Compress) { | 246 TEST_F(WorkspaceWindowResizerTest, AttachedResize_RIGHT_3_Compress) { |
239 window_->SetBounds(gfx::Rect( 100, 300, 200, 300)); | 247 window_->SetBounds(gfx::Rect( 100, 300, 200, 300)); |
240 window2_->SetBounds(gfx::Rect(300, 300, 200, 200)); | 248 window2_->SetBounds(gfx::Rect(300, 300, 200, 200)); |
241 window3_->SetBounds(gfx::Rect(450, 300, 100, 200)); | 249 window3_->SetBounds(gfx::Rect(450, 300, 100, 200)); |
242 delegate2_.set_min_size(gfx::Size(52, 50)); | 250 delegate2_.set_min_size(gfx::Size(52, 50)); |
243 delegate3_.set_min_size(gfx::Size(38, 50)); | 251 delegate3_.set_min_size(gfx::Size(38, 50)); |
244 | 252 |
245 std::vector<aura::Window*> windows; | 253 std::vector<aura::Window*> windows; |
246 windows.push_back(window2_.get()); | 254 windows.push_back(window2_.get()); |
247 windows.push_back(window3_.get()); | 255 windows.push_back(window3_.get()); |
| 256 SetGridSize(10); |
248 scoped_ptr<WorkspaceWindowResizer> resizer(WorkspaceWindowResizer::Create( | 257 scoped_ptr<WorkspaceWindowResizer> resizer(WorkspaceWindowResizer::Create( |
249 window_.get(), gfx::Point(), HTRIGHT, 10, windows)); | 258 window_.get(), gfx::Point(), HTRIGHT, windows)); |
250 ASSERT_TRUE(resizer.get()); | 259 ASSERT_TRUE(resizer.get()); |
251 // Move it -100 to the right, which should collapse w1 and expand w2 and w3. | 260 // Move it -100 to the right, which should collapse w1 and expand w2 and w3. |
252 resizer->Drag(CalculateDragPoint(*resizer, -100, -10)); | 261 resizer->Drag(CalculateDragPoint(*resizer, -100, -10), 0); |
253 EXPECT_EQ("100,300 100x300", window_->bounds().ToString()); | 262 EXPECT_EQ("100,300 100x300", window_->bounds().ToString()); |
254 EXPECT_EQ("200,300 270x200", window2_->bounds().ToString()); | 263 EXPECT_EQ("200,300 270x200", window2_->bounds().ToString()); |
255 EXPECT_EQ("470,300 130x200", window3_->bounds().ToString()); | 264 EXPECT_EQ("470,300 130x200", window3_->bounds().ToString()); |
256 | 265 |
257 // Move it 100 to the right. | 266 // Move it 100 to the right. |
258 resizer->Drag(CalculateDragPoint(*resizer, 100, -10)); | 267 resizer->Drag(CalculateDragPoint(*resizer, 100, -10), 0); |
259 EXPECT_EQ("100,300 300x300", window_->bounds().ToString()); | 268 EXPECT_EQ("100,300 300x300", window_->bounds().ToString()); |
260 EXPECT_EQ("400,300 200x200", window2_->bounds().ToString()); | 269 EXPECT_EQ("400,300 200x200", window2_->bounds().ToString()); |
261 EXPECT_EQ("600,300 100x200", window3_->bounds().ToString()); | 270 EXPECT_EQ("600,300 100x200", window3_->bounds().ToString()); |
262 | 271 |
263 // 100 to the left again. | 272 // 100 to the left again. |
264 resizer->Drag(CalculateDragPoint(*resizer, -100, -10)); | 273 resizer->Drag(CalculateDragPoint(*resizer, -100, -10), 0); |
265 EXPECT_EQ("100,300 100x300", window_->bounds().ToString()); | 274 EXPECT_EQ("100,300 100x300", window_->bounds().ToString()); |
266 EXPECT_EQ("200,300 270x200", window2_->bounds().ToString()); | 275 EXPECT_EQ("200,300 270x200", window2_->bounds().ToString()); |
267 EXPECT_EQ("470,300 130x200", window3_->bounds().ToString()); | 276 EXPECT_EQ("470,300 130x200", window3_->bounds().ToString()); |
268 } | 277 } |
269 | 278 |
270 // Assertions around collapsing and expanding from the bottom. | 279 // Assertions around collapsing and expanding from the bottom. |
271 TEST_F(WorkspaceWindowResizerTest, AttachedResize_BOTTOM_Compress) { | 280 TEST_F(WorkspaceWindowResizerTest, AttachedResize_BOTTOM_Compress) { |
272 window_->SetBounds(gfx::Rect( 0, 100, 400, 300)); | 281 window_->SetBounds(gfx::Rect( 0, 100, 400, 300)); |
273 window2_->SetBounds(gfx::Rect(400, 400, 100, 200)); | 282 window2_->SetBounds(gfx::Rect(400, 400, 100, 200)); |
274 | 283 |
275 std::vector<aura::Window*> windows; | 284 std::vector<aura::Window*> windows; |
276 windows.push_back(window2_.get()); | 285 windows.push_back(window2_.get()); |
| 286 SetGridSize(0); |
277 scoped_ptr<WorkspaceWindowResizer> resizer(WorkspaceWindowResizer::Create( | 287 scoped_ptr<WorkspaceWindowResizer> resizer(WorkspaceWindowResizer::Create( |
278 window_.get(), gfx::Point(), HTBOTTOM, 0, windows)); | 288 window_.get(), gfx::Point(), HTBOTTOM, windows)); |
279 ASSERT_TRUE(resizer.get()); | 289 ASSERT_TRUE(resizer.get()); |
280 // Move it up 100, which should expand w2 and collapse w1. | 290 // Move it up 100, which should expand w2 and collapse w1. |
281 resizer->Drag(CalculateDragPoint(*resizer, 10, -100)); | 291 resizer->Drag(CalculateDragPoint(*resizer, 10, -100), 0); |
282 EXPECT_EQ("0,100 400x200", window_->bounds().ToString()); | 292 EXPECT_EQ("0,100 400x200", window_->bounds().ToString()); |
283 EXPECT_EQ("400,300 100x300", window2_->bounds().ToString()); | 293 EXPECT_EQ("400,300 100x300", window2_->bounds().ToString()); |
284 | 294 |
285 // Collapse all the way to w1's min. | 295 // Collapse all the way to w1's min. |
286 delegate_.set_min_size(gfx::Size(20, 20)); | 296 delegate_.set_min_size(gfx::Size(20, 20)); |
287 resizer->Drag(CalculateDragPoint(*resizer, 20, -800)); | 297 resizer->Drag(CalculateDragPoint(*resizer, 20, -800), 0); |
288 EXPECT_EQ("0,100 400x20", window_->bounds().ToString()); | 298 EXPECT_EQ("0,100 400x20", window_->bounds().ToString()); |
289 EXPECT_EQ("400,120 100x480", window2_->bounds().ToString()); | 299 EXPECT_EQ("400,120 100x480", window2_->bounds().ToString()); |
290 | 300 |
291 // Move 100 down. | 301 // Move 100 down. |
292 resizer->Drag(CalculateDragPoint(*resizer, 10, 100)); | 302 resizer->Drag(CalculateDragPoint(*resizer, 10, 100), 0); |
293 EXPECT_EQ("0,100 400x400", window_->bounds().ToString()); | 303 EXPECT_EQ("0,100 400x400", window_->bounds().ToString()); |
294 EXPECT_EQ("400,500 100x100", window2_->bounds().ToString()); | 304 EXPECT_EQ("400,500 100x100", window2_->bounds().ToString()); |
295 | 305 |
296 // Back to -100. | 306 // Back to -100. |
297 resizer->Drag(CalculateDragPoint(*resizer, 20, -100)); | 307 resizer->Drag(CalculateDragPoint(*resizer, 20, -100), 0); |
298 EXPECT_EQ("0,100 400x200", window_->bounds().ToString()); | 308 EXPECT_EQ("0,100 400x200", window_->bounds().ToString()); |
299 EXPECT_EQ("400,300 100x300", window2_->bounds().ToString()); | 309 EXPECT_EQ("400,300 100x300", window2_->bounds().ToString()); |
300 } | 310 } |
301 | 311 |
302 // Assertions around attached window resize dragging from the bottom with 2 | 312 // Assertions around attached window resize dragging from the bottom with 2 |
303 // windows. | 313 // windows. |
304 TEST_F(WorkspaceWindowResizerTest, AttachedResize_BOTTOM_2) { | 314 TEST_F(WorkspaceWindowResizerTest, AttachedResize_BOTTOM_2) { |
305 window_->SetBounds(gfx::Rect( 0, 50, 400, 200)); | 315 window_->SetBounds(gfx::Rect( 0, 50, 400, 200)); |
306 window2_->SetBounds(gfx::Rect(0, 250, 200, 100)); | 316 window2_->SetBounds(gfx::Rect(0, 250, 200, 100)); |
307 | 317 |
308 std::vector<aura::Window*> windows; | 318 std::vector<aura::Window*> windows; |
309 windows.push_back(window2_.get()); | 319 windows.push_back(window2_.get()); |
| 320 SetGridSize(0); |
310 scoped_ptr<WorkspaceWindowResizer> resizer(WorkspaceWindowResizer::Create( | 321 scoped_ptr<WorkspaceWindowResizer> resizer(WorkspaceWindowResizer::Create( |
311 window_.get(), gfx::Point(), HTBOTTOM, 0, windows)); | 322 window_.get(), gfx::Point(), HTBOTTOM, windows)); |
312 ASSERT_TRUE(resizer.get()); | 323 ASSERT_TRUE(resizer.get()); |
313 // Move it 100 to the bottom, which should expand w1 and push w2. | 324 // Move it 100 to the bottom, which should expand w1 and push w2. |
314 resizer->Drag(CalculateDragPoint(*resizer, 10, 100)); | 325 resizer->Drag(CalculateDragPoint(*resizer, 10, 100), 0); |
315 EXPECT_EQ("0,50 400x300", window_->bounds().ToString()); | 326 EXPECT_EQ("0,50 400x300", window_->bounds().ToString()); |
316 EXPECT_EQ("0,350 200x100", window2_->bounds().ToString()); | 327 EXPECT_EQ("0,350 200x100", window2_->bounds().ToString()); |
317 | 328 |
318 // Push off the screen, w2 should be resized to its min. | 329 // Push off the screen, w2 should be resized to its min. |
319 delegate2_.set_min_size(gfx::Size(20, 20)); | 330 delegate2_.set_min_size(gfx::Size(20, 20)); |
320 resizer->Drag(CalculateDragPoint(*resizer, 50, 820)); | 331 resizer->Drag(CalculateDragPoint(*resizer, 50, 820), 0); |
321 EXPECT_EQ("0,50 400x530", window_->bounds().ToString()); | 332 EXPECT_EQ("0,50 400x530", window_->bounds().ToString()); |
322 EXPECT_EQ("0,580 200x20", window2_->bounds().ToString()); | 333 EXPECT_EQ("0,580 200x20", window2_->bounds().ToString()); |
323 | 334 |
324 // Move back to 100 and verify w2 gets its original size. | 335 // Move back to 100 and verify w2 gets its original size. |
325 resizer->Drag(CalculateDragPoint(*resizer, 10, 100)); | 336 resizer->Drag(CalculateDragPoint(*resizer, 10, 100), 0); |
326 EXPECT_EQ("0,50 400x300", window_->bounds().ToString()); | 337 EXPECT_EQ("0,50 400x300", window_->bounds().ToString()); |
327 EXPECT_EQ("0,350 200x100", window2_->bounds().ToString()); | 338 EXPECT_EQ("0,350 200x100", window2_->bounds().ToString()); |
328 | 339 |
329 // Revert and make sure everything moves back. | 340 // Revert and make sure everything moves back. |
330 resizer->Drag(CalculateDragPoint(*resizer, 800, 20)); | 341 resizer->Drag(CalculateDragPoint(*resizer, 800, 20), 0); |
331 resizer->RevertDrag(); | 342 resizer->RevertDrag(); |
332 EXPECT_EQ("0,50 400x200", window_->bounds().ToString()); | 343 EXPECT_EQ("0,50 400x200", window_->bounds().ToString()); |
333 EXPECT_EQ("0,250 200x100", window2_->bounds().ToString()); | 344 EXPECT_EQ("0,250 200x100", window2_->bounds().ToString()); |
334 } | 345 } |
335 | 346 |
336 // Assertions around attached window resize dragging from the bottom with 3 | 347 // Assertions around attached window resize dragging from the bottom with 3 |
337 // windows. | 348 // windows. |
338 // TODO(oshima): Host window doesn't get a resize event after | 349 // TODO(oshima): Host window doesn't get a resize event after |
339 // SetHostSize on Windows trybot, which gives wrong work/monitor area. | 350 // SetHostSize on Windows trybot, which gives wrong work/monitor area. |
340 TEST_F(WorkspaceWindowResizerTest, AttachedResize_BOTTOM_3) { | 351 TEST_F(WorkspaceWindowResizerTest, AttachedResize_BOTTOM_3) { |
341 aura::RootWindow* root = Shell::GetInstance()->GetRootWindow(); | 352 aura::RootWindow* root = Shell::GetInstance()->GetRootWindow(); |
342 root->SetHostSize(gfx::Size(600, 800)); | 353 root->SetHostSize(gfx::Size(600, 800)); |
343 LOG(ERROR) << "=== Calling OnHostResized, 600x800"; | 354 LOG(ERROR) << "=== Calling OnHostResized, 600x800"; |
344 | 355 |
345 Shell::GetInstance()->SetMonitorWorkAreaInsets(root, gfx::Insets()); | 356 Shell::GetInstance()->SetMonitorWorkAreaInsets(root, gfx::Insets()); |
346 | 357 |
347 window_->SetBounds(gfx::Rect( 300, 100, 300, 200)); | 358 window_->SetBounds(gfx::Rect( 300, 100, 300, 200)); |
348 window2_->SetBounds(gfx::Rect(300, 300, 200, 150)); | 359 window2_->SetBounds(gfx::Rect(300, 300, 200, 150)); |
349 window3_->SetBounds(gfx::Rect(300, 450, 200, 100)); | 360 window3_->SetBounds(gfx::Rect(300, 450, 200, 100)); |
350 delegate2_.set_min_size(gfx::Size(50, 52)); | 361 delegate2_.set_min_size(gfx::Size(50, 52)); |
351 delegate3_.set_min_size(gfx::Size(50, 38)); | 362 delegate3_.set_min_size(gfx::Size(50, 38)); |
352 | 363 |
353 std::vector<aura::Window*> windows; | 364 std::vector<aura::Window*> windows; |
354 windows.push_back(window2_.get()); | 365 windows.push_back(window2_.get()); |
355 windows.push_back(window3_.get()); | 366 windows.push_back(window3_.get()); |
| 367 SetGridSize(10); |
356 scoped_ptr<WorkspaceWindowResizer> resizer(WorkspaceWindowResizer::Create( | 368 scoped_ptr<WorkspaceWindowResizer> resizer(WorkspaceWindowResizer::Create( |
357 window_.get(), gfx::Point(), HTBOTTOM, 10, windows)); | 369 window_.get(), gfx::Point(), HTBOTTOM, windows)); |
358 ASSERT_TRUE(resizer.get()); | 370 ASSERT_TRUE(resizer.get()); |
359 // Move it 100 to the right, which should expand w1 and push w2 and w3. | 371 // Move it 100 to the right, which should expand w1 and push w2 and w3. |
360 resizer->Drag(CalculateDragPoint(*resizer, -10, 100)); | 372 resizer->Drag(CalculateDragPoint(*resizer, -10, 100), 0); |
361 EXPECT_EQ("300,100 300x300", window_->bounds().ToString()); | 373 EXPECT_EQ("300,100 300x300", window_->bounds().ToString()); |
362 EXPECT_EQ("300,400 200x150", window2_->bounds().ToString()); | 374 EXPECT_EQ("300,400 200x150", window2_->bounds().ToString()); |
363 EXPECT_EQ("300,550 200x100", window3_->bounds().ToString()); | 375 EXPECT_EQ("300,550 200x100", window3_->bounds().ToString()); |
364 | 376 |
365 // Move it 296, which should now snap to grid and things should compress. | 377 // Move it 296, which should now snap to grid and things should compress. |
366 resizer->Drag(CalculateDragPoint(*resizer, -10, 296)); | 378 resizer->Drag(CalculateDragPoint(*resizer, -10, 296), 0); |
367 EXPECT_EQ("300,100 300x500", window_->bounds().ToString()); | 379 EXPECT_EQ("300,100 300x500", window_->bounds().ToString()); |
368 EXPECT_EQ("300,600 200x120", window2_->bounds().ToString()); | 380 EXPECT_EQ("300,600 200x120", window2_->bounds().ToString()); |
369 EXPECT_EQ("300,720 200x80", window3_->bounds().ToString()); | 381 EXPECT_EQ("300,720 200x80", window3_->bounds().ToString()); |
370 | 382 |
371 // Move it so much everything ends up at its min. | 383 // Move it so much everything ends up at its min. |
372 resizer->Drag(CalculateDragPoint(*resizer, 50, 798)); | 384 resizer->Drag(CalculateDragPoint(*resizer, 50, 798), 0); |
373 EXPECT_EQ("300,100 300x600", window_->bounds().ToString()); | 385 EXPECT_EQ("300,100 300x600", window_->bounds().ToString()); |
374 EXPECT_EQ("300,700 200x60", window2_->bounds().ToString()); | 386 EXPECT_EQ("300,700 200x60", window2_->bounds().ToString()); |
375 EXPECT_EQ("300,760 200x40", window3_->bounds().ToString()); | 387 EXPECT_EQ("300,760 200x40", window3_->bounds().ToString()); |
376 | 388 |
377 // Revert and make sure everything moves back. | 389 // Revert and make sure everything moves back. |
378 resizer->RevertDrag(); | 390 resizer->RevertDrag(); |
379 EXPECT_EQ("300,100 300x200", window_->bounds().ToString()); | 391 EXPECT_EQ("300,100 300x200", window_->bounds().ToString()); |
380 EXPECT_EQ("300,300 200x150", window2_->bounds().ToString()); | 392 EXPECT_EQ("300,300 200x150", window2_->bounds().ToString()); |
381 EXPECT_EQ("300,450 200x100", window3_->bounds().ToString()); | 393 EXPECT_EQ("300,450 200x100", window3_->bounds().ToString()); |
382 } | 394 } |
383 | 395 |
384 // Assertions around attached window resizing (collapsing and expanding) with | 396 // Assertions around attached window resizing (collapsing and expanding) with |
385 // 3 windows. | 397 // 3 windows. |
386 TEST_F(WorkspaceWindowResizerTest, AttachedResize_BOTTOM_3_Compress) { | 398 TEST_F(WorkspaceWindowResizerTest, AttachedResize_BOTTOM_3_Compress) { |
387 window_->SetBounds(gfx::Rect( 0, 0, 200, 200)); | 399 window_->SetBounds(gfx::Rect( 0, 0, 200, 200)); |
388 window2_->SetBounds(gfx::Rect(10, 200, 200, 200)); | 400 window2_->SetBounds(gfx::Rect(10, 200, 200, 200)); |
389 window3_->SetBounds(gfx::Rect(20, 400, 100, 100)); | 401 window3_->SetBounds(gfx::Rect(20, 400, 100, 100)); |
390 delegate2_.set_min_size(gfx::Size(52, 50)); | 402 delegate2_.set_min_size(gfx::Size(52, 50)); |
391 delegate3_.set_min_size(gfx::Size(38, 50)); | 403 delegate3_.set_min_size(gfx::Size(38, 50)); |
392 | 404 |
393 std::vector<aura::Window*> windows; | 405 std::vector<aura::Window*> windows; |
394 windows.push_back(window2_.get()); | 406 windows.push_back(window2_.get()); |
395 windows.push_back(window3_.get()); | 407 windows.push_back(window3_.get()); |
| 408 SetGridSize(10); |
396 scoped_ptr<WorkspaceWindowResizer> resizer(WorkspaceWindowResizer::Create( | 409 scoped_ptr<WorkspaceWindowResizer> resizer(WorkspaceWindowResizer::Create( |
397 window_.get(), gfx::Point(), HTBOTTOM, 10, windows)); | 410 window_.get(), gfx::Point(), HTBOTTOM, windows)); |
398 ASSERT_TRUE(resizer.get()); | 411 ASSERT_TRUE(resizer.get()); |
399 // Move it 100 up, which should collapse w1 and expand w2 and w3. | 412 // Move it 100 up, which should collapse w1 and expand w2 and w3. |
400 resizer->Drag(CalculateDragPoint(*resizer, -10, -100)); | 413 resizer->Drag(CalculateDragPoint(*resizer, -10, -100), 0); |
401 EXPECT_EQ("0,0 200x100", window_->bounds().ToString()); | 414 EXPECT_EQ("0,0 200x100", window_->bounds().ToString()); |
402 EXPECT_EQ("10,100 200x270", window2_->bounds().ToString()); | 415 EXPECT_EQ("10,100 200x270", window2_->bounds().ToString()); |
403 EXPECT_EQ("20,370 100x130", window3_->bounds().ToString()); | 416 EXPECT_EQ("20,370 100x130", window3_->bounds().ToString()); |
404 | 417 |
405 // Move it 100 down. | 418 // Move it 100 down. |
406 resizer->Drag(CalculateDragPoint(*resizer, 10, 100)); | 419 resizer->Drag(CalculateDragPoint(*resizer, 10, 100), 0); |
407 EXPECT_EQ("0,0 200x300", window_->bounds().ToString()); | 420 EXPECT_EQ("0,0 200x300", window_->bounds().ToString()); |
408 EXPECT_EQ("10,300 200x200", window2_->bounds().ToString()); | 421 EXPECT_EQ("10,300 200x200", window2_->bounds().ToString()); |
409 EXPECT_EQ("20,500 100x100", window3_->bounds().ToString()); | 422 EXPECT_EQ("20,500 100x100", window3_->bounds().ToString()); |
410 | 423 |
411 // 100 up again. | 424 // 100 up again. |
412 resizer->Drag(CalculateDragPoint(*resizer, -10, -100)); | 425 resizer->Drag(CalculateDragPoint(*resizer, -10, -100), 0); |
413 EXPECT_EQ("0,0 200x100", window_->bounds().ToString()); | 426 EXPECT_EQ("0,0 200x100", window_->bounds().ToString()); |
414 EXPECT_EQ("10,100 200x270", window2_->bounds().ToString()); | 427 EXPECT_EQ("10,100 200x270", window2_->bounds().ToString()); |
415 EXPECT_EQ("20,370 100x130", window3_->bounds().ToString()); | 428 EXPECT_EQ("20,370 100x130", window3_->bounds().ToString()); |
416 } | 429 } |
417 | 430 |
418 // Assertions around dragging to the left/right edge of the screen. | 431 // Assertions around dragging to the left/right edge of the screen. |
419 TEST_F(WorkspaceWindowResizerTest, Edge) { | 432 TEST_F(WorkspaceWindowResizerTest, Edge) { |
420 int bottom = | 433 int bottom = |
421 ScreenAsh::GetUnmaximizedWorkAreaBounds(window_.get()).bottom(); | 434 ScreenAsh::GetUnmaximizedWorkAreaBounds(window_.get()).bottom(); |
422 window_->SetBounds(gfx::Rect(20, 30, 50, 60)); | 435 window_->SetBounds(gfx::Rect(20, 30, 50, 60)); |
423 { | 436 { |
| 437 SetGridSize(0); |
424 scoped_ptr<WorkspaceWindowResizer> resizer(WorkspaceWindowResizer::Create( | 438 scoped_ptr<WorkspaceWindowResizer> resizer(WorkspaceWindowResizer::Create( |
425 window_.get(), gfx::Point(), HTCAPTION, 0, empty_windows())); | 439 window_.get(), gfx::Point(), HTCAPTION, empty_windows())); |
426 ASSERT_TRUE(resizer.get()); | 440 ASSERT_TRUE(resizer.get()); |
427 resizer->Drag(CalculateDragPoint(*resizer, 0, 10)); | 441 resizer->Drag(CalculateDragPoint(*resizer, 0, 10), 0); |
428 resizer->CompleteDrag(); | 442 resizer->CompleteDrag(0); |
429 EXPECT_EQ("0,0 400x" + base::IntToString(bottom), | 443 EXPECT_EQ("0,0 400x" + base::IntToString(bottom), |
430 window_->bounds().ToString()); | 444 window_->bounds().ToString()); |
431 ASSERT_TRUE(GetRestoreBounds(window_.get())); | 445 ASSERT_TRUE(GetRestoreBounds(window_.get())); |
432 EXPECT_EQ("20,30 50x60", GetRestoreBounds(window_.get())->ToString()); | 446 EXPECT_EQ("20,30 50x60", GetRestoreBounds(window_.get())->ToString()); |
433 } | 447 } |
434 | 448 |
435 // Try the same with the right side. | 449 // Try the same with the right side. |
| 450 SetGridSize(0); |
436 scoped_ptr<WorkspaceWindowResizer> resizer(WorkspaceWindowResizer::Create( | 451 scoped_ptr<WorkspaceWindowResizer> resizer(WorkspaceWindowResizer::Create( |
437 window_.get(), gfx::Point(), HTCAPTION, 0, empty_windows())); | 452 window_.get(), gfx::Point(), HTCAPTION, empty_windows())); |
438 ASSERT_TRUE(resizer.get()); | 453 ASSERT_TRUE(resizer.get()); |
439 resizer->Drag(CalculateDragPoint(*resizer, 800, 10)); | 454 resizer->Drag(CalculateDragPoint(*resizer, 800, 10), 0); |
440 resizer->CompleteDrag(); | 455 resizer->CompleteDrag(0); |
441 EXPECT_EQ("400,0 400x" + base::IntToString(bottom), | 456 EXPECT_EQ("400,0 400x" + base::IntToString(bottom), |
442 window_->bounds().ToString()); | 457 window_->bounds().ToString()); |
443 ASSERT_TRUE(GetRestoreBounds(window_.get())); | 458 ASSERT_TRUE(GetRestoreBounds(window_.get())); |
444 EXPECT_EQ("20,30 50x60", GetRestoreBounds(window_.get())->ToString()); | 459 EXPECT_EQ("20,30 50x60", GetRestoreBounds(window_.get())->ToString()); |
445 } | 460 } |
446 | 461 |
447 // Verifies windows are correctly restacked when reordering multiple windows. | 462 // Verifies windows are correctly restacked when reordering multiple windows. |
448 TEST_F(WorkspaceWindowResizerTest, RestackAttached) { | 463 TEST_F(WorkspaceWindowResizerTest, RestackAttached) { |
449 window_->SetBounds(gfx::Rect( 0, 0, 200, 300)); | 464 window_->SetBounds(gfx::Rect( 0, 0, 200, 300)); |
450 window2_->SetBounds(gfx::Rect(200, 0, 100, 200)); | 465 window2_->SetBounds(gfx::Rect(200, 0, 100, 200)); |
451 window3_->SetBounds(gfx::Rect(300, 0, 100, 100)); | 466 window3_->SetBounds(gfx::Rect(300, 0, 100, 100)); |
452 | 467 |
453 { | 468 { |
454 std::vector<aura::Window*> windows; | 469 std::vector<aura::Window*> windows; |
455 windows.push_back(window2_.get()); | 470 windows.push_back(window2_.get()); |
| 471 SetGridSize(10); |
456 scoped_ptr<WorkspaceWindowResizer> resizer(WorkspaceWindowResizer::Create( | 472 scoped_ptr<WorkspaceWindowResizer> resizer(WorkspaceWindowResizer::Create( |
457 window_.get(), gfx::Point(), HTRIGHT, 10, windows)); | 473 window_.get(), gfx::Point(), HTRIGHT, windows)); |
458 ASSERT_TRUE(resizer.get()); | 474 ASSERT_TRUE(resizer.get()); |
459 // Move it 100 to the right, which should expand w1 and push w2 and w3. | 475 // Move it 100 to the right, which should expand w1 and push w2 and w3. |
460 resizer->Drag(CalculateDragPoint(*resizer, 100, -10)); | 476 resizer->Drag(CalculateDragPoint(*resizer, 100, -10), 0); |
461 | 477 |
462 // 2 should be topmost since it's initially the highest in the stack. | 478 // 2 should be topmost since it's initially the highest in the stack. |
463 EXPECT_EQ("2 1 3", WindowOrderAsString()); | 479 EXPECT_EQ("2 1 3", WindowOrderAsString()); |
464 } | 480 } |
465 | 481 |
466 { | 482 { |
467 std::vector<aura::Window*> windows; | 483 std::vector<aura::Window*> windows; |
468 windows.push_back(window3_.get()); | 484 windows.push_back(window3_.get()); |
| 485 SetGridSize(10); |
469 scoped_ptr<WorkspaceWindowResizer> resizer(WorkspaceWindowResizer::Create( | 486 scoped_ptr<WorkspaceWindowResizer> resizer(WorkspaceWindowResizer::Create( |
470 window2_.get(), gfx::Point(), HTRIGHT, 10, windows)); | 487 window2_.get(), gfx::Point(), HTRIGHT, windows)); |
471 ASSERT_TRUE(resizer.get()); | 488 ASSERT_TRUE(resizer.get()); |
472 // Move it 100 to the right, which should expand w1 and push w2 and w3. | 489 // Move it 100 to the right, which should expand w1 and push w2 and w3. |
473 resizer->Drag(CalculateDragPoint(*resizer, 100, -10)); | 490 resizer->Drag(CalculateDragPoint(*resizer, 100, -10), 0); |
474 | 491 |
475 // 2 should be topmost since it's initially the highest in the stack. | 492 // 2 should be topmost since it's initially the highest in the stack. |
476 EXPECT_EQ("2 3 1", WindowOrderAsString()); | 493 EXPECT_EQ("2 3 1", WindowOrderAsString()); |
477 } | 494 } |
478 } | 495 } |
479 | 496 |
480 // Makes sure we don't allow dragging below the work area. | 497 // Makes sure we don't allow dragging below the work area. |
481 TEST_F(WorkspaceWindowResizerTest, DontDragOffBottom) { | 498 TEST_F(WorkspaceWindowResizerTest, DontDragOffBottom) { |
482 Shell::GetInstance()->SetMonitorWorkAreaInsets( | 499 Shell::GetInstance()->SetMonitorWorkAreaInsets( |
483 Shell::GetInstance()->GetRootWindow(), gfx::Insets(0, 0, 10, 0)); | 500 Shell::GetInstance()->GetRootWindow(), gfx::Insets(0, 0, 10, 0)); |
484 | 501 |
485 window_->SetBounds(gfx::Rect(100, 200, 300, 400)); | 502 window_->SetBounds(gfx::Rect(100, 200, 300, 400)); |
| 503 SetGridSize(0); |
486 scoped_ptr<WorkspaceWindowResizer> resizer(WorkspaceWindowResizer::Create( | 504 scoped_ptr<WorkspaceWindowResizer> resizer(WorkspaceWindowResizer::Create( |
487 window_.get(), gfx::Point(), HTCAPTION, 0, empty_windows())); | 505 window_.get(), gfx::Point(), HTCAPTION, empty_windows())); |
488 ASSERT_TRUE(resizer.get()); | 506 ASSERT_TRUE(resizer.get()); |
489 resizer->Drag(CalculateDragPoint(*resizer, 0, 600)); | 507 resizer->Drag(CalculateDragPoint(*resizer, 0, 600), 0); |
490 int expected_y = | 508 int expected_y = |
491 kRootHeight - WorkspaceWindowResizer::kMinOnscreenHeight - 10; | 509 kRootHeight - WorkspaceWindowResizer::kMinOnscreenHeight - 10; |
492 EXPECT_EQ("100," + base::IntToString(expected_y) + " 300x400", | 510 EXPECT_EQ("100," + base::IntToString(expected_y) + " 300x400", |
493 window_->bounds().ToString()); | 511 window_->bounds().ToString()); |
494 } | 512 } |
495 | 513 |
496 // Makes sure we don't allow dragging off the top of the work area. | 514 // Makes sure we don't allow dragging off the top of the work area. |
497 TEST_F(WorkspaceWindowResizerTest, DontDragOffTop) { | 515 TEST_F(WorkspaceWindowResizerTest, DontDragOffTop) { |
498 Shell::GetInstance()->SetMonitorWorkAreaInsets( | 516 Shell::GetInstance()->SetMonitorWorkAreaInsets( |
499 Shell::GetInstance()->GetRootWindow(), gfx::Insets(10, 0, 0, 0)); | 517 Shell::GetInstance()->GetRootWindow(), gfx::Insets(10, 0, 0, 0)); |
500 | 518 |
501 window_->SetBounds(gfx::Rect(100, 200, 300, 400)); | 519 window_->SetBounds(gfx::Rect(100, 200, 300, 400)); |
| 520 SetGridSize(0); |
502 scoped_ptr<WorkspaceWindowResizer> resizer(WorkspaceWindowResizer::Create( | 521 scoped_ptr<WorkspaceWindowResizer> resizer(WorkspaceWindowResizer::Create( |
503 window_.get(), gfx::Point(), HTCAPTION, 0, empty_windows())); | 522 window_.get(), gfx::Point(), HTCAPTION, empty_windows())); |
504 ASSERT_TRUE(resizer.get()); | 523 ASSERT_TRUE(resizer.get()); |
505 resizer->Drag(CalculateDragPoint(*resizer, 0, -600)); | 524 resizer->Drag(CalculateDragPoint(*resizer, 0, -600), 0); |
506 EXPECT_EQ("100,10 300x400", window_->bounds().ToString()); | 525 EXPECT_EQ("100,10 300x400", window_->bounds().ToString()); |
507 } | 526 } |
508 | 527 |
509 TEST_F(WorkspaceWindowResizerTest, ResizeBottomOutsideWorkArea) { | 528 TEST_F(WorkspaceWindowResizerTest, ResizeBottomOutsideWorkArea) { |
510 Shell::GetInstance()->SetMonitorWorkAreaInsets( | 529 Shell::GetInstance()->SetMonitorWorkAreaInsets( |
511 Shell::GetInstance()->GetRootWindow(), gfx::Insets(0, 0, 50, 0)); | 530 Shell::GetInstance()->GetRootWindow(), gfx::Insets(0, 0, 50, 0)); |
512 | 531 |
513 window_->SetBounds(gfx::Rect(100, 200, 300, 380)); | 532 window_->SetBounds(gfx::Rect(100, 200, 300, 380)); |
| 533 SetGridSize(10); |
514 scoped_ptr<WorkspaceWindowResizer> resizer(WorkspaceWindowResizer::Create( | 534 scoped_ptr<WorkspaceWindowResizer> resizer(WorkspaceWindowResizer::Create( |
515 window_.get(), gfx::Point(), HTTOP, 10, empty_windows())); | 535 window_.get(), gfx::Point(), HTTOP, empty_windows())); |
516 ASSERT_TRUE(resizer.get()); | 536 ASSERT_TRUE(resizer.get()); |
517 resizer->Drag(CalculateDragPoint(*resizer, 8, 0)); | 537 resizer->Drag(CalculateDragPoint(*resizer, 8, 0), 0); |
518 EXPECT_EQ("100,200 300x380", window_->bounds().ToString()); | 538 EXPECT_EQ("100,200 300x380", window_->bounds().ToString()); |
519 } | 539 } |
520 | 540 |
521 // Verifies snapping to edges works. | 541 // Verifies snapping to edges works. |
522 TEST_F(WorkspaceWindowResizerTest, SnapToEdge) { | 542 TEST_F(WorkspaceWindowResizerTest, SnapToEdge) { |
523 Shell::GetInstance()->SetShelfAutoHideBehavior( | 543 Shell::GetInstance()->SetShelfAutoHideBehavior( |
524 SHELF_AUTO_HIDE_BEHAVIOR_ALWAYS); | 544 SHELF_AUTO_HIDE_BEHAVIOR_ALWAYS); |
525 window_->SetBounds(gfx::Rect(96, 112, 320, 160)); | 545 window_->SetBounds(gfx::Rect(96, 112, 320, 160)); |
| 546 SetGridSize(16); |
526 scoped_ptr<WorkspaceWindowResizer> resizer(WorkspaceWindowResizer::Create( | 547 scoped_ptr<WorkspaceWindowResizer> resizer(WorkspaceWindowResizer::Create( |
527 window_.get(), gfx::Point(), HTCAPTION, 16, empty_windows())); | 548 window_.get(), gfx::Point(), HTCAPTION, empty_windows())); |
528 ASSERT_TRUE(resizer.get()); | 549 ASSERT_TRUE(resizer.get()); |
529 // Move to an x-coordinate of 15, which should not snap. | 550 // Move to an x-coordinate of 15, which should not snap. |
530 resizer->Drag(CalculateDragPoint(*resizer, -81, 0)); | 551 resizer->Drag(CalculateDragPoint(*resizer, -81, 0), 0); |
531 // An x-coordinate of 7 should snap. | 552 // An x-coordinate of 7 should snap. |
532 resizer->Drag(CalculateDragPoint(*resizer, -89, 0)); | 553 resizer->Drag(CalculateDragPoint(*resizer, -89, 0), 0); |
533 EXPECT_EQ("0,112 320x160", window_->bounds().ToString()); | 554 EXPECT_EQ("0,112 320x160", window_->bounds().ToString()); |
534 // Move to -20, should still snap to 0. | 555 // Move to -20, should still snap to 0. |
535 resizer->Drag(CalculateDragPoint(*resizer, -116, 0)); | 556 resizer->Drag(CalculateDragPoint(*resizer, -116, 0), 0); |
536 EXPECT_EQ("0,112 320x160", window_->bounds().ToString()); | 557 EXPECT_EQ("0,112 320x160", window_->bounds().ToString()); |
537 // At -32 should move past snap points. | 558 // At -32 should move past snap points. |
538 resizer->Drag(CalculateDragPoint(*resizer, -128, 0)); | 559 resizer->Drag(CalculateDragPoint(*resizer, -128, 0), 0); |
539 EXPECT_EQ("-32,112 320x160", window_->bounds().ToString()); | 560 EXPECT_EQ("-32,112 320x160", window_->bounds().ToString()); |
540 resizer->Drag(CalculateDragPoint(*resizer, -129, 0)); | 561 resizer->Drag(CalculateDragPoint(*resizer, -129, 0), 0); |
541 EXPECT_EQ("-33,112 320x160", window_->bounds().ToString()); | 562 EXPECT_EQ("-33,112 320x160", window_->bounds().ToString()); |
542 | 563 |
543 // Right side should similarly snap. | 564 // Right side should similarly snap. |
544 resizer->Drag(CalculateDragPoint(*resizer, 800 - 320 - 96 - 15, 0)); | 565 resizer->Drag(CalculateDragPoint(*resizer, 800 - 320 - 96 - 15, 0), 0); |
545 EXPECT_EQ("465,112 320x160", window_->bounds().ToString()); | 566 EXPECT_EQ("465,112 320x160", window_->bounds().ToString()); |
546 resizer->Drag(CalculateDragPoint(*resizer, 800 - 320 - 96 - 7, 0)); | 567 resizer->Drag(CalculateDragPoint(*resizer, 800 - 320 - 96 - 7, 0), 0); |
547 EXPECT_EQ("480,112 320x160", window_->bounds().ToString()); | 568 EXPECT_EQ("480,112 320x160", window_->bounds().ToString()); |
548 resizer->Drag(CalculateDragPoint(*resizer, 800 - 320 - 96 + 20, 0)); | 569 resizer->Drag(CalculateDragPoint(*resizer, 800 - 320 - 96 + 20, 0), 0); |
549 EXPECT_EQ("480,112 320x160", window_->bounds().ToString()); | 570 EXPECT_EQ("480,112 320x160", window_->bounds().ToString()); |
550 resizer->Drag(CalculateDragPoint(*resizer, 800 - 320 - 96 + 32, 0)); | 571 resizer->Drag(CalculateDragPoint(*resizer, 800 - 320 - 96 + 32, 0), 0); |
551 EXPECT_EQ("512,112 320x160", window_->bounds().ToString()); | 572 EXPECT_EQ("512,112 320x160", window_->bounds().ToString()); |
552 resizer->Drag(CalculateDragPoint(*resizer, 800 - 320 - 96 + 33, 0)); | 573 resizer->Drag(CalculateDragPoint(*resizer, 800 - 320 - 96 + 33, 0), 0); |
553 EXPECT_EQ("513,112 320x160", window_->bounds().ToString()); | 574 EXPECT_EQ("513,112 320x160", window_->bounds().ToString()); |
554 | 575 |
555 // And the bottom should snap too. | 576 // And the bottom should snap too. |
556 resizer->Drag(CalculateDragPoint(*resizer, 0, 600 - 160 - 112 - 15)); | 577 resizer->Drag(CalculateDragPoint(*resizer, 0, 600 - 160 - 112 - 15), 0); |
557 EXPECT_EQ("96,432 320x160", window_->bounds().ToString()); | 578 EXPECT_EQ("96,432 320x160", window_->bounds().ToString()); |
558 resizer->Drag(CalculateDragPoint(*resizer, 0, 600 - 160 - 112 + 20)); | 579 resizer->Drag(CalculateDragPoint(*resizer, 0, 600 - 160 - 112 + 20), 0); |
559 EXPECT_EQ("96,432 320x160", window_->bounds().ToString()); | 580 EXPECT_EQ("96,432 320x160", window_->bounds().ToString()); |
560 resizer->Drag(CalculateDragPoint(*resizer, 0, 600 - 160 - 112 + 32)); | 581 resizer->Drag(CalculateDragPoint(*resizer, 0, 600 - 160 - 112 + 32), 0); |
561 EXPECT_EQ("96,472 320x160", window_->bounds().ToString()); | 582 EXPECT_EQ("96,472 320x160", window_->bounds().ToString()); |
562 resizer->Drag(CalculateDragPoint(*resizer, 0, 600 - 160 - 112 + 33)); | 583 resizer->Drag(CalculateDragPoint(*resizer, 0, 600 - 160 - 112 + 33), 0); |
563 EXPECT_EQ("96,473 320x160", window_->bounds().ToString()); | 584 EXPECT_EQ("96,473 320x160", window_->bounds().ToString()); |
564 | 585 |
565 // And the top should snap too. | 586 // And the top should snap too. |
566 resizer->Drag(CalculateDragPoint(*resizer, 0, -112 + 20)); | 587 resizer->Drag(CalculateDragPoint(*resizer, 0, -112 + 20), 0); |
567 EXPECT_EQ("96,20 320x160", window_->bounds().ToString()); | 588 EXPECT_EQ("96,20 320x160", window_->bounds().ToString()); |
568 resizer->Drag(CalculateDragPoint(*resizer, 0, -112 + 7)); | 589 resizer->Drag(CalculateDragPoint(*resizer, 0, -112 + 7), 0); |
569 EXPECT_EQ("96,0 320x160", window_->bounds().ToString()); | 590 EXPECT_EQ("96,0 320x160", window_->bounds().ToString()); |
570 // No need to test dragging < 0 as we force that to 0. | 591 // No need to test dragging < 0 as we force that to 0. |
571 } | 592 } |
572 | 593 |
573 // Verifies a window taller than work area height doesn't snap above the top of | 594 // Verifies a window taller than work area height doesn't snap above the top of |
574 // the work area. | 595 // the work area. |
575 TEST_F(WorkspaceWindowResizerTest, TallWindow) { | 596 TEST_F(WorkspaceWindowResizerTest, TallWindow) { |
576 aura::RootWindow* root = Shell::GetInstance()->GetRootWindow(); | 597 aura::RootWindow* root = Shell::GetInstance()->GetRootWindow(); |
577 Shell::GetInstance()->SetMonitorWorkAreaInsets( | 598 Shell::GetInstance()->SetMonitorWorkAreaInsets( |
578 root, gfx::Insets(0, 0, 50, 0)); | 599 root, gfx::Insets(0, 0, 50, 0)); |
579 window_->SetBounds(gfx::Rect(0, 0, 320, 560)); | 600 window_->SetBounds(gfx::Rect(0, 0, 320, 560)); |
| 601 SetGridSize(16); |
580 scoped_ptr<WorkspaceWindowResizer> resizer(WorkspaceWindowResizer::Create( | 602 scoped_ptr<WorkspaceWindowResizer> resizer(WorkspaceWindowResizer::Create( |
581 window_.get(), gfx::Point(), HTCAPTION, 16, empty_windows())); | 603 window_.get(), gfx::Point(), HTCAPTION, empty_windows())); |
582 resizer->Drag(CalculateDragPoint(*resizer, 0, 9)); | 604 resizer->Drag(CalculateDragPoint(*resizer, 0, 9), 0); |
583 EXPECT_EQ("0,9 320x560", window_->bounds().ToString()); | 605 EXPECT_EQ("0,9 320x560", window_->bounds().ToString()); |
584 } | 606 } |
585 | 607 |
| 608 TEST_F(WorkspaceWindowResizerTest, DragResizeSnapToGrid) { |
| 609 window_->SetBounds(gfx::Rect(96, 112, 320, 160)); |
| 610 SetGridSize(16); |
| 611 scoped_ptr<WorkspaceWindowResizer> resizer(WorkspaceWindowResizer::Create( |
| 612 window_.get(), gfx::Point(), HTBOTTOMRIGHT, empty_windows())); |
| 613 ASSERT_TRUE(resizer.get()); |
| 614 // Resize the right bottom to add 10 in width, 12 in height. |
| 615 resizer->Drag(CalculateDragPoint(*resizer, 10, 12), 0); |
| 616 // Both bottom and right sides should snap to grids. |
| 617 EXPECT_EQ("96,112 336x176", window_->bounds().ToString()); |
| 618 } |
| 619 |
| 620 TEST_F(WorkspaceWindowResizerTest, CtrlDragResizeToExactPosition) { |
| 621 window_->SetBounds(gfx::Rect(96, 112, 320, 160)); |
| 622 SetGridSize(16); |
| 623 scoped_ptr<WorkspaceWindowResizer> resizer(WorkspaceWindowResizer::Create( |
| 624 window_.get(), gfx::Point(), HTBOTTOMRIGHT, empty_windows())); |
| 625 ASSERT_TRUE(resizer.get()); |
| 626 // Resize the right bottom to add 10 in width, 12 in height. |
| 627 resizer->Drag(CalculateDragPoint(*resizer, 10, 12), ui::EF_CONTROL_DOWN); |
| 628 // Both bottom and right sides to resize to exact size requested. |
| 629 EXPECT_EQ("96,112 330x172", window_->bounds().ToString()); |
| 630 } |
| 631 |
| 632 TEST_F(WorkspaceWindowResizerTest, CompleteDragMoveSnapToGrid) { |
| 633 window_->SetBounds(gfx::Rect(96, 112, 320, 160)); |
| 634 SetGridSize(16); |
| 635 scoped_ptr<WorkspaceWindowResizer> resizer(WorkspaceWindowResizer::Create( |
| 636 window_.get(), gfx::Point(), HTCAPTION, empty_windows())); |
| 637 ASSERT_TRUE(resizer.get()); |
| 638 // Drag the window to new poistion by adding (10, 12) to original point, |
| 639 // the window should snap to the closed grid. |
| 640 resizer->Drag(CalculateDragPoint(*resizer, 10, 12), 0); |
| 641 resizer->CompleteDrag(0); |
| 642 EXPECT_EQ("112,128 320x160", window_->bounds().ToString()); |
| 643 } |
| 644 |
| 645 TEST_F(WorkspaceWindowResizerTest, CtrlCompleteDragMoveToExactPosition) { |
| 646 window_->SetBounds(gfx::Rect(96, 112, 320, 160)); |
| 647 SetGridSize(16); |
| 648 scoped_ptr<WorkspaceWindowResizer> resizer(WorkspaceWindowResizer::Create( |
| 649 window_.get(), gfx::Point(), HTCAPTION, empty_windows())); |
| 650 ASSERT_TRUE(resizer.get()); |
| 651 // Ctrl + drag the window to new poistion by adding (10, 12) to its origin, |
| 652 // the window should move to the exact position. |
| 653 resizer->Drag(CalculateDragPoint(*resizer, 10, 12), 0); |
| 654 resizer->CompleteDrag(ui::EF_CONTROL_DOWN); |
| 655 EXPECT_EQ("106,124 320x160", window_->bounds().ToString()); |
| 656 } |
| 657 |
586 #endif | 658 #endif |
587 | 659 |
588 } // namespace | 660 } // namespace |
589 } // namespace test | 661 } // namespace test |
590 } // namespace ash | 662 } // namespace ash |
OLD | NEW |