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

Unified Diff: ash/shelf/shelf_tooltip_manager_unittest.cc

Issue 1816753002: Enable mash shelf tooltips. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Revise tooltip event testing. Created 4 years, 9 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_tooltip_manager_unittest.cc
diff --git a/ash/shelf/shelf_tooltip_manager_unittest.cc b/ash/shelf/shelf_tooltip_manager_unittest.cc
index 6ebb063ec48221ad0406f0cd7ea304eb0c3bfee0..3f2b2e884155399b0ed76938c1c737b54a04d9b1 100644
--- a/ash/shelf/shelf_tooltip_manager_unittest.cc
+++ b/ash/shelf/shelf_tooltip_manager_unittest.cc
@@ -4,35 +4,19 @@
#include "ash/shelf/shelf_tooltip_manager.h"
-#include "ash/root_window_controller.h"
#include "ash/shelf/shelf_layout_manager.h"
#include "ash/shelf/shelf_widget.h"
#include "ash/shell.h"
#include "ash/shell_window_ids.h"
#include "ash/test/ash_test_base.h"
#include "ash/test/shelf_test_api.h"
-#include "ash/wm/window_util.h"
-#include "base/strings/string16.h"
-#include "base/time/time.h"
-#include "ui/aura/window_event_dispatcher.h"
-#include "ui/events/event.h"
+#include "ash/test/shelf_view_test_api.h"
#include "ui/events/event_constants.h"
-#include "ui/events/event_handler.h"
-#include "ui/events/event_utils.h"
#include "ui/events/keycodes/keyboard_codes.h"
-#include "ui/events/test/events_test_utils.h"
+#include "ui/events/test/event_generator.h"
+#include "ui/views/bubble/bubble_delegate.h"
#include "ui/views/widget/widget.h"
-namespace {
-
-void SetEventTarget(ui::EventTarget* target,
- ui::Event* event) {
- ui::Event::DispatcherApi dispatch_helper(event);
- dispatch_helper.set_target(target);
-}
-
-}
-
namespace ash {
namespace test {
@@ -43,52 +27,38 @@ class ShelfTooltipManagerTest : public AshTestBase {
void SetUp() override {
AshTestBase::SetUp();
- RootWindowController* controller = Shell::GetPrimaryRootWindowController();
- tooltip_manager_.reset(new ShelfTooltipManager(
- controller->GetShelfLayoutManager(),
- ShelfTestAPI(controller->shelf()->shelf()).shelf_view()));
- }
-
- void TearDown() override {
- tooltip_manager_.reset();
- AshTestBase::TearDown();
+ shelf_ = Shelf::ForPrimaryDisplay();
+ ShelfView* shelf_view = test::ShelfTestAPI(shelf_).shelf_view();
+ tooltip_manager_ = test::ShelfViewTestAPI(shelf_view).tooltip_manager();
}
void ShowDelayed() {
CreateWidget();
- tooltip_manager_->ShowDelayed(dummy_anchor_.get(), base::string16());
+ tooltip_manager_->ShowTooltipWithDelay(dummy_anchor_.get());
}
void ShowImmediately() {
CreateWidget();
- tooltip_manager_->ShowImmediately(dummy_anchor_.get(), base::string16());
- }
-
- bool TooltipIsVisible() {
- return tooltip_manager_->IsVisible();
+ tooltip_manager_->ShowTooltip(dummy_anchor_.get());
}
- bool IsTimerRunning() {
- return tooltip_manager_->timer_.get() != NULL;
- }
-
- ui::EventHandler* GetEventHandler() {
- return tooltip_manager_.get();
- }
+ bool TooltipIsVisible() { return tooltip_manager_->IsVisible(); }
+ bool IsTimerRunning() { return tooltip_manager_->timer_.IsRunning(); }
- views::Widget* GetTooltipWidget() {
- return tooltip_manager_->widget_;
+ aura::Window* GetTooltipWindow() {
+ return tooltip_manager_->bubble_->GetWidget()->GetNativeWindow();
}
protected:
scoped_ptr<views::Widget> widget_;
scoped_ptr<views::View> dummy_anchor_;
- scoped_ptr<ShelfTooltipManager> tooltip_manager_;
+
+ Shelf* shelf_;
+ ShelfTooltipManager* tooltip_manager_;
private:
void CreateWidget() {
dummy_anchor_.reset(new views::View);
-
widget_.reset(new views::Widget);
views::Widget::InitParams params(
views::Widget::InitParams::TYPE_WINDOW_FRAMELESS);
@@ -96,7 +66,6 @@ class ShelfTooltipManagerTest : public AshTestBase {
params.ownership = views::Widget::InitParams::WIDGET_OWNS_NATIVE_WIDGET;
params.parent = Shell::GetContainer(Shell::GetPrimaryRootWindow(),
ash::kShellWindowId_ShelfContainer);
-
widget_->Init(params);
widget_->SetContentsView(dummy_anchor_.get());
}
@@ -129,10 +98,7 @@ TEST_F(ShelfTooltipManagerTest, HideWhenShelfIsHidden) {
widget->Show();
// Once the shelf is hidden, the tooltip should be invisible.
- ASSERT_EQ(
- SHELF_HIDDEN,
- Shell::GetPrimaryRootWindowController()->
- GetShelfLayoutManager()->visibility_state());
+ ASSERT_EQ(SHELF_HIDDEN, shelf_->shelf_layout_manager()->visibility_state());
EXPECT_FALSE(TooltipIsVisible());
// Do not show the view if the shelf is hidden.
@@ -156,11 +122,10 @@ TEST_F(ShelfTooltipManagerTest, HideWhenShelfIsAutoHide) {
ShowImmediately();
ASSERT_TRUE(TooltipIsVisible());
- ShelfLayoutManager* shelf =
- Shell::GetPrimaryRootWindowController()->GetShelfLayoutManager();
- shelf->SetAutoHideBehavior(SHELF_AUTO_HIDE_BEHAVIOR_ALWAYS);
- shelf->UpdateAutoHideState();
- ASSERT_EQ(SHELF_AUTO_HIDE_HIDDEN, shelf->auto_hide_state());
+ ShelfLayoutManager* shelf_layout_manager = shelf_->shelf_layout_manager();
+ shelf_layout_manager->SetAutoHideBehavior(SHELF_AUTO_HIDE_BEHAVIOR_ALWAYS);
+ shelf_layout_manager->UpdateAutoHideState();
+ ASSERT_EQ(SHELF_AUTO_HIDE_HIDDEN, shelf_layout_manager->auto_hide_state());
// Tooltip visibility change for auto hide may take time.
EXPECT_TRUE(TooltipIsVisible());
@@ -176,113 +141,67 @@ TEST_F(ShelfTooltipManagerTest, HideWhenShelfIsAutoHide) {
EXPECT_FALSE(IsTimerRunning());
}
-TEST_F(ShelfTooltipManagerTest, ShouldHideForEvents) {
+TEST_F(ShelfTooltipManagerTest, HideForEvents) {
+ ui::test::EventGenerator generator(ash::Shell::GetPrimaryRootWindow());
+ gfx::Rect shelf_bounds = shelf_->shelf_widget()->GetNativeWindow()->bounds();
+
+ // Should hide if the mouse exits the shelf area.
ShowImmediately();
ASSERT_TRUE(TooltipIsVisible());
-
- aura::Window* root_window = Shell::GetInstance()->GetPrimaryRootWindow();
- ui::EventHandler* event_handler = GetEventHandler();
-
- // Should not hide for key events.
- ui::KeyEvent key_event(ui::ET_KEY_PRESSED, ui::VKEY_A, ui::EF_NONE);
- SetEventTarget(root_window, &key_event);
- event_handler->OnKeyEvent(&key_event);
- EXPECT_FALSE(key_event.handled());
- EXPECT_TRUE(TooltipIsVisible());
-
- // Should hide for touch events.
- ui::TouchEvent touch_event(
- ui::ET_TOUCH_PRESSED, gfx::Point(), 0, base::TimeDelta());
- SetEventTarget(root_window, &touch_event);
- event_handler->OnTouchEvent(&touch_event);
- EXPECT_FALSE(touch_event.handled());
+ generator.MoveMouseTo(shelf_bounds.CenterPoint());
+ generator.SendMouseExit();
EXPECT_FALSE(TooltipIsVisible());
- // Shouldn't hide if the touch happens on the tooltip.
+ // Should hide if the mouse is pressed in the shelf area.
ShowImmediately();
- views::Widget* tooltip_widget = GetTooltipWidget();
- SetEventTarget(tooltip_widget->GetNativeWindow(), &touch_event);
- event_handler->OnTouchEvent(&touch_event);
- EXPECT_FALSE(touch_event.handled());
- EXPECT_TRUE(TooltipIsVisible());
-
- // Should hide for gesture events.
- ui::GestureEvent gesture_event(
- 0,
- 0,
- ui::EF_NONE,
- base::TimeDelta::FromMilliseconds(base::Time::Now().ToDoubleT() * 1000),
- ui::GestureEventDetails(ui::ET_GESTURE_BEGIN));
- SetEventTarget(tooltip_widget->GetNativeWindow(), &gesture_event);
- event_handler->OnGestureEvent(&gesture_event);
- EXPECT_FALSE(gesture_event.handled());
- RunAllPendingInMessageLoop();
+ ASSERT_TRUE(TooltipIsVisible());
+ generator.MoveMouseTo(shelf_bounds.CenterPoint());
+ generator.PressLeftButton();
EXPECT_FALSE(TooltipIsVisible());
-}
-TEST_F(ShelfTooltipManagerTest, HideForMouseMoveEvent) {
+ // Should hide for touch events in the shelf.
ShowImmediately();
ASSERT_TRUE(TooltipIsVisible());
+ generator.set_current_location(shelf_bounds.CenterPoint());
+ generator.PressTouch();
+ EXPECT_FALSE(TooltipIsVisible());
- aura::Window* root_window = Shell::GetInstance()->GetPrimaryRootWindow();
- ui::EventHandler* event_handler = GetEventHandler();
-
- gfx::Rect tooltip_rect = GetTooltipWidget()->GetNativeWindow()->bounds();
- ASSERT_FALSE(tooltip_rect.IsEmpty());
-
- // Shouldn't hide if the mouse is in the tooltip.
- ui::MouseEvent mouse_event(ui::ET_MOUSE_MOVED, tooltip_rect.CenterPoint(),
- tooltip_rect.CenterPoint(), ui::EventTimeForNow(),
- ui::EF_NONE, ui::EF_NONE);
- ui::LocatedEventTestApi test_api(&mouse_event);
-
- SetEventTarget(root_window, &mouse_event);
- event_handler->OnMouseEvent(&mouse_event);
- EXPECT_FALSE(mouse_event.handled());
- EXPECT_TRUE(TooltipIsVisible());
-
- // Should hide if the mouse is out of the tooltip.
- test_api.set_location(tooltip_rect.origin() + gfx::Vector2d(-1, -1));
- event_handler->OnMouseEvent(&mouse_event);
- EXPECT_FALSE(mouse_event.handled());
- RunAllPendingInMessageLoop();
+ // Should hide for gesture events in the shelf.
+ ShowImmediately();
+ ASSERT_TRUE(TooltipIsVisible());
+ generator.GestureTapDownAndUp(shelf_bounds.CenterPoint());
EXPECT_FALSE(TooltipIsVisible());
}
-// Checks that tooltip is hidden when mouse is pressed in anywhere.
-TEST_F(ShelfTooltipManagerTest, HideForMouseClickEvent) {
+// TODO(msw): Hiding for touch and gesture events outside the shelf is broken.
+TEST_F(ShelfTooltipManagerTest, HideForEventsBroken) {
+ ui::test::EventGenerator generator(ash::Shell::GetPrimaryRootWindow());
+
ShowImmediately();
ASSERT_TRUE(TooltipIsVisible());
- aura::Window* root_window = Shell::GetInstance()->GetPrimaryRootWindow();
- ui::EventHandler* event_handler = GetEventHandler();
-
- gfx::Rect tooltip_rect = GetTooltipWidget()->GetNativeWindow()->bounds();
- ASSERT_FALSE(tooltip_rect.IsEmpty());
+ generator.set_current_location(gfx::Point());
+ generator.PressTouch();
+ EXPECT_TRUE(TooltipIsVisible());
- // Should hide if the mouse is pressed in the tooltip.
- ui::MouseEvent mouse_event(ui::ET_MOUSE_PRESSED, tooltip_rect.CenterPoint(),
- tooltip_rect.CenterPoint(), ui::EventTimeForNow(),
- ui::EF_NONE, ui::EF_NONE);
+ generator.GestureTapDownAndUp(gfx::Point());
+ EXPECT_TRUE(TooltipIsVisible());
+}
- SetEventTarget(root_window, &mouse_event);
- event_handler->OnMouseEvent(&mouse_event);
- EXPECT_FALSE(mouse_event.handled());
- RunAllPendingInMessageLoop();
- EXPECT_FALSE(TooltipIsVisible());
+TEST_F(ShelfTooltipManagerTest, DoNotHideForEvents) {
+ ui::test::EventGenerator generator(ash::Shell::GetPrimaryRootWindow());
- // Should hide if the mouse is pressed outside of the tooltip.
ShowImmediately();
ASSERT_TRUE(TooltipIsVisible());
- ui::LocatedEventTestApi test_api(&mouse_event);
- test_api.set_location(tooltip_rect.origin() + gfx::Vector2d(-1, -1));
+ // Should not hide for key events.
+ generator.PressKey(ui::VKEY_A, ui::EF_NONE);
+ EXPECT_TRUE(TooltipIsVisible());
- SetEventTarget(root_window, &mouse_event);
- event_handler->OnMouseEvent(&mouse_event);
- EXPECT_FALSE(mouse_event.handled());
- RunAllPendingInMessageLoop();
- EXPECT_FALSE(TooltipIsVisible());
+ // Should not hide for touch events on the tooltip.
+ generator.set_current_location(GetTooltipWindow()->bounds().CenterPoint());
+ generator.PressTouch();
+ EXPECT_TRUE(TooltipIsVisible());
}
} // namespace test

Powered by Google App Engine
This is Rietveld 408576698