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 |
deleted file mode 100644 |
index 8a3964b40bb8c6b3d785d39873f829832e17612f..0000000000000000000000000000000000000000 |
--- a/chrome/browser/sync/glue/app_notification_data_type_controller_unittest.cc |
+++ /dev/null |
@@ -1,283 +0,0 @@ |
-// 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 "base/bind.h" |
-#include "base/bind_helpers.h" |
-#include "base/callback.h" |
-#include "base/memory/scoped_ptr.h" |
-#include "base/tracked_objects.h" |
-#include "chrome/browser/extensions/app_notification_manager.h" |
-#include "chrome/browser/extensions/extension_service.h" |
-#include "chrome/browser/sync/glue/app_notification_data_type_controller.h" |
-#include "chrome/browser/sync/glue/data_type_controller_mock.h" |
-#include "chrome/browser/sync/glue/fake_generic_change_processor.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" |
-#include "chrome/test/base/testing_profile.h" |
-#include "content/public/browser/notification_service.h" |
-#include "content/public/test/test_browser_thread.h" |
-#include "sync/api/fake_syncable_service.h" |
-#include "testing/gtest/include/gtest/gtest.h" |
- |
-using content::BrowserThread; |
-using testing::_; |
-using testing::DoAll; |
-using testing::InvokeWithoutArgs; |
-using testing::Return; |
-using testing::SetArgumentPointee; |
- |
-namespace browser_sync { |
- |
-class TestAppNotificationDataTypeController |
- : public AppNotificationDataTypeController { |
- public: |
- TestAppNotificationDataTypeController( |
- ProfileSyncComponentsFactory* profile_sync_factory, |
- Profile* profile, |
- ProfileSyncService* sync_service) |
- : AppNotificationDataTypeController(profile_sync_factory, |
- profile, |
- sync_service), |
- manager_(new extensions::AppNotificationManager(profile_)) { |
- } |
- |
- virtual extensions::AppNotificationManager* |
- GetAppNotificationManager() OVERRIDE { |
- return manager_.get(); |
- } |
- |
- private: |
- virtual ~TestAppNotificationDataTypeController() {} |
- |
- scoped_refptr<extensions::AppNotificationManager> manager_; |
-}; |
- |
-namespace { |
- |
-ACTION(MakeSharedChangeProcessor) { |
- return new SharedChangeProcessor(); |
-} |
- |
-ACTION_P(ReturnAndRelease, change_processor) { |
- return change_processor->release(); |
-} |
- |
-class SyncAppNotificationDataTypeControllerTest |
- : public testing::Test { |
- public: |
- SyncAppNotificationDataTypeControllerTest() |
- : ui_thread_(BrowserThread::UI, &ui_loop_), |
- file_thread_(BrowserThread::FILE), |
- change_processor_(new FakeGenericChangeProcessor()) { |
- } |
- |
- virtual void SetUp() { |
- ASSERT_TRUE(BrowserThread::CurrentlyOn(BrowserThread::UI)); |
- file_thread_.Start(); |
- |
- profile_.reset(new TestingProfile()); |
- profile_sync_factory_.reset(new ProfileSyncComponentsFactoryMock()); |
- app_notif_dtc_ = new TestAppNotificationDataTypeController( |
- profile_sync_factory_.get(), |
- profile_.get(), |
- &service_); |
- } |
- |
- virtual void TearDown() { |
- // Must be done before we pump the loop. |
- syncable_service_.StopSyncing(syncer::APP_NOTIFICATIONS); |
- app_notif_dtc_ = NULL; |
- PumpLoop(); |
- } |
- |
- protected: |
- // Waits until the file thread executes all tasks queued up so far. |
- static void WaitForFileThread() { |
- ASSERT_TRUE(BrowserThread::CurrentlyOn(BrowserThread::UI)); |
- // Post a task on the file thread that will post a task back on the |
- // UI thread to quit the loop. |
- BrowserThread::PostTask(BrowserThread::FILE, |
- FROM_HERE, |
- base::Bind(&PostQuitToUIThread)); |
- // Now run the message loop until quit is called. |
- MessageLoop::current()->Run(); |
- } |
- |
- // Posts quit task on the UI thread. |
- static void PostQuitToUIThread() { |
- ASSERT_TRUE(BrowserThread::CurrentlyOn(BrowserThread::FILE)); |
- BrowserThread::PostTask(BrowserThread::UI, |
- FROM_HERE, |
- MessageLoop::QuitClosure()); |
- } |
- |
- void InitAndLoadManager() { |
- app_notif_dtc_->GetAppNotificationManager()->Init(); |
- WaitForFileThread(); |
- } |
- |
- void SetStartExpectations() { |
- EXPECT_CALL(model_load_callback_, Run(_, _)); |
- // Ownership gets passed to caller of CreateGenericChangeProcessor. |
- EXPECT_CALL(*profile_sync_factory_, |
- GetSyncableServiceForType(syncer::APP_NOTIFICATIONS)). |
- WillOnce(Return(syncable_service_.AsWeakPtr())); |
- EXPECT_CALL(*profile_sync_factory_, CreateSharedChangeProcessor()). |
- WillOnce(MakeSharedChangeProcessor()); |
- EXPECT_CALL(*profile_sync_factory_, |
- CreateGenericChangeProcessor(_, _, _, _)). |
- WillOnce(ReturnAndRelease(&change_processor_)); |
- } |
- |
- void SetActivateExpectations() { |
- EXPECT_CALL(service_, ActivateDataType(_, _, _)); |
- } |
- |
- void SetStopExpectations() { |
- EXPECT_CALL(service_, DeactivateDataType(_)); |
- } |
- |
- void Start() { |
- app_notif_dtc_->LoadModels( |
- base::Bind(&ModelLoadCallbackMock::Run, |
- base::Unretained(&model_load_callback_))); |
- app_notif_dtc_->StartAssociating( |
- base::Bind(&StartCallbackMock::Run, |
- base::Unretained(&start_callback_))); |
- } |
- |
- void PumpLoop() { |
- ui_loop_.RunUntilIdle(); |
- } |
- |
- MessageLoop ui_loop_; |
- content::TestBrowserThread ui_thread_; |
- content::TestBrowserThread file_thread_; |
- scoped_ptr<TestingProfile> profile_; |
- scoped_refptr<TestAppNotificationDataTypeController> app_notif_dtc_; |
- scoped_ptr<ProfileSyncComponentsFactoryMock> profile_sync_factory_; |
- ProfileSyncServiceMock service_; |
- scoped_ptr<FakeGenericChangeProcessor> change_processor_; |
- syncer::FakeSyncableService syncable_service_; |
- StartCallbackMock start_callback_; |
- ModelLoadCallbackMock model_load_callback_; |
-}; |
- |
-// When notification manager is ready, sync association should happen |
-// successfully. |
-TEST_F(SyncAppNotificationDataTypeControllerTest, StartManagerReady) { |
- SetStartExpectations(); |
- InitAndLoadManager(); |
- SetActivateExpectations(); |
- |
- EXPECT_EQ(DataTypeController::NOT_RUNNING, app_notif_dtc_->state()); |
- EXPECT_CALL(start_callback_, Run(DataTypeController::OK, _, _)); |
- Start(); |
- EXPECT_EQ(DataTypeController::RUNNING, app_notif_dtc_->state()); |
-} |
- |
-// When notification manager is not ready, sync assocation should wait |
-// until loaded event is seen. |
-TEST_F(SyncAppNotificationDataTypeControllerTest, StartManagerNotReady) { |
- EXPECT_CALL(*profile_sync_factory_, CreateSharedChangeProcessor()). |
- WillOnce(MakeSharedChangeProcessor()); |
- EXPECT_CALL(model_load_callback_, Run(_, _)); |
- |
- EXPECT_EQ(DataTypeController::NOT_RUNNING, app_notif_dtc_->state()); |
- app_notif_dtc_->LoadModels( |
- base::Bind(&ModelLoadCallbackMock::Run, |
- base::Unretained(&model_load_callback_))); |
- |
- EXPECT_EQ(DataTypeController::MODEL_STARTING, app_notif_dtc_->state()); |
- |
- // Unblock file thread and wait for it to finish all tasks. |
- // Send the notification that the TemplateURLService has started. |
- content::NotificationService::current()->Notify( |
- chrome::NOTIFICATION_APP_NOTIFICATION_MANAGER_LOADED, |
- content::Source<extensions::AppNotificationManager>( |
- app_notif_dtc_->GetAppNotificationManager()), |
- content::NotificationService::NoDetails()); |
- EXPECT_EQ(DataTypeController::MODEL_LOADED, app_notif_dtc_->state()); |
-} |
- |
-TEST_F(SyncAppNotificationDataTypeControllerTest, StartFirstRun) { |
- SetStartExpectations(); |
- InitAndLoadManager(); |
- SetActivateExpectations(); |
- EXPECT_CALL(start_callback_, Run(DataTypeController::OK_FIRST_RUN, _, _)); |
- change_processor_->set_sync_model_has_user_created_nodes(false); |
- |
- Start(); |
- EXPECT_EQ(DataTypeController::RUNNING, app_notif_dtc_->state()); |
- EXPECT_TRUE(syncable_service_.syncing()); |
-} |
- |
-TEST_F(SyncAppNotificationDataTypeControllerTest, StartAssociationFailed) { |
- SetStartExpectations(); |
- InitAndLoadManager(); |
- EXPECT_CALL(start_callback_, |
- Run(DataTypeController::ASSOCIATION_FAILED, _, _)); |
- syncable_service_.set_merge_data_and_start_syncing_error( |
- syncer::SyncError(FROM_HERE, "Error", syncer::APP_NOTIFICATIONS)); |
- |
- Start(); |
- EXPECT_EQ(DataTypeController::DISABLED, app_notif_dtc_->state()); |
- EXPECT_FALSE(syncable_service_.syncing()); |
-} |
- |
-TEST_F(SyncAppNotificationDataTypeControllerTest, |
- StartAssociationTriggersUnrecoverableError) { |
- SetStartExpectations(); |
- InitAndLoadManager(); |
- EXPECT_CALL(start_callback_, |
- Run(DataTypeController::UNRECOVERABLE_ERROR, _, _)); |
- // Set up association to fail with an unrecoverable error. |
- change_processor_->set_sync_model_has_user_created_nodes_success(false); |
- |
- Start(); |
- EXPECT_EQ(DataTypeController::NOT_RUNNING, app_notif_dtc_->state()); |
- EXPECT_FALSE(syncable_service_.syncing()); |
-} |
- |
-TEST_F(SyncAppNotificationDataTypeControllerTest, Stop) { |
- SetStartExpectations(); |
- InitAndLoadManager(); |
- SetActivateExpectations(); |
- SetStopExpectations(); |
- EXPECT_CALL(start_callback_, Run(DataTypeController::OK, _, _)); |
- |
- EXPECT_EQ(DataTypeController::NOT_RUNNING, app_notif_dtc_->state()); |
- EXPECT_FALSE(syncable_service_.syncing()); |
- Start(); |
- 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, |
- OnSingleDatatypeUnrecoverableError) { |
- SetStartExpectations(); |
- InitAndLoadManager(); |
- SetActivateExpectations(); |
- EXPECT_CALL(service_, DisableBrokenDatatype(_, _, _)). |
- WillOnce(InvokeWithoutArgs(app_notif_dtc_.get(), |
- &AppNotificationDataTypeController::Stop)); |
- SetStopExpectations(); |
- |
- EXPECT_CALL(start_callback_, Run(DataTypeController::OK, _, _)); |
- Start(); |
- 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_->OnSingleDatatypeUnrecoverableError(FROM_HERE, "Test"); |
- PumpLoop(); |
- EXPECT_EQ(DataTypeController::NOT_RUNNING, app_notif_dtc_->state()); |
- EXPECT_FALSE(syncable_service_.syncing()); |
-} |
- |
-} // namespace |
-} // namespace browser_sync |