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_view.h" | 5 #include "ash/launcher/launcher_view.h" |
6 | 6 |
7 #include <algorithm> | 7 #include <algorithm> |
8 #include <vector> | 8 #include <vector> |
9 | 9 |
10 #include "ash/ash_switches.h" | 10 #include "ash/ash_switches.h" |
(...skipping 195 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
206 launcher_view_ = launcher->GetLauncherViewForTest(); | 206 launcher_view_ = launcher->GetLauncherViewForTest(); |
207 | 207 |
208 // The bounds should be big enough for 4 buttons + overflow chevron. | 208 // The bounds should be big enough for 4 buttons + overflow chevron. |
209 launcher_view_->SetBounds(0, 0, 500, 50); | 209 launcher_view_->SetBounds(0, 0, 500, 50); |
210 | 210 |
211 test_api_.reset(new LauncherViewTestAPI(launcher_view_)); | 211 test_api_.reset(new LauncherViewTestAPI(launcher_view_)); |
212 test_api_->SetAnimationDuration(1); // Speeds up animation for test. | 212 test_api_->SetAnimationDuration(1); // Speeds up animation for test. |
213 | 213 |
214 // Add browser shortcut launcher item at index 0 for test. | 214 // Add browser shortcut launcher item at index 0 for test. |
215 AddBrowserShortcut(); | 215 AddBrowserShortcut(); |
216 } | 216 } |
217 | 217 |
218 virtual void TearDown() OVERRIDE { | 218 virtual void TearDown() OVERRIDE { |
219 test_api_.reset(); | 219 test_api_.reset(); |
220 AshTestBase::TearDown(); | 220 AshTestBase::TearDown(); |
221 } | 221 } |
222 | 222 |
223 protected: | 223 protected: |
224 LauncherID AddBrowserShortcut() { | 224 virtual LauncherID AddBrowserShortcut() { |
225 LauncherItem browser_shortcut; | 225 LauncherItem browser_shortcut; |
226 browser_shortcut.type = TYPE_BROWSER_SHORTCUT; | 226 browser_shortcut.type = TYPE_BROWSER_SHORTCUT; |
227 browser_shortcut.is_incognito = false; | 227 browser_shortcut.is_incognito = false; |
228 | 228 |
229 LauncherID id = model_->next_id(); | 229 LauncherID id = model_->next_id(); |
230 model_->AddAt(0, browser_shortcut); | 230 model_->AddAt(1, browser_shortcut); |
231 test_api_->RunMessageLoopUntilAnimationsDone(); | 231 test_api_->RunMessageLoopUntilAnimationsDone(); |
232 return id; | 232 return id; |
233 } | 233 } |
234 | 234 |
235 LauncherID AddAppShortcut() { | 235 LauncherID AddAppShortcut() { |
236 LauncherItem item; | 236 LauncherItem item; |
237 item.type = TYPE_APP_SHORTCUT; | 237 item.type = TYPE_APP_SHORTCUT; |
238 item.status = STATUS_CLOSED; | 238 item.status = STATUS_CLOSED; |
239 | 239 |
240 LauncherID id = model_->next_id(); | 240 LauncherID id = model_->next_id(); |
(...skipping 123 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
364 | 364 |
365 // Drag. | 365 // Drag. |
366 views::View* destination = test_api_->GetButton(destination_index); | 366 views::View* destination = test_api_->GetButton(destination_index); |
367 ui::MouseEvent drag_event(ui::ET_MOUSE_DRAGGED, | 367 ui::MouseEvent drag_event(ui::ET_MOUSE_DRAGGED, |
368 destination->bounds().origin(), | 368 destination->bounds().origin(), |
369 destination->bounds().origin(), 0); | 369 destination->bounds().origin(), 0); |
370 button_host->PointerDraggedOnButton(button, pointer, drag_event); | 370 button_host->PointerDraggedOnButton(button, pointer, drag_event); |
371 return button; | 371 return button; |
372 } | 372 } |
373 | 373 |
374 void SetupForDragTest( | 374 virtual void SetupForDragTest( |
375 std::vector<std::pair<LauncherID, views::View*> >* id_map) { | 375 std::vector<std::pair<LauncherID, views::View*> >* id_map) { |
376 // Initialize |id_map| with the automatically-created launcher buttons. | 376 // Initialize |id_map| with the automatically-created launcher buttons. |
377 for (size_t i = 0; i < model_->items().size(); ++i) { | 377 for (size_t i = 0; i < model_->items().size(); ++i) { |
378 internal::LauncherButton* button = test_api_->GetButton(i); | 378 internal::LauncherButton* button = test_api_->GetButton(i); |
379 id_map->push_back(std::make_pair(model_->items()[i].id, button)); | 379 id_map->push_back(std::make_pair(model_->items()[i].id, button)); |
380 } | 380 } |
381 ASSERT_NO_FATAL_FAILURE(CheckModelIDs(*id_map)); | 381 ASSERT_NO_FATAL_FAILURE(CheckModelIDs(*id_map)); |
382 | 382 |
383 // Add 5 app launcher buttons for testing. | 383 // Add 5 app launcher buttons for testing. |
384 for (int i = 0; i < 5; ++i) { | 384 for (int i = 0; i < 5; ++i) { |
385 LauncherID id = AddAppShortcut(); | 385 LauncherID id = AddAppShortcut(); |
386 // browser shortcut is located at index 0. So we should start to add app | 386 // App Icon is located at index 0, and browser shortcut is located at |
387 // shortcut at index 1. | 387 // index 1. So we should start to add app shortcuts at index 2. |
388 id_map->insert(id_map->begin() + (i + 1), | 388 id_map->insert(id_map->begin() + (i + 2), |
389 std::make_pair(id, GetButtonByID(id))); | 389 std::make_pair(id, GetButtonByID(id))); |
390 } | 390 } |
391 ASSERT_NO_FATAL_FAILURE(CheckModelIDs(*id_map)); | 391 ASSERT_NO_FATAL_FAILURE(CheckModelIDs(*id_map)); |
392 } | 392 } |
393 | 393 |
394 views::View* GetTooltipAnchorView() { | 394 views::View* GetTooltipAnchorView() { |
395 return launcher_view_->tooltip_manager()->anchor_; | 395 return launcher_view_->tooltip_manager()->anchor_; |
396 } | 396 } |
397 | 397 |
398 void ShowTooltip() { | 398 void ShowTooltip() { |
399 launcher_view_->tooltip_manager()->ShowInternal(); | 399 launcher_view_->tooltip_manager()->ShowInternal(); |
400 } | 400 } |
401 | 401 |
402 LauncherModel* model_; | 402 LauncherModel* model_; |
403 internal::LauncherView* launcher_view_; | 403 internal::LauncherView* launcher_view_; |
404 | 404 |
405 scoped_ptr<LauncherViewTestAPI> test_api_; | 405 scoped_ptr<LauncherViewTestAPI> test_api_; |
406 | 406 |
407 private: | 407 private: |
408 DISALLOW_COPY_AND_ASSIGN(LauncherViewTest); | 408 DISALLOW_COPY_AND_ASSIGN(LauncherViewTest); |
409 }; | 409 }; |
410 | 410 |
411 class LauncherViewLegacyShelfLayoutTest : public LauncherViewTest { | |
412 public: | |
413 LauncherViewLegacyShelfLayoutTest() : LauncherViewTest() {} | |
James Cook
2013/08/22 00:19:12
see below, but this could do something like:
{
Harry McCleave
2013/08/27 00:37:00
Done.
| |
414 | |
415 virtual void SetUp() OVERRIDE { | |
416 CommandLine::ForCurrentProcess()->AppendSwitch( | |
417 ash::switches::kAshDisableAlternateShelfLayout); | |
418 LauncherViewTest::SetUp(); | |
419 } | |
420 | |
421 protected: | |
422 virtual LauncherID AddBrowserShortcut() OVERRIDE { | |
423 LauncherItem browser_shortcut; | |
424 browser_shortcut.type = TYPE_BROWSER_SHORTCUT; | |
425 browser_shortcut.is_incognito = false; | |
426 | |
427 LauncherID id = model_->next_id(); | |
428 model_->AddAt(0, browser_shortcut); | |
429 test_api_->RunMessageLoopUntilAnimationsDone(); | |
430 return id; | |
431 } | |
432 | |
433 virtual void SetupForDragTest( | |
James Cook
2013/08/22 00:19:12
This feels to me like it doesn't need to be duplic
Harry McCleave
2013/08/27 00:37:00
Done.
| |
434 std::vector<std::pair<LauncherID, views::View*> >* id_map) OVERRIDE { | |
435 // Initialize |id_map| with the automatically-created launcher buttons. | |
436 for (size_t i = 0; i < model_->items().size(); ++i) { | |
437 internal::LauncherButton* button = test_api_->GetButton(i); | |
438 id_map->push_back(std::make_pair(model_->items()[i].id, button)); | |
439 } | |
440 ASSERT_NO_FATAL_FAILURE(CheckModelIDs(*id_map)); | |
441 | |
442 // Add 5 app launcher buttons for testing. | |
443 for (int i = 0; i < 5; ++i) { | |
444 LauncherID id = AddAppShortcut(); | |
445 // browser shortcut is located at index 0. So we should start to add app | |
446 // shortcut at index 1. | |
447 id_map->insert(id_map->begin() + (i + 1), | |
448 std::make_pair(id, GetButtonByID(id))); | |
449 } | |
450 ASSERT_NO_FATAL_FAILURE(CheckModelIDs(*id_map)); | |
451 } | |
452 | |
453 private: | |
454 DISALLOW_COPY_AND_ASSIGN(LauncherViewLegacyShelfLayoutTest); | |
455 }; | |
456 | |
411 class LauncherViewTextDirectionTest | 457 class LauncherViewTextDirectionTest |
412 : public LauncherViewTest, | 458 : public LauncherViewTest, |
413 public testing::WithParamInterface<bool> { | 459 public testing::WithParamInterface<bool> { |
414 public: | 460 public: |
415 LauncherViewTextDirectionTest() : is_rtl_(GetParam()) {} | 461 LauncherViewTextDirectionTest() : is_rtl_(GetParam()) {} |
416 virtual ~LauncherViewTextDirectionTest() {} | 462 virtual ~LauncherViewTextDirectionTest() {} |
417 | 463 |
418 virtual void SetUp() OVERRIDE { | 464 virtual void SetUp() OVERRIDE { |
419 LauncherViewTest::SetUp(); | 465 LauncherViewTest::SetUp(); |
420 original_locale_ = l10n_util::GetApplicationLocale(std::string()); | 466 original_locale_ = l10n_util::GetApplicationLocale(std::string()); |
(...skipping 112 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
533 LauncherID last_added = AddAppShortcut(); | 579 LauncherID last_added = AddAppShortcut(); |
534 while (!test_api_->IsOverflowButtonVisible()) { | 580 while (!test_api_->IsOverflowButtonVisible()) { |
535 // Added button is visible after animation while in this loop. | 581 // Added button is visible after animation while in this loop. |
536 EXPECT_TRUE(GetButtonByID(last_added)->visible()); | 582 EXPECT_TRUE(GetButtonByID(last_added)->visible()); |
537 | 583 |
538 last_added = AddAppShortcut(); | 584 last_added = AddAppShortcut(); |
539 ++items_added; | 585 ++items_added; |
540 ASSERT_LT(items_added, 10000); | 586 ASSERT_LT(items_added, 10000); |
541 } | 587 } |
542 | 588 |
589 EXPECT_FALSE(GetButtonByID(browser_button_id)->visible()); | |
590 } | |
591 | |
592 TEST_F(LauncherViewLegacyShelfLayoutTest, | |
593 AddAppShortcutWithBrowserButtonUntilOverflow) { | |
594 // All buttons should be visible. | |
595 ASSERT_EQ(test_api_->GetLastVisibleIndex() + 1, | |
596 test_api_->GetButtonCount()); | |
597 | |
598 LauncherID browser_button_id = AddTabbedBrowser(); | |
599 | |
600 // Add app shortcut until overflow. | |
601 int items_added = 0; | |
602 LauncherID last_added = AddAppShortcut(); | |
603 while (!test_api_->IsOverflowButtonVisible()) { | |
604 // Added button is visible after animation while in this loop. | |
605 EXPECT_TRUE(GetButtonByID(last_added)->visible()); | |
606 | |
607 last_added = AddAppShortcut(); | |
608 ++items_added; | |
609 ASSERT_LT(items_added, 10000); | |
610 } | |
611 | |
543 // The last added app short button should be visible. | 612 // The last added app short button should be visible. |
544 EXPECT_TRUE(GetButtonByID(last_added)->visible()); | 613 EXPECT_TRUE(GetButtonByID(last_added)->visible()); |
545 // And the browser button is invisible. | 614 // And the browser button is invisible. |
546 EXPECT_FALSE(GetButtonByID(browser_button_id)->visible()); | 615 EXPECT_FALSE(GetButtonByID(browser_button_id)->visible()); |
547 } | 616 } |
548 | 617 |
549 TEST_F(LauncherViewTest, AddPanelHidesTabbedBrowser) { | 618 TEST_F(LauncherViewTest, AddPanelHidesTabbedBrowser) { |
550 ASSERT_EQ(test_api_->GetLastVisibleIndex() + 1, | 619 ASSERT_EQ(test_api_->GetLastVisibleIndex() + 1, |
551 test_api_->GetButtonCount()); | 620 test_api_->GetButtonCount()); |
552 | 621 |
553 // Add tabbed browser until overflow, remember last visible tabbed browser. | 622 // Add tabbed browser until overflow, remember last visible tabbed browser. |
554 int items_added = 0; | 623 int items_added = 0; |
555 LauncherID first_added = AddTabbedBrowser(); | 624 LauncherID first_added = AddTabbedBrowser(); |
556 EXPECT_TRUE(GetButtonByID(first_added)->visible()); | 625 EXPECT_TRUE(GetButtonByID(first_added)->visible()); |
626 while (true) { | |
627 LauncherID added = AddTabbedBrowser(); | |
628 if (test_api_->IsOverflowButtonVisible()) { | |
629 EXPECT_FALSE(GetButtonByID(added)->visible()); | |
630 RemoveByID(added); | |
631 break; | |
632 } | |
633 ++items_added; | |
634 ASSERT_LT(items_added, 10000); | |
635 } | |
636 | |
637 EXPECT_FALSE(test_api_->IsOverflowButtonVisible()); | |
638 LauncherID panel = AddPanel(); | |
639 EXPECT_TRUE(GetButtonByID(panel)->visible()); | |
640 EXPECT_TRUE(test_api_->IsOverflowButtonVisible()); | |
641 RemoveByID(panel); | |
642 EXPECT_FALSE(test_api_->IsOverflowButtonVisible()); | |
643 } | |
644 | |
645 TEST_F(LauncherViewLegacyShelfLayoutTest, AddPanelHidesTabbedBrowser) { | |
646 ASSERT_EQ(test_api_->GetLastVisibleIndex() + 1, | |
647 test_api_->GetButtonCount()); | |
648 | |
649 // Add tabbed browser until overflow, remember last visible tabbed browser. | |
650 int items_added = 0; | |
651 LauncherID first_added = AddTabbedBrowser(); | |
652 EXPECT_TRUE(GetButtonByID(first_added)->visible()); | |
557 LauncherID last_visible = first_added; | 653 LauncherID last_visible = first_added; |
558 while (true) { | 654 while (true) { |
559 LauncherID added = AddTabbedBrowser(); | 655 LauncherID added = AddTabbedBrowser(); |
560 if (test_api_->IsOverflowButtonVisible()) { | 656 if (test_api_->IsOverflowButtonVisible()) { |
561 EXPECT_FALSE(GetButtonByID(added)->visible()); | 657 EXPECT_FALSE(GetButtonByID(added)->visible()); |
562 break; | 658 break; |
563 } | 659 } |
564 last_visible = added; | 660 last_visible = added; |
565 ++items_added; | 661 ++items_added; |
566 ASSERT_LT(items_added, 10000); | 662 ASSERT_LT(items_added, 10000); |
(...skipping 40 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
607 while (GetButtonByID(browser)->visible() && | 703 while (GetButtonByID(browser)->visible() && |
608 GetButtonByID(last_panel)->visible()) { | 704 GetButtonByID(last_panel)->visible()) { |
609 browser = AddTabbedBrowser(); | 705 browser = AddTabbedBrowser(); |
610 ++items_added; | 706 ++items_added; |
611 ASSERT_LT(items_added, 10000); | 707 ASSERT_LT(items_added, 10000); |
612 } | 708 } |
613 EXPECT_TRUE(GetButtonByID(last_panel)->visible()); | 709 EXPECT_TRUE(GetButtonByID(last_panel)->visible()); |
614 EXPECT_FALSE(GetButtonByID(browser)->visible()); | 710 EXPECT_FALSE(GetButtonByID(browser)->visible()); |
615 } | 711 } |
616 | 712 |
713 TEST_F(LauncherViewLegacyShelfLayoutTest, BrowserHidesExcessPanels) { | |
714 ASSERT_EQ(test_api_->GetLastVisibleIndex() + 1, | |
715 test_api_->GetButtonCount()); | |
716 | |
717 // Add tabbed browser. | |
718 LauncherID browser = AddTabbedBrowser(); | |
719 LauncherID first_panel = AddPanel(); | |
720 | |
721 EXPECT_TRUE(GetButtonByID(browser)->visible()); | |
722 EXPECT_TRUE(GetButtonByID(first_panel)->visible()); | |
723 | |
724 // Add panels until there is an overflow. | |
725 LauncherID last_panel = first_panel; | |
726 int items_added = 0; | |
727 while (!test_api_->IsOverflowButtonVisible()) { | |
728 last_panel = AddPanel(); | |
729 ++items_added; | |
730 ASSERT_LT(items_added, 10000); | |
731 } | |
732 | |
733 // The first panel should now be hidden by the new browsers needing space. | |
734 EXPECT_FALSE(GetButtonByID(first_panel)->visible()); | |
735 EXPECT_TRUE(GetButtonByID(last_panel)->visible()); | |
736 EXPECT_TRUE(GetButtonByID(browser)->visible()); | |
737 | |
738 // Adding browsers should eventually begin to hide browsers. We will add | |
739 // browsers until either the last panel or browser is hidden. | |
740 items_added = 0; | |
741 while (GetButtonByID(browser)->visible() && | |
742 GetButtonByID(last_panel)->visible()) { | |
743 browser = AddTabbedBrowser(); | |
744 ++items_added; | |
745 ASSERT_LT(items_added, 10000); | |
746 } | |
747 EXPECT_TRUE(GetButtonByID(last_panel)->visible()); | |
748 EXPECT_FALSE(GetButtonByID(browser)->visible()); | |
749 } | |
750 | |
617 // Adds button until overflow then removes first added one. Verifies that | 751 // Adds button until overflow then removes first added one. Verifies that |
618 // the last added one changes from invisible to visible and overflow | 752 // the last added one changes from invisible to visible and overflow |
619 // chevron is gone. | 753 // chevron is gone. |
620 TEST_F(LauncherViewTest, RemoveButtonRevealsOverflowed) { | 754 TEST_F(LauncherViewTest, RemoveButtonRevealsOverflowed) { |
621 // All buttons should be visible. | 755 // All buttons should be visible. |
622 ASSERT_EQ(test_api_->GetLastVisibleIndex() + 1, | 756 ASSERT_EQ(test_api_->GetLastVisibleIndex() + 1, |
623 test_api_->GetButtonCount()); | 757 test_api_->GetButtonCount()); |
624 | 758 |
625 // Add tabbed browser until overflow. | 759 // Add tabbed browser until overflow. |
626 int items_added = 0; | 760 int items_added = 0; |
(...skipping 71 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
698 | 832 |
699 // Check that model changes are handled correctly while a launcher icon is being | 833 // Check that model changes are handled correctly while a launcher icon is being |
700 // dragged. | 834 // dragged. |
701 TEST_F(LauncherViewTest, ModelChangesWhileDragging) { | 835 TEST_F(LauncherViewTest, ModelChangesWhileDragging) { |
702 internal::LauncherButtonHost* button_host = launcher_view_; | 836 internal::LauncherButtonHost* button_host = launcher_view_; |
703 | 837 |
704 std::vector<std::pair<LauncherID, views::View*> > id_map; | 838 std::vector<std::pair<LauncherID, views::View*> > id_map; |
705 SetupForDragTest(&id_map); | 839 SetupForDragTest(&id_map); |
706 | 840 |
707 // Dragging browser shortcut at index 0. | 841 // Dragging browser shortcut at index 0. |
842 EXPECT_TRUE(model_->items()[1].type == TYPE_BROWSER_SHORTCUT); | |
843 views::View* dragged_button = SimulateDrag( | |
844 internal::LauncherButtonHost::MOUSE, 1, 3); | |
845 std::rotate(id_map.begin() + 1, | |
846 id_map.begin() + 2, | |
847 id_map.begin() + 4); | |
848 ASSERT_NO_FATAL_FAILURE(CheckModelIDs(id_map)); | |
849 button_host->PointerReleasedOnButton(dragged_button, | |
850 internal::LauncherButtonHost::MOUSE, | |
851 false); | |
852 EXPECT_TRUE(model_->items()[3].type == TYPE_BROWSER_SHORTCUT); | |
853 | |
854 // Dragging changes model order. | |
855 dragged_button = SimulateDrag( | |
856 internal::LauncherButtonHost::MOUSE, 1, 3); | |
857 std::rotate(id_map.begin() + 1, | |
858 id_map.begin() + 2, | |
859 id_map.begin() + 4); | |
860 ASSERT_NO_FATAL_FAILURE(CheckModelIDs(id_map)); | |
861 | |
862 // Cancelling the drag operation restores previous order. | |
863 button_host->PointerReleasedOnButton(dragged_button, | |
864 internal::LauncherButtonHost::MOUSE, | |
865 true); | |
866 std::rotate(id_map.begin() + 1, | |
867 id_map.begin() + 3, | |
868 id_map.begin() + 4); | |
869 ASSERT_NO_FATAL_FAILURE(CheckModelIDs(id_map)); | |
870 | |
871 // Deleting an item keeps the remaining intact. | |
872 dragged_button = SimulateDrag(internal::LauncherButtonHost::MOUSE, 1, 3); | |
873 model_->RemoveItemAt(1); | |
874 id_map.erase(id_map.begin() + 1); | |
875 ASSERT_NO_FATAL_FAILURE(CheckModelIDs(id_map)); | |
876 button_host->PointerReleasedOnButton(dragged_button, | |
877 internal::LauncherButtonHost::MOUSE, | |
878 false); | |
879 | |
880 // Adding a launcher item cancels the drag and respects the order. | |
881 dragged_button = SimulateDrag(internal::LauncherButtonHost::MOUSE, 1, 3); | |
882 LauncherID new_id = AddAppShortcut(); | |
883 id_map.insert(id_map.begin() + 6, | |
884 std::make_pair(new_id, GetButtonByID(new_id))); | |
885 ASSERT_NO_FATAL_FAILURE(CheckModelIDs(id_map)); | |
886 button_host->PointerReleasedOnButton(dragged_button, | |
887 internal::LauncherButtonHost::MOUSE, | |
888 false); | |
889 | |
890 // Adding a launcher item at the end (i.e. a panel) canels drag and respects | |
891 // the order. | |
892 dragged_button = SimulateDrag(internal::LauncherButtonHost::MOUSE, 1, 3); | |
893 new_id = AddPanel(); | |
894 id_map.insert(id_map.begin() + 7, | |
895 std::make_pair(new_id, GetButtonByID(new_id))); | |
896 ASSERT_NO_FATAL_FAILURE(CheckModelIDs(id_map)); | |
897 button_host->PointerReleasedOnButton(dragged_button, | |
898 internal::LauncherButtonHost::MOUSE, | |
899 false); | |
900 } | |
901 | |
902 TEST_F(LauncherViewLegacyShelfLayoutTest, ModelChangesWhileDragging) { | |
903 internal::LauncherButtonHost* button_host = launcher_view_; | |
904 | |
905 std::vector<std::pair<LauncherID, views::View*> > id_map; | |
906 SetupForDragTest(&id_map); | |
907 | |
908 // Dragging browser shortcut at index 0. | |
708 EXPECT_TRUE(model_->items()[0].type == TYPE_BROWSER_SHORTCUT); | 909 EXPECT_TRUE(model_->items()[0].type == TYPE_BROWSER_SHORTCUT); |
709 views::View* dragged_button = SimulateDrag( | 910 views::View* dragged_button = SimulateDrag( |
710 internal::LauncherButtonHost::MOUSE, 0, 2); | 911 internal::LauncherButtonHost::MOUSE, 0, 2); |
711 std::rotate(id_map.begin(), | 912 std::rotate(id_map.begin(), |
712 id_map.begin() + 1, | 913 id_map.begin() + 1, |
713 id_map.begin() + 3); | 914 id_map.begin() + 3); |
714 ASSERT_NO_FATAL_FAILURE(CheckModelIDs(id_map)); | 915 ASSERT_NO_FATAL_FAILURE(CheckModelIDs(id_map)); |
715 button_host->PointerReleasedOnButton(dragged_button, | 916 button_host->PointerReleasedOnButton(dragged_button, |
716 internal::LauncherButtonHost::MOUSE, | 917 internal::LauncherButtonHost::MOUSE, |
717 false); | 918 false); |
(...skipping 49 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
767 | 968 |
768 // Check that 2nd drag from the other pointer would be ignored. | 969 // Check that 2nd drag from the other pointer would be ignored. |
769 TEST_F(LauncherViewTest, SimultaneousDrag) { | 970 TEST_F(LauncherViewTest, SimultaneousDrag) { |
770 internal::LauncherButtonHost* button_host = launcher_view_; | 971 internal::LauncherButtonHost* button_host = launcher_view_; |
771 | 972 |
772 std::vector<std::pair<LauncherID, views::View*> > id_map; | 973 std::vector<std::pair<LauncherID, views::View*> > id_map; |
773 SetupForDragTest(&id_map); | 974 SetupForDragTest(&id_map); |
774 | 975 |
775 // Start a mouse drag. | 976 // Start a mouse drag. |
776 views::View* dragged_button_mouse = SimulateDrag( | 977 views::View* dragged_button_mouse = SimulateDrag( |
978 internal::LauncherButtonHost::MOUSE, 1, 3); | |
979 std::rotate(id_map.begin() + 1, | |
980 id_map.begin() + 2, | |
981 id_map.begin() + 4); | |
982 | |
983 // Attempt a touch drag before the mouse drag finishes. | |
984 views::View* dragged_button_touch = SimulateDrag( | |
985 internal::LauncherButtonHost::TOUCH, 4, 2); | |
986 (void)button_host;(void)dragged_button_mouse;(void)dragged_button_touch; | |
987 // Nothing changes since 2nd drag is ignored. | |
988 ASSERT_NO_FATAL_FAILURE(CheckModelIDs(id_map)); | |
989 | |
990 // Finish the mouse drag. | |
991 button_host->PointerReleasedOnButton(dragged_button_mouse, | |
992 internal::LauncherButtonHost::MOUSE, | |
993 false); | |
994 ASSERT_NO_FATAL_FAILURE(CheckModelIDs(id_map)); | |
995 | |
996 // Now start a touch drag. | |
997 dragged_button_touch = SimulateDrag( | |
998 internal::LauncherButtonHost::TOUCH, 4, 2); | |
999 std::rotate(id_map.begin() + 3, | |
1000 id_map.begin() + 4, | |
1001 id_map.begin() + 5); | |
1002 ASSERT_NO_FATAL_FAILURE(CheckModelIDs(id_map)); | |
1003 | |
1004 // And attempt a mouse drag before the touch drag finishes. | |
1005 dragged_button_mouse = SimulateDrag( | |
1006 internal::LauncherButtonHost::MOUSE, 1, 2); | |
1007 | |
1008 // Nothing changes since 2nd drag is ignored. | |
1009 ASSERT_NO_FATAL_FAILURE(CheckModelIDs(id_map)); | |
1010 | |
1011 button_host->PointerReleasedOnButton(dragged_button_touch, | |
1012 internal::LauncherButtonHost::TOUCH, | |
1013 false); | |
1014 ASSERT_NO_FATAL_FAILURE(CheckModelIDs(id_map)); | |
1015 } | |
1016 | |
1017 TEST_F(LauncherViewLegacyShelfLayoutTest, SimultaneousDrag) { | |
1018 internal::LauncherButtonHost* button_host = launcher_view_; | |
1019 | |
1020 std::vector<std::pair<LauncherID, views::View*> > id_map; | |
1021 SetupForDragTest(&id_map); | |
1022 | |
1023 // Start a mouse drag. | |
1024 views::View* dragged_button_mouse = SimulateDrag( | |
777 internal::LauncherButtonHost::MOUSE, 0, 2); | 1025 internal::LauncherButtonHost::MOUSE, 0, 2); |
778 std::rotate(id_map.begin(), | 1026 std::rotate(id_map.begin(), |
779 id_map.begin() + 1, | 1027 id_map.begin() + 1, |
780 id_map.begin() + 3); | 1028 id_map.begin() + 3); |
781 ASSERT_NO_FATAL_FAILURE(CheckModelIDs(id_map)); | 1029 ASSERT_NO_FATAL_FAILURE(CheckModelIDs(id_map)); |
782 // Attempt a touch drag before the mouse drag finishes. | 1030 // Attempt a touch drag before the mouse drag finishes. |
783 views::View* dragged_button_touch = SimulateDrag( | 1031 views::View* dragged_button_touch = SimulateDrag( |
784 internal::LauncherButtonHost::TOUCH, 3, 1); | 1032 internal::LauncherButtonHost::TOUCH, 3, 1); |
785 | 1033 |
786 // Nothing changes since 2nd drag is ignored. | 1034 // Nothing changes since 2nd drag is ignored. |
(...skipping 31 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
818 TEST_F(LauncherViewTest, ClickOneDragAnother) { | 1066 TEST_F(LauncherViewTest, ClickOneDragAnother) { |
819 internal::LauncherButtonHost* button_host = launcher_view_; | 1067 internal::LauncherButtonHost* button_host = launcher_view_; |
820 | 1068 |
821 std::vector<std::pair<LauncherID, views::View*> > id_map; | 1069 std::vector<std::pair<LauncherID, views::View*> > id_map; |
822 SetupForDragTest(&id_map); | 1070 SetupForDragTest(&id_map); |
823 | 1071 |
824 // A click on item 1 is simulated. | 1072 // A click on item 1 is simulated. |
825 SimulateClick(internal::LauncherButtonHost::MOUSE, 1); | 1073 SimulateClick(internal::LauncherButtonHost::MOUSE, 1); |
826 | 1074 |
827 // Dragging browser index at 0 should change the model order correctly. | 1075 // Dragging browser index at 0 should change the model order correctly. |
1076 EXPECT_TRUE(model_->items()[1].type == TYPE_BROWSER_SHORTCUT); | |
1077 views::View* dragged_button = SimulateDrag( | |
1078 internal::LauncherButtonHost::MOUSE, 1, 3); | |
1079 std::rotate(id_map.begin() + 1, | |
1080 id_map.begin() + 2, | |
1081 id_map.begin() + 4); | |
1082 ASSERT_NO_FATAL_FAILURE(CheckModelIDs(id_map)); | |
1083 button_host->PointerReleasedOnButton(dragged_button, | |
1084 internal::LauncherButtonHost::MOUSE, | |
1085 false); | |
1086 EXPECT_TRUE(model_->items()[3].type == TYPE_BROWSER_SHORTCUT); | |
1087 } | |
1088 | |
1089 TEST_F(LauncherViewLegacyShelfLayoutTest, ClickOneDragAnother) { | |
1090 internal::LauncherButtonHost* button_host = launcher_view_; | |
1091 | |
1092 std::vector<std::pair<LauncherID, views::View*> > id_map; | |
1093 SetupForDragTest(&id_map); | |
1094 | |
1095 // A click on item 1 is simulated. | |
1096 SimulateClick(internal::LauncherButtonHost::MOUSE, 1); | |
1097 | |
1098 // Dragging browser index at 0 should change the model order correctly. | |
828 EXPECT_TRUE(model_->items()[0].type == TYPE_BROWSER_SHORTCUT); | 1099 EXPECT_TRUE(model_->items()[0].type == TYPE_BROWSER_SHORTCUT); |
829 views::View* dragged_button = SimulateDrag( | 1100 views::View* dragged_button = SimulateDrag( |
830 internal::LauncherButtonHost::MOUSE, 0, 2); | 1101 internal::LauncherButtonHost::MOUSE, 0, 2); |
831 std::rotate(id_map.begin(), | 1102 std::rotate(id_map.begin(), |
832 id_map.begin() + 1, | 1103 id_map.begin() + 1, |
833 id_map.begin() + 3); | 1104 id_map.begin() + 3); |
834 ASSERT_NO_FATAL_FAILURE(CheckModelIDs(id_map)); | 1105 ASSERT_NO_FATAL_FAILURE(CheckModelIDs(id_map)); |
835 button_host->PointerReleasedOnButton(dragged_button, | 1106 button_host->PointerReleasedOnButton(dragged_button, |
836 internal::LauncherButtonHost::MOUSE, | 1107 internal::LauncherButtonHost::MOUSE, |
837 false); | 1108 false); |
(...skipping 12 matching lines...) Expand all Loading... | |
850 internal::LauncherButton* button = GetButtonByID(last_added); | 1121 internal::LauncherButton* button = GetButtonByID(last_added); |
851 ASSERT_EQ(internal::LauncherButton::STATE_RUNNING, button->state()); | 1122 ASSERT_EQ(internal::LauncherButton::STATE_RUNNING, button->state()); |
852 item.status = ash::STATUS_ACTIVE; | 1123 item.status = ash::STATUS_ACTIVE; |
853 model_->Set(index, item); | 1124 model_->Set(index, item); |
854 ASSERT_EQ(internal::LauncherButton::STATE_ACTIVE, button->state()); | 1125 ASSERT_EQ(internal::LauncherButton::STATE_ACTIVE, button->state()); |
855 item.status = ash::STATUS_ATTENTION; | 1126 item.status = ash::STATUS_ATTENTION; |
856 model_->Set(index, item); | 1127 model_->Set(index, item); |
857 ASSERT_EQ(internal::LauncherButton::STATE_ATTENTION, button->state()); | 1128 ASSERT_EQ(internal::LauncherButton::STATE_ATTENTION, button->state()); |
858 } | 1129 } |
859 | 1130 |
860 TEST_F(LauncherViewTest, LauncherItemPositionReflectedOnStateChanged) { | 1131 TEST_F(LauncherViewLegacyShelfLayoutTest, |
1132 LauncherItemPositionReflectedOnStateChanged) { | |
861 ASSERT_EQ(test_api_->GetLastVisibleIndex() + 1, | 1133 ASSERT_EQ(test_api_->GetLastVisibleIndex() + 1, |
862 test_api_->GetButtonCount()); | 1134 test_api_->GetButtonCount()); |
863 | 1135 |
864 // Add 2 items to the launcher. | 1136 // Add 2 items to the launcher. |
865 LauncherID item1_id = AddTabbedBrowser(); | 1137 LauncherID item1_id = AddTabbedBrowser(); |
866 LauncherID item2_id = AddPlatformAppNoWait(); | 1138 LauncherID item2_id = AddPlatformAppNoWait(); |
867 internal::LauncherButton* item1_button = GetButtonByID(item1_id); | 1139 internal::LauncherButton* item1_button = GetButtonByID(item1_id); |
868 internal::LauncherButton* item2_button = GetButtonByID(item2_id); | 1140 internal::LauncherButton* item2_button = GetButtonByID(item2_id); |
869 | 1141 |
870 internal::LauncherButton::State state_mask = | 1142 internal::LauncherButton::State state_mask = |
871 static_cast<internal::LauncherButton::State> | 1143 static_cast<internal::LauncherButton::State> |
872 (internal::LauncherButton::STATE_NORMAL | | 1144 (internal::LauncherButton::STATE_NORMAL | |
873 internal::LauncherButton::STATE_HOVERED | | 1145 internal::LauncherButton::STATE_HOVERED | |
874 internal::LauncherButton::STATE_RUNNING | | 1146 internal::LauncherButton::STATE_RUNNING | |
875 internal::LauncherButton::STATE_ACTIVE | | 1147 internal::LauncherButton::STATE_ACTIVE | |
876 internal::LauncherButton::STATE_ATTENTION | | 1148 internal::LauncherButton::STATE_ATTENTION | |
877 internal::LauncherButton::STATE_FOCUSED); | 1149 internal::LauncherButton::STATE_FOCUSED); |
878 | 1150 |
879 // Clear the button states. | 1151 // Clear the button states. |
880 item1_button->ClearState(state_mask); | 1152 item1_button->ClearState(state_mask); |
881 item2_button->ClearState(state_mask); | 1153 item2_button->ClearState(state_mask); |
882 | 1154 |
883 // Since default alignment in tests is bottom, state is reflected in y-axis. | 1155 // Since default alignment in tests is bottom, state is reflected in y-axis. |
884 ASSERT_EQ(item1_button->GetIconBounds().y(), | 1156 ASSERT_EQ(item1_button->GetIconBounds().y(), |
885 item2_button->GetIconBounds().y()); | 1157 item2_button->GetIconBounds().y()); |
886 item1_button->AddState(internal::LauncherButton::STATE_HOVERED); | 1158 item1_button->AddState(internal::LauncherButton::STATE_HOVERED); |
887 ASSERT_NE(item1_button->GetIconBounds().y(), | 1159 ASSERT_NE(item1_button->GetIconBounds().y(), |
888 item2_button->GetIconBounds().y()); | 1160 item2_button->GetIconBounds().y()); |
889 item1_button->ClearState(internal::LauncherButton::STATE_HOVERED); | 1161 item1_button->ClearState(internal::LauncherButton::STATE_HOVERED); |
890 | |
891 // Enable the alternate shelf layout. | |
892 CommandLine::ForCurrentProcess()->AppendSwitch( | |
893 ash::switches::kAshUseAlternateShelfLayout); | |
894 launcher_view_->Layout(); | |
895 | |
896 // Since default alignment in tests is bottom, state is reflected in y-axis. | |
897 // In alternate shelf layout there is no visible hovered state. | |
898 ASSERT_EQ(item1_button->GetIconBounds().y(), | |
899 item2_button->GetIconBounds().y()); | |
900 item1_button->AddState(internal::LauncherButton::STATE_HOVERED); | |
901 ASSERT_EQ(item1_button->GetIconBounds().y(), | |
902 item2_button->GetIconBounds().y()); | |
903 } | 1162 } |
904 | 1163 |
905 // Confirm that item status changes are reflected in the buttons | 1164 // Confirm that item status changes are reflected in the buttons |
906 // for platform apps. | 1165 // for platform apps. |
907 TEST_F(LauncherViewTest, LauncherItemStatusPlatformApp) { | 1166 TEST_F(LauncherViewTest, LauncherItemStatusPlatformApp) { |
908 ASSERT_EQ(test_api_->GetLastVisibleIndex() + 1, | 1167 ASSERT_EQ(test_api_->GetLastVisibleIndex() + 1, |
909 test_api_->GetButtonCount()); | 1168 test_api_->GetButtonCount()); |
910 | 1169 |
911 // Add tabbed browser. | 1170 // Add tabbed browser. |
912 LauncherID last_added = AddPlatformApp(); | 1171 LauncherID last_added = AddPlatformApp(); |
(...skipping 154 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
1067 // Move the mouse over the button and check that it is visible. | 1326 // Move the mouse over the button and check that it is visible. |
1068 views::View* app_list_button = launcher_view_->GetAppListButtonView(); | 1327 views::View* app_list_button = launcher_view_->GetAppListButtonView(); |
1069 gfx::Rect bounds = app_list_button->GetBoundsInScreen(); | 1328 gfx::Rect bounds = app_list_button->GetBoundsInScreen(); |
1070 generator.MoveMouseTo(bounds.CenterPoint()); | 1329 generator.MoveMouseTo(bounds.CenterPoint()); |
1071 // Wait for the timer to go off. | 1330 // Wait for the timer to go off. |
1072 RunAllPendingInMessageLoop(); | 1331 RunAllPendingInMessageLoop(); |
1073 EXPECT_TRUE(tooltip_manager->IsVisible()); | 1332 EXPECT_TRUE(tooltip_manager->IsVisible()); |
1074 | 1333 |
1075 // Move the mouse cursor slightly to the right of the item. The tooltip should | 1334 // Move the mouse cursor slightly to the right of the item. The tooltip should |
1076 // stay open. | 1335 // stay open. |
1077 generator.MoveMouseBy(-(bounds.width() / 2 + 5), 0); | 1336 generator.MoveMouseBy(bounds.width() / 2 + 5, 0); |
1078 // Make sure there is no delayed close. | 1337 // Make sure there is no delayed close. |
1079 RunAllPendingInMessageLoop(); | 1338 RunAllPendingInMessageLoop(); |
1080 EXPECT_TRUE(tooltip_manager->IsVisible()); | 1339 EXPECT_TRUE(tooltip_manager->IsVisible()); |
1081 | 1340 |
1082 // Move back - it should still stay open. | 1341 // Move back - it should still stay open. |
1083 generator.MoveMouseBy(bounds.width() / 2 + 5, 0); | 1342 generator.MoveMouseBy(-(bounds.width() / 2 + 5), 0); |
1084 // Make sure there is no delayed close. | 1343 // Make sure there is no delayed close. |
1085 RunAllPendingInMessageLoop(); | 1344 RunAllPendingInMessageLoop(); |
1086 EXPECT_TRUE(tooltip_manager->IsVisible()); | 1345 EXPECT_TRUE(tooltip_manager->IsVisible()); |
1087 | 1346 |
1088 // Now move the mouse cursor slightly above the item - so that it is over the | 1347 // Now move the mouse cursor slightly above the item - so that it is over the |
1089 // tooltip bubble. Now it should disappear. | 1348 // tooltip bubble. Now it should disappear. |
1090 generator.MoveMouseBy(0, -(bounds.height() / 2 + 5)); | 1349 generator.MoveMouseBy(0, -(bounds.height() / 2 + 5)); |
1091 // Wait until the delayed close kicked in. | 1350 // Wait until the delayed close kicked in. |
1092 RunAllPendingInMessageLoop(); | 1351 RunAllPendingInMessageLoop(); |
1093 EXPECT_FALSE(tooltip_manager->IsVisible()); | 1352 EXPECT_FALSE(tooltip_manager->IsVisible()); |
(...skipping 31 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
1125 const int app_list_button_index = test_api_->GetButtonCount() - 1; | 1384 const int app_list_button_index = test_api_->GetButtonCount() - 1; |
1126 const gfx::Rect& app_list_ideal_bounds = | 1385 const gfx::Rect& app_list_ideal_bounds = |
1127 test_api_->GetIdealBoundsByIndex(app_list_button_index); | 1386 test_api_->GetIdealBoundsByIndex(app_list_button_index); |
1128 const gfx::Rect& app_list_bounds = | 1387 const gfx::Rect& app_list_bounds = |
1129 test_api_->GetBoundsByIndex(app_list_button_index); | 1388 test_api_->GetBoundsByIndex(app_list_button_index); |
1130 EXPECT_EQ(app_list_bounds, app_list_ideal_bounds); | 1389 EXPECT_EQ(app_list_bounds, app_list_ideal_bounds); |
1131 } | 1390 } |
1132 | 1391 |
1133 // Check that the first item in the list follows Fitt's law by including the | 1392 // Check that the first item in the list follows Fitt's law by including the |
1134 // first pixel and being therefore bigger then the others. | 1393 // first pixel and being therefore bigger then the others. |
1135 TEST_F(LauncherViewTest, CheckFittsLaw) { | 1394 TEST_F(LauncherViewLegacyShelfLayoutTest, CheckFittsLaw) { |
1136 // All buttons should be visible. | 1395 // All buttons should be visible. |
1137 ASSERT_EQ(test_api_->GetLastVisibleIndex() + 1, | 1396 ASSERT_EQ(test_api_->GetLastVisibleIndex() + 1, |
1138 test_api_->GetButtonCount()); | 1397 test_api_->GetButtonCount()); |
1139 gfx::Rect ideal_bounds_0 = test_api_->GetIdealBoundsByIndex(0); | 1398 gfx::Rect ideal_bounds_0 = test_api_->GetIdealBoundsByIndex(0); |
1140 gfx::Rect ideal_bounds_1 = test_api_->GetIdealBoundsByIndex(1); | 1399 gfx::Rect ideal_bounds_1 = test_api_->GetIdealBoundsByIndex(1); |
1141 EXPECT_GT(ideal_bounds_0.width(), ideal_bounds_1.width()); | 1400 EXPECT_GT(ideal_bounds_0.width(), ideal_bounds_1.width()); |
1142 } | 1401 } |
1143 | 1402 |
1144 INSTANTIATE_TEST_CASE_P(LtrRtl, LauncherViewTextDirectionTest, testing::Bool()); | 1403 INSTANTIATE_TEST_CASE_P(LtrRtl, LauncherViewTextDirectionTest, testing::Bool()); |
1145 | 1404 |
1146 } // namespace test | 1405 } // namespace test |
1147 } // namespace ash | 1406 } // namespace ash |
OLD | NEW |