blob: c22775a7cd1df11d797eb0600ba48deaa036dbe1 [file] [log] [blame]
// Copyright 2013 The Chromium Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
#include "base/message_loop/message_loop.h"
#include "base/strings/utf_string_conversions.h"
#include "chrome/browser/ui/views/toolbar/toolbar_button.h"
#include "chrome/test/base/interactive_test_utils.h"
#include "chrome/test/base/ui_test_utils.h"
#include "chrome/test/base/view_event_test_base.h"
#include "ui/base/models/simple_menu_model.h"
#include "ui/base/test/ui_controls.h"
class ToolbarButtonDragTest : public ViewEventTestBase,
ui::SimpleMenuModel::Delegate {
public:
ToolbarButtonDragTest()
: button_(NULL),
menu_shown_(false),
menu_closed_(false) {
}
~ToolbarButtonDragTest() override {
}
// ViewEventTestBase implementation.
void SetUp() override {
button_ = new ToolbarButton(NULL, new ui::SimpleMenuModel(this));
ViewEventTestBase::SetUp();
}
void TearDown() override {
ViewEventTestBase::TearDown();
}
views::View* CreateContentsView() override {
return button_;
}
gfx::Size GetPreferredSize() const override {
return button_->GetPreferredSize();
}
// ui::SimpleMenuModel::Delegate implementation.
bool IsCommandIdChecked(int id) const override {
return false;
}
bool IsCommandIdEnabled(int id) const override {
return true;
}
bool GetAcceleratorForCommandId(
int id,
ui::Accelerator* accelerator) override {
return false;
}
void ExecuteCommand(int id, int event_flags) override {
}
void MenuWillShow(ui::SimpleMenuModel* /*source*/) override {
menu_shown_ = true;
}
void MenuClosed(ui::SimpleMenuModel* /*source*/) override {
menu_closed_ = true;
}
// ViewEventTestBase implementation.
void DoTestOnMessageLoop() override {
// Click on the ToolbarButton.
ui_test_utils::MoveMouseToCenterAndPress(
button_,
ui_controls::LEFT,
ui_controls::DOWN,
CreateEventTask(this, &ToolbarButtonDragTest::Step1));
}
void Step1() {
// Drag to invoke the menu.
gfx::Point view_center;
views::View::ConvertPointToScreen(button_, &view_center);
// The 50 is a bit arbitrary. We just need a value greater than the drag
// threshold.
ui_controls::SendMouseMoveNotifyWhenDone(
view_center.x(), view_center.y() + 50,
CreateEventTask(this, &ToolbarButtonDragTest::Step2));
}
void Step2() {
ASSERT_TRUE(menu_shown_);
// Release.
ui_controls::SendMouseEventsNotifyWhenDone(
ui_controls::LEFT,
ui_controls::UP,
CreateEventTask(this, &ToolbarButtonDragTest::Step3));
}
void Step3() {
// Click mouse to dismiss menu. The views menu does not dismiss the
// menu on click-drag-release unless an item is selected.
ui_test_utils::MoveMouseToCenterAndPress(
button_,
ui_controls::LEFT,
ui_controls::DOWN | ui_controls::UP,
CreateEventTask(this, &ToolbarButtonDragTest::Step4));
}
void Step4() {
// One more hop is required because ui::SimpleMenuModel calls
// ui::SimpleMenuModel::Delegate::MenuClosed() via a posted
// task.
base::MessageLoopForUI::current()->PostTask(
FROM_HERE, CreateEventTask(this, &ToolbarButtonDragTest::Step5));
}
void Step5() {
ASSERT_TRUE(menu_closed_);
Done();
}
private:
ToolbarButton* button_;
bool menu_shown_;
bool menu_closed_;
};
// Broken since landed. crbug.com/325055
VIEW_TEST(ToolbarButtonDragTest, DISABLED_DragActivation)