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

Unified Diff: jingle/notifier/listener/non_blocking_push_client_unittest.cc

Issue 10413014: [Sync] Turn notifier::PushClient into an interface (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Sync to head Created 8 years, 7 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 side-by-side diff with in-line comments
Download patch
Index: jingle/notifier/listener/non_blocking_push_client_unittest.cc
diff --git a/jingle/notifier/listener/non_blocking_push_client_unittest.cc b/jingle/notifier/listener/non_blocking_push_client_unittest.cc
new file mode 100644
index 0000000000000000000000000000000000000000..c4152259a75f05af8fd8f6042faaa8ec813f8016
--- /dev/null
+++ b/jingle/notifier/listener/non_blocking_push_client_unittest.cc
@@ -0,0 +1,139 @@
+// Copyright (c) 2012 The Chromium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+#include "jingle/notifier/listener/non_blocking_push_client.h"
+
+#include <cstddef>
+
+#include "base/compiler_specific.h"
+#include "base/memory/scoped_ptr.h"
+#include "base/message_loop.h"
+#include "jingle/notifier/base/fake_base_task.h"
+#include "jingle/notifier/listener/fake_push_client.h"
+#include "jingle/notifier/listener/fake_push_client_observer.h"
+#include "jingle/notifier/listener/push_client_observer.h"
+#include "net/url_request/url_request_test_util.h"
+#include "testing/gtest/include/gtest/gtest.h"
+
+namespace notifier {
+
+namespace {
+
+class NonBlockingPushClientTest : public testing::Test {
+ protected:
+ NonBlockingPushClientTest() : fake_push_client_(NULL) {}
+
+ virtual ~NonBlockingPushClientTest() {}
+
+ virtual void SetUp() OVERRIDE {
+ push_client_.reset(
+ new NonBlockingPushClient(
+ base::MessageLoopProxy::current(),
+ base::Bind(&NonBlockingPushClientTest::CreateFakePushClient,
+ base::Unretained(this))));
+ push_client_->AddObserver(&fake_observer_);
+ // Pump message loop to run CreateFakePushClient.
+ message_loop_.RunAllPending();
+ }
+
+ virtual void TearDown() OVERRIDE {
+ // Clear out any pending notifications before removing observers.
+ message_loop_.RunAllPending();
+ push_client_->RemoveObserver(&fake_observer_);
+ push_client_.reset();
+ // Then pump message loop to run
+ // NonBlockingPushClient::DestroyOnDelegateThread().
+ message_loop_.RunAllPending();
+ }
+
+ scoped_ptr<PushClient> CreateFakePushClient() {
+ if (fake_push_client_) {
+ ADD_FAILURE();
+ return scoped_ptr<PushClient>();
+ }
+ fake_push_client_ = new FakePushClient();
+ return scoped_ptr<PushClient>(fake_push_client_);
+ }
+
+ MessageLoop message_loop_;
+ FakePushClientObserver fake_observer_;
+ scoped_ptr<NonBlockingPushClient> push_client_;
+ // Owned by |push_client_|.
+ FakePushClient* fake_push_client_;
+};
+
+// Make sure UpdateSubscriptions() gets delegated properly.
+TEST_F(NonBlockingPushClientTest, UpdateSubscriptions) {
+ SubscriptionList subscriptions(10);
+ subscriptions[0].channel = "channel";
+ subscriptions[9].from = "from";
+
+ push_client_->UpdateSubscriptions(subscriptions);
+ EXPECT_TRUE(fake_push_client_->subscriptions().empty());
+ message_loop_.RunAllPending();
+ EXPECT_TRUE(
+ SubscriptionListsEqual(
+ fake_push_client_->subscriptions(), subscriptions));
+}
+
+// Make sure UpdateCredentials() gets delegated properly.
+TEST_F(NonBlockingPushClientTest, UpdateCredentials) {
+ const char kEmail[] = "foo@bar.com";
+ const char kToken[] = "baz";
+
+ push_client_->UpdateCredentials(kEmail, kToken);
+ EXPECT_TRUE(fake_push_client_->email().empty());
+ EXPECT_TRUE(fake_push_client_->token().empty());
+ message_loop_.RunAllPending();
+ EXPECT_EQ(kEmail, fake_push_client_->email());
+ EXPECT_EQ(kToken, fake_push_client_->token());
+}
+
+Notification MakeTestNotification() {
+ Notification notification;
+ notification.channel = "channel";
+ notification.recipients.resize(10);
+ notification.recipients[0].to = "to";
+ notification.recipients[9].user_specific_data = "user_specific_data";
+ notification.data = "data";
+ return notification;
+}
+
+// Make sure SendNotification() gets delegated properly.
+TEST_F(NonBlockingPushClientTest, SendNotification) {
+ const Notification notification = MakeTestNotification();
+
+ push_client_->SendNotification(notification);
+ EXPECT_TRUE(fake_push_client_->sent_notifications().empty());
+ message_loop_.RunAllPending();
+ ASSERT_EQ(1u, fake_push_client_->sent_notifications().size());
+ EXPECT_TRUE(
+ fake_push_client_->sent_notifications()[0].Equals(notification));
+}
+
+// Make sure notification state changes get propagated back to the
+// parent.
+TEST_F(NonBlockingPushClientTest, NotificationStateChange) {
+ EXPECT_FALSE(fake_observer_.notifications_enabled());
+ fake_push_client_->SimulateNotificationStateChange(true);
+ message_loop_.RunAllPending();
+ EXPECT_TRUE(fake_observer_.notifications_enabled());
+ fake_push_client_->SimulateNotificationStateChange(false);
+ message_loop_.RunAllPending();
+ EXPECT_FALSE(fake_observer_.notifications_enabled());
+}
+
+// Make sure incoming notifications get propagated back to the parent.
+TEST_F(NonBlockingPushClientTest, OnIncomingNotification) {
+ const Notification notification = MakeTestNotification();
+
+ fake_push_client_->SimulateIncomingNotification(notification);
+ message_loop_.RunAllPending();
+ EXPECT_TRUE(
+ fake_observer_.last_incoming_notification().Equals(notification));
+}
+
+} // namespace
+
+} // namespace notifier
« no previous file with comments | « jingle/notifier/listener/non_blocking_push_client.cc ('k') | jingle/notifier/listener/notification_defines.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698