| 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/shell.h" | 7 #include "ash/shell.h" |
| 8 #include "ash/test/ash_test_base.h" | 8 #include "ash/test/ash_test_base.h" |
| 9 #include "base/string_number_conversions.h" | 9 #include "base/string_number_conversions.h" |
| 10 #include "ui/aura/root_window.h" | 10 #include "ui/aura/root_window.h" |
| (...skipping 64 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 75 protected: | 75 protected: |
| 76 gfx::Point CalculateDragPoint(const WorkspaceWindowResizer& resizer, | 76 gfx::Point CalculateDragPoint(const WorkspaceWindowResizer& resizer, |
| 77 int delta_x, | 77 int delta_x, |
| 78 int delta_y) const { | 78 int delta_y) const { |
| 79 gfx::Point location = resizer.initial_location_in_parent(); | 79 gfx::Point location = resizer.initial_location_in_parent(); |
| 80 location.set_x(location.x() + delta_x); | 80 location.set_x(location.x() + delta_x); |
| 81 location.set_y(location.y() + delta_y); | 81 location.set_y(location.y() + delta_y); |
| 82 return location; | 82 return location; |
| 83 } | 83 } |
| 84 | 84 |
| 85 std::vector<aura::Window*> empty_windows() const { |
| 86 return std::vector<aura::Window*>(); |
| 87 } |
| 88 |
| 85 TestWindowDelegate delegate_; | 89 TestWindowDelegate delegate_; |
| 86 TestWindowDelegate delegate2_; | 90 TestWindowDelegate delegate2_; |
| 87 TestWindowDelegate delegate3_; | 91 TestWindowDelegate delegate3_; |
| 88 scoped_ptr<aura::Window> window_; | 92 scoped_ptr<aura::Window> window_; |
| 89 scoped_ptr<aura::Window> window2_; | 93 scoped_ptr<aura::Window> window2_; |
| 90 scoped_ptr<aura::Window> window3_; | 94 scoped_ptr<aura::Window> window3_; |
| 91 | 95 |
| 92 private: | 96 private: |
| 93 DISALLOW_COPY_AND_ASSIGN(WorkspaceWindowResizerTest); | 97 DISALLOW_COPY_AND_ASSIGN(WorkspaceWindowResizerTest); |
| 94 }; | 98 }; |
| 95 | 99 |
| 96 // Assertions around making sure dragging shrinks when appropriate. | 100 // Assertions around making sure dragging shrinks when appropriate. |
| 97 TEST_F(WorkspaceWindowResizerTest, ShrinkOnDrag) { | 101 TEST_F(WorkspaceWindowResizerTest, ShrinkOnDrag) { |
| 98 int initial_y = 300; | 102 int initial_y = 300; |
| 99 window_->SetBounds(gfx::Rect(0, initial_y, 400, 296)); | 103 window_->SetBounds(gfx::Rect(0, initial_y, 400, 296)); |
| 100 | 104 |
| 101 // Drag down past the bottom of the screen, height should stop when it hits | 105 // Drag down past the bottom of the screen, height should stop when it hits |
| 102 // the bottom. | 106 // the bottom. |
| 103 { | 107 { |
| 104 scoped_ptr<WorkspaceWindowResizer> resizer(WorkspaceWindowResizer::Create( | 108 scoped_ptr<WorkspaceWindowResizer> resizer(WorkspaceWindowResizer::Create( |
| 105 window_.get(), gfx::Point(), HTBOTTOM, 0)); | 109 window_.get(), gfx::Point(), HTBOTTOM, 0, empty_windows())); |
| 106 ASSERT_TRUE(resizer.get()); | 110 ASSERT_TRUE(resizer.get()); |
| 107 resizer->Drag(CalculateDragPoint(*resizer, 0, 600)); | 111 resizer->Drag(CalculateDragPoint(*resizer, 0, 600)); |
| 108 EXPECT_EQ(kRootHeight - initial_y, window_->bounds().height()); | 112 EXPECT_EQ(kRootHeight - initial_y, window_->bounds().height()); |
| 109 | 113 |
| 110 // Drag up 10 and make sure height is the same. | 114 // Drag up 10 and make sure height is the same. |
| 111 resizer->Drag(CalculateDragPoint(*resizer, 0, 590)); | 115 resizer->Drag(CalculateDragPoint(*resizer, 0, 590)); |
| 112 EXPECT_EQ(kRootHeight - initial_y, window_->bounds().height()); | 116 EXPECT_EQ(kRootHeight - initial_y, window_->bounds().height()); |
| 113 } | 117 } |
| 114 | 118 |
| 115 { | 119 { |
| 116 // Move the window down 10 pixels, the height should change. | 120 // Move the window down 10 pixels, the height should change. |
| 117 int initial_height = window_->bounds().height(); | 121 int initial_height = window_->bounds().height(); |
| 118 scoped_ptr<WorkspaceWindowResizer> resizer(WorkspaceWindowResizer::Create( | 122 scoped_ptr<WorkspaceWindowResizer> resizer(WorkspaceWindowResizer::Create( |
| 119 window_.get(), gfx::Point(), HTCAPTION, 0)); | 123 window_.get(), gfx::Point(), HTCAPTION, 0, empty_windows())); |
| 120 ASSERT_TRUE(resizer.get()); | 124 ASSERT_TRUE(resizer.get()); |
| 121 resizer->Drag(CalculateDragPoint(*resizer, 0, 10)); | 125 resizer->Drag(CalculateDragPoint(*resizer, 0, 10)); |
| 122 EXPECT_EQ(initial_height - 10, window_->bounds().height()); | 126 EXPECT_EQ(initial_height - 10, window_->bounds().height()); |
| 123 | 127 |
| 124 // Move up 10, height should grow. | 128 // Move up 10, height should grow. |
| 125 resizer->Drag(CalculateDragPoint(*resizer, 0, 0)); | 129 resizer->Drag(CalculateDragPoint(*resizer, 0, 0)); |
| 126 EXPECT_EQ(initial_height, window_->bounds().height()); | 130 EXPECT_EQ(initial_height, window_->bounds().height()); |
| 127 | 131 |
| 128 // Move up another 10, height shouldn't change. | 132 // Move up another 10, height shouldn't change. |
| 129 resizer->Drag(CalculateDragPoint(*resizer, 0, -10)); | 133 resizer->Drag(CalculateDragPoint(*resizer, 0, -10)); |
| 130 EXPECT_EQ(initial_height, window_->bounds().height()); | 134 EXPECT_EQ(initial_height, window_->bounds().height()); |
| 131 } | 135 } |
| 132 } | 136 } |
| 133 | 137 |
| 134 // More assertions around making sure dragging shrinks when appropriate. | 138 // More assertions around making sure dragging shrinks when appropriate. |
| 135 TEST_F(WorkspaceWindowResizerTest, ShrinkOnDrag2) { | 139 TEST_F(WorkspaceWindowResizerTest, ShrinkOnDrag2) { |
| 136 window_->SetBounds(gfx::Rect(0, 300, 400, 300)); | 140 window_->SetBounds(gfx::Rect(0, 300, 400, 300)); |
| 137 | 141 |
| 138 // Drag down past the bottom of the screen, height should stop when it hits | 142 // Drag down past the bottom of the screen, height should stop when it hits |
| 139 // the bottom. | 143 // the bottom. |
| 140 { | 144 { |
| 141 scoped_ptr<WorkspaceWindowResizer> resizer(WorkspaceWindowResizer::Create( | 145 scoped_ptr<WorkspaceWindowResizer> resizer(WorkspaceWindowResizer::Create( |
| 142 window_.get(), gfx::Point(), HTCAPTION, 0)); | 146 window_.get(), gfx::Point(), HTCAPTION, 0, empty_windows())); |
| 143 ASSERT_TRUE(resizer.get()); | 147 ASSERT_TRUE(resizer.get()); |
| 144 resizer->Drag(CalculateDragPoint(*resizer, 0, 200)); | 148 resizer->Drag(CalculateDragPoint(*resizer, 0, 200)); |
| 145 EXPECT_EQ(500, window_->bounds().y()); | 149 EXPECT_EQ(500, window_->bounds().y()); |
| 146 EXPECT_EQ(100, window_->bounds().height()); | 150 EXPECT_EQ(100, window_->bounds().height()); |
| 147 // End and start a new drag session. | 151 // End and start a new drag session. |
| 148 } | 152 } |
| 149 | 153 |
| 150 { | 154 { |
| 151 // Drag up 400. | 155 // Drag up 400. |
| 152 scoped_ptr<WorkspaceWindowResizer> resizer(WorkspaceWindowResizer::Create( | 156 scoped_ptr<WorkspaceWindowResizer> resizer(WorkspaceWindowResizer::Create( |
| 153 window_.get(), gfx::Point(), HTCAPTION, 0)); | 157 window_.get(), gfx::Point(), HTCAPTION, 0, empty_windows())); |
| 154 ASSERT_TRUE(resizer.get()); | 158 ASSERT_TRUE(resizer.get()); |
| 155 resizer->Drag(CalculateDragPoint(*resizer, 0, -400)); | 159 resizer->Drag(CalculateDragPoint(*resizer, 0, -400)); |
| 156 EXPECT_EQ(100, window_->bounds().y()); | 160 EXPECT_EQ(100, window_->bounds().y()); |
| 157 EXPECT_EQ(300, window_->bounds().height()); | 161 EXPECT_EQ(300, window_->bounds().height()); |
| 158 } | 162 } |
| 159 } | 163 } |
| 160 | 164 |
| 161 // Moves enough to shrink, then moves up twice to expose more than was initially | 165 // Moves enough to shrink, then moves up twice to expose more than was initially |
| 162 // exposed. | 166 // exposed. |
| 163 TEST_F(WorkspaceWindowResizerTest, ShrinkMoveThanMoveUp) { | 167 TEST_F(WorkspaceWindowResizerTest, ShrinkMoveThanMoveUp) { |
| 164 window_->SetBounds(gfx::Rect(0, 300, 400, 300)); | 168 window_->SetBounds(gfx::Rect(0, 300, 400, 300)); |
| 165 | 169 |
| 166 // Drag down past the bottom of the screen, height should stop when it hits | 170 // Drag down past the bottom of the screen, height should stop when it hits |
| 167 // the bottom. | 171 // the bottom. |
| 168 { | 172 { |
| 169 scoped_ptr<WorkspaceWindowResizer> resizer(WorkspaceWindowResizer::Create( | 173 scoped_ptr<WorkspaceWindowResizer> resizer(WorkspaceWindowResizer::Create( |
| 170 window_.get(), gfx::Point(), HTCAPTION, 0)); | 174 window_.get(), gfx::Point(), HTCAPTION, 0, empty_windows())); |
| 171 ASSERT_TRUE(resizer.get()); | 175 ASSERT_TRUE(resizer.get()); |
| 172 resizer->Drag(CalculateDragPoint(*resizer, 0, 200)); | 176 resizer->Drag(CalculateDragPoint(*resizer, 0, 200)); |
| 173 EXPECT_EQ(500, window_->bounds().y()); | 177 EXPECT_EQ(500, window_->bounds().y()); |
| 174 EXPECT_EQ(100, window_->bounds().height()); | 178 EXPECT_EQ(100, window_->bounds().height()); |
| 175 // End and start a new drag session. | 179 // End and start a new drag session. |
| 176 } | 180 } |
| 177 | 181 |
| 178 { | 182 { |
| 179 scoped_ptr<WorkspaceWindowResizer> resizer(WorkspaceWindowResizer::Create( | 183 scoped_ptr<WorkspaceWindowResizer> resizer(WorkspaceWindowResizer::Create( |
| 180 window_.get(), gfx::Point(), HTCAPTION, 0)); | 184 window_.get(), gfx::Point(), HTCAPTION, 0, empty_windows())); |
| 181 ASSERT_TRUE(resizer.get()); | 185 ASSERT_TRUE(resizer.get()); |
| 182 resizer->Drag(CalculateDragPoint(*resizer, 0, -400)); | 186 resizer->Drag(CalculateDragPoint(*resizer, 0, -400)); |
| 183 resizer->Drag(CalculateDragPoint(*resizer, 0, -450)); | 187 resizer->Drag(CalculateDragPoint(*resizer, 0, -450)); |
| 184 EXPECT_EQ(50, window_->bounds().y()); | 188 EXPECT_EQ(50, window_->bounds().y()); |
| 185 EXPECT_EQ(300, window_->bounds().height()); | 189 EXPECT_EQ(300, window_->bounds().height()); |
| 186 } | 190 } |
| 187 } | 191 } |
| 188 | 192 |
| 189 // Makes sure shrinking honors the grid appropriately. | 193 // Makes sure shrinking honors the grid appropriately. |
| 190 TEST_F(WorkspaceWindowResizerTest, ShrinkWithGrid) { | 194 TEST_F(WorkspaceWindowResizerTest, ShrinkWithGrid) { |
| 191 window_->SetBounds(gfx::Rect(0, 300, 400, 296)); | 195 window_->SetBounds(gfx::Rect(0, 300, 400, 296)); |
| 192 | 196 |
| 193 scoped_ptr<WorkspaceWindowResizer> resizer(WorkspaceWindowResizer::Create( | 197 scoped_ptr<WorkspaceWindowResizer> resizer(WorkspaceWindowResizer::Create( |
| 194 window_.get(), gfx::Point(), HTCAPTION, 5)); | 198 window_.get(), gfx::Point(), HTCAPTION, 5, empty_windows())); |
| 195 ASSERT_TRUE(resizer.get()); | 199 ASSERT_TRUE(resizer.get()); |
| 196 // Drag down 8 pixels. | 200 // Drag down 8 pixels. |
| 197 resizer->Drag(CalculateDragPoint(*resizer, 0, 8)); | 201 resizer->Drag(CalculateDragPoint(*resizer, 0, 8)); |
| 198 resizer->CompleteDrag(); | 202 resizer->CompleteDrag(); |
| 199 EXPECT_EQ(310, window_->bounds().y()); | 203 EXPECT_EQ(310, window_->bounds().y()); |
| 200 EXPECT_EQ(kRootHeight - 310, window_->bounds().height()); | 204 EXPECT_EQ(kRootHeight - 310, window_->bounds().height()); |
| 201 } | 205 } |
| 202 | 206 |
| 203 // Makes sure once a window has been shrunk it can grow bigger than obscured | 207 // Makes sure once a window has been shrunk it can grow bigger than obscured |
| 204 // height | 208 // height |
| 205 TEST_F(WorkspaceWindowResizerTest, ShrinkThanGrow) { | 209 TEST_F(WorkspaceWindowResizerTest, ShrinkThanGrow) { |
| 206 int initial_y = 400; | 210 int initial_y = 400; |
| 207 int initial_height = 150; | 211 int initial_height = 150; |
| 208 window_->SetBounds(gfx::Rect(0, initial_y, 400, initial_height)); | 212 window_->SetBounds(gfx::Rect(0, initial_y, 400, initial_height)); |
| 209 | 213 |
| 210 // Most past the bottom of the screen, height should stop when it hits the | 214 // Most past the bottom of the screen, height should stop when it hits the |
| 211 // bottom. | 215 // bottom. |
| 212 { | 216 { |
| 213 scoped_ptr<WorkspaceWindowResizer> resizer(WorkspaceWindowResizer::Create( | 217 scoped_ptr<WorkspaceWindowResizer> resizer(WorkspaceWindowResizer::Create( |
| 214 window_.get(), gfx::Point(), HTCAPTION, 0)); | 218 window_.get(), gfx::Point(), HTCAPTION, 0, empty_windows())); |
| 215 ASSERT_TRUE(resizer.get()); | 219 ASSERT_TRUE(resizer.get()); |
| 216 resizer->Drag(CalculateDragPoint(*resizer, 0, 150)); | 220 resizer->Drag(CalculateDragPoint(*resizer, 0, 150)); |
| 217 EXPECT_EQ(550, window_->bounds().y()); | 221 EXPECT_EQ(550, window_->bounds().y()); |
| 218 EXPECT_EQ(50, window_->bounds().height()); | 222 EXPECT_EQ(50, window_->bounds().height()); |
| 219 } | 223 } |
| 220 | 224 |
| 221 // Resize the window 500 pixels up. | 225 // Resize the window 500 pixels up. |
| 222 { | 226 { |
| 223 scoped_ptr<WorkspaceWindowResizer> resizer(WorkspaceWindowResizer::Create( | 227 scoped_ptr<WorkspaceWindowResizer> resizer(WorkspaceWindowResizer::Create( |
| 224 window_.get(), gfx::Point(), HTTOP, 0)); | 228 window_.get(), gfx::Point(), HTTOP, 0, empty_windows())); |
| 225 ASSERT_TRUE(resizer.get()); | 229 ASSERT_TRUE(resizer.get()); |
| 226 resizer->Drag(CalculateDragPoint(*resizer, 0, -500)); | 230 resizer->Drag(CalculateDragPoint(*resizer, 0, -500)); |
| 227 EXPECT_EQ(50, window_->bounds().y()); | 231 EXPECT_EQ(50, window_->bounds().y()); |
| 228 EXPECT_EQ(550, window_->bounds().height()); | 232 EXPECT_EQ(550, window_->bounds().height()); |
| 229 } | 233 } |
| 230 } | 234 } |
| 231 | 235 |
| 232 // Makes sure once a window has been shrunk it can grow bigger than obscured | 236 // Makes sure once a window has been shrunk it can grow bigger than obscured |
| 233 // height | 237 // height |
| 234 TEST_F(WorkspaceWindowResizerTest, DontRememberAfterMove) { | 238 TEST_F(WorkspaceWindowResizerTest, DontRememberAfterMove) { |
| 235 window_->SetBounds(gfx::Rect(0, 300, 400, 300)); | 239 window_->SetBounds(gfx::Rect(0, 300, 400, 300)); |
| 236 | 240 |
| 237 // Most past the bottom of the screen, height should stop when it hits the | 241 // Most past the bottom of the screen, height should stop when it hits the |
| 238 // bottom. | 242 // bottom. |
| 239 { | 243 { |
| 240 scoped_ptr<WorkspaceWindowResizer> resizer(WorkspaceWindowResizer::Create( | 244 scoped_ptr<WorkspaceWindowResizer> resizer(WorkspaceWindowResizer::Create( |
| 241 window_.get(), gfx::Point(), HTCAPTION, 0)); | 245 window_.get(), gfx::Point(), HTCAPTION, 0, empty_windows())); |
| 242 ASSERT_TRUE(resizer.get()); | 246 ASSERT_TRUE(resizer.get()); |
| 243 resizer->Drag(CalculateDragPoint(*resizer, 0, 150)); | 247 resizer->Drag(CalculateDragPoint(*resizer, 0, 150)); |
| 244 EXPECT_EQ(450, window_->bounds().y()); | 248 EXPECT_EQ(450, window_->bounds().y()); |
| 245 EXPECT_EQ(150, window_->bounds().height()); | 249 EXPECT_EQ(150, window_->bounds().height()); |
| 246 resizer->Drag(CalculateDragPoint(*resizer, 0, -150)); | 250 resizer->Drag(CalculateDragPoint(*resizer, 0, -150)); |
| 247 EXPECT_EQ(150, window_->bounds().y()); | 251 EXPECT_EQ(150, window_->bounds().y()); |
| 248 EXPECT_EQ(300, window_->bounds().height()); | 252 EXPECT_EQ(300, window_->bounds().height()); |
| 249 } | 253 } |
| 250 | 254 |
| 251 // Resize it slightly. | 255 // Resize it slightly. |
| 252 { | 256 { |
| 253 scoped_ptr<WorkspaceWindowResizer> resizer(WorkspaceWindowResizer::Create( | 257 scoped_ptr<WorkspaceWindowResizer> resizer(WorkspaceWindowResizer::Create( |
| 254 window_.get(), gfx::Point(), HTBOTTOM, 0)); | 258 window_.get(), gfx::Point(), HTBOTTOM, 0, empty_windows())); |
| 255 ASSERT_TRUE(resizer.get()); | 259 ASSERT_TRUE(resizer.get()); |
| 256 resizer->Drag(CalculateDragPoint(*resizer, 0, -100)); | 260 resizer->Drag(CalculateDragPoint(*resizer, 0, -100)); |
| 257 EXPECT_EQ(150, window_->bounds().y()); | 261 EXPECT_EQ(150, window_->bounds().y()); |
| 258 EXPECT_EQ(200, window_->bounds().height()); | 262 EXPECT_EQ(200, window_->bounds().height()); |
| 259 } | 263 } |
| 260 | 264 |
| 261 { | 265 { |
| 262 // Move it down then back up. | 266 // Move it down then back up. |
| 263 scoped_ptr<WorkspaceWindowResizer> resizer(WorkspaceWindowResizer::Create( | 267 scoped_ptr<WorkspaceWindowResizer> resizer(WorkspaceWindowResizer::Create( |
| 264 window_.get(), gfx::Point(), HTCAPTION, 0)); | 268 window_.get(), gfx::Point(), HTCAPTION, 0, empty_windows())); |
| 265 ASSERT_TRUE(resizer.get()); | 269 ASSERT_TRUE(resizer.get()); |
| 266 resizer->Drag(CalculateDragPoint(*resizer, 0, 400)); | 270 resizer->Drag(CalculateDragPoint(*resizer, 0, 400)); |
| 267 EXPECT_EQ(550, window_->bounds().y()); | 271 EXPECT_EQ(550, window_->bounds().y()); |
| 268 EXPECT_EQ(50, window_->bounds().height()); | 272 EXPECT_EQ(50, window_->bounds().height()); |
| 269 | 273 |
| 270 resizer->Drag(CalculateDragPoint(*resizer, 0, 0)); | 274 resizer->Drag(CalculateDragPoint(*resizer, 0, 0)); |
| 271 EXPECT_EQ(150, window_->bounds().y()); | 275 EXPECT_EQ(150, window_->bounds().y()); |
| 272 EXPECT_EQ(200, window_->bounds().height()); | 276 EXPECT_EQ(200, window_->bounds().height()); |
| 273 } | 277 } |
| 274 } | 278 } |
| 275 | 279 |
| 276 // Makes sure we honor the min size. | 280 // Makes sure we honor the min size. |
| 277 TEST_F(WorkspaceWindowResizerTest, HonorMin) { | 281 TEST_F(WorkspaceWindowResizerTest, HonorMin) { |
| 278 delegate_.set_min_size(gfx::Size(50, 100)); | 282 delegate_.set_min_size(gfx::Size(50, 100)); |
| 279 window_->SetBounds(gfx::Rect(0, 300, 400, 300)); | 283 window_->SetBounds(gfx::Rect(0, 300, 400, 300)); |
| 280 | 284 |
| 281 // Most past the bottom of the screen, height should stop when it hits the | 285 // Most past the bottom of the screen, height should stop when it hits the |
| 282 // bottom. | 286 // bottom. |
| 283 { | 287 { |
| 284 scoped_ptr<WorkspaceWindowResizer> resizer(WorkspaceWindowResizer::Create( | 288 scoped_ptr<WorkspaceWindowResizer> resizer(WorkspaceWindowResizer::Create( |
| 285 window_.get(), gfx::Point(), HTCAPTION, 0)); | 289 window_.get(), gfx::Point(), HTCAPTION, 0, empty_windows())); |
| 286 ASSERT_TRUE(resizer.get()); | 290 ASSERT_TRUE(resizer.get()); |
| 287 resizer->Drag(CalculateDragPoint(*resizer, 0, 350)); | 291 resizer->Drag(CalculateDragPoint(*resizer, 0, 350)); |
| 288 EXPECT_EQ(500, window_->bounds().y()); | 292 EXPECT_EQ(500, window_->bounds().y()); |
| 289 EXPECT_EQ(100, window_->bounds().height()); | 293 EXPECT_EQ(100, window_->bounds().height()); |
| 290 | 294 |
| 291 resizer->Drag(CalculateDragPoint(*resizer, 0, 300)); | 295 resizer->Drag(CalculateDragPoint(*resizer, 0, 300)); |
| 292 EXPECT_EQ(500, window_->bounds().y()); | 296 EXPECT_EQ(500, window_->bounds().y()); |
| 293 EXPECT_EQ(100, window_->bounds().height()); | 297 EXPECT_EQ(100, window_->bounds().height()); |
| 294 | 298 |
| 295 resizer->Drag(CalculateDragPoint(*resizer, 0, 250)); | 299 resizer->Drag(CalculateDragPoint(*resizer, 0, 250)); |
| 296 EXPECT_EQ(500, window_->bounds().y()); | 300 EXPECT_EQ(500, window_->bounds().y()); |
| 297 EXPECT_EQ(100, window_->bounds().height()); | 301 EXPECT_EQ(100, window_->bounds().height()); |
| 298 | 302 |
| 299 resizer->Drag(CalculateDragPoint(*resizer, 0, 100)); | 303 resizer->Drag(CalculateDragPoint(*resizer, 0, 100)); |
| 300 EXPECT_EQ(400, window_->bounds().y()); | 304 EXPECT_EQ(400, window_->bounds().y()); |
| 301 EXPECT_EQ(200, window_->bounds().height()); | 305 EXPECT_EQ(200, window_->bounds().height()); |
| 302 | 306 |
| 303 resizer->Drag(CalculateDragPoint(*resizer, 0, -100)); | 307 resizer->Drag(CalculateDragPoint(*resizer, 0, -100)); |
| 304 EXPECT_EQ(200, window_->bounds().y()); | 308 EXPECT_EQ(200, window_->bounds().y()); |
| 305 EXPECT_EQ(300, window_->bounds().height()); | 309 EXPECT_EQ(300, window_->bounds().height()); |
| 306 } | 310 } |
| 307 } | 311 } |
| 308 | 312 |
| 313 // Assertions around attached window resize dragging from the right with 2 |
| 314 // windows. |
| 315 TEST_F(WorkspaceWindowResizerTest, AttachedResize_RIGHT_2) { |
| 316 window_->SetBounds(gfx::Rect(0, 300, 400, 300)); |
| 317 window2_->SetBounds(gfx::Rect(400, 200, 100, 200)); |
| 318 |
| 319 std::vector<aura::Window*> windows; |
| 320 windows.push_back(window2_.get()); |
| 321 scoped_ptr<WorkspaceWindowResizer> resizer(WorkspaceWindowResizer::Create( |
| 322 window_.get(), gfx::Point(), HTRIGHT, 0, windows)); |
| 323 ASSERT_TRUE(resizer.get()); |
| 324 // Move it 100 to the right, which should expand w1 and push w2. |
| 325 resizer->Drag(CalculateDragPoint(*resizer, 100, 10)); |
| 326 EXPECT_EQ("0,300 500x300", window_->bounds().ToString()); |
| 327 EXPECT_EQ("500,200 100x200", window2_->bounds().ToString()); |
| 328 |
| 329 // Push off the screen, w2 should be resized to its min. |
| 330 delegate2_.set_min_size(gfx::Size(20, 20)); |
| 331 resizer->Drag(CalculateDragPoint(*resizer, 800, 20)); |
| 332 EXPECT_EQ("0,300 780x300", window_->bounds().ToString()); |
| 333 EXPECT_EQ("780,200 20x200", window2_->bounds().ToString()); |
| 334 |
| 335 // Move back to 100 and verify w2 gets its original size. |
| 336 resizer->Drag(CalculateDragPoint(*resizer, 100, 10)); |
| 337 EXPECT_EQ("0,300 500x300", window_->bounds().ToString()); |
| 338 EXPECT_EQ("500,200 100x200", window2_->bounds().ToString()); |
| 339 |
| 340 // Revert and make sure everything moves back. |
| 341 resizer->Drag(CalculateDragPoint(*resizer, 800, 20)); |
| 342 resizer->RevertDrag(); |
| 343 EXPECT_EQ("0,300 400x300", window_->bounds().ToString()); |
| 344 EXPECT_EQ("400,200 100x200", window2_->bounds().ToString()); |
| 345 } |
| 346 |
| 347 // Makes sure we remember the size of an attached window across drags when |
| 348 // compressing. |
| 349 TEST_F(WorkspaceWindowResizerTest, AttachedResize_RIGHT_2_REMEMBER) { |
| 350 window_->SetBounds(gfx::Rect(0, 300, 400, 300)); |
| 351 window2_->SetBounds(gfx::Rect(400, 200, 100, 200)); |
| 352 |
| 353 std::vector<aura::Window*> windows; |
| 354 windows.push_back(window2_.get()); |
| 355 |
| 356 { |
| 357 delegate2_.set_min_size(gfx::Size(20, 20)); |
| 358 scoped_ptr<WorkspaceWindowResizer> resizer(WorkspaceWindowResizer::Create( |
| 359 window_.get(), gfx::Point(), HTRIGHT, 0, windows)); |
| 360 ASSERT_TRUE(resizer.get()); |
| 361 // Resize enough to slightly compress w2. |
| 362 resizer->Drag(CalculateDragPoint(*resizer, 350, 10)); |
| 363 EXPECT_EQ("0,300 750x300", window_->bounds().ToString()); |
| 364 EXPECT_EQ("750,200 50x200", window2_->bounds().ToString()); |
| 365 |
| 366 // Compress w2 a bit more. |
| 367 resizer->Drag(CalculateDragPoint(*resizer, 400, 10)); |
| 368 EXPECT_EQ("0,300 780x300", window_->bounds().ToString()); |
| 369 EXPECT_EQ("780,200 20x200", window2_->bounds().ToString()); |
| 370 |
| 371 resizer->CompleteDrag(); |
| 372 } |
| 373 |
| 374 // Restart drag and drag back 200, making sure window2 goes back to 200. |
| 375 { |
| 376 scoped_ptr<WorkspaceWindowResizer> resizer(WorkspaceWindowResizer::Create( |
| 377 window_.get(), gfx::Point(), HTRIGHT, 0, windows)); |
| 378 ASSERT_TRUE(resizer.get()); |
| 379 resizer->Drag(CalculateDragPoint(*resizer, -200, 10)); |
| 380 EXPECT_EQ("0,300 580x300", window_->bounds().ToString()); |
| 381 EXPECT_EQ("580,200 100x200", window2_->bounds().ToString()); |
| 382 } |
| 383 } |
| 384 |
| 385 // Assertions around attached window resize dragging from the right with 3 |
| 386 // windows. |
| 387 TEST_F(WorkspaceWindowResizerTest, AttachedResize_RIGHT_3) { |
| 388 window_->SetBounds(gfx::Rect( 100, 300, 200, 300)); |
| 389 window2_->SetBounds(gfx::Rect(300, 300, 150, 200)); |
| 390 window3_->SetBounds(gfx::Rect(450, 300, 100, 200)); |
| 391 delegate2_.set_min_size(gfx::Size(52, 50)); |
| 392 delegate3_.set_min_size(gfx::Size(38, 50)); |
| 393 |
| 394 std::vector<aura::Window*> windows; |
| 395 windows.push_back(window2_.get()); |
| 396 windows.push_back(window3_.get()); |
| 397 scoped_ptr<WorkspaceWindowResizer> resizer(WorkspaceWindowResizer::Create( |
| 398 window_.get(), gfx::Point(), HTRIGHT, 10, windows)); |
| 399 ASSERT_TRUE(resizer.get()); |
| 400 // Move it 100 to the right, which should expand w1 and push w2 and w3. |
| 401 resizer->Drag(CalculateDragPoint(*resizer, 100, -10)); |
| 402 EXPECT_EQ("100,300 300x300", window_->bounds().ToString()); |
| 403 EXPECT_EQ("400,300 150x200", window2_->bounds().ToString()); |
| 404 EXPECT_EQ("550,300 100x200", window3_->bounds().ToString()); |
| 405 |
| 406 // Move it 296, which should now snap to grid and things should compress. |
| 407 resizer->Drag(CalculateDragPoint(*resizer, 296, -10)); |
| 408 EXPECT_EQ("100,300 500x300", window_->bounds().ToString()); |
| 409 EXPECT_EQ("600,300 120x200", window2_->bounds().ToString()); |
| 410 EXPECT_EQ("720,300 80x200", window3_->bounds().ToString()); |
| 411 |
| 412 // Move it so much everything ends up at it's min. |
| 413 resizer->Drag(CalculateDragPoint(*resizer, 798, 50)); |
| 414 EXPECT_EQ("100,300 600x300", window_->bounds().ToString()); |
| 415 EXPECT_EQ("700,300 60x200", window2_->bounds().ToString()); |
| 416 EXPECT_EQ("760,300 40x200", window3_->bounds().ToString()); |
| 417 |
| 418 // Revert and make sure everything moves back. |
| 419 resizer->RevertDrag(); |
| 420 EXPECT_EQ("100,300 200x300", window_->bounds().ToString()); |
| 421 EXPECT_EQ("300,300 150x200", window2_->bounds().ToString()); |
| 422 EXPECT_EQ("450,300 100x200", window3_->bounds().ToString()); |
| 423 } |
| 424 |
| 425 TEST_F(WorkspaceWindowResizerTest, AttachedResize_RIGHT_RememberWidth) { |
| 426 window_->SetBounds(gfx::Rect( 100, 300, 200, 300)); |
| 427 window2_->SetBounds(gfx::Rect(300, 300, 150, 200)); |
| 428 window3_->SetBounds(gfx::Rect(450, 300, 100, 200)); |
| 429 delegate2_.set_min_size(gfx::Size(52, 50)); |
| 430 delegate3_.set_min_size(gfx::Size(38, 50)); |
| 431 |
| 432 std::vector<aura::Window*> windows; |
| 433 windows.push_back(window2_.get()); |
| 434 windows.push_back(window3_.get()); |
| 435 |
| 436 { |
| 437 scoped_ptr<WorkspaceWindowResizer> resizer(WorkspaceWindowResizer::Create( |
| 438 window_.get(), gfx::Point(), HTRIGHT, 10, windows)); |
| 439 ASSERT_TRUE(resizer.get()); |
| 440 // Move it 100 to the right, which should expand w1 and push w2 and w3. |
| 441 resizer->Drag(CalculateDragPoint(*resizer, 100, -10)); |
| 442 EXPECT_EQ("100,300 300x300", window_->bounds().ToString()); |
| 443 EXPECT_EQ("400,300 150x200", window2_->bounds().ToString()); |
| 444 EXPECT_EQ("550,300 100x200", window3_->bounds().ToString()); |
| 445 |
| 446 // Move it so much everything ends up at it's min. |
| 447 resizer->Drag(CalculateDragPoint(*resizer, 798, 50)); |
| 448 EXPECT_EQ("100,300 600x300", window_->bounds().ToString()); |
| 449 EXPECT_EQ("700,300 60x200", window2_->bounds().ToString()); |
| 450 EXPECT_EQ("760,300 40x200", window3_->bounds().ToString()); |
| 451 } |
| 452 |
| 453 { |
| 454 scoped_ptr<WorkspaceWindowResizer> resizer(WorkspaceWindowResizer::Create( |
| 455 window_.get(), gfx::Point(), HTRIGHT, 10, windows)); |
| 456 ASSERT_TRUE(resizer.get()); |
| 457 |
| 458 resizer->Drag(CalculateDragPoint(*resizer, -100, 50)); |
| 459 EXPECT_EQ("100,300 500x300", window_->bounds().ToString()); |
| 460 EXPECT_EQ("600,300 120x200", window2_->bounds().ToString()); |
| 461 EXPECT_EQ("720,300 80x200", window3_->bounds().ToString()); |
| 462 |
| 463 // Move it 300 to the left. |
| 464 resizer->Drag(CalculateDragPoint(*resizer, -300, 50)); |
| 465 EXPECT_EQ("100,300 300x300", window_->bounds().ToString()); |
| 466 EXPECT_EQ("400,300 150x200", window2_->bounds().ToString()); |
| 467 EXPECT_EQ("550,300 100x200", window3_->bounds().ToString()); |
| 468 } |
| 469 |
| 470 } |
| 471 |
| 472 // Assertions around attached window resize dragging from the bottom with 2 |
| 473 // windows. |
| 474 TEST_F(WorkspaceWindowResizerTest, AttachedResize_BOTTOM_2) { |
| 475 window_->SetBounds(gfx::Rect( 0, 50, 400, 200)); |
| 476 window2_->SetBounds(gfx::Rect(0, 250, 200, 100)); |
| 477 |
| 478 std::vector<aura::Window*> windows; |
| 479 windows.push_back(window2_.get()); |
| 480 scoped_ptr<WorkspaceWindowResizer> resizer(WorkspaceWindowResizer::Create( |
| 481 window_.get(), gfx::Point(), HTBOTTOM, 0, windows)); |
| 482 ASSERT_TRUE(resizer.get()); |
| 483 // Move it 100 to the bottom, which should expand w1 and push w2. |
| 484 resizer->Drag(CalculateDragPoint(*resizer, 10, 100)); |
| 485 EXPECT_EQ("0,50 400x300", window_->bounds().ToString()); |
| 486 EXPECT_EQ("0,350 200x100", window2_->bounds().ToString()); |
| 487 |
| 488 // Push off the screen, w2 should be resized to its min. |
| 489 delegate2_.set_min_size(gfx::Size(20, 20)); |
| 490 resizer->Drag(CalculateDragPoint(*resizer, 50, 820)); |
| 491 EXPECT_EQ("0,50 400x530", window_->bounds().ToString()); |
| 492 EXPECT_EQ("0,580 200x20", window2_->bounds().ToString()); |
| 493 |
| 494 // Move back to 100 and verify w2 gets its original size. |
| 495 resizer->Drag(CalculateDragPoint(*resizer, 10, 100)); |
| 496 EXPECT_EQ("0,50 400x300", window_->bounds().ToString()); |
| 497 EXPECT_EQ("0,350 200x100", window2_->bounds().ToString()); |
| 498 |
| 499 // Revert and make sure everything moves back. |
| 500 resizer->Drag(CalculateDragPoint(*resizer, 800, 20)); |
| 501 resizer->RevertDrag(); |
| 502 EXPECT_EQ("0,50 400x200", window_->bounds().ToString()); |
| 503 EXPECT_EQ("0,250 200x100", window2_->bounds().ToString()); |
| 504 } |
| 505 |
| 506 // Makes sure we remember the size of an attached window across drags when |
| 507 // compressing. |
| 508 TEST_F(WorkspaceWindowResizerTest, AttachedResize_BOTTOM_2_REMEMBER) { |
| 509 window_->SetBounds(gfx::Rect( 0, 0, 400, 300)); |
| 510 window2_->SetBounds(gfx::Rect(40, 300, 100, 200)); |
| 511 |
| 512 std::vector<aura::Window*> windows; |
| 513 windows.push_back(window2_.get()); |
| 514 |
| 515 { |
| 516 delegate2_.set_min_size(gfx::Size(20, 20)); |
| 517 scoped_ptr<WorkspaceWindowResizer> resizer(WorkspaceWindowResizer::Create( |
| 518 window_.get(), gfx::Point(), HTBOTTOM, 0, windows)); |
| 519 ASSERT_TRUE(resizer.get()); |
| 520 // Resize enough to slightly compress w2. |
| 521 resizer->Drag(CalculateDragPoint(*resizer, 10, 150)); |
| 522 EXPECT_EQ("0,0 400x450", window_->bounds().ToString()); |
| 523 EXPECT_EQ("40,450 100x150", window2_->bounds().ToString()); |
| 524 |
| 525 // Compress w2 a bit more. |
| 526 resizer->Drag(CalculateDragPoint(*resizer, 5, 400)); |
| 527 EXPECT_EQ("0,0 400x580", window_->bounds().ToString()); |
| 528 EXPECT_EQ("40,580 100x20", window2_->bounds().ToString()); |
| 529 |
| 530 resizer->CompleteDrag(); |
| 531 } |
| 532 |
| 533 // Restart drag and drag back 200, making sure window2 goes back to 200. |
| 534 { |
| 535 scoped_ptr<WorkspaceWindowResizer> resizer(WorkspaceWindowResizer::Create( |
| 536 window_.get(), gfx::Point(), HTBOTTOM, 0, windows)); |
| 537 ASSERT_TRUE(resizer.get()); |
| 538 resizer->Drag(CalculateDragPoint(*resizer, -10, -200)); |
| 539 EXPECT_EQ("0,0 400x380", window_->bounds().ToString()); |
| 540 EXPECT_EQ("40,380 100x200", window2_->bounds().ToString()); |
| 541 } |
| 542 } |
| 543 |
| 544 // Assertions around attached window resize dragging from the bottom with 3 |
| 545 // windows. |
| 546 TEST_F(WorkspaceWindowResizerTest, AttachedResize_BOTTOM_3) { |
| 547 aura::RootWindow* root = Shell::GetInstance()->GetRootWindow(); |
| 548 root->SetBounds(gfx::Rect(0, 0, 600, 800)); |
| 549 root->SetScreenWorkAreaInsets(gfx::Insets()); |
| 550 |
| 551 window_->SetBounds(gfx::Rect( 300, 100, 300, 200)); |
| 552 window2_->SetBounds(gfx::Rect(300, 300, 200, 150)); |
| 553 window3_->SetBounds(gfx::Rect(300, 450, 200, 100)); |
| 554 delegate2_.set_min_size(gfx::Size(50, 52)); |
| 555 delegate3_.set_min_size(gfx::Size(50, 38)); |
| 556 |
| 557 std::vector<aura::Window*> windows; |
| 558 windows.push_back(window2_.get()); |
| 559 windows.push_back(window3_.get()); |
| 560 scoped_ptr<WorkspaceWindowResizer> resizer(WorkspaceWindowResizer::Create( |
| 561 window_.get(), gfx::Point(), HTBOTTOM, 10, windows)); |
| 562 ASSERT_TRUE(resizer.get()); |
| 563 // Move it 100 to the right, which should expand w1 and push w2 and w3. |
| 564 resizer->Drag(CalculateDragPoint(*resizer, -10, 100)); |
| 565 EXPECT_EQ("300,100 300x300", window_->bounds().ToString()); |
| 566 EXPECT_EQ("300,400 200x150", window2_->bounds().ToString()); |
| 567 EXPECT_EQ("300,550 200x100", window3_->bounds().ToString()); |
| 568 |
| 569 // Move it 296, which should now snap to grid and things should compress. |
| 570 resizer->Drag(CalculateDragPoint(*resizer, -10, 296)); |
| 571 EXPECT_EQ("300,100 300x500", window_->bounds().ToString()); |
| 572 EXPECT_EQ("300,600 200x120", window2_->bounds().ToString()); |
| 573 EXPECT_EQ("300,720 200x80", window3_->bounds().ToString()); |
| 574 |
| 575 // Move it so much everything ends up at it's min. |
| 576 resizer->Drag(CalculateDragPoint(*resizer, 50, 798)); |
| 577 EXPECT_EQ("300,100 300x600", window_->bounds().ToString()); |
| 578 EXPECT_EQ("300,700 200x60", window2_->bounds().ToString()); |
| 579 EXPECT_EQ("300,760 200x40", window3_->bounds().ToString()); |
| 580 |
| 581 // Revert and make sure everything moves back. |
| 582 resizer->RevertDrag(); |
| 583 EXPECT_EQ("300,100 300x200", window_->bounds().ToString()); |
| 584 EXPECT_EQ("300,300 200x150", window2_->bounds().ToString()); |
| 585 EXPECT_EQ("300,450 200x100", window3_->bounds().ToString()); |
| 586 } |
| 587 |
| 588 TEST_F(WorkspaceWindowResizerTest, AttachedResize_BOTTOM_RememberHeight) { |
| 589 aura::RootWindow* root = Shell::GetInstance()->GetRootWindow(); |
| 590 root->SetBounds(gfx::Rect(0, 0, 600, 800)); |
| 591 root->SetScreenWorkAreaInsets(gfx::Insets()); |
| 592 |
| 593 window_->SetBounds(gfx::Rect( 300, 100, 300, 200)); |
| 594 window2_->SetBounds(gfx::Rect(300, 300, 200, 150)); |
| 595 window3_->SetBounds(gfx::Rect(300, 450, 200, 100)); |
| 596 delegate2_.set_min_size(gfx::Size(50, 52)); |
| 597 delegate3_.set_min_size(gfx::Size(50, 38)); |
| 598 |
| 599 std::vector<aura::Window*> windows; |
| 600 windows.push_back(window2_.get()); |
| 601 windows.push_back(window3_.get()); |
| 602 |
| 603 { |
| 604 scoped_ptr<WorkspaceWindowResizer> resizer(WorkspaceWindowResizer::Create( |
| 605 window_.get(), gfx::Point(), HTBOTTOM, 10, windows)); |
| 606 ASSERT_TRUE(resizer.get()); |
| 607 // Move it 100 to the bottom, which should expand w1 and push w2 and w3. |
| 608 resizer->Drag(CalculateDragPoint(*resizer, -10, 100)); |
| 609 EXPECT_EQ("300,100 300x300", window_->bounds().ToString()); |
| 610 EXPECT_EQ("300,400 200x150", window2_->bounds().ToString()); |
| 611 EXPECT_EQ("300,550 200x100", window3_->bounds().ToString()); |
| 612 |
| 613 // Move it so much everything ends up at it's min. |
| 614 resizer->Drag(CalculateDragPoint(*resizer, 50, 798)); |
| 615 EXPECT_EQ("300,100 300x600", window_->bounds().ToString()); |
| 616 EXPECT_EQ("300,700 200x60", window2_->bounds().ToString()); |
| 617 EXPECT_EQ("300,760 200x40", window3_->bounds().ToString()); |
| 618 } |
| 619 |
| 620 { |
| 621 scoped_ptr<WorkspaceWindowResizer> resizer(WorkspaceWindowResizer::Create( |
| 622 window_.get(), gfx::Point(), HTBOTTOM, 10, windows)); |
| 623 ASSERT_TRUE(resizer.get()); |
| 624 |
| 625 resizer->Drag(CalculateDragPoint(*resizer, 50, -100)); |
| 626 EXPECT_EQ("300,100 300x500", window_->bounds().ToString()); |
| 627 EXPECT_EQ("300,600 200x120", window2_->bounds().ToString()); |
| 628 EXPECT_EQ("300,720 200x80", window3_->bounds().ToString()); |
| 629 |
| 630 // Move it 300 up. |
| 631 resizer->Drag(CalculateDragPoint(*resizer, 50, -300)); |
| 632 EXPECT_EQ("300,100 300x300", window_->bounds().ToString()); |
| 633 EXPECT_EQ("300,400 200x150", window2_->bounds().ToString()); |
| 634 EXPECT_EQ("300,550 200x100", window3_->bounds().ToString()); |
| 635 } |
| 636 |
| 637 } |
| 638 |
| 309 } // namespace | 639 } // namespace |
| 310 } // namespace test | 640 } // namespace test |
| 311 } // namespace aura | 641 } // namespace aura |
| OLD | NEW |