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

Side by Side Diff: ui/aura_shell/workspace/workspace_manager_unittest.cc

Issue 8391035: Drag and rotate windows (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: addressed comment Created 9 years, 1 month ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch | Annotate | Revision Log
« no previous file with comments | « ui/aura_shell/workspace/workspace_manager.cc ('k') | no next file » | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 // Copyright (c) 2011 The Chromium Authors. All rights reserved. 1 // Copyright (c) 2011 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 "ui/aura_shell/workspace/workspace_manager.h" 5 #include "ui/aura_shell/workspace/workspace_manager.h"
6 #include "ui/aura_shell/workspace/workspace.h" 6 #include "ui/aura_shell/workspace/workspace.h"
7 7
8 #include "ui/aura/test/aura_test_base.h" 8 #include "ui/aura/test/aura_test_base.h"
9 #include "ui/aura/test/test_desktop_delegate.h" 9 #include "ui/aura/test/test_desktop_delegate.h"
10 #include "ui/aura/desktop.h" 10 #include "ui/aura/desktop.h"
11 #include "ui/aura/screen_aura.h" 11 #include "ui/aura/screen_aura.h"
12 #include "ui/aura/window.h" 12 #include "ui/aura/window.h"
13 13
14 namespace { 14 namespace {
15 15
16 class WorkspaceManagerTestBase : public aura::test::AuraTestBase { 16 class WorkspaceManagerTestBase : public aura::test::AuraTestBase {
17 public: 17 public:
18 WorkspaceManagerTestBase() {}
19 virtual ~WorkspaceManagerTestBase() {}
20
21 virtual void SetUp() OVERRIDE {
22 aura::test::AuraTestBase::SetUp();
23 manager_.reset(new aura_shell::WorkspaceManager(viewport()));
24 }
25
26 virtual void TearDown() OVERRIDE {
27 manager_.reset();
28 aura::test::AuraTestBase::TearDown();
29 }
30
18 aura::Window* CreateTestWindow() { 31 aura::Window* CreateTestWindow() {
19 aura::Window* window = new aura::Window(NULL); 32 aura::Window* window = new aura::Window(NULL);
20 window->Init(ui::Layer::LAYER_HAS_NO_TEXTURE); 33 window->Init(ui::Layer::LAYER_HAS_NO_TEXTURE);
21 return window; 34 return window;
22 } 35 }
23 36
24 aura::Window* viewport() { 37 aura::Window* viewport() {
25 return GetTestDesktopDelegate()->default_container(); 38 return GetTestDesktopDelegate()->default_container();
26 } 39 }
40 scoped_ptr<aura_shell::WorkspaceManager> manager_;
41
42 private:
43 DISALLOW_COPY_AND_ASSIGN(WorkspaceManagerTestBase);
27 }; 44 };
28 45
29 } // namespace 46 } // namespace
30 47
31 namespace aura_shell { 48 namespace aura_shell {
32 49
33 using aura::Window; 50 using aura::Window;
34 using aura_shell::Workspace; 51 using aura_shell::Workspace;
35 using aura_shell::WorkspaceManager; 52 using aura_shell::WorkspaceManager;
36 53
37 class WorkspaceManagerTest : public WorkspaceManagerTestBase { 54 class WorkspaceManagerTest : public WorkspaceManagerTestBase {
38 }; 55 };
39 56
40 TEST_F(WorkspaceManagerTest, WorkspaceManagerCreateAddFind) { 57 TEST_F(WorkspaceManagerTest, WorkspaceManagerCreateAddFind) {
41 WorkspaceManager manager(viewport());
42 scoped_ptr<Window> w1(CreateTestWindow()); 58 scoped_ptr<Window> w1(CreateTestWindow());
43 scoped_ptr<Window> w2(CreateTestWindow()); 59 scoped_ptr<Window> w2(CreateTestWindow());
44 60
45 Workspace* ws1 = manager.CreateWorkspace(); 61 Workspace* ws1 = manager_->CreateWorkspace();
46 ws1->AddWindowAfter(w1.get(), NULL); 62 ws1->AddWindowAfter(w1.get(), NULL);
47 // w2 is not a part of any workspace yet. 63 // w2 is not a part of any workspace yet.
48 EXPECT_EQ(NULL, manager.FindBy(w2.get())); 64 EXPECT_EQ(NULL, manager_->FindBy(w2.get()));
49 65
50 // w2 is in ws2 workspace. 66 // w2 is in ws2 workspace.
51 Workspace* ws2 = manager.CreateWorkspace(); 67 Workspace* ws2 = manager_->CreateWorkspace();
52 ws2->AddWindowAfter(w2.get(), NULL); 68 ws2->AddWindowAfter(w2.get(), NULL);
53 EXPECT_EQ(ws2, manager.FindBy(w2.get())); 69 EXPECT_EQ(ws2, manager_->FindBy(w2.get()));
54 70
55 // Make sure |FindBy(w1.get())| still returns 71 // Make sure |FindBy(w1.get())| still returns
56 // correct workspace. 72 // correct workspace.
57 EXPECT_EQ(ws1, manager.FindBy(w1.get())); 73 EXPECT_EQ(ws1, manager_->FindBy(w1.get()));
58 74
59 // once workspace is gone, w2 shouldn't match 75 // once workspace is gone, w2 shouldn't match
60 // any workspace. 76 // any workspace.
61 delete ws2; 77 delete ws2;
62 EXPECT_EQ(NULL, manager.FindBy(w2.get())); 78 EXPECT_EQ(NULL, manager_->FindBy(w2.get()));
79
80 // Reset now before windows are destroyed.
81 manager_.reset();
63 } 82 }
64 83
65 TEST_F(WorkspaceManagerTest, LayoutWorkspaces) { 84 TEST_F(WorkspaceManagerTest, LayoutWorkspaces) {
66 WorkspaceManager manager(viewport()); 85 manager_->workspace_size_ = gfx::Size(100, 100);
67 manager.workspace_size_ = gfx::Size(100, 100); 86 manager_->LayoutWorkspaces();
68 manager.LayoutWorkspaces();
69 EXPECT_EQ("0,0 100x100", viewport()->bounds().ToString()); 87 EXPECT_EQ("0,0 100x100", viewport()->bounds().ToString());
70 88
71 Workspace* ws1 = manager.CreateWorkspace(); 89 Workspace* ws1 = manager_->CreateWorkspace();
72 manager.LayoutWorkspaces(); 90 manager_->LayoutWorkspaces();
73 91
74 // ws1 is laied out in left most position. 92 // ws1 is laied out in left most position.
75 EXPECT_EQ(100, viewport()->bounds().width()); 93 EXPECT_EQ(100, viewport()->bounds().width());
76 EXPECT_EQ("0,0 100x100", ws1->bounds().ToString()); 94 EXPECT_EQ("0,0 100x100", ws1->bounds().ToString());
77 95
78 // ws2 is laied out next to ws1, with 50 margin. 96 // ws2 is laied out next to ws1, with 50 margin.
79 Workspace* ws2 = manager.CreateWorkspace(); 97 Workspace* ws2 = manager_->CreateWorkspace();
80 manager.LayoutWorkspaces(); 98 manager_->LayoutWorkspaces();
81 99
82 EXPECT_EQ(250, viewport()->bounds().width()); 100 EXPECT_EQ(250, viewport()->bounds().width());
83 EXPECT_EQ("0,0 100x100", ws1->bounds().ToString()); 101 EXPECT_EQ("0,0 100x100", ws1->bounds().ToString());
84 EXPECT_EQ("150,0 100x100", ws2->bounds().ToString()); 102 EXPECT_EQ("150,0 100x100", ws2->bounds().ToString());
85 } 103 }
86 104
87 TEST_F(WorkspaceManagerTest, WorkspaceManagerDragArea) { 105 TEST_F(WorkspaceManagerTest, WorkspaceManagerDragArea) {
88 aura::Desktop::GetInstance()->screen()->set_work_area_insets( 106 aura::Desktop::GetInstance()->screen()->set_work_area_insets(
89 gfx::Insets(10, 10, 10, 10)); 107 gfx::Insets(10, 10, 10, 10));
90
91 WorkspaceManager manager(viewport());
92 viewport()->SetBounds(gfx::Rect(0, 0, 200, 200)); 108 viewport()->SetBounds(gfx::Rect(0, 0, 200, 200));
93 EXPECT_EQ("10,10 180x180", manager.GetDragAreaBounds().ToString()); 109 EXPECT_EQ("10,10 180x180", manager_->GetDragAreaBounds().ToString());
94 } 110 }
95 111
96 TEST_F(WorkspaceManagerTest, Overview) { 112 TEST_F(WorkspaceManagerTest, Overview) {
97 WorkspaceManager manager(viewport()); 113 manager_->workspace_size_ = gfx::Size(500, 300);
98 manager.workspace_size_ = gfx::Size(500, 300);
99 114
100 // Creating two workspaces, ws1 which contains window w1, 115 // Creating two workspaces, ws1 which contains window w1,
101 // and ws2 which contains window w2. 116 // and ws2 which contains window w2.
102 Workspace* ws1 = manager.CreateWorkspace(); 117 Workspace* ws1 = manager_->CreateWorkspace();
103 scoped_ptr<Window> w1(CreateTestWindow()); 118 scoped_ptr<Window> w1(CreateTestWindow());
104 viewport()->AddChild(w1.get()); 119 viewport()->AddChild(w1.get());
105 EXPECT_TRUE(ws1->AddWindowAfter(w1.get(), NULL)); 120 EXPECT_TRUE(ws1->AddWindowAfter(w1.get(), NULL));
106 121
107 Workspace* ws2 = manager.CreateWorkspace(); 122 Workspace* ws2 = manager_->CreateWorkspace();
108 scoped_ptr<Window> w2(CreateTestWindow()); 123 scoped_ptr<Window> w2(CreateTestWindow());
109 viewport()->AddChild(w2.get()); 124 viewport()->AddChild(w2.get());
110 EXPECT_TRUE(ws2->AddWindowAfter(w2.get(), NULL)); 125 EXPECT_TRUE(ws2->AddWindowAfter(w2.get(), NULL));
111 126
112 // Activating a window switches the active workspace. 127 // Activating a window switches the active workspace.
113 w2->Activate(); 128 w2->Activate();
114 EXPECT_EQ(ws2, manager.GetActiveWorkspace()); 129 EXPECT_EQ(ws2, manager_->GetActiveWorkspace());
115 130
116 // The size of viewport() is now ws1(500) + ws2(500) + margin(50). 131 // The size of viewport() is now ws1(500) + ws2(500) + margin(50).
117 EXPECT_EQ("0,0 1050x300", viewport()->bounds().ToString()); 132 EXPECT_EQ("0,0 1050x300", viewport()->bounds().ToString());
118 EXPECT_FALSE(manager.is_overview()); 133 EXPECT_FALSE(manager_->is_overview());
119 manager.SetOverview(true); 134 manager_->SetOverview(true);
120 EXPECT_TRUE(manager.is_overview()); 135 EXPECT_TRUE(manager_->is_overview());
121 136
122 // Switching overview mode doesn't change the active workspace. 137 // Switching overview mode doesn't change the active workspace.
123 EXPECT_EQ(ws2, manager.GetActiveWorkspace()); 138 EXPECT_EQ(ws2, manager_->GetActiveWorkspace());
124 139
125 // Activaing window w1 switches the active window and 140 // Activaing window w1 switches the active window and
126 // the mode back to normal mode. 141 // the mode back to normal mode.
127 w1->Activate(); 142 w1->Activate();
128 EXPECT_EQ(ws1, manager.GetActiveWorkspace()); 143 EXPECT_EQ(ws1, manager_->GetActiveWorkspace());
129 EXPECT_FALSE(manager.is_overview()); 144 EXPECT_FALSE(manager_->is_overview());
130 145
131 // Deleting w1 without DesktopDelegate resets the active workspace 146 // Deleting w1 without DesktopDelegate resets the active workspace
132 ws1->RemoveWindow(w1.get()); 147 ws1->RemoveWindow(w1.get());
133 delete ws1; 148 delete ws1;
134 w1.reset(); 149 w1.reset();
135 EXPECT_EQ(NULL, manager.GetActiveWorkspace()); 150 EXPECT_EQ(NULL, manager_->GetActiveWorkspace());
136
137 EXPECT_EQ("0,0 500x300", viewport()->bounds().ToString()); 151 EXPECT_EQ("0,0 500x300", viewport()->bounds().ToString());
138 ws2->RemoveWindow(w2.get()); 152 ws2->RemoveWindow(w2.get());
139 delete ws2; 153 delete ws2;
140 // The size of viewport() for no workspace case must be 154 // The size of viewport() for no workspace case must be
141 // same as one viewport() case. 155 // same as one viewport() case.
142 EXPECT_EQ("0,0 500x300", viewport()->bounds().ToString()); 156 EXPECT_EQ("0,0 500x300", viewport()->bounds().ToString());
157
158 // Reset now before windows are destroyed.
159 manager_.reset();
143 } 160 }
144 161
145 TEST_F(WorkspaceManagerTest, WorkspaceManagerActivate) { 162 TEST_F(WorkspaceManagerTest, WorkspaceManagerActivate) {
146 WorkspaceManager manager(viewport()); 163 Workspace* ws1 = manager_->CreateWorkspace();
147 Workspace* ws1 = manager.CreateWorkspace(); 164 Workspace* ws2 = manager_->CreateWorkspace();
148 Workspace* ws2 = manager.CreateWorkspace(); 165 EXPECT_EQ(NULL, manager_->GetActiveWorkspace());
149 EXPECT_EQ(NULL, manager.GetActiveWorkspace());
150 166
151 // Activate ws1. 167 // Activate ws1.
152 ws1->Activate(); 168 ws1->Activate();
153 EXPECT_EQ(ws1, manager.GetActiveWorkspace()); 169 EXPECT_EQ(ws1, manager_->GetActiveWorkspace());
154 170
155 // Activate ws2. 171 // Activate ws2.
156 ws2->Activate(); 172 ws2->Activate();
157 EXPECT_EQ(ws2, manager.GetActiveWorkspace()); 173 EXPECT_EQ(ws2, manager_->GetActiveWorkspace());
158 174
159 // Deleting active workspace sets active workspace to NULL. 175 // Deleting active workspace sets active workspace to NULL.
160 delete ws2; 176 delete ws2;
161 EXPECT_EQ(NULL, manager.GetActiveWorkspace()); 177 EXPECT_EQ(NULL, manager_->GetActiveWorkspace());
178 manager_.reset();
179 }
180
181 TEST_F(WorkspaceManagerTest, FindRotateWindow) {
182 manager_->workspace_size_ = gfx::Size(500, 300);
183
184 Workspace* ws1 = manager_->CreateWorkspace();
185 scoped_ptr<Window> w11(CreateTestWindow());
186 w11->SetBounds(gfx::Rect(0, 0, 100, 100));
187 ws1->AddWindowAfter(w11.get(), NULL);
188
189 scoped_ptr<Window> w12(CreateTestWindow());
190 w12->SetBounds(gfx::Rect(0, 0, 100, 100));
191 ws1->AddWindowAfter(w12.get(), NULL);
192 manager_->LayoutWorkspaces();
193
194 // Workspaces are 0-empt-145-w11-245-margin-265-365-500.
195 EXPECT_EQ(NULL, manager_->FindRotateWindowForLocation(gfx::Point(0, 0)));
196 EXPECT_EQ(NULL, manager_->FindRotateWindowForLocation(gfx::Point(100, 0)));
197 EXPECT_EQ(w11.get(),
198 manager_->FindRotateWindowForLocation(gfx::Point(150, 0)));
199 EXPECT_EQ(w12.get(),
200 manager_->FindRotateWindowForLocation(gfx::Point(300, 0)));
201 EXPECT_EQ(NULL, manager_->FindRotateWindowForLocation(gfx::Point(400, 0)));
202
203 w11->SetBounds(gfx::Rect(0, 0, 400, 100));
204 w12->SetBounds(gfx::Rect(0, 0, 200, 100));
205 manager_->LayoutWorkspaces();
206 EXPECT_EQ(w11.get(),
207 manager_->FindRotateWindowForLocation(gfx::Point(10, 0)));
208 EXPECT_EQ(w11.get(),
209 manager_->FindRotateWindowForLocation(gfx::Point(240, 0)));
210 EXPECT_EQ(w12.get(),
211 manager_->FindRotateWindowForLocation(gfx::Point(260, 0)));
212 EXPECT_EQ(w12.get(),
213 manager_->FindRotateWindowForLocation(gfx::Point(490, 0)));
214
215 Workspace* ws2 = manager_->CreateWorkspace();
216 scoped_ptr<Window> w21(CreateTestWindow());
217 w21->SetBounds(gfx::Rect(0, 0, 100, 100));
218 ws2->AddWindowAfter(w21.get(), NULL);
219 manager_->LayoutWorkspaces();
220
221 // 2nd workspace starts from 500+50 and the window is centered 750-850.
222 EXPECT_EQ(NULL, manager_->FindRotateWindowForLocation(gfx::Point(600, 0)));
223 EXPECT_EQ(NULL, manager_->FindRotateWindowForLocation(gfx::Point(740, 0)));
224 EXPECT_EQ(w21.get(),
225 manager_->FindRotateWindowForLocation(gfx::Point(760, 0)));
226 EXPECT_EQ(w21.get(),
227 manager_->FindRotateWindowForLocation(gfx::Point(840, 0)));
228 EXPECT_EQ(NULL, manager_->FindRotateWindowForLocation(gfx::Point(860, 0)));
229
230 // Reset now before windows are destroyed.
231 manager_.reset();
232 }
233
234 TEST_F(WorkspaceManagerTest, RotateWindows) {
235 Workspace* ws1 = manager_->CreateWorkspace();
236 Workspace* ws2 = manager_->CreateWorkspace();
237
238 scoped_ptr<Window> w11(CreateTestWindow());
239 ws1->AddWindowAfter(w11.get(), NULL);
240
241 scoped_ptr<Window> w21(CreateTestWindow());
242 scoped_ptr<Window> w22(CreateTestWindow());
243 ws2->AddWindowAfter(w21.get(), NULL);
244 ws2->AddWindowAfter(w22.get(), NULL);
245
246 EXPECT_EQ(0, ws1->GetIndexOf(w11.get()));
247 EXPECT_EQ(0, ws2->GetIndexOf(w21.get()));
248 EXPECT_EQ(1, ws2->GetIndexOf(w22.get()));
249
250 // Rotate right most to left most.
251 manager_->RotateWindows(w22.get(), w11.get());
252
253 EXPECT_EQ(0, ws1->GetIndexOf(w22.get()));
254 EXPECT_EQ(0, ws2->GetIndexOf(w11.get()));
255 EXPECT_EQ(1, ws2->GetIndexOf(w21.get()));
256
257 // Rotate left most to right most.
258 manager_->RotateWindows(w22.get(), w21.get());
259 EXPECT_EQ(0, ws1->GetIndexOf(w11.get()));
260 EXPECT_EQ(0, ws2->GetIndexOf(w21.get()));
261 EXPECT_EQ(1, ws2->GetIndexOf(w22.get()));
262
263 // Rotate left most to 1st element in 2nd workspace.
264 manager_->RotateWindows(w11.get(), w21.get());
265 EXPECT_EQ(0, ws1->GetIndexOf(w21.get()));
266 EXPECT_EQ(0, ws2->GetIndexOf(w11.get()));
267 EXPECT_EQ(1, ws2->GetIndexOf(w22.get()));
268
269 // Rotate middle to right most.
270 manager_->RotateWindows(w11.get(), w22.get());
271 EXPECT_EQ(0, ws1->GetIndexOf(w21.get()));
272 EXPECT_EQ(0, ws2->GetIndexOf(w22.get()));
273 EXPECT_EQ(1, ws2->GetIndexOf(w11.get()));
274
275 // Rotate middle to left most.
276 manager_->RotateWindows(w22.get(), w21.get());
277 EXPECT_EQ(0, ws1->GetIndexOf(w22.get()));
278 EXPECT_EQ(0, ws2->GetIndexOf(w21.get()));
279 EXPECT_EQ(1, ws2->GetIndexOf(w11.get()));
280
281 // Reset now before windows are destroyed.
282 manager_.reset();
162 } 283 }
163 284
164 class WorkspaceTest : public WorkspaceManagerTestBase { 285 class WorkspaceTest : public WorkspaceManagerTestBase {
165 }; 286 };
166 287
167 TEST_F(WorkspaceTest, WorkspaceBasic) { 288 TEST_F(WorkspaceTest, WorkspaceBasic) {
168 WorkspaceManager manager(viewport()); 289 Workspace* ws = manager_->CreateWorkspace();
169
170 Workspace* ws = manager.CreateWorkspace();
171 // Sanity check 290 // Sanity check
172 EXPECT_TRUE(ws->is_empty()); 291 EXPECT_TRUE(ws->is_empty());
173 292
174 scoped_ptr<Window> w1(CreateTestWindow()); 293 scoped_ptr<Window> w1(CreateTestWindow());
175 scoped_ptr<Window> w2(CreateTestWindow()); 294 scoped_ptr<Window> w2(CreateTestWindow());
176 scoped_ptr<Window> w3(CreateTestWindow()); 295 scoped_ptr<Window> w3(CreateTestWindow());
177 // ws is empty and can accomodate new window. 296 // ws is empty and can accomodate new window.
178 EXPECT_TRUE(ws->CanAdd(w1.get())); 297 EXPECT_TRUE(ws->CanAdd(w1.get()));
179 298
180 // Add w1. 299 // Add w1.
(...skipping 19 matching lines...) Expand all
200 // w1 is gone, so no index for w2. 319 // w1 is gone, so no index for w2.
201 ws->RemoveWindow(w1.get()); 320 ws->RemoveWindow(w1.get());
202 EXPECT_EQ(-1, ws->GetIndexOf(w1.get())); 321 EXPECT_EQ(-1, ws->GetIndexOf(w1.get()));
203 EXPECT_EQ(0, ws->GetIndexOf(w2.get())); 322 EXPECT_EQ(0, ws->GetIndexOf(w2.get()));
204 EXPECT_FALSE(ws->Contains(w1.get())); 323 EXPECT_FALSE(ws->Contains(w1.get()));
205 324
206 // Add w1 back. w1 now has index = 1. 325 // Add w1 back. w1 now has index = 1.
207 EXPECT_TRUE(ws->AddWindowAfter(w1.get(), w2.get())); 326 EXPECT_TRUE(ws->AddWindowAfter(w1.get(), w2.get()));
208 EXPECT_EQ(0, ws->GetIndexOf(w2.get())); 327 EXPECT_EQ(0, ws->GetIndexOf(w2.get()));
209 EXPECT_EQ(1, ws->GetIndexOf(w1.get())); 328 EXPECT_EQ(1, ws->GetIndexOf(w1.get()));
329
330 // Reset now before windows are destroyed.
331 manager_.reset();
332 }
333
334 TEST_F(WorkspaceTest, RotateWindows) {
335 size_t orig_max = Workspace::SetMaxWindowsCount(3);
336 Workspace* ws = manager_->CreateWorkspace();
337 scoped_ptr<Window> w1(CreateTestWindow());
338 scoped_ptr<Window> w2(CreateTestWindow());
339 scoped_ptr<Window> w3(CreateTestWindow());
340 ws->AddWindowAfter(w1.get(), NULL);
341 ws->AddWindowAfter(w2.get(), NULL);
342 ws->AddWindowAfter(w3.get(), NULL);
343
344 EXPECT_EQ(0, ws->GetIndexOf(w1.get()));
345 EXPECT_EQ(1, ws->GetIndexOf(w2.get()));
346 EXPECT_EQ(2, ws->GetIndexOf(w3.get()));
347
348 // Rotate to left.
349 ws->RotateWindows(w1.get(), w3.get());
350 EXPECT_EQ(0, ws->GetIndexOf(w2.get()));
351 EXPECT_EQ(1, ws->GetIndexOf(w3.get()));
352 EXPECT_EQ(2, ws->GetIndexOf(w1.get()));
353
354 // Rotate to right.
355 ws->RotateWindows(w1.get(), w2.get());
356 EXPECT_EQ(0, ws->GetIndexOf(w1.get()));
357 EXPECT_EQ(1, ws->GetIndexOf(w2.get()));
358 EXPECT_EQ(2, ws->GetIndexOf(w3.get()));
359
360 // Rotating to the middle from left.
361 ws->RotateWindows(w1.get(), w2.get());
362 EXPECT_EQ(0, ws->GetIndexOf(w2.get()));
363 EXPECT_EQ(1, ws->GetIndexOf(w1.get()));
364 EXPECT_EQ(2, ws->GetIndexOf(w3.get()));
365
366 // Rotating to the middle from right.
367 ws->RotateWindows(w3.get(), w1.get());
368 EXPECT_EQ(0, ws->GetIndexOf(w2.get()));
369 EXPECT_EQ(1, ws->GetIndexOf(w3.get()));
370 EXPECT_EQ(2, ws->GetIndexOf(w1.get()));
371
372 // Reset now before windows are destroyed.
373 manager_.reset();
374 Workspace::SetMaxWindowsCount(orig_max);
375 }
376
377 TEST_F(WorkspaceTest, ShiftWindowsSingle) {
378 Workspace* ws = manager_->CreateWorkspace();
379 // Single window in a workspace case.
380 scoped_ptr<Window> w1(CreateTestWindow());
381 ws->AddWindowAfter(w1.get(), NULL);
382
383 scoped_ptr<Window> w2(CreateTestWindow());
384
385 // Sanity check.
386 EXPECT_EQ(0, ws->GetIndexOf(w1.get()));
387 EXPECT_EQ(-1, ws->GetIndexOf(w2.get()));
388
389 // Insert |w2| at the beginning and shift.
390 aura::Window* overflow =
391 ws->ShiftWindows(
392 w2.get(), w2.get(), NULL, Workspace::SHIFT_TO_RIGHT);
393 EXPECT_EQ(w1.get(), overflow);
394 EXPECT_EQ(-1, ws->GetIndexOf(w1.get()));
395 EXPECT_EQ(0, ws->GetIndexOf(w2.get()));
396
397 // Insert |w1| at the end and shift.
398 overflow = ws->ShiftWindows(
399 w1.get(), w1.get(), NULL, Workspace::SHIFT_TO_LEFT);
400 EXPECT_EQ(w2.get(), overflow);
401 EXPECT_EQ(-1, ws->GetIndexOf(w2.get()));
402 EXPECT_EQ(0, ws->GetIndexOf(w1.get()));
403
404 // Insert |w2| at the begining and shift up to the w1.
405 overflow = ws->ShiftWindows(
406 w2.get(), w1.get(), NULL, Workspace::SHIFT_TO_RIGHT);
407 EXPECT_EQ(NULL, overflow);
408 EXPECT_EQ(-1, ws->GetIndexOf(w1.get()));
409 EXPECT_EQ(0, ws->GetIndexOf(w2.get()));
410
411 // Insert |w1| at the end and shift up to the w2.
412 overflow = ws->ShiftWindows(
413 w1.get(), w2.get(), NULL, Workspace::SHIFT_TO_LEFT);
414 EXPECT_EQ(NULL, overflow);
415 EXPECT_EQ(-1, ws->GetIndexOf(w2.get()));
416 EXPECT_EQ(0, ws->GetIndexOf(w1.get()));
417
418 // Reset now before windows are destroyed.
419 manager_.reset();
420 }
421
422 TEST_F(WorkspaceTest, ShiftWindowsMultiple) {
423 Workspace* ws = manager_->CreateWorkspace();
424 // Single window in a workspace case.
425 scoped_ptr<Window> w1(CreateTestWindow());
426 scoped_ptr<Window> w2(CreateTestWindow());
427 ws->AddWindowAfter(w1.get(), NULL);
428 ws->AddWindowAfter(w2.get(), NULL);
429
430 scoped_ptr<Window> w3(CreateTestWindow());
431
432 // Sanity check.
433 EXPECT_EQ(0, ws->GetIndexOf(w1.get()));
434 EXPECT_EQ(1, ws->GetIndexOf(w2.get()));
435 EXPECT_EQ(-1, ws->GetIndexOf(w3.get()));
436
437 // Insert |w3| at the beginning and shift.
438 aura::Window* overflow =
439 ws->ShiftWindows(w3.get(), w3.get(), NULL,
440 Workspace::SHIFT_TO_RIGHT);
441 EXPECT_EQ(w2.get(), overflow);
442 EXPECT_EQ(-1, ws->GetIndexOf(w2.get()));
443 EXPECT_EQ(0, ws->GetIndexOf(w3.get()));
444 EXPECT_EQ(1, ws->GetIndexOf(w1.get()));
445
446 // Insert |w3| at the end and shift.
447 overflow = ws->ShiftWindows(w2.get(), w2.get(), NULL,
448 Workspace::SHIFT_TO_LEFT);
449 EXPECT_EQ(w3.get(), overflow);
450 EXPECT_EQ(-1, ws->GetIndexOf(w3.get()));
451 EXPECT_EQ(0, ws->GetIndexOf(w1.get()));
452 EXPECT_EQ(1, ws->GetIndexOf(w2.get()));
453
454 // Insert |w3| at the begining and shift up to the w1.
455 overflow = ws->ShiftWindows(w3.get(), w1.get(), NULL,
456 Workspace::SHIFT_TO_RIGHT);
457 EXPECT_EQ(NULL, overflow);
458 EXPECT_EQ(-1, ws->GetIndexOf(w1.get()));
459 EXPECT_EQ(0, ws->GetIndexOf(w3.get()));
460 EXPECT_EQ(1, ws->GetIndexOf(w2.get()));
461
462 // Insert |w1| at the end and shift up to the w2.
463 overflow = ws->ShiftWindows(w1.get(), w2.get(), NULL,
464 Workspace::SHIFT_TO_LEFT);
465 EXPECT_EQ(NULL, overflow);
466 EXPECT_EQ(-1, ws->GetIndexOf(w2.get()));
467 EXPECT_EQ(0, ws->GetIndexOf(w3.get()));
468 EXPECT_EQ(1, ws->GetIndexOf(w1.get()));
469
470 scoped_ptr<Window> unused(CreateTestWindow());
471
472 // Insert |w2| at the |w3| and shift to right.
473 overflow = ws->ShiftWindows(w2.get(), unused.get(), w3.get(),
474 Workspace::SHIFT_TO_RIGHT);
475 EXPECT_EQ(w1.get(), overflow);
476 EXPECT_EQ(-1, ws->GetIndexOf(w1.get()));
477 EXPECT_EQ(0, ws->GetIndexOf(w2.get()));
478 EXPECT_EQ(1, ws->GetIndexOf(w3.get()));
479
480 // Insert |w1| at the |w2| and shift to left.
481 overflow = ws->ShiftWindows(w1.get(), unused.get(), w2.get(),
482 Workspace::SHIFT_TO_LEFT);
483 EXPECT_EQ(w2.get(), overflow);
484 EXPECT_EQ(-1, ws->GetIndexOf(w2.get()));
485 EXPECT_EQ(0, ws->GetIndexOf(w1.get()));
486 EXPECT_EQ(1, ws->GetIndexOf(w3.get()));
487
488 // Reset now before windows are destroyed.
489 manager_.reset();
210 } 490 }
211 491
212 } // namespace aura_shell 492 } // namespace aura_shell
OLDNEW
« no previous file with comments | « ui/aura_shell/workspace/workspace_manager.cc ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698