// Copyright 2018 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 "components/exo/notification.h" #include "base/bind.h" #include "base/bind_helpers.h" #include "base/callback.h" #include "components/exo/test/exo_test_base.h" #include "components/exo/test/exo_test_helper.h" #include "ui/message_center/message_center.h" #include "ui/message_center/public/cpp/notification.h" namespace exo { namespace { using NotificationTest = test::ExoTestBase; void Close(int* close_call_count, bool by_user) { (*close_call_count)++; } void Click(int* click_call_count, base::Optional* passed_button_index, const base::Optional& button_index) { (*click_call_count)++; *passed_button_index = button_index; } TEST_F(NotificationTest, CloseCallback) { auto* message_center = message_center::MessageCenter::Get(); // Clear all notifications. message_center->RemoveAllNotifications( false /* by_user */, message_center::MessageCenter::RemoveType::ALL); // Params for test notification. const std::string title = "TEST title"; const std::string message = "TEST message"; const std::string display_source = "TEST display_source"; const std::string notification_id = "exo-notification.test"; const std::string notifier_id = "exo-notification-test"; const std::vector buttons = {"TEST button0", "TEST button1"}; // For the close callback. int close_call_count = 0; Notification notification( title, message, display_source, notification_id, notifier_id, buttons, base::BindRepeating(&Close, base::Unretained(&close_call_count)), base::DoNothing()); EXPECT_EQ(close_call_count, 0); EXPECT_NE(nullptr, message_center->FindVisibleNotificationById(notification_id)); // Closes notification. notification.Close(); EXPECT_EQ(nullptr, message_center->FindVisibleNotificationById(notification_id)); // Expected to be called once EXPECT_EQ(close_call_count, 1); // Clear all notifications. message_center->RemoveAllNotifications( false /* by_user */, message_center::MessageCenter::RemoveType::ALL); } TEST_F(NotificationTest, ClickCallback) { auto* message_center = message_center::MessageCenter::Get(); // Clear all notifications. message_center->RemoveAllNotifications( false /* by_user */, message_center::MessageCenter::RemoveType::ALL); // Params for test notification. const std::string title = "TEST title"; const std::string message = "TEST message"; const std::string display_source = "TEST display_source"; const std::string notification_id = "exo-notification.test"; const std::string notifier_id = "exo-notification-test"; const std::vector buttons = {"TEST button0", "TEST button1"}; // For the click callback. int click_call_count = 0; base::Optional passed_button_index; Notification notification( title, message, display_source, notification_id, notifier_id, buttons, base::DoNothing(), base::BindRepeating(&Click, base::Unretained(&click_call_count), base::Unretained(&passed_button_index))); EXPECT_EQ(click_call_count, 0); EXPECT_NE(nullptr, message_center->FindVisibleNotificationById(notification_id)); // Clicks on notification. message_center->ClickOnNotification(notification_id); // Expected to be called once without button index EXPECT_EQ(click_call_count, 1); EXPECT_EQ(passed_button_index, base::nullopt); // Clicks on button. message_center->ClickOnNotificationButton(notification_id, 0); // Expected to be called once with button index EXPECT_EQ(click_call_count, 2); EXPECT_EQ(*passed_button_index, 0); // Clear all notifications. message_center->RemoveAllNotifications( false /* by_user */, message_center::MessageCenter::RemoveType::ALL); } } // namespace } // namespace exo