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

Side by Side Diff: ash/launcher/launcher_view_unittest.cc

Issue 22793011: ash:Shelf - Enable Alternate Shelf and Side Shelf by default. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: rebase Created 7 years, 3 months 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
« no previous file with comments | « ash/launcher/launcher_view.cc ('k') | ash/root_window_controller_unittest.cc » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
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 177 matching lines...) Expand 10 before | Expand all | Expand 10 after
188 // No animation happens for LauncherView bounds change. 188 // No animation happens for LauncherView bounds change.
189 EXPECT_TRUE(observer()->change_notified()); 189 EXPECT_TRUE(observer()->change_notified());
190 observer()->Reset(); 190 observer()->Reset();
191 } 191 }
192 192
193 //////////////////////////////////////////////////////////////////////////////// 193 ////////////////////////////////////////////////////////////////////////////////
194 // LauncherView tests. 194 // LauncherView tests.
195 195
196 class LauncherViewTest : public AshTestBase { 196 class LauncherViewTest : public AshTestBase {
197 public: 197 public:
198 LauncherViewTest() : model_(NULL), launcher_view_(NULL) {} 198 LauncherViewTest() : model_(NULL), launcher_view_(NULL), browser_index_(1) {}
199 virtual ~LauncherViewTest() {} 199 virtual ~LauncherViewTest() {}
200 200
201 virtual void SetUp() OVERRIDE { 201 virtual void SetUp() OVERRIDE {
202 AshTestBase::SetUp(); 202 AshTestBase::SetUp();
203 test::ShellTestApi test_api(Shell::GetInstance()); 203 test::ShellTestApi test_api(Shell::GetInstance());
204 model_ = test_api.launcher_model(); 204 model_ = test_api.launcher_model();
205 Launcher* launcher = Launcher::ForPrimaryDisplay(); 205 Launcher* launcher = Launcher::ForPrimaryDisplay();
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 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 227
228 LauncherID id = model_->next_id(); 228 LauncherID id = model_->next_id();
229 model_->AddAt(0, browser_shortcut); 229 model_->AddAt(browser_index_, browser_shortcut);
230 test_api_->RunMessageLoopUntilAnimationsDone(); 230 test_api_->RunMessageLoopUntilAnimationsDone();
231 return id; 231 return id;
232 } 232 }
233 233
234 LauncherID AddAppShortcut() { 234 LauncherID AddAppShortcut() {
235 LauncherItem item; 235 LauncherItem item;
236 item.type = TYPE_APP_SHORTCUT; 236 item.type = TYPE_APP_SHORTCUT;
237 item.status = STATUS_CLOSED; 237 item.status = STATUS_CLOSED;
238 238
239 LauncherID id = model_->next_id(); 239 LauncherID id = model_->next_id();
(...skipping 119 matching lines...) Expand 10 before | Expand all | Expand 10 after
359 // Initialize |id_map| with the automatically-created launcher buttons. 359 // Initialize |id_map| with the automatically-created launcher buttons.
360 for (size_t i = 0; i < model_->items().size(); ++i) { 360 for (size_t i = 0; i < model_->items().size(); ++i) {
361 internal::LauncherButton* button = test_api_->GetButton(i); 361 internal::LauncherButton* button = test_api_->GetButton(i);
362 id_map->push_back(std::make_pair(model_->items()[i].id, button)); 362 id_map->push_back(std::make_pair(model_->items()[i].id, button));
363 } 363 }
364 ASSERT_NO_FATAL_FAILURE(CheckModelIDs(*id_map)); 364 ASSERT_NO_FATAL_FAILURE(CheckModelIDs(*id_map));
365 365
366 // Add 5 app launcher buttons for testing. 366 // Add 5 app launcher buttons for testing.
367 for (int i = 0; i < 5; ++i) { 367 for (int i = 0; i < 5; ++i) {
368 LauncherID id = AddAppShortcut(); 368 LauncherID id = AddAppShortcut();
369 // browser shortcut is located at index 0. So we should start to add app 369 // App Icon is located at index 0, and browser shortcut is located at
370 // shortcut at index 1. 370 // index 1. So we should start to add app shortcut at index 2.
371 id_map->insert(id_map->begin() + (i + 1), 371 id_map->insert(id_map->begin() + (i + browser_index_ + 1),
372 std::make_pair(id, GetButtonByID(id))); 372 std::make_pair(id, GetButtonByID(id)));
373 } 373 }
374 ASSERT_NO_FATAL_FAILURE(CheckModelIDs(*id_map)); 374 ASSERT_NO_FATAL_FAILURE(CheckModelIDs(*id_map));
375 } 375 }
376 376
377 views::View* GetTooltipAnchorView() { 377 views::View* GetTooltipAnchorView() {
378 return launcher_view_->tooltip_manager()->anchor_; 378 return launcher_view_->tooltip_manager()->anchor_;
379 } 379 }
380 380
381 void ShowTooltip() { 381 void ShowTooltip() {
382 launcher_view_->tooltip_manager()->ShowInternal(); 382 launcher_view_->tooltip_manager()->ShowInternal();
383 } 383 }
384 384
385 LauncherModel* model_; 385 LauncherModel* model_;
386 internal::LauncherView* launcher_view_; 386 internal::LauncherView* launcher_view_;
387 int browser_index_;
387 388
388 scoped_ptr<LauncherViewTestAPI> test_api_; 389 scoped_ptr<LauncherViewTestAPI> test_api_;
389 390
390 private: 391 private:
391 DISALLOW_COPY_AND_ASSIGN(LauncherViewTest); 392 DISALLOW_COPY_AND_ASSIGN(LauncherViewTest);
392 }; 393 };
393 394
395 class LauncherViewLegacyShelfLayoutTest : public LauncherViewTest {
396 public:
397 LauncherViewLegacyShelfLayoutTest() : LauncherViewTest() {
398 browser_index_ = 0;
399 }
400
401 virtual ~LauncherViewLegacyShelfLayoutTest() {}
402
403 virtual void SetUp() OVERRIDE {
404 CommandLine::ForCurrentProcess()->AppendSwitch(
405 ash::switches::kAshDisableAlternateShelfLayout);
406 LauncherViewTest::SetUp();
407 }
408
409 private:
410 DISALLOW_COPY_AND_ASSIGN(LauncherViewLegacyShelfLayoutTest);
411 };
412
394 class LauncherViewTextDirectionTest 413 class LauncherViewTextDirectionTest
395 : public LauncherViewTest, 414 : public LauncherViewTest,
396 public testing::WithParamInterface<bool> { 415 public testing::WithParamInterface<bool> {
397 public: 416 public:
398 LauncherViewTextDirectionTest() : is_rtl_(GetParam()) {} 417 LauncherViewTextDirectionTest() : is_rtl_(GetParam()) {}
399 virtual ~LauncherViewTextDirectionTest() {} 418 virtual ~LauncherViewTextDirectionTest() {}
400 419
401 virtual void SetUp() OVERRIDE { 420 virtual void SetUp() OVERRIDE {
402 LauncherViewTest::SetUp(); 421 LauncherViewTest::SetUp();
403 original_locale_ = l10n_util::GetApplicationLocale(std::string()); 422 original_locale_ = l10n_util::GetApplicationLocale(std::string());
(...skipping 104 matching lines...) Expand 10 before | Expand all | Expand 10 after
508 LauncherID last_added = AddAppShortcut(); 527 LauncherID last_added = AddAppShortcut();
509 while (!test_api_->IsOverflowButtonVisible()) { 528 while (!test_api_->IsOverflowButtonVisible()) {
510 // Added button is visible after animation while in this loop. 529 // Added button is visible after animation while in this loop.
511 EXPECT_TRUE(GetButtonByID(last_added)->visible()); 530 EXPECT_TRUE(GetButtonByID(last_added)->visible());
512 531
513 last_added = AddAppShortcut(); 532 last_added = AddAppShortcut();
514 ++items_added; 533 ++items_added;
515 ASSERT_LT(items_added, 10000); 534 ASSERT_LT(items_added, 10000);
516 } 535 }
517 536
537 // And the platform app button is invisible.
538 EXPECT_FALSE(GetButtonByID(browser_button_id)->visible());
539 }
540
541 TEST_F(LauncherViewLegacyShelfLayoutTest,
542 AddAppShortcutWithBrowserButtonUntilOverflow) {
543 // All buttons should be visible.
544 ASSERT_EQ(test_api_->GetLastVisibleIndex() + 1,
545 test_api_->GetButtonCount());
546
547 LauncherID browser_button_id = AddPlatformApp();
548
549 // Add app shortcut until overflow.
550 int items_added = 0;
551 LauncherID last_added = AddAppShortcut();
552 while (!test_api_->IsOverflowButtonVisible()) {
553 // Added button is visible after animation while in this loop.
554 EXPECT_TRUE(GetButtonByID(last_added)->visible());
555
556 last_added = AddAppShortcut();
557 ++items_added;
558 ASSERT_LT(items_added, 10000);
559 }
560
518 // The last added app short button should be visible. 561 // The last added app short button should be visible.
519 EXPECT_TRUE(GetButtonByID(last_added)->visible()); 562 EXPECT_TRUE(GetButtonByID(last_added)->visible());
520 // And the platform app button is invisible. 563 // And the platform app button is invisible.
521 EXPECT_FALSE(GetButtonByID(browser_button_id)->visible()); 564 EXPECT_FALSE(GetButtonByID(browser_button_id)->visible());
522 } 565 }
523 566
524 TEST_F(LauncherViewTest, AddPanelHidesPlatformAppButton) { 567 TEST_F(LauncherViewTest, AddPanelHidesPlatformAppButton) {
525 ASSERT_EQ(test_api_->GetLastVisibleIndex() + 1, 568 ASSERT_EQ(test_api_->GetLastVisibleIndex() + 1,
526 test_api_->GetButtonCount()); 569 test_api_->GetButtonCount());
527 570
528 // Add platform app button until overflow, remember last visible platform app 571 // Add platform app button until overflow, remember last visible platform app
529 // button. 572 // button.
530 int items_added = 0; 573 int items_added = 0;
531 LauncherID first_added = AddPlatformApp(); 574 LauncherID first_added = AddPlatformApp();
532 EXPECT_TRUE(GetButtonByID(first_added)->visible()); 575 EXPECT_TRUE(GetButtonByID(first_added)->visible());
576 while (true) {
577 LauncherID added = AddPlatformApp();
578 if (test_api_->IsOverflowButtonVisible()) {
579 EXPECT_FALSE(GetButtonByID(added)->visible());
580 RemoveByID(added);
581 break;
582 }
583 ++items_added;
584 ASSERT_LT(items_added, 10000);
585 }
586
587 LauncherID panel = AddPanel();
588 EXPECT_TRUE(test_api_->IsOverflowButtonVisible());
589
590 RemoveByID(panel);
591 EXPECT_FALSE(test_api_->IsOverflowButtonVisible());
592 }
593
594 TEST_F(LauncherViewLegacyShelfLayoutTest, AddPanelHidesPlatformAppButton) {
595 ASSERT_EQ(test_api_->GetLastVisibleIndex() + 1,
596 test_api_->GetButtonCount());
597
598 // Add platform app button until overflow, remember last visible platform app
599 // button.
600 int items_added = 0;
601 LauncherID first_added = AddPlatformApp();
602 EXPECT_TRUE(GetButtonByID(first_added)->visible());
533 LauncherID last_visible = first_added; 603 LauncherID last_visible = first_added;
534 while (true) { 604 while (true) {
535 LauncherID added = AddPlatformApp(); 605 LauncherID added = AddPlatformApp();
536 if (test_api_->IsOverflowButtonVisible()) { 606 if (test_api_->IsOverflowButtonVisible()) {
537 EXPECT_FALSE(GetButtonByID(added)->visible()); 607 EXPECT_FALSE(GetButtonByID(added)->visible());
538 break; 608 break;
539 } 609 }
540 last_visible = added; 610 last_visible = added;
541 ++items_added; 611 ++items_added;
542 ASSERT_LT(items_added, 10000); 612 ASSERT_LT(items_added, 10000);
(...skipping 131 matching lines...) Expand 10 before | Expand all | Expand 10 after
674 } 744 }
675 745
676 // Check that model changes are handled correctly while a launcher icon is being 746 // Check that model changes are handled correctly while a launcher icon is being
677 // dragged. 747 // dragged.
678 TEST_F(LauncherViewTest, ModelChangesWhileDragging) { 748 TEST_F(LauncherViewTest, ModelChangesWhileDragging) {
679 internal::LauncherButtonHost* button_host = launcher_view_; 749 internal::LauncherButtonHost* button_host = launcher_view_;
680 750
681 std::vector<std::pair<LauncherID, views::View*> > id_map; 751 std::vector<std::pair<LauncherID, views::View*> > id_map;
682 SetupForDragTest(&id_map); 752 SetupForDragTest(&id_map);
683 753
754 // Dragging browser shortcut at index 1.
755 EXPECT_TRUE(model_->items()[1].type == TYPE_BROWSER_SHORTCUT);
756 views::View* dragged_button = SimulateDrag(
757 internal::LauncherButtonHost::MOUSE, 1, 3);
758 std::rotate(id_map.begin() + 1,
759 id_map.begin() + 2,
760 id_map.begin() + 4);
761 ASSERT_NO_FATAL_FAILURE(CheckModelIDs(id_map));
762 button_host->PointerReleasedOnButton(dragged_button,
763 internal::LauncherButtonHost::MOUSE,
764 false);
765 EXPECT_TRUE(model_->items()[3].type == TYPE_BROWSER_SHORTCUT);
766
767 // Dragging changes model order.
768 dragged_button = SimulateDrag(
769 internal::LauncherButtonHost::MOUSE, 1, 3);
770 std::rotate(id_map.begin() + 1,
771 id_map.begin() + 2,
772 id_map.begin() + 4);
773 ASSERT_NO_FATAL_FAILURE(CheckModelIDs(id_map));
774
775 // Cancelling the drag operation restores previous order.
776 button_host->PointerReleasedOnButton(dragged_button,
777 internal::LauncherButtonHost::MOUSE,
778 true);
779 std::rotate(id_map.begin() + 1,
780 id_map.begin() + 3,
781 id_map.begin() + 4);
782 ASSERT_NO_FATAL_FAILURE(CheckModelIDs(id_map));
783
784 // Deleting an item keeps the remaining intact.
785 dragged_button = SimulateDrag(internal::LauncherButtonHost::MOUSE, 1, 3);
786 model_->RemoveItemAt(1);
787 id_map.erase(id_map.begin() + 1);
788 ASSERT_NO_FATAL_FAILURE(CheckModelIDs(id_map));
789 button_host->PointerReleasedOnButton(dragged_button,
790 internal::LauncherButtonHost::MOUSE,
791 false);
792
793 // Adding a launcher item cancels the drag and respects the order.
794 dragged_button = SimulateDrag(internal::LauncherButtonHost::MOUSE, 1, 3);
795 LauncherID new_id = AddAppShortcut();
796 id_map.insert(id_map.begin() + 6,
797 std::make_pair(new_id, GetButtonByID(new_id)));
798 ASSERT_NO_FATAL_FAILURE(CheckModelIDs(id_map));
799 button_host->PointerReleasedOnButton(dragged_button,
800 internal::LauncherButtonHost::MOUSE,
801 false);
802
803 // Adding a launcher item at the end (i.e. a panel) canels drag and respects
804 // the order.
805 dragged_button = SimulateDrag(internal::LauncherButtonHost::MOUSE, 1, 3);
806 new_id = AddPanel();
807 id_map.insert(id_map.begin() + 7,
808 std::make_pair(new_id, GetButtonByID(new_id)));
809 ASSERT_NO_FATAL_FAILURE(CheckModelIDs(id_map));
810 button_host->PointerReleasedOnButton(dragged_button,
811 internal::LauncherButtonHost::MOUSE,
812 false);
813 }
814
815 TEST_F(LauncherViewLegacyShelfLayoutTest, ModelChangesWhileDragging) {
816 internal::LauncherButtonHost* button_host = launcher_view_;
817
818 std::vector<std::pair<LauncherID, views::View*> > id_map;
819 SetupForDragTest(&id_map);
820
684 // Dragging browser shortcut at index 0. 821 // Dragging browser shortcut at index 0.
685 EXPECT_TRUE(model_->items()[0].type == TYPE_BROWSER_SHORTCUT); 822 EXPECT_TRUE(model_->items()[0].type == TYPE_BROWSER_SHORTCUT);
686 views::View* dragged_button = SimulateDrag( 823 views::View* dragged_button = SimulateDrag(
687 internal::LauncherButtonHost::MOUSE, 0, 2); 824 internal::LauncherButtonHost::MOUSE, 0, 2);
688 std::rotate(id_map.begin(), 825 std::rotate(id_map.begin(),
689 id_map.begin() + 1, 826 id_map.begin() + 1,
690 id_map.begin() + 3); 827 id_map.begin() + 3);
691 ASSERT_NO_FATAL_FAILURE(CheckModelIDs(id_map)); 828 ASSERT_NO_FATAL_FAILURE(CheckModelIDs(id_map));
692 button_host->PointerReleasedOnButton(dragged_button, 829 button_host->PointerReleasedOnButton(dragged_button,
693 internal::LauncherButtonHost::MOUSE, 830 internal::LauncherButtonHost::MOUSE,
(...skipping 50 matching lines...) Expand 10 before | Expand all | Expand 10 after
744 881
745 // Check that 2nd drag from the other pointer would be ignored. 882 // Check that 2nd drag from the other pointer would be ignored.
746 TEST_F(LauncherViewTest, SimultaneousDrag) { 883 TEST_F(LauncherViewTest, SimultaneousDrag) {
747 internal::LauncherButtonHost* button_host = launcher_view_; 884 internal::LauncherButtonHost* button_host = launcher_view_;
748 885
749 std::vector<std::pair<LauncherID, views::View*> > id_map; 886 std::vector<std::pair<LauncherID, views::View*> > id_map;
750 SetupForDragTest(&id_map); 887 SetupForDragTest(&id_map);
751 888
752 // Start a mouse drag. 889 // Start a mouse drag.
753 views::View* dragged_button_mouse = SimulateDrag( 890 views::View* dragged_button_mouse = SimulateDrag(
754 internal::LauncherButtonHost::MOUSE, 0, 2); 891 internal::LauncherButtonHost::MOUSE, 1, 3);
755 std::rotate(id_map.begin(), 892 std::rotate(id_map.begin() + 1,
756 id_map.begin() + 1, 893 id_map.begin() + 2,
757 id_map.begin() + 3); 894 id_map.begin() + 4);
758 ASSERT_NO_FATAL_FAILURE(CheckModelIDs(id_map)); 895 ASSERT_NO_FATAL_FAILURE(CheckModelIDs(id_map));
759 // Attempt a touch drag before the mouse drag finishes. 896 // Attempt a touch drag before the mouse drag finishes.
760 views::View* dragged_button_touch = SimulateDrag( 897 views::View* dragged_button_touch = SimulateDrag(
761 internal::LauncherButtonHost::TOUCH, 3, 1); 898 internal::LauncherButtonHost::TOUCH, 4, 2);
762 899
763 // Nothing changes since 2nd drag is ignored. 900 // Nothing changes since 2nd drag is ignored.
764 ASSERT_NO_FATAL_FAILURE(CheckModelIDs(id_map)); 901 ASSERT_NO_FATAL_FAILURE(CheckModelIDs(id_map));
765 902
766 // Finish the mouse drag. 903 // Finish the mouse drag.
767 button_host->PointerReleasedOnButton(dragged_button_mouse, 904 button_host->PointerReleasedOnButton(dragged_button_mouse,
768 internal::LauncherButtonHost::MOUSE, 905 internal::LauncherButtonHost::MOUSE,
769 false); 906 false);
770 ASSERT_NO_FATAL_FAILURE(CheckModelIDs(id_map)); 907 ASSERT_NO_FATAL_FAILURE(CheckModelIDs(id_map));
771 908
772 // Now start a touch drag. 909 // Now start a touch drag.
773 dragged_button_touch = SimulateDrag( 910 dragged_button_touch = SimulateDrag(
774 internal::LauncherButtonHost::TOUCH, 3, 1); 911 internal::LauncherButtonHost::TOUCH, 4, 2);
775 std::rotate(id_map.begin() + 2, 912 std::rotate(id_map.begin() + 3,
776 id_map.begin() + 3, 913 id_map.begin() + 4,
777 id_map.begin() + 4); 914 id_map.begin() + 5);
778 ASSERT_NO_FATAL_FAILURE(CheckModelIDs(id_map)); 915 ASSERT_NO_FATAL_FAILURE(CheckModelIDs(id_map));
779 916
780 // And attempt a mouse drag before the touch drag finishes. 917 // And attempt a mouse drag before the touch drag finishes.
781 dragged_button_mouse = SimulateDrag( 918 dragged_button_mouse = SimulateDrag(
782 internal::LauncherButtonHost::MOUSE, 0, 1); 919 internal::LauncherButtonHost::MOUSE, 1, 2);
783 920
784 // Nothing changes since 2nd drag is ignored. 921 // Nothing changes since 2nd drag is ignored.
785 ASSERT_NO_FATAL_FAILURE(CheckModelIDs(id_map)); 922 ASSERT_NO_FATAL_FAILURE(CheckModelIDs(id_map));
786 923
787 button_host->PointerReleasedOnButton(dragged_button_touch, 924 button_host->PointerReleasedOnButton(dragged_button_touch,
788 internal::LauncherButtonHost::TOUCH, 925 internal::LauncherButtonHost::TOUCH,
789 false); 926 false);
790 ASSERT_NO_FATAL_FAILURE(CheckModelIDs(id_map)); 927 ASSERT_NO_FATAL_FAILURE(CheckModelIDs(id_map));
791 } 928 }
792 929
793 // Check that clicking first on one item and then dragging another works as 930 // Check that clicking first on one item and then dragging another works as
794 // expected. 931 // expected.
795 TEST_F(LauncherViewTest, ClickOneDragAnother) { 932 TEST_F(LauncherViewTest, ClickOneDragAnother) {
796 internal::LauncherButtonHost* button_host = launcher_view_; 933 internal::LauncherButtonHost* button_host = launcher_view_;
797 934
798 std::vector<std::pair<LauncherID, views::View*> > id_map; 935 std::vector<std::pair<LauncherID, views::View*> > id_map;
799 SetupForDragTest(&id_map); 936 SetupForDragTest(&id_map);
800 937
801 // A click on item 1 is simulated. 938 // A click on item 1 is simulated.
802 SimulateClick(internal::LauncherButtonHost::MOUSE, 1); 939 SimulateClick(internal::LauncherButtonHost::MOUSE, 1);
803 940
804 // Dragging browser index at 0 should change the model order correctly. 941 // Dragging browser index at 0 should change the model order correctly.
805 EXPECT_TRUE(model_->items()[0].type == TYPE_BROWSER_SHORTCUT); 942 EXPECT_TRUE(model_->items()[1].type == TYPE_BROWSER_SHORTCUT);
806 views::View* dragged_button = SimulateDrag( 943 views::View* dragged_button = SimulateDrag(
807 internal::LauncherButtonHost::MOUSE, 0, 2); 944 internal::LauncherButtonHost::MOUSE, 1, 3);
808 std::rotate(id_map.begin(), 945 std::rotate(id_map.begin() + 1,
809 id_map.begin() + 1, 946 id_map.begin() + 2,
810 id_map.begin() + 3); 947 id_map.begin() + 4);
811 ASSERT_NO_FATAL_FAILURE(CheckModelIDs(id_map)); 948 ASSERT_NO_FATAL_FAILURE(CheckModelIDs(id_map));
812 button_host->PointerReleasedOnButton(dragged_button, 949 button_host->PointerReleasedOnButton(dragged_button,
813 internal::LauncherButtonHost::MOUSE, 950 internal::LauncherButtonHost::MOUSE,
814 false); 951 false);
815 EXPECT_TRUE(model_->items()[2].type == TYPE_BROWSER_SHORTCUT); 952 EXPECT_TRUE(model_->items()[3].type == TYPE_BROWSER_SHORTCUT);
816 } 953 }
817 954
818 // Confirm that item status changes are reflected in the buttons. 955 // Confirm that item status changes are reflected in the buttons.
819 TEST_F(LauncherViewTest, LauncherItemStatus) { 956 TEST_F(LauncherViewTest, LauncherItemStatus) {
820 ASSERT_EQ(test_api_->GetLastVisibleIndex() + 1, 957 ASSERT_EQ(test_api_->GetLastVisibleIndex() + 1,
821 test_api_->GetButtonCount()); 958 test_api_->GetButtonCount());
822 959
823 // Add platform app button. 960 // Add platform app button.
824 LauncherID last_added = AddPlatformApp(); 961 LauncherID last_added = AddPlatformApp();
825 LauncherItem item = GetItemByID(last_added); 962 LauncherItem item = GetItemByID(last_added);
826 int index = model_->ItemIndexByID(last_added); 963 int index = model_->ItemIndexByID(last_added);
827 internal::LauncherButton* button = GetButtonByID(last_added); 964 internal::LauncherButton* button = GetButtonByID(last_added);
828 ASSERT_EQ(internal::LauncherButton::STATE_RUNNING, button->state()); 965 ASSERT_EQ(internal::LauncherButton::STATE_RUNNING, button->state());
829 item.status = ash::STATUS_ACTIVE; 966 item.status = ash::STATUS_ACTIVE;
830 model_->Set(index, item); 967 model_->Set(index, item);
831 ASSERT_EQ(internal::LauncherButton::STATE_ACTIVE, button->state()); 968 ASSERT_EQ(internal::LauncherButton::STATE_ACTIVE, button->state());
832 item.status = ash::STATUS_ATTENTION; 969 item.status = ash::STATUS_ATTENTION;
833 model_->Set(index, item); 970 model_->Set(index, item);
834 ASSERT_EQ(internal::LauncherButton::STATE_ATTENTION, button->state()); 971 ASSERT_EQ(internal::LauncherButton::STATE_ATTENTION, button->state());
835 } 972 }
836 973
837 TEST_F(LauncherViewTest, LauncherItemPositionReflectedOnStateChanged) { 974 TEST_F(LauncherViewLegacyShelfLayoutTest,
975 LauncherItemPositionReflectedOnStateChanged) {
838 ASSERT_EQ(test_api_->GetLastVisibleIndex() + 1, 976 ASSERT_EQ(test_api_->GetLastVisibleIndex() + 1,
839 test_api_->GetButtonCount()); 977 test_api_->GetButtonCount());
840 978
841 // Add 2 items to the launcher. 979 // Add 2 items to the launcher.
842 LauncherID item1_id = AddPlatformApp(); 980 LauncherID item1_id = AddPlatformApp();
843 LauncherID item2_id = AddPlatformAppNoWait(); 981 LauncherID item2_id = AddPlatformAppNoWait();
844 internal::LauncherButton* item1_button = GetButtonByID(item1_id); 982 internal::LauncherButton* item1_button = GetButtonByID(item1_id);
845 internal::LauncherButton* item2_button = GetButtonByID(item2_id); 983 internal::LauncherButton* item2_button = GetButtonByID(item2_id);
846 984
847 internal::LauncherButton::State state_mask = 985 internal::LauncherButton::State state_mask =
848 static_cast<internal::LauncherButton::State> 986 static_cast<internal::LauncherButton::State>
849 (internal::LauncherButton::STATE_NORMAL | 987 (internal::LauncherButton::STATE_NORMAL |
850 internal::LauncherButton::STATE_HOVERED | 988 internal::LauncherButton::STATE_HOVERED |
851 internal::LauncherButton::STATE_RUNNING | 989 internal::LauncherButton::STATE_RUNNING |
852 internal::LauncherButton::STATE_ACTIVE | 990 internal::LauncherButton::STATE_ACTIVE |
853 internal::LauncherButton::STATE_ATTENTION | 991 internal::LauncherButton::STATE_ATTENTION |
854 internal::LauncherButton::STATE_FOCUSED); 992 internal::LauncherButton::STATE_FOCUSED);
855 993
856 // Clear the button states. 994 // Clear the button states.
857 item1_button->ClearState(state_mask); 995 item1_button->ClearState(state_mask);
858 item2_button->ClearState(state_mask); 996 item2_button->ClearState(state_mask);
859 997
860 // Since default alignment in tests is bottom, state is reflected in y-axis. 998 // Since default alignment in tests is bottom, state is reflected in y-axis.
861 ASSERT_EQ(item1_button->GetIconBounds().y(), 999 ASSERT_EQ(item1_button->GetIconBounds().y(),
862 item2_button->GetIconBounds().y()); 1000 item2_button->GetIconBounds().y());
863 item1_button->AddState(internal::LauncherButton::STATE_HOVERED); 1001 item1_button->AddState(internal::LauncherButton::STATE_HOVERED);
864 ASSERT_NE(item1_button->GetIconBounds().y(), 1002 ASSERT_NE(item1_button->GetIconBounds().y(),
865 item2_button->GetIconBounds().y()); 1003 item2_button->GetIconBounds().y());
866 item1_button->ClearState(internal::LauncherButton::STATE_HOVERED); 1004 item1_button->ClearState(internal::LauncherButton::STATE_HOVERED);
867
868 // Enable the alternate shelf layout.
869 CommandLine::ForCurrentProcess()->AppendSwitch(
870 ash::switches::kAshUseAlternateShelfLayout);
871 launcher_view_->Layout();
872
873 // Since default alignment in tests is bottom, state is reflected in y-axis.
874 // In alternate shelf layout there is no visible hovered state.
875 ASSERT_EQ(item1_button->GetIconBounds().y(),
876 item2_button->GetIconBounds().y());
877 item1_button->AddState(internal::LauncherButton::STATE_HOVERED);
878 ASSERT_EQ(item1_button->GetIconBounds().y(),
879 item2_button->GetIconBounds().y());
880 } 1005 }
881 1006
882 // Confirm that item status changes are reflected in the buttons 1007 // Confirm that item status changes are reflected in the buttons
883 // for platform apps. 1008 // for platform apps.
884 TEST_F(LauncherViewTest, LauncherItemStatusPlatformApp) { 1009 TEST_F(LauncherViewTest, LauncherItemStatusPlatformApp) {
885 ASSERT_EQ(test_api_->GetLastVisibleIndex() + 1, 1010 ASSERT_EQ(test_api_->GetLastVisibleIndex() + 1,
886 test_api_->GetButtonCount()); 1011 test_api_->GetButtonCount());
887 1012
888 // Add platform app button. 1013 // Add platform app button.
889 LauncherID last_added = AddPlatformApp(); 1014 LauncherID last_added = AddPlatformApp();
(...skipping 155 matching lines...) Expand 10 before | Expand all | Expand 10 after
1045 // Move the mouse over the button and check that it is visible. 1170 // Move the mouse over the button and check that it is visible.
1046 views::View* app_list_button = launcher_view_->GetAppListButtonView(); 1171 views::View* app_list_button = launcher_view_->GetAppListButtonView();
1047 gfx::Rect bounds = app_list_button->GetBoundsInScreen(); 1172 gfx::Rect bounds = app_list_button->GetBoundsInScreen();
1048 generator.MoveMouseTo(bounds.CenterPoint()); 1173 generator.MoveMouseTo(bounds.CenterPoint());
1049 // Wait for the timer to go off. 1174 // Wait for the timer to go off.
1050 RunAllPendingInMessageLoop(); 1175 RunAllPendingInMessageLoop();
1051 EXPECT_TRUE(tooltip_manager->IsVisible()); 1176 EXPECT_TRUE(tooltip_manager->IsVisible());
1052 1177
1053 // Move the mouse cursor slightly to the right of the item. The tooltip should 1178 // Move the mouse cursor slightly to the right of the item. The tooltip should
1054 // stay open. 1179 // stay open.
1055 generator.MoveMouseBy(-(bounds.width() / 2 + 5), 0); 1180 generator.MoveMouseBy(bounds.width() / 2 + 5, 0);
1056 // Make sure there is no delayed close. 1181 // Make sure there is no delayed close.
1057 RunAllPendingInMessageLoop(); 1182 RunAllPendingInMessageLoop();
1058 EXPECT_TRUE(tooltip_manager->IsVisible()); 1183 EXPECT_TRUE(tooltip_manager->IsVisible());
1059 1184
1060 // Move back - it should still stay open. 1185 // Move back - it should still stay open.
1061 generator.MoveMouseBy(bounds.width() / 2 + 5, 0); 1186 generator.MoveMouseBy(-(bounds.width() / 2 + 5), 0);
1062 // Make sure there is no delayed close. 1187 // Make sure there is no delayed close.
1063 RunAllPendingInMessageLoop(); 1188 RunAllPendingInMessageLoop();
1064 EXPECT_TRUE(tooltip_manager->IsVisible()); 1189 EXPECT_TRUE(tooltip_manager->IsVisible());
1065 1190
1066 // Now move the mouse cursor slightly above the item - so that it is over the 1191 // Now move the mouse cursor slightly above the item - so that it is over the
1067 // tooltip bubble. Now it should disappear. 1192 // tooltip bubble. Now it should disappear.
1068 generator.MoveMouseBy(0, -(bounds.height() / 2 + 5)); 1193 generator.MoveMouseBy(0, -(bounds.height() / 2 + 5));
1069 // Wait until the delayed close kicked in. 1194 // Wait until the delayed close kicked in.
1070 RunAllPendingInMessageLoop(); 1195 RunAllPendingInMessageLoop();
1071 EXPECT_FALSE(tooltip_manager->IsVisible()); 1196 EXPECT_FALSE(tooltip_manager->IsVisible());
(...skipping 31 matching lines...) Expand 10 before | Expand all | Expand 10 after
1103 const int app_list_button_index = test_api_->GetButtonCount() - 1; 1228 const int app_list_button_index = test_api_->GetButtonCount() - 1;
1104 const gfx::Rect& app_list_ideal_bounds = 1229 const gfx::Rect& app_list_ideal_bounds =
1105 test_api_->GetIdealBoundsByIndex(app_list_button_index); 1230 test_api_->GetIdealBoundsByIndex(app_list_button_index);
1106 const gfx::Rect& app_list_bounds = 1231 const gfx::Rect& app_list_bounds =
1107 test_api_->GetBoundsByIndex(app_list_button_index); 1232 test_api_->GetBoundsByIndex(app_list_button_index);
1108 EXPECT_EQ(app_list_bounds, app_list_ideal_bounds); 1233 EXPECT_EQ(app_list_bounds, app_list_ideal_bounds);
1109 } 1234 }
1110 1235
1111 // Check that the first item in the list follows Fitt's law by including the 1236 // Check that the first item in the list follows Fitt's law by including the
1112 // first pixel and being therefore bigger then the others. 1237 // first pixel and being therefore bigger then the others.
1113 TEST_F(LauncherViewTest, CheckFittsLaw) { 1238 TEST_F(LauncherViewLegacyShelfLayoutTest, CheckFittsLaw) {
1114 // All buttons should be visible. 1239 // All buttons should be visible.
1115 ASSERT_EQ(test_api_->GetLastVisibleIndex() + 1, 1240 ASSERT_EQ(test_api_->GetLastVisibleIndex() + 1,
1116 test_api_->GetButtonCount()); 1241 test_api_->GetButtonCount());
1117 gfx::Rect ideal_bounds_0 = test_api_->GetIdealBoundsByIndex(0); 1242 gfx::Rect ideal_bounds_0 = test_api_->GetIdealBoundsByIndex(0);
1118 gfx::Rect ideal_bounds_1 = test_api_->GetIdealBoundsByIndex(1); 1243 gfx::Rect ideal_bounds_1 = test_api_->GetIdealBoundsByIndex(1);
1119 EXPECT_GT(ideal_bounds_0.width(), ideal_bounds_1.width()); 1244 EXPECT_GT(ideal_bounds_0.width(), ideal_bounds_1.width());
1120 } 1245 }
1121 1246
1122 INSTANTIATE_TEST_CASE_P(LtrRtl, LauncherViewTextDirectionTest, testing::Bool()); 1247 INSTANTIATE_TEST_CASE_P(LtrRtl, LauncherViewTextDirectionTest, testing::Bool());
1123 1248
1124 } // namespace test 1249 } // namespace test
1125 } // namespace ash 1250 } // namespace ash
OLDNEW
« no previous file with comments | « ash/launcher/launcher_view.cc ('k') | ash/root_window_controller_unittest.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698