Chromium Code Reviews| Index: chrome/browser/sync/glue/app_notification_data_type_controller_unittest.cc |
| diff --git a/chrome/browser/sync/glue/app_notification_data_type_controller_unittest.cc b/chrome/browser/sync/glue/app_notification_data_type_controller_unittest.cc |
| index 40bd305c40d43b0cd7cda2b36e28dce64ff3a789..e6ac8779cfa87e9f397aa92ce0766dec14dd73b7 100644 |
| --- a/chrome/browser/sync/glue/app_notification_data_type_controller_unittest.cc |
| +++ b/chrome/browser/sync/glue/app_notification_data_type_controller_unittest.cc |
| @@ -9,10 +9,10 @@ |
| #include "base/tracked_objects.h" |
| #include "chrome/browser/extensions/app_notification_manager.h" |
| #include "chrome/browser/extensions/extension_service.h" |
| +#include "chrome/browser/sync/api/syncable_service_fake.h" |
| #include "chrome/browser/sync/glue/app_notification_data_type_controller.h" |
| -#include "chrome/browser/sync/glue/change_processor_mock.h" |
| #include "chrome/browser/sync/glue/data_type_controller_mock.h" |
| -#include "chrome/browser/sync/glue/model_associator_mock.h" |
| +#include "chrome/browser/sync/glue/generic_change_processor_fake.h" |
| #include "chrome/browser/sync/profile_sync_components_factory_mock.h" |
| #include "chrome/browser/sync/profile_sync_service_mock.h" |
| #include "chrome/common/chrome_notification_types.h" |
| @@ -21,11 +21,6 @@ |
| #include "content/test/test_browser_thread.h" |
| #include "testing/gtest/include/gtest/gtest.h" |
| -using browser_sync::AppNotificationDataTypeController; |
| -using browser_sync::ChangeProcessorMock; |
| -using browser_sync::DataTypeController; |
| -using browser_sync::ModelAssociatorMock; |
| -using browser_sync::StartCallbackMock; |
| using content::BrowserThread; |
| using testing::_; |
| using testing::DoAll; |
| @@ -33,6 +28,9 @@ using testing::InvokeWithoutArgs; |
| using testing::Return; |
| using testing::SetArgumentPointee; |
| +namespace browser_sync { |
| +namespace { |
| + |
| class TestAppNotificationDataTypeController |
| : public AppNotificationDataTypeController { |
| public: |
| @@ -67,14 +65,12 @@ class SyncAppNotificationDataTypeControllerTest |
| file_thread_.Start(); |
| profile_.reset(new TestingProfile()); |
| - model_associator_ = new ModelAssociatorMock(); |
| - change_processor_ = new ChangeProcessorMock(); |
| - profile_sync_factory_.reset(new ProfileSyncComponentsFactoryMock( |
| - model_associator_, change_processor_)); |
| + profile_sync_factory_.reset(new ProfileSyncComponentsFactoryMock()); |
| app_notif_dtc_ = new TestAppNotificationDataTypeController( |
| profile_sync_factory_.get(), |
| profile_.get(), |
| &service_); |
| + SetStartExpectations(); |
| } |
| virtual void TearDown() { } |
| @@ -105,21 +101,22 @@ class SyncAppNotificationDataTypeControllerTest |
| WaitForFileThread(); |
| } |
| - void SetAssociateExpectations() { |
| - EXPECT_CALL(*model_associator_, CryptoReadyIfNecessary()). |
| - WillRepeatedly(Return(true)); |
| + void SetStartExpectations() { |
| + // Ownership gets passed to caller of CreateGenericChangeProcessor. |
| + change_processor_ = new GenericChangeProcessorFake(); |
| EXPECT_CALL(*profile_sync_factory_, |
| - CreateAppNotificationSyncComponents(_, _)); |
| - EXPECT_CALL(*model_associator_, SyncModelHasUserCreatedNodes(_)). |
| - WillRepeatedly(DoAll(SetArgumentPointee<0>(true), Return(true))); |
| - EXPECT_CALL(*model_associator_, AssociateModels(_)). |
| - WillRepeatedly(Return(true)); |
| + GetSyncableServiceForType(syncable::APP_NOTIFICATIONS)). |
| + WillOnce(Return(syncable_service_.AsWeakPtr())); |
| + EXPECT_CALL(*profile_sync_factory_, CreateGenericChangeProcessor(_, _, _)). |
|
akalin
2012/03/03 01:15:15
worth it to create a fake profile sync factory als
Nicolas Zea
2012/03/05 21:59:30
Switched to using scoped ptr instead.
|
| + WillOnce(Return(change_processor_)); |
| + } |
| + |
| + void SetActivateExpectations() { |
| EXPECT_CALL(service_, ActivateDataType(_, _, _)); |
| } |
| void SetStopExpectations() { |
| EXPECT_CALL(service_, DeactivateDataType(_)); |
| - EXPECT_CALL(*model_associator_, DisassociateModels(_)); |
| } |
| void PumpLoop() { |
| @@ -133,8 +130,8 @@ class SyncAppNotificationDataTypeControllerTest |
| scoped_refptr<TestAppNotificationDataTypeController> app_notif_dtc_; |
| scoped_ptr<ProfileSyncComponentsFactoryMock> profile_sync_factory_; |
| ProfileSyncServiceMock service_; |
| - ModelAssociatorMock* model_associator_; |
| - ChangeProcessorMock* change_processor_; |
| + GenericChangeProcessorFake* change_processor_; |
| + SyncableServiceFake syncable_service_; |
| StartCallbackMock start_callback_; |
| }; |
| @@ -142,9 +139,9 @@ class SyncAppNotificationDataTypeControllerTest |
| // successfully. |
| TEST_F(SyncAppNotificationDataTypeControllerTest, StartManagerReady) { |
| InitAndLoadManager(); |
| + SetActivateExpectations(); |
| EXPECT_EQ(DataTypeController::NOT_RUNNING, app_notif_dtc_->state()); |
| - SetAssociateExpectations(); |
| EXPECT_CALL(start_callback_, Run(DataTypeController::OK, _)); |
| app_notif_dtc_->Start( |
| base::Bind(&StartCallbackMock::Run, base::Unretained(&start_callback_))); |
| @@ -154,9 +151,10 @@ TEST_F(SyncAppNotificationDataTypeControllerTest, StartManagerReady) { |
| // When notification manager is not ready, sync assocation should wait |
| // until loaded event is seen. |
| TEST_F(SyncAppNotificationDataTypeControllerTest, StartManagerNotReady) { |
| - EXPECT_EQ(DataTypeController::NOT_RUNNING, app_notif_dtc_->state()); |
| - SetAssociateExpectations(); |
| + SetActivateExpectations(); |
| EXPECT_CALL(start_callback_, Run(DataTypeController::OK, _)); |
| + |
| + EXPECT_EQ(DataTypeController::NOT_RUNNING, app_notif_dtc_->state()); |
| app_notif_dtc_->Start( |
| base::Bind(&StartCallbackMock::Run, base::Unretained(&start_callback_))); |
| EXPECT_EQ(DataTypeController::MODEL_STARTING, app_notif_dtc_->state()); |
| @@ -169,85 +167,67 @@ TEST_F(SyncAppNotificationDataTypeControllerTest, StartManagerNotReady) { |
| app_notif_dtc_->GetAppNotificationManager()), |
| content::NotificationService::NoDetails()); |
| EXPECT_EQ(DataTypeController::RUNNING, app_notif_dtc_->state()); |
| + EXPECT_TRUE(syncable_service_.syncing()); |
| } |
| TEST_F(SyncAppNotificationDataTypeControllerTest, StartFirstRun) { |
| InitAndLoadManager(); |
| - SetAssociateExpectations(); |
| - EXPECT_CALL(*model_associator_, SyncModelHasUserCreatedNodes(_)). |
| - WillRepeatedly(DoAll(SetArgumentPointee<0>(false), Return(true))); |
| + SetActivateExpectations(); |
| EXPECT_CALL(start_callback_, Run(DataTypeController::OK_FIRST_RUN, _)); |
| - app_notif_dtc_->Start( |
| - base::Bind(&StartCallbackMock::Run, base::Unretained(&start_callback_))); |
| -} |
| + change_processor_->set_has_nodes(false); |
| -TEST_F(SyncAppNotificationDataTypeControllerTest, StartOk) { |
| - InitAndLoadManager(); |
| - SetAssociateExpectations(); |
| - EXPECT_CALL(*model_associator_, SyncModelHasUserCreatedNodes(_)). |
| - WillRepeatedly(DoAll(SetArgumentPointee<0>(true), Return(true))); |
| - EXPECT_CALL(start_callback_, Run(DataTypeController::OK, _)); |
| app_notif_dtc_->Start( |
| base::Bind(&StartCallbackMock::Run, base::Unretained(&start_callback_))); |
| + EXPECT_EQ(DataTypeController::RUNNING, app_notif_dtc_->state()); |
| + EXPECT_TRUE(syncable_service_.syncing()); |
| } |
| TEST_F(SyncAppNotificationDataTypeControllerTest, StartAssociationFailed) { |
| InitAndLoadManager(); |
| - EXPECT_CALL(*profile_sync_factory_, |
| - CreateAppNotificationSyncComponents(_, _)); |
| - EXPECT_CALL(*model_associator_, CryptoReadyIfNecessary()). |
| - WillRepeatedly(Return(true)); |
| - EXPECT_CALL(*model_associator_, SyncModelHasUserCreatedNodes(_)). |
| - WillRepeatedly(DoAll(SetArgumentPointee<0>(true), Return(true))); |
| - EXPECT_CALL(*model_associator_, AssociateModels(_)). |
| - WillRepeatedly(DoAll( |
| - browser_sync::SetSyncError(syncable::APP_NOTIFICATIONS), |
| - Return(false))); |
| - |
| EXPECT_CALL(start_callback_, |
| Run(DataTypeController::ASSOCIATION_FAILED, _)); |
| + syncable_service_.set_associate_success(false); |
| + |
| app_notif_dtc_->Start( |
| base::Bind(&StartCallbackMock::Run, base::Unretained(&start_callback_))); |
| EXPECT_EQ(DataTypeController::DISABLED, app_notif_dtc_->state()); |
| + EXPECT_FALSE(syncable_service_.syncing()); |
| } |
| TEST_F(SyncAppNotificationDataTypeControllerTest, |
| StartAssociationTriggersUnrecoverableError) { |
| InitAndLoadManager(); |
| - // Set up association to fail with an unrecoverable error. |
| - EXPECT_CALL(*profile_sync_factory_, |
| - CreateAppNotificationSyncComponents(_, _)); |
| - EXPECT_CALL(*model_associator_, CryptoReadyIfNecessary()). |
| - WillRepeatedly(Return(true)); |
| - EXPECT_CALL(*model_associator_, SyncModelHasUserCreatedNodes(_)). |
| - WillRepeatedly(DoAll(SetArgumentPointee<0>(false), Return(false))); |
| EXPECT_CALL(start_callback_, |
| Run(DataTypeController::UNRECOVERABLE_ERROR, _)); |
| + // Set up association to fail with an unrecoverable error. |
| + change_processor_->set_has_nodes_success(false); |
| + |
| app_notif_dtc_->Start( |
| base::Bind(&StartCallbackMock::Run, base::Unretained(&start_callback_))); |
| EXPECT_EQ(DataTypeController::NOT_RUNNING, app_notif_dtc_->state()); |
| + EXPECT_FALSE(syncable_service_.syncing()); |
| } |
| TEST_F(SyncAppNotificationDataTypeControllerTest, Stop) { |
| InitAndLoadManager(); |
| - SetAssociateExpectations(); |
| + SetActivateExpectations(); |
| SetStopExpectations(); |
| + EXPECT_CALL(start_callback_, Run(DataTypeController::OK, _)); |
| EXPECT_EQ(DataTypeController::NOT_RUNNING, app_notif_dtc_->state()); |
| - |
| - EXPECT_CALL(start_callback_, Run(DataTypeController::OK, _)); |
| + EXPECT_FALSE(syncable_service_.syncing()); |
| app_notif_dtc_->Start( |
| base::Bind(&StartCallbackMock::Run, base::Unretained(&start_callback_))); |
| EXPECT_EQ(DataTypeController::RUNNING, app_notif_dtc_->state()); |
| + EXPECT_TRUE(syncable_service_.syncing()); |
| app_notif_dtc_->Stop(); |
| EXPECT_EQ(DataTypeController::NOT_RUNNING, app_notif_dtc_->state()); |
| + EXPECT_FALSE(syncable_service_.syncing()); |
| } |
| TEST_F(SyncAppNotificationDataTypeControllerTest, OnUnrecoverableError) { |
| InitAndLoadManager(); |
| - SetAssociateExpectations(); |
| - EXPECT_CALL(*model_associator_, SyncModelHasUserCreatedNodes(_)). |
| - WillRepeatedly(DoAll(SetArgumentPointee<0>(true), Return(true))); |
| + SetActivateExpectations(); |
| EXPECT_CALL(service_, OnUnrecoverableError(_, _)). |
| WillOnce(InvokeWithoutArgs(app_notif_dtc_.get(), |
| &AppNotificationDataTypeController::Stop)); |
| @@ -256,7 +236,14 @@ TEST_F(SyncAppNotificationDataTypeControllerTest, OnUnrecoverableError) { |
| EXPECT_CALL(start_callback_, Run(DataTypeController::OK, _)); |
| app_notif_dtc_->Start( |
| base::Bind(&StartCallbackMock::Run, base::Unretained(&start_callback_))); |
| + EXPECT_EQ(DataTypeController::RUNNING, app_notif_dtc_->state()); |
| + EXPECT_TRUE(syncable_service_.syncing()); |
| // This should cause app_notif_dtc_->Stop() to be called. |
| app_notif_dtc_->OnUnrecoverableError(FROM_HERE, "Test"); |
| PumpLoop(); |
| + EXPECT_EQ(DataTypeController::NOT_RUNNING, app_notif_dtc_->state()); |
| + EXPECT_FALSE(syncable_service_.syncing()); |
| } |
| + |
| +} // namespace |
| +} // namespace browser_sync |