Chromium Code Reviews| Index: chrome/browser/search_engines/template_url_service_sync_unittest.cc |
| diff --git a/chrome/browser/search_engines/template_url_service_sync_unittest.cc b/chrome/browser/search_engines/template_url_service_sync_unittest.cc |
| index 3c01b17092aadff9cc2368ca9247bfa31bf9c247..ff90280800f797c698bb4b1558ef811bbba4c794 100644 |
| --- a/chrome/browser/search_engines/template_url_service_sync_unittest.cc |
| +++ b/chrome/browser/search_engines/template_url_service_sync_unittest.cc |
| @@ -225,6 +225,14 @@ class TemplateURLServiceSyncTest : public testing::Test { |
| // Syntactic sugar. |
| TemplateURL* Deserialize(const syncer::SyncData& sync_data); |
| + // Creates a new TemplateURL copying the fields of |turl| but replacing |
| + // the |url| and |guid| and initializing the date_created and last_modified |
| + // timestamps to |last_mod|. The caller owns the returned TemplateURL*. |
| + TemplateURL* CopyTemplateURL(const TemplateURL* turl, |
| + const std::string& url, |
| + const std::string& guid, |
| + time_t last_mod = 100); |
|
Peter Kasting
2013/02/04 20:35:32
Google style guide bans default arguments
beaudoin
2013/02/04 22:33:40
I got the idea from CreateTestTemplateURL above. :
Peter Kasting
2013/02/04 23:52:29
I wouldn't bother trying to fix existing usage, es
|
| + |
| protected: |
| // We keep two TemplateURLServices to test syncing between them. |
| TemplateURLServiceTestUtil test_util_a_; |
| @@ -361,6 +369,18 @@ TemplateURL* TemplateURLServiceSyncTest::Deserialize( |
| NULL, sync_data, &dummy); |
| } |
| +TemplateURL* TemplateURLServiceSyncTest::CopyTemplateURL( |
| + const TemplateURL* turl, |
| + const std::string& url, |
| + const std::string& guid, |
| + time_t last_mod) { |
| + TemplateURLData data (turl->data()); |
| + data.SetURL(url); |
| + data.date_created = Time::FromTimeT(last_mod); |
| + data.last_modified = Time::FromTimeT(last_mod); |
| + data.sync_guid = guid; |
| + return new TemplateURL(NULL, data); |
| +} |
| // Actual tests --------------------------------------------------------------- |
| @@ -1690,8 +1710,12 @@ TEST_F(TemplateURLServiceSyncTest, SyncWithManagedDefaultSearch) { |
| const char kSearchURL[] = "http://manageddefault.com/search?t={searchTerms}"; |
| const char kIconURL[] = "http://manageddefault.com/icon.jpg"; |
| const char kEncodings[] = "UTF-16;UTF-32"; |
| + const char kAlternateURL[] = |
| + "http://manageddefault.com/search#t={searchTerms}"; |
| + const char kSearchTermsReplacementKey[] = "espv"; |
| test_util_a_.SetManagedDefaultSearchPreferences(true, kName, kName, |
| - kSearchURL, std::string(), kIconURL, kEncodings); |
| + kSearchURL, std::string(), kIconURL, kEncodings, kAlternateURL, |
| + kSearchTermsReplacementKey); |
| const TemplateURL* dsp_turl = model()->GetDefaultSearchProvider(); |
| EXPECT_TRUE(model()->is_default_search_managed()); |
| @@ -2115,3 +2139,137 @@ TEST_F(TemplateURLServiceSyncTest, MergeInSyncTemplateURL) { |
| } |
| } // for |
| } |
| + |
| +TEST_F(TemplateURLServiceSyncTest, MergePrepopulatedEngine) { |
| + scoped_ptr<TemplateURL> default_turl( |
| + TemplateURLPrepopulateData::GetPrepopulatedDefaultSearch(NULL)); |
| + |
| + // Merge with an initial list containing a prepopulated engine with a wrong |
| + // URL. |
| + syncer::SyncDataList list; |
| + scoped_ptr<TemplateURL> sync_turl(CopyTemplateURL(default_turl.get(), |
| + "http://wrong.url.com?q={searchTerms}", "default")); |
| + list.push_back(TemplateURLService::CreateSyncDataFromTemplateURL(*sync_turl)); |
| + syncer::SyncMergeResult merge_result = model()->MergeDataAndStartSyncing( |
| + syncer::SEARCH_ENGINES, list, PassProcessor(), |
| + CreateAndPassSyncErrorFactory()); |
| + |
| + const TemplateURL* result_turl = model()->GetTemplateURLForGUID("default"); |
| + EXPECT_TRUE(result_turl); |
| + EXPECT_EQ(default_turl->keyword(), result_turl->keyword()); |
| + EXPECT_EQ(default_turl->short_name(), result_turl->short_name()); |
| + EXPECT_EQ(default_turl->url(), result_turl->url()); |
| +} |
| + |
| +TEST_F(TemplateURLServiceSyncTest, AddPrepopulatedEngine) { |
| + syncer::SyncMergeResult merge_result = model()->MergeDataAndStartSyncing( |
| + syncer::SEARCH_ENGINES, syncer::SyncDataList(), PassProcessor(), |
| + CreateAndPassSyncErrorFactory()); |
| + |
| + scoped_ptr<TemplateURL> default_turl( |
| + TemplateURLPrepopulateData::GetPrepopulatedDefaultSearch(NULL)); |
| + TemplateURL* sync_turl = CopyTemplateURL(default_turl.get(), |
| + "http://wrong.url.com?q={searchTerms}", "default"); |
| + |
| + // Add a prepopulated engine with a wrong URL. |
| + syncer::SyncChangeList changes; |
| + changes.push_back(CreateTestSyncChange(syncer::SyncChange::ACTION_ADD, |
| + sync_turl)); |
| + model()->ProcessSyncChanges(FROM_HERE, changes); |
| + |
| + const TemplateURL* result_turl = model()->GetTemplateURLForGUID("default"); |
| + EXPECT_TRUE(result_turl); |
| + EXPECT_EQ(default_turl->keyword(), result_turl->keyword()); |
| + EXPECT_EQ(default_turl->short_name(), result_turl->short_name()); |
| + EXPECT_EQ(default_turl->url(), result_turl->url()); |
| +} |
| + |
| +TEST_F(TemplateURLServiceSyncTest, UpdatePrepopulatedEngine) { |
| + scoped_ptr<TemplateURL> default_turl( |
| + TemplateURLPrepopulateData::GetPrepopulatedDefaultSearch(NULL)); |
| + |
| + TemplateURLData data(default_turl->data()); |
| + data.SetURL("http://old.wrong.url.com?q={searchTerms}"); |
| + data.sync_guid = "default"; |
| + model()->Add(new TemplateURL(NULL, data)); |
| + |
| + syncer::SyncMergeResult merge_result = model()->MergeDataAndStartSyncing( |
| + syncer::SEARCH_ENGINES, syncer::SyncDataList(), PassProcessor(), |
| + CreateAndPassSyncErrorFactory()); |
| + |
| + TemplateURL* sync_turl = CopyTemplateURL(default_turl.get(), |
| + "http://new.wrong.url.com?q={searchTerms}", "default"); |
| + |
| + // Update the engine in the model, which is prepopulated, with a new one. |
| + // Both have wrong URLs, but it should still get corrected. |
| + syncer::SyncChangeList changes; |
| + changes.push_back(CreateTestSyncChange(syncer::SyncChange::ACTION_UPDATE, |
| + sync_turl)); |
| + model()->ProcessSyncChanges(FROM_HERE, changes); |
| + |
| + const TemplateURL* result_turl = model()->GetTemplateURLForGUID("default"); |
| + EXPECT_TRUE(result_turl); |
| + EXPECT_EQ(default_turl->keyword(), result_turl->keyword()); |
| + EXPECT_EQ(default_turl->short_name(), result_turl->short_name()); |
| + EXPECT_EQ(default_turl->url(), result_turl->url()); |
| +} |
| + |
| +TEST_F(TemplateURLServiceSyncTest, MergeEditedPrepopulatedEngine) { |
| + scoped_ptr<TemplateURL> default_turl( |
| + TemplateURLPrepopulateData::GetPrepopulatedDefaultSearch(NULL)); |
| + |
| + TemplateURLData data(default_turl->data()); |
| + data.safe_for_autoreplace = false; |
| + data.SetKeyword(ASCIIToUTF16("new_kw")); |
| + data.short_name = ASCIIToUTF16("my name"); |
| + data.SetURL("http://wrong.url.com?q={searchTerms}"); |
| + data.date_created = Time::FromTimeT(50); |
| + data.last_modified = Time::FromTimeT(50); |
| + data.sync_guid = "default"; |
| + model()->Add(new TemplateURL(NULL, data)); |
| + |
| + data.date_created = Time::FromTimeT(100); |
| + data.last_modified = Time::FromTimeT(100); |
| + scoped_ptr<TemplateURL> sync_turl(new TemplateURL(NULL, data)); |
| + syncer::SyncDataList list; |
| + list.push_back(TemplateURLService::CreateSyncDataFromTemplateURL(*sync_turl)); |
| + syncer::SyncMergeResult merge_result = model()->MergeDataAndStartSyncing( |
| + syncer::SEARCH_ENGINES, list, PassProcessor(), |
| + CreateAndPassSyncErrorFactory()); |
| + |
| + const TemplateURL* result_turl = model()->GetTemplateURLForGUID("default"); |
| + EXPECT_TRUE(result_turl); |
| + EXPECT_EQ(ASCIIToUTF16("new_kw"), result_turl->keyword()); |
| + EXPECT_EQ(ASCIIToUTF16("my name"), result_turl->short_name()); |
| + EXPECT_EQ(default_turl->url(), result_turl->url()); |
| +} |
| + |
| +TEST_F(TemplateURLServiceSyncTest, MergeNonEditedPrepopulatedEngine) { |
| + scoped_ptr<TemplateURL> default_turl( |
| + TemplateURLPrepopulateData::GetPrepopulatedDefaultSearch(NULL)); |
| + |
| + TemplateURLData data(default_turl->data()); |
| + data.safe_for_autoreplace = true; // Can be replaced with built-in values. |
| + data.SetKeyword(ASCIIToUTF16("new_kw")); |
| + data.short_name = ASCIIToUTF16("my name"); |
| + data.SetURL("http://wrong.url.com?q={searchTerms}"); |
| + data.date_created = Time::FromTimeT(50); |
| + data.last_modified = Time::FromTimeT(50); |
| + data.sync_guid = "default"; |
| + model()->Add(new TemplateURL(NULL, data)); |
| + |
| + data.date_created = Time::FromTimeT(100); |
| + data.last_modified = Time::FromTimeT(100); |
| + scoped_ptr<TemplateURL> sync_turl(new TemplateURL(NULL, data)); |
| + syncer::SyncDataList list; |
| + list.push_back(TemplateURLService::CreateSyncDataFromTemplateURL(*sync_turl)); |
| + syncer::SyncMergeResult merge_result = model()->MergeDataAndStartSyncing( |
| + syncer::SEARCH_ENGINES, list, PassProcessor(), |
| + CreateAndPassSyncErrorFactory()); |
| + |
| + const TemplateURL* result_turl = model()->GetTemplateURLForGUID("default"); |
| + EXPECT_TRUE(result_turl); |
| + EXPECT_EQ(default_turl->keyword(), result_turl->keyword()); |
| + EXPECT_EQ(default_turl->short_name(), result_turl->short_name()); |
| + EXPECT_EQ(default_turl->url(), result_turl->url()); |
| +} |