Index: chrome/browser/extensions/api/synced_notifications_private/synced_notifications_shim_unittest.cc |
diff --git a/chrome/browser/extensions/api/synced_notifications_private/synced_notifications_shim_unittest.cc b/chrome/browser/extensions/api/synced_notifications_private/synced_notifications_shim_unittest.cc |
deleted file mode 100644 |
index d849f3b9625d9387c4996d7d8bf2f0d2f5863b23..0000000000000000000000000000000000000000 |
--- a/chrome/browser/extensions/api/synced_notifications_private/synced_notifications_shim_unittest.cc |
+++ /dev/null |
@@ -1,345 +0,0 @@ |
-// Copyright 2014 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 "chrome/browser/extensions/api/synced_notifications_private/synced_notifications_shim.h" |
- |
-#include "base/json/json_writer.h" |
-#include "extensions/browser/event_router.h" |
-#include "sync/api/fake_sync_change_processor.h" |
-#include "sync/api/sync_change.h" |
-#include "sync/api/sync_error_factory.h" |
-#include "sync/protocol/sync.pb.h" |
-#include "testing/gtest/include/gtest/gtest.h" |
- |
-using namespace extensions; |
-using namespace extensions::api; |
- |
-namespace { |
- |
-// Builds a SyncData for the specified |type| based on |key|. |
-syncer::SyncData BuildData(syncer::ModelType type, const std::string& key) { |
- sync_pb::EntitySpecifics specifics; |
- if (type == syncer::SYNCED_NOTIFICATIONS) { |
- specifics.mutable_synced_notification() |
- ->mutable_coalesced_notification() |
- ->set_key(key); |
- } else { |
- specifics.mutable_synced_notification_app_info() |
- ->add_synced_notification_app_info() |
- ->add_app_id(key); |
- } |
- syncer::SyncData data = syncer::SyncData::CreateLocalData( |
- key, key, specifics); |
- return data; |
-} |
- |
-// Builds a SyncChange with an update to the specified |type| based on |key|. |
-syncer::SyncChange BuildChange(syncer::ModelType type, const std::string& key) { |
- syncer::SyncChangeList change_list; |
- syncer::SyncData data = BuildData(type, key); |
- return syncer::SyncChange(FROM_HERE, syncer::SyncChange::ACTION_UPDATE, data); |
-} |
- |
-// Verifies that the specifics within |data| match the serialized specifics |
-// within |serialized|. |
-testing::AssertionResult DataSpecificsMatch(const syncer::SyncData& data, |
- const std::string& serialized) { |
- if (data.GetDataType() == syncer::SYNCED_NOTIFICATIONS) { |
- const sync_pb::SyncedNotificationSpecifics& proto = |
- data.GetSpecifics().synced_notification(); |
- if (serialized != proto.SerializeAsString()) |
- return testing::AssertionFailure() << "Notification specifics mismatch"; |
- } else { |
- const sync_pb::SyncedNotificationAppInfoSpecifics& proto = |
- data.GetSpecifics().synced_notification_app_info(); |
- if (serialized != proto.SerializeAsString()) |
- return testing::AssertionFailure() << "App info specifics mismatch"; |
- } |
- return testing::AssertionSuccess(); |
-} |
- |
-// Verifies that the update within |change| matchs the serialized specifics |
-// within |serialized|. |
-testing::AssertionResult ChangeSpecificsMatch(const syncer::SyncChange& change, |
- const std::string& serialized) { |
- if (change.change_type() != syncer::SyncChange::ACTION_UPDATE) |
- return testing::AssertionFailure() << "Invalid change type"; |
- return DataSpecificsMatch(change.sync_data(), serialized); |
-} |
- |
-class SyncedNotificationsShimTest : public testing::Test { |
- public: |
- SyncedNotificationsShimTest(); |
- ~SyncedNotificationsShimTest() override; |
- |
- // Starts sync for both sync types. |
- void StartSync(); |
- // Starts sync for the specified datatype |type|. |
- void StartSync(syncer::ModelType type); |
- |
- // Transfers ownership of the last event received. |
- scoped_ptr<Event> GetLastEvent(); |
- |
- // Records that a refresh has been requested. |
- void RequestRefresh(); |
- |
- SyncedNotificationsShim* shim() { return &shim_; } |
- syncer::FakeSyncChangeProcessor* notification_processor() { |
- return notification_processor_; |
- } |
- syncer::FakeSyncChangeProcessor* app_info_processor() { |
- return app_info_processor_; |
- } |
- bool refresh_requested() const { return refresh_requested_; } |
- |
- private: |
- void EventCallback(scoped_ptr<Event> event); |
- |
- // Shim being tested. |
- SyncedNotificationsShim shim_; |
- |
- syncer::FakeSyncChangeProcessor* notification_processor_; |
- syncer::FakeSyncChangeProcessor* app_info_processor_; |
- |
- // The last event fired by the shim. |
- scoped_ptr<Event> last_event_fired_; |
- |
- // Whether a refresh has been requested; |
- bool refresh_requested_; |
-}; |
- |
-SyncedNotificationsShimTest::SyncedNotificationsShimTest() |
- : shim_(base::Bind(&SyncedNotificationsShimTest::EventCallback, |
- base::Unretained(this)), |
- base::Bind(&SyncedNotificationsShimTest::RequestRefresh, |
- base::Unretained(this))), |
- notification_processor_(NULL), |
- app_info_processor_(NULL), |
- refresh_requested_(false) {} |
- |
-SyncedNotificationsShimTest::~SyncedNotificationsShimTest() {} |
- |
-void SyncedNotificationsShimTest::EventCallback(scoped_ptr<Event> event) { |
- ASSERT_FALSE(last_event_fired_); |
- last_event_fired_ = event.Pass(); |
-} |
- |
-void SyncedNotificationsShimTest::RequestRefresh() { |
- ASSERT_FALSE(refresh_requested_); |
- refresh_requested_ = true; |
-} |
- |
-scoped_ptr<Event> SyncedNotificationsShimTest::GetLastEvent() { |
- return last_event_fired_.Pass(); |
-} |
- |
-void SyncedNotificationsShimTest::StartSync() { |
- StartSync(syncer::SYNCED_NOTIFICATIONS); |
- StartSync(syncer::SYNCED_NOTIFICATION_APP_INFO); |
- GetLastEvent(); |
-} |
- |
-void SyncedNotificationsShimTest::StartSync(syncer::ModelType type) { |
- scoped_ptr<syncer::FakeSyncChangeProcessor> change_processor( |
- new syncer::FakeSyncChangeProcessor()); |
- if (type == syncer::SYNCED_NOTIFICATIONS) |
- notification_processor_ = change_processor.get(); |
- else |
- app_info_processor_ = change_processor.get(); |
- syncer::SyncDataList sync_data; |
- shim_.MergeDataAndStartSyncing( |
- type, sync_data, change_processor.Pass(), nullptr); |
-} |
- |
-// Starting sync should fire the sync started event, but only after both types |
-// have started. |
-TEST_F(SyncedNotificationsShimTest, StartSync) { |
- EXPECT_FALSE(shim()->IsSyncReady()); |
- StartSync(syncer::SYNCED_NOTIFICATIONS); |
- EXPECT_FALSE(shim()->IsSyncReady()); |
- EXPECT_FALSE(GetLastEvent()); |
- |
- StartSync(syncer::SYNCED_NOTIFICATION_APP_INFO); |
- EXPECT_TRUE(shim()->IsSyncReady()); |
- |
- scoped_ptr<Event> event = GetLastEvent(); |
- ASSERT_TRUE(event); |
- EXPECT_EQ(synced_notifications_private::OnSyncStartup::kEventName, |
- event->event_name); |
- |
- EXPECT_TRUE(notification_processor()->changes().empty()); |
- EXPECT_TRUE(app_info_processor()->changes().empty()); |
-} |
- |
-// A sync update should fire the OnDataChanges event with the updated |
-// notification. |
-TEST_F(SyncedNotificationsShimTest, ProcessSyncChangesSingleNotification) { |
- StartSync(); |
- syncer::SyncChangeList change_list; |
- change_list.push_back(BuildChange(syncer::SYNCED_NOTIFICATIONS, "key")); |
- shim()->ProcessSyncChanges(FROM_HERE, change_list); |
- scoped_ptr<Event> event = GetLastEvent(); |
- ASSERT_TRUE(event); |
- EXPECT_EQ(synced_notifications_private::OnDataChanges::kEventName, |
- event->event_name); |
- ASSERT_TRUE(event->event_args); |
- EXPECT_EQ(1U, event->event_args->GetSize()); |
- |
- base::ListValue* args = NULL; |
- ASSERT_TRUE(event->event_args->GetList(0, &args)); |
- EXPECT_EQ(1U, args->GetSize()); |
- base::DictionaryValue* sync_change_value = NULL; |
- ASSERT_TRUE(args->GetDictionary(0, &sync_change_value)); |
- scoped_ptr<synced_notifications_private::SyncChange> sync_change = |
- synced_notifications_private::SyncChange::FromValue(*sync_change_value); |
- ASSERT_TRUE(sync_change); |
- EXPECT_TRUE(ChangeSpecificsMatch(change_list[0], |
- sync_change->data.data_item)); |
- EXPECT_EQ(synced_notifications_private::CHANGE_TYPE_UPDATED, |
- sync_change->change_type); |
-} |
- |
-// Verify that multiple notification updates can be sent in one event. |
-TEST_F(SyncedNotificationsShimTest, ProcessSyncChangesMultipleNotification) { |
- StartSync(); |
- syncer::SyncChangeList change_list; |
- change_list.push_back(BuildChange(syncer::SYNCED_NOTIFICATIONS, "key")); |
- change_list.push_back(BuildChange(syncer::SYNCED_NOTIFICATIONS, "key2")); |
- shim()->ProcessSyncChanges(FROM_HERE, change_list); |
- scoped_ptr<Event> event = GetLastEvent(); |
- ASSERT_TRUE(event); |
- EXPECT_EQ(synced_notifications_private::OnDataChanges::kEventName, |
- event->event_name); |
- ASSERT_TRUE(event->event_args); |
- base::ListValue* args = NULL; |
- ASSERT_TRUE(event->event_args->GetList(0, &args)); |
- EXPECT_EQ(2U, args->GetSize()); |
- |
- base::DictionaryValue* sync_change_value = NULL; |
- ASSERT_TRUE(args->GetDictionary(0, &sync_change_value)); |
- scoped_ptr<synced_notifications_private::SyncChange> sync_change = |
- synced_notifications_private::SyncChange::FromValue(*sync_change_value); |
- ASSERT_TRUE(sync_change); |
- EXPECT_TRUE(ChangeSpecificsMatch(change_list[0], |
- sync_change->data.data_item)); |
- EXPECT_EQ(synced_notifications_private::CHANGE_TYPE_UPDATED, |
- sync_change->change_type); |
- |
- ASSERT_TRUE(args->GetDictionary(1, &sync_change_value)); |
- sync_change = |
- synced_notifications_private::SyncChange::FromValue(*sync_change_value); |
- ASSERT_TRUE(sync_change); |
- EXPECT_TRUE(ChangeSpecificsMatch(change_list[1], |
- sync_change->data.data_item)); |
- EXPECT_EQ(synced_notifications_private::CHANGE_TYPE_UPDATED, |
- sync_change->change_type); |
-} |
- |
-// Verify AppInfo updates trigger OnDataChanges events. |
-TEST_F(SyncedNotificationsShimTest, ProcessSyncChangeAppInfo) { |
- StartSync(); |
- syncer::SyncChangeList change_list; |
- change_list.push_back( |
- BuildChange(syncer::SYNCED_NOTIFICATION_APP_INFO, "key")); |
- shim()->ProcessSyncChanges(FROM_HERE, change_list); |
- scoped_ptr<Event> event = GetLastEvent(); |
- ASSERT_TRUE(event); |
- EXPECT_EQ(synced_notifications_private::OnDataChanges::kEventName, |
- event->event_name); |
- ASSERT_TRUE(event->event_args); |
- EXPECT_EQ(1U, event->event_args->GetSize()); |
- |
- base::ListValue* args = NULL; |
- ASSERT_TRUE(event->event_args->GetList(0, &args)); |
- EXPECT_EQ(1U, args->GetSize()); |
- base::DictionaryValue* sync_change_value = NULL; |
- ASSERT_TRUE(args->GetDictionary(0, &sync_change_value)); |
- scoped_ptr<synced_notifications_private::SyncChange> sync_change = |
- synced_notifications_private::SyncChange::FromValue(*sync_change_value); |
- ASSERT_TRUE(sync_change); |
- EXPECT_TRUE(ChangeSpecificsMatch(change_list[0], |
- sync_change->data.data_item)); |
- EXPECT_EQ(synced_notifications_private::CHANGE_TYPE_UPDATED, |
- sync_change->change_type); |
-} |
- |
-// Attempt to get the initial sync data both before and after sync starts. |
-TEST_F(SyncedNotificationsShimTest, GetInitialData) { |
- std::vector<linked_ptr<synced_notifications_private::SyncData> > data; |
- EXPECT_FALSE(shim()->GetInitialData( |
- synced_notifications_private::SYNC_DATA_TYPE_SYNCED_NOTIFICATION, &data)); |
- EXPECT_FALSE(shim()->GetInitialData( |
- synced_notifications_private::SYNC_DATA_TYPE_APP_INFO, &data)); |
- |
- StartSync(); |
- |
- EXPECT_TRUE(shim()->GetInitialData( |
- synced_notifications_private::SYNC_DATA_TYPE_SYNCED_NOTIFICATION, &data)); |
- EXPECT_TRUE(data.empty()); |
- EXPECT_TRUE(shim()->GetInitialData( |
- synced_notifications_private::SYNC_DATA_TYPE_APP_INFO, &data)); |
- EXPECT_TRUE(data.empty()); |
- |
- notification_processor()->data().push_back(BuildData( |
- syncer::SYNCED_NOTIFICATIONS, "notif_key")); |
- EXPECT_TRUE(shim()->GetInitialData( |
- synced_notifications_private::SYNC_DATA_TYPE_SYNCED_NOTIFICATION, &data)); |
- EXPECT_EQ(1U, data.size()); |
- EXPECT_TRUE(DataSpecificsMatch(notification_processor()->data()[0], |
- data[0]->data_item)); |
- |
- data.clear(); |
- app_info_processor()->data().push_back(BuildData( |
- syncer::SYNCED_NOTIFICATION_APP_INFO, "app_key")); |
- EXPECT_TRUE(shim()->GetInitialData( |
- synced_notifications_private::SYNC_DATA_TYPE_APP_INFO, &data)); |
- EXPECT_EQ(1U, data.size()); |
- EXPECT_TRUE(DataSpecificsMatch(app_info_processor()->data()[0], |
- data[0]->data_item)); |
-} |
- |
-// Verify that notification updates are properly handled. |
-TEST_F(SyncedNotificationsShimTest, UpdateNotification) { |
- syncer::SyncData data = |
- BuildData(syncer::SYNCED_NOTIFICATIONS, "notif_key"); |
- std::string serialized = |
- data.GetSpecifics().synced_notification().SerializeAsString(); |
- EXPECT_FALSE(shim()->UpdateNotification(serialized)); |
- |
- StartSync(); |
- |
- EXPECT_FALSE(shim()->UpdateNotification("gibberish")); |
- EXPECT_TRUE(notification_processor()->changes().empty()); |
- |
- EXPECT_TRUE(shim()->UpdateNotification(serialized)); |
- EXPECT_EQ(1U, notification_processor()->changes().size()); |
- EXPECT_EQ(syncer::SyncChange::ACTION_UPDATE, |
- notification_processor()->changes()[0].change_type()); |
- EXPECT_EQ(syncer::SYNCED_NOTIFICATIONS, |
- notification_processor()->changes()[0].sync_data().GetDataType()); |
- EXPECT_EQ(serialized, |
- notification_processor() |
- ->changes()[0] |
- .sync_data() |
- .GetSpecifics() |
- .synced_notification() |
- .SerializeAsString()); |
-} |
- |
-// Verify that SetRenderContext updates the datatype context properly. |
-TEST_F(SyncedNotificationsShimTest, SetRenderContext) { |
- const std::string kContext = "context"; |
- EXPECT_FALSE(shim()->SetRenderContext( |
- synced_notifications_private::REFRESH_REQUEST_REFRESH_NEEDED, kContext)); |
- EXPECT_FALSE(refresh_requested()); |
- |
- StartSync(); |
- |
- EXPECT_TRUE(shim()->SetRenderContext( |
- synced_notifications_private::REFRESH_REQUEST_REFRESH_NEEDED, kContext)); |
- EXPECT_EQ(kContext, notification_processor()->context()); |
- EXPECT_TRUE(refresh_requested()); |
-} |
- |
-} // namespace |