Chromium Code Reviews| Index: ash/shelf/shelf_view_unittest.cc |
| diff --git a/ash/shelf/shelf_view_unittest.cc b/ash/shelf/shelf_view_unittest.cc |
| index adf61ebd7fa2f81ecaff7491747c360594bcc9c6..8668481342c03034e3cb80187a6638caa61ad60e 100644 |
| --- a/ash/shelf/shelf_view_unittest.cc |
| +++ b/ash/shelf/shelf_view_unittest.cc |
| @@ -25,6 +25,7 @@ |
| #include "ash/shelf/shelf_widget.h" |
| #include "ash/shell.h" |
| #include "ash/test/ash_test_base.h" |
| +#include "ash/test/ash_test_helper.h" |
| #include "ash/test/material_design_controller_test_api.h" |
| #include "ash/test/overflow_bubble_view_test_api.h" |
| #include "ash/test/shelf_test_api.h" |
| @@ -32,6 +33,7 @@ |
| #include "ash/test/shell_test_api.h" |
| #include "ash/test/test_shelf_delegate.h" |
| #include "ash/test/test_shelf_item_delegate.h" |
| +#include "ash/test/test_shell_delegate.h" |
| #include "ash/test/test_system_tray_delegate.h" |
| #include "base/compiler_specific.h" |
| #include "base/i18n/rtl.h" |
| @@ -43,6 +45,7 @@ |
| #include "base/threading/thread_task_runner_handle.h" |
| #include "base/time/time.h" |
| #include "testing/gmock/include/gmock/gmock.h" |
| +#include "ui/app_list/presenter/app_list_presenter.h" |
| #include "ui/aura/test/aura_test_base.h" |
| #include "ui/aura/window.h" |
| #include "ui/aura/window_event_dispatcher.h" |
| @@ -1482,7 +1485,7 @@ TEST_F(ShelfViewTest, ShouldHideTooltipTest) { |
| } |
| // The tooltip should not hide on the app-list button. |
| - views::View* app_list_button = shelf_view_->GetAppListButtonView(); |
| + AppListButton* app_list_button = shelf_view_->GetAppListButton(); |
| EXPECT_FALSE(shelf_view_->ShouldHideTooltip( |
| app_list_button->GetMirroredBounds().CenterPoint())); |
| @@ -1503,7 +1506,7 @@ TEST_F(ShelfViewTest, ShouldHideTooltipTest) { |
| all_area.Union(button->GetMirroredBounds()); |
| } |
| - all_area.Union(shelf_view_->GetAppListButtonView()->GetMirroredBounds()); |
| + all_area.Union(shelf_view_->GetAppListButton()->GetMirroredBounds()); |
| EXPECT_FALSE(shelf_view_->ShouldHideTooltip(all_area.origin())); |
| EXPECT_FALSE(shelf_view_->ShouldHideTooltip( |
| gfx::Point(all_area.right() - 1, all_area.bottom() - 1))); |
| @@ -1533,7 +1536,7 @@ TEST_F(ShelfViewTest, ShouldHideTooltipWithAppListWindowTest) { |
| } |
| // The tooltip should hide on the app-list button. |
| - views::View* app_list_button = shelf_view_->GetAppListButtonView(); |
| + AppListButton* app_list_button = shelf_view_->GetAppListButton(); |
| EXPECT_TRUE(shelf_view_->ShouldHideTooltip( |
| app_list_button->GetMirroredBounds().CenterPoint())); |
| } |
| @@ -1550,7 +1553,7 @@ TEST_F(ShelfViewTest, ShouldHideTooltipWhenHoveringOnTooltip) { |
| EXPECT_FALSE(tooltip_manager->IsVisible()); |
| // Move the mouse over the button and check that it is visible. |
| - views::View* app_list_button = shelf_view_->GetAppListButtonView(); |
| + AppListButton* app_list_button = shelf_view_->GetAppListButton(); |
| gfx::Rect bounds = app_list_button->GetBoundsInScreen(); |
| generator.MoveMouseTo(bounds.CenterPoint()); |
| // Wait for the timer to go off. |
| @@ -1860,8 +1863,7 @@ TEST_F(ShelfViewTest, CheckOverflowStatusPinOpenedAppToShelf) { |
| // Tests that the AppListButton renders as active in response to touches. |
| TEST_F(ShelfViewTest, AppListButtonTouchFeedback) { |
| - AppListButton* app_list_button = |
| - static_cast<AppListButton*>(shelf_view_->GetAppListButtonView()); |
| + AppListButton* app_list_button = shelf_view_->GetAppListButton(); |
| EXPECT_FALSE(app_list_button->draw_background_as_active()); |
| ui::test::EventGenerator generator(Shell::GetPrimaryRootWindow()); |
| @@ -1878,8 +1880,7 @@ TEST_F(ShelfViewTest, AppListButtonTouchFeedback) { |
| // Tests that a touch that slides out of the bounds of the AppListButton leads |
| // to the end of rendering an active state. |
| TEST_F(ShelfViewTest, AppListButtonTouchFeedbackCancellation) { |
| - AppListButton* app_list_button = |
| - static_cast<AppListButton*>(shelf_view_->GetAppListButtonView()); |
| + AppListButton* app_list_button = shelf_view_->GetAppListButton(); |
| EXPECT_FALSE(app_list_button->draw_background_as_active()); |
| ui::test::EventGenerator generator(Shell::GetPrimaryRootWindow()); |
| @@ -1978,8 +1979,8 @@ class ShelfViewVisibleBoundsTest : public ShelfViewTest, |
| void CheckAppListButtonIsInBounds() { |
| gfx::Rect visible_bounds = shelf_view_->GetVisibleItemsBoundsInScreen(); |
| - gfx::Rect app_list_button_bounds = shelf_view_->GetAppListButtonView()-> |
| - GetBoundsInScreen(); |
| + gfx::Rect app_list_button_bounds = |
| + shelf_view_->GetAppListButton()->GetBoundsInScreen(); |
| EXPECT_TRUE(visible_bounds.Contains(app_list_button_bounds)); |
| } |
| @@ -2102,14 +2103,76 @@ class ListMenuShelfItemDelegate : public TestShelfItemDelegate { |
| DISALLOW_COPY_AND_ASSIGN(ListMenuShelfItemDelegate); |
| }; |
| +// A test implementation for AppListPresenter that does not change visibility |
| +// state immediately to simulate an in-flight animation. Calling |
| +// FinishVisibilityChange() will change the visibility to the requested one, |
| +// simulating end of the animation. Similar to the actual AppListPresenter, this |
| +// class toggles app list visibility based on the actual visibility rather than |
| +// the target visibility (which might be different due to in-flight animation). |
| +class TestAppListPresenter : public app_list::AppListPresenter { |
| + public: |
| + TestAppListPresenter() : is_visible_(false), target_visibility_(false) {} |
| + ~TestAppListPresenter() override {} |
| + |
| + void FinishVisibilityChange() { is_visible_ = target_visibility_; } |
| + |
| + // app_list::AppListPresenter: |
| + void Show(int64_t display_id) override { target_visibility_ = true; } |
| + void Dismiss() override { target_visibility_ = false; } |
| + void ToggleAppList(int64_t display_id) override { |
| + if (is_visible_) |
| + Dismiss(); |
| + else |
| + Show(display_id); |
| + } |
| + bool IsVisible() const override { return is_visible_; } |
| + bool GetTargetVisibility() const override { return target_visibility_; } |
| + |
| + private: |
| + bool is_visible_; |
|
James Cook
2016/06/23 20:08:07
nit: initialize here, not in constructor
mohsen
2016/06/27 22:17:10
Done.
|
| + bool target_visibility_; |
| + |
| + DISALLOW_COPY_AND_ASSIGN(TestAppListPresenter); |
| +}; |
| + |
| +// A test ShellDelegate implementation that returns a TestAppListPresenter as |
| +// the app list presenter. |
| +class TestAppListShellDelegate : public TestShellDelegate { |
| + public: |
| + TestAppListShellDelegate() |
| + : app_list_presenter_(new TestAppListPresenter()) {} |
| + ~TestAppListShellDelegate() override {} |
| + |
| + TestAppListPresenter* app_list_presenter() const { |
| + return app_list_presenter_.get(); |
| + } |
| + |
| + // TestShellDelegate: |
| + app_list::AppListPresenter* GetAppListPresenter() override { |
| + return app_list_presenter(); |
| + } |
| + |
| + private: |
| + std::unique_ptr<TestAppListPresenter> app_list_presenter_; |
| + |
| + DISALLOW_COPY_AND_ASSIGN(TestAppListShellDelegate); |
| +}; |
| + |
| } // namespace |
| class ShelfViewInkDropTest : public ShelfViewTest { |
| public: |
| - ShelfViewInkDropTest() : ink_drop_(nullptr), browser_button_(nullptr) {} |
| + ShelfViewInkDropTest() |
| + : app_list_button_(nullptr), |
| + app_list_button_ink_drop_(nullptr), |
| + browser_button_(nullptr), |
| + browser_button_ink_drop_(nullptr) {} |
| ~ShelfViewInkDropTest() override {} |
| void SetUp() override { |
| + shell_delegate_ = new TestAppListShellDelegate; |
| + ash_test_helper()->set_test_shell_delegate(shell_delegate_); |
| + |
| ShelfViewTest::SetUp(); |
| // TODO(mohsen): Ideally, we would want to set material mode before calling |
| @@ -2117,141 +2180,419 @@ class ShelfViewInkDropTest : public ShelfViewTest { |
| // material mode. Currently, this is not possible as it expects material |
| // mode be UNINITIALIZED. (See https://crbug.com/620093) |
| ash_md_controller_.reset(new ash::test::MaterialDesignControllerTestAPI( |
| - ash::MaterialDesignController::MATERIAL_NORMAL)); |
| + ash::MaterialDesignController::MATERIAL_EXPERIMENTAL)); |
| + } |
| + void TearDown() override { |
| + ash_md_controller_.reset(); |
| + |
| + ShelfViewTest::TearDown(); |
| + } |
| + |
| + protected: |
| + 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)); |
| + views::test::InkDropHostViewTestApi(app_list_button_) |
| + .SetInkDrop(base::WrapUnique(app_list_button_ink_drop_)); |
| + } |
| + |
| + void InitBrowserButtonInkDrop() { |
| browser_button_ = test_api_->GetButton(browser_index_); |
| views::InkDropImpl* ink_drop_impl = new views::InkDropImpl(browser_button_); |
| - ink_drop_ = new InkDropSpy(base::WrapUnique(ink_drop_impl)); |
| + browser_button_ink_drop_ = new InkDropSpy(base::WrapUnique(ink_drop_impl)); |
| views::test::InkDropHostViewTestApi(browser_button_) |
| - .SetInkDrop(base::WrapUnique(ink_drop_)); |
| + .SetInkDrop(base::WrapUnique(browser_button_ink_drop_)); |
| } |
| - void TearDown() override { |
| - ash_md_controller_.reset(); |
| + void ShowAppList() { |
| + shell_delegate_->app_list_presenter()->Show(0); |
| + // Similar to real AppListPresenter, notify button that the app list is |
| + // shown. |
| + app_list_button_->OnAppListShown(); |
| + } |
| - ShelfViewTest::TearDown(); |
| + void DismissAppList() { |
| + shell_delegate_->app_list_presenter()->Dismiss(); |
| + // Similar to real AppListPresenter, notify button that the app list is |
| + // dismissed. |
| + app_list_button_->OnAppListDismissed(); |
| + } |
| + |
| + void FinishAppListVisibilityChange() { |
| + shell_delegate_->app_list_presenter()->FinishVisibilityChange(); |
| } |
| - protected: |
| std::unique_ptr<ash::test::MaterialDesignControllerTestAPI> |
| ash_md_controller_; |
| - InkDropSpy* ink_drop_; |
| + TestAppListShellDelegate* shell_delegate_; // Owned by Shell. |
|
James Cook
2016/06/23 20:08:08
ditto
mohsen
2016/06/27 22:17:10
Done.
|
| + |
| + AppListButton* app_list_button_; |
| + InkDropSpy* app_list_button_ink_drop_; |
| ShelfButton* browser_button_; |
| + InkDropSpy* browser_button_ink_drop_; |
| private: |
| DISALLOW_COPY_AND_ASSIGN(ShelfViewInkDropTest); |
| }; |
| +// Tests that changing visibility of the app list transitions app list button's |
| +// ink drop states correctly. |
| +TEST_F(ShelfViewInkDropTest, AppListButtonWhenVisibilityChanges) { |
| + InitAppListButtonInkDrop(); |
| + |
| + ShowAppList(); |
| + FinishAppListVisibilityChange(); |
| + EXPECT_EQ(views::InkDropState::ACTIVATED, |
| + app_list_button_ink_drop_->GetTargetInkDropState()); |
| + EXPECT_THAT(app_list_button_ink_drop_->GetAndResetRequestedStates(), |
| + ElementsAre(views::InkDropState::ACTIVATED)); |
| + |
| + DismissAppList(); |
| + FinishAppListVisibilityChange(); |
| + EXPECT_EQ(views::InkDropState::HIDDEN, |
| + app_list_button_ink_drop_->GetTargetInkDropState()); |
| + EXPECT_THAT(app_list_button_ink_drop_->GetAndResetRequestedStates(), |
| + ElementsAre(views::InkDropState::DEACTIVATED)); |
| +} |
| + |
| +// Tests that when the app list is hidden, mouse press on the app list button, |
| +// which shows the app list, transitions ink drop states correctly. Also, tests |
| +// that mouse drag and mouse release does not affect the ink drop state. |
| +TEST_F(ShelfViewInkDropTest, AppListButtonMouseEventsWhenHidden) { |
| + InitAppListButtonInkDrop(); |
| + |
| + ui::test::EventGenerator generator(shelf_view_->GetWidget()->GetNativeView()); |
|
James Cook
2016/06/23 20:08:07
would AshTestBase::GetEventGenerator() work here a
mohsen
2016/06/27 22:17:10
Yes, that would work. I just did not notice its ex
|
| + generator.MoveMouseTo(app_list_button_->GetBoundsInScreen().CenterPoint()); |
| + |
| + // Mouse press on the button, which shows the app list, should end up in the |
| + // activated state. |
| + generator.PressLeftButton(); |
| + // Similar to real AppListPresenter, notify button that the app list is shown. |
| + app_list_button_->OnAppListShown(); |
| + FinishAppListVisibilityChange(); |
| + EXPECT_EQ(views::InkDropState::ACTIVATED, |
| + app_list_button_ink_drop_->GetTargetInkDropState()); |
| + EXPECT_THAT(app_list_button_ink_drop_->GetAndResetRequestedStates(), |
| + ElementsAre(views::InkDropState::ACTION_PENDING, |
| + views::InkDropState::ACTIVATED)); |
| + |
| + // Dragging mouse out and back and releasing the button should not change the |
| + // ink drop state. |
| + generator.MoveMouseBy(app_list_button_->width(), 0); |
| + generator.MoveMouseBy(-app_list_button_->width(), 0); |
| + generator.ReleaseLeftButton(); |
| + EXPECT_EQ(views::InkDropState::ACTIVATED, |
| + app_list_button_ink_drop_->GetTargetInkDropState()); |
| + EXPECT_THAT(app_list_button_ink_drop_->GetAndResetRequestedStates(), |
| + IsEmpty()); |
| +} |
| + |
| +// Tests that when the app list is visible, mouse press on the app list button, |
| +// which dismisses the app list, transitions ink drop states correctly. Also, |
| +// tests that mouse drag and mouse release does not affect the ink drop state. |
| +TEST_F(ShelfViewInkDropTest, AppListButtonMouseEventsWhenVisible) { |
| + InitAppListButtonInkDrop(); |
| + |
| + // Show the app list. |
| + ShowAppList(); |
| + FinishAppListVisibilityChange(); |
| + EXPECT_EQ(views::InkDropState::ACTIVATED, |
| + app_list_button_ink_drop_->GetTargetInkDropState()); |
| + EXPECT_THAT(app_list_button_ink_drop_->GetAndResetRequestedStates(), |
| + ElementsAre(views::InkDropState::ACTIVATED)); |
| + |
| + ui::test::EventGenerator generator(shelf_view_->GetWidget()->GetNativeView()); |
| + generator.MoveMouseTo(app_list_button_->GetBoundsInScreen().CenterPoint()); |
| + |
| + // Mouse press on the button, which dismisses the app list, should end up in |
| + // the hidden state. |
| + // Dismiss app list similar to pre-target handler in real AppListPresenter. |
| + DismissAppList(); |
| + generator.PressLeftButton(); |
| + FinishAppListVisibilityChange(); |
| + EXPECT_EQ(views::InkDropState::HIDDEN, |
| + app_list_button_ink_drop_->GetTargetInkDropState()); |
| + EXPECT_THAT(app_list_button_ink_drop_->GetAndResetRequestedStates(), |
| + ElementsAre(views::InkDropState::DEACTIVATED)); |
| + |
| + // Dragging mouse out and back and releasing the button should not change the |
| + // ink drop state. |
| + generator.MoveMouseBy(app_list_button_->width(), 0); |
| + generator.MoveMouseBy(-app_list_button_->width(), 0); |
| + generator.ReleaseLeftButton(); |
| + EXPECT_EQ(views::InkDropState::HIDDEN, |
| + app_list_button_ink_drop_->GetTargetInkDropState()); |
| + EXPECT_THAT(app_list_button_ink_drop_->GetAndResetRequestedStates(), |
| + IsEmpty()); |
| +} |
| + |
| +// Tests that when the app list is hidden, tapping on the app list button |
| +// transitions ink drop states correctly. |
| +TEST_F(ShelfViewInkDropTest, AppListButtonGestureTapWhenHidden) { |
| + InitAppListButtonInkDrop(); |
| + |
| + ui::test::EventGenerator generator(shelf_view_->GetWidget()->GetNativeView()); |
| + generator.MoveMouseTo(app_list_button_->GetBoundsInScreen().CenterPoint()); |
| + |
| + // Touch press on the button should end up in the pending state. |
| + generator.PressTouch(); |
| + EXPECT_EQ(views::InkDropState::ACTION_PENDING, |
| + app_list_button_ink_drop_->GetTargetInkDropState()); |
| + EXPECT_THAT(app_list_button_ink_drop_->GetAndResetRequestedStates(), |
| + ElementsAre(views::InkDropState::ACTION_PENDING)); |
| + |
| + // Touch release on the button, which shows the app list, should end up in the |
| + // activated state. |
| + generator.ReleaseTouch(); |
| + // Similar to real AppListPresenter, notify button that the app list is shown. |
| + app_list_button_->OnAppListShown(); |
| + FinishAppListVisibilityChange(); |
| + EXPECT_EQ(views::InkDropState::ACTIVATED, |
| + app_list_button_ink_drop_->GetTargetInkDropState()); |
| + EXPECT_THAT(app_list_button_ink_drop_->GetAndResetRequestedStates(), |
| + ElementsAre(views::InkDropState::ACTIVATED)); |
| +} |
| + |
| +// Tests that when the app list is visible, tapping on the app list button |
| +// transitions ink drop states correctly. |
| +TEST_F(ShelfViewInkDropTest, AppListButtonGestureTapWhenVisible) { |
| + InitAppListButtonInkDrop(); |
| + |
| + // Show the app list. |
| + ShowAppList(); |
| + FinishAppListVisibilityChange(); |
| + EXPECT_EQ(views::InkDropState::ACTIVATED, |
| + app_list_button_ink_drop_->GetTargetInkDropState()); |
| + EXPECT_THAT(app_list_button_ink_drop_->GetAndResetRequestedStates(), |
| + ElementsAre(views::InkDropState::ACTIVATED)); |
| + |
| + ui::test::EventGenerator generator(shelf_view_->GetWidget()->GetNativeView()); |
| + generator.MoveMouseTo(app_list_button_->GetBoundsInScreen().CenterPoint()); |
| + |
| + // Touch press on the button, which dismisses the app list, should end up in |
| + // the hidden state. |
| + // Dismiss app list similar to pre-target handler in real AppListPresenter. |
| + DismissAppList(); |
| + generator.PressTouch(); |
| + EXPECT_EQ(views::InkDropState::HIDDEN, |
| + app_list_button_ink_drop_->GetTargetInkDropState()); |
| + EXPECT_THAT(app_list_button_ink_drop_->GetAndResetRequestedStates(), |
| + ElementsAre(views::InkDropState::DEACTIVATED)); |
| + |
| + // Touch release on the button should not change the ink drop state. |
| + generator.ReleaseTouch(); |
| + FinishAppListVisibilityChange(); |
| + EXPECT_EQ(views::InkDropState::HIDDEN, |
| + app_list_button_ink_drop_->GetTargetInkDropState()); |
| + EXPECT_THAT(app_list_button_ink_drop_->GetAndResetRequestedStates(), |
| + IsEmpty()); |
| +} |
| + |
| +// Tests that when the app list is hidden, tapping down on the app list button |
| +// and dragging the touch point transitions ink drop states correctly. |
| +TEST_F(ShelfViewInkDropTest, AppListButtonGestureTapDragWhenHidden) { |
| + InitAppListButtonInkDrop(); |
| + |
| + ui::test::EventGenerator generator(shelf_view_->GetWidget()->GetNativeView()); |
| + gfx::Point touch_location = |
| + app_list_button_->GetBoundsInScreen().CenterPoint(); |
| + generator.MoveMouseTo(touch_location); |
| + |
| + // Touch press on the button should end up in the pending state. |
| + generator.PressTouch(); |
| + EXPECT_EQ(views::InkDropState::ACTION_PENDING, |
| + app_list_button_ink_drop_->GetTargetInkDropState()); |
| + EXPECT_THAT(app_list_button_ink_drop_->GetAndResetRequestedStates(), |
| + ElementsAre(views::InkDropState::ACTION_PENDING)); |
| + |
| + // Dragging the touch point should hide the pending ink drop. |
| + touch_location.Offset(app_list_button_->width(), 0); |
| + generator.MoveTouch(touch_location); |
| + EXPECT_EQ(views::InkDropState::HIDDEN, |
| + app_list_button_ink_drop_->GetTargetInkDropState()); |
| + EXPECT_THAT(app_list_button_ink_drop_->GetAndResetRequestedStates(), |
| + ElementsAre(views::InkDropState::HIDDEN)); |
| + |
| + // Touch release should not change the ink drop state. |
| + generator.ReleaseTouch(); |
| + EXPECT_EQ(views::InkDropState::HIDDEN, |
| + app_list_button_ink_drop_->GetTargetInkDropState()); |
| + EXPECT_THAT(app_list_button_ink_drop_->GetAndResetRequestedStates(), |
| + IsEmpty()); |
| +} |
| + |
| +// Tests that when the app list is visible, tapping down on the app list button |
| +// and dragging the touch point transitions ink drop states correctly. |
| +TEST_F(ShelfViewInkDropTest, AppListButtonGestureTapDragWhenVisible) { |
| + InitAppListButtonInkDrop(); |
| + |
| + // Show the app list. |
| + ShowAppList(); |
| + FinishAppListVisibilityChange(); |
| + EXPECT_EQ(views::InkDropState::ACTIVATED, |
| + app_list_button_ink_drop_->GetTargetInkDropState()); |
| + EXPECT_THAT(app_list_button_ink_drop_->GetAndResetRequestedStates(), |
| + ElementsAre(views::InkDropState::ACTIVATED)); |
| + |
| + ui::test::EventGenerator generator(shelf_view_->GetWidget()->GetNativeView()); |
| + gfx::Point touch_location = |
| + app_list_button_->GetBoundsInScreen().CenterPoint(); |
| + generator.MoveMouseTo(touch_location); |
| + |
| + // Touch press on the button, which dismisses the app list, should end up in |
| + // the hidden state. |
| + // Dismiss app list similar to pre-target handler in real AppListPresenter. |
| + DismissAppList(); |
| + generator.PressTouch(); |
| + EXPECT_EQ(views::InkDropState::HIDDEN, |
| + app_list_button_ink_drop_->GetTargetInkDropState()); |
| + EXPECT_THAT(app_list_button_ink_drop_->GetAndResetRequestedStates(), |
| + ElementsAre(views::InkDropState::DEACTIVATED)); |
| + |
| + // Dragging the touch point and releasing should not change the ink drop |
| + // state. |
| + touch_location.Offset(app_list_button_->width(), 0); |
| + generator.MoveTouch(touch_location); |
| + generator.ReleaseTouch(); |
| + FinishAppListVisibilityChange(); |
| + EXPECT_EQ(views::InkDropState::HIDDEN, |
| + app_list_button_ink_drop_->GetTargetInkDropState()); |
| + EXPECT_THAT(app_list_button_ink_drop_->GetAndResetRequestedStates(), |
| + ElementsAre(views::InkDropState::HIDDEN)); |
| +} |
|
James Cook
2016/06/23 20:08:07
Nice test suite. Thorough and well documented.
mohsen
2016/06/27 22:17:10
Thanks :-)
|
| + |
| // Tests that clicking on a shelf item that does not show a menu transitions ink |
| // drop states correctly. |
| -TEST_F(ShelfViewInkDropTest, WithoutMenuPressRelease) { |
| +TEST_F(ShelfViewInkDropTest, ShelfButtonWithoutMenuPressRelease) { |
| + InitBrowserButtonInkDrop(); |
| + |
| views::CustomButton* button = browser_button_; |
| - gfx::Point press_location = button->GetLocalBounds().CenterPoint(); |
| + gfx::Point mouse_location = button->GetLocalBounds().CenterPoint(); |
| - ui::MouseEvent press_event(ui::ET_MOUSE_PRESSED, press_location, |
| - press_location, ui::EventTimeForNow(), |
| + ui::MouseEvent press_event(ui::ET_MOUSE_PRESSED, mouse_location, |
| + mouse_location, ui::EventTimeForNow(), |
| ui::EF_LEFT_MOUSE_BUTTON, 0); |
| button->OnMousePressed(press_event); |
| EXPECT_EQ(views::InkDropState::ACTION_PENDING, |
| - ink_drop_->GetTargetInkDropState()); |
| - EXPECT_THAT(ink_drop_->GetAndResetRequestedStates(), |
| + browser_button_ink_drop_->GetTargetInkDropState()); |
| + EXPECT_THAT(browser_button_ink_drop_->GetAndResetRequestedStates(), |
| ElementsAre(views::InkDropState::ACTION_PENDING)); |
| - ui::MouseEvent release_event(ui::ET_MOUSE_RELEASED, press_location, |
| - press_location, ui::EventTimeForNow(), |
| + ui::MouseEvent release_event(ui::ET_MOUSE_RELEASED, mouse_location, |
| + mouse_location, ui::EventTimeForNow(), |
| ui::EF_LEFT_MOUSE_BUTTON, 0); |
| button->OnMouseReleased(release_event); |
| - EXPECT_EQ(views::InkDropState::HIDDEN, ink_drop_->GetTargetInkDropState()); |
| - EXPECT_THAT(ink_drop_->GetAndResetRequestedStates(), |
| + EXPECT_EQ(views::InkDropState::HIDDEN, |
| + browser_button_ink_drop_->GetTargetInkDropState()); |
| + EXPECT_THAT(browser_button_ink_drop_->GetAndResetRequestedStates(), |
| ElementsAre(views::InkDropState::ACTION_TRIGGERED)); |
| } |
| // Tests that dragging outside of a shelf item transitions ink drop states |
| // correctly. |
| -TEST_F(ShelfViewInkDropTest, WithoutMenuPressDragReleaseOutside) { |
| +TEST_F(ShelfViewInkDropTest, ShelfButtonWithoutMenuPressDragReleaseOutside) { |
| + InitBrowserButtonInkDrop(); |
| + |
| views::CustomButton* button = browser_button_; |
| - gfx::Point press_location = button->GetLocalBounds().CenterPoint(); |
| + gfx::Point mouse_location = button->GetLocalBounds().CenterPoint(); |
| - ui::MouseEvent press_event(ui::ET_MOUSE_PRESSED, press_location, |
| - press_location, ui::EventTimeForNow(), |
| + ui::MouseEvent press_event(ui::ET_MOUSE_PRESSED, mouse_location, |
| + mouse_location, ui::EventTimeForNow(), |
| ui::EF_LEFT_MOUSE_BUTTON, 0); |
| button->OnMousePressed(press_event); |
| EXPECT_EQ(views::InkDropState::ACTION_PENDING, |
| - ink_drop_->GetTargetInkDropState()); |
| - EXPECT_THAT(ink_drop_->GetAndResetRequestedStates(), |
| + browser_button_ink_drop_->GetTargetInkDropState()); |
| + EXPECT_THAT(browser_button_ink_drop_->GetAndResetRequestedStates(), |
| ElementsAre(views::InkDropState::ACTION_PENDING)); |
| - press_location.Offset(test_api_->GetMinimumDragDistance() / 2, 0); |
| - ui::MouseEvent drag_event_small(ui::ET_MOUSE_DRAGGED, press_location, |
| - press_location, ui::EventTimeForNow(), |
| + mouse_location.Offset(test_api_->GetMinimumDragDistance() / 2, 0); |
| + ui::MouseEvent drag_event_small(ui::ET_MOUSE_DRAGGED, mouse_location, |
| + mouse_location, ui::EventTimeForNow(), |
| ui::EF_LEFT_MOUSE_BUTTON, 0); |
| button->OnMouseDragged(drag_event_small); |
| EXPECT_EQ(views::InkDropState::ACTION_PENDING, |
| - ink_drop_->GetTargetInkDropState()); |
| - EXPECT_THAT(ink_drop_->GetAndResetRequestedStates(), IsEmpty()); |
| + browser_button_ink_drop_->GetTargetInkDropState()); |
| + EXPECT_THAT(browser_button_ink_drop_->GetAndResetRequestedStates(), |
| + IsEmpty()); |
| - press_location.Offset(test_api_->GetMinimumDragDistance(), 0); |
| - ui::MouseEvent drag_event_large(ui::ET_MOUSE_DRAGGED, press_location, |
| - press_location, ui::EventTimeForNow(), |
| + mouse_location.Offset(test_api_->GetMinimumDragDistance(), 0); |
| + ui::MouseEvent drag_event_large(ui::ET_MOUSE_DRAGGED, mouse_location, |
| + mouse_location, ui::EventTimeForNow(), |
| ui::EF_LEFT_MOUSE_BUTTON, 0); |
| button->OnMouseDragged(drag_event_large); |
| - EXPECT_EQ(views::InkDropState::HIDDEN, ink_drop_->GetTargetInkDropState()); |
| - EXPECT_THAT(ink_drop_->GetAndResetRequestedStates(), |
| + EXPECT_EQ(views::InkDropState::HIDDEN, |
| + browser_button_ink_drop_->GetTargetInkDropState()); |
| + EXPECT_THAT(browser_button_ink_drop_->GetAndResetRequestedStates(), |
| ElementsAre(views::InkDropState::HIDDEN)); |
| - ui::MouseEvent release_event(ui::ET_MOUSE_RELEASED, press_location, |
| - press_location, ui::EventTimeForNow(), |
| + ui::MouseEvent release_event(ui::ET_MOUSE_RELEASED, mouse_location, |
| + mouse_location, ui::EventTimeForNow(), |
| ui::EF_LEFT_MOUSE_BUTTON, 0); |
| button->OnMouseReleased(release_event); |
| - EXPECT_EQ(views::InkDropState::HIDDEN, ink_drop_->GetTargetInkDropState()); |
| - EXPECT_THAT(ink_drop_->GetAndResetRequestedStates(), IsEmpty()); |
| + EXPECT_EQ(views::InkDropState::HIDDEN, |
| + browser_button_ink_drop_->GetTargetInkDropState()); |
| + EXPECT_THAT(browser_button_ink_drop_->GetAndResetRequestedStates(), |
| + IsEmpty()); |
| } |
| // Tests that dragging outside of a shelf item and back transitions ink drop |
| // states correctly. |
| -TEST_F(ShelfViewInkDropTest, WithoutMenuPressDragReleaseInside) { |
| +TEST_F(ShelfViewInkDropTest, ShelfButtonWithoutMenuPressDragReleaseInside) { |
| + InitBrowserButtonInkDrop(); |
| + |
| views::CustomButton* button = browser_button_; |
| - gfx::Point press_location = button->GetLocalBounds().CenterPoint(); |
| + gfx::Point mouse_location = button->GetLocalBounds().CenterPoint(); |
| - ui::MouseEvent press_event(ui::ET_MOUSE_PRESSED, press_location, |
| - press_location, ui::EventTimeForNow(), |
| + ui::MouseEvent press_event(ui::ET_MOUSE_PRESSED, mouse_location, |
| + mouse_location, ui::EventTimeForNow(), |
| ui::EF_LEFT_MOUSE_BUTTON, 0); |
| button->OnMousePressed(press_event); |
| EXPECT_EQ(views::InkDropState::ACTION_PENDING, |
| - ink_drop_->GetTargetInkDropState()); |
| - EXPECT_THAT(ink_drop_->GetAndResetRequestedStates(), |
| + browser_button_ink_drop_->GetTargetInkDropState()); |
| + EXPECT_THAT(browser_button_ink_drop_->GetAndResetRequestedStates(), |
| ElementsAre(views::InkDropState::ACTION_PENDING)); |
| - press_location.Offset(test_api_->GetMinimumDragDistance() * 2, 0); |
| - ui::MouseEvent drag_event_outside(ui::ET_MOUSE_DRAGGED, press_location, |
| - press_location, ui::EventTimeForNow(), |
| + mouse_location.Offset(test_api_->GetMinimumDragDistance() * 2, 0); |
| + ui::MouseEvent drag_event_outside(ui::ET_MOUSE_DRAGGED, mouse_location, |
| + mouse_location, ui::EventTimeForNow(), |
| ui::EF_LEFT_MOUSE_BUTTON, 0); |
| button->OnMouseDragged(drag_event_outside); |
| - EXPECT_EQ(views::InkDropState::HIDDEN, ink_drop_->GetTargetInkDropState()); |
| - EXPECT_THAT(ink_drop_->GetAndResetRequestedStates(), |
| + EXPECT_EQ(views::InkDropState::HIDDEN, |
| + browser_button_ink_drop_->GetTargetInkDropState()); |
| + EXPECT_THAT(browser_button_ink_drop_->GetAndResetRequestedStates(), |
| ElementsAre(views::InkDropState::HIDDEN)); |
| - press_location.Offset(-test_api_->GetMinimumDragDistance() * 2, 0); |
| - ui::MouseEvent drag_event_inside(ui::ET_MOUSE_DRAGGED, press_location, |
| - press_location, ui::EventTimeForNow(), |
| + mouse_location.Offset(-test_api_->GetMinimumDragDistance() * 2, 0); |
| + ui::MouseEvent drag_event_inside(ui::ET_MOUSE_DRAGGED, mouse_location, |
| + mouse_location, ui::EventTimeForNow(), |
| ui::EF_LEFT_MOUSE_BUTTON, 0); |
| button->OnMouseDragged(drag_event_inside); |
| - EXPECT_EQ(views::InkDropState::HIDDEN, ink_drop_->GetTargetInkDropState()); |
| - EXPECT_THAT(ink_drop_->GetAndResetRequestedStates(), IsEmpty()); |
| + EXPECT_EQ(views::InkDropState::HIDDEN, |
| + browser_button_ink_drop_->GetTargetInkDropState()); |
| + EXPECT_THAT(browser_button_ink_drop_->GetAndResetRequestedStates(), |
| + IsEmpty()); |
| - ui::MouseEvent release_event(ui::ET_MOUSE_RELEASED, press_location, |
| - press_location, ui::EventTimeForNow(), |
| + ui::MouseEvent release_event(ui::ET_MOUSE_RELEASED, mouse_location, |
| + mouse_location, ui::EventTimeForNow(), |
| ui::EF_LEFT_MOUSE_BUTTON, 0); |
| button->OnMouseReleased(release_event); |
| - EXPECT_EQ(views::InkDropState::HIDDEN, ink_drop_->GetTargetInkDropState()); |
| - EXPECT_THAT(ink_drop_->GetAndResetRequestedStates(), IsEmpty()); |
| + EXPECT_EQ(views::InkDropState::HIDDEN, |
| + browser_button_ink_drop_->GetTargetInkDropState()); |
| + EXPECT_THAT(browser_button_ink_drop_->GetAndResetRequestedStates(), |
| + IsEmpty()); |
| } |
| // Tests that clicking on a shelf item that shows an app list menu transitions |
| // ink drop state correctly. |
| -TEST_F(ShelfViewInkDropTest, WithMenuPressRelease) { |
| +TEST_F(ShelfViewInkDropTest, ShelfButtonWithMenuPressRelease) { |
| + InitBrowserButtonInkDrop(); |
| + |
| // Set a delegate for the shelf item that returns an app list menu. |
| ShelfID browser_shelf_id = model_->items()[browser_index_].id; |
| ListMenuShelfItemDelegate* list_menu_delegate = new ListMenuShelfItemDelegate; |
| @@ -2259,15 +2600,15 @@ TEST_F(ShelfViewInkDropTest, WithMenuPressRelease) { |
| base::WrapUnique(list_menu_delegate)); |
| views::CustomButton* button = browser_button_; |
| - gfx::Point press_location = button->GetLocalBounds().CenterPoint(); |
| + gfx::Point mouse_location = button->GetLocalBounds().CenterPoint(); |
| - ui::MouseEvent press_event(ui::ET_MOUSE_PRESSED, press_location, |
| - press_location, ui::EventTimeForNow(), |
| + ui::MouseEvent press_event(ui::ET_MOUSE_PRESSED, mouse_location, |
| + mouse_location, ui::EventTimeForNow(), |
| ui::EF_LEFT_MOUSE_BUTTON, 0); |
| button->OnMousePressed(press_event); |
| EXPECT_EQ(views::InkDropState::ACTION_PENDING, |
| - ink_drop_->GetTargetInkDropState()); |
| - EXPECT_THAT(ink_drop_->GetAndResetRequestedStates(), |
| + browser_button_ink_drop_->GetTargetInkDropState()); |
| + EXPECT_THAT(browser_button_ink_drop_->GetAndResetRequestedStates(), |
| ElementsAre(views::InkDropState::ACTION_PENDING)); |
| base::ThreadTaskRunnerHandle::Get()->PostTask( |
| @@ -2276,12 +2617,13 @@ TEST_F(ShelfViewInkDropTest, WithMenuPressRelease) { |
| // Mouse release will spawn a menu which will then get closed by the above |
| // posted task. |
| - ui::MouseEvent release_event(ui::ET_MOUSE_RELEASED, press_location, |
| - press_location, ui::EventTimeForNow(), |
| + ui::MouseEvent release_event(ui::ET_MOUSE_RELEASED, mouse_location, |
| + mouse_location, ui::EventTimeForNow(), |
| ui::EF_LEFT_MOUSE_BUTTON, 0); |
| button->OnMouseReleased(release_event); |
| - EXPECT_EQ(views::InkDropState::HIDDEN, ink_drop_->GetTargetInkDropState()); |
| - EXPECT_THAT(ink_drop_->GetAndResetRequestedStates(), |
| + EXPECT_EQ(views::InkDropState::HIDDEN, |
| + browser_button_ink_drop_->GetTargetInkDropState()); |
| + EXPECT_THAT(browser_button_ink_drop_->GetAndResetRequestedStates(), |
| ElementsAre(views::InkDropState::ACTIVATED, |
| views::InkDropState::DEACTIVATED)); |
| } |