Home | History | Annotate | Download | only in search_engines
      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 "base/memory/scoped_vector.h"
      6 #include "base/strings/string_util.h"
      7 #include "base/strings/utf_string_conversions.h"
      8 #include "chrome/browser/search_engines/template_url.h"
      9 #include "chrome/browser/search_engines/template_url_service.h"
     10 #include "chrome/browser/search_engines/util.h"
     11 #include "testing/gtest/include/gtest/gtest.h"
     12 
     13 namespace {
     14 
     15 // Creates a TemplateURL with default values except for the prepopulate ID,
     16 // keyword and TemplateURLID. Only use this in tests if your tests do not
     17 // care about other fields. The caller is the owner of this TemplateURL.
     18 TemplateURL* CreatePrepopulateTemplateURL(int prepopulate_id,
     19                                           const std::string& keyword,
     20                                           TemplateURLID id) {
     21   TemplateURLData data;
     22   data.prepopulate_id = prepopulate_id;
     23   data.SetKeyword(ASCIIToUTF16(keyword));
     24   data.id = id;
     25   return new TemplateURL(NULL, data);
     26 }
     27 
     28 };  // namespace
     29 
     30 TEST(TemplateURLServiceUtilTest, RemoveDuplicatePrepopulateIDs) {
     31   ScopedVector<TemplateURL> prepopulated_turls;
     32   TemplateURLService::TemplateURLVector local_turls;
     33   STLElementDeleter<TemplateURLService::TemplateURLVector> local_turls_deleter(
     34       &local_turls);
     35 
     36   prepopulated_turls.push_back(CreatePrepopulateTemplateURL(1, "winner4", 1));
     37   prepopulated_turls.push_back(CreatePrepopulateTemplateURL(2, "xxx", 2));
     38   prepopulated_turls.push_back(CreatePrepopulateTemplateURL(3, "yyy", 3));
     39 
     40   // Create a sets of different TURLs grouped by prepopulate ID. Each group
     41   // will test a different heuristic of RemoveDuplicatePrepopulateIDs.
     42   // Ignored set - These should be left alone as they do not have valid
     43   // prepopulate IDs.
     44   local_turls.push_back(CreatePrepopulateTemplateURL(0, "winner1", 4));
     45   local_turls.push_back(CreatePrepopulateTemplateURL(0, "winner2", 5));
     46   local_turls.push_back(CreatePrepopulateTemplateURL(0, "winner3", 6));
     47   size_t num_non_prepopulated_urls = local_turls.size();
     48 
     49   // Keyword match set - Prefer the one that matches the keyword of the
     50   // prepopulate ID.
     51   local_turls.push_back(CreatePrepopulateTemplateURL(1, "loser1", 7));
     52   local_turls.push_back(CreatePrepopulateTemplateURL(1, "loser2", 8));
     53   local_turls.push_back(CreatePrepopulateTemplateURL(1, "winner4", 9));
     54 
     55   // Default set - Prefer the default search engine over all other criteria.
     56   // The last one is the default. It will be passed as the
     57   // default_search_provider parameter to RemoveDuplicatePrepopulateIDs.
     58   local_turls.push_back(CreatePrepopulateTemplateURL(2, "loser3", 10));
     59   local_turls.push_back(CreatePrepopulateTemplateURL(2, "xxx", 11));
     60   TemplateURL* default_turl = CreatePrepopulateTemplateURL(2, "winner5", 12);
     61   local_turls.push_back(default_turl);
     62 
     63   // ID set - Prefer the lowest TemplateURLID if the keywords don't match and if
     64   // none are the default.
     65   local_turls.push_back(CreatePrepopulateTemplateURL(3, "winner6", 13));
     66   local_turls.push_back(CreatePrepopulateTemplateURL(3, "loser5", 14));
     67   local_turls.push_back(CreatePrepopulateTemplateURL(3, "loser6", 15));
     68 
     69   RemoveDuplicatePrepopulateIDs(NULL, prepopulated_turls, default_turl,
     70       &local_turls, NULL);
     71 
     72   // Verify that the expected local TURLs survived the process.
     73   EXPECT_EQ(local_turls.size(),
     74             prepopulated_turls.size() + num_non_prepopulated_urls);
     75   for (TemplateURLService::TemplateURLVector::const_iterator itr =
     76        local_turls.begin(); itr != local_turls.end(); ++itr)
     77     EXPECT_TRUE(StartsWith((*itr)->keyword(), ASCIIToUTF16("winner"), true));
     78 }
     79