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

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