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 |