summaryrefslogtreecommitdiffstats
path: root/chrome/browser/search_engines/template_url_service_util_unittest.cc
blob: 0a5ee331f5f773c3e83b5855ff1cff5e49d8d1d1 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
// Copyright (c) 2012 The Chromium Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.

#include "base/memory/scoped_vector.h"
#include "base/strings/string_util.h"
#include "base/strings/utf_string_conversions.h"
#include "chrome/browser/search_engines/template_url.h"
#include "chrome/browser/search_engines/template_url_service.h"
#include "chrome/browser/search_engines/util.h"
#include "components/search_engines/search_terms_data.h"
#include "testing/gtest/include/gtest/gtest.h"

namespace {

scoped_ptr<TemplateURLData> CreatePrepopulateTemplateURLData(
    int prepopulate_id,
    const std::string& keyword,
    TemplateURLID id) {
  scoped_ptr<TemplateURLData> data(new TemplateURLData);
  data->prepopulate_id = prepopulate_id;
  data->SetKeyword(base::ASCIIToUTF16(keyword));
  data->id = id;
  return data.Pass();
}

// Creates a TemplateURL with default values except for the prepopulate ID,
// keyword and TemplateURLID. Only use this in tests if your tests do not
// care about other fields.
scoped_ptr<TemplateURL> CreatePrepopulateTemplateURL(int prepopulate_id,
                                                     const std::string& keyword,
                                                     TemplateURLID id) {
  return make_scoped_ptr(new TemplateURL(
      *CreatePrepopulateTemplateURLData(prepopulate_id, keyword, id)));
}

};  // namespace

TEST(TemplateURLServiceUtilTest, RemoveDuplicatePrepopulateIDs) {
  ScopedVector<TemplateURLData> prepopulated_turls;
  TemplateURLService::TemplateURLVector local_turls;
  STLElementDeleter<TemplateURLService::TemplateURLVector> local_turls_deleter(
      &local_turls);

  prepopulated_turls.push_back(
      CreatePrepopulateTemplateURLData(1, "winner4", 1).release());
  prepopulated_turls.push_back(
      CreatePrepopulateTemplateURLData(2, "xxx", 2).release());
  prepopulated_turls.push_back(
      CreatePrepopulateTemplateURLData(3, "yyy", 3).release());

  // Create a sets of different TURLs grouped by prepopulate ID. Each group
  // will test a different heuristic of RemoveDuplicatePrepopulateIDs.
  // Ignored set - These should be left alone as they do not have valid
  // prepopulate IDs.
  local_turls.push_back(
      CreatePrepopulateTemplateURL(0, "winner1", 4).release());
  local_turls.push_back(
      CreatePrepopulateTemplateURL(0, "winner2", 5).release());
  local_turls.push_back(
      CreatePrepopulateTemplateURL(0, "winner3", 6).release());
  size_t num_non_prepopulated_urls = local_turls.size();

  // Keyword match set - Prefer the one that matches the keyword of the
  // prepopulate ID.
  local_turls.push_back(CreatePrepopulateTemplateURL(1, "loser1", 7).release());
  local_turls.push_back(CreatePrepopulateTemplateURL(1, "loser2", 8).release());
  local_turls.push_back(
      CreatePrepopulateTemplateURL(1, "winner4", 9).release());

  // Default set - Prefer the default search engine over all other criteria.
  // The last one is the default. It will be passed as the
  // default_search_provider parameter to RemoveDuplicatePrepopulateIDs.
  local_turls.push_back(
      CreatePrepopulateTemplateURL(2, "loser3", 10).release());
  local_turls.push_back(CreatePrepopulateTemplateURL(2, "xxx", 11).release());
  TemplateURL* default_turl =
      CreatePrepopulateTemplateURL(2, "winner5", 12).release();
  local_turls.push_back(default_turl);

  // ID set - Prefer the lowest TemplateURLID if the keywords don't match and if
  // none are the default.
  local_turls.push_back(
      CreatePrepopulateTemplateURL(3, "winner6", 13).release());
  local_turls.push_back(
      CreatePrepopulateTemplateURL(3, "loser5", 14).release());
  local_turls.push_back(
      CreatePrepopulateTemplateURL(3, "loser6", 15).release());

  RemoveDuplicatePrepopulateIDs(NULL, prepopulated_turls, default_turl,
                                &local_turls, SearchTermsData(), NULL);

  // Verify that the expected local TURLs survived the process.
  EXPECT_EQ(local_turls.size(),
            prepopulated_turls.size() + num_non_prepopulated_urls);
  for (TemplateURLService::TemplateURLVector::const_iterator itr =
       local_turls.begin(); itr != local_turls.end(); ++itr) {
    EXPECT_TRUE(
        StartsWith((*itr)->keyword(), base::ASCIIToUTF16("winner"), true));
  }
}