Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(2995)

Unified Diff: chrome/browser/notifications/notification_platform_bridge_mac_unittest.mm

Issue 2479143003: Add tests for the XPC client. (Closed)
Patch Set: rename alert_dispatcher.h to alert_dispatcher_mac.h and add it to the BUILD.gn file Created 4 years, 1 month ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
Index: chrome/browser/notifications/notification_platform_bridge_mac_unittest.mm
diff --git a/chrome/browser/notifications/notification_platform_bridge_mac_unittest.mm b/chrome/browser/notifications/notification_platform_bridge_mac_unittest.mm
index 23f7e035a02db2829725c12cc3b1612d862f8bc7..fc3a98afd8fa2fb559439423d2ae6da96ecb5e97 100644
--- a/chrome/browser/notifications/notification_platform_bridge_mac_unittest.mm
+++ b/chrome/browser/notifications/notification_platform_bridge_mac_unittest.mm
@@ -6,15 +6,16 @@
#import <objc/runtime.h>
#include "base/mac/scoped_nsobject.h"
-#import "base/mac/scoped_objc_class_swizzler.h"
#include "base/strings/utf_string_conversions.h"
#include "chrome/browser/notifications/notification.h"
#include "chrome/browser/notifications/notification_platform_bridge_mac.h"
#include "chrome/browser/notifications/notification_test_util.h"
+#include "chrome/browser/notifications/stub_alert_dispatcher_mac.h"
#include "chrome/browser/notifications/stub_notification_center_mac.h"
#include "chrome/browser/ui/cocoa/notifications/notification_builder_mac.h"
#include "chrome/browser/ui/cocoa/notifications/notification_constants_mac.h"
#include "chrome/browser/ui/cocoa/notifications/notification_response_builder_mac.h"
+#include "chrome/common/features.h"
#include "testing/gtest/include/gtest/gtest.h"
#include "testing/gtest_mac.h"
#include "url/gurl.h"
@@ -23,10 +24,12 @@ class NotificationPlatformBridgeMacTest : public testing::Test {
public:
void SetUp() override {
notification_center_.reset([[StubNotificationCenter alloc] init]);
+ alert_dispatcher_.reset([[StubAlertDispatcher alloc] init]);
}
void TearDown() override {
[notification_center_ removeAllDeliveredNotifications];
+ [alert_dispatcher_ closeAllNotifications];
}
protected:
@@ -50,11 +53,30 @@ class NotificationPlatformBridgeMacTest : public testing::Test {
return [builder buildUserNotification];
}
+ std::unique_ptr<Notification> CreateBanner(const char* title,
+ const char* subtitle,
+ const char* origin,
+ const char* button1,
+ const char* button2) {
+ return CreateNotification(title, subtitle, origin, button1, button2,
+ false /* require_interaction */);
+ }
+
+ std::unique_ptr<Notification> CreateAlert(const char* title,
+ const char* subtitle,
+ const char* origin,
+ const char* button1,
+ const char* button2) {
+ return CreateNotification(title, subtitle, origin, button1, button2,
+ true /* require_interaction */);
+ }
+
std::unique_ptr<Notification> CreateNotification(const char* title,
const char* subtitle,
const char* origin,
const char* button1,
- const char* button2) {
+ const char* button2,
+ bool require_interaction) {
message_center::RichNotificationData optional_fields;
optional_fields.context_message = base::UTF8ToUTF16(origin);
if (button1) {
@@ -73,6 +95,8 @@ class NotificationPlatformBridgeMacTest : public testing::Test {
base::UTF8ToUTF16(subtitle), gfx::Image(),
message_center::NotifierId(url), base::UTF8ToUTF16("Notifier's Name"),
url, "id1", optional_fields, new MockNotificationDelegate("id1")));
+ if (require_interaction)
+ notification->set_never_timeout(true);
return notification;
}
@@ -87,8 +111,11 @@ class NotificationPlatformBridgeMacTest : public testing::Test {
return notification_center_.get();
}
+ StubAlertDispatcher* alert_dispatcher() { return alert_dispatcher_.get(); }
+
private:
base::scoped_nsobject<StubNotificationCenter> notification_center_;
+ base::scoped_nsobject<StubAlertDispatcher> alert_dispatcher_;
};
TEST_F(NotificationPlatformBridgeMacTest, TestNotificationVerifyValidResponse) {
@@ -158,11 +185,11 @@ TEST_F(NotificationPlatformBridgeMacTest, TestNotificationVerifyOrigin) {
}
TEST_F(NotificationPlatformBridgeMacTest, TestDisplayNoButtons) {
- std::unique_ptr<Notification> notification = CreateNotification(
- "Title", "Context", "https://gmail.com", nullptr, nullptr);
+ std::unique_ptr<Notification> notification =
+ CreateBanner("Title", "Context", "https://gmail.com", nullptr, nullptr);
std::unique_ptr<NotificationPlatformBridgeMac> bridge(
- new NotificationPlatformBridgeMac(notification_center()));
+ new NotificationPlatformBridgeMac(notification_center(), nil));
bridge->Display(NotificationCommon::PERSISTENT, "notification_id",
"profile_id", false, *notification);
NSArray* notifications = [notification_center() deliveredNotifications];
@@ -178,11 +205,11 @@ TEST_F(NotificationPlatformBridgeMacTest, TestDisplayNoButtons) {
}
TEST_F(NotificationPlatformBridgeMacTest, TestDisplayOneButton) {
- std::unique_ptr<Notification> notification = CreateNotification(
+ std::unique_ptr<Notification> notification = CreateBanner(
"Title", "Context", "https://gmail.com", "Button 1", nullptr);
std::unique_ptr<NotificationPlatformBridgeMac> bridge(
- new NotificationPlatformBridgeMac(notification_center()));
+ new NotificationPlatformBridgeMac(notification_center(), nil));
bridge->Display(NotificationCommon::PERSISTENT, "notification_id",
"profile_id", false, *notification);
@@ -197,11 +224,11 @@ TEST_F(NotificationPlatformBridgeMacTest, TestDisplayOneButton) {
}
TEST_F(NotificationPlatformBridgeMacTest, TestCloseNotification) {
- std::unique_ptr<Notification> notification = CreateNotification(
+ std::unique_ptr<Notification> notification = CreateBanner(
"Title", "Context", "https://gmail.com", "Button 1", nullptr);
std::unique_ptr<NotificationPlatformBridgeMac> bridge(
- new NotificationPlatformBridgeMac(notification_center()));
+ new NotificationPlatformBridgeMac(notification_center(), nil));
EXPECT_EQ(0u, [[notification_center() deliveredNotifications] count]);
bridge->Display(NotificationCommon::PERSISTENT, "notification_id",
"profile_id", false, *notification);
@@ -212,11 +239,11 @@ TEST_F(NotificationPlatformBridgeMacTest, TestCloseNotification) {
}
TEST_F(NotificationPlatformBridgeMacTest, TestCloseNonExistingNotification) {
- std::unique_ptr<Notification> notification = CreateNotification(
+ std::unique_ptr<Notification> notification = CreateBanner(
"Title", "Context", "https://gmail.com", "Button 1", nullptr);
std::unique_ptr<NotificationPlatformBridgeMac> bridge(
- new NotificationPlatformBridgeMac(notification_center()));
+ new NotificationPlatformBridgeMac(notification_center(), nil));
EXPECT_EQ(0u, [[notification_center() deliveredNotifications] count]);
bridge->Display(NotificationCommon::PERSISTENT, "notification_id",
"profile_id", false, *notification);
@@ -227,10 +254,10 @@ TEST_F(NotificationPlatformBridgeMacTest, TestCloseNonExistingNotification) {
}
TEST_F(NotificationPlatformBridgeMacTest, TestGetDisplayed) {
- std::unique_ptr<Notification> notification = CreateNotification(
+ std::unique_ptr<Notification> notification = CreateBanner(
"Title", "Context", "https://gmail.com", "Button 1", nullptr);
std::unique_ptr<NotificationPlatformBridgeMac> bridge(
- new NotificationPlatformBridgeMac(notification_center()));
+ new NotificationPlatformBridgeMac(notification_center(), nil));
EXPECT_EQ(0u, [[notification_center() deliveredNotifications] count]);
bridge->Display(NotificationCommon::PERSISTENT, "notification_id",
"profile_id", false, *notification);
@@ -242,10 +269,10 @@ TEST_F(NotificationPlatformBridgeMacTest, TestGetDisplayed) {
}
TEST_F(NotificationPlatformBridgeMacTest, TestGetDisplayedUnknownProfile) {
- std::unique_ptr<Notification> notification = CreateNotification(
+ std::unique_ptr<Notification> notification = CreateBanner(
"Title", "Context", "https://gmail.com", "Button 1", nullptr);
std::unique_ptr<NotificationPlatformBridgeMac> bridge(
- new NotificationPlatformBridgeMac(notification_center()));
+ new NotificationPlatformBridgeMac(notification_center(), nil));
EXPECT_EQ(0u, [[notification_center() deliveredNotifications] count]);
bridge->Display(NotificationCommon::PERSISTENT, "notification_id",
"profile_id", false, *notification);
@@ -258,11 +285,11 @@ TEST_F(NotificationPlatformBridgeMacTest, TestGetDisplayedUnknownProfile) {
}
TEST_F(NotificationPlatformBridgeMacTest, TestQuitRemovesNotifications) {
- std::unique_ptr<Notification> notification = CreateNotification(
+ std::unique_ptr<Notification> notification = CreateBanner(
"Title", "Context", "https://gmail.com", "Button 1", nullptr);
{
std::unique_ptr<NotificationPlatformBridgeMac> bridge(
- new NotificationPlatformBridgeMac(notification_center()));
+ new NotificationPlatformBridgeMac(notification_center(), nil));
EXPECT_EQ(0u, [[notification_center() deliveredNotifications] count]);
bridge->Display(NotificationCommon::PERSISTENT, "notification_id",
"profile_id", false, *notification);
@@ -272,3 +299,75 @@ TEST_F(NotificationPlatformBridgeMacTest, TestQuitRemovesNotifications) {
// The destructor of the bridge should close all notifications.
EXPECT_EQ(0u, [[notification_center() deliveredNotifications] count]);
}
+
+// TODO(miguelg) There is some duplication between these tests and the ones
+// Above. Once the flag is removed most tests can be merged.
+#if BUILDFLAG(ENABLE_XPC_NOTIFICATIONS)
+TEST_F(NotificationPlatformBridgeMacTest, TestDisplayAlert) {
+ std::unique_ptr<Notification> alert =
+ CreateAlert("Title", "Context", "https://gmail.com", "Button 1", nullptr);
+ std::unique_ptr<NotificationPlatformBridgeMac> bridge(
+ new NotificationPlatformBridgeMac(notification_center(),
+ alert_dispatcher()));
+ bridge->Display(NotificationCommon::PERSISTENT, "notification_id",
+ "profile_id", false, *alert);
+ EXPECT_EQ(0u, [[notification_center() deliveredNotifications] count]);
+ EXPECT_EQ(1u, [[alert_dispatcher() alerts] count]);
+}
+
+TEST_F(NotificationPlatformBridgeMacTest, TestDisplayBannerAndAlert) {
+ std::unique_ptr<Notification> alert =
+ CreateAlert("Title", "Context", "https://gmail.com", "Button 1", nullptr);
+ std::unique_ptr<Notification> banner = CreateBanner(
+ "Title", "Context", "https://gmail.com", "Button 1", nullptr);
+ std::unique_ptr<NotificationPlatformBridgeMac> bridge(
+ new NotificationPlatformBridgeMac(notification_center(),
+ alert_dispatcher()));
+ bridge->Display(NotificationCommon::PERSISTENT, "notification_id",
+ "profile_id", false, *banner);
+ bridge->Display(NotificationCommon::PERSISTENT, "notification_id2",
+ "profile_id", false, *alert);
+ EXPECT_EQ(1u, [[notification_center() deliveredNotifications] count]);
+ EXPECT_EQ(1u, [[alert_dispatcher() alerts] count]);
+}
+
+TEST_F(NotificationPlatformBridgeMacTest, TestCloseAlert) {
+ std::unique_ptr<Notification> alert =
+ CreateAlert("Title", "Context", "https://gmail.com", "Button 1", nullptr);
+ std::unique_ptr<NotificationPlatformBridgeMac> bridge(
+ new NotificationPlatformBridgeMac(notification_center(),
+ alert_dispatcher()));
+ EXPECT_EQ(0u, [[alert_dispatcher() alerts] count]);
+ bridge->Display(NotificationCommon::PERSISTENT, "notification_id",
+ "profile_id", false, *alert);
+ EXPECT_EQ(1u, [[alert_dispatcher() alerts] count]);
+
+ bridge->Close("profile_id", "notification_id");
+ EXPECT_EQ(0u, [[notification_center() deliveredNotifications] count]);
+}
+
+TEST_F(NotificationPlatformBridgeMacTest, TestQuitRemovesBannersAndAlerts) {
+ std::unique_ptr<Notification> notification = CreateBanner(
+ "Title", "Context", "https://gmail.com", "Button 1", nullptr);
+ std::unique_ptr<Notification> alert =
+ CreateAlert("Title", "Context", "https://gmail.com", "Button 1", nullptr);
+ {
+ std::unique_ptr<NotificationPlatformBridgeMac> bridge(
+ new NotificationPlatformBridgeMac(notification_center(),
+ alert_dispatcher()));
+ EXPECT_EQ(0u, [[notification_center() deliveredNotifications] count]);
+ EXPECT_EQ(0u, [[alert_dispatcher() alerts] count]);
+ bridge->Display(NotificationCommon::PERSISTENT, "notification_id",
+ "profile_id", false, *notification);
+ bridge->Display(NotificationCommon::PERSISTENT, "notification_id2",
+ "profile_id", false, *alert);
+ EXPECT_EQ(1u, [[notification_center() deliveredNotifications] count]);
+ EXPECT_EQ(1u, [[alert_dispatcher() alerts] count]);
+ }
+
+ // The destructor of the bridge should close all notifications.
+ EXPECT_EQ(0u, [[notification_center() deliveredNotifications] count]);
+ EXPECT_EQ(0u, [[alert_dispatcher() alerts] count]);
+}
+
+#endif

Powered by Google App Engine
This is Rietveld 408576698