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

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: Addressed review comments 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 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 8f932350bb1ba62e9bf03a19bfcd8b45c8c7aec5..de1a7054102696af7b9e1798e152ee00776e6add 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_menu_model.h"
@@ -43,6 +44,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"
@@ -590,8 +592,7 @@ class ShelfViewTest : public AshTestBase {
void TestDraggingAnItemFromOverflowToShelf(bool cancel) {
test_api_->ShowOverflowBubble();
- ASSERT_TRUE(test_api_->overflow_bubble() &&
- test_api_->overflow_bubble()->IsShowing());
+ ASSERT_TRUE(test_api_->IsShowingOverflowBubble());
ShelfViewTestAPI test_api_for_overflow(
test_api_->overflow_bubble()->shelf_view());
@@ -671,6 +672,7 @@ class ShelfViewTest : public AshTestBase {
EXPECT_EQ(second_last_visible_item_id_in_overflow,
GetItemId(test_api_for_overflow.GetLastVisibleIndex()));
}
+ test_api_->HideOverflowBubble();
}
// Returns the item's ShelfID at |index|.
@@ -1009,8 +1011,7 @@ TEST_P(ShelfViewTextDirectionTest, OverflowArrowForShelfPosition) {
// orientation.
AddButtonsUntilOverflow();
test_api_->ShowOverflowBubble();
- ASSERT_TRUE(test_api_->overflow_bubble() &&
- test_api_->overflow_bubble()->IsShowing());
+ ASSERT_TRUE(test_api_->IsShowingOverflowBubble());
EXPECT_EQ(kArrows[i], test_api_->overflow_bubble()->bubble_view()->arrow());
OverflowBubbleViewTestAPI bubble_view_api(
@@ -1583,8 +1584,7 @@ TEST_F(ShelfViewTest, OverflowBubbleSize) {
// Show overflow bubble.
test_api_->ShowOverflowBubble();
- ASSERT_TRUE(test_api_->overflow_bubble() &&
- test_api_->overflow_bubble()->IsShowing());
+ ASSERT_TRUE(test_api_->IsShowingOverflowBubble());
ShelfViewTestAPI test_for_overflow_view(
test_api_->overflow_bubble()->shelf_view());
@@ -1610,8 +1610,7 @@ TEST_F(ShelfViewTest, OverflowBubbleSize) {
// Check the overflow bubble size when an item is ripped off.
EXPECT_EQ(bubble_size.width() - item_width,
test_for_overflow_view.GetPreferredSize().width());
- ASSERT_TRUE(test_api_->overflow_bubble() &&
- test_api_->overflow_bubble()->IsShowing());
+ ASSERT_TRUE(test_api_->IsShowingOverflowBubble());
// Re-insert an item into the overflow bubble.
int first_index = test_for_overflow_view.GetFirstVisibleIndex();
@@ -1639,8 +1638,7 @@ TEST_F(ShelfViewTest, CheckDragInsertBoundsOfScrolledOverflowBubble) {
// Show overflow bubble.
test_api_->ShowOverflowBubble();
- ASSERT_TRUE(test_api_->overflow_bubble() &&
- test_api_->overflow_bubble()->IsShowing());
+ ASSERT_TRUE(test_api_->IsShowingOverflowBubble());
int item_width = test_api_->GetButtonSize() + test_api_->GetButtonSpacing();
OverflowBubbleView* bubble_view = test_api_->overflow_bubble()->bubble_view();
@@ -1652,8 +1650,7 @@ TEST_F(ShelfViewTest, CheckDragInsertBoundsOfScrolledOverflowBubble) {
(bubble_view->GetContentsBounds().width() + 3 * item_width))
AddAppShortcut();
- ASSERT_TRUE(test_api_->overflow_bubble() &&
- test_api_->overflow_bubble()->IsShowing());
+ ASSERT_TRUE(test_api_->IsShowingOverflowBubble());
ShelfViewTestAPI test_for_overflow_view(
test_api_->overflow_bubble()->shelf_view());
@@ -1703,8 +1700,7 @@ TEST_F(ShelfViewTest, CheckDragInsertBoundsWithMultiMonitor) {
// Test #1: Test drag insertion bounds of primary shelf.
// Show overflow bubble.
test_api_->ShowOverflowBubble();
- ASSERT_TRUE(test_api_->overflow_bubble() &&
- test_api_->overflow_bubble()->IsShowing());
+ ASSERT_TRUE(test_api_->IsShowingOverflowBubble());
ShelfViewTestAPI test_api_for_overflow_view(
test_api_->overflow_bubble()->shelf_view());
@@ -1724,8 +1720,7 @@ TEST_F(ShelfViewTest, CheckDragInsertBoundsWithMultiMonitor) {
// Test #2: Test drag insertion bounds of secondary shelf.
// Show overflow bubble.
test_api_for_secondary.ShowOverflowBubble();
- ASSERT_TRUE(test_api_for_secondary.overflow_bubble() &&
- test_api_for_secondary.overflow_bubble()->IsShowing());
+ ASSERT_TRUE(test_api_for_secondary.IsShowingOverflowBubble());
ShelfViewTestAPI test_api_for_overflow_view_of_secondary(
test_api_for_secondary.overflow_bubble()->shelf_view());
@@ -2129,8 +2124,7 @@ class ShelfViewInkDropTest : public ShelfViewTest {
~ShelfViewInkDropTest() override {}
void SetUp() override {
- shell_delegate_ = new TestAppListShellDelegate;
- ash_test_helper()->set_test_shell_delegate(shell_delegate_);
+ ash_test_helper()->set_test_shell_delegate(CreateTestShellDelegate());
set_material_mode(ash::MaterialDesignController::MATERIAL_EXPERIMENTAL);
@@ -2138,26 +2132,36 @@ class ShelfViewInkDropTest : public ShelfViewTest {
}
protected:
+ // Gives subclasses a chance to return a custom test shell delegate to install
+ // before calling base class's SetUp(). Shell will take ownership of the
+ // returned object.
James Cook 2016/09/14 21:50:05 Nice docs.
+ virtual TestShellDelegate* CreateTestShellDelegate() {
+ shell_delegate_ = new TestAppListShellDelegate;
+ return shell_delegate_;
+ }
+
void InitAppListButtonInkDrop() {
app_list_button_ = shelf_view_->GetAppListButton();
- views::InkDropImpl* ink_drop_impl =
- new views::InkDropImpl(app_list_button_);
- app_list_button_ink_drop_ = new InkDropSpy(base::WrapUnique(ink_drop_impl));
+ auto app_list_button_ink_drop = base::MakeUnique<InkDropSpy>(
+ base::MakeUnique<views::InkDropImpl>(app_list_button_));
+ app_list_button_ink_drop_ = app_list_button_ink_drop.get();
views::test::InkDropHostViewTestApi(app_list_button_)
- .SetInkDrop(base::WrapUnique(app_list_button_ink_drop_), false);
+ .SetInkDrop(std::move(app_list_button_ink_drop), false);
}
void InitBrowserButtonInkDrop() {
browser_button_ = test_api_->GetButton(browser_index_);
- views::InkDropImpl* ink_drop_impl = new views::InkDropImpl(browser_button_);
- browser_button_ink_drop_ = new InkDropSpy(base::WrapUnique(ink_drop_impl));
+ auto browser_button_ink_drop = base::MakeUnique<InkDropSpy>(
+ base::MakeUnique<views::InkDropImpl>(browser_button_));
+ browser_button_ink_drop_ = browser_button_ink_drop.get();
views::test::InkDropHostViewTestApi(browser_button_)
- .SetInkDrop(base::WrapUnique(browser_button_ink_drop_));
+ .SetInkDrop(std::move(browser_button_ink_drop));
}
void ShowAppList() {
+ DCHECK(shelf_delegate_);
shell_delegate_->app_list_presenter()->Show(0);
// Similar to real AppListPresenter, notify button that the app list is
// shown.
@@ -2165,6 +2169,7 @@ class ShelfViewInkDropTest : public ShelfViewTest {
}
void DismissAppList() {
+ DCHECK(shelf_delegate_);
shell_delegate_->app_list_presenter()->Dismiss();
// Similar to real AppListPresenter, notify button that the app list is
// dismissed.
@@ -2172,6 +2177,7 @@ class ShelfViewInkDropTest : public ShelfViewTest {
}
void FinishAppListVisibilityChange() {
+ DCHECK(shelf_delegate_);
shell_delegate_->app_list_presenter()->FinishVisibilityChange();
}
@@ -2277,9 +2283,8 @@ TEST_F(ShelfViewInkDropTest, AppListButtonMouseEventsWhenVisible) {
IsEmpty());
}
-#if !defined(OS_WIN)
// There is no ink drop effect for gesture events on Windows.
-
+#if !defined(OS_WIN)
// Tests that when the app list is hidden, tapping on the app list button
// transitions ink drop states correctly.
TEST_F(ShelfViewInkDropTest, AppListButtonGestureTapWhenHidden) {
@@ -2573,5 +2578,600 @@ TEST_F(ShelfViewInkDropTest, ShelfButtonWithMenuPressRelease) {
views::InkDropState::DEACTIVATED));
}
+namespace {
+
+// 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 for overflow button tests that returns a
+// TestShelfMenuModel for the shell context menu.
+class TestOverflowButtonShellDelegate : public TestShellDelegate {
+ public:
+ TestOverflowButtonShellDelegate() {}
+ ~TestOverflowButtonShellDelegate() override {}
+
+ // TestShellDelegate:
+ ui::MenuModel* CreateContextMenu(WmShelf* wm_shelf,
+ const ShelfItem* item) override {
+ // Caller takes ownership of the returned object.
+ return new TestShellMenuModel;
+ }
+
+ private:
+ DISALLOW_COPY_AND_ASSIGN(TestOverflowButtonShellDelegate);
+};
+
+// 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() {
+ DCHECK_EQ(mock_task_runner_, base::MessageLoop::current()->task_runner());
+ mock_task_runner_->ClearPendingTasks();
+ 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
+
+// Test fixture for testing material design ink drop on overflow button.
+class OverflowButtonInkDropTest : public ShelfViewInkDropTest {
+ public:
+ OverflowButtonInkDropTest() {}
+ ~OverflowButtonInkDropTest() override {}
+
+ void SetUp() override {
+ ShelfViewInkDropTest::SetUp();
+
+ overflow_button_ = test_api_->overflow_button();
+
+ auto overflow_button_ink_drop = base::MakeUnique<InkDropSpy>(
+ base::MakeUnique<views::InkDropImpl>(overflow_button_));
+ overflow_button_ink_drop_ = overflow_button_ink_drop.get();
+ views::test::InkDropHostViewTestApi(overflow_button_)
+ .SetInkDrop(std::move(overflow_button_ink_drop));
+
+ AddButtonsUntilOverflow();
+ EXPECT_TRUE(test_api_->IsOverflowButtonVisible());
+ EXPECT_FALSE(test_api_->IsShowingOverflowBubble());
+ }
+
+ protected:
+ gfx::Point GetScreenPointInsideOverflowButton() const {
+ return overflow_button_->GetBoundsInScreen().CenterPoint();
+ }
+
+ gfx::Point GetScreenPointOutsideOverflowButton() const {
+ gfx::Point point = GetScreenPointInsideOverflowButton();
+ point.Offset(overflow_button_->width(), 0);
+ return point;
+ }
+
+ // Overridden from ShelfViewInkDropTest:
+ TestShellDelegate* CreateTestShellDelegate() override {
+ return new TestOverflowButtonShellDelegate;
+ }
+
+ OverflowButton* overflow_button_ = nullptr;
+ InkDropSpy* overflow_button_ink_drop_ = nullptr;
+
+ private:
+ DISALLOW_COPY_AND_ASSIGN(OverflowButtonInkDropTest);
+};
+
+// Tests ink drop state transitions for the overflow button when the overflow
+// bubble is shown or hidden.
+TEST_F(OverflowButtonInkDropTest, OnOverflowBubbleShowHide) {
+ test_api_->ShowOverflowBubble();
+ ASSERT_TRUE(test_api_->IsShowingOverflowBubble());
+ 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_->IsShowingOverflowBubble());
+ EXPECT_EQ(views::InkDropState::HIDDEN,
+ overflow_button_ink_drop_->GetTargetInkDropState());
+ EXPECT_THAT(overflow_button_ink_drop_->GetAndResetRequestedStates(),
+ ElementsAre(views::InkDropState::DEACTIVATED));
+}
+
+// Tests ink drop state transitions for the overflow button when the user clicks
+// on it.
+TEST_F(OverflowButtonInkDropTest, MouseActivate) {
+ ui::test::EventGenerator& generator = GetEventGenerator();
+ gfx::Point mouse_location = GetScreenPointInsideOverflowButton();
+ 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));
+
+ ASSERT_TRUE(test_api_->IsShowingOverflowBubble());
+}
+
+// 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(OverflowButtonInkDropTest, MouseDragOut) {
+ ui::test::EventGenerator& generator = GetEventGenerator();
+ generator.MoveMouseTo(GetScreenPointInsideOverflowButton());
+
+ 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.MoveMouseTo(GetScreenPointOutsideOverflowButton());
+ 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_->IsShowingOverflowBubble());
+}
+
+// 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(OverflowButtonInkDropTest, MouseDragOutAndBack) {
+ ui::test::EventGenerator& generator = GetEventGenerator();
+ generator.MoveMouseTo(GetScreenPointInsideOverflowButton());
+
+ 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.MoveMouseTo(GetScreenPointOutsideOverflowButton());
+ EXPECT_EQ(views::InkDropState::HIDDEN,
+ overflow_button_ink_drop_->GetTargetInkDropState());
+ EXPECT_THAT(overflow_button_ink_drop_->GetAndResetRequestedStates(),
+ ElementsAre(views::InkDropState::HIDDEN));
+
+ generator.MoveMouseTo(GetScreenPointInsideOverflowButton());
+ 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));
+
+ ASSERT_TRUE(test_api_->IsShowingOverflowBubble());
+}
+
+// Tests ink drop state transitions for the overflow button when the user right
+// clicks on the button to show the context menu.
+TEST_F(OverflowButtonInkDropTest, MouseContextMenu) {
+ ui::test::EventGenerator& generator = GetEventGenerator();
+ generator.MoveMouseTo(GetScreenPointInsideOverflowButton());
+
+ 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_->IsShowingOverflowBubble());
+}
+
+// There is no ink drop effect for gesture events on Windows.
+#if !defined(OS_WIN)
+// Tests ink drop state transitions for the overflow button when the user taps
+// on it.
+TEST_F(OverflowButtonInkDropTest, TouchActivate) {
+ ui::test::EventGenerator& generator = GetEventGenerator();
+ generator.set_current_location(GetScreenPointInsideOverflowButton());
+
+ 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));
+
+ ASSERT_TRUE(test_api_->IsShowingOverflowBubble());
+}
+
+// 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(OverflowButtonInkDropTest, TouchDragOut) {
+ ui::test::EventGenerator& generator = GetEventGenerator();
+ generator.set_current_location(GetScreenPointInsideOverflowButton());
+
+ 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.MoveTouch(GetScreenPointOutsideOverflowButton());
+ 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_->IsShowingOverflowBubble());
+}
+
+// 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(OverflowButtonInkDropTest, TouchDragOutAndBack) {
+ ui::test::EventGenerator& generator = GetEventGenerator();
+ generator.set_current_location(GetScreenPointInsideOverflowButton());
+
+ 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.MoveTouch(GetScreenPointOutsideOverflowButton());
+ EXPECT_EQ(views::InkDropState::HIDDEN,
+ overflow_button_ink_drop_->GetTargetInkDropState());
+ EXPECT_THAT(overflow_button_ink_drop_->GetAndResetRequestedStates(),
+ ElementsAre(views::InkDropState::HIDDEN));
+
+ generator.MoveTouch(GetScreenPointInsideOverflowButton());
+ 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_->IsShowingOverflowBubble());
+}
+
+// Tests ink drop state transitions for the overflow button when the user long
+// presses on the button to show the context menu.
+TEST_F(OverflowButtonInkDropTest, TouchContextMenu) {
+ ui::test::EventGenerator& generator = GetEventGenerator();
+ generator.set_current_location(GetScreenPointInsideOverflowButton());
+
+ 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));
+
+ generator.ReleaseTouch();
+ EXPECT_EQ(views::InkDropState::HIDDEN,
+ overflow_button_ink_drop_->GetTargetInkDropState());
+ EXPECT_THAT(overflow_button_ink_drop_->GetAndResetRequestedStates(),
+ IsEmpty());
+
+ EXPECT_FALSE(test_api_->IsShowingOverflowBubble());
+ }
+}
+
+#endif // !defined(OS_WIN)
+
+// Test fixture for testing material design ink drop on overflow button when it
+// is active.
+class OverflowButtonActiveInkDropTest : public OverflowButtonInkDropTest {
+ public:
+ OverflowButtonActiveInkDropTest() {}
+ ~OverflowButtonActiveInkDropTest() override {}
+
+ void SetUp() override {
+ OverflowButtonInkDropTest::SetUp();
+
+ test_api_->ShowOverflowBubble();
+ ASSERT_TRUE(test_api_->IsShowingOverflowBubble());
+ EXPECT_EQ(views::InkDropState::ACTIVATED,
+ overflow_button_ink_drop_->GetTargetInkDropState());
+ EXPECT_THAT(overflow_button_ink_drop_->GetAndResetRequestedStates(),
+ ElementsAre(views::InkDropState::ACTIVATED));
+ }
+
+ private:
+ DISALLOW_COPY_AND_ASSIGN(OverflowButtonActiveInkDropTest);
+};
+
+// Tests ink drop state transitions for the overflow button when it is active
+// and the user clicks on it.
+TEST_F(OverflowButtonActiveInkDropTest, MouseDeactivate) {
+ ui::test::EventGenerator& generator = GetEventGenerator();
+ generator.MoveMouseTo(GetScreenPointInsideOverflowButton());
+
+ 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_->IsShowingOverflowBubble());
+}
+
+// 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(OverflowButtonActiveInkDropTest, MouseDragOut) {
+ ui::test::EventGenerator& generator = GetEventGenerator();
+ generator.MoveMouseTo(GetScreenPointInsideOverflowButton());
+
+ generator.PressLeftButton();
+ EXPECT_EQ(views::InkDropState::ACTIVATED,
+ overflow_button_ink_drop_->GetTargetInkDropState());
+ EXPECT_THAT(overflow_button_ink_drop_->GetAndResetRequestedStates(),
+ IsEmpty());
+
+ generator.MoveMouseTo(GetScreenPointOutsideOverflowButton());
+ 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());
+
+ ASSERT_TRUE(test_api_->IsShowingOverflowBubble());
+}
+
+// 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(OverflowButtonActiveInkDropTest, MouseDragOutAndBack) {
+ ui::test::EventGenerator& generator = GetEventGenerator();
+ generator.MoveMouseTo(GetScreenPointInsideOverflowButton());
+
+ generator.PressLeftButton();
+ EXPECT_EQ(views::InkDropState::ACTIVATED,
+ overflow_button_ink_drop_->GetTargetInkDropState());
+ EXPECT_THAT(overflow_button_ink_drop_->GetAndResetRequestedStates(),
+ IsEmpty());
+
+ generator.MoveMouseTo(GetScreenPointOutsideOverflowButton());
+ EXPECT_EQ(views::InkDropState::ACTIVATED,
+ overflow_button_ink_drop_->GetTargetInkDropState());
+ EXPECT_THAT(overflow_button_ink_drop_->GetAndResetRequestedStates(),
+ IsEmpty());
+
+ generator.MoveMouseTo(GetScreenPointInsideOverflowButton());
+ 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_->IsShowingOverflowBubble());
+}
+
+// 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(OverflowButtonActiveInkDropTest, MouseContextMenu) {
+ ui::test::EventGenerator& generator = GetEventGenerator();
+ generator.MoveMouseTo(GetScreenPointInsideOverflowButton());
+
+ 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());
+
+ ASSERT_TRUE(test_api_->IsShowingOverflowBubble());
+}
+
+// There is no ink drop effect for gesture events on Windows.
+#if !defined(OS_WIN)
+// Tests ink drop state transitions for the overflow button when it is active
+// and the user taps on it.
+TEST_F(OverflowButtonActiveInkDropTest, TouchDeactivate) {
+ ui::test::EventGenerator& generator = GetEventGenerator();
+ generator.set_current_location(GetScreenPointInsideOverflowButton());
+
+ 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_->IsShowingOverflowBubble());
+}
+
+// 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(OverflowButtonActiveInkDropTest, TouchDragOut) {
+ ui::test::EventGenerator& generator = GetEventGenerator();
+ generator.set_current_location(GetScreenPointInsideOverflowButton());
+
+ generator.PressTouch();
+ EXPECT_EQ(views::InkDropState::ACTIVATED,
+ overflow_button_ink_drop_->GetTargetInkDropState());
+ EXPECT_THAT(overflow_button_ink_drop_->GetAndResetRequestedStates(),
+ IsEmpty());
+
+ generator.MoveTouch(GetScreenPointOutsideOverflowButton());
+ 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());
+
+ ASSERT_TRUE(test_api_->IsShowingOverflowBubble());
+}
+
+// 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(OverflowButtonActiveInkDropTest, TouchDragOutAndBack) {
+ ui::test::EventGenerator& generator = GetEventGenerator();
+ generator.set_current_location(GetScreenPointInsideOverflowButton());
+
+ generator.PressTouch();
+ EXPECT_EQ(views::InkDropState::ACTIVATED,
+ overflow_button_ink_drop_->GetTargetInkDropState());
+ EXPECT_THAT(overflow_button_ink_drop_->GetAndResetRequestedStates(),
+ IsEmpty());
+
+ generator.MoveTouch(GetScreenPointOutsideOverflowButton());
+ EXPECT_EQ(views::InkDropState::ACTIVATED,
+ overflow_button_ink_drop_->GetTargetInkDropState());
+ EXPECT_THAT(overflow_button_ink_drop_->GetAndResetRequestedStates(),
+ IsEmpty());
+
+ generator.MoveTouch(GetScreenPointInsideOverflowButton());
+ 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());
+
+ ASSERT_TRUE(test_api_->IsShowingOverflowBubble());
+}
+
+// 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(OverflowButtonActiveInkDropTest, TouchContextMenu) {
+ ui::test::EventGenerator& generator = GetEventGenerator();
+ generator.set_current_location(GetScreenPointInsideOverflowButton());
+
+ 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());
+
+ ASSERT_TRUE(test_api_->IsShowingOverflowBubble());
+ }
+}
+
+#endif // !defined(OS_WIN)
+
} // namespace test
} // namespace ash

Powered by Google App Engine
This is Rietveld 408576698