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

Unified 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 side-by-side diff with in-line comments
Download patch
Index: ash/shelf/shelf_view_unittest.cc
diff --git a/ash/shelf/shelf_view_unittest.cc b/ash/shelf/shelf_view_unittest.cc
index 31247b12172b659e915a8b779691c05fe9efe731..a6bed647609e77c4708d335a99d1956b81924dcc 100644
--- a/ash/shelf/shelf_view_unittest.cc
+++ b/ash/shelf/shelf_view_unittest.cc
@@ -12,6 +12,7 @@
#include "ash/common/shelf/app_list_button.h"
#include "ash/common/shelf/overflow_bubble.h"
#include "ash/common/shelf/overflow_bubble_view.h"
+#include "ash/common/shelf/overflow_button.h"
#include "ash/common/shelf/shelf_button.h"
#include "ash/common/shelf/shelf_constants.h"
#include "ash/common/shelf/shelf_icon_observer.h"
@@ -42,6 +43,7 @@
#include "base/strings/string_number_conversions.h"
#include "base/strings/utf_string_conversions.h"
#include "base/test/histogram_tester.h"
+#include "base/test/test_mock_time_task_runner.h"
#include "base/test/user_action_tester.h"
#include "base/threading/thread_task_runner_handle.h"
#include "base/time/time.h"
@@ -2102,19 +2104,39 @@ class TestAppListPresenter : public app_list::AppListPresenter {
DISALLOW_COPY_AND_ASSIGN(TestAppListPresenter);
};
+// An empty menu model for shell context menu just to have a menu.
+class TestShellMenuModel : public ui::SimpleMenuModel,
+ public ui::SimpleMenuModel::Delegate {
+ public:
+ TestShellMenuModel() : ui::SimpleMenuModel(this) {}
+ ~TestShellMenuModel() override {}
+
+ private:
+ // ui::SimpleMenuModel::Delegate:
+ bool IsCommandIdChecked(int command_id) const override { return false; }
+ bool IsCommandIdEnabled(int command_id) const override { return true; }
+ void ExecuteCommand(int command_id, int event_flags) override {}
+
+ DISALLOW_COPY_AND_ASSIGN(TestShellMenuModel);
+};
+
// A test ShellDelegate implementation that returns a TestAppListPresenter as
-// the app list presenter.
-class TestAppListShellDelegate : public TestShellDelegate {
+// the app list presenter and a TestShellMenuModel for the shell context menu.
+class TestShelfViewShellDelegate : public TestShellDelegate {
public:
- TestAppListShellDelegate()
+ TestShelfViewShellDelegate()
: app_list_presenter_(new TestAppListPresenter()) {}
- ~TestAppListShellDelegate() override {}
+ ~TestShelfViewShellDelegate() override {}
TestAppListPresenter* app_list_presenter() const {
return app_list_presenter_.get();
}
// TestShellDelegate:
+ ui::MenuModel* CreateContextMenu(WmShelf* wm_shelf,
+ const ShelfItem* item) override {
+ return new TestShellMenuModel;
+ }
app_list::AppListPresenter* GetAppListPresenter() override {
return app_list_presenter();
}
@@ -2122,7 +2144,34 @@ class TestAppListShellDelegate : public TestShellDelegate {
private:
std::unique_ptr<TestAppListPresenter> app_list_presenter_;
- DISALLOW_COPY_AND_ASSIGN(TestAppListShellDelegate);
+ DISALLOW_COPY_AND_ASSIGN(TestShelfViewShellDelegate);
+};
+
+// A scoped wrapper around TestMockTimeTaskRunner that replaces message loop's
+// task runner with a TestMockTimeTaskRunner and resets it back at the end of
+// the scope.
+class ScopedMockTaskRunnerWrapper {
+ public:
+ ScopedMockTaskRunnerWrapper() {
+ mock_task_runner_ = new base::TestMockTimeTaskRunner;
+ previous_task_runner_ = base::MessageLoop::current()->task_runner();
+ base::MessageLoop::current()->SetTaskRunner(mock_task_runner_);
+ }
+
+ ~ScopedMockTaskRunnerWrapper() {
+ 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.
+ base::MessageLoop::current()->SetTaskRunner(previous_task_runner_);
+ }
+
+ void FastForwardUntilNoTasksRemain() {
+ mock_task_runner_->FastForwardUntilNoTasksRemain();
+ }
+
+ private:
+ scoped_refptr<base::TestMockTimeTaskRunner> mock_task_runner_;
+ scoped_refptr<base::SingleThreadTaskRunner> previous_task_runner_;
+
+ DISALLOW_COPY_AND_ASSIGN(ScopedMockTaskRunnerWrapper);
};
} // namespace
@@ -2135,7 +2184,7 @@ class ShelfViewInkDropTest : public ShelfViewTest {
~ShelfViewInkDropTest() override {}
void SetUp() override {
- shell_delegate_ = new TestAppListShellDelegate;
+ shell_delegate_ = new TestShelfViewShellDelegate;
ash_test_helper()->set_test_shell_delegate(shell_delegate_);
set_material_mode(ash::MaterialDesignController::MATERIAL_EXPERIMENTAL);
@@ -2163,6 +2212,16 @@ class ShelfViewInkDropTest : public ShelfViewTest {
.SetInkDrop(base::WrapUnique(browser_button_ink_drop_));
}
+ void InitOverflowButtonInkDrop() {
+ overflow_button_ = test_api_->overflow_button();
+
+ views::InkDropImpl* ink_drop_impl =
+ new views::InkDropImpl(overflow_button_);
+ overflow_button_ink_drop_ = new InkDropSpy(base::WrapUnique(ink_drop_impl));
+ views::test::InkDropHostViewTestApi(overflow_button_)
+ .SetInkDrop(base::WrapUnique(overflow_button_ink_drop_));
+ }
+
void ShowAppList() {
shell_delegate_->app_list_presenter()->Show(0);
// Similar to real AppListPresenter, notify button that the app list is
@@ -2181,12 +2240,14 @@ class ShelfViewInkDropTest : public ShelfViewTest {
shell_delegate_->app_list_presenter()->FinishVisibilityChange();
}
- TestAppListShellDelegate* shell_delegate_ = nullptr; // Owned by Shell.
+ TestShelfViewShellDelegate* shell_delegate_ = nullptr; // Owned by Shell.
AppListButton* app_list_button_ = nullptr;
InkDropSpy* app_list_button_ink_drop_ = nullptr;
ShelfButton* browser_button_ = nullptr;
InkDropSpy* browser_button_ink_drop_ = nullptr;
+ OverflowButton* overflow_button_ = nullptr;
+ InkDropSpy* overflow_button_ink_drop_ = nullptr;
private:
DISALLOW_COPY_AND_ASSIGN(ShelfViewInkDropTest);
@@ -2579,5 +2640,686 @@ TEST_F(ShelfViewInkDropTest, ShelfButtonWithMenuPressRelease) {
views::InkDropState::DEACTIVATED));
}
+// Tests ink drop state transitions for the overflow button when the overflow
+// bubble is shown or hidden.
+TEST_F(ShelfViewInkDropTest, OverflowButtonOnOverflowBubbleShowHide) {
+ InitOverflowButtonInkDrop();
+
+ AddButtonsUntilOverflow();
+ EXPECT_TRUE(test_api_->IsOverflowButtonVisible());
+ 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.
+ test_api_->overflow_bubble()->IsShowing());
+
+ test_api_->ShowOverflowBubble();
+ EXPECT_TRUE(test_api_->overflow_bubble() &&
+ test_api_->overflow_bubble()->IsShowing());
+ EXPECT_EQ(views::InkDropState::ACTIVATED,
+ overflow_button_ink_drop_->GetTargetInkDropState());
+ EXPECT_THAT(overflow_button_ink_drop_->GetAndResetRequestedStates(),
+ ElementsAre(views::InkDropState::ACTIVATED));
+
+ test_api_->HideOverflowBubble();
+ EXPECT_FALSE(test_api_->overflow_bubble() &&
+ test_api_->overflow_bubble()->IsShowing());
+ EXPECT_EQ(views::InkDropState::HIDDEN,
+ overflow_button_ink_drop_->GetTargetInkDropState());
+ EXPECT_THAT(overflow_button_ink_drop_->GetAndResetRequestedStates(),
bruthig 2016/08/25 19:18:35 I really like how these expectations work with the
+ ElementsAre(views::InkDropState::DEACTIVATED));
+}
+
+// Tests ink drop state transitions for the overflow button when the user clicks
+// on it.
+TEST_F(ShelfViewInkDropTest, OverflowButtonMouseActivate) {
+ InitOverflowButtonInkDrop();
+
+ AddButtonsUntilOverflow();
+ EXPECT_TRUE(test_api_->IsOverflowButtonVisible());
+ EXPECT_FALSE(test_api_->overflow_bubble() &&
+ test_api_->overflow_bubble()->IsShowing());
+
+ ui::test::EventGenerator& generator = GetEventGenerator();
+ gfx::Point mouse_location =
+ overflow_button_->GetBoundsInScreen().CenterPoint();
+ generator.MoveMouseTo(mouse_location);
+
+ generator.PressLeftButton();
+ EXPECT_EQ(views::InkDropState::ACTION_PENDING,
+ overflow_button_ink_drop_->GetTargetInkDropState());
+ EXPECT_THAT(overflow_button_ink_drop_->GetAndResetRequestedStates(),
+ ElementsAre(views::InkDropState::ACTION_PENDING));
+
+ generator.ReleaseLeftButton();
+ EXPECT_EQ(views::InkDropState::ACTIVATED,
+ overflow_button_ink_drop_->GetTargetInkDropState());
+ EXPECT_THAT(overflow_button_ink_drop_->GetAndResetRequestedStates(),
+ ElementsAre(views::InkDropState::ACTIVATED));
+
+ EXPECT_TRUE(test_api_->overflow_bubble() &&
+ test_api_->overflow_bubble()->IsShowing());
+}
+
+// Tests ink drop state transitions for the overflow button when the user
+// presses left mouse button on it and drags it out of the button bounds.
+TEST_F(ShelfViewInkDropTest, OverflowButtonMouseDragOut) {
+ InitOverflowButtonInkDrop();
+
+ AddButtonsUntilOverflow();
+ EXPECT_TRUE(test_api_->IsOverflowButtonVisible());
+ EXPECT_FALSE(test_api_->overflow_bubble() &&
+ test_api_->overflow_bubble()->IsShowing());
+
+ ui::test::EventGenerator& generator = GetEventGenerator();
+ gfx::Point mouse_location =
+ overflow_button_->GetBoundsInScreen().CenterPoint();
+ generator.MoveMouseTo(mouse_location);
+
+ generator.PressLeftButton();
+ EXPECT_EQ(views::InkDropState::ACTION_PENDING,
+ overflow_button_ink_drop_->GetTargetInkDropState());
+ EXPECT_THAT(overflow_button_ink_drop_->GetAndResetRequestedStates(),
+ ElementsAre(views::InkDropState::ACTION_PENDING));
+
+ generator.MoveMouseBy(overflow_button_->width(), 0);
+ EXPECT_EQ(views::InkDropState::HIDDEN,
+ overflow_button_ink_drop_->GetTargetInkDropState());
+ EXPECT_THAT(overflow_button_ink_drop_->GetAndResetRequestedStates(),
+ ElementsAre(views::InkDropState::HIDDEN));
+
+ generator.ReleaseLeftButton();
+ EXPECT_EQ(views::InkDropState::HIDDEN,
+ overflow_button_ink_drop_->GetTargetInkDropState());
+ EXPECT_THAT(overflow_button_ink_drop_->GetAndResetRequestedStates(),
+ IsEmpty());
+
+ EXPECT_FALSE(test_api_->overflow_bubble() &&
+ test_api_->overflow_bubble()->IsShowing());
+}
+
+// Tests ink drop state transitions for the overflow button when the user
+// presses left mouse button on it and drags it out of the button bounds and
+// back.
+TEST_F(ShelfViewInkDropTest, OverflowButtonMouseDragOutAndBack) {
+ InitOverflowButtonInkDrop();
+
+ AddButtonsUntilOverflow();
+ EXPECT_TRUE(test_api_->IsOverflowButtonVisible());
+ EXPECT_FALSE(test_api_->overflow_bubble() &&
+ test_api_->overflow_bubble()->IsShowing());
+
+ ui::test::EventGenerator& generator = GetEventGenerator();
+ gfx::Point mouse_location =
+ overflow_button_->GetBoundsInScreen().CenterPoint();
+ generator.MoveMouseTo(mouse_location);
+
+ generator.PressLeftButton();
+ EXPECT_EQ(views::InkDropState::ACTION_PENDING,
+ overflow_button_ink_drop_->GetTargetInkDropState());
+ EXPECT_THAT(overflow_button_ink_drop_->GetAndResetRequestedStates(),
+ ElementsAre(views::InkDropState::ACTION_PENDING));
+
+ generator.MoveMouseBy(overflow_button_->width(), 0);
+ EXPECT_EQ(views::InkDropState::HIDDEN,
+ overflow_button_ink_drop_->GetTargetInkDropState());
+ EXPECT_THAT(overflow_button_ink_drop_->GetAndResetRequestedStates(),
+ ElementsAre(views::InkDropState::HIDDEN));
+
+ generator.MoveMouseBy(-overflow_button_->width(), 0);
+ EXPECT_EQ(views::InkDropState::ACTION_PENDING,
+ overflow_button_ink_drop_->GetTargetInkDropState());
+ EXPECT_THAT(overflow_button_ink_drop_->GetAndResetRequestedStates(),
+ ElementsAre(views::InkDropState::ACTION_PENDING));
+
+ generator.ReleaseLeftButton();
+ EXPECT_EQ(views::InkDropState::ACTIVATED,
+ overflow_button_ink_drop_->GetTargetInkDropState());
+ EXPECT_THAT(overflow_button_ink_drop_->GetAndResetRequestedStates(),
+ ElementsAre(views::InkDropState::ACTIVATED));
+
+ EXPECT_TRUE(test_api_->overflow_bubble() &&
+ test_api_->overflow_bubble()->IsShowing());
+}
+
+// Tests ink drop state transitions for the overflow button when the user right
+// clicks on the button to show the context menu.
+TEST_F(ShelfViewInkDropTest, OverflowButtonMouseContextMenu) {
+ InitOverflowButtonInkDrop();
+
+ AddButtonsUntilOverflow();
+ EXPECT_TRUE(test_api_->IsOverflowButtonVisible());
+ EXPECT_FALSE(test_api_->overflow_bubble() &&
+ test_api_->overflow_bubble()->IsShowing());
+
+ ui::test::EventGenerator& generator = GetEventGenerator();
+ gfx::Point mouse_location =
+ overflow_button_->GetBoundsInScreen().CenterPoint();
+ generator.MoveMouseTo(mouse_location);
+
+ generator.PressRightButton();
+ EXPECT_EQ(views::InkDropState::HIDDEN,
+ overflow_button_ink_drop_->GetTargetInkDropState());
+ EXPECT_THAT(overflow_button_ink_drop_->GetAndResetRequestedStates(),
+ IsEmpty());
+
+ generator.ReleaseRightButton();
+ EXPECT_EQ(views::InkDropState::HIDDEN,
+ overflow_button_ink_drop_->GetTargetInkDropState());
+ EXPECT_THAT(overflow_button_ink_drop_->GetAndResetRequestedStates(),
+ IsEmpty());
+
+ EXPECT_FALSE(test_api_->overflow_bubble() &&
+ test_api_->overflow_bubble()->IsShowing());
+}
+
+// Tests ink drop state transitions for the overflow button when it is active
+// and the user clicks on it.
+TEST_F(ShelfViewInkDropTest, OverflowButtonActiveMouseDeactivate) {
+ InitOverflowButtonInkDrop();
+
+ AddButtonsUntilOverflow();
+ EXPECT_TRUE(test_api_->IsOverflowButtonVisible());
+
+ test_api_->ShowOverflowBubble();
+ EXPECT_TRUE(test_api_->overflow_bubble() &&
+ test_api_->overflow_bubble()->IsShowing());
+ EXPECT_EQ(views::InkDropState::ACTIVATED,
+ overflow_button_ink_drop_->GetTargetInkDropState());
+ EXPECT_THAT(overflow_button_ink_drop_->GetAndResetRequestedStates(),
+ ElementsAre(views::InkDropState::ACTIVATED));
+
+ ui::test::EventGenerator& generator = GetEventGenerator();
+ gfx::Point mouse_location =
+ overflow_button_->GetBoundsInScreen().CenterPoint();
+ generator.MoveMouseTo(mouse_location);
+
+ generator.PressLeftButton();
+ EXPECT_EQ(views::InkDropState::ACTIVATED,
+ overflow_button_ink_drop_->GetTargetInkDropState());
+ EXPECT_THAT(overflow_button_ink_drop_->GetAndResetRequestedStates(),
+ IsEmpty());
+
+ generator.ReleaseLeftButton();
+ EXPECT_EQ(views::InkDropState::HIDDEN,
+ overflow_button_ink_drop_->GetTargetInkDropState());
+ EXPECT_THAT(overflow_button_ink_drop_->GetAndResetRequestedStates(),
+ ElementsAre(views::InkDropState::DEACTIVATED));
+
+ EXPECT_FALSE(test_api_->overflow_bubble() &&
+ test_api_->overflow_bubble()->IsShowing());
+}
+
+// Tests ink drop state transitions for the overflow button when it is active
+// and the user presses left mouse button on it and drags it out of the button
+// bounds.
+TEST_F(ShelfViewInkDropTest, OverflowButtonActiveMouseDragOut) {
+ InitOverflowButtonInkDrop();
+
+ AddButtonsUntilOverflow();
+ EXPECT_TRUE(test_api_->IsOverflowButtonVisible());
+
+ test_api_->ShowOverflowBubble();
+ EXPECT_TRUE(test_api_->overflow_bubble() &&
+ test_api_->overflow_bubble()->IsShowing());
+ EXPECT_EQ(views::InkDropState::ACTIVATED,
+ overflow_button_ink_drop_->GetTargetInkDropState());
+ EXPECT_THAT(overflow_button_ink_drop_->GetAndResetRequestedStates(),
+ ElementsAre(views::InkDropState::ACTIVATED));
+
+ ui::test::EventGenerator& generator = GetEventGenerator();
+ gfx::Point mouse_location =
+ overflow_button_->GetBoundsInScreen().CenterPoint();
+ generator.MoveMouseTo(mouse_location);
+
+ generator.PressLeftButton();
+ EXPECT_EQ(views::InkDropState::ACTIVATED,
+ overflow_button_ink_drop_->GetTargetInkDropState());
+ EXPECT_THAT(overflow_button_ink_drop_->GetAndResetRequestedStates(),
+ IsEmpty());
+
+ generator.MoveMouseBy(overflow_button_->width(), 0);
+ EXPECT_EQ(views::InkDropState::ACTIVATED,
+ overflow_button_ink_drop_->GetTargetInkDropState());
+ EXPECT_THAT(overflow_button_ink_drop_->GetAndResetRequestedStates(),
+ IsEmpty());
+
+ generator.ReleaseLeftButton();
+ EXPECT_EQ(views::InkDropState::ACTIVATED,
+ overflow_button_ink_drop_->GetTargetInkDropState());
+ EXPECT_THAT(overflow_button_ink_drop_->GetAndResetRequestedStates(),
+ IsEmpty());
+
+ EXPECT_TRUE(test_api_->overflow_bubble() &&
+ test_api_->overflow_bubble()->IsShowing());
+}
+
+// Tests ink drop state transitions for the overflow button when it is active
+// and the user presses left mouse button on it and drags it out of the button
+// bounds and back.
+TEST_F(ShelfViewInkDropTest, OverflowButtonActiveMouseDragOutAndBack) {
+ InitOverflowButtonInkDrop();
+
+ AddButtonsUntilOverflow();
+ EXPECT_TRUE(test_api_->IsOverflowButtonVisible());
+
+ test_api_->ShowOverflowBubble();
+ EXPECT_TRUE(test_api_->overflow_bubble() &&
+ test_api_->overflow_bubble()->IsShowing());
+ EXPECT_EQ(views::InkDropState::ACTIVATED,
+ overflow_button_ink_drop_->GetTargetInkDropState());
+ EXPECT_THAT(overflow_button_ink_drop_->GetAndResetRequestedStates(),
+ ElementsAre(views::InkDropState::ACTIVATED));
+
+ ui::test::EventGenerator& generator = GetEventGenerator();
+ gfx::Point mouse_location =
+ overflow_button_->GetBoundsInScreen().CenterPoint();
+ generator.MoveMouseTo(mouse_location);
+
+ generator.PressLeftButton();
+ EXPECT_EQ(views::InkDropState::ACTIVATED,
+ overflow_button_ink_drop_->GetTargetInkDropState());
+ EXPECT_THAT(overflow_button_ink_drop_->GetAndResetRequestedStates(),
+ IsEmpty());
+
+ generator.MoveMouseBy(overflow_button_->width(), 0);
+ EXPECT_EQ(views::InkDropState::ACTIVATED,
+ overflow_button_ink_drop_->GetTargetInkDropState());
+ EXPECT_THAT(overflow_button_ink_drop_->GetAndResetRequestedStates(),
+ IsEmpty());
+
+ generator.MoveMouseBy(-overflow_button_->width(), 0);
+ EXPECT_EQ(views::InkDropState::ACTIVATED,
+ overflow_button_ink_drop_->GetTargetInkDropState());
+ EXPECT_THAT(overflow_button_ink_drop_->GetAndResetRequestedStates(),
+ IsEmpty());
+
+ generator.ReleaseLeftButton();
+ EXPECT_EQ(views::InkDropState::HIDDEN,
+ overflow_button_ink_drop_->GetTargetInkDropState());
+ EXPECT_THAT(overflow_button_ink_drop_->GetAndResetRequestedStates(),
+ ElementsAre(views::InkDropState::DEACTIVATED));
+
+ EXPECT_FALSE(test_api_->overflow_bubble() &&
+ test_api_->overflow_bubble()->IsShowing());
+}
+
+// Tests ink drop state transitions for the overflow button when it is active
+// and the user right clicks on the button to show the context menu.
+TEST_F(ShelfViewInkDropTest, OverflowButtonActiveMouseContextMenu) {
+ InitOverflowButtonInkDrop();
+
+ AddButtonsUntilOverflow();
+ EXPECT_TRUE(test_api_->IsOverflowButtonVisible());
+
+ test_api_->ShowOverflowBubble();
+ EXPECT_TRUE(test_api_->overflow_bubble() &&
+ test_api_->overflow_bubble()->IsShowing());
+ EXPECT_EQ(views::InkDropState::ACTIVATED,
+ overflow_button_ink_drop_->GetTargetInkDropState());
+ EXPECT_THAT(overflow_button_ink_drop_->GetAndResetRequestedStates(),
+ ElementsAre(views::InkDropState::ACTIVATED));
+
+ ui::test::EventGenerator& generator = GetEventGenerator();
+ gfx::Point mouse_location =
+ overflow_button_->GetBoundsInScreen().CenterPoint();
+ generator.MoveMouseTo(mouse_location);
+
+ generator.PressRightButton();
+ EXPECT_EQ(views::InkDropState::ACTIVATED,
+ overflow_button_ink_drop_->GetTargetInkDropState());
+ EXPECT_THAT(overflow_button_ink_drop_->GetAndResetRequestedStates(),
+ IsEmpty());
+
+ generator.ReleaseRightButton();
+ EXPECT_EQ(views::InkDropState::ACTIVATED,
+ overflow_button_ink_drop_->GetTargetInkDropState());
+ EXPECT_THAT(overflow_button_ink_drop_->GetAndResetRequestedStates(),
+ IsEmpty());
+
+ EXPECT_TRUE(test_api_->overflow_bubble() &&
+ test_api_->overflow_bubble()->IsShowing());
+}
+
+#if !defined(OS_WIN)
+// There is no ink drop effect for gesture events on Windows.
+
+// Tests ink drop state transitions for the overflow button when the user taps
+// on it.
+TEST_F(ShelfViewInkDropTest, OverflowButtonTouchActivate) {
+ InitOverflowButtonInkDrop();
+
+ AddButtonsUntilOverflow();
+ EXPECT_TRUE(test_api_->IsOverflowButtonVisible());
+ EXPECT_FALSE(test_api_->overflow_bubble() &&
+ test_api_->overflow_bubble()->IsShowing());
+
+ ui::test::EventGenerator& generator = GetEventGenerator();
+ gfx::Point touch_location =
+ overflow_button_->GetBoundsInScreen().CenterPoint();
+ generator.set_current_location(touch_location);
+
+ generator.PressTouch();
+ EXPECT_EQ(views::InkDropState::ACTION_PENDING,
+ overflow_button_ink_drop_->GetTargetInkDropState());
+ EXPECT_THAT(overflow_button_ink_drop_->GetAndResetRequestedStates(),
+ ElementsAre(views::InkDropState::ACTION_PENDING));
+
+ generator.ReleaseTouch();
+ EXPECT_EQ(views::InkDropState::ACTIVATED,
+ overflow_button_ink_drop_->GetTargetInkDropState());
+ EXPECT_THAT(overflow_button_ink_drop_->GetAndResetRequestedStates(),
+ ElementsAre(views::InkDropState::ACTIVATED));
+
+ EXPECT_TRUE(test_api_->overflow_bubble() &&
+ test_api_->overflow_bubble()->IsShowing());
+}
+
+// Tests ink drop state transitions for the overflow button when the user taps
+// down on it and drags it out of the button bounds.
+TEST_F(ShelfViewInkDropTest, OverflowButtonTouchDragOut) {
+ InitOverflowButtonInkDrop();
+
+ AddButtonsUntilOverflow();
+ EXPECT_TRUE(test_api_->IsOverflowButtonVisible());
+ EXPECT_FALSE(test_api_->overflow_bubble() &&
+ test_api_->overflow_bubble()->IsShowing());
+
+ ui::test::EventGenerator& generator = GetEventGenerator();
+ gfx::Point touch_location =
+ overflow_button_->GetBoundsInScreen().CenterPoint();
+ generator.set_current_location(touch_location);
+
+ generator.PressTouch();
+ EXPECT_EQ(views::InkDropState::ACTION_PENDING,
+ overflow_button_ink_drop_->GetTargetInkDropState());
+ EXPECT_THAT(overflow_button_ink_drop_->GetAndResetRequestedStates(),
+ ElementsAre(views::InkDropState::ACTION_PENDING));
+
+ touch_location.Offset(overflow_button_->width(), 0);
+ generator.MoveTouch(touch_location);
+ EXPECT_EQ(views::InkDropState::HIDDEN,
+ overflow_button_ink_drop_->GetTargetInkDropState());
+ EXPECT_THAT(overflow_button_ink_drop_->GetAndResetRequestedStates(),
+ ElementsAre(views::InkDropState::HIDDEN));
+
+ generator.ReleaseTouch();
+ EXPECT_EQ(views::InkDropState::HIDDEN,
+ overflow_button_ink_drop_->GetTargetInkDropState());
+ EXPECT_THAT(overflow_button_ink_drop_->GetAndResetRequestedStates(),
+ IsEmpty());
+
+ EXPECT_FALSE(test_api_->overflow_bubble() &&
+ test_api_->overflow_bubble()->IsShowing());
+}
+
+// Tests ink drop state transitions for the overflow button when the user taps
+// down on it and drags it out of the button bounds and back.
+TEST_F(ShelfViewInkDropTest, OverflowButtonTouchDragOutAndBack) {
+ InitOverflowButtonInkDrop();
+
+ AddButtonsUntilOverflow();
+ EXPECT_TRUE(test_api_->IsOverflowButtonVisible());
+ EXPECT_FALSE(test_api_->overflow_bubble() &&
+ test_api_->overflow_bubble()->IsShowing());
+
+ ui::test::EventGenerator& generator = GetEventGenerator();
+ gfx::Point touch_location =
+ overflow_button_->GetBoundsInScreen().CenterPoint();
+ generator.set_current_location(touch_location);
+
+ generator.PressTouch();
+ EXPECT_EQ(views::InkDropState::ACTION_PENDING,
+ overflow_button_ink_drop_->GetTargetInkDropState());
+ EXPECT_THAT(overflow_button_ink_drop_->GetAndResetRequestedStates(),
+ ElementsAre(views::InkDropState::ACTION_PENDING));
+
+ touch_location.Offset(overflow_button_->width(), 0);
+ generator.MoveTouch(touch_location);
+ EXPECT_EQ(views::InkDropState::HIDDEN,
+ overflow_button_ink_drop_->GetTargetInkDropState());
+ EXPECT_THAT(overflow_button_ink_drop_->GetAndResetRequestedStates(),
+ ElementsAre(views::InkDropState::HIDDEN));
+
+ touch_location.Offset(-overflow_button_->width(), 0);
+ generator.MoveTouch(touch_location);
+ EXPECT_EQ(views::InkDropState::HIDDEN,
+ overflow_button_ink_drop_->GetTargetInkDropState());
+ EXPECT_THAT(overflow_button_ink_drop_->GetAndResetRequestedStates(),
+ IsEmpty());
+
+ generator.ReleaseTouch();
+ EXPECT_EQ(views::InkDropState::HIDDEN,
+ overflow_button_ink_drop_->GetTargetInkDropState());
+ EXPECT_THAT(overflow_button_ink_drop_->GetAndResetRequestedStates(),
+ IsEmpty());
+
+ EXPECT_FALSE(test_api_->overflow_bubble() &&
+ test_api_->overflow_bubble()->IsShowing());
+}
+
+// Tests ink drop state transitions for the overflow button when the user long
+// presses on the button to show the context menu.
+TEST_F(ShelfViewInkDropTest, OverflowButtonTouchContextMenu) {
+ InitOverflowButtonInkDrop();
+
+ AddButtonsUntilOverflow();
+ EXPECT_TRUE(test_api_->IsOverflowButtonVisible());
+ EXPECT_FALSE(test_api_->overflow_bubble() &&
+ test_api_->overflow_bubble()->IsShowing());
+
+ ui::test::EventGenerator& generator = GetEventGenerator();
+ gfx::Point touch_location =
+ overflow_button_->GetBoundsInScreen().CenterPoint();
+ generator.set_current_location(touch_location);
+
+ {
+ RunAllPendingInMessageLoop();
+ ScopedMockTaskRunnerWrapper mock_task_runner;
+
+ generator.PressTouch();
+ EXPECT_EQ(views::InkDropState::ACTION_PENDING,
+ overflow_button_ink_drop_->GetTargetInkDropState());
+ EXPECT_THAT(overflow_button_ink_drop_->GetAndResetRequestedStates(),
+ ElementsAre(views::InkDropState::ACTION_PENDING));
+
+ mock_task_runner.FastForwardUntilNoTasksRemain();
+ EXPECT_EQ(views::InkDropState::HIDDEN,
+ overflow_button_ink_drop_->GetTargetInkDropState());
+ EXPECT_THAT(overflow_button_ink_drop_->GetAndResetRequestedStates(),
+ ElementsAre(views::InkDropState::ALTERNATE_ACTION_PENDING,
+ 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
+
+ generator.ReleaseTouch();
+ EXPECT_EQ(views::InkDropState::HIDDEN,
+ overflow_button_ink_drop_->GetTargetInkDropState());
+ EXPECT_THAT(overflow_button_ink_drop_->GetAndResetRequestedStates(),
+ IsEmpty());
+
+ EXPECT_FALSE(test_api_->overflow_bubble() &&
+ test_api_->overflow_bubble()->IsShowing());
+ }
+}
+
+// Tests ink drop state transitions for the overflow button when it is active
+// and the user taps on it.
+TEST_F(ShelfViewInkDropTest, OverflowButtonActiveTouchDeactivate) {
+ InitOverflowButtonInkDrop();
+
+ AddButtonsUntilOverflow();
+ EXPECT_TRUE(test_api_->IsOverflowButtonVisible());
+
+ test_api_->ShowOverflowBubble();
+ EXPECT_TRUE(test_api_->overflow_bubble() &&
+ test_api_->overflow_bubble()->IsShowing());
+ EXPECT_EQ(views::InkDropState::ACTIVATED,
+ overflow_button_ink_drop_->GetTargetInkDropState());
+ EXPECT_THAT(overflow_button_ink_drop_->GetAndResetRequestedStates(),
+ ElementsAre(views::InkDropState::ACTIVATED));
+
+ ui::test::EventGenerator& generator = GetEventGenerator();
+ gfx::Point touch_location =
+ overflow_button_->GetBoundsInScreen().CenterPoint();
+ generator.set_current_location(touch_location);
+
+ generator.PressTouch();
+ EXPECT_EQ(views::InkDropState::ACTIVATED,
+ overflow_button_ink_drop_->GetTargetInkDropState());
+ EXPECT_THAT(overflow_button_ink_drop_->GetAndResetRequestedStates(),
+ IsEmpty());
+
+ generator.ReleaseTouch();
+ EXPECT_EQ(views::InkDropState::HIDDEN,
+ overflow_button_ink_drop_->GetTargetInkDropState());
+ EXPECT_THAT(overflow_button_ink_drop_->GetAndResetRequestedStates(),
+ ElementsAre(views::InkDropState::DEACTIVATED,
+ views::InkDropState::HIDDEN));
+
+ EXPECT_FALSE(test_api_->overflow_bubble() &&
+ test_api_->overflow_bubble()->IsShowing());
+}
+
+// Tests ink drop state transitions for the overflow button when it is active
+// and the user taps down on it and drags it out of the button bounds.
+TEST_F(ShelfViewInkDropTest, OverflowButtonActiveTouchDragOut) {
+ InitOverflowButtonInkDrop();
+
+ AddButtonsUntilOverflow();
+ EXPECT_TRUE(test_api_->IsOverflowButtonVisible());
+
+ test_api_->ShowOverflowBubble();
+ EXPECT_TRUE(test_api_->overflow_bubble() &&
+ test_api_->overflow_bubble()->IsShowing());
+ EXPECT_EQ(views::InkDropState::ACTIVATED,
+ overflow_button_ink_drop_->GetTargetInkDropState());
+ EXPECT_THAT(overflow_button_ink_drop_->GetAndResetRequestedStates(),
+ ElementsAre(views::InkDropState::ACTIVATED));
+
+ ui::test::EventGenerator& generator = GetEventGenerator();
+ gfx::Point touch_location =
+ overflow_button_->GetBoundsInScreen().CenterPoint();
+ generator.set_current_location(touch_location);
+
+ generator.PressTouch();
+ EXPECT_EQ(views::InkDropState::ACTIVATED,
+ overflow_button_ink_drop_->GetTargetInkDropState());
+ EXPECT_THAT(overflow_button_ink_drop_->GetAndResetRequestedStates(),
+ IsEmpty());
+
+ touch_location.Offset(overflow_button_->width(), 0);
+ generator.MoveTouch(touch_location);
+ EXPECT_EQ(views::InkDropState::ACTIVATED,
+ overflow_button_ink_drop_->GetTargetInkDropState());
+ EXPECT_THAT(overflow_button_ink_drop_->GetAndResetRequestedStates(),
+ IsEmpty());
+
+ generator.ReleaseTouch();
+ EXPECT_EQ(views::InkDropState::ACTIVATED,
+ overflow_button_ink_drop_->GetTargetInkDropState());
+ EXPECT_THAT(overflow_button_ink_drop_->GetAndResetRequestedStates(),
+ IsEmpty());
+
+ EXPECT_TRUE(test_api_->overflow_bubble() &&
+ test_api_->overflow_bubble()->IsShowing());
+}
+
+// Tests ink drop state transitions for the overflow button when it is active
+// and the user taps down on it and drags it out of the button bounds and back.
+TEST_F(ShelfViewInkDropTest, OverflowButtonActiveTouchDragOutAndBack) {
+ InitOverflowButtonInkDrop();
+
+ AddButtonsUntilOverflow();
+ EXPECT_TRUE(test_api_->IsOverflowButtonVisible());
+
+ test_api_->ShowOverflowBubble();
+ EXPECT_TRUE(test_api_->overflow_bubble() &&
+ test_api_->overflow_bubble()->IsShowing());
+ EXPECT_EQ(views::InkDropState::ACTIVATED,
+ overflow_button_ink_drop_->GetTargetInkDropState());
+ EXPECT_THAT(overflow_button_ink_drop_->GetAndResetRequestedStates(),
+ ElementsAre(views::InkDropState::ACTIVATED));
+
+ ui::test::EventGenerator& generator = GetEventGenerator();
+ gfx::Point touch_location =
+ overflow_button_->GetBoundsInScreen().CenterPoint();
+ generator.set_current_location(touch_location);
+
+ generator.PressTouch();
+ EXPECT_EQ(views::InkDropState::ACTIVATED,
+ overflow_button_ink_drop_->GetTargetInkDropState());
+ EXPECT_THAT(overflow_button_ink_drop_->GetAndResetRequestedStates(),
+ IsEmpty());
+
+ touch_location.Offset(overflow_button_->width(), 0);
+ generator.MoveTouch(touch_location);
+ EXPECT_EQ(views::InkDropState::ACTIVATED,
+ overflow_button_ink_drop_->GetTargetInkDropState());
+ EXPECT_THAT(overflow_button_ink_drop_->GetAndResetRequestedStates(),
+ IsEmpty());
+
+ touch_location.Offset(-overflow_button_->width(), 0);
+ generator.MoveTouch(touch_location);
+ EXPECT_EQ(views::InkDropState::ACTIVATED,
+ overflow_button_ink_drop_->GetTargetInkDropState());
+ EXPECT_THAT(overflow_button_ink_drop_->GetAndResetRequestedStates(),
+ IsEmpty());
+
+ generator.ReleaseTouch();
+ EXPECT_EQ(views::InkDropState::ACTIVATED,
+ overflow_button_ink_drop_->GetTargetInkDropState());
+ EXPECT_THAT(overflow_button_ink_drop_->GetAndResetRequestedStates(),
+ IsEmpty());
+
+ EXPECT_TRUE(test_api_->overflow_bubble() &&
+ test_api_->overflow_bubble()->IsShowing());
+}
+
+// Tests ink drop state transitions for the overflow button when it is active
+// and the user long presses on the button to show the context menu.
+TEST_F(ShelfViewInkDropTest, OverflowButtonActiveTouchContextMenu) {
+ InitOverflowButtonInkDrop();
+
+ AddButtonsUntilOverflow();
+ EXPECT_TRUE(test_api_->IsOverflowButtonVisible());
+
+ test_api_->ShowOverflowBubble();
+ EXPECT_TRUE(test_api_->overflow_bubble() &&
+ test_api_->overflow_bubble()->IsShowing());
+ EXPECT_EQ(views::InkDropState::ACTIVATED,
+ overflow_button_ink_drop_->GetTargetInkDropState());
+ EXPECT_THAT(overflow_button_ink_drop_->GetAndResetRequestedStates(),
+ ElementsAre(views::InkDropState::ACTIVATED));
+
+ ui::test::EventGenerator& generator = GetEventGenerator();
+ gfx::Point touch_location =
+ overflow_button_->GetBoundsInScreen().CenterPoint();
+ generator.set_current_location(touch_location);
+
+ {
+ RunAllPendingInMessageLoop();
+ ScopedMockTaskRunnerWrapper mock_task_runner;
+
+ generator.PressTouch();
+ EXPECT_EQ(views::InkDropState::ACTIVATED,
+ overflow_button_ink_drop_->GetTargetInkDropState());
+ EXPECT_THAT(overflow_button_ink_drop_->GetAndResetRequestedStates(),
+ IsEmpty());
+
+ mock_task_runner.FastForwardUntilNoTasksRemain();
+ EXPECT_EQ(views::InkDropState::ACTIVATED,
+ overflow_button_ink_drop_->GetTargetInkDropState());
+ EXPECT_THAT(overflow_button_ink_drop_->GetAndResetRequestedStates(),
+ IsEmpty());
+
+ generator.ReleaseTouch();
+ EXPECT_EQ(views::InkDropState::ACTIVATED,
+ overflow_button_ink_drop_->GetTargetInkDropState());
+ EXPECT_THAT(overflow_button_ink_drop_->GetAndResetRequestedStates(),
+ IsEmpty());
+
+ EXPECT_TRUE(test_api_->overflow_bubble() &&
+ test_api_->overflow_bubble()->IsShowing());
+ }
+}
+
+#endif // !defined(OS_WIN)
+
} // namespace test
} // namespace ash

Powered by Google App Engine
This is Rietveld 408576698