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

Side by Side Diff: chrome/browser/history/text_database_manager_unittest.cc

Issue 9381019: Revert 121423 - Don't strip punctuation inside quotes in history search queries. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src/
Patch Set: Created 8 years, 10 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
« no previous file with comments | « chrome/browser/history/query_parser_unittest.cc ('k') | no next file » | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. 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 2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file. 3 // found in the LICENSE file.
4 4
5 #include "base/file_path.h" 5 #include "base/file_path.h"
6 #include "base/file_util.h" 6 #include "base/file_util.h"
7 #include "base/message_loop.h" 7 #include "base/message_loop.h"
8 #include "base/utf_string_conversions.h" 8 #include "base/utf_string_conversions.h"
9 #include "chrome/browser/history/text_database_manager.h" 9 #include "chrome/browser/history/text_database_manager.h"
10 #include "chrome/browser/history/visit_database.h" 10 #include "chrome/browser/history/visit_database.h"
11 #include "sql/connection.h" 11 #include "sql/connection.h"
(...skipping 13 matching lines...) Expand all
25 25
26 const char* kURL2 = "http://www.google.com/qwer"; 26 const char* kURL2 = "http://www.google.com/qwer";
27 const char* kTitle2 = "Google B"; 27 const char* kTitle2 = "Google B";
28 const char* kBody2 = "FOO two."; 28 const char* kBody2 = "FOO two.";
29 29
30 const char* kURL3 = "http://www.google.com/zxcv"; 30 const char* kURL3 = "http://www.google.com/zxcv";
31 const char* kTitle3 = "Google C"; 31 const char* kTitle3 = "Google C";
32 const char* kBody3 = "FOO drei"; 32 const char* kBody3 = "FOO drei";
33 33
34 const char* kURL4 = "http://www.google.com/hjkl"; 34 const char* kURL4 = "http://www.google.com/hjkl";
35 const char* kTitle4 = "Google de"; 35 const char* kTitle4 = "Google D";
36 const char* kBody4 = "FOO lalala four."; 36 const char* kBody4 = "FOO lalala four.";
37 37
38 const char* kURL5 = "http://www.google.de/s?q=mar%10&num=66"; 38 const char* kURL5 = "http://www.google.com/uiop";
39 const char* kTitle5 = "Google cinq"; 39 const char* kTitle5 = "Google cinq";
40 const char* kBody5 = "FOO page one. Including: punctuation."; 40 const char* kBody5 = "FOO page one.";
41 41
42 // This provides a simple implementation of a URL+VisitDatabase using an 42 // This provides a simple implementation of a URL+VisitDatabase using an
43 // in-memory sqlite connection. The text database manager expects to be able to 43 // in-memory sqlite connection. The text database manager expects to be able to
44 // update the visit database to keep in sync. 44 // update the visit database to keep in sync.
45 class InMemDB : public URLDatabase, public VisitDatabase { 45 class InMemDB : public URLDatabase, public VisitDatabase {
46 public: 46 public:
47 InMemDB() { 47 InMemDB() {
48 EXPECT_TRUE(db_.OpenInMemory()); 48 EXPECT_TRUE(db_.OpenInMemory());
49 CreateURLTable(false); 49 CreateURLTable(false);
50 InitVisitTable(); 50 InitVisitTable();
(...skipping 25 matching lines...) Expand all
76 visit_row.url_id = 1; 76 visit_row.url_id = 1;
77 visit_row.visit_time = Time::FromUTCExploded(exploded); 77 visit_row.visit_time = Time::FromUTCExploded(exploded);
78 visit_row.referring_visit = 0; 78 visit_row.referring_visit = 0;
79 visit_row.transition = content::PageTransitionFromInt(0); 79 visit_row.transition = content::PageTransitionFromInt(0);
80 visit_row.segment_id = 0; 80 visit_row.segment_id = 0;
81 visit_row.is_indexed = false; 81 visit_row.is_indexed = false;
82 visit_db->AddVisit(&visit_row, SOURCE_BROWSED); 82 visit_db->AddVisit(&visit_row, SOURCE_BROWSED);
83 83
84 times->push_back(visit_row.visit_time); 84 times->push_back(visit_row.visit_time);
85 manager.AddPageData(GURL(kURL1), visit_row.url_id, visit_row.visit_id, 85 manager.AddPageData(GURL(kURL1), visit_row.url_id, visit_row.visit_id,
86 visit_row.visit_time, ASCIIToUTF16(kTitle1), 86 visit_row.visit_time, UTF8ToUTF16(kTitle1),
87 ASCIIToUTF16(kBody1)); 87 UTF8ToUTF16(kBody1));
88 88
89 exploded.day_of_month++; 89 exploded.day_of_month++;
90 visit_row.url_id = 2; 90 visit_row.url_id = 2;
91 visit_row.visit_time = Time::FromUTCExploded(exploded); 91 visit_row.visit_time = Time::FromUTCExploded(exploded);
92 visit_db->AddVisit(&visit_row, SOURCE_BROWSED); 92 visit_db->AddVisit(&visit_row, SOURCE_BROWSED);
93 times->push_back(visit_row.visit_time); 93 times->push_back(visit_row.visit_time);
94 manager.AddPageData(GURL(kURL2), visit_row.url_id, visit_row.visit_id, 94 manager.AddPageData(GURL(kURL2), visit_row.url_id, visit_row.visit_id,
95 visit_row.visit_time, ASCIIToUTF16(kTitle2), 95 visit_row.visit_time, UTF8ToUTF16(kTitle2),
96 ASCIIToUTF16(kBody2)); 96 UTF8ToUTF16(kBody2));
97 97
98 exploded.day_of_month++; 98 exploded.day_of_month++;
99 visit_row.url_id = 2; 99 visit_row.url_id = 2;
100 visit_row.visit_time = Time::FromUTCExploded(exploded); 100 visit_row.visit_time = Time::FromUTCExploded(exploded);
101 visit_db->AddVisit(&visit_row, SOURCE_BROWSED); 101 visit_db->AddVisit(&visit_row, SOURCE_BROWSED);
102 times->push_back(visit_row.visit_time); 102 times->push_back(visit_row.visit_time);
103 manager.AddPageData(GURL(kURL3), visit_row.url_id, visit_row.visit_id, 103 manager.AddPageData(GURL(kURL3), visit_row.url_id, visit_row.visit_id,
104 visit_row.visit_time, ASCIIToUTF16(kTitle3), 104 visit_row.visit_time, UTF8ToUTF16(kTitle3),
105 ASCIIToUTF16(kBody3)); 105 UTF8ToUTF16(kBody3));
106 106
107 // Put the next ones in the next month. 107 // Put the next ones in the next month.
108 exploded.month++; 108 exploded.month++;
109 visit_row.url_id = 2; 109 visit_row.url_id = 2;
110 visit_row.visit_time = Time::FromUTCExploded(exploded); 110 visit_row.visit_time = Time::FromUTCExploded(exploded);
111 visit_db->AddVisit(&visit_row, SOURCE_BROWSED); 111 visit_db->AddVisit(&visit_row, SOURCE_BROWSED);
112 times->push_back(visit_row.visit_time); 112 times->push_back(visit_row.visit_time);
113 manager.AddPageData(GURL(kURL4), visit_row.url_id, visit_row.visit_id, 113 manager.AddPageData(GURL(kURL4), visit_row.url_id, visit_row.visit_id,
114 visit_row.visit_time, ASCIIToUTF16(kTitle4), 114 visit_row.visit_time, UTF8ToUTF16(kTitle4),
115 ASCIIToUTF16(kBody4)); 115 UTF8ToUTF16(kBody4));
116 116
117 exploded.day_of_month++; 117 exploded.day_of_month++;
118 visit_row.url_id = 2; 118 visit_row.url_id = 2;
119 visit_row.visit_time = Time::FromUTCExploded(exploded); 119 visit_row.visit_time = Time::FromUTCExploded(exploded);
120 visit_db->AddVisit(&visit_row, SOURCE_BROWSED); 120 visit_db->AddVisit(&visit_row, SOURCE_BROWSED);
121 times->push_back(visit_row.visit_time); 121 times->push_back(visit_row.visit_time);
122 manager.AddPageData(GURL(kURL5), visit_row.url_id, visit_row.visit_id, 122 manager.AddPageData(GURL(kURL5), visit_row.url_id, visit_row.visit_id,
123 visit_row.visit_time, ASCIIToUTF16(kTitle5), 123 visit_row.visit_time, UTF8ToUTF16(kTitle5),
124 ASCIIToUTF16(kBody5)); 124 UTF8ToUTF16(kBody5));
125 125
126 // Put the first one in again in the second month. 126 // Put the first one in again in the second month.
127 exploded.day_of_month++; 127 exploded.day_of_month++;
128 visit_row.url_id = 2; 128 visit_row.url_id = 2;
129 visit_row.visit_time = Time::FromUTCExploded(exploded); 129 visit_row.visit_time = Time::FromUTCExploded(exploded);
130 visit_db->AddVisit(&visit_row, SOURCE_BROWSED); 130 visit_db->AddVisit(&visit_row, SOURCE_BROWSED);
131 times->push_back(visit_row.visit_time); 131 times->push_back(visit_row.visit_time);
132 manager.AddPageData(GURL(kURL1), visit_row.url_id, visit_row.visit_id, 132 manager.AddPageData(GURL(kURL1), visit_row.url_id, visit_row.visit_id,
133 visit_row.visit_time, ASCIIToUTF16(kTitle1), 133 visit_row.visit_time, UTF8ToUTF16(kTitle1),
134 ASCIIToUTF16(kBody1)); 134 UTF8ToUTF16(kBody1));
135 } 135 }
136 136
137 bool ResultsHaveURL(const std::vector<TextDatabase::Match>& results, 137 bool ResultsHaveURL(const std::vector<TextDatabase::Match>& results,
138 const char* url) { 138 const char* url) {
139 GURL gurl(url); 139 GURL gurl(url);
140 for (size_t i = 0; i < results.size(); i++) { 140 for (size_t i = 0; i < results.size(); i++) {
141 if (results[i].url == gurl) 141 if (results[i].url == gurl)
142 return true; 142 return true;
143 } 143 }
144 return false; 144 return false;
(...skipping 31 matching lines...) Expand 10 before | Expand all | Expand 10 after
176 ASSERT_TRUE(manager.Init(NULL)); 176 ASSERT_TRUE(manager.Init(NULL));
177 177
178 std::vector<Time> times; 178 std::vector<Time> times;
179 AddAllPages(manager, &visit_db, &times); 179 AddAllPages(manager, &visit_db, &times);
180 180
181 QueryOptions options; 181 QueryOptions options;
182 options.begin_time = times[0] - TimeDelta::FromDays(100); 182 options.begin_time = times[0] - TimeDelta::FromDays(100);
183 options.end_time = times[times.size() - 1] + TimeDelta::FromDays(100); 183 options.end_time = times[times.size() - 1] + TimeDelta::FromDays(100);
184 std::vector<TextDatabase::Match> results; 184 std::vector<TextDatabase::Match> results;
185 Time first_time_searched; 185 Time first_time_searched;
186 manager.GetTextMatches(ASCIIToUTF16("FOO"), options, 186 manager.GetTextMatches(UTF8ToUTF16("FOO"), options,
187 &results, &first_time_searched); 187 &results, &first_time_searched);
188 188
189 // We should have matched every page. 189 // We should have matched every page.
190 EXPECT_EQ(6U, results.size()); 190 EXPECT_EQ(6U, results.size());
191 EXPECT_TRUE(ResultsHaveURL(results, kURL1)); 191 EXPECT_TRUE(ResultsHaveURL(results, kURL1));
192 EXPECT_TRUE(ResultsHaveURL(results, kURL2)); 192 EXPECT_TRUE(ResultsHaveURL(results, kURL2));
193 EXPECT_TRUE(ResultsHaveURL(results, kURL3)); 193 EXPECT_TRUE(ResultsHaveURL(results, kURL3));
194 EXPECT_TRUE(ResultsHaveURL(results, kURL4)); 194 EXPECT_TRUE(ResultsHaveURL(results, kURL4));
195 EXPECT_TRUE(ResultsHaveURL(results, kURL5)); 195 EXPECT_TRUE(ResultsHaveURL(results, kURL5));
196 196
197 // The first time searched should have been the first page's time or before 197 // The first time searched should have been the first page's time or before
198 // (it could have eliminated some time for us). 198 // (it could have eliminated some time for us).
199 EXPECT_TRUE(first_time_searched <= times[0]); 199 EXPECT_TRUE(first_time_searched <= times[0]);
200 } 200 }
201 201
202 // Tests that adding page components piecemeal will get them added properly. 202 // Tests that adding page components piecemeal will get them added properly.
203 // This does not supply a visit to update, this mode is used only by the unit 203 // This does not supply a visit to update, this mode is used only by the unit
204 // tests right now, but we test it anyway. 204 // tests right now, but we test it anyway.
205 TEST_F(TextDatabaseManagerTest, InsertCompleteNoVisit) { 205 TEST_F(TextDatabaseManagerTest, InsertCompleteNoVisit) {
206 ASSERT_TRUE(Init()); 206 ASSERT_TRUE(Init());
207 InMemDB visit_db; 207 InMemDB visit_db;
208 TextDatabaseManager manager(dir_, &visit_db, &visit_db); 208 TextDatabaseManager manager(dir_, &visit_db, &visit_db);
209 ASSERT_TRUE(manager.Init(NULL)); 209 ASSERT_TRUE(manager.Init(NULL));
210 210
211 // First add one without a visit. 211 // First add one without a visit.
212 const GURL url(kURL1); 212 const GURL url(kURL1);
213 manager.AddPageURL(url, 0, 0, Time::Now()); 213 manager.AddPageURL(url, 0, 0, Time::Now());
214 manager.AddPageTitle(url, ASCIIToUTF16(kTitle1)); 214 manager.AddPageTitle(url, UTF8ToUTF16(kTitle1));
215 manager.AddPageContents(url, ASCIIToUTF16(kBody1)); 215 manager.AddPageContents(url, UTF8ToUTF16(kBody1));
216 216
217 // Check that the page got added. 217 // Check that the page got added.
218 QueryOptions options; 218 QueryOptions options;
219 std::vector<TextDatabase::Match> results; 219 std::vector<TextDatabase::Match> results;
220 Time first_time_searched; 220 Time first_time_searched;
221 221
222 manager.GetTextMatches(ASCIIToUTF16("FOO"), options, 222 manager.GetTextMatches(UTF8ToUTF16("FOO"), options,
223 &results, &first_time_searched); 223 &results, &first_time_searched);
224 ASSERT_EQ(1U, results.size()); 224 ASSERT_EQ(1U, results.size());
225 EXPECT_EQ(kTitle1, UTF16ToUTF8(results[0].title)); 225 EXPECT_EQ(kTitle1, UTF16ToUTF8(results[0].title));
226 } 226 }
227 227
228 // Like InsertCompleteNoVisit but specifies a visit to update. We check that the 228 // Like InsertCompleteNoVisit but specifies a visit to update. We check that the
229 // visit was updated properly. 229 // visit was updated properly.
230 TEST_F(TextDatabaseManagerTest, InsertCompleteVisit) { 230 TEST_F(TextDatabaseManagerTest, InsertCompleteVisit) {
231 ASSERT_TRUE(Init()); 231 ASSERT_TRUE(Init());
232 InMemDB visit_db; 232 InMemDB visit_db;
233 TextDatabaseManager manager(dir_, &visit_db, &visit_db); 233 TextDatabaseManager manager(dir_, &visit_db, &visit_db);
234 ASSERT_TRUE(manager.Init(NULL)); 234 ASSERT_TRUE(manager.Init(NULL));
235 235
236 // First add a visit to a page. We can just make up a URL ID since there is 236 // First add a visit to a page. We can just make up a URL ID since there is
237 // not actually any URL database around. 237 // not actually any URL database around.
238 VisitRow visit; 238 VisitRow visit;
239 visit.url_id = 1; 239 visit.url_id = 1;
240 visit.visit_time = Time::Now(); 240 visit.visit_time = Time::Now();
241 visit.referring_visit = 0; 241 visit.referring_visit = 0;
242 visit.transition = content::PAGE_TRANSITION_LINK; 242 visit.transition = content::PAGE_TRANSITION_LINK;
243 visit.segment_id = 0; 243 visit.segment_id = 0;
244 visit.is_indexed = false; 244 visit.is_indexed = false;
245 visit_db.AddVisit(&visit, SOURCE_BROWSED); 245 visit_db.AddVisit(&visit, SOURCE_BROWSED);
246 246
247 // Add a full text indexed entry for that visit. 247 // Add a full text indexed entry for that visit.
248 const GURL url(kURL2); 248 const GURL url(kURL2);
249 manager.AddPageURL(url, visit.url_id, visit.visit_id, visit.visit_time); 249 manager.AddPageURL(url, visit.url_id, visit.visit_id, visit.visit_time);
250 manager.AddPageContents(url, ASCIIToUTF16(kBody2)); 250 manager.AddPageContents(url, UTF8ToUTF16(kBody2));
251 manager.AddPageTitle(url, ASCIIToUTF16(kTitle2)); 251 manager.AddPageTitle(url, UTF8ToUTF16(kTitle2));
252 252
253 // Check that the page got added. 253 // Check that the page got added.
254 QueryOptions options; 254 QueryOptions options;
255 std::vector<TextDatabase::Match> results; 255 std::vector<TextDatabase::Match> results;
256 Time first_time_searched; 256 Time first_time_searched;
257 257
258 manager.GetTextMatches(ASCIIToUTF16("FOO"), options, 258 manager.GetTextMatches(UTF8ToUTF16("FOO"), options,
259 &results, &first_time_searched); 259 &results, &first_time_searched);
260 ASSERT_EQ(1U, results.size()); 260 ASSERT_EQ(1U, results.size());
261 EXPECT_EQ(kTitle2, UTF16ToUTF8(results[0].title)); 261 EXPECT_EQ(kTitle2, UTF16ToUTF8(results[0].title));
262 262
263 // Check that the visit got updated for its new indexed state. 263 // Check that the visit got updated for its new indexed state.
264 VisitRow out_visit; 264 VisitRow out_visit;
265 ASSERT_TRUE(visit_db.GetRowForVisit(visit.visit_id, &out_visit)); 265 ASSERT_TRUE(visit_db.GetRowForVisit(visit.visit_id, &out_visit));
266 EXPECT_TRUE(out_visit.is_indexed); 266 EXPECT_TRUE(out_visit.is_indexed);
267 } 267 }
268 268
269 // Tests that partial inserts that expire are added to the database. 269 // Tests that partial inserts that expire are added to the database.
270 TEST_F(TextDatabaseManagerTest, InsertPartial) { 270 TEST_F(TextDatabaseManagerTest, InsertPartial) {
271 ASSERT_TRUE(Init()); 271 ASSERT_TRUE(Init());
272 InMemDB visit_db; 272 InMemDB visit_db;
273 TextDatabaseManager manager(dir_, &visit_db, &visit_db); 273 TextDatabaseManager manager(dir_, &visit_db, &visit_db);
274 ASSERT_TRUE(manager.Init(NULL)); 274 ASSERT_TRUE(manager.Init(NULL));
275 275
276 // Add the first one with just a URL. 276 // Add the first one with just a URL.
277 GURL url1(kURL1); 277 GURL url1(kURL1);
278 manager.AddPageURL(url1, 0, 0, Time::Now()); 278 manager.AddPageURL(url1, 0, 0, Time::Now());
279 279
280 // Now add a second one with a URL and title. 280 // Now add a second one with a URL and title.
281 GURL url2(kURL2); 281 GURL url2(kURL2);
282 manager.AddPageURL(url2, 0, 0, Time::Now()); 282 manager.AddPageURL(url2, 0, 0, Time::Now());
283 manager.AddPageTitle(url2, ASCIIToUTF16(kTitle2)); 283 manager.AddPageTitle(url2, UTF8ToUTF16(kTitle2));
284 284
285 // The third one has a URL and body. 285 // The third one has a URL and body.
286 GURL url3(kURL3); 286 GURL url3(kURL3);
287 manager.AddPageURL(url3, 0, 0, Time::Now()); 287 manager.AddPageURL(url3, 0, 0, Time::Now());
288 manager.AddPageContents(url3, ASCIIToUTF16(kBody3)); 288 manager.AddPageContents(url3, UTF8ToUTF16(kBody3));
289 289
290 // Expire stuff very fast. This assumes that the time between the first 290 // Expire stuff very fast. This assumes that the time between the first
291 // AddPageURL and this line is less than the expiration time (20 seconds). 291 // AddPageURL and this line is less than the expiration time (20 seconds).
292 TimeTicks added_time = TimeTicks::Now(); 292 TimeTicks added_time = TimeTicks::Now();
293 TimeTicks expire_time = added_time + TimeDelta::FromSeconds(5); 293 TimeTicks expire_time = added_time + TimeDelta::FromSeconds(5);
294 manager.FlushOldChangesForTime(expire_time); 294 manager.FlushOldChangesForTime(expire_time);
295 295
296 // Do a query, nothing should be added yet. 296 // Do a query, nothing should be added yet.
297 QueryOptions options; 297 QueryOptions options;
298 std::vector<TextDatabase::Match> results; 298 std::vector<TextDatabase::Match> results;
299 Time first_time_searched; 299 Time first_time_searched;
300 manager.GetTextMatches(ASCIIToUTF16("google"), options, 300 manager.GetTextMatches(UTF8ToUTF16("google"), options,
301 &results, &first_time_searched); 301 &results, &first_time_searched);
302 ASSERT_EQ(0U, results.size()); 302 ASSERT_EQ(0U, results.size());
303 303
304 // Compute a time threshold that will cause everything to be flushed, and 304 // Compute a time threshold that will cause everything to be flushed, and
305 // poke at the manager's internals to cause this to happen. 305 // poke at the manager's internals to cause this to happen.
306 expire_time = added_time + TimeDelta::FromDays(1); 306 expire_time = added_time + TimeDelta::FromDays(1);
307 manager.FlushOldChangesForTime(expire_time); 307 manager.FlushOldChangesForTime(expire_time);
308 308
309 // Now we should have all 3 URLs added. 309 // Now we should have all 3 URLs added.
310 manager.GetTextMatches(ASCIIToUTF16("google"), options, 310 manager.GetTextMatches(UTF8ToUTF16("google"), options,
311 &results, &first_time_searched); 311 &results, &first_time_searched);
312 ASSERT_EQ(3U, results.size()); 312 ASSERT_EQ(3U, results.size());
313 EXPECT_TRUE(ResultsHaveURL(results, kURL1)); 313 EXPECT_TRUE(ResultsHaveURL(results, kURL1));
314 EXPECT_TRUE(ResultsHaveURL(results, kURL2)); 314 EXPECT_TRUE(ResultsHaveURL(results, kURL2));
315 EXPECT_TRUE(ResultsHaveURL(results, kURL3)); 315 EXPECT_TRUE(ResultsHaveURL(results, kURL3));
316 } 316 }
317 317
318 // Tests that partial inserts (due to timeouts) will still get updated if the 318 // Tests that partial inserts (due to timeouts) will still get updated if the
319 // data comes in later. 319 // data comes in later.
320 TEST_F(TextDatabaseManagerTest, PartialComplete) { 320 TEST_F(TextDatabaseManagerTest, PartialComplete) {
321 ASSERT_TRUE(Init()); 321 ASSERT_TRUE(Init());
322 InMemDB visit_db; 322 InMemDB visit_db;
323 TextDatabaseManager manager(dir_, &visit_db, &visit_db); 323 TextDatabaseManager manager(dir_, &visit_db, &visit_db);
324 ASSERT_TRUE(manager.Init(NULL)); 324 ASSERT_TRUE(manager.Init(NULL));
325 325
326 Time added_time = Time::Now(); 326 Time added_time = Time::Now();
327 GURL url(kURL1); 327 GURL url(kURL1);
328 328
329 // We have to have the URL in the URL and visit databases for this test to 329 // We have to have the URL in the URL and visit databases for this test to
330 // work. 330 // work.
331 URLRow url_row(url); 331 URLRow url_row(url);
332 url_row.set_title(ASCIIToUTF16("chocolate")); 332 url_row.set_title(UTF8ToUTF16("chocolate"));
333 URLID url_id = visit_db.AddURL(url_row); 333 URLID url_id = visit_db.AddURL(url_row);
334 ASSERT_TRUE(url_id); 334 ASSERT_TRUE(url_id);
335 VisitRow visit_row; 335 VisitRow visit_row;
336 visit_row.url_id = url_id; 336 visit_row.url_id = url_id;
337 visit_row.visit_time = added_time; 337 visit_row.visit_time = added_time;
338 visit_db.AddVisit(&visit_row, SOURCE_BROWSED); 338 visit_db.AddVisit(&visit_row, SOURCE_BROWSED);
339 339
340 // Add a URL with no title or body, and say that it expired. 340 // Add a URL with no title or body, and say that it expired.
341 manager.AddPageURL(url, 0, 0, added_time); 341 manager.AddPageURL(url, 0, 0, added_time);
342 TimeTicks expire_time = TimeTicks::Now() + TimeDelta::FromDays(1); 342 TimeTicks expire_time = TimeTicks::Now() + TimeDelta::FromDays(1);
343 manager.FlushOldChangesForTime(expire_time); 343 manager.FlushOldChangesForTime(expire_time);
344 344
345 // Add the title. We should be able to query based on that. The title in the 345 // Add the title. We should be able to query based on that. The title in the
346 // URL row we set above should not come into the picture. 346 // URL row we set above should not come into the picture.
347 manager.AddPageTitle(url, ASCIIToUTF16("Some unique title")); 347 manager.AddPageTitle(url, UTF8ToUTF16("Some unique title"));
348 Time first_time_searched; 348 Time first_time_searched;
349 QueryOptions options; 349 QueryOptions options;
350 std::vector<TextDatabase::Match> results; 350 std::vector<TextDatabase::Match> results;
351 manager.GetTextMatches(ASCIIToUTF16("unique"), options, 351 manager.GetTextMatches(UTF8ToUTF16("unique"), options,
352 &results, &first_time_searched); 352 &results, &first_time_searched);
353 EXPECT_EQ(1U, results.size()); 353 EXPECT_EQ(1U, results.size());
354 manager.GetTextMatches(ASCIIToUTF16("chocolate"), options, 354 manager.GetTextMatches(UTF8ToUTF16("chocolate"), options,
355 &results, &first_time_searched); 355 &results, &first_time_searched);
356 EXPECT_EQ(0U, results.size()); 356 EXPECT_EQ(0U, results.size());
357 357
358 // Now add the body, which should be queryable. 358 // Now add the body, which should be queryable.
359 manager.AddPageContents(url, ASCIIToUTF16("Very awesome body")); 359 manager.AddPageContents(url, UTF8ToUTF16("Very awesome body"));
360 manager.GetTextMatches( 360 manager.GetTextMatches(UTF8ToUTF16("awesome"), options, &results, &first_time_ searched);
361 ASCIIToUTF16("awesome"), options, &results, &first_time_searched);
362 EXPECT_EQ(1U, results.size()); 361 EXPECT_EQ(1U, results.size());
363 362
364 // Adding the body will actually copy the title from the URL table rather 363 // Adding the body will actually copy the title from the URL table rather
365 // than the previously indexed row (we made them not match above). This isn't 364 // than the previously indexed row (we made them not match above). This isn't
366 // necessarily what we want, but it's how it's implemented, and we don't want 365 // necessarily what we want, but it's how it's implemented, and we don't want
367 // to regress it. 366 // to regress it.
368 manager.GetTextMatches( 367 manager.GetTextMatches(UTF8ToUTF16("chocolate"), options, &results, &first_tim e_searched);
369 ASCIIToUTF16("chocolate"), options, &results, &first_time_searched);
370 EXPECT_EQ(1U, results.size()); 368 EXPECT_EQ(1U, results.size());
371 } 369 }
372 370
373 // Tests that changes get properly committed to disk. 371 // Tests that changes get properly committed to disk.
374 TEST_F(TextDatabaseManagerTest, Writing) { 372 TEST_F(TextDatabaseManagerTest, Writing) {
375 ASSERT_TRUE(Init()); 373 ASSERT_TRUE(Init());
376 374
377 QueryOptions options; 375 QueryOptions options;
378 std::vector<TextDatabase::Match> results; 376 std::vector<TextDatabase::Match> results;
379 Time first_time_searched; 377 Time first_time_searched;
380 378
381 InMemDB visit_db; 379 InMemDB visit_db;
382 380
383 // Create the manager and write some stuff to it. 381 // Create the manager and write some stuff to it.
384 { 382 {
385 TextDatabaseManager manager(dir_, &visit_db, &visit_db); 383 TextDatabaseManager manager(dir_, &visit_db, &visit_db);
386 ASSERT_TRUE(manager.Init(NULL)); 384 ASSERT_TRUE(manager.Init(NULL));
387 385
388 std::vector<Time> times; 386 std::vector<Time> times;
389 AddAllPages(manager, &visit_db, &times); 387 AddAllPages(manager, &visit_db, &times);
390 388
391 // We should have matched every page. 389 // We should have matched every page.
392 manager.GetTextMatches( 390 manager.GetTextMatches(UTF8ToUTF16("FOO"), options, &results, &first_time_se arched);
393 ASCIIToUTF16("FOO"), options, &results, &first_time_searched);
394 EXPECT_EQ(6U, results.size()); 391 EXPECT_EQ(6U, results.size());
395 } 392 }
396 results.clear(); 393 results.clear();
397 394
398 // Recreate the manager and make sure it finds the written stuff. 395 // Recreate the manager and make sure it finds the written stuff.
399 { 396 {
400 TextDatabaseManager manager(dir_, &visit_db, &visit_db); 397 TextDatabaseManager manager(dir_, &visit_db, &visit_db);
401 ASSERT_TRUE(manager.Init(NULL)); 398 ASSERT_TRUE(manager.Init(NULL));
402 399
403 // We should have matched every page again. 400 // We should have matched every page again.
404 manager.GetTextMatches(ASCIIToUTF16("FOO"), options, 401 manager.GetTextMatches(UTF8ToUTF16("FOO"), options,
405 &results, &first_time_searched); 402 &results, &first_time_searched);
406 EXPECT_EQ(6U, results.size()); 403 EXPECT_EQ(6U, results.size());
407 } 404 }
408 } 405 }
409 406
410 // Tests that changes get properly committed to disk, as in the Writing test 407 // Tests that changes get properly committed to disk, as in the Writing test
411 // above, but when there is a transaction around the adds. 408 // above, but when there is a transaction around the adds.
412 TEST_F(TextDatabaseManagerTest, WritingTransaction) { 409 TEST_F(TextDatabaseManagerTest, WritingTransaction) {
413 ASSERT_TRUE(Init()); 410 ASSERT_TRUE(Init());
414 411
415 QueryOptions options; 412 QueryOptions options;
416 std::vector<TextDatabase::Match> results; 413 std::vector<TextDatabase::Match> results;
417 Time first_time_searched; 414 Time first_time_searched;
418 415
419 InMemDB visit_db; 416 InMemDB visit_db;
420 417
421 // Create the manager and write some stuff to it. 418 // Create the manager and write some stuff to it.
422 { 419 {
423 TextDatabaseManager manager(dir_, &visit_db, &visit_db); 420 TextDatabaseManager manager(dir_, &visit_db, &visit_db);
424 ASSERT_TRUE(manager.Init(NULL)); 421 ASSERT_TRUE(manager.Init(NULL));
425 422
426 std::vector<Time> times; 423 std::vector<Time> times;
427 manager.BeginTransaction(); 424 manager.BeginTransaction();
428 AddAllPages(manager, &visit_db, &times); 425 AddAllPages(manager, &visit_db, &times);
429 // "Forget" to commit, it should be autocommittedd for us. 426 // "Forget" to commit, it should be autocommittedd for us.
430 427
431 // We should have matched every page. 428 // We should have matched every page.
432 manager.GetTextMatches(ASCIIToUTF16("FOO"), options, 429 manager.GetTextMatches(UTF8ToUTF16("FOO"), options,
433 &results, &first_time_searched); 430 &results, &first_time_searched);
434 EXPECT_EQ(6U, results.size()); 431 EXPECT_EQ(6U, results.size());
435 } 432 }
436 results.clear(); 433 results.clear();
437 434
438 // Recreate the manager and make sure it finds the written stuff. 435 // Recreate the manager and make sure it finds the written stuff.
439 { 436 {
440 TextDatabaseManager manager(dir_, &visit_db, &visit_db); 437 TextDatabaseManager manager(dir_, &visit_db, &visit_db);
441 ASSERT_TRUE(manager.Init(NULL)); 438 ASSERT_TRUE(manager.Init(NULL));
442 439
443 // We should have matched every page again. 440 // We should have matched every page again.
444 manager.GetTextMatches(ASCIIToUTF16("FOO"), options, 441 manager.GetTextMatches(UTF8ToUTF16("FOO"), options,
445 &results, &first_time_searched); 442 &results, &first_time_searched);
446 EXPECT_EQ(6U, results.size()); 443 EXPECT_EQ(6U, results.size());
447 } 444 }
448 } 445 }
449 446
450 // Tests querying where the maximum number of items is met. 447 // Tests querying where the maximum number of items is met.
451 TEST_F(TextDatabaseManagerTest, QueryMax) { 448 TEST_F(TextDatabaseManagerTest, QueryMax) {
452 ASSERT_TRUE(Init()); 449 ASSERT_TRUE(Init());
453 InMemDB visit_db; 450 InMemDB visit_db;
454 TextDatabaseManager manager(dir_, &visit_db, &visit_db); 451 TextDatabaseManager manager(dir_, &visit_db, &visit_db);
455 ASSERT_TRUE(manager.Init(NULL)); 452 ASSERT_TRUE(manager.Init(NULL));
456 453
457 std::vector<Time> times; 454 std::vector<Time> times;
458 AddAllPages(manager, &visit_db, &times); 455 AddAllPages(manager, &visit_db, &times);
459 456
460 string16 foo = ASCIIToUTF16("FOO"); 457 string16 foo = UTF8ToUTF16("FOO");
461 458
462 QueryOptions options; 459 QueryOptions options;
463 options.begin_time = times[0] - TimeDelta::FromDays(100); 460 options.begin_time = times[0] - TimeDelta::FromDays(100);
464 options.end_time = times[times.size() - 1] + TimeDelta::FromDays(100); 461 options.end_time = times[times.size() - 1] + TimeDelta::FromDays(100);
465 options.max_count = 2; 462 options.max_count = 2;
466 std::vector<TextDatabase::Match> results; 463 std::vector<TextDatabase::Match> results;
467 Time first_time_searched; 464 Time first_time_searched;
468 manager.GetTextMatches(foo, options, &results, &first_time_searched); 465 manager.GetTextMatches(foo, options, &results, &first_time_searched);
469 466
470 // We should have gotten the last two pages as results (the first page is 467 // We should have gotten the last two pages as results (the first page is
(...skipping 18 matching lines...) Expand all
489 // Tests querying backwards in time in chunks. 486 // Tests querying backwards in time in chunks.
490 TEST_F(TextDatabaseManagerTest, QueryBackwards) { 487 TEST_F(TextDatabaseManagerTest, QueryBackwards) {
491 ASSERT_TRUE(Init()); 488 ASSERT_TRUE(Init());
492 InMemDB visit_db; 489 InMemDB visit_db;
493 TextDatabaseManager manager(dir_, &visit_db, &visit_db); 490 TextDatabaseManager manager(dir_, &visit_db, &visit_db);
494 ASSERT_TRUE(manager.Init(NULL)); 491 ASSERT_TRUE(manager.Init(NULL));
495 492
496 std::vector<Time> times; 493 std::vector<Time> times;
497 AddAllPages(manager, &visit_db, &times); 494 AddAllPages(manager, &visit_db, &times);
498 495
499 string16 foo = ASCIIToUTF16("FOO"); 496 string16 foo = UTF8ToUTF16("FOO");
500 497
501 // First do a query for all time, but with a max of 2. This will give us the 498 // First do a query for all time, but with a max of 2. This will give us the
502 // last two results and will tell us where to start searching when we want 499 // last two results and will tell us where to start searching when we want
503 // to go back in time. 500 // to go back in time.
504 QueryOptions options; 501 QueryOptions options;
505 options.begin_time = times[0] - TimeDelta::FromDays(100); 502 options.begin_time = times[0] - TimeDelta::FromDays(100);
506 options.end_time = times[times.size() - 1] + TimeDelta::FromDays(100); 503 options.end_time = times[times.size() - 1] + TimeDelta::FromDays(100);
507 options.max_count = 2; 504 options.max_count = 2;
508 std::vector<TextDatabase::Match> results; 505 std::vector<TextDatabase::Match> results;
509 Time first_time_searched; 506 Time first_time_searched;
(...skipping 20 matching lines...) Expand all
530 EXPECT_TRUE(first_time_searched <= times[0]); 527 EXPECT_TRUE(first_time_searched <= times[0]);
531 EXPECT_TRUE(ResultsHaveURL(results, kURL2)); 528 EXPECT_TRUE(ResultsHaveURL(results, kURL2));
532 EXPECT_TRUE(ResultsHaveURL(results, kURL1)); 529 EXPECT_TRUE(ResultsHaveURL(results, kURL1));
533 530
534 // Try to query some more, there should be no results. 531 // Try to query some more, there should be no results.
535 options.end_time = first_time_searched; 532 options.end_time = first_time_searched;
536 manager.GetTextMatches(foo, options, &results, &first_time_searched); 533 manager.GetTextMatches(foo, options, &results, &first_time_searched);
537 EXPECT_EQ(0U, results.size()); 534 EXPECT_EQ(0U, results.size());
538 } 535 }
539 536
540 TEST_F(TextDatabaseManagerTest, Query) {
541 ASSERT_TRUE(Init());
542
543 QueryOptions options;
544 std::vector<TextDatabase::Match> results;
545 Time first_time_searched;
546
547 InMemDB visit_db;
548
549 TextDatabaseManager manager(dir_, &visit_db, &visit_db);
550 ASSERT_TRUE(manager.Init(NULL));
551
552 std::vector<Time> times;
553 AddAllPages(manager, &visit_db, &times);
554
555 // Try a multi-word query.
556 manager.GetTextMatches(ASCIIToUTF16("FOO drei"), options,
557 &results, &first_time_searched);
558 EXPECT_EQ(1U, results.size());
559 results.clear();
560
561 // Try a quoted query that should match only a single URL.
562 manager.GetTextMatches(ASCIIToUTF16("\"google.de\""),
563 options, &results, &first_time_searched);
564 EXPECT_EQ(1U, results.size());
565 results.clear();
566
567 // Same, but with some special characters.
568 manager.GetTextMatches(ASCIIToUTF16("\"google.de/s?q=mar%10&num=66\""),
569 options, &results, &first_time_searched);
570 EXPECT_EQ(1U, results.size());
571 results.clear();
572
573 // Using separate tokens should match in URL or in body.
574 manager.GetTextMatches(ASCIIToUTF16("google de"), options,
575 &results, &first_time_searched);
576 EXPECT_EQ(2U, results.size());
577 EXPECT_TRUE(ResultsHaveURL(results, kURL4));
578 EXPECT_TRUE(ResultsHaveURL(results, kURL5));
579 results.clear();
580
581 // Try a quoted query that should match the body.
582 manager.GetTextMatches(ASCIIToUTF16("\"Including: punctuation.\""), options,
583 &results, &first_time_searched);
584 EXPECT_EQ(1U, results.size());
585 results.clear();
586
587 // Ensure that punctuation is not ignored in quoted strings.
588 manager.GetTextMatches(ASCIIToUTF16("\"Including punctuation\""), options,
589 &results, &first_time_searched);
590 EXPECT_EQ(0U, results.size());
591
592 // Ensure that regex characters don't have special meaning inside quotes.
593 manager.GetTextMatches(ASCIIToUTF16("\"Including* punctuation\""), options,
594 &results, &first_time_searched);
595 EXPECT_EQ(0U, results.size());
596 manager.GetTextMatches(ASCIIToUTF16("\"Including. punctuation\""), options,
597 &results, &first_time_searched);
598 EXPECT_EQ(0U, results.size());
599 manager.GetTextMatches(ASCIIToUTF16("\"Including_ punctuation\""), options,
600 &results, &first_time_searched);
601 EXPECT_EQ(0U, results.size());
602 }
603
604 } // namespace history 537 } // namespace history
OLDNEW
« no previous file with comments | « chrome/browser/history/query_parser_unittest.cc ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698