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

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

Issue 2714012: Convert page contents grabbing from wide to UTF16. The current code is a bit... (Closed) Base URL: svn://chrome-svn/chrome/trunk/src/
Patch Set: '' Created 10 years, 6 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
OLDNEW
1 // Copyright (c) 2009 The Chromium Authors. All rights reserved. 1 // Copyright (c) 2010 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 "app/sql/connection.h" 5 #include "app/sql/connection.h"
6 #include "base/file_path.h" 6 #include "base/file_path.h"
7 #include "base/file_util.h" 7 #include "base/file_util.h"
8 #include "base/message_loop.h" 8 #include "base/message_loop.h"
9 #include "base/utf_string_conversions.h"
9 #include "chrome/browser/history/text_database_manager.h" 10 #include "chrome/browser/history/text_database_manager.h"
10 #include "chrome/browser/history/visit_database.h" 11 #include "chrome/browser/history/visit_database.h"
11 #include "testing/gtest/include/gtest/gtest.h" 12 #include "testing/gtest/include/gtest/gtest.h"
12 13
13 using base::Time; 14 using base::Time;
14 using base::TimeDelta; 15 using base::TimeDelta;
15 using base::TimeTicks; 16 using base::TimeTicks;
16 17
17 namespace history { 18 namespace history {
18 19
19 namespace { 20 namespace {
20 21
21 const char* kURL1 = "http://www.google.com/asdf"; 22 const char* kURL1 = "http://www.google.com/asdf";
22 const wchar_t* kTitle1 = L"Google A"; 23 const wchar_t* kTitle1 = L"Google A";
23 const wchar_t* kBody1 = L"FOO page one."; 24 const char* kBody1 = "FOO page one.";
24 25
25 const char* kURL2 = "http://www.google.com/qwer"; 26 const char* kURL2 = "http://www.google.com/qwer";
26 const wchar_t* kTitle2 = L"Google B"; 27 const wchar_t* kTitle2 = L"Google B";
27 const wchar_t* kBody2 = L"FOO two."; 28 const char* kBody2 = "FOO two.";
28 29
29 const char* kURL3 = "http://www.google.com/zxcv"; 30 const char* kURL3 = "http://www.google.com/zxcv";
30 const wchar_t* kTitle3 = L"Google C"; 31 const wchar_t* kTitle3 = L"Google C";
31 const wchar_t* kBody3 = L"FOO drei"; 32 const char* kBody3 = "FOO drei";
32 33
33 const char* kURL4 = "http://www.google.com/hjkl"; 34 const char* kURL4 = "http://www.google.com/hjkl";
34 const wchar_t* kTitle4 = L"Google D"; 35 const wchar_t* kTitle4 = L"Google D";
35 const wchar_t* kBody4 = L"FOO lalala four."; 36 const char* kBody4 = "FOO lalala four.";
36 37
37 const char* kURL5 = "http://www.google.com/uiop"; 38 const char* kURL5 = "http://www.google.com/uiop";
38 const wchar_t* kTitle5 = L"Google cinq"; 39 const wchar_t* kTitle5 = L"Google cinq";
39 const wchar_t* kBody5 = L"FOO page one."; 40 const char* kBody5 = "FOO page one.";
40 41
41 // This provides a simple implementation of a URL+VisitDatabase using an 42 // This provides a simple implementation of a URL+VisitDatabase using an
42 // 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
43 // update the visit database to keep in sync. 44 // update the visit database to keep in sync.
44 class InMemDB : public URLDatabase, public VisitDatabase { 45 class InMemDB : public URLDatabase, public VisitDatabase {
45 public: 46 public:
46 InMemDB() { 47 InMemDB() {
47 EXPECT_TRUE(db_.OpenInMemory()); 48 EXPECT_TRUE(db_.OpenInMemory());
48 CreateURLTable(false); 49 CreateURLTable(false);
49 InitVisitTable(); 50 InitVisitTable();
(...skipping 25 matching lines...) Expand all
75 visit_row.url_id = 1; 76 visit_row.url_id = 1;
76 visit_row.visit_time = Time::FromUTCExploded(exploded); 77 visit_row.visit_time = Time::FromUTCExploded(exploded);
77 visit_row.referring_visit = 0; 78 visit_row.referring_visit = 0;
78 visit_row.transition = 0; 79 visit_row.transition = 0;
79 visit_row.segment_id = 0; 80 visit_row.segment_id = 0;
80 visit_row.is_indexed = false; 81 visit_row.is_indexed = false;
81 VisitID visit_id = visit_db->AddVisit(&visit_row); 82 VisitID visit_id = visit_db->AddVisit(&visit_row);
82 83
83 times->push_back(visit_row.visit_time); 84 times->push_back(visit_row.visit_time);
84 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,
85 visit_row.visit_time, kTitle1, kBody1); 86 visit_row.visit_time, kTitle1, UTF8ToUTF16(kBody1));
86 87
87 exploded.day_of_month++; 88 exploded.day_of_month++;
88 visit_row.url_id = 2; 89 visit_row.url_id = 2;
89 visit_row.visit_time = Time::FromUTCExploded(exploded); 90 visit_row.visit_time = Time::FromUTCExploded(exploded);
90 visit_id = visit_db->AddVisit(&visit_row); 91 visit_id = visit_db->AddVisit(&visit_row);
91 times->push_back(visit_row.visit_time); 92 times->push_back(visit_row.visit_time);
92 manager.AddPageData(GURL(kURL2), visit_row.url_id, visit_row.visit_id, 93 manager.AddPageData(GURL(kURL2), visit_row.url_id, visit_row.visit_id,
93 visit_row.visit_time, kTitle2, kBody2); 94 visit_row.visit_time, kTitle2, UTF8ToUTF16(kBody2));
94 95
95 exploded.day_of_month++; 96 exploded.day_of_month++;
96 visit_row.url_id = 2; 97 visit_row.url_id = 2;
97 visit_row.visit_time = Time::FromUTCExploded(exploded); 98 visit_row.visit_time = Time::FromUTCExploded(exploded);
98 visit_id = visit_db->AddVisit(&visit_row); 99 visit_id = visit_db->AddVisit(&visit_row);
99 times->push_back(visit_row.visit_time); 100 times->push_back(visit_row.visit_time);
100 manager.AddPageData(GURL(kURL3), visit_row.url_id, visit_row.visit_id, 101 manager.AddPageData(GURL(kURL3), visit_row.url_id, visit_row.visit_id,
101 visit_row.visit_time, kTitle3, kBody3); 102 visit_row.visit_time, kTitle3, UTF8ToUTF16(kBody3));
102 103
103 // Put the next ones in the next month. 104 // Put the next ones in the next month.
104 exploded.month++; 105 exploded.month++;
105 visit_row.url_id = 2; 106 visit_row.url_id = 2;
106 visit_row.visit_time = Time::FromUTCExploded(exploded); 107 visit_row.visit_time = Time::FromUTCExploded(exploded);
107 visit_id = visit_db->AddVisit(&visit_row); 108 visit_id = visit_db->AddVisit(&visit_row);
108 times->push_back(visit_row.visit_time); 109 times->push_back(visit_row.visit_time);
109 manager.AddPageData(GURL(kURL4), visit_row.url_id, visit_row.visit_id, 110 manager.AddPageData(GURL(kURL4), visit_row.url_id, visit_row.visit_id,
110 visit_row.visit_time, kTitle4, kBody4); 111 visit_row.visit_time, kTitle4, UTF8ToUTF16(kBody4));
111 112
112 exploded.day_of_month++; 113 exploded.day_of_month++;
113 visit_row.url_id = 2; 114 visit_row.url_id = 2;
114 visit_row.visit_time = Time::FromUTCExploded(exploded); 115 visit_row.visit_time = Time::FromUTCExploded(exploded);
115 visit_id = visit_db->AddVisit(&visit_row); 116 visit_id = visit_db->AddVisit(&visit_row);
116 times->push_back(visit_row.visit_time); 117 times->push_back(visit_row.visit_time);
117 manager.AddPageData(GURL(kURL5), visit_row.url_id, visit_row.visit_id, 118 manager.AddPageData(GURL(kURL5), visit_row.url_id, visit_row.visit_id,
118 visit_row.visit_time, kTitle5, kBody5); 119 visit_row.visit_time, kTitle5, UTF8ToUTF16(kBody5));
119 120
120 // Put the first one in again in the second month. 121 // Put the first one in again in the second month.
121 exploded.day_of_month++; 122 exploded.day_of_month++;
122 visit_row.url_id = 2; 123 visit_row.url_id = 2;
123 visit_row.visit_time = Time::FromUTCExploded(exploded); 124 visit_row.visit_time = Time::FromUTCExploded(exploded);
124 visit_id = visit_db->AddVisit(&visit_row); 125 visit_id = visit_db->AddVisit(&visit_row);
125 times->push_back(visit_row.visit_time); 126 times->push_back(visit_row.visit_time);
126 manager.AddPageData(GURL(kURL1), visit_row.url_id, visit_row.visit_id, 127 manager.AddPageData(GURL(kURL1), visit_row.url_id, visit_row.visit_id,
127 visit_row.visit_time, kTitle1, kBody1); 128 visit_row.visit_time, kTitle1, UTF8ToUTF16(kBody1));
128 } 129 }
129 130
130 bool ResultsHaveURL(const std::vector<TextDatabase::Match>& results, 131 bool ResultsHaveURL(const std::vector<TextDatabase::Match>& results,
131 const char* url) { 132 const char* url) {
132 GURL gurl(url); 133 GURL gurl(url);
133 for (size_t i = 0; i < results.size(); i++) { 134 for (size_t i = 0; i < results.size(); i++) {
134 if (results[i].url == gurl) 135 if (results[i].url == gurl)
135 return true; 136 return true;
136 } 137 }
137 return false; 138 return false;
(...skipping 59 matching lines...) Expand 10 before | Expand all | Expand 10 after
197 TEST_F(TextDatabaseManagerTest, InsertCompleteNoVisit) { 198 TEST_F(TextDatabaseManagerTest, InsertCompleteNoVisit) {
198 ASSERT_TRUE(Init()); 199 ASSERT_TRUE(Init());
199 InMemDB visit_db; 200 InMemDB visit_db;
200 TextDatabaseManager manager(dir_, &visit_db, &visit_db); 201 TextDatabaseManager manager(dir_, &visit_db, &visit_db);
201 ASSERT_TRUE(manager.Init(NULL)); 202 ASSERT_TRUE(manager.Init(NULL));
202 203
203 // First add one without a visit. 204 // First add one without a visit.
204 const GURL url(kURL1); 205 const GURL url(kURL1);
205 manager.AddPageURL(url, 0, 0, Time::Now()); 206 manager.AddPageURL(url, 0, 0, Time::Now());
206 manager.AddPageTitle(url, kTitle1); 207 manager.AddPageTitle(url, kTitle1);
207 manager.AddPageContents(url, kBody1); 208 manager.AddPageContents(url, UTF8ToUTF16(kBody1));
208 209
209 // Check that the page got added. 210 // Check that the page got added.
210 QueryOptions options; 211 QueryOptions options;
211 std::vector<TextDatabase::Match> results; 212 std::vector<TextDatabase::Match> results;
212 Time first_time_searched; 213 Time first_time_searched;
213 214
214 manager.GetTextMatches(L"FOO", options, &results, &first_time_searched); 215 manager.GetTextMatches(L"FOO", options, &results, &first_time_searched);
215 ASSERT_EQ(1U, results.size()); 216 ASSERT_EQ(1U, results.size());
216 EXPECT_EQ(kTitle1, results[0].title); 217 EXPECT_EQ(kTitle1, results[0].title);
217 } 218 }
(...skipping 13 matching lines...) Expand all
231 visit.visit_time = Time::Now(); 232 visit.visit_time = Time::Now();
232 visit.referring_visit = 0; 233 visit.referring_visit = 0;
233 visit.transition = PageTransition::LINK; 234 visit.transition = PageTransition::LINK;
234 visit.segment_id = 0; 235 visit.segment_id = 0;
235 visit.is_indexed = false; 236 visit.is_indexed = false;
236 visit_db.AddVisit(&visit); 237 visit_db.AddVisit(&visit);
237 238
238 // Add a full text indexed entry for that visit. 239 // Add a full text indexed entry for that visit.
239 const GURL url(kURL2); 240 const GURL url(kURL2);
240 manager.AddPageURL(url, visit.url_id, visit.visit_id, visit.visit_time); 241 manager.AddPageURL(url, visit.url_id, visit.visit_id, visit.visit_time);
241 manager.AddPageContents(url, kBody2); 242 manager.AddPageContents(url, UTF8ToUTF16(kBody2));
242 manager.AddPageTitle(url, kTitle2); 243 manager.AddPageTitle(url, kTitle2);
243 244
244 // Check that the page got added. 245 // Check that the page got added.
245 QueryOptions options; 246 QueryOptions options;
246 std::vector<TextDatabase::Match> results; 247 std::vector<TextDatabase::Match> results;
247 Time first_time_searched; 248 Time first_time_searched;
248 249
249 manager.GetTextMatches(L"FOO", options, &results, &first_time_searched); 250 manager.GetTextMatches(L"FOO", options, &results, &first_time_searched);
250 ASSERT_EQ(1U, results.size()); 251 ASSERT_EQ(1U, results.size());
251 EXPECT_EQ(kTitle2, results[0].title); 252 EXPECT_EQ(kTitle2, results[0].title);
(...skipping 16 matching lines...) Expand all
268 manager.AddPageURL(url1, 0, 0, Time::Now()); 269 manager.AddPageURL(url1, 0, 0, Time::Now());
269 270
270 // Now add a second one with a URL and title. 271 // Now add a second one with a URL and title.
271 GURL url2(kURL2); 272 GURL url2(kURL2);
272 manager.AddPageURL(url2, 0, 0, Time::Now()); 273 manager.AddPageURL(url2, 0, 0, Time::Now());
273 manager.AddPageTitle(url2, kTitle2); 274 manager.AddPageTitle(url2, kTitle2);
274 275
275 // The third one has a URL and body. 276 // The third one has a URL and body.
276 GURL url3(kURL3); 277 GURL url3(kURL3);
277 manager.AddPageURL(url3, 0, 0, Time::Now()); 278 manager.AddPageURL(url3, 0, 0, Time::Now());
278 manager.AddPageContents(url3, kBody3); 279 manager.AddPageContents(url3, UTF8ToUTF16(kBody3));
279 280
280 // Expire stuff very fast. This assumes that the time between the first 281 // Expire stuff very fast. This assumes that the time between the first
281 // AddPageURL and this line is less than the expiration time (20 seconds). 282 // AddPageURL and this line is less than the expiration time (20 seconds).
282 TimeTicks added_time = TimeTicks::Now(); 283 TimeTicks added_time = TimeTicks::Now();
283 TimeTicks expire_time = added_time + TimeDelta::FromSeconds(5); 284 TimeTicks expire_time = added_time + TimeDelta::FromSeconds(5);
284 manager.FlushOldChangesForTime(expire_time); 285 manager.FlushOldChangesForTime(expire_time);
285 286
286 // Do a query, nothing should be added yet. 287 // Do a query, nothing should be added yet.
287 QueryOptions options; 288 QueryOptions options;
288 std::vector<TextDatabase::Match> results; 289 std::vector<TextDatabase::Match> results;
(...skipping 46 matching lines...) Expand 10 before | Expand all | Expand 10 after
335 manager.AddPageTitle(url, L"Some unique title"); 336 manager.AddPageTitle(url, L"Some unique title");
336 Time first_time_searched; 337 Time first_time_searched;
337 QueryOptions options; 338 QueryOptions options;
338 std::vector<TextDatabase::Match> results; 339 std::vector<TextDatabase::Match> results;
339 manager.GetTextMatches(L"unique", options, &results, &first_time_searched); 340 manager.GetTextMatches(L"unique", options, &results, &first_time_searched);
340 EXPECT_EQ(1U, results.size()); 341 EXPECT_EQ(1U, results.size());
341 manager.GetTextMatches(L"chocolate", options, &results, &first_time_searched); 342 manager.GetTextMatches(L"chocolate", options, &results, &first_time_searched);
342 EXPECT_EQ(0U, results.size()); 343 EXPECT_EQ(0U, results.size());
343 344
344 // Now add the body, which should be queryable. 345 // Now add the body, which should be queryable.
345 manager.AddPageContents(url, L"Very awesome body"); 346 manager.AddPageContents(url, UTF8ToUTF16("Very awesome body"));
346 manager.GetTextMatches(L"awesome", options, &results, &first_time_searched); 347 manager.GetTextMatches(L"awesome", options, &results, &first_time_searched);
347 EXPECT_EQ(1U, results.size()); 348 EXPECT_EQ(1U, results.size());
348 349
349 // Adding the body will actually copy the title from the URL table rather 350 // Adding the body will actually copy the title from the URL table rather
350 // than the previously indexed row (we made them not match above). This isn't 351 // than the previously indexed row (we made them not match above). This isn't
351 // necessarily what we want, but it's how it's implemented, and we don't want 352 // necessarily what we want, but it's how it's implemented, and we don't want
352 // to regress it. 353 // to regress it.
353 manager.GetTextMatches(L"chocolate", options, &results, &first_time_searched); 354 manager.GetTextMatches(L"chocolate", options, &results, &first_time_searched);
354 EXPECT_EQ(1U, results.size()); 355 EXPECT_EQ(1U, results.size());
355 } 356 }
(...skipping 151 matching lines...) Expand 10 before | Expand all | Expand 10 after
507 EXPECT_TRUE(ResultsHaveURL(results, kURL2)); 508 EXPECT_TRUE(ResultsHaveURL(results, kURL2));
508 EXPECT_TRUE(ResultsHaveURL(results, kURL1)); 509 EXPECT_TRUE(ResultsHaveURL(results, kURL1));
509 510
510 // Try to query some more, there should be no results. 511 // Try to query some more, there should be no results.
511 options.end_time = first_time_searched; 512 options.end_time = first_time_searched;
512 manager.GetTextMatches(L"FOO", options, &results, &first_time_searched); 513 manager.GetTextMatches(L"FOO", options, &results, &first_time_searched);
513 EXPECT_EQ(0U, results.size()); 514 EXPECT_EQ(0U, results.size());
514 } 515 }
515 516
516 } // namespace history 517 } // namespace history
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698