| 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 "ui/app_list/views/apps_grid_view.h" | 5 #include "ui/app_list/views/apps_grid_view.h" |
| 6 | 6 |
| 7 #include <stddef.h> | 7 #include <stddef.h> |
| 8 | 8 |
| 9 #include <memory> | 9 #include <memory> |
| 10 #include <string> | 10 #include <string> |
| (...skipping 92 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 103 apps_grid_view_->SetItemList(model_->top_level_item_list()); | 103 apps_grid_view_->SetItemList(model_->top_level_item_list()); |
| 104 | 104 |
| 105 test_api_.reset(new AppsGridViewTestApi(apps_grid_view_.get())); | 105 test_api_.reset(new AppsGridViewTestApi(apps_grid_view_.get())); |
| 106 } | 106 } |
| 107 void TearDown() override { | 107 void TearDown() override { |
| 108 apps_grid_view_.reset(); // Release apps grid view before models. | 108 apps_grid_view_.reset(); // Release apps grid view before models. |
| 109 views::ViewsTestBase::TearDown(); | 109 views::ViewsTestBase::TearDown(); |
| 110 } | 110 } |
| 111 | 111 |
| 112 protected: | 112 protected: |
| 113 void EnsureFoldersEnabled() { | |
| 114 #if defined(OS_MACOSX) | |
| 115 // Folders require toolkit-views app list to be enabled. | |
| 116 base::CommandLine::ForCurrentProcess()->AppendSwitch( | |
| 117 switches::kEnableMacViewsAppList); | |
| 118 #endif | |
| 119 } | |
| 120 | |
| 121 AppListItemView* GetItemViewAt(int index) { | 113 AppListItemView* GetItemViewAt(int index) { |
| 122 return static_cast<AppListItemView*>( | 114 return static_cast<AppListItemView*>( |
| 123 test_api_->GetViewAtModelIndex(index)); | 115 test_api_->GetViewAtModelIndex(index)); |
| 124 } | 116 } |
| 125 | 117 |
| 126 AppListItemView* GetItemViewForPoint(const gfx::Point& point) { | 118 AppListItemView* GetItemViewForPoint(const gfx::Point& point) { |
| 127 for (size_t i = 0; i < model_->top_level_item_list()->item_count(); ++i) { | 119 for (size_t i = 0; i < model_->top_level_item_list()->item_count(); ++i) { |
| 128 AppListItemView* view = GetItemViewAt(i); | 120 AppListItemView* view = GetItemViewAt(i); |
| 129 if (view->bounds().Contains(point)) | 121 if (view->bounds().Contains(point)) |
| 130 return view; | 122 return view; |
| (...skipping 182 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 313 gfx::Point(2, 2), ui::EventTimeForNow(), 0, 0); | 305 gfx::Point(2, 2), ui::EventTimeForNow(), 0, 0); |
| 314 apps_grid_view_->UpdateDragFromItem(AppsGridView::MOUSE, drag_event); | 306 apps_grid_view_->UpdateDragFromItem(AppsGridView::MOUSE, drag_event); |
| 315 EXPECT_FALSE(apps_grid_view_->has_dragged_view()); | 307 EXPECT_FALSE(apps_grid_view_->has_dragged_view()); |
| 316 | 308 |
| 317 EXPECT_EQ(std::string("Item 1,Item 2,Item 3,Extra"), | 309 EXPECT_EQ(std::string("Item 1,Item 2,Item 3,Extra"), |
| 318 model_->GetModelContent()); | 310 model_->GetModelContent()); |
| 319 test_api_->LayoutToIdealBounds(); | 311 test_api_->LayoutToIdealBounds(); |
| 320 } | 312 } |
| 321 | 313 |
| 322 TEST_F(AppsGridViewTest, MouseDragItemIntoFolder) { | 314 TEST_F(AppsGridViewTest, MouseDragItemIntoFolder) { |
| 323 EnsureFoldersEnabled(); | |
| 324 | |
| 325 size_t kTotalItems = 3; | 315 size_t kTotalItems = 3; |
| 326 model_->PopulateApps(kTotalItems); | 316 model_->PopulateApps(kTotalItems); |
| 327 EXPECT_EQ(model_->top_level_item_list()->item_count(), kTotalItems); | 317 EXPECT_EQ(model_->top_level_item_list()->item_count(), kTotalItems); |
| 328 EXPECT_EQ(std::string("Item 0,Item 1,Item 2"), model_->GetModelContent()); | 318 EXPECT_EQ(std::string("Item 0,Item 1,Item 2"), model_->GetModelContent()); |
| 329 | 319 |
| 330 gfx::Point from = GetItemTileRectAt(0, 1).CenterPoint(); | 320 gfx::Point from = GetItemTileRectAt(0, 1).CenterPoint(); |
| 331 gfx::Point to = GetItemTileRectAt(0, 0).CenterPoint(); | 321 gfx::Point to = GetItemTileRectAt(0, 0).CenterPoint(); |
| 332 | 322 |
| 333 // Dragging item_1 over item_0 creates a folder. | 323 // Dragging item_1 over item_0 creates a folder. |
| 334 SimulateDrag(AppsGridView::MOUSE, from, to); | 324 SimulateDrag(AppsGridView::MOUSE, from, to); |
| (...skipping 27 matching lines...) Expand all Loading... |
| 362 item_1 = model_->FindItem("Item 1"); | 352 item_1 = model_->FindItem("Item 1"); |
| 363 EXPECT_TRUE(item_1->IsInFolder()); | 353 EXPECT_TRUE(item_1->IsInFolder()); |
| 364 EXPECT_EQ(folder_item->id(), item_1->folder_id()); | 354 EXPECT_EQ(folder_item->id(), item_1->folder_id()); |
| 365 AppListItem* item_2 = model_->FindItem("Item 2"); | 355 AppListItem* item_2 = model_->FindItem("Item 2"); |
| 366 EXPECT_TRUE(item_2->IsInFolder()); | 356 EXPECT_TRUE(item_2->IsInFolder()); |
| 367 EXPECT_EQ(folder_item->id(), item_2->folder_id()); | 357 EXPECT_EQ(folder_item->id(), item_2->folder_id()); |
| 368 test_api_->LayoutToIdealBounds(); | 358 test_api_->LayoutToIdealBounds(); |
| 369 } | 359 } |
| 370 | 360 |
| 371 TEST_F(AppsGridViewTest, MouseDragMaxItemsInFolder) { | 361 TEST_F(AppsGridViewTest, MouseDragMaxItemsInFolder) { |
| 372 EnsureFoldersEnabled(); | |
| 373 | |
| 374 // Create and add a folder with 15 items in it. | 362 // Create and add a folder with 15 items in it. |
| 375 size_t kTotalItems = kMaxFolderItems - 1; | 363 size_t kTotalItems = kMaxFolderItems - 1; |
| 376 model_->CreateAndPopulateFolderWithApps(kTotalItems); | 364 model_->CreateAndPopulateFolderWithApps(kTotalItems); |
| 377 EXPECT_EQ(1u, model_->top_level_item_list()->item_count()); | 365 EXPECT_EQ(1u, model_->top_level_item_list()->item_count()); |
| 378 EXPECT_EQ(AppListFolderItem::kItemType, | 366 EXPECT_EQ(AppListFolderItem::kItemType, |
| 379 model_->top_level_item_list()->item_at(0)->GetItemType()); | 367 model_->top_level_item_list()->item_at(0)->GetItemType()); |
| 380 AppListFolderItem* folder_item = static_cast<AppListFolderItem*>( | 368 AppListFolderItem* folder_item = static_cast<AppListFolderItem*>( |
| 381 model_->top_level_item_list()->item_at(0)); | 369 model_->top_level_item_list()->item_at(0)); |
| 382 EXPECT_EQ(kTotalItems, folder_item->ChildItemCount()); | 370 EXPECT_EQ(kTotalItems, folder_item->ChildItemCount()); |
| 383 | 371 |
| (...skipping 25 matching lines...) Expand all Loading... |
| 409 SimulateDrag(AppsGridView::MOUSE, from, to); | 397 SimulateDrag(AppsGridView::MOUSE, from, to); |
| 410 apps_grid_view_->EndDrag(false); | 398 apps_grid_view_->EndDrag(false); |
| 411 EXPECT_EQ(2u, model_->top_level_item_list()->item_count()); | 399 EXPECT_EQ(2u, model_->top_level_item_list()->item_count()); |
| 412 EXPECT_EQ(kMaxFolderItems, folder_item->ChildItemCount()); | 400 EXPECT_EQ(kMaxFolderItems, folder_item->ChildItemCount()); |
| 413 test_api_->LayoutToIdealBounds(); | 401 test_api_->LayoutToIdealBounds(); |
| 414 } | 402 } |
| 415 | 403 |
| 416 // Check that moving items around doesn't allow a drop to happen into a full | 404 // Check that moving items around doesn't allow a drop to happen into a full |
| 417 // folder. | 405 // folder. |
| 418 TEST_F(AppsGridViewTest, MouseDragMaxItemsInFolderWithMovement) { | 406 TEST_F(AppsGridViewTest, MouseDragMaxItemsInFolderWithMovement) { |
| 419 EnsureFoldersEnabled(); | |
| 420 | |
| 421 // Create and add a folder with 16 items in it. | 407 // Create and add a folder with 16 items in it. |
| 422 size_t kTotalItems = kMaxFolderItems; | 408 size_t kTotalItems = kMaxFolderItems; |
| 423 model_->CreateAndPopulateFolderWithApps(kTotalItems); | 409 model_->CreateAndPopulateFolderWithApps(kTotalItems); |
| 424 EXPECT_EQ(1u, model_->top_level_item_list()->item_count()); | 410 EXPECT_EQ(1u, model_->top_level_item_list()->item_count()); |
| 425 EXPECT_EQ(AppListFolderItem::kItemType, | 411 EXPECT_EQ(AppListFolderItem::kItemType, |
| 426 model_->top_level_item_list()->item_at(0)->GetItemType()); | 412 model_->top_level_item_list()->item_at(0)->GetItemType()); |
| 427 AppListFolderItem* folder_item = static_cast<AppListFolderItem*>( | 413 AppListFolderItem* folder_item = static_cast<AppListFolderItem*>( |
| 428 model_->top_level_item_list()->item_at(0)); | 414 model_->top_level_item_list()->item_at(0)); |
| 429 EXPECT_EQ(kTotalItems, folder_item->ChildItemCount()); | 415 EXPECT_EQ(kTotalItems, folder_item->ChildItemCount()); |
| 430 | 416 |
| (...skipping 28 matching lines...) Expand all Loading... |
| 459 apps_grid_view_->UpdateDragFromItem(AppsGridView::MOUSE, drag_event); | 445 apps_grid_view_->UpdateDragFromItem(AppsGridView::MOUSE, drag_event); |
| 460 apps_grid_view_->EndDrag(false); | 446 apps_grid_view_->EndDrag(false); |
| 461 | 447 |
| 462 // The item should not have moved into the folder. | 448 // The item should not have moved into the folder. |
| 463 EXPECT_EQ(2u, model_->top_level_item_list()->item_count()); | 449 EXPECT_EQ(2u, model_->top_level_item_list()->item_count()); |
| 464 EXPECT_EQ(kMaxFolderItems, folder_item->ChildItemCount()); | 450 EXPECT_EQ(kMaxFolderItems, folder_item->ChildItemCount()); |
| 465 test_api_->LayoutToIdealBounds(); | 451 test_api_->LayoutToIdealBounds(); |
| 466 } | 452 } |
| 467 | 453 |
| 468 TEST_F(AppsGridViewTest, MouseDragItemReorder) { | 454 TEST_F(AppsGridViewTest, MouseDragItemReorder) { |
| 469 // This test assumes Folders are enabled. | |
| 470 EnsureFoldersEnabled(); | |
| 471 | |
| 472 model_->PopulateApps(4); | 455 model_->PopulateApps(4); |
| 473 EXPECT_EQ(4u, model_->top_level_item_list()->item_count()); | 456 EXPECT_EQ(4u, model_->top_level_item_list()->item_count()); |
| 474 EXPECT_EQ(std::string("Item 0,Item 1,Item 2,Item 3"), | 457 EXPECT_EQ(std::string("Item 0,Item 1,Item 2,Item 3"), |
| 475 model_->GetModelContent()); | 458 model_->GetModelContent()); |
| 476 | 459 |
| 477 // Dragging an item towards its neighbours should not reorder until the drag | 460 // Dragging an item towards its neighbours should not reorder until the drag |
| 478 // is past the folder drop point. | 461 // is past the folder drop point. |
| 479 gfx::Point top_right = GetItemTileRectAt(0, 1).CenterPoint(); | 462 gfx::Point top_right = GetItemTileRectAt(0, 1).CenterPoint(); |
| 480 gfx::Vector2d drag_vector; | 463 gfx::Vector2d drag_vector; |
| 481 int half_tile_width = | 464 int half_tile_width = |
| (...skipping 36 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 518 // Dragging down past the last app should reorder to the last position. | 501 // Dragging down past the last app should reorder to the last position. |
| 519 drag_vector.set_x(half_tile_width); | 502 drag_vector.set_x(half_tile_width); |
| 520 drag_vector.set_y(2 * tile_height); | 503 drag_vector.set_y(2 * tile_height); |
| 521 SimulateDrag(AppsGridView::MOUSE, top_right, top_right + drag_vector); | 504 SimulateDrag(AppsGridView::MOUSE, top_right, top_right + drag_vector); |
| 522 apps_grid_view_->EndDrag(false); | 505 apps_grid_view_->EndDrag(false); |
| 523 EXPECT_EQ(std::string("Item 1,Item 2,Item 3,Item 0"), | 506 EXPECT_EQ(std::string("Item 1,Item 2,Item 3,Item 0"), |
| 524 model_->GetModelContent()); | 507 model_->GetModelContent()); |
| 525 } | 508 } |
| 526 | 509 |
| 527 TEST_F(AppsGridViewTest, MouseDragFolderReorder) { | 510 TEST_F(AppsGridViewTest, MouseDragFolderReorder) { |
| 528 EnsureFoldersEnabled(); | |
| 529 | |
| 530 size_t kTotalItems = 2; | 511 size_t kTotalItems = 2; |
| 531 model_->CreateAndPopulateFolderWithApps(kTotalItems); | 512 model_->CreateAndPopulateFolderWithApps(kTotalItems); |
| 532 model_->PopulateAppWithId(kTotalItems); | 513 model_->PopulateAppWithId(kTotalItems); |
| 533 EXPECT_EQ(2u, model_->top_level_item_list()->item_count()); | 514 EXPECT_EQ(2u, model_->top_level_item_list()->item_count()); |
| 534 EXPECT_EQ(AppListFolderItem::kItemType, | 515 EXPECT_EQ(AppListFolderItem::kItemType, |
| 535 model_->top_level_item_list()->item_at(0)->GetItemType()); | 516 model_->top_level_item_list()->item_at(0)->GetItemType()); |
| 536 AppListFolderItem* folder_item = static_cast<AppListFolderItem*>( | 517 AppListFolderItem* folder_item = static_cast<AppListFolderItem*>( |
| 537 model_->top_level_item_list()->item_at(0)); | 518 model_->top_level_item_list()->item_at(0)); |
| 538 EXPECT_EQ("Item 2", model_->top_level_item_list()->item_at(1)->id()); | 519 EXPECT_EQ("Item 2", model_->top_level_item_list()->item_at(1)->id()); |
| 539 | 520 |
| (...skipping 112 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 652 SimulateDrag(AppsGridView::TOUCH, touch_from, touch_to); | 633 SimulateDrag(AppsGridView::TOUCH, touch_from, touch_to); |
| 653 SimulateDrag(AppsGridView::MOUSE, mouse_from, mouse_to); | 634 SimulateDrag(AppsGridView::MOUSE, mouse_from, mouse_to); |
| 654 // Finishes the drag and touch drag wins. | 635 // Finishes the drag and touch drag wins. |
| 655 apps_grid_view_->EndDrag(false); | 636 apps_grid_view_->EndDrag(false); |
| 656 EXPECT_EQ(std::string("Item 1,Item 0,Item 3,Item 2"), | 637 EXPECT_EQ(std::string("Item 1,Item 0,Item 3,Item 2"), |
| 657 model_->GetModelContent()); | 638 model_->GetModelContent()); |
| 658 test_api_->LayoutToIdealBounds(); | 639 test_api_->LayoutToIdealBounds(); |
| 659 } | 640 } |
| 660 | 641 |
| 661 TEST_F(AppsGridViewTest, UpdateFolderBackgroundOnCancelDrag) { | 642 TEST_F(AppsGridViewTest, UpdateFolderBackgroundOnCancelDrag) { |
| 662 EnsureFoldersEnabled(); | |
| 663 | |
| 664 const int kTotalItems = 4; | 643 const int kTotalItems = 4; |
| 665 TestAppsGridViewFolderDelegate folder_delegate; | 644 TestAppsGridViewFolderDelegate folder_delegate; |
| 666 apps_grid_view_->set_folder_delegate(&folder_delegate); | 645 apps_grid_view_->set_folder_delegate(&folder_delegate); |
| 667 model_->PopulateApps(kTotalItems); | 646 model_->PopulateApps(kTotalItems); |
| 668 EXPECT_EQ(std::string("Item 0,Item 1,Item 2,Item 3"), | 647 EXPECT_EQ(std::string("Item 0,Item 1,Item 2,Item 3"), |
| 669 model_->GetModelContent()); | 648 model_->GetModelContent()); |
| 670 | 649 |
| 671 gfx::Point mouse_from = GetItemTileRectAt(0, 0).CenterPoint(); | 650 gfx::Point mouse_from = GetItemTileRectAt(0, 0).CenterPoint(); |
| 672 gfx::Point mouse_to = GetItemTileRectAt(0, 1).CenterPoint(); | 651 gfx::Point mouse_to = GetItemTileRectAt(0, 1).CenterPoint(); |
| 673 | 652 |
| (...skipping 113 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 787 AppListItemView* item_view = GetItemViewAt(0); | 766 AppListItemView* item_view = GetItemViewAt(0); |
| 788 ASSERT_TRUE(item_view); | 767 ASSERT_TRUE(item_view); |
| 789 const views::Label* title_label = item_view->title(); | 768 const views::Label* title_label = item_view->title(); |
| 790 EXPECT_FALSE(title_label->GetTooltipText( | 769 EXPECT_FALSE(title_label->GetTooltipText( |
| 791 title_label->bounds().CenterPoint(), &actual_tooltip)); | 770 title_label->bounds().CenterPoint(), &actual_tooltip)); |
| 792 EXPECT_EQ(title, base::UTF16ToUTF8(title_label->text())); | 771 EXPECT_EQ(title, base::UTF16ToUTF8(title_label->text())); |
| 793 } | 772 } |
| 794 | 773 |
| 795 } // namespace test | 774 } // namespace test |
| 796 } // namespace app_list | 775 } // namespace app_list |
| OLD | NEW |