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

Side by Side Diff: experimental/c_salt/notification_center_test.cc

Issue 10928195: First round of dead file removal (Closed) Base URL: https://github.com/samclegg/nativeclient-sdk.git@master
Patch Set: Created 8 years, 3 months 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 unified diff | Download patch
« no previous file with comments | « experimental/c_salt/notification_center.cc ('k') | experimental/c_salt/notification_ptrs.h » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
(Empty)
1 // Copyright 2010 The Ginsu Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can
3 // be found in the LICENSE file.
4
5 #include <iostream>
6 #include <string>
7
8 #include "c_salt/instance.h"
9 #include "c_salt/notification_center.h"
10 #include "c_salt/notification.h"
11 #include "gmock/gmock.h"
12 #include "gtest/gtest.h"
13
14 using c_salt::NotificationCenter;
15 using c_salt::Notification;
16
17 namespace {
18 const char* const kPublisherName = "publisher name";
19 const char* const kPublisherName2 = "publisher name 2";
20 const char* const kTestNotification = "Test Notification";
21 const char* const kTestNotification2 = "Test Notification 2";
22 } // namespace
23
24 // A dummy class that implements a notification response method. This method
25 // is expected to be called from a notification.
26 class Subscriber {
27 public:
28 Subscriber() : call_count_(0), call_count2_(0) {}
29 void NotificationHandler(const Notification& notification) {
30 ++call_count_;
31 }
32
33 void NotificationHandler2(const Notification& notification) {
34 ++call_count2_;
35 }
36
37 int call_count() const {
38 return call_count_;
39 }
40
41 int call_count2() const {
42 return call_count2_;
43 }
44
45 private:
46 int call_count_;
47 int call_count2_;
48 };
49
50 class NotificationCenterTest : public ::testing::Test {
51 protected:
52 virtual void SetUp() {}
53 };
54
55 // Verify the default center is the same all the time.
56 TEST_F(NotificationCenterTest, DefaultCenter) {
57 c_salt::Instance instance(NULL);
58 NotificationCenter* default_center_1 =
59 NotificationCenter::DefaultCenter(instance);
60 NotificationCenter* default_center_2 =
61 NotificationCenter::DefaultCenter(instance);
62 EXPECT_EQ(default_center_1, default_center_2);
63 }
64
65 // Add a subscriber and verify that it gets called when a notification is
66 // posted.
67 TEST_F(NotificationCenterTest, PublishNotification) {
68 Subscriber subscriber;
69 NotificationCenter center;
70 center.AddSubscriber(kTestNotification,
71 &subscriber,
72 &Subscriber::NotificationHandler,
73 NotificationCenter::kAnonymousPublisherName);
74 center.PublishNotification(kTestNotification,
75 Notification(kTestNotification),
76 kPublisherName);
77 EXPECT_EQ(1, subscriber.call_count());
78 }
79
80 // Add a couple of subscribers and verify that they both get called when a
81 // notification is posted.
82 TEST_F(NotificationCenterTest, Post2Notifications) {
83 Subscriber subscriber;
84 Subscriber subscriber2;
85 NotificationCenter center;
86 center.AddSubscriber(kTestNotification,
87 &subscriber,
88 &Subscriber::NotificationHandler,
89 NotificationCenter::kAnonymousPublisherName);
90 center.AddSubscriber(kTestNotification,
91 &subscriber2,
92 &Subscriber::NotificationHandler,
93 NotificationCenter::kAnonymousPublisherName);
94 center.PublishNotification(kTestNotification,
95 Notification(kTestNotification),
96 kPublisherName);
97 EXPECT_EQ(1, subscriber.call_count());
98 EXPECT_EQ(1, subscriber2.call_count());
99 }
100
101 // Verify that a subscriber can listen for notifications from a specific object.
102 TEST_F(NotificationCenterTest, SpecificPublisher) {
103 Subscriber subscriber;
104 NotificationCenter center;
105 center.AddSubscriber(kTestNotification,
106 &subscriber,
107 &Subscriber::NotificationHandler,
108 kPublisherName);
109 center.AddSubscriber(kTestNotification,
110 &subscriber,
111 &Subscriber::NotificationHandler2,
112 NotificationCenter::kAnonymousPublisherName);
113 center.PublishNotification(kTestNotification,
114 Notification(kTestNotification),
115 kPublisherName);
116 EXPECT_EQ(1, subscriber.call_count());
117 EXPECT_EQ(1, subscriber.call_count2());
118 center.PublishNotification(kTestNotification,
119 Notification(kTestNotification),
120 kPublisherName2);
121 EXPECT_EQ(1, subscriber.call_count()); // Should not increment.
122 // Subscribes to kTestNotifications from *any* publisher, so the call count
123 // should increment.
124 EXPECT_EQ(2, subscriber.call_count2());
125 }
126
127 // Verify that subscribers can be added after an initial post.
128 TEST_F(NotificationCenterTest, AddSubscriber) {
129 Subscriber subscriber;
130 NotificationCenter center;
131 center.AddSubscriber(kTestNotification,
132 &subscriber,
133 &Subscriber::NotificationHandler,
134 NotificationCenter::kAnonymousPublisherName);
135 center.AddSubscriber(kTestNotification2,
136 &subscriber,
137 &Subscriber::NotificationHandler,
138 NotificationCenter::kAnonymousPublisherName);
139 center.PublishNotification(kTestNotification,
140 Notification(kTestNotification),
141 kPublisherName);
142 center.PublishNotification(kTestNotification2,
143 Notification(kTestNotification),
144 kPublisherName);
145 EXPECT_EQ(2, subscriber.call_count());
146 Subscriber subscriber2;
147 center.AddSubscriber(kTestNotification,
148 &subscriber2,
149 &Subscriber::NotificationHandler,
150 NotificationCenter::kAnonymousPublisherName);
151 center.PublishNotification(kTestNotification,
152 Notification(kTestNotification),
153 kPublisherName);
154 EXPECT_EQ(3, subscriber.call_count());
155 EXPECT_EQ(1, subscriber2.call_count());
156 }
157
158 // Observe two notifications with the same subscriber, then remove one of the
159 // notificaiton handlers and verify that the second one continues to function.
160 // This depends on the AddSubscriber test.
161 TEST_F(NotificationCenterTest, RemoveSubscriberFromNotification) {
162 Subscriber subscriber;
163 Subscriber subscriber2;
164 NotificationCenter center;
165 center.AddSubscriber(kTestNotification,
166 &subscriber,
167 &Subscriber::NotificationHandler,
168 NotificationCenter::kAnonymousPublisherName);
169 center.AddSubscriber(kTestNotification2,
170 &subscriber,
171 &Subscriber::NotificationHandler2,
172 NotificationCenter::kAnonymousPublisherName);
173 center.PublishNotification(kTestNotification,
174 Notification(kTestNotification),
175 kPublisherName);
176 center.PublishNotification(kTestNotification2,
177 Notification(kTestNotification),
178 kPublisherName);
179 EXPECT_EQ(1, subscriber.call_count());
180 EXPECT_EQ(1, subscriber.call_count2());
181 center.RemoveSubscriberFromNotification(&subscriber, kTestNotification);
182 center.PublishNotification(kTestNotification,
183 Notification(kTestNotification),
184 kPublisherName);
185 center.PublishNotification(kTestNotification2,
186 Notification(kTestNotification),
187 kPublisherName);
188 EXPECT_EQ(1, subscriber.call_count()); // Should not increment.
189 // Still observes |kTestNotification|.
190 EXPECT_EQ(2, subscriber.call_count2());
191 }
192
193 // Verify that subscribers can be removed. This depends on the AddSubscriber
194 // test.
195 TEST_F(NotificationCenterTest, RemoveSubscriber) {
196 Subscriber subscriber;
197 Subscriber subscriber2;
198 NotificationCenter center;
199 center.AddSubscriber(kTestNotification,
200 &subscriber,
201 &Subscriber::NotificationHandler,
202 NotificationCenter::kAnonymousPublisherName);
203 center.AddSubscriber(kTestNotification,
204 &subscriber2,
205 &Subscriber::NotificationHandler,
206 NotificationCenter::kAnonymousPublisherName);
207 center.AddSubscriber(kTestNotification2,
208 &subscriber,
209 &Subscriber::NotificationHandler,
210 NotificationCenter::kAnonymousPublisherName);
211 center.PublishNotification(kTestNotification,
212 Notification(kTestNotification),
213 kPublisherName);
214 center.PublishNotification(kTestNotification2,
215 Notification(kTestNotification),
216 kPublisherName);
217 EXPECT_EQ(2, subscriber.call_count());
218 EXPECT_EQ(1, subscriber2.call_count());
219 // Remove |subscriber| from the notifications it observes.
220 center.RemoveSubscriber(&subscriber);
221 center.PublishNotification(kTestNotification,
222 Notification(kTestNotification),
223 kPublisherName);
224 // There are no more subscribers of |kTestNotification2|.
225 center.PublishNotification(kTestNotification2,
226 Notification(kTestNotification),
227 kPublisherName);
228 EXPECT_EQ(2, subscriber.call_count()); // Should not increment.
229 // Still observes |kTestNotification|.
230 EXPECT_EQ(2, subscriber2.call_count());
231 // Remove all remaining subscribers of |kTestNotification|.
232 center.RemoveSubscriberFromNotification(&subscriber2,
233 kTestNotification);
234 center.PublishNotification(kTestNotification,
235 Notification(kTestNotification),
236 kPublisherName);
237 EXPECT_EQ(2, subscriber.call_count()); // Should not increment.
238 EXPECT_EQ(2, subscriber2.call_count()); // Should not increment.
239 }
240
241 // Remove a notification, verify that all its subscribers get disconnected.
242 TEST_F(NotificationCenterTest, RemoveNotification) {
243 Subscriber subscriber;
244 Subscriber subscriber2;
245 NotificationCenter center;
246 center.AddSubscriber(kTestNotification,
247 &subscriber,
248 &Subscriber::NotificationHandler,
249 NotificationCenter::kAnonymousPublisherName);
250 center.AddSubscriber(kTestNotification,
251 &subscriber2,
252 &Subscriber::NotificationHandler,
253 NotificationCenter::kAnonymousPublisherName);
254 center.PublishNotification(kTestNotification,
255 Notification(kTestNotification),
256 kPublisherName);
257 // Make sure the connections are made and functioning.
258 EXPECT_EQ(1, subscriber.call_count());
259 EXPECT_EQ(1, subscriber2.call_count());
260 center.RemoveNotification(kTestNotification);
261 // Make sure no further handling of |kTestNotification| happens.
262 center.PublishNotification(kTestNotification,
263 Notification(kTestNotification),
264 kPublisherName);
265 EXPECT_EQ(1, subscriber.call_count()); // Should not increment.
266 EXPECT_EQ(1, subscriber2.call_count());
267 }
268
OLDNEW
« no previous file with comments | « experimental/c_salt/notification_center.cc ('k') | experimental/c_salt/notification_ptrs.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698