OLD | NEW |
1 // Copyright 2013 The Chromium Authors. All rights reserved. | 1 // Copyright 2013 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/shelf/shelf_window_watcher.h" | 5 #include "ash/shelf/shelf_window_watcher.h" |
6 | 6 |
7 #include "ash/ash_switches.h" | 7 #include "ash/ash_switches.h" |
8 #include "ash/shelf/shelf_item_types.h" | 8 #include "ash/shelf/shelf_item_types.h" |
9 #include "ash/shelf/shelf_model.h" | 9 #include "ash/shelf/shelf_model.h" |
10 #include "ash/shelf/shelf_util.h" | 10 #include "ash/shelf/shelf_util.h" |
(...skipping 38 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
49 ShelfModel* model_; | 49 ShelfModel* model_; |
50 | 50 |
51 private: | 51 private: |
52 DISALLOW_COPY_AND_ASSIGN(ShelfWindowWatcherTest); | 52 DISALLOW_COPY_AND_ASSIGN(ShelfWindowWatcherTest); |
53 }; | 53 }; |
54 | 54 |
55 TEST_F(ShelfWindowWatcherTest, CreateAndRemoveShelfItem) { | 55 TEST_F(ShelfWindowWatcherTest, CreateAndRemoveShelfItem) { |
56 // ShelfModel only has an APP_LIST item. | 56 // ShelfModel only has an APP_LIST item. |
57 EXPECT_EQ(1, model_->item_count()); | 57 EXPECT_EQ(1, model_->item_count()); |
58 | 58 |
59 scoped_ptr<aura::Window> w1(CreateTestWindowInShellWithId(0)); | 59 std::unique_ptr<aura::Window> w1(CreateTestWindowInShellWithId(0)); |
60 scoped_ptr<aura::Window> w2(CreateTestWindowInShellWithId(0)); | 60 std::unique_ptr<aura::Window> w2(CreateTestWindowInShellWithId(0)); |
61 | 61 |
62 // Create a ShelfItem for w1. | 62 // Create a ShelfItem for w1. |
63 ShelfID id_w1 = CreateShelfItem(w1.get()); | 63 ShelfID id_w1 = CreateShelfItem(w1.get()); |
64 EXPECT_EQ(2, model_->item_count()); | 64 EXPECT_EQ(2, model_->item_count()); |
65 | 65 |
66 int index_w1 = model_->ItemIndexByID(id_w1); | 66 int index_w1 = model_->ItemIndexByID(id_w1); |
67 EXPECT_EQ(STATUS_RUNNING, model_->items()[index_w1].status); | 67 EXPECT_EQ(STATUS_RUNNING, model_->items()[index_w1].status); |
68 | 68 |
69 // Create a ShelfItem for w2. | 69 // Create a ShelfItem for w2. |
70 ShelfID id_w2 = CreateShelfItem(w2.get()); | 70 ShelfID id_w2 = CreateShelfItem(w2.get()); |
71 EXPECT_EQ(3, model_->item_count()); | 71 EXPECT_EQ(3, model_->item_count()); |
72 | 72 |
73 int index_w2 = model_->ItemIndexByID(id_w2); | 73 int index_w2 = model_->ItemIndexByID(id_w2); |
74 EXPECT_EQ(STATUS_RUNNING, model_->items()[index_w2].status); | 74 EXPECT_EQ(STATUS_RUNNING, model_->items()[index_w2].status); |
75 | 75 |
76 // ShelfItem is removed when assoicated window is destroyed. | 76 // ShelfItem is removed when assoicated window is destroyed. |
77 ClearShelfItemDetailsForWindow(w1.get()); | 77 ClearShelfItemDetailsForWindow(w1.get()); |
78 EXPECT_EQ(2, model_->item_count()); | 78 EXPECT_EQ(2, model_->item_count()); |
79 ClearShelfItemDetailsForWindow(w2.get()); | 79 ClearShelfItemDetailsForWindow(w2.get()); |
80 EXPECT_EQ(1, model_->item_count()); | 80 EXPECT_EQ(1, model_->item_count()); |
81 // Clears twice doesn't do anything. | 81 // Clears twice doesn't do anything. |
82 ClearShelfItemDetailsForWindow(w2.get()); | 82 ClearShelfItemDetailsForWindow(w2.get()); |
83 EXPECT_EQ(1, model_->item_count()); | 83 EXPECT_EQ(1, model_->item_count()); |
84 | 84 |
85 } | 85 } |
86 | 86 |
87 TEST_F(ShelfWindowWatcherTest, ActivateWindow) { | 87 TEST_F(ShelfWindowWatcherTest, ActivateWindow) { |
88 // ShelfModel only have APP_LIST item. | 88 // ShelfModel only have APP_LIST item. |
89 EXPECT_EQ(1, model_->item_count()); | 89 EXPECT_EQ(1, model_->item_count()); |
90 scoped_ptr<aura::Window> w1(CreateTestWindowInShellWithId(0)); | 90 std::unique_ptr<aura::Window> w1(CreateTestWindowInShellWithId(0)); |
91 scoped_ptr<aura::Window> w2(CreateTestWindowInShellWithId(0)); | 91 std::unique_ptr<aura::Window> w2(CreateTestWindowInShellWithId(0)); |
92 | 92 |
93 // Create a ShelfItem for w1. | 93 // Create a ShelfItem for w1. |
94 ShelfID id_w1 = CreateShelfItem(w1.get()); | 94 ShelfID id_w1 = CreateShelfItem(w1.get()); |
95 EXPECT_EQ(2, model_->item_count()); | 95 EXPECT_EQ(2, model_->item_count()); |
96 int index_w1 = model_->ItemIndexByID(id_w1); | 96 int index_w1 = model_->ItemIndexByID(id_w1); |
97 EXPECT_EQ(STATUS_RUNNING, model_->items()[index_w1].status); | 97 EXPECT_EQ(STATUS_RUNNING, model_->items()[index_w1].status); |
98 | 98 |
99 // Create a ShelfItem for w2. | 99 // Create a ShelfItem for w2. |
100 ShelfID id_w2 = CreateShelfItem(w2.get()); | 100 ShelfID id_w2 = CreateShelfItem(w2.get()); |
101 EXPECT_EQ(3, model_->item_count()); | 101 EXPECT_EQ(3, model_->item_count()); |
102 int index_w2 = model_->ItemIndexByID(id_w2); | 102 int index_w2 = model_->ItemIndexByID(id_w2); |
103 EXPECT_EQ(STATUS_RUNNING, model_->items()[index_w1].status); | 103 EXPECT_EQ(STATUS_RUNNING, model_->items()[index_w1].status); |
104 EXPECT_EQ(STATUS_RUNNING, model_->items()[index_w2].status); | 104 EXPECT_EQ(STATUS_RUNNING, model_->items()[index_w2].status); |
105 | 105 |
106 // ShelfItem for w1 is active when w1 is activated. | 106 // ShelfItem for w1 is active when w1 is activated. |
107 wm::ActivateWindow(w1.get()); | 107 wm::ActivateWindow(w1.get()); |
108 EXPECT_EQ(STATUS_ACTIVE, model_->items()[index_w1].status); | 108 EXPECT_EQ(STATUS_ACTIVE, model_->items()[index_w1].status); |
109 | 109 |
110 // ShelfItem for w2 is active state when w2 is activated. | 110 // ShelfItem for w2 is active state when w2 is activated. |
111 wm::ActivateWindow(w2.get()); | 111 wm::ActivateWindow(w2.get()); |
112 EXPECT_EQ(STATUS_RUNNING, model_->items()[index_w1].status); | 112 EXPECT_EQ(STATUS_RUNNING, model_->items()[index_w1].status); |
113 EXPECT_EQ(STATUS_ACTIVE, model_->items()[index_w2].status); | 113 EXPECT_EQ(STATUS_ACTIVE, model_->items()[index_w2].status); |
114 } | 114 } |
115 | 115 |
116 TEST_F(ShelfWindowWatcherTest, UpdateWindowProperty) { | 116 TEST_F(ShelfWindowWatcherTest, UpdateWindowProperty) { |
117 // ShelfModel only has an APP_LIST item. | 117 // ShelfModel only has an APP_LIST item. |
118 EXPECT_EQ(1, model_->item_count()); | 118 EXPECT_EQ(1, model_->item_count()); |
119 | 119 |
120 scoped_ptr<aura::Window> window(CreateTestWindowInShellWithId(0)); | 120 std::unique_ptr<aura::Window> window(CreateTestWindowInShellWithId(0)); |
121 | 121 |
122 // Create a ShelfItem for |window|. | 122 // Create a ShelfItem for |window|. |
123 ShelfID id = CreateShelfItem(window.get()); | 123 ShelfID id = CreateShelfItem(window.get()); |
124 EXPECT_EQ(2, model_->item_count()); | 124 EXPECT_EQ(2, model_->item_count()); |
125 | 125 |
126 int index = model_->ItemIndexByID(id); | 126 int index = model_->ItemIndexByID(id); |
127 EXPECT_EQ(STATUS_RUNNING, model_->items()[index].status); | 127 EXPECT_EQ(STATUS_RUNNING, model_->items()[index].status); |
128 | 128 |
129 // Update ShelfItem for |window|. | 129 // Update ShelfItem for |window|. |
130 ShelfItemDetails details; | 130 ShelfItemDetails details; |
131 details.type = TYPE_PLATFORM_APP; | 131 details.type = TYPE_PLATFORM_APP; |
132 | 132 |
133 SetShelfItemDetailsForWindow(window.get(), details); | 133 SetShelfItemDetailsForWindow(window.get(), details); |
134 // No new item is created after updating a launcher item. | 134 // No new item is created after updating a launcher item. |
135 EXPECT_EQ(2, model_->item_count()); | 135 EXPECT_EQ(2, model_->item_count()); |
136 // index and id are not changed after updating a launcher item. | 136 // index and id are not changed after updating a launcher item. |
137 EXPECT_EQ(index, model_->ItemIndexByID(id)); | 137 EXPECT_EQ(index, model_->ItemIndexByID(id)); |
138 EXPECT_EQ(id, model_->items()[index].id); | 138 EXPECT_EQ(id, model_->items()[index].id); |
139 } | 139 } |
140 | 140 |
141 TEST_F(ShelfWindowWatcherTest, MaximizeAndRestoreWindow) { | 141 TEST_F(ShelfWindowWatcherTest, MaximizeAndRestoreWindow) { |
142 // ShelfModel only has an APP_LIST item. | 142 // ShelfModel only has an APP_LIST item. |
143 EXPECT_EQ(1, model_->item_count()); | 143 EXPECT_EQ(1, model_->item_count()); |
144 | 144 |
145 scoped_ptr<aura::Window> window(CreateTestWindowInShellWithId(0)); | 145 std::unique_ptr<aura::Window> window(CreateTestWindowInShellWithId(0)); |
146 wm::WindowState* window_state = wm::GetWindowState(window.get()); | 146 wm::WindowState* window_state = wm::GetWindowState(window.get()); |
147 | 147 |
148 // Create a ShelfItem for |window|. | 148 // Create a ShelfItem for |window|. |
149 ShelfID id = CreateShelfItem(window.get()); | 149 ShelfID id = CreateShelfItem(window.get()); |
150 EXPECT_EQ(2, model_->item_count()); | 150 EXPECT_EQ(2, model_->item_count()); |
151 | 151 |
152 int index = model_->ItemIndexByID(id); | 152 int index = model_->ItemIndexByID(id); |
153 EXPECT_EQ(STATUS_RUNNING, model_->items()[index].status); | 153 EXPECT_EQ(STATUS_RUNNING, model_->items()[index].status); |
154 | 154 |
155 // Maximize window |window|. | 155 // Maximize window |window|. |
(...skipping 14 matching lines...) Expand all Loading... |
170 // Index and id are not changed after maximizing a window |window|. | 170 // Index and id are not changed after maximizing a window |window|. |
171 EXPECT_EQ(index, model_->ItemIndexByID(id)); | 171 EXPECT_EQ(index, model_->ItemIndexByID(id)); |
172 EXPECT_EQ(id, model_->items()[index].id); | 172 EXPECT_EQ(id, model_->items()[index].id); |
173 } | 173 } |
174 | 174 |
175 // Check that an item is removed when its associated Window is re-parented. | 175 // Check that an item is removed when its associated Window is re-parented. |
176 TEST_F(ShelfWindowWatcherTest, ReparentWindow) { | 176 TEST_F(ShelfWindowWatcherTest, ReparentWindow) { |
177 // ShelfModel only has an APP_LIST item. | 177 // ShelfModel only has an APP_LIST item. |
178 EXPECT_EQ(1, model_->item_count()); | 178 EXPECT_EQ(1, model_->item_count()); |
179 | 179 |
180 scoped_ptr<aura::Window> window(CreateTestWindowInShellWithId(0)); | 180 std::unique_ptr<aura::Window> window(CreateTestWindowInShellWithId(0)); |
181 window->set_owned_by_parent(false); | 181 window->set_owned_by_parent(false); |
182 | 182 |
183 // Create a ShelfItem for |window|. | 183 // Create a ShelfItem for |window|. |
184 ShelfID id = CreateShelfItem(window.get()); | 184 ShelfID id = CreateShelfItem(window.get()); |
185 EXPECT_EQ(2, model_->item_count()); | 185 EXPECT_EQ(2, model_->item_count()); |
186 | 186 |
187 int index = model_->ItemIndexByID(id); | 187 int index = model_->ItemIndexByID(id); |
188 EXPECT_EQ(STATUS_RUNNING, model_->items()[index].status); | 188 EXPECT_EQ(STATUS_RUNNING, model_->items()[index].status); |
189 | 189 |
190 aura::Window* root_window = window->GetRootWindow(); | 190 aura::Window* root_window = window->GetRootWindow(); |
(...skipping 16 matching lines...) Expand all Loading... |
207 default_container->AddChild(window.get()); | 207 default_container->AddChild(window.get()); |
208 EXPECT_EQ(2, model_->item_count()); | 208 EXPECT_EQ(2, model_->item_count()); |
209 } | 209 } |
210 | 210 |
211 // Check |window|'s item is not changed during the dragging. | 211 // Check |window|'s item is not changed during the dragging. |
212 // TODO(simonhong): Add a test for removing a Window during the dragging. | 212 // TODO(simonhong): Add a test for removing a Window during the dragging. |
213 TEST_F(ShelfWindowWatcherTest, DragWindow) { | 213 TEST_F(ShelfWindowWatcherTest, DragWindow) { |
214 // ShelfModel only has an APP_LIST item. | 214 // ShelfModel only has an APP_LIST item. |
215 EXPECT_EQ(1, model_->item_count()); | 215 EXPECT_EQ(1, model_->item_count()); |
216 | 216 |
217 scoped_ptr<aura::Window> window(CreateTestWindowInShellWithId(0)); | 217 std::unique_ptr<aura::Window> window(CreateTestWindowInShellWithId(0)); |
218 | 218 |
219 // Create a ShelfItem for |window|. | 219 // Create a ShelfItem for |window|. |
220 ShelfID id = CreateShelfItem(window.get()); | 220 ShelfID id = CreateShelfItem(window.get()); |
221 EXPECT_EQ(2, model_->item_count()); | 221 EXPECT_EQ(2, model_->item_count()); |
222 | 222 |
223 int index = model_->ItemIndexByID(id); | 223 int index = model_->ItemIndexByID(id); |
224 EXPECT_EQ(STATUS_RUNNING, model_->items()[index].status); | 224 EXPECT_EQ(STATUS_RUNNING, model_->items()[index].status); |
225 | 225 |
226 // Simulate dragging of |window| and check its item is not changed. | 226 // Simulate dragging of |window| and check its item is not changed. |
227 scoped_ptr<WindowResizer> resizer( | 227 std::unique_ptr<WindowResizer> resizer( |
228 CreateWindowResizer(window.get(), | 228 CreateWindowResizer(window.get(), gfx::Point(), HTCAPTION, |
229 gfx::Point(), | |
230 HTCAPTION, | |
231 aura::client::WINDOW_MOVE_SOURCE_MOUSE)); | 229 aura::client::WINDOW_MOVE_SOURCE_MOUSE)); |
232 ASSERT_TRUE(resizer.get()); | 230 ASSERT_TRUE(resizer.get()); |
233 resizer->Drag(gfx::Point(50, 50), 0); | 231 resizer->Drag(gfx::Point(50, 50), 0); |
234 resizer->CompleteDrag(); | 232 resizer->CompleteDrag(); |
235 | 233 |
236 //Index and id are not changed after dragging a |window|. | 234 //Index and id are not changed after dragging a |window|. |
237 EXPECT_EQ(index, model_->ItemIndexByID(id)); | 235 EXPECT_EQ(index, model_->ItemIndexByID(id)); |
238 EXPECT_EQ(id, model_->items()[index].id); | 236 EXPECT_EQ(id, model_->items()[index].id); |
239 } | 237 } |
240 | 238 |
241 // Check |window|'s item is removed when it is re-parented not to default | 239 // Check |window|'s item is removed when it is re-parented not to default |
242 // container during the dragging. | 240 // container during the dragging. |
243 TEST_F(ShelfWindowWatcherTest, ReparentWindowDuringTheDragging) { | 241 TEST_F(ShelfWindowWatcherTest, ReparentWindowDuringTheDragging) { |
244 // ShelfModel only has an APP_LIST item. | 242 // ShelfModel only has an APP_LIST item. |
245 EXPECT_EQ(1, model_->item_count()); | 243 EXPECT_EQ(1, model_->item_count()); |
246 | 244 |
247 scoped_ptr<aura::Window> window(CreateTestWindowInShellWithId(0)); | 245 std::unique_ptr<aura::Window> window(CreateTestWindowInShellWithId(0)); |
248 window->set_owned_by_parent(false); | 246 window->set_owned_by_parent(false); |
249 | 247 |
250 // Create a ShelfItem for |window|. | 248 // Create a ShelfItem for |window|. |
251 ShelfID id = CreateShelfItem(window.get()); | 249 ShelfID id = CreateShelfItem(window.get()); |
252 EXPECT_EQ(2, model_->item_count()); | 250 EXPECT_EQ(2, model_->item_count()); |
253 int index = model_->ItemIndexByID(id); | 251 int index = model_->ItemIndexByID(id); |
254 EXPECT_EQ(STATUS_RUNNING, model_->items()[index].status); | 252 EXPECT_EQ(STATUS_RUNNING, model_->items()[index].status); |
255 | 253 |
256 aura::Window* root_window = window->GetRootWindow(); | 254 aura::Window* root_window = window->GetRootWindow(); |
257 aura::Window* default_container = Shell::GetContainer( | 255 aura::Window* default_container = Shell::GetContainer( |
258 root_window, | 256 root_window, |
259 kShellWindowId_DefaultContainer); | 257 kShellWindowId_DefaultContainer); |
260 EXPECT_EQ(default_container, window->parent()); | 258 EXPECT_EQ(default_container, window->parent()); |
261 | 259 |
262 aura::Window* new_parent = Shell::GetContainer( | 260 aura::Window* new_parent = Shell::GetContainer( |
263 root_window, | 261 root_window, |
264 kShellWindowId_PanelContainer); | 262 kShellWindowId_PanelContainer); |
265 | 263 |
266 // Simulate re-parenting to |new_parent| during the dragging. | 264 // Simulate re-parenting to |new_parent| during the dragging. |
267 { | 265 { |
268 scoped_ptr<WindowResizer> resizer( | 266 std::unique_ptr<WindowResizer> resizer( |
269 CreateWindowResizer(window.get(), | 267 CreateWindowResizer(window.get(), gfx::Point(), HTCAPTION, |
270 gfx::Point(), | |
271 HTCAPTION, | |
272 aura::client::WINDOW_MOVE_SOURCE_MOUSE)); | 268 aura::client::WINDOW_MOVE_SOURCE_MOUSE)); |
273 ASSERT_TRUE(resizer.get()); | 269 ASSERT_TRUE(resizer.get()); |
274 resizer->Drag(gfx::Point(50, 50), 0); | 270 resizer->Drag(gfx::Point(50, 50), 0); |
275 resizer->CompleteDrag(); | 271 resizer->CompleteDrag(); |
276 EXPECT_EQ(2, model_->item_count()); | 272 EXPECT_EQ(2, model_->item_count()); |
277 | 273 |
278 // Item should be removed when |window| is re-parented not to default | 274 // Item should be removed when |window| is re-parented not to default |
279 // container before fininshing the dragging. | 275 // container before fininshing the dragging. |
280 EXPECT_TRUE(wm::GetWindowState(window.get())->is_dragged()); | 276 EXPECT_TRUE(wm::GetWindowState(window.get())->is_dragged()); |
281 new_parent->AddChild(window.get()); | 277 new_parent->AddChild(window.get()); |
282 EXPECT_EQ(1, model_->item_count()); | 278 EXPECT_EQ(1, model_->item_count()); |
283 } | 279 } |
284 EXPECT_FALSE(wm::GetWindowState(window.get())->is_dragged()); | 280 EXPECT_FALSE(wm::GetWindowState(window.get())->is_dragged()); |
285 EXPECT_EQ(1, model_->item_count()); | 281 EXPECT_EQ(1, model_->item_count()); |
286 } | 282 } |
287 | 283 |
288 } // namespace ash | 284 } // namespace ash |
OLD | NEW |