| 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/launcher/launcher_model.h" | 5 #include "ash/shelf/shelf_model.h" |
| 6 | 6 |
| 7 #include <set> | 7 #include <set> |
| 8 #include <string> | 8 #include <string> |
| 9 | 9 |
| 10 #include "ash/ash_switches.h" | 10 #include "ash/ash_switches.h" |
| 11 #include "ash/shelf/shelf_model_observer.h" | 11 #include "ash/shelf/shelf_model_observer.h" |
| 12 #include "base/command_line.h" | 12 #include "base/command_line.h" |
| 13 #include "base/strings/stringprintf.h" | 13 #include "base/strings/stringprintf.h" |
| 14 #include "testing/gtest/include/gtest/gtest.h" | 14 #include "testing/gtest/include/gtest/gtest.h" |
| 15 | 15 |
| (...skipping 52 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 68 int added_count_; | 68 int added_count_; |
| 69 int removed_count_; | 69 int removed_count_; |
| 70 int changed_count_; | 70 int changed_count_; |
| 71 int moved_count_; | 71 int moved_count_; |
| 72 | 72 |
| 73 DISALLOW_COPY_AND_ASSIGN(TestShelfModelObserver); | 73 DISALLOW_COPY_AND_ASSIGN(TestShelfModelObserver); |
| 74 }; | 74 }; |
| 75 | 75 |
| 76 } // namespace | 76 } // namespace |
| 77 | 77 |
| 78 class LauncherModelTest : public testing::Test { | 78 class ShelfModelTest : public testing::Test { |
| 79 public: | 79 public: |
| 80 LauncherModelTest() {} | 80 ShelfModelTest() {} |
| 81 virtual ~LauncherModelTest() {} | 81 virtual ~ShelfModelTest() {} |
| 82 | 82 |
| 83 virtual void SetUp() { | 83 virtual void SetUp() { |
| 84 model_.reset(new LauncherModel); | 84 model_.reset(new ShelfModel); |
| 85 observer_.reset(new TestShelfModelObserver); | 85 observer_.reset(new TestShelfModelObserver); |
| 86 EXPECT_EQ(0, model_->item_count()); | 86 EXPECT_EQ(0, model_->item_count()); |
| 87 | 87 |
| 88 LauncherItem item; | 88 LauncherItem item; |
| 89 item.type = TYPE_APP_LIST; | 89 item.type = TYPE_APP_LIST; |
| 90 model_->Add(item); | 90 model_->Add(item); |
| 91 EXPECT_EQ(1, model_->item_count()); | 91 EXPECT_EQ(1, model_->item_count()); |
| 92 | 92 |
| 93 model_->AddObserver(observer_.get()); | 93 model_->AddObserver(observer_.get()); |
| 94 } | 94 } |
| 95 | 95 |
| 96 virtual void TearDown() { | 96 virtual void TearDown() { |
| 97 observer_.reset(); | 97 observer_.reset(); |
| 98 model_.reset(); | 98 model_.reset(); |
| 99 } | 99 } |
| 100 | 100 |
| 101 scoped_ptr<LauncherModel> model_; | 101 scoped_ptr<ShelfModel> model_; |
| 102 scoped_ptr<TestShelfModelObserver> observer_; | 102 scoped_ptr<TestShelfModelObserver> observer_; |
| 103 | 103 |
| 104 private: | 104 private: |
| 105 DISALLOW_COPY_AND_ASSIGN(LauncherModelTest); | 105 DISALLOW_COPY_AND_ASSIGN(ShelfModelTest); |
| 106 }; | 106 }; |
| 107 | 107 |
| 108 TEST_F(LauncherModelTest, BasicAssertions) { | 108 TEST_F(ShelfModelTest, BasicAssertions) { |
| 109 // Add an item. | 109 // Add an item. |
| 110 LauncherItem item; | 110 LauncherItem item; |
| 111 item.type = TYPE_APP_SHORTCUT; | 111 item.type = TYPE_APP_SHORTCUT; |
| 112 int index = model_->Add(item); | 112 int index = model_->Add(item); |
| 113 EXPECT_EQ(2, model_->item_count()); | 113 EXPECT_EQ(2, model_->item_count()); |
| 114 EXPECT_EQ("added=1", observer_->StateStringAndClear()); | 114 EXPECT_EQ("added=1", observer_->StateStringAndClear()); |
| 115 | 115 |
| 116 // Change to a platform app item. | 116 // Change to a platform app item. |
| 117 LauncherID original_id = model_->items()[index].id; | 117 LauncherID original_id = model_->items()[index].id; |
| 118 item.type = TYPE_PLATFORM_APP; | 118 item.type = TYPE_PLATFORM_APP; |
| (...skipping 31 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 150 EXPECT_EQ("moved=1", observer_->StateStringAndClear()); | 150 EXPECT_EQ("moved=1", observer_->StateStringAndClear()); |
| 151 | 151 |
| 152 // Verifies all the items get unique ids. | 152 // Verifies all the items get unique ids. |
| 153 std::set<LauncherID> ids; | 153 std::set<LauncherID> ids; |
| 154 for (int i = 0; i < model_->item_count(); ++i) | 154 for (int i = 0; i < model_->item_count(); ++i) |
| 155 ids.insert(model_->items()[i].id); | 155 ids.insert(model_->items()[i].id); |
| 156 EXPECT_EQ(model_->item_count(), static_cast<int>(ids.size())); | 156 EXPECT_EQ(model_->item_count(), static_cast<int>(ids.size())); |
| 157 } | 157 } |
| 158 | 158 |
| 159 // Assertions around where items are added. | 159 // Assertions around where items are added. |
| 160 TEST_F(LauncherModelTest, AddIndices) { | 160 TEST_F(ShelfModelTest, AddIndices) { |
| 161 // Insert browser short cut at index 1. | 161 // Insert browser short cut at index 1. |
| 162 LauncherItem browser_shortcut; | 162 LauncherItem browser_shortcut; |
| 163 browser_shortcut.type = TYPE_BROWSER_SHORTCUT; | 163 browser_shortcut.type = TYPE_BROWSER_SHORTCUT; |
| 164 int browser_shortcut_index = model_->Add(browser_shortcut); | 164 int browser_shortcut_index = model_->Add(browser_shortcut); |
| 165 EXPECT_EQ(1, browser_shortcut_index); | 165 EXPECT_EQ(1, browser_shortcut_index); |
| 166 | 166 |
| 167 // platform app items should be after browser shortcut. | 167 // platform app items should be after browser shortcut. |
| 168 LauncherItem item; | 168 LauncherItem item; |
| 169 item.type = TYPE_PLATFORM_APP; | 169 item.type = TYPE_PLATFORM_APP; |
| 170 int platform_app_index1 = model_->Add(item); | 170 int platform_app_index1 = model_->Add(item); |
| (...skipping 59 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 230 EXPECT_EQ(13, app_panel_index3); | 230 EXPECT_EQ(13, app_panel_index3); |
| 231 | 231 |
| 232 // Right aligned index should be the first app panel index. | 232 // Right aligned index should be the first app panel index. |
| 233 EXPECT_EQ(12, model_->FirstPanelIndex()); | 233 EXPECT_EQ(12, model_->FirstPanelIndex()); |
| 234 | 234 |
| 235 EXPECT_EQ(TYPE_BROWSER_SHORTCUT, model_->items()[2].type); | 235 EXPECT_EQ(TYPE_BROWSER_SHORTCUT, model_->items()[2].type); |
| 236 EXPECT_EQ(TYPE_APP_LIST, model_->items()[0].type); | 236 EXPECT_EQ(TYPE_APP_LIST, model_->items()[0].type); |
| 237 } | 237 } |
| 238 | 238 |
| 239 // Assertions around where items are added. | 239 // Assertions around where items are added. |
| 240 TEST_F(LauncherModelTest, AddIndicesForLegacyShelfLayout) { | 240 TEST_F(ShelfModelTest, AddIndicesForLegacyShelfLayout) { |
| 241 CommandLine::ForCurrentProcess()->AppendSwitch( | 241 CommandLine::ForCurrentProcess()->AppendSwitch( |
| 242 ash::switches::kAshDisableAlternateShelfLayout); | 242 ash::switches::kAshDisableAlternateShelfLayout); |
| 243 | 243 |
| 244 // Insert browser short cut at index 0. | 244 // Insert browser short cut at index 0. |
| 245 LauncherItem browser_shortcut; | 245 LauncherItem browser_shortcut; |
| 246 browser_shortcut.type = TYPE_BROWSER_SHORTCUT; | 246 browser_shortcut.type = TYPE_BROWSER_SHORTCUT; |
| 247 int browser_shortcut_index = model_->Add(browser_shortcut); | 247 int browser_shortcut_index = model_->Add(browser_shortcut); |
| 248 EXPECT_EQ(0, browser_shortcut_index); | 248 EXPECT_EQ(0, browser_shortcut_index); |
| 249 | 249 |
| 250 // platform app items should be after browser shortcut. | 250 // platform app items should be after browser shortcut. |
| (...skipping 62 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 313 EXPECT_EQ(13, app_panel_index3); | 313 EXPECT_EQ(13, app_panel_index3); |
| 314 | 314 |
| 315 // Right aligned index should be the first app panel index. | 315 // Right aligned index should be the first app panel index. |
| 316 EXPECT_EQ(12, model_->FirstPanelIndex()); | 316 EXPECT_EQ(12, model_->FirstPanelIndex()); |
| 317 | 317 |
| 318 EXPECT_EQ(TYPE_BROWSER_SHORTCUT, model_->items()[1].type); | 318 EXPECT_EQ(TYPE_BROWSER_SHORTCUT, model_->items()[1].type); |
| 319 EXPECT_EQ(TYPE_APP_LIST, model_->items()[model_->FirstPanelIndex() - 1].type); | 319 EXPECT_EQ(TYPE_APP_LIST, model_->items()[model_->FirstPanelIndex() - 1].type); |
| 320 } | 320 } |
| 321 | 321 |
| 322 // Assertions around id generation and usage. | 322 // Assertions around id generation and usage. |
| 323 TEST_F(LauncherModelTest, LauncherIDTests) { | 323 TEST_F(ShelfModelTest, LauncherIDTests) { |
| 324 // Get the next to use ID counter. | 324 // Get the next to use ID counter. |
| 325 LauncherID id = model_->next_id(); | 325 LauncherID id = model_->next_id(); |
| 326 | 326 |
| 327 // Calling this function multiple times does not change the returned ID. | 327 // Calling this function multiple times does not change the returned ID. |
| 328 EXPECT_EQ(model_->next_id(), id); | 328 EXPECT_EQ(model_->next_id(), id); |
| 329 | 329 |
| 330 // Check that when we reserve a value it will be the previously retrieved ID, | 330 // Check that when we reserve a value it will be the previously retrieved ID, |
| 331 // but it will not change the item count and retrieving the next ID should | 331 // but it will not change the item count and retrieving the next ID should |
| 332 // produce something new. | 332 // produce something new. |
| 333 EXPECT_EQ(model_->reserve_external_id(), id); | 333 EXPECT_EQ(model_->reserve_external_id(), id); |
| 334 EXPECT_EQ(1, model_->item_count()); | 334 EXPECT_EQ(1, model_->item_count()); |
| 335 LauncherID id2 = model_->next_id(); | 335 LauncherID id2 = model_->next_id(); |
| 336 EXPECT_NE(id2, id); | 336 EXPECT_NE(id2, id); |
| 337 | 337 |
| 338 // Adding another item to the list should also produce a new ID. | 338 // Adding another item to the list should also produce a new ID. |
| 339 LauncherItem item; | 339 LauncherItem item; |
| 340 item.type = TYPE_PLATFORM_APP; | 340 item.type = TYPE_PLATFORM_APP; |
| 341 model_->Add(item); | 341 model_->Add(item); |
| 342 EXPECT_NE(model_->next_id(), id2); | 342 EXPECT_NE(model_->next_id(), id2); |
| 343 } | 343 } |
| 344 | 344 |
| 345 // This verifies that converting an existing item into a lower weight category | 345 // This verifies that converting an existing item into a lower weight category |
| 346 // (e.g. shortcut to running but not pinned app) will move it to the proper | 346 // (e.g. shortcut to running but not pinned app) will move it to the proper |
| 347 // location. See crbug.com/248769. | 347 // location. See crbug.com/248769. |
| 348 TEST_F(LauncherModelTest, CorrectMoveItemsWhenStateChange) { | 348 TEST_F(ShelfModelTest, CorrectMoveItemsWhenStateChange) { |
| 349 // The first item is the app list and last item is the browser. | 349 // The first item is the app list and last item is the browser. |
| 350 LauncherItem browser_shortcut; | 350 LauncherItem browser_shortcut; |
| 351 browser_shortcut.type = TYPE_BROWSER_SHORTCUT; | 351 browser_shortcut.type = TYPE_BROWSER_SHORTCUT; |
| 352 int browser_shortcut_index = model_->Add(browser_shortcut); | 352 int browser_shortcut_index = model_->Add(browser_shortcut); |
| 353 EXPECT_EQ(TYPE_APP_LIST, model_->items()[0].type); | 353 EXPECT_EQ(TYPE_APP_LIST, model_->items()[0].type); |
| 354 EXPECT_EQ(1, browser_shortcut_index); | 354 EXPECT_EQ(1, browser_shortcut_index); |
| 355 | 355 |
| 356 // Add three shortcuts. They should all be moved between the two. | 356 // Add three shortcuts. They should all be moved between the two. |
| 357 LauncherItem item; | 357 LauncherItem item; |
| 358 item.type = TYPE_APP_SHORTCUT; | 358 item.type = TYPE_APP_SHORTCUT; |
| 359 int app1_index = model_->Add(item); | 359 int app1_index = model_->Add(item); |
| 360 EXPECT_EQ(2, app1_index); | 360 EXPECT_EQ(2, app1_index); |
| 361 int app2_index = model_->Add(item); | 361 int app2_index = model_->Add(item); |
| 362 EXPECT_EQ(3, app2_index); | 362 EXPECT_EQ(3, app2_index); |
| 363 int app3_index = model_->Add(item); | 363 int app3_index = model_->Add(item); |
| 364 EXPECT_EQ(4, app3_index); | 364 EXPECT_EQ(4, app3_index); |
| 365 | 365 |
| 366 // Now change the type of the second item and make sure that it is moving | 366 // Now change the type of the second item and make sure that it is moving |
| 367 // behind the shortcuts. | 367 // behind the shortcuts. |
| 368 item.type = TYPE_PLATFORM_APP; | 368 item.type = TYPE_PLATFORM_APP; |
| 369 model_->Set(app2_index, item); | 369 model_->Set(app2_index, item); |
| 370 | 370 |
| 371 // The item should have moved in front of the app launcher. | 371 // The item should have moved in front of the app launcher. |
| 372 EXPECT_EQ(TYPE_PLATFORM_APP, model_->items()[4].type); | 372 EXPECT_EQ(TYPE_PLATFORM_APP, model_->items()[4].type); |
| 373 } | 373 } |
| 374 | 374 |
| 375 TEST_F(LauncherModelTest, CorrectMoveItemsWhenStateChangeForLegacyShelfLayout) { | 375 TEST_F(ShelfModelTest, CorrectMoveItemsWhenStateChangeForLegacyShelfLayout) { |
| 376 CommandLine::ForCurrentProcess()->AppendSwitch( | 376 CommandLine::ForCurrentProcess()->AppendSwitch( |
| 377 ash::switches::kAshDisableAlternateShelfLayout); | 377 ash::switches::kAshDisableAlternateShelfLayout); |
| 378 | 378 |
| 379 // The first item is the browser and the second item is app list. | 379 // The first item is the browser and the second item is app list. |
| 380 LauncherItem browser_shortcut; | 380 LauncherItem browser_shortcut; |
| 381 browser_shortcut.type = TYPE_BROWSER_SHORTCUT; | 381 browser_shortcut.type = TYPE_BROWSER_SHORTCUT; |
| 382 int browser_shortcut_index = model_->Add(browser_shortcut); | 382 int browser_shortcut_index = model_->Add(browser_shortcut); |
| 383 EXPECT_EQ(0, browser_shortcut_index); | 383 EXPECT_EQ(0, browser_shortcut_index); |
| 384 EXPECT_EQ(TYPE_APP_LIST, model_->items()[1].type); | 384 EXPECT_EQ(TYPE_APP_LIST, model_->items()[1].type); |
| 385 | 385 |
| (...skipping 10 matching lines...) Expand all Loading... |
| 396 // Now change the type of the second item and make sure that it is moving | 396 // Now change the type of the second item and make sure that it is moving |
| 397 // behind the shortcuts. | 397 // behind the shortcuts. |
| 398 item.type = TYPE_PLATFORM_APP; | 398 item.type = TYPE_PLATFORM_APP; |
| 399 model_->Set(app2_index, item); | 399 model_->Set(app2_index, item); |
| 400 | 400 |
| 401 // The item should have moved in front of the app launcher. | 401 // The item should have moved in front of the app launcher. |
| 402 EXPECT_EQ(TYPE_PLATFORM_APP, model_->items()[3].type); | 402 EXPECT_EQ(TYPE_PLATFORM_APP, model_->items()[3].type); |
| 403 } | 403 } |
| 404 | 404 |
| 405 } // namespace ash | 405 } // namespace ash |
| OLD | NEW |