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

Side by Side Diff: chrome/browser/sync/glue/autofill_profile_syncable_service_unittest.cc

Issue 7819002: Migrate AutofillProfile sync to new API. (Closed) Base URL: svn://chrome-svn/chrome/trunk/src/
Patch Set: '' Created 9 years, 3 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 unified diff | Download patch | Annotate | Revision Log
Property Changes:
Added: svn:eol-style
+ LF
OLDNEW
(Empty)
1 // Copyright (c) 2011 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 "base/tracked.h"
6 #include "base/utf_string_conversions.h"
7 #include "chrome/browser/sync/glue/autofill_profile_syncable_service.h"
8 #include "chrome/browser/sync/internal_api/read_node_mock.h"
9 #include "chrome/browser/sync/internal_api/syncapi_mock.h"
10 #include "chrome/browser/sync/syncable/syncable.h"
11 #include "chrome/browser/sync/syncable/syncable_mock.h"
12 #include "testing/gmock/include/gmock/gmock.h"
13 #include "testing/gtest/include/gtest/gtest.h"
14
15 using ::testing::_;
16 using ::testing::DoAll;
17 using ::testing::Eq;
18 using ::testing::Return;
19 using ::testing::Property;
20 class AutofillProfile;
21
22 namespace browser_sync {
23
24 class MockAutofillProfileSyncableService
25 : public browser_sync::AutofillProfileSyncableService {
dhollowa 2011/09/01 23:20:29 nit: indent 4 spaces
26 public:
27 MockAutofillProfileSyncableService() {
28 }
29 virtual ~MockAutofillProfileSyncableService() {}
30
31 MOCK_CONST_METHOD1(LoadAutofillData,
32 bool(std::vector<AutofillProfile*>*));
33 MOCK_METHOD1(SaveChangesToWebData,
34 bool(const AutofillProfileSyncableService::DataBundle&));
35
36 // Helper for tests that do not need to setup service completely throught the
dhollowa 2011/09/01 23:20:29 s/throught/through/
37 // MergeDataAndStartSyncing().
38 class AutoSetSyncProcessor {
39 public:
40 AutoSetSyncProcessor(MockAutofillProfileSyncableService *service,
dhollowa 2011/09/01 20:17:49 nit: s/ */* /
GeorgeY 2011/09/02 04:34:12 Done.
41 SyncChangeProcessor* sync_processor)
42 : service_(service) {
43 service->set_sync_processor(sync_processor);
44 }
45 ~AutoSetSyncProcessor() {
46 service_->set_sync_processor(NULL);
47 }
48 MockAutofillProfileSyncableService *service_;
dhollowa 2011/09/01 20:17:49 nit: s/ */* /
GeorgeY 2011/09/02 04:34:12 Done.
49 };
50 };
51
52 ACTION_P(CopyData, data) {
53 arg0->resize(data->size());
54 std::copy(data->begin(), data->end(), arg0->begin());
55 }
56
57 MATCHER_P3(DataBundleCheck, n_delete, n_update, n_new, "") {
58 return (arg.profiles_to_delete.size() == n_delete) &&
59 (arg.updated_profiles.size() == n_update) &&
60 (arg.new_profiles.size() == n_new);
61 }
62
63 class MockSyncChangeProcessor : public SyncChangeProcessor {
64 public:
65 MockSyncChangeProcessor() {}
66 virtual ~MockSyncChangeProcessor() {}
67
68 MOCK_METHOD2(ProcessSyncChanges,
69 SyncError(const tracked_objects::Location&,
70 const SyncChangeList&));
71 };
72
73 class AutofillProfileSyncableServiceTest : public testing::Test {
74 public:
75 AutofillProfileSyncableServiceTest()
76 : db_thread_(BrowserThread::DB, &message_loop_) {}
77
78 protected:
79 MessageLoop message_loop_;
80 BrowserThread db_thread_;
81 MockAutofillProfileSyncableService autofill_syncable_service_;
82 MockSyncChangeProcessor sync_processor_;
83 };
84
85 TEST_F(AutofillProfileSyncableServiceTest, MergeDataAndStartSyncing) {
86 std::vector<AutofillProfile *> profiles_from_web_db;
87 std::string guid_present = "EDC609ED-7EEE-4F27-B00C-423242A9C44B";
88 std::string guid_synced1 = "EDC609ED-7EEE-4F27-B00C-423242A9C44C";
89 std::string guid_synced2 = "EDC609ED-7EEE-4F27-B00C-423242A9C44D";
90
91 profiles_from_web_db.push_back(new AutofillProfile(guid_present));
92 profiles_from_web_db.back()->SetInfo(NAME_FIRST, UTF8ToUTF16("John"));
93
94 SyncDataList data_list;
95 AutofillProfile profile1(guid_synced1);
96 profile1.SetInfo(NAME_FIRST, UTF8ToUTF16("Jane"));
97 data_list.push_back(autofill_syncable_service_.CreateData(profile1));
98 AutofillProfile profile2(guid_synced2);
99 profile2.SetInfo(NAME_FIRST, UTF8ToUTF16("Harry"));
100 data_list.push_back(autofill_syncable_service_.CreateData(profile2));
101
102 EXPECT_CALL(autofill_syncable_service_, LoadAutofillData(_))
103 .Times(1)
104 .WillOnce(DoAll(CopyData(&profiles_from_web_db), Return(true)));
lipalani1 2011/09/01 05:06:02 Dont you want to verify the data that is being sen
GeorgeY 2011/09/02 04:34:12 CopyData(&profiles_from_web_db) puts data into the
105 EXPECT_CALL(autofill_syncable_service_, SaveChangesToWebData(_))
106 .Times(1)
107 .WillOnce(Return(true));
108 ON_CALL(sync_processor_, ProcessSyncChanges(_, _))
109 .WillByDefault(Return(SyncError()));
110 EXPECT_CALL(sync_processor_,
111 ProcessSyncChanges(_, Property(&SyncChangeList::size, Eq(1U))))
112 .Times(1)
113 .WillOnce(Return(SyncError()));
114
115 autofill_syncable_service_.MergeDataAndStartSyncing(
116 syncable::AUTOFILL_PROFILE, data_list, &sync_processor_);
117 autofill_syncable_service_.StopSyncing(syncable::AUTOFILL_PROFILE);
118 }
119
120 TEST_F(AutofillProfileSyncableServiceTest, GetAllSyncData) {
121 std::vector<AutofillProfile *> profiles_from_web_db;
122 std::string guid_present1 = "EDC609ED-7EEE-4F27-B00C-423242A9C44B";
123 std::string guid_present2 = "EDC609ED-7EEE-4F27-B00C-423242A9C44C";
124
125 profiles_from_web_db.push_back(new AutofillProfile(guid_present1));
126 profiles_from_web_db.back()->SetInfo(NAME_FIRST, UTF8ToUTF16("John"));
127 profiles_from_web_db.push_back(new AutofillProfile(guid_present2));
128 profiles_from_web_db.back()->SetInfo(NAME_FIRST, UTF8ToUTF16("Jane"));
129
130 EXPECT_CALL(autofill_syncable_service_, LoadAutofillData(_))
131 .Times(1)
132 .WillOnce(DoAll(CopyData(&profiles_from_web_db), Return(true)));
133
134 MockAutofillProfileSyncableService::AutoSetSyncProcessor temp(
135 &autofill_syncable_service_, &sync_processor_);
136
137 SyncDataList data =
138 autofill_syncable_service_.GetAllSyncData(syncable::AUTOFILL_PROFILE);
139
140 EXPECT_EQ(2U, data.size());
141 EXPECT_EQ(guid_present1, data.front().GetSpecifics()
142 .GetExtension(sync_pb::autofill_profile).guid());
143 EXPECT_EQ(guid_present2, data.back().GetSpecifics()
144 .GetExtension(sync_pb::autofill_profile).guid());
145 }
146
147 TEST_F(AutofillProfileSyncableServiceTest, ProcessSyncChanges) {
148 std::vector<AutofillProfile *> profiles_from_web_db;
149 std::string guid_present = "EDC609ED-7EEE-4F27-B00C-423242A9C44B";
150 std::string guid_synced = "EDC609ED-7EEE-4F27-B00C-423242A9C44C";
151
152 profiles_from_web_db.push_back(new AutofillProfile(guid_present));
153 profiles_from_web_db.back()->SetInfo(NAME_FIRST, UTF8ToUTF16("John"));
154
155 SyncChangeList change_list;
156 AutofillProfile profile(guid_synced);
157 profile.SetInfo(NAME_FIRST, UTF8ToUTF16("Jane"));
158 change_list.push_back(
159 autofill_syncable_service_.CreateChange(SyncChange::ACTION_ADD, profile));
160 change_list.push_back(
161 autofill_syncable_service_.CreateDeleteChange(guid_present));
162
163 EXPECT_CALL(autofill_syncable_service_, LoadAutofillData(_))
164 .Times(1)
165 .WillOnce(DoAll(CopyData(&profiles_from_web_db), Return(true)));
166 EXPECT_CALL(autofill_syncable_service_, SaveChangesToWebData(
167 DataBundleCheck(1U, 0U, 1U)))
168 .Times(1)
169 .WillOnce(Return(true));
170
171 MockAutofillProfileSyncableService::AutoSetSyncProcessor temp(
172 &autofill_syncable_service_, &sync_processor_);
173 SyncError error = autofill_syncable_service_.ProcessSyncChanges(
174 FROM_HERE, change_list);
175
176 EXPECT_FALSE(error.IsSet());
177 }
178
179 } // namespace browser_sync
180
dhollowa 2011/09/01 20:17:49 nit: remove extra blank line.
GeorgeY 2011/09/02 04:34:12 Done. Either this, or Lint complains :)
181
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698