| Index: ui/message_center/views/custom_notification_view_unittest.cc
|
| diff --git a/ui/message_center/views/custom_notification_view_unittest.cc b/ui/message_center/views/custom_notification_view_unittest.cc
|
| new file mode 100644
|
| index 0000000000000000000000000000000000000000..a5d87f41846290234a417daec410378db4d6526f
|
| --- /dev/null
|
| +++ b/ui/message_center/views/custom_notification_view_unittest.cc
|
| @@ -0,0 +1,242 @@
|
| +// Copyright 2016 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 <memory>
|
| +
|
| +#include "base/macros.h"
|
| +#include "base/memory/ptr_util.h"
|
| +#include "base/memory/ref_counted.h"
|
| +#include "base/strings/utf_string_conversions.h"
|
| +#include "third_party/skia/include/core/SkColor.h"
|
| +#include "ui/events/event.h"
|
| +#include "ui/events/event_utils.h"
|
| +#include "ui/message_center/notification.h"
|
| +#include "ui/message_center/notification_delegate.h"
|
| +#include "ui/message_center/views/custom_notification_view.h"
|
| +#include "ui/message_center/views/message_center_controller.h"
|
| +#include "ui/message_center/views/message_view_factory.h"
|
| +#include "ui/views/background.h"
|
| +#include "ui/views/controls/button/image_button.h"
|
| +#include "ui/views/test/views_test_base.h"
|
| +
|
| +namespace message_center {
|
| +
|
| +namespace {
|
| +
|
| +const SkColor kBackgroundColor = SK_ColorGREEN;
|
| +
|
| +class TestCustomView : public views::View {
|
| + public:
|
| + TestCustomView() {
|
| + SetFocusBehavior(FocusBehavior::ALWAYS);
|
| + set_background(views::Background::CreateSolidBackground(kBackgroundColor));
|
| + }
|
| + ~TestCustomView() override {}
|
| +
|
| + void Reset() {
|
| + mouse_event_count_ = 0;
|
| + keyboard_event_count_ = 0;
|
| + }
|
| +
|
| + // views::View
|
| + gfx::Size GetPreferredSize() const override { return gfx::Size(100, 100); }
|
| + bool OnMousePressed(const ui::MouseEvent& event) override {
|
| + ++mouse_event_count_;
|
| + return true;
|
| + }
|
| + void OnMouseMoved(const ui::MouseEvent& event) override {
|
| + ++mouse_event_count_;
|
| + }
|
| + void OnMouseReleased(const ui::MouseEvent& event) override {
|
| + ++mouse_event_count_;
|
| + }
|
| + bool OnKeyPressed(const ui::KeyEvent& event) override {
|
| + ++keyboard_event_count_;
|
| + return true;
|
| + }
|
| +
|
| + int mouse_event_count() const { return mouse_event_count_; }
|
| + int keyboard_event_count() const { return keyboard_event_count_; }
|
| +
|
| + private:
|
| + int mouse_event_count_ = 0;
|
| + int keyboard_event_count_ = 0;
|
| +
|
| + DISALLOW_COPY_AND_ASSIGN(TestCustomView);
|
| +};
|
| +
|
| +class TestNotificationDelegate : public NotificationDelegate {
|
| + public:
|
| + TestNotificationDelegate() {}
|
| +
|
| + // NotificateDelegate
|
| + std::unique_ptr<views::View> CreateCustomContent() override {
|
| + return base::WrapUnique(new TestCustomView);
|
| + }
|
| +
|
| + private:
|
| + ~TestNotificationDelegate() override {}
|
| +
|
| + DISALLOW_COPY_AND_ASSIGN(TestNotificationDelegate);
|
| +};
|
| +
|
| +class TestMessageCenterController : public MessageCenterController {
|
| + public:
|
| + TestMessageCenterController() {}
|
| +
|
| + // MessageCenterController
|
| + void ClickOnNotification(const std::string& notification_id) override {
|
| + // For this test, this method should not be invoked.
|
| + NOTREACHED();
|
| + }
|
| +
|
| + void RemoveNotification(const std::string& notification_id,
|
| + bool by_user) override {
|
| + removed_ids_.insert(notification_id);
|
| + }
|
| +
|
| + std::unique_ptr<ui::MenuModel> CreateMenuModel(
|
| + const NotifierId& notifier_id,
|
| + const base::string16& display_source) override {
|
| + // For this test, this method should not be invoked.
|
| + NOTREACHED();
|
| + return nullptr;
|
| + }
|
| +
|
| + bool HasClickedListener(const std::string& notification_id) override {
|
| + return false;
|
| + }
|
| +
|
| + void ClickOnNotificationButton(const std::string& notification_id,
|
| + int button_index) override {
|
| + // For this test, this method should not be invoked.
|
| + NOTREACHED();
|
| + }
|
| +
|
| + void ClickOnSettingsButton(const std::string& notification_id) override {
|
| + // For this test, this method should not be invoked.
|
| + NOTREACHED();
|
| + }
|
| +
|
| + bool IsRemoved(const std::string& notification_id) const {
|
| + return (removed_ids_.find(notification_id) != removed_ids_.end());
|
| + }
|
| +
|
| + private:
|
| + std::set<std::string> removed_ids_;
|
| +
|
| + DISALLOW_COPY_AND_ASSIGN(TestMessageCenterController);
|
| +};
|
| +
|
| +} // namespace
|
| +
|
| +class CustomNotificationViewTest : public views::ViewsTestBase {
|
| + public:
|
| + CustomNotificationViewTest() {}
|
| + ~CustomNotificationViewTest() override {}
|
| +
|
| + // views::ViewsTestBase
|
| + void SetUp() override {
|
| + views::ViewsTestBase::SetUp();
|
| +
|
| + notification_delegate_ = new TestNotificationDelegate;
|
| +
|
| + notification_.reset(new Notification(
|
| + NOTIFICATION_TYPE_CUSTOM, std::string("notification id"),
|
| + base::UTF8ToUTF16("title"), base::UTF8ToUTF16("message"), gfx::Image(),
|
| + base::UTF8ToUTF16("display source"), GURL(),
|
| + NotifierId(NotifierId::APPLICATION, "extension_id"),
|
| + message_center::RichNotificationData(), notification_delegate_.get()));
|
| +
|
| + notification_view_.reset(static_cast<CustomNotificationView*>(
|
| + MessageViewFactory::Create(controller(), *notification_, true)));
|
| + notification_view_->set_owned_by_client();
|
| +
|
| + views::Widget::InitParams init_params(
|
| + CreateParams(views::Widget::InitParams::TYPE_POPUP));
|
| + views::Widget* widget = new views::Widget();
|
| + widget->Init(init_params);
|
| + widget->SetContentsView(notification_view_.get());
|
| + widget->SetSize(notification_view_->GetPreferredSize());
|
| + }
|
| +
|
| + void TearDown() override {
|
| + widget()->Close();
|
| + notification_view_.reset();
|
| + views::ViewsTestBase::TearDown();
|
| + }
|
| +
|
| + SkColor GetBackgroundColor() const {
|
| + return notification_view_->background_view()->background()->get_color();
|
| + }
|
| +
|
| + void PerformClick(const gfx::Point& point) {
|
| + ui::MouseEvent pressed_event = ui::MouseEvent(
|
| + ui::ET_MOUSE_PRESSED, point, point, ui::EventTimeForNow(),
|
| + ui::EF_LEFT_MOUSE_BUTTON, ui::EF_LEFT_MOUSE_BUTTON);
|
| + widget()->OnMouseEvent(&pressed_event);
|
| + ui::MouseEvent released_event = ui::MouseEvent(
|
| + ui::ET_MOUSE_RELEASED, point, point, ui::EventTimeForNow(),
|
| + ui::EF_LEFT_MOUSE_BUTTON, ui::EF_LEFT_MOUSE_BUTTON);
|
| + widget()->OnMouseEvent(&released_event);
|
| + }
|
| +
|
| + void KeyPress(ui::KeyboardCode key_code) {
|
| + ui::KeyEvent event(ui::ET_KEY_PRESSED, key_code, ui::EF_NONE);
|
| + widget()->OnKeyEvent(&event);
|
| + }
|
| +
|
| + views::ImageButton* close_button() {
|
| + return notification_view_->close_button();
|
| + }
|
| + TestMessageCenterController* controller() { return &controller_; }
|
| + Notification* notification() { return notification_.get(); }
|
| + TestCustomView* custom_view() {
|
| + return static_cast<TestCustomView*>(notification_view_->contents_view_);
|
| + }
|
| + views::Widget* widget() { return notification_view_->GetWidget(); }
|
| +
|
| + private:
|
| + TestMessageCenterController controller_;
|
| + scoped_refptr<TestNotificationDelegate> notification_delegate_;
|
| + std::unique_ptr<Notification> notification_;
|
| + std::unique_ptr<CustomNotificationView> notification_view_;
|
| +
|
| + DISALLOW_COPY_AND_ASSIGN(CustomNotificationViewTest);
|
| +};
|
| +
|
| +TEST_F(CustomNotificationViewTest, Background) {
|
| + EXPECT_EQ(kBackgroundColor, GetBackgroundColor());
|
| +}
|
| +
|
| +TEST_F(CustomNotificationViewTest, ClickCloseButton) {
|
| + widget()->Show();
|
| +
|
| + gfx::Point cursor_location(1, 1);
|
| + views::View::ConvertPointToWidget(close_button(), &cursor_location);
|
| + PerformClick(cursor_location);
|
| + EXPECT_TRUE(controller()->IsRemoved(notification()->id()));
|
| +}
|
| +
|
| +TEST_F(CustomNotificationViewTest, Events) {
|
| + widget()->Show();
|
| + custom_view()->RequestFocus();
|
| +
|
| + EXPECT_EQ(0, custom_view()->mouse_event_count());
|
| + gfx::Point cursor_location(1, 1);
|
| + views::View::ConvertPointToWidget(custom_view(), &cursor_location);
|
| + PerformClick(cursor_location);
|
| + EXPECT_EQ(2, custom_view()->mouse_event_count());
|
| +
|
| + ui::MouseEvent move(ui::ET_MOUSE_MOVED, cursor_location, cursor_location,
|
| + ui::EventTimeForNow(), ui::EF_NONE, ui::EF_NONE);
|
| + widget()->OnMouseEvent(&move);
|
| + EXPECT_EQ(3, custom_view()->mouse_event_count());
|
| +
|
| + EXPECT_EQ(0, custom_view()->keyboard_event_count());
|
| + KeyPress(ui::VKEY_A);
|
| + EXPECT_EQ(1, custom_view()->keyboard_event_count());
|
| +}
|
| +
|
| +} // namespace message_center
|
|
|