1 // Copyright (c) 2013 The Chromium Authors. All rights reserved. 2 // Use of this source code is governed by a BSD-style license that can be 3 // found in the LICENSE file. 4 5 #include "ui/message_center/message_center_tray.h" 6 7 #include "base/strings/utf_string_conversions.h" 8 #include "testing/gtest/include/gtest/gtest.h" 9 #include "ui/message_center/message_center.h" 10 #include "ui/message_center/notification_types.h" 11 12 namespace message_center { 13 namespace { 14 15 class MockDelegate : public MessageCenterTrayDelegate { 16 public: 17 MockDelegate() 18 : show_popups_success_(true), 19 show_message_center_success_(true) {} 20 virtual ~MockDelegate() {} 21 virtual void OnMessageCenterTrayChanged() OVERRIDE {} 22 virtual bool ShowPopups() OVERRIDE { 23 return show_message_center_success_; 24 } 25 virtual void HidePopups() OVERRIDE {} 26 virtual bool ShowMessageCenter() OVERRIDE { 27 return show_popups_success_; 28 } 29 virtual void HideMessageCenter() OVERRIDE {} 30 virtual bool ShowNotifierSettings() OVERRIDE { 31 return false; 32 } 33 34 virtual MessageCenterTray* GetMessageCenterTray() OVERRIDE { 35 return NULL; 36 } 37 38 bool show_popups_success_; 39 bool show_message_center_success_; 40 41 private: 42 DISALLOW_COPY_AND_ASSIGN(MockDelegate); 43 }; 44 45 } // namespace 46 47 class MessageCenterTrayTest : public testing::Test { 48 public: 49 MessageCenterTrayTest() {} 50 virtual ~MessageCenterTrayTest() {} 51 52 virtual void SetUp() { 53 MessageCenter::Initialize(); 54 delegate_.reset(new MockDelegate); 55 message_center_ = MessageCenter::Get(); 56 message_center_tray_.reset( 57 new MessageCenterTray(delegate_.get(), message_center_)); 58 } 59 60 virtual void TearDown() { 61 message_center_tray_.reset(); 62 delegate_.reset(); 63 message_center_ = NULL; 64 MessageCenter::Shutdown(); 65 } 66 67 protected: 68 NotifierId DummyNotifierId() { 69 return NotifierId(); 70 } 71 72 void AddNotification(const std::string& id) { 73 scoped_ptr<Notification> notification( 74 new Notification(message_center::NOTIFICATION_TYPE_SIMPLE, 75 id, 76 ASCIIToUTF16("Test Web Notification"), 77 ASCIIToUTF16("Notification message body."), 78 gfx::Image(), 79 ASCIIToUTF16("www.test.org"), 80 DummyNotifierId(), 81 message_center::RichNotificationData(), 82 NULL /* delegate */)); 83 message_center_->AddNotification(notification.Pass()); 84 } 85 scoped_ptr<MockDelegate> delegate_; 86 scoped_ptr<MessageCenterTray> message_center_tray_; 87 MessageCenter* message_center_; 88 89 private: 90 DISALLOW_COPY_AND_ASSIGN(MessageCenterTrayTest); 91 }; 92 93 TEST_F(MessageCenterTrayTest, BasicMessageCenter) { 94 ASSERT_FALSE(message_center_tray_->popups_visible()); 95 ASSERT_FALSE(message_center_tray_->message_center_visible()); 96 97 bool shown = message_center_tray_->ShowMessageCenterBubble(); 98 EXPECT_TRUE(shown); 99 100 ASSERT_FALSE(message_center_tray_->popups_visible()); 101 ASSERT_TRUE(message_center_tray_->message_center_visible()); 102 103 message_center_tray_->HideMessageCenterBubble(); 104 105 ASSERT_FALSE(message_center_tray_->popups_visible()); 106 ASSERT_FALSE(message_center_tray_->message_center_visible()); 107 108 message_center_tray_->ToggleMessageCenterBubble(); 109 110 ASSERT_FALSE(message_center_tray_->popups_visible()); 111 ASSERT_TRUE(message_center_tray_->message_center_visible()); 112 113 message_center_tray_->ToggleMessageCenterBubble(); 114 115 ASSERT_FALSE(message_center_tray_->popups_visible()); 116 ASSERT_FALSE(message_center_tray_->message_center_visible()); 117 } 118 119 TEST_F(MessageCenterTrayTest, BasicPopup) { 120 ASSERT_FALSE(message_center_tray_->popups_visible()); 121 ASSERT_FALSE(message_center_tray_->message_center_visible()); 122 123 message_center_tray_->ShowPopupBubble(); 124 125 ASSERT_FALSE(message_center_tray_->popups_visible()); 126 ASSERT_FALSE(message_center_tray_->message_center_visible()); 127 128 AddNotification("BasicPopup"); 129 130 ASSERT_TRUE(message_center_tray_->popups_visible()); 131 ASSERT_FALSE(message_center_tray_->message_center_visible()); 132 133 message_center_tray_->HidePopupBubble(); 134 135 ASSERT_FALSE(message_center_tray_->popups_visible()); 136 ASSERT_FALSE(message_center_tray_->message_center_visible()); 137 } 138 139 TEST_F(MessageCenterTrayTest, MessageCenterClosesPopups) { 140 ASSERT_FALSE(message_center_tray_->popups_visible()); 141 ASSERT_FALSE(message_center_tray_->message_center_visible()); 142 143 AddNotification("MessageCenterClosesPopups"); 144 145 ASSERT_TRUE(message_center_tray_->popups_visible()); 146 ASSERT_FALSE(message_center_tray_->message_center_visible()); 147 148 bool shown = message_center_tray_->ShowMessageCenterBubble(); 149 EXPECT_TRUE(shown); 150 151 ASSERT_FALSE(message_center_tray_->popups_visible()); 152 ASSERT_TRUE(message_center_tray_->message_center_visible()); 153 154 // The notification is queued if it's added when message center is visible. 155 AddNotification("MessageCenterClosesPopups2"); 156 157 message_center_tray_->ShowPopupBubble(); 158 159 ASSERT_FALSE(message_center_tray_->popups_visible()); 160 ASSERT_TRUE(message_center_tray_->message_center_visible()); 161 162 message_center_tray_->HideMessageCenterBubble(); 163 164 // The queued notification appears as a popup. 165 ASSERT_TRUE(message_center_tray_->popups_visible()); 166 ASSERT_FALSE(message_center_tray_->message_center_visible()); 167 168 message_center_tray_->ShowMessageCenterBubble(); 169 message_center_tray_->HideMessageCenterBubble(); 170 ASSERT_FALSE(message_center_tray_->popups_visible()); 171 ASSERT_FALSE(message_center_tray_->message_center_visible()); 172 } 173 174 TEST_F(MessageCenterTrayTest, MessageCenterReopenPopupsForSystemPriority) { 175 ASSERT_FALSE(message_center_tray_->popups_visible()); 176 ASSERT_FALSE(message_center_tray_->message_center_visible()); 177 178 scoped_ptr<Notification> notification( 179 new Notification(message_center::NOTIFICATION_TYPE_SIMPLE, 180 "MessageCenterReopnPopupsForSystemPriority", 181 ASCIIToUTF16("Test Web Notification"), 182 ASCIIToUTF16("Notification message body."), 183 gfx::Image(), 184 ASCIIToUTF16("www.test.org"), 185 DummyNotifierId(), 186 message_center::RichNotificationData(), 187 NULL /* delegate */)); 188 notification->SetSystemPriority(); 189 message_center_->AddNotification(notification.Pass()); 190 191 ASSERT_TRUE(message_center_tray_->popups_visible()); 192 ASSERT_FALSE(message_center_tray_->message_center_visible()); 193 194 bool shown = message_center_tray_->ShowMessageCenterBubble(); 195 EXPECT_TRUE(shown); 196 197 ASSERT_FALSE(message_center_tray_->popups_visible()); 198 ASSERT_TRUE(message_center_tray_->message_center_visible()); 199 200 message_center_tray_->HideMessageCenterBubble(); 201 202 ASSERT_TRUE(message_center_tray_->popups_visible()); 203 ASSERT_FALSE(message_center_tray_->message_center_visible()); 204 } 205 206 TEST_F(MessageCenterTrayTest, ShowBubbleFails) { 207 // Now the delegate will signal that it was unable to show a bubble. 208 delegate_->show_popups_success_ = false; 209 delegate_->show_message_center_success_ = false; 210 211 ASSERT_FALSE(message_center_tray_->popups_visible()); 212 ASSERT_FALSE(message_center_tray_->message_center_visible()); 213 214 AddNotification("ShowBubbleFails"); 215 216 message_center_tray_->ShowPopupBubble(); 217 218 ASSERT_FALSE(message_center_tray_->popups_visible()); 219 ASSERT_FALSE(message_center_tray_->message_center_visible()); 220 221 bool shown = message_center_tray_->ShowMessageCenterBubble(); 222 EXPECT_FALSE(shown); 223 224 ASSERT_FALSE(message_center_tray_->popups_visible()); 225 ASSERT_FALSE(message_center_tray_->message_center_visible()); 226 227 message_center_tray_->HideMessageCenterBubble(); 228 229 ASSERT_FALSE(message_center_tray_->popups_visible()); 230 ASSERT_FALSE(message_center_tray_->message_center_visible()); 231 232 message_center_tray_->ToggleMessageCenterBubble(); 233 234 ASSERT_FALSE(message_center_tray_->popups_visible()); 235 ASSERT_FALSE(message_center_tray_->message_center_visible()); 236 237 message_center_tray_->HidePopupBubble(); 238 239 ASSERT_FALSE(message_center_tray_->popups_visible()); 240 ASSERT_FALSE(message_center_tray_->message_center_visible()); 241 } 242 243 } // namespace message_center 244