• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
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/file_util.h"
6 #include "base/path_service.h"
7 #include "base/string_number_conversions.h"
8 #include "base/time.h"
9 #include "base/utf_string_conversions.h"
10 #include "chrome/common/chrome_paths.h"
11 #include "chrome/browser/search_engines/template_url.h"
12 #include "chrome/browser/webdata/web_database.h"
13 #include "testing/gtest/include/gtest/gtest.h"
14 
15 using base::Time;
16 
17 class KeywordTableTest : public testing::Test {
18  public:
KeywordTableTest()19   KeywordTableTest() {}
~KeywordTableTest()20   virtual ~KeywordTableTest() {}
21 
22  protected:
SetUp()23   virtual void SetUp() {
24     PathService::Get(chrome::DIR_TEST_DATA, &file_);
25     const std::string test_db = "TestWebDatabase" +
26         base::Int64ToString(Time::Now().ToTimeT()) +
27         ".db";
28     file_ = file_.AppendASCII(test_db);
29     file_util::Delete(file_, false);
30   }
31 
TearDown()32   virtual void TearDown() {
33     file_util::Delete(file_, false);
34   }
35 
GetID(const TemplateURL * url)36   static int64 GetID(const TemplateURL* url) {
37     return url->id();
38   }
39 
SetID(int64 new_id,TemplateURL * url)40   static void SetID(int64 new_id, TemplateURL* url) {
41     url->set_id(new_id);
42   }
43 
set_prepopulate_id(TemplateURL * url,int id)44   static void set_prepopulate_id(TemplateURL* url, int id) {
45     url->set_prepopulate_id(id);
46   }
47 
set_logo_id(TemplateURL * url,int id)48   static void set_logo_id(TemplateURL* url, int id) {
49     url->set_logo_id(id);
50   }
51 
52   FilePath file_;
53 
54  private:
55   DISALLOW_COPY_AND_ASSIGN(KeywordTableTest);
56 };
57 
58 
TEST_F(KeywordTableTest,Keywords)59 TEST_F(KeywordTableTest, Keywords) {
60   WebDatabase db;
61 
62   ASSERT_EQ(sql::INIT_OK, db.Init(file_));
63 
64   TemplateURL template_url;
65   template_url.set_short_name(ASCIIToUTF16("short_name"));
66   template_url.set_keyword(ASCIIToUTF16("keyword"));
67   GURL favicon_url("http://favicon.url/");
68   GURL originating_url("http://google.com/");
69   template_url.SetFaviconURL(favicon_url);
70   template_url.SetURL("http://url/", 0, 0);
71   template_url.set_safe_for_autoreplace(true);
72   Time created_time = Time::Now();
73   template_url.set_date_created(created_time);
74   template_url.set_show_in_default_list(true);
75   template_url.set_originating_url(originating_url);
76   template_url.set_usage_count(32);
77   template_url.add_input_encoding("UTF-8");
78   template_url.add_input_encoding("UTF-16");
79   set_prepopulate_id(&template_url, 10);
80   set_logo_id(&template_url, 1000);
81   template_url.set_created_by_policy(true);
82   template_url.SetInstantURL("http://instant/", 0, 0);
83   SetID(1, &template_url);
84 
85   EXPECT_TRUE(db.GetKeywordTable()->AddKeyword(template_url));
86 
87   std::vector<TemplateURL*> template_urls;
88   EXPECT_TRUE(db.GetKeywordTable()->GetKeywords(&template_urls));
89 
90   EXPECT_EQ(1U, template_urls.size());
91   const TemplateURL* restored_url = template_urls.front();
92 
93   EXPECT_EQ(template_url.short_name(), restored_url->short_name());
94 
95   EXPECT_EQ(template_url.keyword(), restored_url->keyword());
96 
97   EXPECT_FALSE(restored_url->autogenerate_keyword());
98 
99   EXPECT_TRUE(favicon_url == restored_url->GetFaviconURL());
100 
101   EXPECT_TRUE(restored_url->safe_for_autoreplace());
102 
103   // The database stores time only at the resolution of a second.
104   EXPECT_EQ(created_time.ToTimeT(), restored_url->date_created().ToTimeT());
105 
106   EXPECT_TRUE(restored_url->show_in_default_list());
107 
108   EXPECT_EQ(GetID(&template_url), GetID(restored_url));
109 
110   EXPECT_TRUE(originating_url == restored_url->originating_url());
111 
112   EXPECT_EQ(32, restored_url->usage_count());
113 
114   ASSERT_EQ(2U, restored_url->input_encodings().size());
115   EXPECT_EQ("UTF-8", restored_url->input_encodings()[0]);
116   EXPECT_EQ("UTF-16", restored_url->input_encodings()[1]);
117 
118   EXPECT_EQ(10, restored_url->prepopulate_id());
119 
120   EXPECT_EQ(1000, restored_url->logo_id());
121 
122   EXPECT_TRUE(restored_url->created_by_policy());
123 
124   ASSERT_TRUE(restored_url->instant_url());
125   EXPECT_EQ("http://instant/", restored_url->instant_url()->url());
126 
127   EXPECT_TRUE(db.GetKeywordTable()->RemoveKeyword(restored_url->id()));
128 
129   template_urls.clear();
130   EXPECT_TRUE(db.GetKeywordTable()->GetKeywords(&template_urls));
131 
132   EXPECT_EQ(0U, template_urls.size());
133 
134   delete restored_url;
135 }
136 
TEST_F(KeywordTableTest,KeywordMisc)137 TEST_F(KeywordTableTest, KeywordMisc) {
138   WebDatabase db;
139 
140   ASSERT_EQ(sql::INIT_OK, db.Init(file_));
141 
142   ASSERT_EQ(0, db.GetKeywordTable()->GetDefaulSearchProviderID());
143   ASSERT_EQ(0, db.GetKeywordTable()->GetBuitinKeywordVersion());
144 
145   db.GetKeywordTable()->SetDefaultSearchProviderID(10);
146   db.GetKeywordTable()->SetBuitinKeywordVersion(11);
147 
148   ASSERT_EQ(10, db.GetKeywordTable()->GetDefaulSearchProviderID());
149   ASSERT_EQ(11, db.GetKeywordTable()->GetBuitinKeywordVersion());
150 }
151 
TEST_F(KeywordTableTest,UpdateKeyword)152 TEST_F(KeywordTableTest, UpdateKeyword) {
153   WebDatabase db;
154 
155   ASSERT_EQ(sql::INIT_OK, db.Init(file_));
156 
157   TemplateURL template_url;
158   template_url.set_short_name(ASCIIToUTF16("short_name"));
159   template_url.set_keyword(ASCIIToUTF16("keyword"));
160   GURL favicon_url("http://favicon.url/");
161   GURL originating_url("http://originating.url/");
162   template_url.SetFaviconURL(favicon_url);
163   template_url.SetURL("http://url/", 0, 0);
164   template_url.set_safe_for_autoreplace(true);
165   template_url.set_show_in_default_list(true);
166   template_url.SetSuggestionsURL("url2", 0, 0);
167   SetID(1, &template_url);
168 
169   EXPECT_TRUE(db.GetKeywordTable()->AddKeyword(template_url));
170 
171   GURL originating_url2("http://originating.url/");
172   template_url.set_originating_url(originating_url2);
173   template_url.set_autogenerate_keyword(true);
174   EXPECT_EQ(ASCIIToUTF16("url"), template_url.keyword());
175   template_url.add_input_encoding("Shift_JIS");
176   set_prepopulate_id(&template_url, 5);
177   set_logo_id(&template_url, 2000);
178   template_url.SetInstantURL("http://instant2/", 0, 0);
179   EXPECT_TRUE(db.GetKeywordTable()->UpdateKeyword(template_url));
180 
181   std::vector<TemplateURL*> template_urls;
182   EXPECT_TRUE(db.GetKeywordTable()->GetKeywords(&template_urls));
183 
184   EXPECT_EQ(1U, template_urls.size());
185   const TemplateURL* restored_url = template_urls.front();
186 
187   EXPECT_EQ(template_url.short_name(), restored_url->short_name());
188 
189   EXPECT_EQ(template_url.keyword(), restored_url->keyword());
190 
191   EXPECT_TRUE(restored_url->autogenerate_keyword());
192 
193   EXPECT_TRUE(favicon_url == restored_url->GetFaviconURL());
194 
195   EXPECT_TRUE(restored_url->safe_for_autoreplace());
196 
197   EXPECT_TRUE(restored_url->show_in_default_list());
198 
199   EXPECT_EQ(GetID(&template_url), GetID(restored_url));
200 
201   EXPECT_TRUE(originating_url2 == restored_url->originating_url());
202 
203   ASSERT_EQ(1U, restored_url->input_encodings().size());
204   ASSERT_EQ("Shift_JIS", restored_url->input_encodings()[0]);
205 
206   EXPECT_EQ(template_url.suggestions_url()->url(),
207             restored_url->suggestions_url()->url());
208 
209   EXPECT_EQ(template_url.id(), restored_url->id());
210 
211   EXPECT_EQ(template_url.prepopulate_id(), restored_url->prepopulate_id());
212 
213   EXPECT_EQ(template_url.logo_id(), restored_url->logo_id());
214 
215   EXPECT_TRUE(restored_url->instant_url());
216   EXPECT_EQ(template_url.instant_url()->url(),
217             restored_url->instant_url()->url());
218 
219   delete restored_url;
220 }
221 
TEST_F(KeywordTableTest,KeywordWithNoFavicon)222 TEST_F(KeywordTableTest, KeywordWithNoFavicon) {
223   WebDatabase db;
224 
225   ASSERT_EQ(sql::INIT_OK, db.Init(file_));
226 
227   TemplateURL template_url;
228   template_url.set_short_name(ASCIIToUTF16("short_name"));
229   template_url.set_keyword(ASCIIToUTF16("keyword"));
230   template_url.SetURL("http://url/", 0, 0);
231   template_url.set_safe_for_autoreplace(true);
232   SetID(-100, &template_url);
233 
234   EXPECT_TRUE(db.GetKeywordTable()->AddKeyword(template_url));
235 
236   std::vector<TemplateURL*> template_urls;
237   EXPECT_TRUE(db.GetKeywordTable()->GetKeywords(&template_urls));
238   EXPECT_EQ(1U, template_urls.size());
239   const TemplateURL* restored_url = template_urls.front();
240 
241   EXPECT_EQ(template_url.short_name(), restored_url->short_name());
242   EXPECT_EQ(template_url.keyword(), restored_url->keyword());
243   EXPECT_TRUE(!restored_url->GetFaviconURL().is_valid());
244   EXPECT_TRUE(restored_url->safe_for_autoreplace());
245   EXPECT_EQ(GetID(&template_url), GetID(restored_url));
246   delete restored_url;
247 }
248