OLD | NEW |
| (Empty) |
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 #import "chrome/browser/ui/cocoa/notifications/message_center_tray_bridge.h" | |
6 | |
7 #include "base/command_line.h" | |
8 #include "base/memory/scoped_ptr.h" | |
9 #include "base/message_loop/message_loop.h" | |
10 #include "base/run_loop.h" | |
11 #include "base/strings/utf_string_conversions.h" | |
12 #include "chrome/common/pref_names.h" | |
13 #include "chrome/test/base/scoped_testing_local_state.h" | |
14 #include "chrome/test/base/testing_browser_process.h" | |
15 #import "ui/gfx/test/ui_cocoa_test_helper.h" | |
16 #import "ui/message_center/cocoa/status_item_view.h" | |
17 #include "ui/message_center/message_center.h" | |
18 #include "ui/message_center/notification.h" | |
19 #include "ui/message_center/notifier_settings.h" | |
20 | |
21 class MessageCenterTrayBridgeTest : public ui::CocoaTest { | |
22 public: | |
23 void SetUp() override { | |
24 ui::CocoaTest::SetUp(); | |
25 | |
26 local_state_.reset( | |
27 new ScopedTestingLocalState(TestingBrowserProcess::GetGlobal())); | |
28 message_center::MessageCenter::Initialize(); | |
29 center_ = message_center::MessageCenter::Get(); | |
30 | |
31 bridge_.reset(new MessageCenterTrayBridge(center_)); | |
32 } | |
33 | |
34 void TearDown() override { | |
35 bridge_.reset(); | |
36 message_center::MessageCenter::Shutdown(); | |
37 local_state_.reset(); | |
38 initializer_.reset(); | |
39 ui::CocoaTest::TearDown(); | |
40 } | |
41 | |
42 MCStatusItemView* status_item() { return bridge_->status_item_view_.get(); } | |
43 | |
44 protected: | |
45 scoped_ptr<message_center::Notification> GetNotification() { | |
46 message_center::RichNotificationData data; | |
47 data.priority = -1; | |
48 return make_scoped_ptr(new message_center::Notification( | |
49 message_center::NOTIFICATION_TYPE_SIMPLE, "1", | |
50 base::ASCIIToUTF16("First notification"), | |
51 base::ASCIIToUTF16("This is a simple test."), gfx::Image(), | |
52 base::string16(), GURL(), message_center::NotifierId(), data, NULL)); | |
53 } | |
54 | |
55 TestingPrefServiceSimple* local_state() { return local_state_->Get(); } | |
56 | |
57 scoped_ptr<TestingBrowserProcessInitializer> initializer_; | |
58 scoped_ptr<ScopedTestingLocalState> local_state_; | |
59 | |
60 base::MessageLoop message_loop_; | |
61 message_center::MessageCenter* center_; // Weak, global. | |
62 scoped_ptr<MessageCenterTrayBridge> bridge_; | |
63 }; | |
64 | |
65 class MessageCenterTrayBridgeTestPrefNever | |
66 : public MessageCenterTrayBridgeTest { | |
67 public: | |
68 void SetUp() override { | |
69 MessageCenterTrayBridgeTest::SetUp(); | |
70 local_state()->SetBoolean(prefs::kMessageCenterShowIcon, false); | |
71 } | |
72 }; | |
73 | |
74 TEST_F(MessageCenterTrayBridgeTest, StatusItemOnlyAfterFirstNotification) { | |
75 EXPECT_FALSE(status_item()); | |
76 | |
77 bridge_->OnMessageCenterTrayChanged(); | |
78 base::RunLoop().RunUntilIdle(); | |
79 EXPECT_FALSE(status_item()); | |
80 | |
81 center_->AddNotification(GetNotification()); | |
82 | |
83 base::RunLoop().RunUntilIdle(); | |
84 | |
85 EXPECT_TRUE(status_item()); | |
86 EXPECT_EQ(1u, [status_item() unreadCount]); | |
87 | |
88 center_->RemoveNotification("1", /*by_user=*/true); | |
89 | |
90 base::RunLoop().RunUntilIdle(); | |
91 | |
92 EXPECT_TRUE(status_item()); | |
93 } | |
94 | |
95 TEST_F(MessageCenterTrayBridgeTest, StatusItemAppearsWithPrefChange) { | |
96 EXPECT_FALSE(status_item()); | |
97 local_state()->SetBoolean(prefs::kMessageCenterShowIcon, false); | |
98 EXPECT_FALSE(status_item()); | |
99 local_state()->SetBoolean(prefs::kMessageCenterShowIcon, true); | |
100 EXPECT_TRUE(status_item()); | |
101 } | |
102 | |
103 TEST_F(MessageCenterTrayBridgeTest, StatusItemDisappearsWithPrefChange) { | |
104 EXPECT_FALSE(status_item()); | |
105 center_->AddNotification(GetNotification()); | |
106 | |
107 base::RunLoop().RunUntilIdle(); | |
108 | |
109 EXPECT_TRUE(status_item()); | |
110 local_state()->SetBoolean(prefs::kMessageCenterShowIcon, false); | |
111 EXPECT_FALSE(status_item()); | |
112 local_state()->SetBoolean(prefs::kMessageCenterShowIcon, true); | |
113 EXPECT_TRUE(status_item()); | |
114 } | |
115 | |
116 TEST_F(MessageCenterTrayBridgeTestPrefNever, StatusItemNever) { | |
117 EXPECT_FALSE(status_item()); | |
118 | |
119 center_->AddNotification(GetNotification()); | |
120 | |
121 base::RunLoop().RunUntilIdle(); | |
122 | |
123 EXPECT_FALSE(status_item()); | |
124 | |
125 center_->RemoveNotification("1", /*by_user=*/true); | |
126 | |
127 base::RunLoop().RunUntilIdle(); | |
128 | |
129 EXPECT_FALSE(status_item()); | |
130 } | |
131 | |
132 TEST_F(MessageCenterTrayBridgeTestPrefNever, StatusItemBackWithPref) { | |
133 EXPECT_FALSE(status_item()); | |
134 | |
135 center_->AddNotification(GetNotification()); | |
136 | |
137 base::RunLoop().RunUntilIdle(); | |
138 | |
139 EXPECT_FALSE(status_item()); | |
140 | |
141 center_->RemoveNotification("1", /*by_user=*/true); | |
142 | |
143 base::RunLoop().RunUntilIdle(); | |
144 | |
145 EXPECT_FALSE(status_item()); | |
146 | |
147 local_state()->SetBoolean(prefs::kMessageCenterShowIcon, true); | |
148 | |
149 EXPECT_TRUE(status_item()); | |
150 } | |
OLD | NEW |