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

Unified Diff: chrome/browser/extensions/app_notification_manager_sync_unittest.cc

Issue 12680004: Remove chrome/ code to handle App Notifications (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Fix merge conflicts. Created 7 years, 9 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: chrome/browser/extensions/app_notification_manager_sync_unittest.cc
diff --git a/chrome/browser/extensions/app_notification_manager_sync_unittest.cc b/chrome/browser/extensions/app_notification_manager_sync_unittest.cc
deleted file mode 100644
index c5f1d63203395a6ebcf349e667ee51826a849cdb..0000000000000000000000000000000000000000
--- a/chrome/browser/extensions/app_notification_manager_sync_unittest.cc
+++ /dev/null
@@ -1,759 +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/memory/scoped_ptr.h"
-#include "base/message_loop.h"
-#include "base/strings/string_number_conversions.h"
-#include "chrome/browser/extensions/app_notification.h"
-#include "chrome/browser/extensions/app_notification_manager.h"
-#include "chrome/test/base/testing_profile.h"
-#include "content/public/test/test_browser_thread.h"
-#include "sync/api/sync_error_factory.h"
-#include "sync/api/sync_error_factory_mock.h"
-#include "sync/protocol/app_notification_specifics.pb.h"
-#include "sync/protocol/sync.pb.h"
-#include "testing/gtest/include/gtest/gtest.h"
-
-using content::BrowserThread;
-using ::testing::_;
-using ::testing::Return;
-
-namespace {
-
-// Extract notification guid from syncer::SyncData.
-std::string GetGuid(const syncer::SyncData& sync_data) {
- return sync_data.GetSpecifics().app_notification().guid();
-}
-
-// Dummy SyncChangeProcessor used to help review what SyncChanges are pushed
-// back up to Sync.
-class TestChangeProcessor : public syncer::SyncChangeProcessor {
- public:
- TestChangeProcessor() { }
- virtual ~TestChangeProcessor() { }
-
- // Store a copy of all the changes passed in so we can examine them later.
- virtual syncer::SyncError ProcessSyncChanges(
- const tracked_objects::Location& from_here,
- const syncer::SyncChangeList& change_list) OVERRIDE {
- // change_map_.erase(change_map_.begin(), change_map_.end());
- for (syncer::SyncChangeList::const_iterator iter = change_list.begin();
- iter != change_list.end(); ++iter) {
- change_map_[GetGuid(iter->sync_data())] = *iter;
- }
-
- return syncer::SyncError();
- }
-
- bool ContainsGuid(const std::string& guid) {
- return change_map_.find(guid) != change_map_.end();
- }
-
- syncer::SyncChange GetChangeByGuid(const std::string& guid) {
- DCHECK(ContainsGuid(guid));
- return change_map_[guid];
- }
-
- size_t change_list_size() { return change_map_.size(); }
-
- private:
- // Track the changes received in ProcessSyncChanges.
- std::map<std::string, syncer::SyncChange> change_map_;
-
- DISALLOW_COPY_AND_ASSIGN(TestChangeProcessor);
-};
-
-class SyncChangeProcessorDelegate : public syncer::SyncChangeProcessor {
- public:
- explicit SyncChangeProcessorDelegate(syncer::SyncChangeProcessor* recipient)
- : recipient_(recipient) {
- DCHECK(recipient_);
- }
- virtual ~SyncChangeProcessorDelegate() {}
-
- // syncer::SyncChangeProcessor implementation.
- virtual syncer::SyncError ProcessSyncChanges(
- const tracked_objects::Location& from_here,
- const syncer::SyncChangeList& change_list) OVERRIDE {
- return recipient_->ProcessSyncChanges(from_here, change_list);
- }
-
- private:
- // The recipient of all sync changes.
- syncer::SyncChangeProcessor* recipient_;
-
- DISALLOW_COPY_AND_ASSIGN(SyncChangeProcessorDelegate);
-};
-
-} // namespace
-
-namespace extensions {
-
-class AppNotificationManagerSyncTest : public testing::Test {
- public:
- AppNotificationManagerSyncTest()
- : ui_thread_(BrowserThread::UI, &ui_loop_),
- file_thread_(BrowserThread::FILE),
- sync_processor_(new TestChangeProcessor),
- sync_processor_delegate_(new SyncChangeProcessorDelegate(
- sync_processor_.get())) {}
-
- virtual ~AppNotificationManagerSyncTest() {
- model_ = NULL;
- }
-
- virtual void SetUp() {
- ASSERT_TRUE(BrowserThread::CurrentlyOn(BrowserThread::UI));
- file_thread_.Start();
-
- ASSERT_TRUE(temp_dir_.CreateUniqueTempDir());
- profile_.reset(new TestingProfile(temp_dir_.path()));
- model_ = new AppNotificationManager(profile_.get());
- model_->Init();
-
- WaitForFileThread();
- ASSERT_TRUE(model_->loaded());
- }
-
- virtual void TearDown() {
- WaitForFileThread();
- }
-
- static void PostQuitToUIThread() {
- BrowserThread::PostTask(BrowserThread::UI,
- FROM_HERE,
- MessageLoop::QuitClosure());
- }
-
- static void WaitForFileThread() {
- BrowserThread::PostTask(BrowserThread::FILE,
- FROM_HERE,
- base::Bind(&PostQuitToUIThread));
- MessageLoop::current()->Run();
- }
-
- AppNotificationManager* model() { return model_.get(); }
- TestChangeProcessor* processor() { return sync_processor_.get(); }
-
- scoped_ptr<syncer::SyncChangeProcessor> PassProcessor() {
- return sync_processor_delegate_.PassAs<syncer::SyncChangeProcessor>();
- }
-
- // Creates a notification whose properties are set from the given integer.
- static AppNotification* CreateNotification(int suffix) {
- return CreateNotification(false, suffix);
- }
- static AppNotification* CreateNotification(bool is_local, int suffix) {
- std::string s = base::IntToString(suffix);
- return CreateNotification(
- is_local, suffix, "guid" + s, "ext" + s, "text" + s, "body" + s,
- "http://www.url" + s + ".com", "link text " + s);
- }
- static AppNotification* CreateNotification(
- bool is_local, int suffix, const std::string& extension_id) {
- std::string s = base::IntToString(suffix);
- return CreateNotification(
- is_local, suffix, "guid" + s, extension_id, "text" + s, "body" + s,
- "http://www.url" + s + ".com", "link text " + s);
- }
-
- // Creates a notification whose properties are set from the given integer
- // but does not set link url and link text.
- static AppNotification* CreateNotificationNoLink(int suffix) {
- return CreateNotificationNoLink(false, suffix);
- }
- static AppNotification* CreateNotificationNoLink(bool is_local, int suffix) {
- std::string s = base::IntToString(suffix);
- return CreateNotification(
- is_local, suffix,
- "guid" + s, "ext" + s, "text" + s, "body" + s, "", "");
- }
-
- // link_url and link_text are only set if the passed in values are not empty.
- static AppNotification* CreateNotification(bool is_local,
- int64 time,
- const std::string& guid,
- const std::string& extension_id,
- const std::string& title,
- const std::string& body,
- const std::string& link_url,
- const std::string& link_text) {
- AppNotification* notif = new AppNotification(
- is_local, base::Time::FromInternalValue(time),
- guid, extension_id, title, body);
- if (!link_url.empty())
- notif->set_link_url(GURL(link_url));
- if (!link_text.empty())
- notif->set_link_text(link_text);
- return notif;
- }
-
- static syncer::SyncData CreateSyncData(int suffix) {
- scoped_ptr<AppNotification> notif(CreateNotification(suffix));
- return AppNotificationManager::CreateSyncDataFromNotification(*notif);
- }
- static syncer::SyncData CreateSyncData(
- int suffix, const std::string& extension_id) {
- scoped_ptr<AppNotification> notif(
- CreateNotification(false, suffix, extension_id));
- return AppNotificationManager::CreateSyncDataFromNotification(*notif);
- }
-
- // Helper to create syncer::SyncChange. Takes ownership of |notif|.
- static syncer::SyncChange CreateSyncChange(
- syncer::SyncChange::SyncChangeType type,
- AppNotification* notif) {
- // Take control of notif to clean it up after we create data out of it.
- scoped_ptr<AppNotification> scoped_notif(notif);
- return syncer::SyncChange(
- FROM_HERE,
- type,
- AppNotificationManager::CreateSyncDataFromNotification(*notif));
- }
-
- void AssertSyncChange(const syncer::SyncChange& change,
- syncer::SyncChange::SyncChangeType type,
- const AppNotification& notif) {
- ASSERT_EQ(type, change.change_type());
- scoped_ptr<AppNotification> notif2(
- AppNotificationManager::CreateNotificationFromSyncData(
- change.sync_data()));
- ASSERT_TRUE(notif.Equals(*notif2));
- }
-
- protected:
- MessageLoop ui_loop_;
- content::TestBrowserThread ui_thread_;
- content::TestBrowserThread file_thread_;
-
- // We keep two TemplateURLServices to test syncing between them.
- base::ScopedTempDir temp_dir_;
- scoped_ptr<TestingProfile> profile_;
- scoped_refptr<AppNotificationManager> model_;
-
- scoped_ptr<TestChangeProcessor> sync_processor_;
- scoped_ptr<SyncChangeProcessorDelegate> sync_processor_delegate_;
-
- DISALLOW_COPY_AND_ASSIGN(AppNotificationManagerSyncTest);
-};
-
-// Create an AppNotification, convert it to SyncData and convert it back.
-TEST_F(AppNotificationManagerSyncTest, NotificationToSyncDataToNotification) {
- { // Partial properties set.
- scoped_ptr<AppNotification> notif1(CreateNotificationNoLink(1));
- syncer::SyncData sync_data =
- AppNotificationManager::CreateSyncDataFromNotification(*notif1);
- scoped_ptr<AppNotification> notif2(
- AppNotificationManager::CreateNotificationFromSyncData(sync_data));
- EXPECT_TRUE(notif2.get());
- EXPECT_TRUE(notif1->Equals(*notif2));
- }
- { // All properties set.
- scoped_ptr<AppNotification> notif1(CreateNotification(1));
- syncer::SyncData sync_data =
- AppNotificationManager::CreateSyncDataFromNotification(*notif1);
- scoped_ptr<AppNotification> notif2(
- AppNotificationManager::CreateNotificationFromSyncData(sync_data));
- EXPECT_TRUE(notif2.get());
- EXPECT_TRUE(notif1->Equals(*notif2));
- }
-}
-
-// GetAllSyncData returns all notifications since none are marked local only.
-TEST_F(AppNotificationManagerSyncTest, GetAllSyncDataNoLocal) {
- model()->Add(CreateNotificationNoLink(1));
- model()->Add(CreateNotification(2));
- model()->Add(CreateNotification(3));
- syncer::SyncDataList all_sync_data =
- model()->GetAllSyncData(syncer::APP_NOTIFICATIONS);
-
- EXPECT_EQ(3U, all_sync_data.size());
-
- for (syncer::SyncDataList::const_iterator iter = all_sync_data.begin();
- iter != all_sync_data.end(); ++iter) {
- scoped_ptr<AppNotification> notif1(
- AppNotificationManager::CreateNotificationFromSyncData(*iter));
-
- const std::string& guid = notif1->guid();
- const std::string& ext_id = notif1->extension_id();
-
- const AppNotification* notif2 = model()->GetNotification(ext_id, guid);
- ASSERT_TRUE(notif1->Equals(*notif2));
- }
-}
-
-// GetAllSyncData should not return notifications marked as local only.
-TEST_F(AppNotificationManagerSyncTest, GetAllSyncDataSomeLocal) {
- model()->Add(CreateNotificationNoLink(1));
- model()->Add(CreateNotification(true, 2));
- model()->Add(CreateNotification(3));
- model()->Add(CreateNotification(true, 4));
- model()->Add(CreateNotification(5));
- syncer::SyncDataList all_sync_data =
- model()->GetAllSyncData(syncer::APP_NOTIFICATIONS);
-
- EXPECT_EQ(3U, all_sync_data.size());
-
- for (syncer::SyncDataList::const_iterator iter = all_sync_data.begin();
- iter != all_sync_data.end(); ++iter) {
- scoped_ptr<AppNotification> notif1(
- AppNotificationManager::CreateNotificationFromSyncData(*iter));
- const std::string& guid = notif1->guid();
- const std::string& ext_id = notif1->extension_id();
-
- const AppNotification* notif2 = model()->GetNotification(ext_id, guid);
- ASSERT_TRUE(notif1->Equals(*notif2));
- }
-}
-
-// Model assocation: both models are empty.
-TEST_F(AppNotificationManagerSyncTest, ModelAssocBothEmpty) {
- model()->MergeDataAndStartSyncing(
- syncer::APP_NOTIFICATIONS,
- syncer::SyncDataList(), // Empty.
- PassProcessor(),
- scoped_ptr<syncer::SyncErrorFactory>(new syncer::SyncErrorFactoryMock()));
-
- EXPECT_EQ(0U, model()->GetAllSyncData(syncer::APP_NOTIFICATIONS).size());
- EXPECT_EQ(0U, processor()->change_list_size());
-}
-
-// Model assocation: empty sync model and non-empty local model.
-TEST_F(AppNotificationManagerSyncTest, ModelAssocModelEmpty) {
- syncer::SyncDataList initial_data;
- initial_data.push_back(CreateSyncData(1));
- initial_data.push_back(CreateSyncData(2));
- initial_data.push_back(CreateSyncData(3));
- initial_data.push_back(CreateSyncData(4));
-
- model()->MergeDataAndStartSyncing(
- syncer::APP_NOTIFICATIONS,
- initial_data,
- PassProcessor(),
- scoped_ptr<syncer::SyncErrorFactory>(new syncer::SyncErrorFactoryMock()));
-
- EXPECT_EQ(4U, model()->GetAllSyncData(syncer::APP_NOTIFICATIONS).size());
- // Model should all of the initial sync data.
- for (syncer::SyncDataList::const_iterator iter = initial_data.begin();
- iter != initial_data.end(); ++iter) {
- scoped_ptr<AppNotification> notif1(
- AppNotificationManager::CreateNotificationFromSyncData(*iter));
- const std::string& ext_id = notif1->extension_id();
- const std::string& guid = notif1->guid();
- const AppNotification* notif2 = model()->GetNotification(ext_id, guid);
- EXPECT_TRUE(notif2);
- EXPECT_TRUE(notif1->Equals(*notif2));
- }
-
- EXPECT_EQ(0U, processor()->change_list_size());
-}
-
-// Model has some notifications, some of them are local only. Sync has some
-// notifications. No items match up.
-TEST_F(AppNotificationManagerSyncTest, ModelAssocBothNonEmptyNoOverlap) {
- AppNotification* n1 = CreateNotification(1);
- model()->Add(n1);
- AppNotification* n2 = CreateNotification(true, 2);
- model()->Add(n2);
- AppNotification* n3 = CreateNotification(3);
- model()->Add(n3);
-
- syncer::SyncDataList initial_data;
- initial_data.push_back(CreateSyncData(4));
- initial_data.push_back(CreateSyncData(5));
- initial_data.push_back(CreateSyncData(6));
- initial_data.push_back(CreateSyncData(7));
-
- model()->MergeDataAndStartSyncing(
- syncer::APP_NOTIFICATIONS,
- initial_data,
- PassProcessor(),
- scoped_ptr<syncer::SyncErrorFactory>(new syncer::SyncErrorFactoryMock()));
-
- EXPECT_EQ(6U, model()->GetAllSyncData(syncer::APP_NOTIFICATIONS).size());
- for (syncer::SyncDataList::const_iterator iter = initial_data.begin();
- iter != initial_data.end(); ++iter) {
- scoped_ptr<AppNotification> notif1(
- AppNotificationManager::CreateNotificationFromSyncData(*iter));
- const std::string& ext_id = notif1->extension_id();
- const std::string& guid = notif1->guid();
- const AppNotification* notif2 = model()->GetNotification(ext_id, guid);
- EXPECT_TRUE(notif2);
- EXPECT_TRUE(notif1->Equals(*notif2));
- }
- EXPECT_TRUE(model()->GetNotification(n1->extension_id(), n1->guid()));
- EXPECT_TRUE(model()->GetNotification(n2->extension_id(), n2->guid()));
- EXPECT_TRUE(model()->GetNotification(n3->extension_id(), n3->guid()));
-
- EXPECT_EQ(2U, processor()->change_list_size());
- EXPECT_TRUE(processor()->ContainsGuid(n1->guid()));
- EXPECT_EQ(syncer::SyncChange::ACTION_ADD,
- processor()->GetChangeByGuid(n1->guid()).change_type());
- EXPECT_FALSE(processor()->ContainsGuid(n2->guid()));
- EXPECT_TRUE(processor()->ContainsGuid(n3->guid()));
- EXPECT_EQ(syncer::SyncChange::ACTION_ADD,
- processor()->GetChangeByGuid(n3->guid()).change_type());
-}
-
-// Model has some notifications, some of them are local only. Sync has some
-// notifications. Some items match up.
-TEST_F(AppNotificationManagerSyncTest, ModelAssocBothNonEmptySomeOverlap) {
- AppNotification* n1 = CreateNotification(1);
- model()->Add(n1);
- AppNotification* n2 = CreateNotification(true, 2);
- model()->Add(n2);
- AppNotification* n3 = CreateNotification(3);
- model()->Add(n3);
- AppNotification* n4 = CreateNotification(4);
- model()->Add(n4);
-
- syncer::SyncDataList initial_data;
- initial_data.push_back(CreateSyncData(5));
- initial_data.push_back(
- AppNotificationManager::CreateSyncDataFromNotification(*n1));
- initial_data.push_back(CreateSyncData(6));
- initial_data.push_back(
- AppNotificationManager::CreateSyncDataFromNotification(*n4));
- initial_data.push_back(CreateSyncData(7));
-
- model()->MergeDataAndStartSyncing(
- syncer::APP_NOTIFICATIONS,
- initial_data,
- PassProcessor(),
- scoped_ptr<syncer::SyncErrorFactory>(new syncer::SyncErrorFactoryMock()));
-
- EXPECT_EQ(6U, model()->GetAllSyncData(syncer::APP_NOTIFICATIONS).size());
- for (syncer::SyncDataList::const_iterator iter = initial_data.begin();
- iter != initial_data.end(); ++iter) {
- scoped_ptr<AppNotification> notif1(
- AppNotificationManager::CreateNotificationFromSyncData(*iter));
- const std::string& ext_id = notif1->extension_id();
- const std::string& guid = notif1->guid();
- const AppNotification* notif2 = model()->GetNotification(ext_id, guid);
- EXPECT_TRUE(notif2);
- EXPECT_TRUE(notif1->Equals(*notif2));
- }
- EXPECT_TRUE(model()->GetNotification(n1->extension_id(), n1->guid()));
- EXPECT_TRUE(model()->GetNotification(n2->extension_id(), n2->guid()));
- EXPECT_TRUE(model()->GetNotification(n3->extension_id(), n3->guid()));
- EXPECT_TRUE(model()->GetNotification(n4->extension_id(), n4->guid()));
-
- EXPECT_EQ(1U, processor()->change_list_size());
- EXPECT_FALSE(processor()->ContainsGuid(n1->guid()));
- EXPECT_FALSE(processor()->ContainsGuid(n2->guid()));
- EXPECT_TRUE(processor()->ContainsGuid(n3->guid()));
- EXPECT_EQ(syncer::SyncChange::ACTION_ADD,
- processor()->GetChangeByGuid(n3->guid()).change_type());
- EXPECT_FALSE(processor()->ContainsGuid(n4->guid()));
-}
-
-// When an item that matches up in model and sync is different, an error
-// should be returned.
-TEST_F(AppNotificationManagerSyncTest, ModelAssocBothNonEmptyTitleMismatch) {
- AppNotification* n1 = CreateNotification(1);
- model()->Add(n1);
- AppNotification* n2 = CreateNotification(true, 2);
- model()->Add(n2);
-
- syncer::SyncDataList initial_data;
- initial_data.push_back(CreateSyncData(1));
- scoped_ptr<AppNotification> n1_a(CreateNotification(
- n1->is_local(), n1->creation_time().ToInternalValue(),
- n1->guid(), n1->extension_id(),
- n1->title() + "_changed", // different title
- n1->body(), n1->link_url().spec(), n1->link_text()));
- initial_data.push_back(
- AppNotificationManager::CreateSyncDataFromNotification(*n1_a));
-
- scoped_ptr<syncer::SyncErrorFactoryMock> error_handler(
- new syncer::SyncErrorFactoryMock());
- EXPECT_CALL(*error_handler, CreateAndUploadError(_, _)).
- WillOnce(
- Return(
- syncer::SyncError(
- FROM_HERE, "error", syncer::APP_NOTIFICATIONS)));
-
- syncer::SyncError sync_error = model()->MergeDataAndStartSyncing(
- syncer::APP_NOTIFICATIONS,
- initial_data,
- PassProcessor(),
- error_handler.PassAs<syncer::SyncErrorFactory>()).error();
-
- EXPECT_TRUE(sync_error.IsSet());
- EXPECT_EQ(syncer::APP_NOTIFICATIONS, sync_error.type());
- EXPECT_EQ(0U, processor()->change_list_size());
-}
-
-// When an item in sync matches with a local-only item in model, an error
-// should be returned.
-TEST_F(AppNotificationManagerSyncTest, ModelAssocBothNonEmptyMatchesLocal) {
- AppNotification* n1 = CreateNotification(1);
- model()->Add(n1);
- AppNotification* n2 = CreateNotification(true, 2);
- model()->Add(n2);
-
- syncer::SyncDataList initial_data;
- initial_data.push_back(CreateSyncData(1));
- scoped_ptr<AppNotification> n2_a(CreateNotification(2));
- initial_data.push_back(
- AppNotificationManager::CreateSyncDataFromNotification(*n2_a));
-
- scoped_ptr<syncer::SyncErrorFactoryMock> error_handler(
- new syncer::SyncErrorFactoryMock());
- EXPECT_CALL(*error_handler, CreateAndUploadError(_, _)).
- WillOnce(
- Return(
- syncer::SyncError(
- FROM_HERE, "error", syncer::APP_NOTIFICATIONS)));
-
- syncer::SyncError sync_error = model()->MergeDataAndStartSyncing(
- syncer::APP_NOTIFICATIONS,
- initial_data,
- PassProcessor(),
- error_handler.PassAs<syncer::SyncErrorFactory>()).error();
-
- EXPECT_TRUE(sync_error.IsSet());
- EXPECT_EQ(syncer::APP_NOTIFICATIONS, sync_error.type());
- EXPECT_EQ(0U, processor()->change_list_size());
-}
-
-// Process sync changes when model is empty.
-TEST_F(AppNotificationManagerSyncTest, ProcessSyncChangesEmptyModel) {
- // We initially have no data.
- model()->MergeDataAndStartSyncing(
- syncer::APP_NOTIFICATIONS,
- syncer::SyncDataList(),
- PassProcessor(),
- scoped_ptr<syncer::SyncErrorFactory>(new syncer::SyncErrorFactoryMock()));
-
- // Set up a bunch of ADDs.
- syncer::SyncChangeList changes;
- changes.push_back(CreateSyncChange(
- syncer::SyncChange::ACTION_ADD, CreateNotification(1)));
- changes.push_back(CreateSyncChange(
- syncer::SyncChange::ACTION_ADD, CreateNotification(2)));
- changes.push_back(CreateSyncChange(
- syncer::SyncChange::ACTION_ADD, CreateNotification(3)));
-
- model()->ProcessSyncChanges(FROM_HERE, changes);
-
- EXPECT_EQ(3U, model()->GetAllSyncData(syncer::APP_NOTIFICATIONS).size());
- EXPECT_EQ(0U, processor()->change_list_size());
-}
-
-// Process sync changes when model is not empty.
-TEST_F(AppNotificationManagerSyncTest, ProcessSyncChangesNonEmptyModel) {
- AppNotification* n1 = CreateNotification(1);
- model()->Add(n1);
- AppNotification* n2 = CreateNotification(2);
- model()->Add(n2);
- model()->MergeDataAndStartSyncing(
- syncer::APP_NOTIFICATIONS,
- syncer::SyncDataList(),
- PassProcessor(),
- scoped_ptr<syncer::SyncErrorFactory>(new syncer::SyncErrorFactoryMock()));
-
- // Some adds and some deletes.
- syncer::SyncChangeList changes;
- changes.push_back(CreateSyncChange(
- syncer::SyncChange::ACTION_ADD, CreateNotification(3)));
- changes.push_back(CreateSyncChange(
- syncer::SyncChange::ACTION_DELETE, n1->Copy()));
- changes.push_back(CreateSyncChange(
- syncer::SyncChange::ACTION_ADD, CreateNotification(4)));
-
- model()->ProcessSyncChanges(FROM_HERE, changes);
-
- EXPECT_EQ(3U, model()->GetAllSyncData(syncer::APP_NOTIFICATIONS).size());
- EXPECT_EQ(2U, processor()->change_list_size());
-}
-
-// Process sync changes should ignore a bad ADD.
-// Hangs: http://crbug.com/149712
-TEST_F(AppNotificationManagerSyncTest,
- DISABLED_ProcessSyncChangesIgnoreBadAdd) {
- AppNotification* n1 = CreateNotification(1);
- model()->Add(n1);
- AppNotification* n2 = CreateNotification(2);
- model()->Add(n2);
- model()->MergeDataAndStartSyncing(
- syncer::APP_NOTIFICATIONS,
- syncer::SyncDataList(),
- PassProcessor(),
- scoped_ptr<syncer::SyncErrorFactory>(new syncer::SyncErrorFactoryMock()));
-
- // Some adds and some deletes.
- syncer::SyncChangeList changes;
- changes.push_back(CreateSyncChange(
- syncer::SyncChange::ACTION_ADD, CreateNotification(1)));
-
- syncer::SyncError error = model()->ProcessSyncChanges(FROM_HERE, changes);
- EXPECT_FALSE(error.IsSet());
-
- EXPECT_EQ(2U, model()->GetAllSyncData(syncer::APP_NOTIFICATIONS).size());
- EXPECT_EQ(2U, processor()->change_list_size());
-}
-
-// Process sync changes should ignore a bad DELETE.
-TEST_F(AppNotificationManagerSyncTest, ProcessSyncChangesIgnoreBadDelete) {
- AppNotification* n1 = CreateNotification(1);
- model()->Add(n1);
- AppNotification* n2 = CreateNotification(2);
- model()->Add(n2);
- model()->MergeDataAndStartSyncing(
- syncer::APP_NOTIFICATIONS,
- syncer::SyncDataList(),
- PassProcessor(),
- scoped_ptr<syncer::SyncErrorFactory>(new syncer::SyncErrorFactoryMock()));
-
- // Some adds and some deletes.
- syncer::SyncChangeList changes;
- changes.push_back(CreateSyncChange(
- syncer::SyncChange::ACTION_DELETE, CreateNotification(3)));
-
- syncer::SyncError error = model()->ProcessSyncChanges(FROM_HERE, changes);
- EXPECT_FALSE(error.IsSet());
-
- EXPECT_EQ(2U, model()->GetAllSyncData(syncer::APP_NOTIFICATIONS).size());
- EXPECT_EQ(2U, processor()->change_list_size());
-}
-
-// Process sync changes should ignore bad UPDATEs.
-// Hangs: http://crbug.com/149712
-TEST_F(AppNotificationManagerSyncTest,
- DISABLED_ProcessSyncChangesIgnoreBadUpdates) {
- AppNotification* n1 = CreateNotification(1);
- model()->Add(n1);
- AppNotification* n2 = CreateNotification(2);
- model()->Add(n2);
- model()->MergeDataAndStartSyncing(
- syncer::APP_NOTIFICATIONS,
- syncer::SyncDataList(),
- PassProcessor(),
- scoped_ptr<syncer::SyncErrorFactory>(new syncer::SyncErrorFactoryMock()));
-
- // Some adds and some deletes.
- syncer::SyncChangeList changes;
- changes.push_back(CreateSyncChange(
- syncer::SyncChange::ACTION_UPDATE, CreateNotification(3)));
- AppNotification* n2_changed = n2->Copy();
- n2_changed->set_link_text(n2_changed->link_text() + "-changed");
- changes.push_back(CreateSyncChange(
- syncer::SyncChange::ACTION_UPDATE, n2_changed));
-
- syncer::SyncError error = model()->ProcessSyncChanges(FROM_HERE, changes);
- EXPECT_FALSE(error.IsSet());
-
- EXPECT_EQ(2U, model()->GetAllSyncData(syncer::APP_NOTIFICATIONS).size());
- EXPECT_EQ(2U, processor()->change_list_size());
-}
-
-// Process over 15 changes when model is not empty.
-TEST_F(AppNotificationManagerSyncTest, ProcessSyncChangesEmptyModelWithMax) {
- const std::string& ext_id = "e1";
- model()->MergeDataAndStartSyncing(
- syncer::APP_NOTIFICATIONS,
- syncer::SyncDataList(),
- PassProcessor(),
- scoped_ptr<syncer::SyncErrorFactory>(new syncer::SyncErrorFactoryMock()));
- for (unsigned int i = 0;
- i < AppNotificationManager::kMaxNotificationPerApp * 2; i++) {
- syncer::SyncChangeList changes;
- changes.push_back(CreateSyncChange(
- syncer::SyncChange::ACTION_ADD, CreateNotification(false, i, ext_id)));
- model()->ProcessSyncChanges(FROM_HERE, changes);
- if (i < AppNotificationManager::kMaxNotificationPerApp) {
- EXPECT_EQ(i + 1,
- model()->GetAllSyncData(syncer::APP_NOTIFICATIONS).size());
- } else {
- EXPECT_EQ(AppNotificationManager::kMaxNotificationPerApp,
- model()->GetAllSyncData(syncer::APP_NOTIFICATIONS).size());
- for (unsigned int j = i; j > i - 5; j--) {
- EXPECT_EQ(
- AppNotificationManager::kMaxNotificationPerApp,
- model()->GetAllSyncData(syncer::APP_NOTIFICATIONS).size());
- }
- }
- }
-}
-
-// Stop syncing sets state correctly.
-TEST_F(AppNotificationManagerSyncTest, StopSyncing) {
- EXPECT_FALSE(model()->sync_processor_.get());
- EXPECT_FALSE(model()->models_associated_);
-
- model()->MergeDataAndStartSyncing(
- syncer::APP_NOTIFICATIONS,
- syncer::SyncDataList(),
- PassProcessor(),
- scoped_ptr<syncer::SyncErrorFactory>(new syncer::SyncErrorFactoryMock()));
-
- EXPECT_TRUE(model()->sync_processor_.get());
- EXPECT_TRUE(model()->models_associated_);
-
- model()->StopSyncing(syncer::APP_NOTIFICATIONS);
- EXPECT_FALSE(model()->sync_processor_.get());
- EXPECT_FALSE(model()->models_associated_);
-}
-
-// Adds get pushed to sync but local only are skipped.
-TEST_F(AppNotificationManagerSyncTest, AddsGetsSynced) {
- model()->MergeDataAndStartSyncing(
- syncer::APP_NOTIFICATIONS,
- syncer::SyncDataList(),
- PassProcessor(),
- scoped_ptr<syncer::SyncErrorFactory>(new syncer::SyncErrorFactoryMock()));
-
- AppNotification* n1 = CreateNotification(1);
- model()->Add(n1);
- AppNotification* n2 = CreateNotification(2);
- model()->Add(n2);
- AppNotification* n3 = CreateNotification(true, 2);
- model()->Add(n3);
-
- EXPECT_EQ(2U, processor()->change_list_size());
- EXPECT_TRUE(processor()->ContainsGuid(n1->guid()));
- syncer::SyncChange c1 = processor()->GetChangeByGuid(n1->guid());
- AssertSyncChange(c1, syncer::SyncChange::ACTION_ADD, *n1);
- syncer::SyncChange c2 = processor()->GetChangeByGuid(n2->guid());
- AssertSyncChange(c2, syncer::SyncChange::ACTION_ADD, *n2);
-}
-
-// Clear all gets pushed to sync.
-TEST_F(AppNotificationManagerSyncTest, ClearAllGetsSynced) {
- const std::string& ext_id = "e1";
- scoped_ptr<AppNotification> n1(CreateNotification(false, 1, ext_id));
- scoped_ptr<AppNotification> n2(CreateNotification(false, 2, ext_id));
- scoped_ptr<AppNotification> n3(CreateNotification(false, 3, ext_id));
- scoped_ptr<AppNotification> n4(CreateNotification(4));
-
- syncer::SyncDataList initial_data;
- initial_data.push_back(
- AppNotificationManager::CreateSyncDataFromNotification(*n1));
- initial_data.push_back(
- AppNotificationManager::CreateSyncDataFromNotification(*n2));
- initial_data.push_back(
- AppNotificationManager::CreateSyncDataFromNotification(*n3));
- initial_data.push_back(
- AppNotificationManager::CreateSyncDataFromNotification(*n4));
- model()->MergeDataAndStartSyncing(
- syncer::APP_NOTIFICATIONS,
- initial_data,
- PassProcessor(),
- scoped_ptr<syncer::SyncErrorFactory>(new syncer::SyncErrorFactoryMock()));
-
- model()->ClearAll(ext_id);
-
- EXPECT_EQ(3U, processor()->change_list_size());
- EXPECT_TRUE(processor()->ContainsGuid(n1->guid()));
- syncer::SyncChange c1 = processor()->GetChangeByGuid(n1->guid());
- AssertSyncChange(c1, syncer::SyncChange::ACTION_DELETE, *n1);
- syncer::SyncChange c2 = processor()->GetChangeByGuid(n2->guid());
- AssertSyncChange(c2, syncer::SyncChange::ACTION_DELETE, *n2);
- syncer::SyncChange c3 = processor()->GetChangeByGuid(n3->guid());
- AssertSyncChange(c3, syncer::SyncChange::ACTION_DELETE, *n3);
-}
-
-} // namespace extensions
« no previous file with comments | « chrome/browser/extensions/app_notification_manager.cc ('k') | chrome/browser/extensions/app_notification_manager_unittest.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698