Index: chrome/browser/sync/api/sync_change_unittest.cc |
diff --git a/chrome/browser/sync/api/sync_change_unittest.cc b/chrome/browser/sync/api/sync_change_unittest.cc |
new file mode 100644 |
index 0000000000000000000000000000000000000000..0a9104dcb451417d193903baa9c6bc5d1d296651 |
--- /dev/null |
+++ b/chrome/browser/sync/api/sync_change_unittest.cc |
@@ -0,0 +1,128 @@ |
+// Copyright (c) 2011 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/sync/api/sync_change.h" |
+ |
+#include <string> |
+ |
+#include "base/values.h" |
+#include "testing/gtest/include/gtest/gtest.h" |
+#include "chrome/browser/sync/protocol/preference_specifics.pb.h" |
+#include "chrome/browser/sync/protocol/proto_value_conversions.h" |
+ |
+using browser_sync::EntitySpecificsToValue; |
+ |
+// Ordered list of SyncChange's. |
+typedef std::vector<SyncChange> SyncChangeList; |
+ |
+namespace { |
+ |
+typedef testing::Test SyncChangeTest; |
+ |
+TEST_F(SyncChangeTest, LocalDelete) { |
+ SyncChange::SyncChangeType change_type = SyncChange::ACTION_DELETE; |
+ std::string tag = "client_tag"; |
+ SyncChange e(change_type, |
+ SyncData::CreateLocalData(tag)); |
+ EXPECT_EQ(change_type, e.change_type()); |
+ EXPECT_EQ(tag, e.sync_data().GetTag()); |
+ EXPECT_EQ(syncable::UNSPECIFIED, e.sync_data().GetDataType()); |
+} |
+ |
+TEST_F(SyncChangeTest, LocalUpdate) { |
+ SyncChange::SyncChangeType change_type = SyncChange::ACTION_UPDATE; |
+ sync_pb::EntitySpecifics specifics; |
+ sync_pb::PreferenceSpecifics* pref_specifics = |
+ specifics.MutableExtension(sync_pb::preference); |
+ pref_specifics->set_name("test"); |
+ std::string tag = "client_tag"; |
+ SyncChange e(change_type, |
+ SyncData::CreateLocalData(tag, specifics)); |
+ EXPECT_EQ(change_type, e.change_type()); |
+ EXPECT_EQ(tag, e.sync_data().GetTag()); |
+ EXPECT_EQ(syncable::PREFERENCES, e.sync_data().GetDataType()); |
+ scoped_ptr<DictionaryValue> ref_spec(EntitySpecificsToValue(specifics)); |
+ scoped_ptr<DictionaryValue> e_spec(EntitySpecificsToValue( |
+ e.sync_data().GetSpecifics())); |
+ EXPECT_TRUE(ref_spec->Equals(e_spec.get())); |
+} |
+ |
+TEST_F(SyncChangeTest, LocalAdd) { |
+ SyncChange::SyncChangeType change_type = SyncChange::ACTION_ADD; |
+ sync_pb::EntitySpecifics specifics; |
+ sync_pb::PreferenceSpecifics* pref_specifics = |
+ specifics.MutableExtension(sync_pb::preference); |
+ pref_specifics->set_name("test"); |
+ std::string tag = "client_tag"; |
+ SyncChange e(change_type, |
+ SyncData::CreateLocalData(tag, specifics)); |
+ EXPECT_EQ(change_type, e.change_type()); |
+ EXPECT_EQ(tag, e.sync_data().GetTag()); |
+ EXPECT_EQ(syncable::PREFERENCES, e.sync_data().GetDataType()); |
+ scoped_ptr<DictionaryValue> ref_spec(EntitySpecificsToValue(specifics)); |
+ scoped_ptr<DictionaryValue> e_spec(EntitySpecificsToValue( |
+ e.sync_data().GetSpecifics())); |
+ EXPECT_TRUE(ref_spec->Equals(e_spec.get())); |
+} |
+ |
+TEST_F(SyncChangeTest, SyncerChanges) { |
+ SyncChangeList change_list; |
+ |
+ // Create an update. |
+ sync_pb::EntitySpecifics update_specifics; |
+ sync_pb::PreferenceSpecifics* pref_specifics = |
+ update_specifics.MutableExtension(sync_pb::preference); |
+ pref_specifics->set_name("update"); |
+ change_list.push_back(SyncChange( |
+ SyncChange::ACTION_UPDATE, |
+ SyncData::CreateRemoteData(update_specifics))); |
+ |
+ // Create an add. |
+ sync_pb::EntitySpecifics add_specifics; |
+ pref_specifics = |
+ add_specifics.MutableExtension(sync_pb::preference); |
+ pref_specifics->set_name("add"); |
+ change_list.push_back(SyncChange( |
+ SyncChange::ACTION_ADD, |
+ SyncData::CreateRemoteData(add_specifics))); |
+ |
+ // Create a delete. |
+ sync_pb::EntitySpecifics delete_specifics; |
+ pref_specifics = |
+ delete_specifics.MutableExtension(sync_pb::preference); |
+ pref_specifics->set_name("add"); |
+ change_list.push_back(SyncChange( |
+ SyncChange::ACTION_DELETE, |
+ SyncData::CreateRemoteData(delete_specifics))); |
+ |
+ ASSERT_EQ(3U, change_list.size()); |
+ |
+ // Verify update. |
+ SyncChange e = change_list[0]; |
+ EXPECT_EQ(SyncChange::ACTION_UPDATE, e.change_type()); |
+ EXPECT_EQ(syncable::PREFERENCES, e.sync_data().GetDataType()); |
+ scoped_ptr<DictionaryValue> ref_spec(EntitySpecificsToValue( |
+ update_specifics)); |
+ scoped_ptr<DictionaryValue> e_spec(EntitySpecificsToValue( |
+ e.sync_data().GetSpecifics())); |
+ EXPECT_TRUE(ref_spec->Equals(e_spec.get())); |
+ |
+ // Verify add. |
+ e = change_list[1]; |
+ EXPECT_EQ(SyncChange::ACTION_ADD, e.change_type()); |
+ EXPECT_EQ(syncable::PREFERENCES, e.sync_data().GetDataType()); |
+ ref_spec.reset(EntitySpecificsToValue(add_specifics)); |
+ e_spec.reset(EntitySpecificsToValue(e.sync_data().GetSpecifics())); |
+ EXPECT_TRUE(ref_spec->Equals(e_spec.get())); |
+ |
+ // Verify delete. |
+ e = change_list[2]; |
+ EXPECT_EQ(SyncChange::ACTION_DELETE, e.change_type()); |
+ EXPECT_EQ(syncable::PREFERENCES, e.sync_data().GetDataType()); |
+ ref_spec.reset(EntitySpecificsToValue(delete_specifics)); |
+ e_spec.reset(EntitySpecificsToValue(e.sync_data().GetSpecifics())); |
+ EXPECT_TRUE(ref_spec->Equals(e_spec.get())); |
+} |
+ |
+} // namespace |