blob: 85497daaa24c6d43cf77a9136206d12da8c86df1 [file] [log] [blame]
// Copyright 2023 The Chromium Authors
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
#include "ui/views/controls/button/menu_button_controller.h"
#include "base/functional/bind.h"
#include "ui/views/controls/button/button.h"
#include "ui/views/test/views_test_base.h"
namespace views {
class TestButton : public Button {
public:
TestButton() : Button(PressedCallback()) {
auto menu_button_controller = std::make_unique<MenuButtonController>(
this,
base::BindRepeating([](bool* pressed) { *pressed = true; }, &pressed_),
std::make_unique<views::Button::DefaultButtonControllerDelegate>(this));
SetButtonController(std::move(menu_button_controller));
}
bool pressed() const { return pressed_; }
private:
bool pressed_ = false;
};
class MenuButtonControllerTest : public ViewsTestBase {
public:
MenuButtonControllerTest() = default;
MenuButtonControllerTest(const MenuButtonControllerTest&) = delete;
MenuButtonControllerTest& operator=(const MenuButtonControllerTest&) = delete;
~MenuButtonControllerTest() override = default;
protected:
Widget* widget() { return widget_.get(); }
TestButton* button() {
return static_cast<TestButton*>(widget()->GetContentsView());
}
private:
std::unique_ptr<Widget> widget_;
void SetUp() override {
ViewsTestBase::SetUp();
widget_ = std::make_unique<Widget>();
Widget::InitParams params =
CreateParams(Widget::InitParams::CLIENT_OWNS_WIDGET,
Widget::InitParams::TYPE_WINDOW_FRAMELESS);
params.bounds = gfx::Rect(0, 0, 650, 650);
widget_->Init(std::move(params));
widget_->Show();
widget()->SetContentsView(std::make_unique<TestButton>());
}
void TearDown() override {
widget_.reset();
ViewsTestBase::TearDown();
}
};
TEST_F(MenuButtonControllerTest, NotifyClickInvokePressedCallback) {
EXPECT_FALSE(button()->pressed());
button()->button_controller()->NotifyClick();
EXPECT_TRUE(button()->pressed());
}
} // namespace views