Home | History | Annotate | Download | only in message_center
      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