Index: sync/notifier/chrome_invalidation_client_unittest.cc |
diff --git a/sync/notifier/chrome_invalidation_client_unittest.cc b/sync/notifier/chrome_invalidation_client_unittest.cc |
index f1470ac5eae88cb9aca0e371c59fb3c426aeff7d..7fa94ff8e86a69fe1a18365184eed3c5b1c1aa99 100644 |
--- a/sync/notifier/chrome_invalidation_client_unittest.cc |
+++ b/sync/notifier/chrome_invalidation_client_unittest.cc |
@@ -20,6 +20,7 @@ |
namespace sync_notifier { |
using ::testing::_; |
+using ::testing::InSequence; |
using ::testing::Return; |
using ::testing::StrictMock; |
@@ -44,7 +45,8 @@ class MockInvalidationClient : public invalidation::InvalidationClient { |
class MockListener : public ChromeInvalidationClient::Listener { |
public: |
MOCK_METHOD1(OnInvalidate, void(const syncable::ModelTypePayloadMap&)); |
- MOCK_METHOD1(OnSessionStatusChanged, void(bool)); |
+ MOCK_METHOD0(OnNotificationsEnabled, void()); |
+ MOCK_METHOD1(OnNotificationsDisabled, void(NotificationsDisabledReason)); |
}; |
} // namespace |
@@ -52,9 +54,8 @@ class MockListener : public ChromeInvalidationClient::Listener { |
class ChromeInvalidationClientTest : public testing::Test { |
protected: |
ChromeInvalidationClientTest() |
- : client_( |
- scoped_ptr<notifier::PushClient>( |
- new notifier::FakePushClient())) {} |
+ : fake_push_client_(new notifier::FakePushClient()), |
+ client_(scoped_ptr<notifier::PushClient>(fake_push_client_)) {} |
virtual void SetUp() { |
client_.Start(kClientId, kClientInfo, kState, |
@@ -116,6 +117,7 @@ class ChromeInvalidationClientTest : public testing::Test { |
StrictMock<MockInvalidationStateTracker> |
mock_invalidation_state_tracker_; |
StrictMock<MockInvalidationClient> mock_invalidation_client_; |
+ notifier::FakePushClient* const fake_push_client_; |
ChromeInvalidationClient client_; |
}; |
@@ -159,12 +161,6 @@ TEST_F(ChromeInvalidationClientTest, InvalidateWithPayload) { |
FireInvalidate("PREFERENCE", 1, "payload"); |
} |
-TEST_F(ChromeInvalidationClientTest, WriteState) { |
- EXPECT_CALL(mock_invalidation_state_tracker_, |
- SetInvalidationState(kNewState)); |
- client_.WriteState(kNewState); |
-} |
- |
TEST_F(ChromeInvalidationClientTest, InvalidateVersion) { |
using ::testing::Mock; |
@@ -266,6 +262,74 @@ TEST_F(ChromeInvalidationClientTest, RegisterTypes) { |
FireInvalidateAll(); |
} |
-// TODO(akalin): Flesh out unit tests. |
+TEST_F(ChromeInvalidationClientTest, WriteState) { |
+ EXPECT_CALL(mock_invalidation_state_tracker_, |
+ SetInvalidationState(kNewState)); |
+ client_.WriteState(kNewState); |
+} |
+ |
+TEST_F(ChromeInvalidationClientTest, StateChangesNotReady) { |
+ InSequence dummy; |
+ EXPECT_CALL(mock_listener_, |
+ OnNotificationsDisabled(TRANSIENT_NOTIFICATION_ERROR)); |
+ EXPECT_CALL(mock_listener_, |
+ OnNotificationsDisabled(NOTIFICATION_CREDENTIALS_REJECTED)); |
+ EXPECT_CALL(mock_listener_, |
+ OnNotificationsDisabled(TRANSIENT_NOTIFICATION_ERROR)); |
+ |
+ fake_push_client_->DisableNotifications( |
+ notifier::TRANSIENT_NOTIFICATION_ERROR); |
+ fake_push_client_->DisableNotifications( |
+ notifier::NOTIFICATION_CREDENTIALS_REJECTED); |
+ fake_push_client_->EnableNotifications(); |
+} |
+ |
+TEST_F(ChromeInvalidationClientTest, StateChangesReady) { |
+ InSequence dummy; |
+ EXPECT_CALL(mock_listener_, |
+ OnNotificationsDisabled(TRANSIENT_NOTIFICATION_ERROR)); |
+ EXPECT_CALL(mock_listener_, OnNotificationsEnabled()); |
+ EXPECT_CALL(mock_listener_, |
+ OnNotificationsDisabled(TRANSIENT_NOTIFICATION_ERROR)); |
+ EXPECT_CALL(mock_listener_, |
+ OnNotificationsDisabled(NOTIFICATION_CREDENTIALS_REJECTED)); |
+ EXPECT_CALL(mock_listener_, OnNotificationsEnabled()); |
+ |
+ fake_push_client_->EnableNotifications(); |
+ client_.Ready(NULL); |
+ fake_push_client_->DisableNotifications( |
+ notifier::TRANSIENT_NOTIFICATION_ERROR); |
+ fake_push_client_->DisableNotifications( |
+ notifier::NOTIFICATION_CREDENTIALS_REJECTED); |
+ fake_push_client_->EnableNotifications(); |
+} |
+ |
+TEST_F(ChromeInvalidationClientTest, StateChangesAuthError) { |
+ InSequence dummy; |
+ EXPECT_CALL(mock_listener_, |
+ OnNotificationsDisabled(TRANSIENT_NOTIFICATION_ERROR)); |
+ EXPECT_CALL(mock_listener_, OnNotificationsEnabled()); |
+ EXPECT_CALL(mock_listener_, |
+ OnNotificationsDisabled(NOTIFICATION_CREDENTIALS_REJECTED)) |
+ .Times(4); |
+ EXPECT_CALL(mock_listener_, OnNotificationsEnabled()); |
+ |
+ fake_push_client_->EnableNotifications(); |
+ client_.Ready(NULL); |
+ |
+ client_.InformError( |
+ NULL, |
+ invalidation::ErrorInfo( |
+ invalidation::ErrorReason::AUTH_FAILURE, |
+ false /* is_transient */, |
+ "auth error", |
+ invalidation::ErrorContext())); |
+ fake_push_client_->DisableNotifications( |
+ notifier::TRANSIENT_NOTIFICATION_ERROR); |
+ fake_push_client_->DisableNotifications( |
+ notifier::NOTIFICATION_CREDENTIALS_REJECTED); |
+ fake_push_client_->EnableNotifications(); |
+ client_.Ready(NULL); |
+} |
} // namespace sync_notifier |