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

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

Powered by Google App Engine
This is Rietveld 408576698