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

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 scoped task runner Created 4 years, 4 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 2040 matching lines...) Expand 10 before | Expand all | Expand 10 after
2095 bool IsVisible() const override { return is_visible_; } 2097 bool IsVisible() const override { return is_visible_; }
2096 bool GetTargetVisibility() const override { return target_visibility_; } 2098 bool GetTargetVisibility() const override { return target_visibility_; }
2097 2099
2098 private: 2100 private:
2099 bool is_visible_ = false; 2101 bool is_visible_ = false;
2100 bool target_visibility_ = false; 2102 bool target_visibility_ = false;
2101 2103
2102 DISALLOW_COPY_AND_ASSIGN(TestAppListPresenter); 2104 DISALLOW_COPY_AND_ASSIGN(TestAppListPresenter);
2103 }; 2105 };
2104 2106
2107 // An empty menu model for shell context menu just to have a menu.
2108 class TestShellMenuModel : public ui::SimpleMenuModel,
2109 public ui::SimpleMenuModel::Delegate {
2110 public:
2111 TestShellMenuModel() : ui::SimpleMenuModel(this) {}
2112 ~TestShellMenuModel() override {}
2113
2114 private:
2115 // ui::SimpleMenuModel::Delegate:
2116 bool IsCommandIdChecked(int command_id) const override { return false; }
2117 bool IsCommandIdEnabled(int command_id) const override { return true; }
2118 void ExecuteCommand(int command_id, int event_flags) override {}
2119
2120 DISALLOW_COPY_AND_ASSIGN(TestShellMenuModel);
2121 };
2122
2105 // A test ShellDelegate implementation that returns a TestAppListPresenter as 2123 // A test ShellDelegate implementation that returns a TestAppListPresenter as
2106 // the app list presenter. 2124 // the app list presenter and a TestShellMenuModel for the shell context menu.
2107 class TestAppListShellDelegate : public TestShellDelegate { 2125 class TestShelfViewShellDelegate : public TestShellDelegate {
2108 public: 2126 public:
2109 TestAppListShellDelegate() 2127 TestShelfViewShellDelegate()
2110 : app_list_presenter_(new TestAppListPresenter()) {} 2128 : app_list_presenter_(new TestAppListPresenter()) {}
2111 ~TestAppListShellDelegate() override {} 2129 ~TestShelfViewShellDelegate() override {}
2112 2130
2113 TestAppListPresenter* app_list_presenter() const { 2131 TestAppListPresenter* app_list_presenter() const {
2114 return app_list_presenter_.get(); 2132 return app_list_presenter_.get();
2115 } 2133 }
2116 2134
2117 // TestShellDelegate: 2135 // TestShellDelegate:
2136 ui::MenuModel* CreateContextMenu(WmShelf* wm_shelf,
2137 const ShelfItem* item) override {
2138 return new TestShellMenuModel;
2139 }
2118 app_list::AppListPresenter* GetAppListPresenter() override { 2140 app_list::AppListPresenter* GetAppListPresenter() override {
2119 return app_list_presenter(); 2141 return app_list_presenter();
2120 } 2142 }
2121 2143
2122 private: 2144 private:
2123 std::unique_ptr<TestAppListPresenter> app_list_presenter_; 2145 std::unique_ptr<TestAppListPresenter> app_list_presenter_;
2124 2146
2125 DISALLOW_COPY_AND_ASSIGN(TestAppListShellDelegate); 2147 DISALLOW_COPY_AND_ASSIGN(TestShelfViewShellDelegate);
2148 };
2149
2150 // A scoped wrapper around TestMockTimeTaskRunner that replaces message loop's
2151 // task runner with a TestMockTimeTaskRunner and resets it back at the end of
2152 // the scope.
2153 class ScopedMockTaskRunnerWrapper {
2154 public:
2155 ScopedMockTaskRunnerWrapper() {
2156 mock_task_runner_ = new base::TestMockTimeTaskRunner;
2157 previous_task_runner_ = base::MessageLoop::current()->task_runner();
2158 base::MessageLoop::current()->SetTaskRunner(mock_task_runner_);
2159 }
2160
2161 ~ScopedMockTaskRunnerWrapper() {
2162 mock_task_runner_->ClearPendingTasks();
bruthig 2016/08/25 19:18:35 It might be a good idea to DCHECK_EQ(mock_task_run
mohsen 2016/08/30 18:03:32 Done.
2163 base::MessageLoop::current()->SetTaskRunner(previous_task_runner_);
2164 }
2165
2166 void FastForwardUntilNoTasksRemain() {
2167 mock_task_runner_->FastForwardUntilNoTasksRemain();
2168 }
2169
2170 private:
2171 scoped_refptr<base::TestMockTimeTaskRunner> mock_task_runner_;
2172 scoped_refptr<base::SingleThreadTaskRunner> previous_task_runner_;
2173
2174 DISALLOW_COPY_AND_ASSIGN(ScopedMockTaskRunnerWrapper);
2126 }; 2175 };
2127 2176
2128 } // namespace 2177 } // namespace
2129 2178
2130 // Test fixture that forces material design mode in order to test ink drop 2179 // Test fixture that forces material design mode in order to test ink drop
2131 // ripples on shelf. 2180 // ripples on shelf.
2132 class ShelfViewInkDropTest : public ShelfViewTest { 2181 class ShelfViewInkDropTest : public ShelfViewTest {
2133 public: 2182 public:
2134 ShelfViewInkDropTest() {} 2183 ShelfViewInkDropTest() {}
2135 ~ShelfViewInkDropTest() override {} 2184 ~ShelfViewInkDropTest() override {}
2136 2185
2137 void SetUp() override { 2186 void SetUp() override {
2138 shell_delegate_ = new TestAppListShellDelegate; 2187 shell_delegate_ = new TestShelfViewShellDelegate;
2139 ash_test_helper()->set_test_shell_delegate(shell_delegate_); 2188 ash_test_helper()->set_test_shell_delegate(shell_delegate_);
2140 2189
2141 set_material_mode(ash::MaterialDesignController::MATERIAL_EXPERIMENTAL); 2190 set_material_mode(ash::MaterialDesignController::MATERIAL_EXPERIMENTAL);
2142 2191
2143 ShelfViewTest::SetUp(); 2192 ShelfViewTest::SetUp();
2144 } 2193 }
2145 2194
2146 protected: 2195 protected:
2147 void InitAppListButtonInkDrop() { 2196 void InitAppListButtonInkDrop() {
2148 app_list_button_ = shelf_view_->GetAppListButton(); 2197 app_list_button_ = shelf_view_->GetAppListButton();
2149 2198
2150 views::InkDropImpl* ink_drop_impl = 2199 views::InkDropImpl* ink_drop_impl =
2151 new views::InkDropImpl(app_list_button_); 2200 new views::InkDropImpl(app_list_button_);
2152 app_list_button_ink_drop_ = new InkDropSpy(base::WrapUnique(ink_drop_impl)); 2201 app_list_button_ink_drop_ = new InkDropSpy(base::WrapUnique(ink_drop_impl));
2153 views::test::InkDropHostViewTestApi(app_list_button_) 2202 views::test::InkDropHostViewTestApi(app_list_button_)
2154 .SetInkDrop(base::WrapUnique(app_list_button_ink_drop_), false); 2203 .SetInkDrop(base::WrapUnique(app_list_button_ink_drop_), false);
2155 } 2204 }
2156 2205
2157 void InitBrowserButtonInkDrop() { 2206 void InitBrowserButtonInkDrop() {
2158 browser_button_ = test_api_->GetButton(browser_index_); 2207 browser_button_ = test_api_->GetButton(browser_index_);
2159 2208
2160 views::InkDropImpl* ink_drop_impl = new views::InkDropImpl(browser_button_); 2209 views::InkDropImpl* ink_drop_impl = new views::InkDropImpl(browser_button_);
2161 browser_button_ink_drop_ = new InkDropSpy(base::WrapUnique(ink_drop_impl)); 2210 browser_button_ink_drop_ = new InkDropSpy(base::WrapUnique(ink_drop_impl));
2162 views::test::InkDropHostViewTestApi(browser_button_) 2211 views::test::InkDropHostViewTestApi(browser_button_)
2163 .SetInkDrop(base::WrapUnique(browser_button_ink_drop_)); 2212 .SetInkDrop(base::WrapUnique(browser_button_ink_drop_));
2164 } 2213 }
2165 2214
2215 void InitOverflowButtonInkDrop() {
2216 overflow_button_ = test_api_->overflow_button();
2217
2218 views::InkDropImpl* ink_drop_impl =
2219 new views::InkDropImpl(overflow_button_);
2220 overflow_button_ink_drop_ = new InkDropSpy(base::WrapUnique(ink_drop_impl));
2221 views::test::InkDropHostViewTestApi(overflow_button_)
2222 .SetInkDrop(base::WrapUnique(overflow_button_ink_drop_));
2223 }
2224
2166 void ShowAppList() { 2225 void ShowAppList() {
2167 shell_delegate_->app_list_presenter()->Show(0); 2226 shell_delegate_->app_list_presenter()->Show(0);
2168 // Similar to real AppListPresenter, notify button that the app list is 2227 // Similar to real AppListPresenter, notify button that the app list is
2169 // shown. 2228 // shown.
2170 app_list_button_->OnAppListShown(); 2229 app_list_button_->OnAppListShown();
2171 } 2230 }
2172 2231
2173 void DismissAppList() { 2232 void DismissAppList() {
2174 shell_delegate_->app_list_presenter()->Dismiss(); 2233 shell_delegate_->app_list_presenter()->Dismiss();
2175 // Similar to real AppListPresenter, notify button that the app list is 2234 // Similar to real AppListPresenter, notify button that the app list is
2176 // dismissed. 2235 // dismissed.
2177 app_list_button_->OnAppListDismissed(); 2236 app_list_button_->OnAppListDismissed();
2178 } 2237 }
2179 2238
2180 void FinishAppListVisibilityChange() { 2239 void FinishAppListVisibilityChange() {
2181 shell_delegate_->app_list_presenter()->FinishVisibilityChange(); 2240 shell_delegate_->app_list_presenter()->FinishVisibilityChange();
2182 } 2241 }
2183 2242
2184 TestAppListShellDelegate* shell_delegate_ = nullptr; // Owned by Shell. 2243 TestShelfViewShellDelegate* shell_delegate_ = nullptr; // Owned by Shell.
2185 2244
2186 AppListButton* app_list_button_ = nullptr; 2245 AppListButton* app_list_button_ = nullptr;
2187 InkDropSpy* app_list_button_ink_drop_ = nullptr; 2246 InkDropSpy* app_list_button_ink_drop_ = nullptr;
2188 ShelfButton* browser_button_ = nullptr; 2247 ShelfButton* browser_button_ = nullptr;
2189 InkDropSpy* browser_button_ink_drop_ = nullptr; 2248 InkDropSpy* browser_button_ink_drop_ = nullptr;
2249 OverflowButton* overflow_button_ = nullptr;
2250 InkDropSpy* overflow_button_ink_drop_ = nullptr;
2190 2251
2191 private: 2252 private:
2192 DISALLOW_COPY_AND_ASSIGN(ShelfViewInkDropTest); 2253 DISALLOW_COPY_AND_ASSIGN(ShelfViewInkDropTest);
2193 }; 2254 };
2194 2255
2195 // Tests that changing visibility of the app list transitions app list button's 2256 // Tests that changing visibility of the app list transitions app list button's
2196 // ink drop states correctly. 2257 // ink drop states correctly.
2197 TEST_F(ShelfViewInkDropTest, AppListButtonWhenVisibilityChanges) { 2258 TEST_F(ShelfViewInkDropTest, AppListButtonWhenVisibilityChanges) {
2198 InitAppListButtonInkDrop(); 2259 InitAppListButtonInkDrop();
2199 2260
(...skipping 372 matching lines...) Expand 10 before | Expand all | Expand 10 after
2572 ui::EF_LEFT_MOUSE_BUTTON, 0); 2633 ui::EF_LEFT_MOUSE_BUTTON, 0);
2573 button->OnMouseReleased(release_event); 2634 button->OnMouseReleased(release_event);
2574 test_api_->CloseMenu(); 2635 test_api_->CloseMenu();
2575 EXPECT_EQ(views::InkDropState::HIDDEN, 2636 EXPECT_EQ(views::InkDropState::HIDDEN,
2576 browser_button_ink_drop_->GetTargetInkDropState()); 2637 browser_button_ink_drop_->GetTargetInkDropState());
2577 EXPECT_THAT(browser_button_ink_drop_->GetAndResetRequestedStates(), 2638 EXPECT_THAT(browser_button_ink_drop_->GetAndResetRequestedStates(),
2578 ElementsAre(views::InkDropState::ACTIVATED, 2639 ElementsAre(views::InkDropState::ACTIVATED,
2579 views::InkDropState::DEACTIVATED)); 2640 views::InkDropState::DEACTIVATED));
2580 } 2641 }
2581 2642
2643 // Tests ink drop state transitions for the overflow button when the overflow
2644 // bubble is shown or hidden.
2645 TEST_F(ShelfViewInkDropTest, OverflowButtonOnOverflowBubbleShowHide) {
2646 InitOverflowButtonInkDrop();
2647
2648 AddButtonsUntilOverflow();
2649 EXPECT_TRUE(test_api_->IsOverflowButtonVisible());
2650 EXPECT_FALSE(test_api_->overflow_bubble() &&
bruthig 2016/08/25 19:18:35 I know you are just copying this style of expectat
mohsen 2016/08/30 18:03:32 I updated this for EXPECT_TRUE(foo && bar) cases,
bruthig 2016/09/01 16:12:54 Acknowledged.
2651 test_api_->overflow_bubble()->IsShowing());
2652
2653 test_api_->ShowOverflowBubble();
2654 EXPECT_TRUE(test_api_->overflow_bubble() &&
2655 test_api_->overflow_bubble()->IsShowing());
2656 EXPECT_EQ(views::InkDropState::ACTIVATED,
2657 overflow_button_ink_drop_->GetTargetInkDropState());
2658 EXPECT_THAT(overflow_button_ink_drop_->GetAndResetRequestedStates(),
2659 ElementsAre(views::InkDropState::ACTIVATED));
2660
2661 test_api_->HideOverflowBubble();
2662 EXPECT_FALSE(test_api_->overflow_bubble() &&
2663 test_api_->overflow_bubble()->IsShowing());
2664 EXPECT_EQ(views::InkDropState::HIDDEN,
2665 overflow_button_ink_drop_->GetTargetInkDropState());
2666 EXPECT_THAT(overflow_button_ink_drop_->GetAndResetRequestedStates(),
bruthig 2016/08/25 19:18:35 I really like how these expectations work with the
2667 ElementsAre(views::InkDropState::DEACTIVATED));
2668 }
2669
2670 // Tests ink drop state transitions for the overflow button when the user clicks
2671 // on it.
2672 TEST_F(ShelfViewInkDropTest, OverflowButtonMouseActivate) {
2673 InitOverflowButtonInkDrop();
2674
2675 AddButtonsUntilOverflow();
2676 EXPECT_TRUE(test_api_->IsOverflowButtonVisible());
2677 EXPECT_FALSE(test_api_->overflow_bubble() &&
2678 test_api_->overflow_bubble()->IsShowing());
2679
2680 ui::test::EventGenerator& generator = GetEventGenerator();
2681 gfx::Point mouse_location =
2682 overflow_button_->GetBoundsInScreen().CenterPoint();
2683 generator.MoveMouseTo(mouse_location);
2684
2685 generator.PressLeftButton();
2686 EXPECT_EQ(views::InkDropState::ACTION_PENDING,
2687 overflow_button_ink_drop_->GetTargetInkDropState());
2688 EXPECT_THAT(overflow_button_ink_drop_->GetAndResetRequestedStates(),
2689 ElementsAre(views::InkDropState::ACTION_PENDING));
2690
2691 generator.ReleaseLeftButton();
2692 EXPECT_EQ(views::InkDropState::ACTIVATED,
2693 overflow_button_ink_drop_->GetTargetInkDropState());
2694 EXPECT_THAT(overflow_button_ink_drop_->GetAndResetRequestedStates(),
2695 ElementsAre(views::InkDropState::ACTIVATED));
2696
2697 EXPECT_TRUE(test_api_->overflow_bubble() &&
2698 test_api_->overflow_bubble()->IsShowing());
2699 }
2700
2701 // Tests ink drop state transitions for the overflow button when the user
2702 // presses left mouse button on it and drags it out of the button bounds.
2703 TEST_F(ShelfViewInkDropTest, OverflowButtonMouseDragOut) {
2704 InitOverflowButtonInkDrop();
2705
2706 AddButtonsUntilOverflow();
2707 EXPECT_TRUE(test_api_->IsOverflowButtonVisible());
2708 EXPECT_FALSE(test_api_->overflow_bubble() &&
2709 test_api_->overflow_bubble()->IsShowing());
2710
2711 ui::test::EventGenerator& generator = GetEventGenerator();
2712 gfx::Point mouse_location =
2713 overflow_button_->GetBoundsInScreen().CenterPoint();
2714 generator.MoveMouseTo(mouse_location);
2715
2716 generator.PressLeftButton();
2717 EXPECT_EQ(views::InkDropState::ACTION_PENDING,
2718 overflow_button_ink_drop_->GetTargetInkDropState());
2719 EXPECT_THAT(overflow_button_ink_drop_->GetAndResetRequestedStates(),
2720 ElementsAre(views::InkDropState::ACTION_PENDING));
2721
2722 generator.MoveMouseBy(overflow_button_->width(), 0);
2723 EXPECT_EQ(views::InkDropState::HIDDEN,
2724 overflow_button_ink_drop_->GetTargetInkDropState());
2725 EXPECT_THAT(overflow_button_ink_drop_->GetAndResetRequestedStates(),
2726 ElementsAre(views::InkDropState::HIDDEN));
2727
2728 generator.ReleaseLeftButton();
2729 EXPECT_EQ(views::InkDropState::HIDDEN,
2730 overflow_button_ink_drop_->GetTargetInkDropState());
2731 EXPECT_THAT(overflow_button_ink_drop_->GetAndResetRequestedStates(),
2732 IsEmpty());
2733
2734 EXPECT_FALSE(test_api_->overflow_bubble() &&
2735 test_api_->overflow_bubble()->IsShowing());
2736 }
2737
2738 // Tests ink drop state transitions for the overflow button when the user
2739 // presses left mouse button on it and drags it out of the button bounds and
2740 // back.
2741 TEST_F(ShelfViewInkDropTest, OverflowButtonMouseDragOutAndBack) {
2742 InitOverflowButtonInkDrop();
2743
2744 AddButtonsUntilOverflow();
2745 EXPECT_TRUE(test_api_->IsOverflowButtonVisible());
2746 EXPECT_FALSE(test_api_->overflow_bubble() &&
2747 test_api_->overflow_bubble()->IsShowing());
2748
2749 ui::test::EventGenerator& generator = GetEventGenerator();
2750 gfx::Point mouse_location =
2751 overflow_button_->GetBoundsInScreen().CenterPoint();
2752 generator.MoveMouseTo(mouse_location);
2753
2754 generator.PressLeftButton();
2755 EXPECT_EQ(views::InkDropState::ACTION_PENDING,
2756 overflow_button_ink_drop_->GetTargetInkDropState());
2757 EXPECT_THAT(overflow_button_ink_drop_->GetAndResetRequestedStates(),
2758 ElementsAre(views::InkDropState::ACTION_PENDING));
2759
2760 generator.MoveMouseBy(overflow_button_->width(), 0);
2761 EXPECT_EQ(views::InkDropState::HIDDEN,
2762 overflow_button_ink_drop_->GetTargetInkDropState());
2763 EXPECT_THAT(overflow_button_ink_drop_->GetAndResetRequestedStates(),
2764 ElementsAre(views::InkDropState::HIDDEN));
2765
2766 generator.MoveMouseBy(-overflow_button_->width(), 0);
2767 EXPECT_EQ(views::InkDropState::ACTION_PENDING,
2768 overflow_button_ink_drop_->GetTargetInkDropState());
2769 EXPECT_THAT(overflow_button_ink_drop_->GetAndResetRequestedStates(),
2770 ElementsAre(views::InkDropState::ACTION_PENDING));
2771
2772 generator.ReleaseLeftButton();
2773 EXPECT_EQ(views::InkDropState::ACTIVATED,
2774 overflow_button_ink_drop_->GetTargetInkDropState());
2775 EXPECT_THAT(overflow_button_ink_drop_->GetAndResetRequestedStates(),
2776 ElementsAre(views::InkDropState::ACTIVATED));
2777
2778 EXPECT_TRUE(test_api_->overflow_bubble() &&
2779 test_api_->overflow_bubble()->IsShowing());
2780 }
2781
2782 // Tests ink drop state transitions for the overflow button when the user right
2783 // clicks on the button to show the context menu.
2784 TEST_F(ShelfViewInkDropTest, OverflowButtonMouseContextMenu) {
2785 InitOverflowButtonInkDrop();
2786
2787 AddButtonsUntilOverflow();
2788 EXPECT_TRUE(test_api_->IsOverflowButtonVisible());
2789 EXPECT_FALSE(test_api_->overflow_bubble() &&
2790 test_api_->overflow_bubble()->IsShowing());
2791
2792 ui::test::EventGenerator& generator = GetEventGenerator();
2793 gfx::Point mouse_location =
2794 overflow_button_->GetBoundsInScreen().CenterPoint();
2795 generator.MoveMouseTo(mouse_location);
2796
2797 generator.PressRightButton();
2798 EXPECT_EQ(views::InkDropState::HIDDEN,
2799 overflow_button_ink_drop_->GetTargetInkDropState());
2800 EXPECT_THAT(overflow_button_ink_drop_->GetAndResetRequestedStates(),
2801 IsEmpty());
2802
2803 generator.ReleaseRightButton();
2804 EXPECT_EQ(views::InkDropState::HIDDEN,
2805 overflow_button_ink_drop_->GetTargetInkDropState());
2806 EXPECT_THAT(overflow_button_ink_drop_->GetAndResetRequestedStates(),
2807 IsEmpty());
2808
2809 EXPECT_FALSE(test_api_->overflow_bubble() &&
2810 test_api_->overflow_bubble()->IsShowing());
2811 }
2812
2813 // Tests ink drop state transitions for the overflow button when it is active
2814 // and the user clicks on it.
2815 TEST_F(ShelfViewInkDropTest, OverflowButtonActiveMouseDeactivate) {
2816 InitOverflowButtonInkDrop();
2817
2818 AddButtonsUntilOverflow();
2819 EXPECT_TRUE(test_api_->IsOverflowButtonVisible());
2820
2821 test_api_->ShowOverflowBubble();
2822 EXPECT_TRUE(test_api_->overflow_bubble() &&
2823 test_api_->overflow_bubble()->IsShowing());
2824 EXPECT_EQ(views::InkDropState::ACTIVATED,
2825 overflow_button_ink_drop_->GetTargetInkDropState());
2826 EXPECT_THAT(overflow_button_ink_drop_->GetAndResetRequestedStates(),
2827 ElementsAre(views::InkDropState::ACTIVATED));
2828
2829 ui::test::EventGenerator& generator = GetEventGenerator();
2830 gfx::Point mouse_location =
2831 overflow_button_->GetBoundsInScreen().CenterPoint();
2832 generator.MoveMouseTo(mouse_location);
2833
2834 generator.PressLeftButton();
2835 EXPECT_EQ(views::InkDropState::ACTIVATED,
2836 overflow_button_ink_drop_->GetTargetInkDropState());
2837 EXPECT_THAT(overflow_button_ink_drop_->GetAndResetRequestedStates(),
2838 IsEmpty());
2839
2840 generator.ReleaseLeftButton();
2841 EXPECT_EQ(views::InkDropState::HIDDEN,
2842 overflow_button_ink_drop_->GetTargetInkDropState());
2843 EXPECT_THAT(overflow_button_ink_drop_->GetAndResetRequestedStates(),
2844 ElementsAre(views::InkDropState::DEACTIVATED));
2845
2846 EXPECT_FALSE(test_api_->overflow_bubble() &&
2847 test_api_->overflow_bubble()->IsShowing());
2848 }
2849
2850 // Tests ink drop state transitions for the overflow button when it is active
2851 // and the user presses left mouse button on it and drags it out of the button
2852 // bounds.
2853 TEST_F(ShelfViewInkDropTest, OverflowButtonActiveMouseDragOut) {
2854 InitOverflowButtonInkDrop();
2855
2856 AddButtonsUntilOverflow();
2857 EXPECT_TRUE(test_api_->IsOverflowButtonVisible());
2858
2859 test_api_->ShowOverflowBubble();
2860 EXPECT_TRUE(test_api_->overflow_bubble() &&
2861 test_api_->overflow_bubble()->IsShowing());
2862 EXPECT_EQ(views::InkDropState::ACTIVATED,
2863 overflow_button_ink_drop_->GetTargetInkDropState());
2864 EXPECT_THAT(overflow_button_ink_drop_->GetAndResetRequestedStates(),
2865 ElementsAre(views::InkDropState::ACTIVATED));
2866
2867 ui::test::EventGenerator& generator = GetEventGenerator();
2868 gfx::Point mouse_location =
2869 overflow_button_->GetBoundsInScreen().CenterPoint();
2870 generator.MoveMouseTo(mouse_location);
2871
2872 generator.PressLeftButton();
2873 EXPECT_EQ(views::InkDropState::ACTIVATED,
2874 overflow_button_ink_drop_->GetTargetInkDropState());
2875 EXPECT_THAT(overflow_button_ink_drop_->GetAndResetRequestedStates(),
2876 IsEmpty());
2877
2878 generator.MoveMouseBy(overflow_button_->width(), 0);
2879 EXPECT_EQ(views::InkDropState::ACTIVATED,
2880 overflow_button_ink_drop_->GetTargetInkDropState());
2881 EXPECT_THAT(overflow_button_ink_drop_->GetAndResetRequestedStates(),
2882 IsEmpty());
2883
2884 generator.ReleaseLeftButton();
2885 EXPECT_EQ(views::InkDropState::ACTIVATED,
2886 overflow_button_ink_drop_->GetTargetInkDropState());
2887 EXPECT_THAT(overflow_button_ink_drop_->GetAndResetRequestedStates(),
2888 IsEmpty());
2889
2890 EXPECT_TRUE(test_api_->overflow_bubble() &&
2891 test_api_->overflow_bubble()->IsShowing());
2892 }
2893
2894 // Tests ink drop state transitions for the overflow button when it is active
2895 // and the user presses left mouse button on it and drags it out of the button
2896 // bounds and back.
2897 TEST_F(ShelfViewInkDropTest, OverflowButtonActiveMouseDragOutAndBack) {
2898 InitOverflowButtonInkDrop();
2899
2900 AddButtonsUntilOverflow();
2901 EXPECT_TRUE(test_api_->IsOverflowButtonVisible());
2902
2903 test_api_->ShowOverflowBubble();
2904 EXPECT_TRUE(test_api_->overflow_bubble() &&
2905 test_api_->overflow_bubble()->IsShowing());
2906 EXPECT_EQ(views::InkDropState::ACTIVATED,
2907 overflow_button_ink_drop_->GetTargetInkDropState());
2908 EXPECT_THAT(overflow_button_ink_drop_->GetAndResetRequestedStates(),
2909 ElementsAre(views::InkDropState::ACTIVATED));
2910
2911 ui::test::EventGenerator& generator = GetEventGenerator();
2912 gfx::Point mouse_location =
2913 overflow_button_->GetBoundsInScreen().CenterPoint();
2914 generator.MoveMouseTo(mouse_location);
2915
2916 generator.PressLeftButton();
2917 EXPECT_EQ(views::InkDropState::ACTIVATED,
2918 overflow_button_ink_drop_->GetTargetInkDropState());
2919 EXPECT_THAT(overflow_button_ink_drop_->GetAndResetRequestedStates(),
2920 IsEmpty());
2921
2922 generator.MoveMouseBy(overflow_button_->width(), 0);
2923 EXPECT_EQ(views::InkDropState::ACTIVATED,
2924 overflow_button_ink_drop_->GetTargetInkDropState());
2925 EXPECT_THAT(overflow_button_ink_drop_->GetAndResetRequestedStates(),
2926 IsEmpty());
2927
2928 generator.MoveMouseBy(-overflow_button_->width(), 0);
2929 EXPECT_EQ(views::InkDropState::ACTIVATED,
2930 overflow_button_ink_drop_->GetTargetInkDropState());
2931 EXPECT_THAT(overflow_button_ink_drop_->GetAndResetRequestedStates(),
2932 IsEmpty());
2933
2934 generator.ReleaseLeftButton();
2935 EXPECT_EQ(views::InkDropState::HIDDEN,
2936 overflow_button_ink_drop_->GetTargetInkDropState());
2937 EXPECT_THAT(overflow_button_ink_drop_->GetAndResetRequestedStates(),
2938 ElementsAre(views::InkDropState::DEACTIVATED));
2939
2940 EXPECT_FALSE(test_api_->overflow_bubble() &&
2941 test_api_->overflow_bubble()->IsShowing());
2942 }
2943
2944 // Tests ink drop state transitions for the overflow button when it is active
2945 // and the user right clicks on the button to show the context menu.
2946 TEST_F(ShelfViewInkDropTest, OverflowButtonActiveMouseContextMenu) {
2947 InitOverflowButtonInkDrop();
2948
2949 AddButtonsUntilOverflow();
2950 EXPECT_TRUE(test_api_->IsOverflowButtonVisible());
2951
2952 test_api_->ShowOverflowBubble();
2953 EXPECT_TRUE(test_api_->overflow_bubble() &&
2954 test_api_->overflow_bubble()->IsShowing());
2955 EXPECT_EQ(views::InkDropState::ACTIVATED,
2956 overflow_button_ink_drop_->GetTargetInkDropState());
2957 EXPECT_THAT(overflow_button_ink_drop_->GetAndResetRequestedStates(),
2958 ElementsAre(views::InkDropState::ACTIVATED));
2959
2960 ui::test::EventGenerator& generator = GetEventGenerator();
2961 gfx::Point mouse_location =
2962 overflow_button_->GetBoundsInScreen().CenterPoint();
2963 generator.MoveMouseTo(mouse_location);
2964
2965 generator.PressRightButton();
2966 EXPECT_EQ(views::InkDropState::ACTIVATED,
2967 overflow_button_ink_drop_->GetTargetInkDropState());
2968 EXPECT_THAT(overflow_button_ink_drop_->GetAndResetRequestedStates(),
2969 IsEmpty());
2970
2971 generator.ReleaseRightButton();
2972 EXPECT_EQ(views::InkDropState::ACTIVATED,
2973 overflow_button_ink_drop_->GetTargetInkDropState());
2974 EXPECT_THAT(overflow_button_ink_drop_->GetAndResetRequestedStates(),
2975 IsEmpty());
2976
2977 EXPECT_TRUE(test_api_->overflow_bubble() &&
2978 test_api_->overflow_bubble()->IsShowing());
2979 }
2980
2981 #if !defined(OS_WIN)
2982 // There is no ink drop effect for gesture events on Windows.
2983
2984 // Tests ink drop state transitions for the overflow button when the user taps
2985 // on it.
2986 TEST_F(ShelfViewInkDropTest, OverflowButtonTouchActivate) {
2987 InitOverflowButtonInkDrop();
2988
2989 AddButtonsUntilOverflow();
2990 EXPECT_TRUE(test_api_->IsOverflowButtonVisible());
2991 EXPECT_FALSE(test_api_->overflow_bubble() &&
2992 test_api_->overflow_bubble()->IsShowing());
2993
2994 ui::test::EventGenerator& generator = GetEventGenerator();
2995 gfx::Point touch_location =
2996 overflow_button_->GetBoundsInScreen().CenterPoint();
2997 generator.set_current_location(touch_location);
2998
2999 generator.PressTouch();
3000 EXPECT_EQ(views::InkDropState::ACTION_PENDING,
3001 overflow_button_ink_drop_->GetTargetInkDropState());
3002 EXPECT_THAT(overflow_button_ink_drop_->GetAndResetRequestedStates(),
3003 ElementsAre(views::InkDropState::ACTION_PENDING));
3004
3005 generator.ReleaseTouch();
3006 EXPECT_EQ(views::InkDropState::ACTIVATED,
3007 overflow_button_ink_drop_->GetTargetInkDropState());
3008 EXPECT_THAT(overflow_button_ink_drop_->GetAndResetRequestedStates(),
3009 ElementsAre(views::InkDropState::ACTIVATED));
3010
3011 EXPECT_TRUE(test_api_->overflow_bubble() &&
3012 test_api_->overflow_bubble()->IsShowing());
3013 }
3014
3015 // Tests ink drop state transitions for the overflow button when the user taps
3016 // down on it and drags it out of the button bounds.
3017 TEST_F(ShelfViewInkDropTest, OverflowButtonTouchDragOut) {
3018 InitOverflowButtonInkDrop();
3019
3020 AddButtonsUntilOverflow();
3021 EXPECT_TRUE(test_api_->IsOverflowButtonVisible());
3022 EXPECT_FALSE(test_api_->overflow_bubble() &&
3023 test_api_->overflow_bubble()->IsShowing());
3024
3025 ui::test::EventGenerator& generator = GetEventGenerator();
3026 gfx::Point touch_location =
3027 overflow_button_->GetBoundsInScreen().CenterPoint();
3028 generator.set_current_location(touch_location);
3029
3030 generator.PressTouch();
3031 EXPECT_EQ(views::InkDropState::ACTION_PENDING,
3032 overflow_button_ink_drop_->GetTargetInkDropState());
3033 EXPECT_THAT(overflow_button_ink_drop_->GetAndResetRequestedStates(),
3034 ElementsAre(views::InkDropState::ACTION_PENDING));
3035
3036 touch_location.Offset(overflow_button_->width(), 0);
3037 generator.MoveTouch(touch_location);
3038 EXPECT_EQ(views::InkDropState::HIDDEN,
3039 overflow_button_ink_drop_->GetTargetInkDropState());
3040 EXPECT_THAT(overflow_button_ink_drop_->GetAndResetRequestedStates(),
3041 ElementsAre(views::InkDropState::HIDDEN));
3042
3043 generator.ReleaseTouch();
3044 EXPECT_EQ(views::InkDropState::HIDDEN,
3045 overflow_button_ink_drop_->GetTargetInkDropState());
3046 EXPECT_THAT(overflow_button_ink_drop_->GetAndResetRequestedStates(),
3047 IsEmpty());
3048
3049 EXPECT_FALSE(test_api_->overflow_bubble() &&
3050 test_api_->overflow_bubble()->IsShowing());
3051 }
3052
3053 // Tests ink drop state transitions for the overflow button when the user taps
3054 // down on it and drags it out of the button bounds and back.
3055 TEST_F(ShelfViewInkDropTest, OverflowButtonTouchDragOutAndBack) {
3056 InitOverflowButtonInkDrop();
3057
3058 AddButtonsUntilOverflow();
3059 EXPECT_TRUE(test_api_->IsOverflowButtonVisible());
3060 EXPECT_FALSE(test_api_->overflow_bubble() &&
3061 test_api_->overflow_bubble()->IsShowing());
3062
3063 ui::test::EventGenerator& generator = GetEventGenerator();
3064 gfx::Point touch_location =
3065 overflow_button_->GetBoundsInScreen().CenterPoint();
3066 generator.set_current_location(touch_location);
3067
3068 generator.PressTouch();
3069 EXPECT_EQ(views::InkDropState::ACTION_PENDING,
3070 overflow_button_ink_drop_->GetTargetInkDropState());
3071 EXPECT_THAT(overflow_button_ink_drop_->GetAndResetRequestedStates(),
3072 ElementsAre(views::InkDropState::ACTION_PENDING));
3073
3074 touch_location.Offset(overflow_button_->width(), 0);
3075 generator.MoveTouch(touch_location);
3076 EXPECT_EQ(views::InkDropState::HIDDEN,
3077 overflow_button_ink_drop_->GetTargetInkDropState());
3078 EXPECT_THAT(overflow_button_ink_drop_->GetAndResetRequestedStates(),
3079 ElementsAre(views::InkDropState::HIDDEN));
3080
3081 touch_location.Offset(-overflow_button_->width(), 0);
3082 generator.MoveTouch(touch_location);
3083 EXPECT_EQ(views::InkDropState::HIDDEN,
3084 overflow_button_ink_drop_->GetTargetInkDropState());
3085 EXPECT_THAT(overflow_button_ink_drop_->GetAndResetRequestedStates(),
3086 IsEmpty());
3087
3088 generator.ReleaseTouch();
3089 EXPECT_EQ(views::InkDropState::HIDDEN,
3090 overflow_button_ink_drop_->GetTargetInkDropState());
3091 EXPECT_THAT(overflow_button_ink_drop_->GetAndResetRequestedStates(),
3092 IsEmpty());
3093
3094 EXPECT_FALSE(test_api_->overflow_bubble() &&
3095 test_api_->overflow_bubble()->IsShowing());
3096 }
3097
3098 // Tests ink drop state transitions for the overflow button when the user long
3099 // presses on the button to show the context menu.
3100 TEST_F(ShelfViewInkDropTest, OverflowButtonTouchContextMenu) {
3101 InitOverflowButtonInkDrop();
3102
3103 AddButtonsUntilOverflow();
3104 EXPECT_TRUE(test_api_->IsOverflowButtonVisible());
3105 EXPECT_FALSE(test_api_->overflow_bubble() &&
3106 test_api_->overflow_bubble()->IsShowing());
3107
3108 ui::test::EventGenerator& generator = GetEventGenerator();
3109 gfx::Point touch_location =
3110 overflow_button_->GetBoundsInScreen().CenterPoint();
3111 generator.set_current_location(touch_location);
3112
3113 {
3114 RunAllPendingInMessageLoop();
3115 ScopedMockTaskRunnerWrapper mock_task_runner;
3116
3117 generator.PressTouch();
3118 EXPECT_EQ(views::InkDropState::ACTION_PENDING,
3119 overflow_button_ink_drop_->GetTargetInkDropState());
3120 EXPECT_THAT(overflow_button_ink_drop_->GetAndResetRequestedStates(),
3121 ElementsAre(views::InkDropState::ACTION_PENDING));
3122
3123 mock_task_runner.FastForwardUntilNoTasksRemain();
3124 EXPECT_EQ(views::InkDropState::HIDDEN,
3125 overflow_button_ink_drop_->GetTargetInkDropState());
3126 EXPECT_THAT(overflow_button_ink_drop_->GetAndResetRequestedStates(),
3127 ElementsAre(views::InkDropState::ALTERNATE_ACTION_PENDING,
3128 views::InkDropState::HIDDEN));
bruthig 2016/08/25 19:18:35 I kind of expect the ALTERNATE_ACTION_PENDING to b
mohsen 2016/08/30 18:03:32 Currently, ALTERNATE_ACTION_PENDING is used on a l
bruthig 2016/09/01 16:12:54 Seems reasonable, if we wanted it to perform an AL
3129
3130 generator.ReleaseTouch();
3131 EXPECT_EQ(views::InkDropState::HIDDEN,
3132 overflow_button_ink_drop_->GetTargetInkDropState());
3133 EXPECT_THAT(overflow_button_ink_drop_->GetAndResetRequestedStates(),
3134 IsEmpty());
3135
3136 EXPECT_FALSE(test_api_->overflow_bubble() &&
3137 test_api_->overflow_bubble()->IsShowing());
3138 }
3139 }
3140
3141 // Tests ink drop state transitions for the overflow button when it is active
3142 // and the user taps on it.
3143 TEST_F(ShelfViewInkDropTest, OverflowButtonActiveTouchDeactivate) {
3144 InitOverflowButtonInkDrop();
3145
3146 AddButtonsUntilOverflow();
3147 EXPECT_TRUE(test_api_->IsOverflowButtonVisible());
3148
3149 test_api_->ShowOverflowBubble();
3150 EXPECT_TRUE(test_api_->overflow_bubble() &&
3151 test_api_->overflow_bubble()->IsShowing());
3152 EXPECT_EQ(views::InkDropState::ACTIVATED,
3153 overflow_button_ink_drop_->GetTargetInkDropState());
3154 EXPECT_THAT(overflow_button_ink_drop_->GetAndResetRequestedStates(),
3155 ElementsAre(views::InkDropState::ACTIVATED));
3156
3157 ui::test::EventGenerator& generator = GetEventGenerator();
3158 gfx::Point touch_location =
3159 overflow_button_->GetBoundsInScreen().CenterPoint();
3160 generator.set_current_location(touch_location);
3161
3162 generator.PressTouch();
3163 EXPECT_EQ(views::InkDropState::ACTIVATED,
3164 overflow_button_ink_drop_->GetTargetInkDropState());
3165 EXPECT_THAT(overflow_button_ink_drop_->GetAndResetRequestedStates(),
3166 IsEmpty());
3167
3168 generator.ReleaseTouch();
3169 EXPECT_EQ(views::InkDropState::HIDDEN,
3170 overflow_button_ink_drop_->GetTargetInkDropState());
3171 EXPECT_THAT(overflow_button_ink_drop_->GetAndResetRequestedStates(),
3172 ElementsAre(views::InkDropState::DEACTIVATED,
3173 views::InkDropState::HIDDEN));
3174
3175 EXPECT_FALSE(test_api_->overflow_bubble() &&
3176 test_api_->overflow_bubble()->IsShowing());
3177 }
3178
3179 // Tests ink drop state transitions for the overflow button when it is active
3180 // and the user taps down on it and drags it out of the button bounds.
3181 TEST_F(ShelfViewInkDropTest, OverflowButtonActiveTouchDragOut) {
3182 InitOverflowButtonInkDrop();
3183
3184 AddButtonsUntilOverflow();
3185 EXPECT_TRUE(test_api_->IsOverflowButtonVisible());
3186
3187 test_api_->ShowOverflowBubble();
3188 EXPECT_TRUE(test_api_->overflow_bubble() &&
3189 test_api_->overflow_bubble()->IsShowing());
3190 EXPECT_EQ(views::InkDropState::ACTIVATED,
3191 overflow_button_ink_drop_->GetTargetInkDropState());
3192 EXPECT_THAT(overflow_button_ink_drop_->GetAndResetRequestedStates(),
3193 ElementsAre(views::InkDropState::ACTIVATED));
3194
3195 ui::test::EventGenerator& generator = GetEventGenerator();
3196 gfx::Point touch_location =
3197 overflow_button_->GetBoundsInScreen().CenterPoint();
3198 generator.set_current_location(touch_location);
3199
3200 generator.PressTouch();
3201 EXPECT_EQ(views::InkDropState::ACTIVATED,
3202 overflow_button_ink_drop_->GetTargetInkDropState());
3203 EXPECT_THAT(overflow_button_ink_drop_->GetAndResetRequestedStates(),
3204 IsEmpty());
3205
3206 touch_location.Offset(overflow_button_->width(), 0);
3207 generator.MoveTouch(touch_location);
3208 EXPECT_EQ(views::InkDropState::ACTIVATED,
3209 overflow_button_ink_drop_->GetTargetInkDropState());
3210 EXPECT_THAT(overflow_button_ink_drop_->GetAndResetRequestedStates(),
3211 IsEmpty());
3212
3213 generator.ReleaseTouch();
3214 EXPECT_EQ(views::InkDropState::ACTIVATED,
3215 overflow_button_ink_drop_->GetTargetInkDropState());
3216 EXPECT_THAT(overflow_button_ink_drop_->GetAndResetRequestedStates(),
3217 IsEmpty());
3218
3219 EXPECT_TRUE(test_api_->overflow_bubble() &&
3220 test_api_->overflow_bubble()->IsShowing());
3221 }
3222
3223 // Tests ink drop state transitions for the overflow button when it is active
3224 // and the user taps down on it and drags it out of the button bounds and back.
3225 TEST_F(ShelfViewInkDropTest, OverflowButtonActiveTouchDragOutAndBack) {
3226 InitOverflowButtonInkDrop();
3227
3228 AddButtonsUntilOverflow();
3229 EXPECT_TRUE(test_api_->IsOverflowButtonVisible());
3230
3231 test_api_->ShowOverflowBubble();
3232 EXPECT_TRUE(test_api_->overflow_bubble() &&
3233 test_api_->overflow_bubble()->IsShowing());
3234 EXPECT_EQ(views::InkDropState::ACTIVATED,
3235 overflow_button_ink_drop_->GetTargetInkDropState());
3236 EXPECT_THAT(overflow_button_ink_drop_->GetAndResetRequestedStates(),
3237 ElementsAre(views::InkDropState::ACTIVATED));
3238
3239 ui::test::EventGenerator& generator = GetEventGenerator();
3240 gfx::Point touch_location =
3241 overflow_button_->GetBoundsInScreen().CenterPoint();
3242 generator.set_current_location(touch_location);
3243
3244 generator.PressTouch();
3245 EXPECT_EQ(views::InkDropState::ACTIVATED,
3246 overflow_button_ink_drop_->GetTargetInkDropState());
3247 EXPECT_THAT(overflow_button_ink_drop_->GetAndResetRequestedStates(),
3248 IsEmpty());
3249
3250 touch_location.Offset(overflow_button_->width(), 0);
3251 generator.MoveTouch(touch_location);
3252 EXPECT_EQ(views::InkDropState::ACTIVATED,
3253 overflow_button_ink_drop_->GetTargetInkDropState());
3254 EXPECT_THAT(overflow_button_ink_drop_->GetAndResetRequestedStates(),
3255 IsEmpty());
3256
3257 touch_location.Offset(-overflow_button_->width(), 0);
3258 generator.MoveTouch(touch_location);
3259 EXPECT_EQ(views::InkDropState::ACTIVATED,
3260 overflow_button_ink_drop_->GetTargetInkDropState());
3261 EXPECT_THAT(overflow_button_ink_drop_->GetAndResetRequestedStates(),
3262 IsEmpty());
3263
3264 generator.ReleaseTouch();
3265 EXPECT_EQ(views::InkDropState::ACTIVATED,
3266 overflow_button_ink_drop_->GetTargetInkDropState());
3267 EXPECT_THAT(overflow_button_ink_drop_->GetAndResetRequestedStates(),
3268 IsEmpty());
3269
3270 EXPECT_TRUE(test_api_->overflow_bubble() &&
3271 test_api_->overflow_bubble()->IsShowing());
3272 }
3273
3274 // Tests ink drop state transitions for the overflow button when it is active
3275 // and the user long presses on the button to show the context menu.
3276 TEST_F(ShelfViewInkDropTest, OverflowButtonActiveTouchContextMenu) {
3277 InitOverflowButtonInkDrop();
3278
3279 AddButtonsUntilOverflow();
3280 EXPECT_TRUE(test_api_->IsOverflowButtonVisible());
3281
3282 test_api_->ShowOverflowBubble();
3283 EXPECT_TRUE(test_api_->overflow_bubble() &&
3284 test_api_->overflow_bubble()->IsShowing());
3285 EXPECT_EQ(views::InkDropState::ACTIVATED,
3286 overflow_button_ink_drop_->GetTargetInkDropState());
3287 EXPECT_THAT(overflow_button_ink_drop_->GetAndResetRequestedStates(),
3288 ElementsAre(views::InkDropState::ACTIVATED));
3289
3290 ui::test::EventGenerator& generator = GetEventGenerator();
3291 gfx::Point touch_location =
3292 overflow_button_->GetBoundsInScreen().CenterPoint();
3293 generator.set_current_location(touch_location);
3294
3295 {
3296 RunAllPendingInMessageLoop();
3297 ScopedMockTaskRunnerWrapper mock_task_runner;
3298
3299 generator.PressTouch();
3300 EXPECT_EQ(views::InkDropState::ACTIVATED,
3301 overflow_button_ink_drop_->GetTargetInkDropState());
3302 EXPECT_THAT(overflow_button_ink_drop_->GetAndResetRequestedStates(),
3303 IsEmpty());
3304
3305 mock_task_runner.FastForwardUntilNoTasksRemain();
3306 EXPECT_EQ(views::InkDropState::ACTIVATED,
3307 overflow_button_ink_drop_->GetTargetInkDropState());
3308 EXPECT_THAT(overflow_button_ink_drop_->GetAndResetRequestedStates(),
3309 IsEmpty());
3310
3311 generator.ReleaseTouch();
3312 EXPECT_EQ(views::InkDropState::ACTIVATED,
3313 overflow_button_ink_drop_->GetTargetInkDropState());
3314 EXPECT_THAT(overflow_button_ink_drop_->GetAndResetRequestedStates(),
3315 IsEmpty());
3316
3317 EXPECT_TRUE(test_api_->overflow_bubble() &&
3318 test_api_->overflow_bubble()->IsShowing());
3319 }
3320 }
3321
3322 #endif // !defined(OS_WIN)
3323
2582 } // namespace test 3324 } // namespace test
2583 } // namespace ash 3325 } // namespace ash
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698