sync_change_unittest.cc revision 7dbb3d5cf0c15f500944d211057644d6a2f37371
1// Copyright (c) 2012 The Chromium Authors. All rights reserved. 2// Use of this source code is governed by a BSD-style license that can be 3// found in the LICENSE file. 4 5#include "sync/api/sync_change.h" 6 7#include <string> 8 9#include "base/memory/scoped_ptr.h" 10#include "base/time/time.h" 11#include "base/values.h" 12#include "sync/protocol/preference_specifics.pb.h" 13#include "sync/protocol/proto_value_conversions.h" 14#include "sync/protocol/sync.pb.h" 15#include "testing/gtest/include/gtest/gtest.h" 16 17namespace syncer { 18 19// Ordered list of SyncChange's. 20typedef std::vector<SyncChange> SyncChangeList; 21 22namespace { 23 24typedef testing::Test SyncChangeTest; 25 26TEST_F(SyncChangeTest, LocalDelete) { 27 SyncChange::SyncChangeType change_type = SyncChange::ACTION_DELETE; 28 std::string tag = "client_tag"; 29 SyncChange e(FROM_HERE, 30 change_type, 31 SyncData::CreateLocalDelete(tag, PREFERENCES)); 32 EXPECT_EQ(change_type, e.change_type()); 33 EXPECT_EQ(tag, e.sync_data().GetTag()); 34 EXPECT_EQ(PREFERENCES, e.sync_data().GetDataType()); 35} 36 37TEST_F(SyncChangeTest, LocalUpdate) { 38 SyncChange::SyncChangeType change_type = SyncChange::ACTION_UPDATE; 39 sync_pb::EntitySpecifics specifics; 40 sync_pb::PreferenceSpecifics* pref_specifics = specifics.mutable_preference(); 41 pref_specifics->set_name("test"); 42 std::string tag = "client_tag"; 43 std::string title = "client_title"; 44 SyncChange e(FROM_HERE, 45 change_type, 46 SyncData::CreateLocalData(tag, title, specifics)); 47 EXPECT_EQ(change_type, e.change_type()); 48 EXPECT_EQ(tag, e.sync_data().GetTag()); 49 EXPECT_EQ(title, e.sync_data().GetTitle()); 50 EXPECT_EQ(PREFERENCES, e.sync_data().GetDataType()); 51 scoped_ptr<base::DictionaryValue> ref_spec(EntitySpecificsToValue(specifics)); 52 scoped_ptr<base::DictionaryValue> e_spec(EntitySpecificsToValue( 53 e.sync_data().GetSpecifics())); 54 EXPECT_TRUE(ref_spec->Equals(e_spec.get())); 55} 56 57TEST_F(SyncChangeTest, LocalAdd) { 58 SyncChange::SyncChangeType change_type = SyncChange::ACTION_ADD; 59 sync_pb::EntitySpecifics specifics; 60 sync_pb::PreferenceSpecifics* pref_specifics = specifics.mutable_preference(); 61 pref_specifics->set_name("test"); 62 std::string tag = "client_tag"; 63 std::string title = "client_title"; 64 SyncChange e(FROM_HERE, 65 change_type, 66 SyncData::CreateLocalData(tag, title, specifics)); 67 EXPECT_EQ(change_type, e.change_type()); 68 EXPECT_EQ(tag, e.sync_data().GetTag()); 69 EXPECT_EQ(title, e.sync_data().GetTitle()); 70 EXPECT_EQ(PREFERENCES, e.sync_data().GetDataType()); 71 scoped_ptr<base::DictionaryValue> ref_spec(EntitySpecificsToValue(specifics)); 72 scoped_ptr<base::DictionaryValue> e_spec(EntitySpecificsToValue( 73 e.sync_data().GetSpecifics())); 74 EXPECT_TRUE(ref_spec->Equals(e_spec.get())); 75} 76 77TEST_F(SyncChangeTest, SyncerChanges) { 78 SyncChangeList change_list; 79 80 // Create an update. 81 sync_pb::EntitySpecifics update_specifics; 82 sync_pb::PreferenceSpecifics* pref_specifics = 83 update_specifics.mutable_preference(); 84 pref_specifics->set_name("update"); 85 change_list.push_back(SyncChange( 86 FROM_HERE, 87 SyncChange::ACTION_UPDATE, 88 SyncData::CreateRemoteData(1, update_specifics, base::Time()))); 89 90 // Create an add. 91 sync_pb::EntitySpecifics add_specifics; 92 pref_specifics = add_specifics.mutable_preference(); 93 pref_specifics->set_name("add"); 94 change_list.push_back(SyncChange( 95 FROM_HERE, 96 SyncChange::ACTION_ADD, 97 SyncData::CreateRemoteData(2, add_specifics, base::Time()))); 98 99 // Create a delete. 100 sync_pb::EntitySpecifics delete_specifics; 101 pref_specifics = delete_specifics.mutable_preference(); 102 pref_specifics->set_name("add"); 103 change_list.push_back(SyncChange( 104 FROM_HERE, 105 SyncChange::ACTION_DELETE, 106 SyncData::CreateRemoteData(3, delete_specifics, base::Time()))); 107 108 ASSERT_EQ(3U, change_list.size()); 109 110 // Verify update. 111 SyncChange e = change_list[0]; 112 EXPECT_EQ(SyncChange::ACTION_UPDATE, e.change_type()); 113 EXPECT_EQ(PREFERENCES, e.sync_data().GetDataType()); 114 scoped_ptr<base::DictionaryValue> ref_spec(EntitySpecificsToValue( 115 update_specifics)); 116 scoped_ptr<base::DictionaryValue> e_spec(EntitySpecificsToValue( 117 e.sync_data().GetSpecifics())); 118 EXPECT_TRUE(ref_spec->Equals(e_spec.get())); 119 120 // Verify add. 121 e = change_list[1]; 122 EXPECT_EQ(SyncChange::ACTION_ADD, e.change_type()); 123 EXPECT_EQ(PREFERENCES, e.sync_data().GetDataType()); 124 ref_spec.reset(EntitySpecificsToValue(add_specifics)); 125 e_spec.reset(EntitySpecificsToValue(e.sync_data().GetSpecifics())); 126 EXPECT_TRUE(ref_spec->Equals(e_spec.get())); 127 128 // Verify delete. 129 e = change_list[2]; 130 EXPECT_EQ(SyncChange::ACTION_DELETE, e.change_type()); 131 EXPECT_EQ(PREFERENCES, e.sync_data().GetDataType()); 132 ref_spec.reset(EntitySpecificsToValue(delete_specifics)); 133 e_spec.reset(EntitySpecificsToValue(e.sync_data().GetSpecifics())); 134 EXPECT_TRUE(ref_spec->Equals(e_spec.get())); 135} 136 137} // namespace 138 139} // namespace syncer 140