| Index: ui/views/controls/button/menu_button_unittest.cc
|
| diff --git a/ui/views/controls/button/menu_button_unittest.cc b/ui/views/controls/button/menu_button_unittest.cc
|
| index a41ac38428521a8e522d1bbeb00ce36d520bd17e..9cff544cab99b6594dc57b4ef955bb2d4116a15b 100644
|
| --- a/ui/views/controls/button/menu_button_unittest.cc
|
| +++ b/ui/views/controls/button/menu_button_unittest.cc
|
| @@ -4,6 +4,7 @@
|
|
|
| #include "ui/views/controls/button/menu_button.h"
|
|
|
| +#include "base/memory/scoped_ptr.h"
|
| #include "base/strings/utf_string_conversions.h"
|
| #include "ui/events/test/event_generator.h"
|
| #include "ui/views/controls/button/menu_button_listener.h"
|
| @@ -29,17 +30,15 @@ class MenuButtonTest : public ViewsTestBase {
|
| MenuButton* button() { return button_; }
|
|
|
| protected:
|
| + // Creates a MenuButton with no button listener.
|
| + void CreateMenuButtonWithNoListener() {
|
| + CreateMenuButton(NULL, NULL);
|
| + }
|
| +
|
| // Creates a MenuButton with a ButtonListener. In this case, the MenuButton
|
| // acts like a regular button.
|
| void CreateMenuButtonWithButtonListener(ButtonListener* button_listener) {
|
| - CreateWidget();
|
| -
|
| - const base::string16 label(ASCIIToUTF16("button"));
|
| - button_ = new MenuButton(button_listener, label, NULL, false);
|
| - button_->SetBoundsRect(gfx::Rect(0, 0, 200, 20));
|
| - widget_->SetContentsView(button_);
|
| -
|
| - widget_->Show();
|
| + CreateMenuButton(button_listener, NULL);
|
| }
|
|
|
| // Creates a MenuButton with a MenuButtonListener. In this case, when the
|
| @@ -47,17 +46,23 @@ class MenuButtonTest : public ViewsTestBase {
|
| // drop-down menu.
|
| void CreateMenuButtonWithMenuButtonListener(
|
| MenuButtonListener* menu_button_listener) {
|
| + CreateMenuButton(NULL, menu_button_listener);
|
| + }
|
| +
|
| + private:
|
| + void CreateMenuButton(ButtonListener* button_listener,
|
| + MenuButtonListener* menu_button_listener) {
|
| CreateWidget();
|
|
|
| const base::string16 label(ASCIIToUTF16("button"));
|
| - button_ = new MenuButton(NULL, label, menu_button_listener, false);
|
| + button_ =
|
| + new MenuButton(button_listener, label, menu_button_listener, false);
|
| button_->SetBoundsRect(gfx::Rect(0, 0, 200, 20));
|
| widget_->SetContentsView(button_);
|
|
|
| widget_->Show();
|
| }
|
|
|
| - private:
|
| void CreateWidget() {
|
| DCHECK(!widget_);
|
|
|
| @@ -189,4 +194,40 @@ TEST_F(MenuButtonTest, ActivateDropDownOnGestureTap) {
|
| EXPECT_EQ(Button::STATE_PRESSED, menu_button_listener->last_source_state());
|
| }
|
|
|
| +// Test that the MenuButton stays pressed while there are any PressedLocks.
|
| +TEST_F(MenuButtonTest, MenuButtonPressedLock) {
|
| + CreateMenuButtonWithNoListener();
|
| +
|
| + // Move the mouse over the button; the button should be in a hovered state.
|
| + ui::test::EventGenerator generator(GetContext(), widget()->GetNativeWindow());
|
| + generator.MoveMouseTo(gfx::Point(10, 10));
|
| + EXPECT_EQ(Button::STATE_HOVERED, button()->state());
|
| +
|
| + // Introduce a PressedLock, which should make the button pressed.
|
| + scoped_ptr<MenuButton::PressedLock> pressed_lock1(
|
| + new MenuButton::PressedLock(button()));
|
| + EXPECT_EQ(Button::STATE_PRESSED, button()->state());
|
| +
|
| + // Even if we move the mouse outside of the button, it should remain pressed.
|
| + generator.MoveMouseTo(gfx::Point(300, 10));
|
| + EXPECT_EQ(Button::STATE_PRESSED, button()->state());
|
| +
|
| + // Creating a new lock should obviously keep the button pressed.
|
| + scoped_ptr<MenuButton::PressedLock> pressed_lock2(
|
| + new MenuButton::PressedLock(button()));
|
| + EXPECT_EQ(Button::STATE_PRESSED, button()->state());
|
| +
|
| + // The button should remain pressed while any locks are active.
|
| + pressed_lock1.reset();
|
| + EXPECT_EQ(Button::STATE_PRESSED, button()->state());
|
| +
|
| + // Reseting the final lock should return the button's state to normal...
|
| + pressed_lock2.reset();
|
| + EXPECT_EQ(Button::STATE_NORMAL, button()->state());
|
| +
|
| + // ...And it should respond to mouse movement again.
|
| + generator.MoveMouseTo(gfx::Point(10, 10));
|
| + EXPECT_EQ(Button::STATE_HOVERED, button()->state());
|
| +}
|
| +
|
| } // namespace views
|
|
|