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

Side by Side Diff: ash/shelf/shelf_view_unittest.cc

Issue 2178163002: Add ink drop ripple to shelf overflow button (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Fixed OnClickCanceled Created 4 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
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/common/shelf/shelf_view.h" 5 #include "ash/common/shelf/shelf_view.h"
6 6
7 #include <algorithm> 7 #include <algorithm>
8 #include <memory> 8 #include <memory>
9 #include <utility> 9 #include <utility>
10 #include <vector> 10 #include <vector>
11 11
12 #include "ash/common/shelf/app_list_button.h" 12 #include "ash/common/shelf/app_list_button.h"
13 #include "ash/common/shelf/overflow_bubble.h" 13 #include "ash/common/shelf/overflow_bubble.h"
14 #include "ash/common/shelf/overflow_bubble_view.h" 14 #include "ash/common/shelf/overflow_bubble_view.h"
15 #include "ash/common/shelf/overflow_button.h"
15 #include "ash/common/shelf/shelf_button.h" 16 #include "ash/common/shelf/shelf_button.h"
16 #include "ash/common/shelf/shelf_constants.h" 17 #include "ash/common/shelf/shelf_constants.h"
17 #include "ash/common/shelf/shelf_menu_model.h" 18 #include "ash/common/shelf/shelf_menu_model.h"
18 #include "ash/common/shelf/shelf_model.h" 19 #include "ash/common/shelf/shelf_model.h"
19 #include "ash/common/shelf/shelf_tooltip_manager.h" 20 #include "ash/common/shelf/shelf_tooltip_manager.h"
20 #include "ash/common/shelf/shelf_widget.h" 21 #include "ash/common/shelf/shelf_widget.h"
21 #include "ash/common/shelf/wm_shelf.h" 22 #include "ash/common/shelf/wm_shelf.h"
22 #include "ash/common/shelf/wm_shelf_observer.h" 23 #include "ash/common/shelf/wm_shelf_observer.h"
23 #include "ash/common/shell_window_ids.h" 24 #include "ash/common/shell_window_ids.h"
24 #include "ash/common/system/web_notification/web_notification_tray.h" 25 #include "ash/common/system/web_notification/web_notification_tray.h"
(...skipping 11 matching lines...) Expand all
36 #include "ash/test/test_shelf_item_delegate.h" 37 #include "ash/test/test_shelf_item_delegate.h"
37 #include "ash/test/test_shell_delegate.h" 38 #include "ash/test/test_shell_delegate.h"
38 #include "ash/test/test_system_tray_delegate.h" 39 #include "ash/test/test_system_tray_delegate.h"
39 #include "base/i18n/rtl.h" 40 #include "base/i18n/rtl.h"
40 #include "base/macros.h" 41 #include "base/macros.h"
41 #include "base/memory/ptr_util.h" 42 #include "base/memory/ptr_util.h"
42 #include "base/run_loop.h" 43 #include "base/run_loop.h"
43 #include "base/strings/string_number_conversions.h" 44 #include "base/strings/string_number_conversions.h"
44 #include "base/strings/utf_string_conversions.h" 45 #include "base/strings/utf_string_conversions.h"
45 #include "base/test/histogram_tester.h" 46 #include "base/test/histogram_tester.h"
47 #include "base/test/test_mock_time_task_runner.h"
46 #include "base/test/user_action_tester.h" 48 #include "base/test/user_action_tester.h"
47 #include "base/threading/thread_task_runner_handle.h" 49 #include "base/threading/thread_task_runner_handle.h"
48 #include "base/time/time.h" 50 #include "base/time/time.h"
49 #include "testing/gmock/include/gmock/gmock.h" 51 #include "testing/gmock/include/gmock/gmock.h"
50 #include "ui/app_list/presenter/app_list_presenter.h" 52 #include "ui/app_list/presenter/app_list_presenter.h"
51 #include "ui/aura/test/aura_test_base.h" 53 #include "ui/aura/test/aura_test_base.h"
52 #include "ui/aura/window.h" 54 #include "ui/aura/window.h"
53 #include "ui/aura/window_event_dispatcher.h" 55 #include "ui/aura/window_event_dispatcher.h"
54 #include "ui/compositor/layer.h" 56 #include "ui/compositor/layer.h"
55 #include "ui/events/event.h" 57 #include "ui/events/event.h"
(...skipping 2066 matching lines...) Expand 10 before | Expand all | Expand 10 after
2122 } // namespace 2124 } // namespace
2123 2125
2124 // Test fixture that forces material design mode in order to test ink drop 2126 // Test fixture that forces material design mode in order to test ink drop
2125 // ripples on shelf. 2127 // ripples on shelf.
2126 class ShelfViewInkDropTest : public ShelfViewTest { 2128 class ShelfViewInkDropTest : public ShelfViewTest {
2127 public: 2129 public:
2128 ShelfViewInkDropTest() {} 2130 ShelfViewInkDropTest() {}
2129 ~ShelfViewInkDropTest() override {} 2131 ~ShelfViewInkDropTest() override {}
2130 2132
2131 void SetUp() override { 2133 void SetUp() override {
2132 shell_delegate_ = new TestAppListShellDelegate; 2134 if (!ash_test_helper()->test_shell_delegate()) {
bruthig 2016/09/01 16:12:54 When does a ShellDelegate already exist?
mohsen 2016/09/10 03:03:23 When it is set by a subclass (e.g. OverflowButtonI
2133 ash_test_helper()->set_test_shell_delegate(shell_delegate_); 2135 shell_delegate_ = new TestAppListShellDelegate;
2136 ash_test_helper()->set_test_shell_delegate(shell_delegate_);
2137 }
2134 2138
2135 set_material_mode(ash::MaterialDesignController::MATERIAL_EXPERIMENTAL); 2139 set_material_mode(ash::MaterialDesignController::MATERIAL_EXPERIMENTAL);
2136 2140
2137 ShelfViewTest::SetUp(); 2141 ShelfViewTest::SetUp();
2138 } 2142 }
2139 2143
2140 protected: 2144 protected:
2141 void InitAppListButtonInkDrop() { 2145 void InitAppListButtonInkDrop() {
2142 app_list_button_ = shelf_view_->GetAppListButton(); 2146 app_list_button_ = shelf_view_->GetAppListButton();
2143 2147
2144 views::InkDropImpl* ink_drop_impl = 2148 views::InkDropImpl* ink_drop_impl =
2145 new views::InkDropImpl(app_list_button_); 2149 new views::InkDropImpl(app_list_button_);
2146 app_list_button_ink_drop_ = new InkDropSpy(base::WrapUnique(ink_drop_impl)); 2150 app_list_button_ink_drop_ = new InkDropSpy(base::WrapUnique(ink_drop_impl));
2147 views::test::InkDropHostViewTestApi(app_list_button_) 2151 views::test::InkDropHostViewTestApi(app_list_button_)
2148 .SetInkDrop(base::WrapUnique(app_list_button_ink_drop_), false); 2152 .SetInkDrop(base::WrapUnique(app_list_button_ink_drop_), false);
2149 } 2153 }
2150 2154
2151 void InitBrowserButtonInkDrop() { 2155 void InitBrowserButtonInkDrop() {
2152 browser_button_ = test_api_->GetButton(browser_index_); 2156 browser_button_ = test_api_->GetButton(browser_index_);
2153 2157
2154 views::InkDropImpl* ink_drop_impl = new views::InkDropImpl(browser_button_); 2158 views::InkDropImpl* ink_drop_impl = new views::InkDropImpl(browser_button_);
2155 browser_button_ink_drop_ = new InkDropSpy(base::WrapUnique(ink_drop_impl)); 2159 browser_button_ink_drop_ = new InkDropSpy(base::WrapUnique(ink_drop_impl));
2156 views::test::InkDropHostViewTestApi(browser_button_) 2160 views::test::InkDropHostViewTestApi(browser_button_)
2157 .SetInkDrop(base::WrapUnique(browser_button_ink_drop_)); 2161 .SetInkDrop(base::WrapUnique(browser_button_ink_drop_));
2158 } 2162 }
2159 2163
2160 void ShowAppList() { 2164 void ShowAppList() {
2165 DCHECK(shelf_delegate_);
2161 shell_delegate_->app_list_presenter()->Show(0); 2166 shell_delegate_->app_list_presenter()->Show(0);
2162 // Similar to real AppListPresenter, notify button that the app list is 2167 // Similar to real AppListPresenter, notify button that the app list is
2163 // shown. 2168 // shown.
2164 app_list_button_->OnAppListShown(); 2169 app_list_button_->OnAppListShown();
2165 } 2170 }
2166 2171
2167 void DismissAppList() { 2172 void DismissAppList() {
2173 DCHECK(shelf_delegate_);
2168 shell_delegate_->app_list_presenter()->Dismiss(); 2174 shell_delegate_->app_list_presenter()->Dismiss();
2169 // Similar to real AppListPresenter, notify button that the app list is 2175 // Similar to real AppListPresenter, notify button that the app list is
2170 // dismissed. 2176 // dismissed.
2171 app_list_button_->OnAppListDismissed(); 2177 app_list_button_->OnAppListDismissed();
2172 } 2178 }
2173 2179
2174 void FinishAppListVisibilityChange() { 2180 void FinishAppListVisibilityChange() {
2181 DCHECK(shelf_delegate_);
2175 shell_delegate_->app_list_presenter()->FinishVisibilityChange(); 2182 shell_delegate_->app_list_presenter()->FinishVisibilityChange();
2176 } 2183 }
2177 2184
2178 TestAppListShellDelegate* shell_delegate_ = nullptr; // Owned by Shell. 2185 TestAppListShellDelegate* shell_delegate_ = nullptr; // Owned by Shell.
2179 2186
2180 AppListButton* app_list_button_ = nullptr; 2187 AppListButton* app_list_button_ = nullptr;
2181 InkDropSpy* app_list_button_ink_drop_ = nullptr; 2188 InkDropSpy* app_list_button_ink_drop_ = nullptr;
2182 ShelfButton* browser_button_ = nullptr; 2189 ShelfButton* browser_button_ = nullptr;
2183 InkDropSpy* browser_button_ink_drop_ = nullptr; 2190 InkDropSpy* browser_button_ink_drop_ = nullptr;
2184 2191
(...skipping 381 matching lines...) Expand 10 before | Expand all | Expand 10 after
2566 ui::EF_LEFT_MOUSE_BUTTON, 0); 2573 ui::EF_LEFT_MOUSE_BUTTON, 0);
2567 button->OnMouseReleased(release_event); 2574 button->OnMouseReleased(release_event);
2568 test_api_->CloseMenu(); 2575 test_api_->CloseMenu();
2569 EXPECT_EQ(views::InkDropState::HIDDEN, 2576 EXPECT_EQ(views::InkDropState::HIDDEN,
2570 browser_button_ink_drop_->GetTargetInkDropState()); 2577 browser_button_ink_drop_->GetTargetInkDropState());
2571 EXPECT_THAT(browser_button_ink_drop_->GetAndResetRequestedStates(), 2578 EXPECT_THAT(browser_button_ink_drop_->GetAndResetRequestedStates(),
2572 ElementsAre(views::InkDropState::ACTIVATED, 2579 ElementsAre(views::InkDropState::ACTIVATED,
2573 views::InkDropState::DEACTIVATED)); 2580 views::InkDropState::DEACTIVATED));
2574 } 2581 }
2575 2582
2583 namespace {
2584
2585 // An empty menu model for shell context menu just to have a menu.
2586 class TestShellMenuModel : public ui::SimpleMenuModel,
2587 public ui::SimpleMenuModel::Delegate {
2588 public:
2589 TestShellMenuModel() : ui::SimpleMenuModel(this) {}
2590 ~TestShellMenuModel() override {}
2591
2592 private:
2593 // ui::SimpleMenuModel::Delegate:
2594 bool IsCommandIdChecked(int command_id) const override { return false; }
2595 bool IsCommandIdEnabled(int command_id) const override { return true; }
2596 void ExecuteCommand(int command_id, int event_flags) override {}
2597
2598 DISALLOW_COPY_AND_ASSIGN(TestShellMenuModel);
2599 };
2600
2601 // A test ShellDelegate implementation for overflow button tests that returns a
2602 // TestShelfMenuModel for the shell context menu.
2603 class TestOverflowButtonShellDelegate : public TestShellDelegate {
2604 public:
2605 TestOverflowButtonShellDelegate() {}
2606 ~TestOverflowButtonShellDelegate() override {}
2607
2608 // TestShellDelegate:
2609 ui::MenuModel* CreateContextMenu(WmShelf* wm_shelf,
2610 const ShelfItem* item) override {
2611 // Caller takes ownership of the returned object.
2612 return new TestShellMenuModel;
2613 }
2614
2615 private:
2616 DISALLOW_COPY_AND_ASSIGN(TestOverflowButtonShellDelegate);
2617 };
2618
2619 // A scoped wrapper around TestMockTimeTaskRunner that replaces message loop's
2620 // task runner with a TestMockTimeTaskRunner and resets it back at the end of
2621 // the scope.
2622 class ScopedMockTaskRunnerWrapper {
2623 public:
2624 ScopedMockTaskRunnerWrapper() {
2625 mock_task_runner_ = new base::TestMockTimeTaskRunner;
2626 previous_task_runner_ = base::MessageLoop::current()->task_runner();
2627 base::MessageLoop::current()->SetTaskRunner(mock_task_runner_);
2628 }
2629
2630 ~ScopedMockTaskRunnerWrapper() {
2631 DCHECK_EQ(mock_task_runner_, base::MessageLoop::current()->task_runner());
2632 mock_task_runner_->ClearPendingTasks();
2633 base::MessageLoop::current()->SetTaskRunner(previous_task_runner_);
2634 }
2635
2636 void FastForwardUntilNoTasksRemain() {
2637 mock_task_runner_->FastForwardUntilNoTasksRemain();
2638 }
2639
2640 private:
2641 scoped_refptr<base::TestMockTimeTaskRunner> mock_task_runner_;
2642 scoped_refptr<base::SingleThreadTaskRunner> previous_task_runner_;
2643
2644 DISALLOW_COPY_AND_ASSIGN(ScopedMockTaskRunnerWrapper);
2645 };
2646
2647 } // namespace
2648
2649 // Test fixture for testing material design ink drop on overflow button.
2650 class OverflowButtonInkDropTest : public ShelfViewInkDropTest {
2651 public:
2652 OverflowButtonInkDropTest() {}
2653 ~OverflowButtonInkDropTest() override {}
2654
2655 void SetUp() override {
2656 // Shell takes ownership of the test shell delegate.
2657 ash_test_helper()->set_test_shell_delegate(
2658 new TestOverflowButtonShellDelegate);
2659
2660 ShelfViewInkDropTest::SetUp();
2661
2662 InitOverflowButtonInkDrop();
2663
2664 AddButtonsUntilOverflow();
2665 EXPECT_TRUE(test_api_->IsOverflowButtonVisible());
2666 EXPECT_FALSE(test_api_->overflow_bubble() &&
2667 test_api_->overflow_bubble()->IsShowing());
2668 }
2669
2670 protected:
2671 void InitOverflowButtonInkDrop() {
bruthig 2016/09/01 16:12:54 Does this need to be protected?
mohsen 2016/09/10 03:03:23 Nope. Moved to private section.
2672 overflow_button_ = test_api_->overflow_button();
2673
2674 views::InkDropImpl* ink_drop_impl =
2675 new views::InkDropImpl(overflow_button_);
2676 overflow_button_ink_drop_ = new InkDropSpy(base::WrapUnique(ink_drop_impl));
2677 views::test::InkDropHostViewTestApi(overflow_button_)
2678 .SetInkDrop(base::WrapUnique(overflow_button_ink_drop_));
2679 }
2680
2681 gfx::Point GetScreenPointInsideOverflowButton() const {
2682 return overflow_button_->GetBoundsInScreen().CenterPoint();
2683 }
2684
2685 gfx::Point GetScreenPointOutsideOverflowButton() const {
2686 gfx::Point point = GetScreenPointInsideOverflowButton();
2687 point.Offset(overflow_button_->width(), 0);
2688 return point;
2689 }
2690
2691 OverflowButton* overflow_button_ = nullptr;
2692 InkDropSpy* overflow_button_ink_drop_ = nullptr;
2693
2694 private:
2695 DISALLOW_COPY_AND_ASSIGN(OverflowButtonInkDropTest);
2696 };
2697
2698 // Tests ink drop state transitions for the overflow button when the overflow
2699 // bubble is shown or hidden.
2700 TEST_F(OverflowButtonInkDropTest, OnOverflowBubbleShowHide) {
2701 test_api_->ShowOverflowBubble();
2702 ASSERT_TRUE(test_api_->overflow_bubble());
2703 EXPECT_TRUE(test_api_->overflow_bubble()->IsShowing());
2704 EXPECT_EQ(views::InkDropState::ACTIVATED,
2705 overflow_button_ink_drop_->GetTargetInkDropState());
2706 EXPECT_THAT(overflow_button_ink_drop_->GetAndResetRequestedStates(),
2707 ElementsAre(views::InkDropState::ACTIVATED));
2708
2709 test_api_->HideOverflowBubble();
2710 EXPECT_FALSE(test_api_->overflow_bubble() &&
2711 test_api_->overflow_bubble()->IsShowing());
2712 EXPECT_EQ(views::InkDropState::HIDDEN,
2713 overflow_button_ink_drop_->GetTargetInkDropState());
2714 EXPECT_THAT(overflow_button_ink_drop_->GetAndResetRequestedStates(),
2715 ElementsAre(views::InkDropState::DEACTIVATED));
2716 }
2717
2718 // Tests ink drop state transitions for the overflow button when the user clicks
2719 // on it.
2720 TEST_F(OverflowButtonInkDropTest, MouseActivate) {
2721 ui::test::EventGenerator& generator = GetEventGenerator();
2722 gfx::Point mouse_location = GetScreenPointInsideOverflowButton();
2723 generator.MoveMouseTo(mouse_location);
2724
2725 generator.PressLeftButton();
2726 EXPECT_EQ(views::InkDropState::ACTION_PENDING,
2727 overflow_button_ink_drop_->GetTargetInkDropState());
2728 EXPECT_THAT(overflow_button_ink_drop_->GetAndResetRequestedStates(),
2729 ElementsAre(views::InkDropState::ACTION_PENDING));
2730
2731 generator.ReleaseLeftButton();
2732 EXPECT_EQ(views::InkDropState::ACTIVATED,
2733 overflow_button_ink_drop_->GetTargetInkDropState());
2734 EXPECT_THAT(overflow_button_ink_drop_->GetAndResetRequestedStates(),
2735 ElementsAre(views::InkDropState::ACTIVATED));
2736
2737 ASSERT_TRUE(test_api_->overflow_bubble());
2738 EXPECT_TRUE(test_api_->overflow_bubble()->IsShowing());
2739 }
2740
2741 // Tests ink drop state transitions for the overflow button when the user
2742 // presses left mouse button on it and drags it out of the button bounds.
2743 TEST_F(OverflowButtonInkDropTest, MouseDragOut) {
2744 ui::test::EventGenerator& generator = GetEventGenerator();
2745 generator.MoveMouseTo(GetScreenPointInsideOverflowButton());
2746
2747 generator.PressLeftButton();
2748 EXPECT_EQ(views::InkDropState::ACTION_PENDING,
2749 overflow_button_ink_drop_->GetTargetInkDropState());
2750 EXPECT_THAT(overflow_button_ink_drop_->GetAndResetRequestedStates(),
2751 ElementsAre(views::InkDropState::ACTION_PENDING));
2752
2753 generator.MoveMouseTo(GetScreenPointOutsideOverflowButton());
2754 EXPECT_EQ(views::InkDropState::HIDDEN,
2755 overflow_button_ink_drop_->GetTargetInkDropState());
2756 EXPECT_THAT(overflow_button_ink_drop_->GetAndResetRequestedStates(),
2757 ElementsAre(views::InkDropState::HIDDEN));
2758
2759 generator.ReleaseLeftButton();
2760 EXPECT_EQ(views::InkDropState::HIDDEN,
2761 overflow_button_ink_drop_->GetTargetInkDropState());
2762 EXPECT_THAT(overflow_button_ink_drop_->GetAndResetRequestedStates(),
2763 IsEmpty());
2764
2765 EXPECT_FALSE(test_api_->overflow_bubble() &&
2766 test_api_->overflow_bubble()->IsShowing());
2767 }
2768
2769 // Tests ink drop state transitions for the overflow button when the user
2770 // presses left mouse button on it and drags it out of the button bounds and
2771 // back.
2772 TEST_F(OverflowButtonInkDropTest, MouseDragOutAndBack) {
2773 ui::test::EventGenerator& generator = GetEventGenerator();
2774 generator.MoveMouseTo(GetScreenPointInsideOverflowButton());
2775
2776 generator.PressLeftButton();
2777 EXPECT_EQ(views::InkDropState::ACTION_PENDING,
2778 overflow_button_ink_drop_->GetTargetInkDropState());
2779 EXPECT_THAT(overflow_button_ink_drop_->GetAndResetRequestedStates(),
2780 ElementsAre(views::InkDropState::ACTION_PENDING));
2781
2782 generator.MoveMouseTo(GetScreenPointOutsideOverflowButton());
2783 EXPECT_EQ(views::InkDropState::HIDDEN,
2784 overflow_button_ink_drop_->GetTargetInkDropState());
2785 EXPECT_THAT(overflow_button_ink_drop_->GetAndResetRequestedStates(),
2786 ElementsAre(views::InkDropState::HIDDEN));
2787
2788 generator.MoveMouseTo(GetScreenPointInsideOverflowButton());
2789 EXPECT_EQ(views::InkDropState::ACTION_PENDING,
2790 overflow_button_ink_drop_->GetTargetInkDropState());
2791 EXPECT_THAT(overflow_button_ink_drop_->GetAndResetRequestedStates(),
2792 ElementsAre(views::InkDropState::ACTION_PENDING));
2793
2794 generator.ReleaseLeftButton();
2795 EXPECT_EQ(views::InkDropState::ACTIVATED,
2796 overflow_button_ink_drop_->GetTargetInkDropState());
2797 EXPECT_THAT(overflow_button_ink_drop_->GetAndResetRequestedStates(),
2798 ElementsAre(views::InkDropState::ACTIVATED));
2799
2800 ASSERT_TRUE(test_api_->overflow_bubble());
2801 EXPECT_TRUE(test_api_->overflow_bubble()->IsShowing());
2802 }
2803
2804 // Tests ink drop state transitions for the overflow button when the user right
2805 // clicks on the button to show the context menu.
2806 TEST_F(OverflowButtonInkDropTest, MouseContextMenu) {
2807 ui::test::EventGenerator& generator = GetEventGenerator();
2808 generator.MoveMouseTo(GetScreenPointInsideOverflowButton());
2809
2810 generator.PressRightButton();
2811 EXPECT_EQ(views::InkDropState::HIDDEN,
2812 overflow_button_ink_drop_->GetTargetInkDropState());
2813 EXPECT_THAT(overflow_button_ink_drop_->GetAndResetRequestedStates(),
2814 IsEmpty());
2815
2816 generator.ReleaseRightButton();
2817 EXPECT_EQ(views::InkDropState::HIDDEN,
2818 overflow_button_ink_drop_->GetTargetInkDropState());
2819 EXPECT_THAT(overflow_button_ink_drop_->GetAndResetRequestedStates(),
2820 IsEmpty());
2821
2822 EXPECT_FALSE(test_api_->overflow_bubble() &&
2823 test_api_->overflow_bubble()->IsShowing());
2824 }
2825
2826 #if !defined(OS_WIN)
2827 // There is no ink drop effect for gesture events on Windows.
2828
2829 // Tests ink drop state transitions for the overflow button when the user taps
2830 // on it.
2831 TEST_F(OverflowButtonInkDropTest, TouchActivate) {
2832 ui::test::EventGenerator& generator = GetEventGenerator();
2833 generator.set_current_location(GetScreenPointInsideOverflowButton());
2834
2835 generator.PressTouch();
2836 EXPECT_EQ(views::InkDropState::ACTION_PENDING,
2837 overflow_button_ink_drop_->GetTargetInkDropState());
2838 EXPECT_THAT(overflow_button_ink_drop_->GetAndResetRequestedStates(),
2839 ElementsAre(views::InkDropState::ACTION_PENDING));
2840
2841 generator.ReleaseTouch();
2842 EXPECT_EQ(views::InkDropState::ACTIVATED,
2843 overflow_button_ink_drop_->GetTargetInkDropState());
2844 EXPECT_THAT(overflow_button_ink_drop_->GetAndResetRequestedStates(),
2845 ElementsAre(views::InkDropState::ACTIVATED));
2846
2847 ASSERT_TRUE(test_api_->overflow_bubble());
2848 EXPECT_TRUE(test_api_->overflow_bubble()->IsShowing());
2849 }
2850
2851 // Tests ink drop state transitions for the overflow button when the user taps
2852 // down on it and drags it out of the button bounds.
2853 TEST_F(OverflowButtonInkDropTest, TouchDragOut) {
2854 ui::test::EventGenerator& generator = GetEventGenerator();
2855 generator.set_current_location(GetScreenPointInsideOverflowButton());
2856
2857 generator.PressTouch();
2858 EXPECT_EQ(views::InkDropState::ACTION_PENDING,
2859 overflow_button_ink_drop_->GetTargetInkDropState());
2860 EXPECT_THAT(overflow_button_ink_drop_->GetAndResetRequestedStates(),
2861 ElementsAre(views::InkDropState::ACTION_PENDING));
2862
2863 generator.MoveTouch(GetScreenPointOutsideOverflowButton());
2864 EXPECT_EQ(views::InkDropState::HIDDEN,
2865 overflow_button_ink_drop_->GetTargetInkDropState());
2866 EXPECT_THAT(overflow_button_ink_drop_->GetAndResetRequestedStates(),
2867 ElementsAre(views::InkDropState::HIDDEN));
2868
2869 generator.ReleaseTouch();
2870 EXPECT_EQ(views::InkDropState::HIDDEN,
2871 overflow_button_ink_drop_->GetTargetInkDropState());
2872 EXPECT_THAT(overflow_button_ink_drop_->GetAndResetRequestedStates(),
2873 IsEmpty());
2874
2875 EXPECT_FALSE(test_api_->overflow_bubble() &&
2876 test_api_->overflow_bubble()->IsShowing());
2877 }
2878
2879 // Tests ink drop state transitions for the overflow button when the user taps
2880 // down on it and drags it out of the button bounds and back.
2881 TEST_F(OverflowButtonInkDropTest, TouchDragOutAndBack) {
2882 ui::test::EventGenerator& generator = GetEventGenerator();
2883 generator.set_current_location(GetScreenPointInsideOverflowButton());
2884
2885 generator.PressTouch();
2886 EXPECT_EQ(views::InkDropState::ACTION_PENDING,
2887 overflow_button_ink_drop_->GetTargetInkDropState());
2888 EXPECT_THAT(overflow_button_ink_drop_->GetAndResetRequestedStates(),
2889 ElementsAre(views::InkDropState::ACTION_PENDING));
2890
2891 generator.MoveTouch(GetScreenPointOutsideOverflowButton());
2892 EXPECT_EQ(views::InkDropState::HIDDEN,
2893 overflow_button_ink_drop_->GetTargetInkDropState());
2894 EXPECT_THAT(overflow_button_ink_drop_->GetAndResetRequestedStates(),
2895 ElementsAre(views::InkDropState::HIDDEN));
2896
2897 generator.MoveTouch(GetScreenPointInsideOverflowButton());
2898 EXPECT_EQ(views::InkDropState::HIDDEN,
2899 overflow_button_ink_drop_->GetTargetInkDropState());
2900 EXPECT_THAT(overflow_button_ink_drop_->GetAndResetRequestedStates(),
2901 IsEmpty());
2902
2903 generator.ReleaseTouch();
2904 EXPECT_EQ(views::InkDropState::HIDDEN,
2905 overflow_button_ink_drop_->GetTargetInkDropState());
2906 EXPECT_THAT(overflow_button_ink_drop_->GetAndResetRequestedStates(),
2907 IsEmpty());
2908
2909 EXPECT_FALSE(test_api_->overflow_bubble() &&
2910 test_api_->overflow_bubble()->IsShowing());
2911 }
2912
2913 // Tests ink drop state transitions for the overflow button when the user long
2914 // presses on the button to show the context menu.
2915 TEST_F(OverflowButtonInkDropTest, TouchContextMenu) {
2916 ui::test::EventGenerator& generator = GetEventGenerator();
2917 generator.set_current_location(GetScreenPointInsideOverflowButton());
2918
2919 {
2920 RunAllPendingInMessageLoop();
2921 ScopedMockTaskRunnerWrapper mock_task_runner;
2922
2923 generator.PressTouch();
2924 EXPECT_EQ(views::InkDropState::ACTION_PENDING,
2925 overflow_button_ink_drop_->GetTargetInkDropState());
2926 EXPECT_THAT(overflow_button_ink_drop_->GetAndResetRequestedStates(),
2927 ElementsAre(views::InkDropState::ACTION_PENDING));
2928
2929 mock_task_runner.FastForwardUntilNoTasksRemain();
bruthig 2016/09/01 16:12:54 This causes a context menu to be shown?
mohsen 2016/09/10 03:03:23 Eventually. This causes long-press timer to expire
2930 EXPECT_EQ(views::InkDropState::HIDDEN,
2931 overflow_button_ink_drop_->GetTargetInkDropState());
2932 EXPECT_THAT(overflow_button_ink_drop_->GetAndResetRequestedStates(),
2933 ElementsAre(views::InkDropState::ALTERNATE_ACTION_PENDING,
2934 views::InkDropState::HIDDEN));
2935
2936 generator.ReleaseTouch();
2937 EXPECT_EQ(views::InkDropState::HIDDEN,
2938 overflow_button_ink_drop_->GetTargetInkDropState());
2939 EXPECT_THAT(overflow_button_ink_drop_->GetAndResetRequestedStates(),
2940 IsEmpty());
2941
2942 EXPECT_FALSE(test_api_->overflow_bubble() &&
2943 test_api_->overflow_bubble()->IsShowing());
2944 }
2945 }
2946
2947 #endif // !defined(OS_WIN)
2948
2949 // Test fixture for testing material design ink drop on overflow button when it
2950 // is active.
2951 class OverflowButtonActiveInkDropTest : public OverflowButtonInkDropTest {
2952 public:
2953 OverflowButtonActiveInkDropTest() {}
2954 ~OverflowButtonActiveInkDropTest() override {}
2955
2956 void SetUp() override {
2957 OverflowButtonInkDropTest::SetUp();
2958
2959 test_api_->ShowOverflowBubble();
2960 ASSERT_TRUE(test_api_->overflow_bubble());
2961 EXPECT_TRUE(test_api_->overflow_bubble()->IsShowing());
2962 EXPECT_EQ(views::InkDropState::ACTIVATED,
2963 overflow_button_ink_drop_->GetTargetInkDropState());
2964 EXPECT_THAT(overflow_button_ink_drop_->GetAndResetRequestedStates(),
2965 ElementsAre(views::InkDropState::ACTIVATED));
2966 }
2967
2968 private:
2969 DISALLOW_COPY_AND_ASSIGN(OverflowButtonActiveInkDropTest);
2970 };
2971
2972 // Tests ink drop state transitions for the overflow button when it is active
2973 // and the user clicks on it.
2974 TEST_F(OverflowButtonActiveInkDropTest, MouseDeactivate) {
2975 ui::test::EventGenerator& generator = GetEventGenerator();
2976 generator.MoveMouseTo(GetScreenPointInsideOverflowButton());
2977
2978 generator.PressLeftButton();
2979 EXPECT_EQ(views::InkDropState::ACTIVATED,
2980 overflow_button_ink_drop_->GetTargetInkDropState());
2981 EXPECT_THAT(overflow_button_ink_drop_->GetAndResetRequestedStates(),
2982 IsEmpty());
2983
2984 generator.ReleaseLeftButton();
2985 EXPECT_EQ(views::InkDropState::HIDDEN,
2986 overflow_button_ink_drop_->GetTargetInkDropState());
2987 EXPECT_THAT(overflow_button_ink_drop_->GetAndResetRequestedStates(),
2988 ElementsAre(views::InkDropState::DEACTIVATED));
2989
2990 EXPECT_FALSE(test_api_->overflow_bubble() &&
2991 test_api_->overflow_bubble()->IsShowing());
2992 }
2993
2994 // Tests ink drop state transitions for the overflow button when it is active
2995 // and the user presses left mouse button on it and drags it out of the button
2996 // bounds.
2997 TEST_F(OverflowButtonActiveInkDropTest, MouseDragOut) {
2998 ui::test::EventGenerator& generator = GetEventGenerator();
2999 generator.MoveMouseTo(GetScreenPointInsideOverflowButton());
3000
3001 generator.PressLeftButton();
3002 EXPECT_EQ(views::InkDropState::ACTIVATED,
3003 overflow_button_ink_drop_->GetTargetInkDropState());
3004 EXPECT_THAT(overflow_button_ink_drop_->GetAndResetRequestedStates(),
3005 IsEmpty());
3006
3007 generator.MoveMouseTo(GetScreenPointOutsideOverflowButton());
3008 EXPECT_EQ(views::InkDropState::ACTIVATED,
3009 overflow_button_ink_drop_->GetTargetInkDropState());
3010 EXPECT_THAT(overflow_button_ink_drop_->GetAndResetRequestedStates(),
3011 IsEmpty());
3012
3013 generator.ReleaseLeftButton();
3014 EXPECT_EQ(views::InkDropState::ACTIVATED,
3015 overflow_button_ink_drop_->GetTargetInkDropState());
3016 EXPECT_THAT(overflow_button_ink_drop_->GetAndResetRequestedStates(),
3017 IsEmpty());
3018
3019 ASSERT_TRUE(test_api_->overflow_bubble());
3020 EXPECT_TRUE(test_api_->overflow_bubble()->IsShowing());
3021 }
3022
3023 // Tests ink drop state transitions for the overflow button when it is active
3024 // and the user presses left mouse button on it and drags it out of the button
3025 // bounds and back.
3026 TEST_F(OverflowButtonActiveInkDropTest, MouseDragOutAndBack) {
3027 ui::test::EventGenerator& generator = GetEventGenerator();
3028 generator.MoveMouseTo(GetScreenPointInsideOverflowButton());
3029
3030 generator.PressLeftButton();
3031 EXPECT_EQ(views::InkDropState::ACTIVATED,
3032 overflow_button_ink_drop_->GetTargetInkDropState());
3033 EXPECT_THAT(overflow_button_ink_drop_->GetAndResetRequestedStates(),
3034 IsEmpty());
3035
3036 generator.MoveMouseTo(GetScreenPointOutsideOverflowButton());
3037 EXPECT_EQ(views::InkDropState::ACTIVATED,
3038 overflow_button_ink_drop_->GetTargetInkDropState());
3039 EXPECT_THAT(overflow_button_ink_drop_->GetAndResetRequestedStates(),
3040 IsEmpty());
3041
3042 generator.MoveMouseTo(GetScreenPointInsideOverflowButton());
3043 EXPECT_EQ(views::InkDropState::ACTIVATED,
3044 overflow_button_ink_drop_->GetTargetInkDropState());
3045 EXPECT_THAT(overflow_button_ink_drop_->GetAndResetRequestedStates(),
3046 IsEmpty());
3047
3048 generator.ReleaseLeftButton();
3049 EXPECT_EQ(views::InkDropState::HIDDEN,
3050 overflow_button_ink_drop_->GetTargetInkDropState());
3051 EXPECT_THAT(overflow_button_ink_drop_->GetAndResetRequestedStates(),
3052 ElementsAre(views::InkDropState::DEACTIVATED));
3053
3054 EXPECT_FALSE(test_api_->overflow_bubble() &&
3055 test_api_->overflow_bubble()->IsShowing());
3056 }
3057
3058 // Tests ink drop state transitions for the overflow button when it is active
3059 // and the user right clicks on the button to show the context menu.
3060 TEST_F(OverflowButtonActiveInkDropTest, MouseContextMenu) {
3061 ui::test::EventGenerator& generator = GetEventGenerator();
3062 generator.MoveMouseTo(GetScreenPointInsideOverflowButton());
3063
3064 generator.PressRightButton();
3065 EXPECT_EQ(views::InkDropState::ACTIVATED,
3066 overflow_button_ink_drop_->GetTargetInkDropState());
3067 EXPECT_THAT(overflow_button_ink_drop_->GetAndResetRequestedStates(),
3068 IsEmpty());
3069
3070 generator.ReleaseRightButton();
3071 EXPECT_EQ(views::InkDropState::ACTIVATED,
3072 overflow_button_ink_drop_->GetTargetInkDropState());
3073 EXPECT_THAT(overflow_button_ink_drop_->GetAndResetRequestedStates(),
3074 IsEmpty());
3075
3076 ASSERT_TRUE(test_api_->overflow_bubble());
3077 EXPECT_TRUE(test_api_->overflow_bubble()->IsShowing());
3078 }
3079
3080 #if !defined(OS_WIN)
3081 // There is no ink drop effect for gesture events on Windows.
3082
3083 // Tests ink drop state transitions for the overflow button when it is active
3084 // and the user taps on it.
3085 TEST_F(OverflowButtonActiveInkDropTest, TouchDeactivate) {
3086 ui::test::EventGenerator& generator = GetEventGenerator();
3087 generator.set_current_location(GetScreenPointInsideOverflowButton());
3088
3089 generator.PressTouch();
3090 EXPECT_EQ(views::InkDropState::ACTIVATED,
3091 overflow_button_ink_drop_->GetTargetInkDropState());
3092 EXPECT_THAT(overflow_button_ink_drop_->GetAndResetRequestedStates(),
3093 IsEmpty());
3094
3095 generator.ReleaseTouch();
3096 EXPECT_EQ(views::InkDropState::HIDDEN,
3097 overflow_button_ink_drop_->GetTargetInkDropState());
3098 EXPECT_THAT(overflow_button_ink_drop_->GetAndResetRequestedStates(),
3099 ElementsAre(views::InkDropState::DEACTIVATED,
3100 views::InkDropState::HIDDEN));
3101
3102 EXPECT_FALSE(test_api_->overflow_bubble() &&
3103 test_api_->overflow_bubble()->IsShowing());
3104 }
3105
3106 // Tests ink drop state transitions for the overflow button when it is active
3107 // and the user taps down on it and drags it out of the button bounds.
3108 TEST_F(OverflowButtonActiveInkDropTest, TouchDragOut) {
3109 ui::test::EventGenerator& generator = GetEventGenerator();
3110 generator.set_current_location(GetScreenPointInsideOverflowButton());
3111
3112 generator.PressTouch();
3113 EXPECT_EQ(views::InkDropState::ACTIVATED,
3114 overflow_button_ink_drop_->GetTargetInkDropState());
3115 EXPECT_THAT(overflow_button_ink_drop_->GetAndResetRequestedStates(),
3116 IsEmpty());
3117
3118 generator.MoveTouch(GetScreenPointOutsideOverflowButton());
3119 EXPECT_EQ(views::InkDropState::ACTIVATED,
3120 overflow_button_ink_drop_->GetTargetInkDropState());
3121 EXPECT_THAT(overflow_button_ink_drop_->GetAndResetRequestedStates(),
3122 IsEmpty());
3123
3124 generator.ReleaseTouch();
3125 EXPECT_EQ(views::InkDropState::ACTIVATED,
3126 overflow_button_ink_drop_->GetTargetInkDropState());
3127 EXPECT_THAT(overflow_button_ink_drop_->GetAndResetRequestedStates(),
3128 IsEmpty());
3129
3130 ASSERT_TRUE(test_api_->overflow_bubble());
3131 EXPECT_TRUE(test_api_->overflow_bubble()->IsShowing());
3132 }
3133
3134 // Tests ink drop state transitions for the overflow button when it is active
3135 // and the user taps down on it and drags it out of the button bounds and back.
3136 TEST_F(OverflowButtonActiveInkDropTest, TouchDragOutAndBack) {
3137 ui::test::EventGenerator& generator = GetEventGenerator();
3138 generator.set_current_location(GetScreenPointInsideOverflowButton());
3139
3140 generator.PressTouch();
3141 EXPECT_EQ(views::InkDropState::ACTIVATED,
3142 overflow_button_ink_drop_->GetTargetInkDropState());
3143 EXPECT_THAT(overflow_button_ink_drop_->GetAndResetRequestedStates(),
3144 IsEmpty());
3145
3146 generator.MoveTouch(GetScreenPointOutsideOverflowButton());
3147 EXPECT_EQ(views::InkDropState::ACTIVATED,
3148 overflow_button_ink_drop_->GetTargetInkDropState());
3149 EXPECT_THAT(overflow_button_ink_drop_->GetAndResetRequestedStates(),
3150 IsEmpty());
3151
3152 generator.MoveTouch(GetScreenPointInsideOverflowButton());
3153 EXPECT_EQ(views::InkDropState::ACTIVATED,
3154 overflow_button_ink_drop_->GetTargetInkDropState());
3155 EXPECT_THAT(overflow_button_ink_drop_->GetAndResetRequestedStates(),
3156 IsEmpty());
3157
3158 generator.ReleaseTouch();
3159 EXPECT_EQ(views::InkDropState::ACTIVATED,
3160 overflow_button_ink_drop_->GetTargetInkDropState());
3161 EXPECT_THAT(overflow_button_ink_drop_->GetAndResetRequestedStates(),
3162 IsEmpty());
3163
3164 ASSERT_TRUE(test_api_->overflow_bubble());
3165 EXPECT_TRUE(test_api_->overflow_bubble()->IsShowing());
3166 }
3167
3168 // Tests ink drop state transitions for the overflow button when it is active
3169 // and the user long presses on the button to show the context menu.
3170 TEST_F(OverflowButtonActiveInkDropTest, TouchContextMenu) {
3171 ui::test::EventGenerator& generator = GetEventGenerator();
3172 generator.set_current_location(GetScreenPointInsideOverflowButton());
3173
3174 {
3175 RunAllPendingInMessageLoop();
3176 ScopedMockTaskRunnerWrapper mock_task_runner;
3177
3178 generator.PressTouch();
3179 EXPECT_EQ(views::InkDropState::ACTIVATED,
3180 overflow_button_ink_drop_->GetTargetInkDropState());
3181 EXPECT_THAT(overflow_button_ink_drop_->GetAndResetRequestedStates(),
3182 IsEmpty());
3183
3184 mock_task_runner.FastForwardUntilNoTasksRemain();
3185 EXPECT_EQ(views::InkDropState::ACTIVATED,
3186 overflow_button_ink_drop_->GetTargetInkDropState());
3187 EXPECT_THAT(overflow_button_ink_drop_->GetAndResetRequestedStates(),
3188 IsEmpty());
3189
3190 generator.ReleaseTouch();
3191 EXPECT_EQ(views::InkDropState::ACTIVATED,
3192 overflow_button_ink_drop_->GetTargetInkDropState());
3193 EXPECT_THAT(overflow_button_ink_drop_->GetAndResetRequestedStates(),
3194 IsEmpty());
3195
3196 ASSERT_TRUE(test_api_->overflow_bubble());
3197 EXPECT_TRUE(test_api_->overflow_bubble()->IsShowing());
3198 }
3199 }
3200
3201 #endif // !defined(OS_WIN)
3202
2576 } // namespace test 3203 } // namespace test
2577 } // namespace ash 3204 } // namespace ash
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698