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.
5 #include "sync/api/sync_change.h"
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"
19 // Ordered list of SyncChange's.
20 typedef std::vector<SyncChange> SyncChangeList;
24 typedef testing::Test SyncChangeTest;
26 TEST_F(SyncChangeTest, LocalDelete) {
27 SyncChange::SyncChangeType change_type = SyncChange::ACTION_DELETE;
28 std::string tag = "client_tag";
29 SyncChange e(FROM_HERE,
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());
37 TEST_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,
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()));
57 TEST_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,
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()));
77 TEST_F(SyncChangeTest, SyncerChanges) {
78 SyncChangeList change_list;
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(
87 SyncChange::ACTION_UPDATE,
88 SyncData::CreateRemoteData(1, update_specifics, base::Time())));
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(
96 SyncChange::ACTION_ADD,
97 SyncData::CreateRemoteData(2, add_specifics, base::Time())));
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(
105 SyncChange::ACTION_DELETE,
106 SyncData::CreateRemoteData(3, delete_specifics, base::Time())));
108 ASSERT_EQ(3U, change_list.size());
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(
116 scoped_ptr<base::DictionaryValue> e_spec(EntitySpecificsToValue(
117 e.sync_data().GetSpecifics()));
118 EXPECT_TRUE(ref_spec->Equals(e_spec.get()));
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()));
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()));
139 } // namespace syncer