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

Side by Side Diff: chrome/browser/autocomplete/in_memory_url_index_unittest.cc

Issue 976423002: Remove ScoreHistoryMatch::Builder (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@cpplint
Patch Set: Rebase Created 5 years, 9 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
OLDNEW
1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. 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 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 <algorithm> 5 #include <algorithm>
6 #include <fstream> 6 #include <fstream>
7 7
8 #include "base/auto_reset.h" 8 #include "base/auto_reset.h"
9 #include "base/files/file_path.h" 9 #include "base/files/file_path.h"
10 #include "base/files/file_util.h" 10 #include "base/files/file_util.h"
11 #include "base/files/scoped_temp_dir.h" 11 #include "base/files/scoped_temp_dir.h"
12 #include "base/path_service.h" 12 #include "base/path_service.h"
13 #include "base/run_loop.h" 13 #include "base/run_loop.h"
14 #include "base/strings/string16.h" 14 #include "base/strings/string16.h"
15 #include "base/strings/string_util.h" 15 #include "base/strings/string_util.h"
16 #include "base/strings/utf_string_conversions.h" 16 #include "base/strings/utf_string_conversions.h"
17 #include "chrome/browser/autocomplete/in_memory_url_index.h" 17 #include "chrome/browser/autocomplete/in_memory_url_index.h"
18 #include "chrome/browser/autocomplete/in_memory_url_index_types.h" 18 #include "chrome/browser/autocomplete/in_memory_url_index_types.h"
19 #include "chrome/browser/autocomplete/scored_history_match_builder_impl.h"
20 #include "chrome/browser/autocomplete/url_index_private_data.h" 19 #include "chrome/browser/autocomplete/url_index_private_data.h"
21 #include "chrome/browser/bookmarks/bookmark_model_factory.h" 20 #include "chrome/browser/bookmarks/bookmark_model_factory.h"
22 #include "chrome/browser/history/history_service_factory.h" 21 #include "chrome/browser/history/history_service_factory.h"
23 #include "chrome/common/chrome_paths.h" 22 #include "chrome/common/chrome_paths.h"
24 #include "chrome/test/base/history_index_restore_observer.h" 23 #include "chrome/test/base/history_index_restore_observer.h"
25 #include "chrome/test/base/testing_profile.h" 24 #include "chrome/test/base/testing_profile.h"
26 #include "components/bookmarks/test/bookmark_test_helpers.h" 25 #include "components/bookmarks/test/bookmark_test_helpers.h"
27 #include "components/history/core/browser/history_backend.h" 26 #include "components/history/core/browser/history_backend.h"
28 #include "components/history/core/browser/history_database.h" 27 #include "components/history/core/browser/history_database.h"
29 #include "components/history/core/browser/history_service.h" 28 #include "components/history/core/browser/history_service.h"
(...skipping 91 matching lines...) Expand 10 before | Expand all | Expand 10 after
121 // Pass-through functions to simplify our friendship with URLIndexPrivateData. 120 // Pass-through functions to simplify our friendship with URLIndexPrivateData.
122 bool UpdateURL(const history::URLRow& row); 121 bool UpdateURL(const history::URLRow& row);
123 bool DeleteURL(const GURL& url); 122 bool DeleteURL(const GURL& url);
124 123
125 // Data verification helper functions. 124 // Data verification helper functions.
126 void ExpectPrivateDataNotEmpty(const URLIndexPrivateData& data); 125 void ExpectPrivateDataNotEmpty(const URLIndexPrivateData& data);
127 void ExpectPrivateDataEmpty(const URLIndexPrivateData& data); 126 void ExpectPrivateDataEmpty(const URLIndexPrivateData& data);
128 void ExpectPrivateDataEqual(const URLIndexPrivateData& expected, 127 void ExpectPrivateDataEqual(const URLIndexPrivateData& expected,
129 const URLIndexPrivateData& actual); 128 const URLIndexPrivateData& actual);
130 129
131 ScoredHistoryMatchBuilderImpl builder_;
132 content::TestBrowserThreadBundle thread_bundle_; 130 content::TestBrowserThreadBundle thread_bundle_;
133 scoped_ptr<InMemoryURLIndex> url_index_; 131 scoped_ptr<InMemoryURLIndex> url_index_;
134 TestingProfile profile_; 132 TestingProfile profile_;
135 history::HistoryService* history_service_; 133 history::HistoryService* history_service_;
136 history::HistoryDatabase* history_database_; 134 history::HistoryDatabase* history_database_;
137 }; 135 };
138 136
139 InMemoryURLIndexTest::InMemoryURLIndexTest() 137 InMemoryURLIndexTest::InMemoryURLIndexTest()
140 : builder_(ScoredHistoryMatchBuilderImpl::IsBookmarkedCallback()), 138 : history_service_(nullptr), history_database_(nullptr) {
141 history_service_(nullptr),
142 history_database_(nullptr) {
143 } 139 }
144 140
145 sql::Connection& InMemoryURLIndexTest::GetDB() { 141 sql::Connection& InMemoryURLIndexTest::GetDB() {
146 return history_database_->GetDB(); 142 return history_database_->GetDB();
147 } 143 }
148 144
149 URLIndexPrivateData* InMemoryURLIndexTest::GetPrivateData() const { 145 URLIndexPrivateData* InMemoryURLIndexTest::GetPrivateData() const {
150 DCHECK(url_index_->private_data()); 146 DCHECK(url_index_->private_data());
151 return url_index_->private_data(); 147 return url_index_->private_data();
152 } 148 }
(...skipping 143 matching lines...) Expand 10 before | Expand all | Expand 10 after
296 base::FilePath::StringType InMemoryURLIndexTest::TestDBName() const { 292 base::FilePath::StringType InMemoryURLIndexTest::TestDBName() const {
297 return FILE_PATH_LITERAL("url_history_provider_test.db.txt"); 293 return FILE_PATH_LITERAL("url_history_provider_test.db.txt");
298 } 294 }
299 295
300 bool InMemoryURLIndexTest::InitializeInMemoryURLIndexInSetUp() const { 296 bool InMemoryURLIndexTest::InitializeInMemoryURLIndexInSetUp() const {
301 return true; 297 return true;
302 } 298 }
303 299
304 void InMemoryURLIndexTest::InitializeInMemoryURLIndex() { 300 void InMemoryURLIndexTest::InitializeInMemoryURLIndex() {
305 DCHECK(!url_index_); 301 DCHECK(!url_index_);
306 url_index_.reset( 302 url_index_.reset(new InMemoryURLIndex(nullptr, history_service_,
307 new InMemoryURLIndex(history_service_, base::FilePath(), kTestLanguages)); 303 base::FilePath(), kTestLanguages));
308 url_index_->Init(); 304 url_index_->Init();
309 url_index_->RebuildFromHistory(history_database_); 305 url_index_->RebuildFromHistory(history_database_);
310 } 306 }
311 307
312 void InMemoryURLIndexTest::CheckTerm( 308 void InMemoryURLIndexTest::CheckTerm(
313 const URLIndexPrivateData::SearchTermCacheMap& cache, 309 const URLIndexPrivateData::SearchTermCacheMap& cache,
314 base::string16 term) const { 310 base::string16 term) const {
315 URLIndexPrivateData::SearchTermCacheMap::const_iterator cache_iter( 311 URLIndexPrivateData::SearchTermCacheMap::const_iterator cache_iter(
316 cache.find(term)); 312 cache.find(term));
317 ASSERT_TRUE(cache.end() != cache_iter) 313 ASSERT_TRUE(cache.end() != cache_iter)
(...skipping 156 matching lines...) Expand 10 before | Expand all | Expand 10 after
474 470
475 #if defined(OS_WIN) 471 #if defined(OS_WIN)
476 // Flaky on windows trybots: http://crbug.com/351500 472 // Flaky on windows trybots: http://crbug.com/351500
477 #define MAYBE_Retrieval DISABLED_Retrieval 473 #define MAYBE_Retrieval DISABLED_Retrieval
478 #else 474 #else
479 #define MAYBE_Retrieval Retrieval 475 #define MAYBE_Retrieval Retrieval
480 #endif 476 #endif
481 TEST_F(InMemoryURLIndexTest, MAYBE_Retrieval) { 477 TEST_F(InMemoryURLIndexTest, MAYBE_Retrieval) {
482 // See if a very specific term gives a single result. 478 // See if a very specific term gives a single result.
483 ScoredHistoryMatches matches = url_index_->HistoryItemsForTerms( 479 ScoredHistoryMatches matches = url_index_->HistoryItemsForTerms(
484 ASCIIToUTF16("DrudgeReport"), base::string16::npos, kMaxMatches, 480 ASCIIToUTF16("DrudgeReport"), base::string16::npos, kMaxMatches);
485 builder_);
486 ASSERT_EQ(1U, matches.size()); 481 ASSERT_EQ(1U, matches.size());
487 482
488 // Verify that we got back the result we expected. 483 // Verify that we got back the result we expected.
489 EXPECT_EQ(5, matches[0].url_info.id()); 484 EXPECT_EQ(5, matches[0].url_info.id());
490 EXPECT_EQ("http://drudgereport.com/", matches[0].url_info.url().spec()); 485 EXPECT_EQ("http://drudgereport.com/", matches[0].url_info.url().spec());
491 EXPECT_EQ(ASCIIToUTF16("DRUDGE REPORT 2010"), matches[0].url_info.title()); 486 EXPECT_EQ(ASCIIToUTF16("DRUDGE REPORT 2010"), matches[0].url_info.title());
492 EXPECT_TRUE(matches[0].can_inline); 487 EXPECT_TRUE(matches[0].can_inline);
493 488
494 // Make sure a trailing space prevents inline-ability but still results 489 // Make sure a trailing space prevents inline-ability but still results
495 // in the expected result. 490 // in the expected result.
496 matches = url_index_->HistoryItemsForTerms(ASCIIToUTF16("DrudgeReport "), 491 matches = url_index_->HistoryItemsForTerms(ASCIIToUTF16("DrudgeReport "),
497 base::string16::npos, kMaxMatches, 492 base::string16::npos, kMaxMatches);
498 builder_);
499 ASSERT_EQ(1U, matches.size()); 493 ASSERT_EQ(1U, matches.size());
500 EXPECT_EQ(5, matches[0].url_info.id()); 494 EXPECT_EQ(5, matches[0].url_info.id());
501 EXPECT_EQ("http://drudgereport.com/", matches[0].url_info.url().spec()); 495 EXPECT_EQ("http://drudgereport.com/", matches[0].url_info.url().spec());
502 EXPECT_EQ(ASCIIToUTF16("DRUDGE REPORT 2010"), matches[0].url_info.title()); 496 EXPECT_EQ(ASCIIToUTF16("DRUDGE REPORT 2010"), matches[0].url_info.title());
503 EXPECT_FALSE(matches[0].can_inline); 497 EXPECT_FALSE(matches[0].can_inline);
504 498
505 // Search which should result in multiple results. 499 // Search which should result in multiple results.
506 matches = url_index_->HistoryItemsForTerms( 500 matches = url_index_->HistoryItemsForTerms(ASCIIToUTF16("drudge"),
507 ASCIIToUTF16("drudge"), base::string16::npos, kMaxMatches, builder_); 501 base::string16::npos, kMaxMatches);
508 ASSERT_EQ(2U, matches.size()); 502 ASSERT_EQ(2U, matches.size());
509 // The results should be in descending score order. 503 // The results should be in descending score order.
510 EXPECT_GE(matches[0].raw_score, matches[1].raw_score); 504 EXPECT_GE(matches[0].raw_score, matches[1].raw_score);
511 505
512 // Search which should result in nearly perfect result. 506 // Search which should result in nearly perfect result.
513 matches = url_index_->HistoryItemsForTerms( 507 matches = url_index_->HistoryItemsForTerms(
514 ASCIIToUTF16("Nearly Perfect Result"), base::string16::npos, kMaxMatches, 508 ASCIIToUTF16("Nearly Perfect Result"), base::string16::npos, kMaxMatches);
515 builder_);
516 ASSERT_EQ(1U, matches.size()); 509 ASSERT_EQ(1U, matches.size());
517 // The results should have a very high score. 510 // The results should have a very high score.
518 EXPECT_GT(matches[0].raw_score, 900); 511 EXPECT_GT(matches[0].raw_score, 900);
519 EXPECT_EQ(32, matches[0].url_info.id()); 512 EXPECT_EQ(32, matches[0].url_info.id());
520 EXPECT_EQ("https://nearlyperfectresult.com/", 513 EXPECT_EQ("https://nearlyperfectresult.com/",
521 matches[0].url_info.url().spec()); // Note: URL gets lowercased. 514 matches[0].url_info.url().spec()); // Note: URL gets lowercased.
522 EXPECT_EQ(ASCIIToUTF16("Practically Perfect Search Result"), 515 EXPECT_EQ(ASCIIToUTF16("Practically Perfect Search Result"),
523 matches[0].url_info.title()); 516 matches[0].url_info.title());
524 EXPECT_FALSE(matches[0].can_inline); 517 EXPECT_FALSE(matches[0].can_inline);
525 518
526 // Search which should result in very poor result. 519 // Search which should result in very poor result.
527 matches = url_index_->HistoryItemsForTerms( 520 matches = url_index_->HistoryItemsForTerms(ASCIIToUTF16("qui c"),
528 ASCIIToUTF16("qui c"), base::string16::npos, kMaxMatches, builder_); 521 base::string16::npos, kMaxMatches);
529 ASSERT_EQ(1U, matches.size()); 522 ASSERT_EQ(1U, matches.size());
530 // The results should have a poor score. 523 // The results should have a poor score.
531 EXPECT_LT(matches[0].raw_score, 500); 524 EXPECT_LT(matches[0].raw_score, 500);
532 EXPECT_EQ(33, matches[0].url_info.id()); 525 EXPECT_EQ(33, matches[0].url_info.id());
533 EXPECT_EQ("http://quiteuselesssearchresultxyz.com/", 526 EXPECT_EQ("http://quiteuselesssearchresultxyz.com/",
534 matches[0].url_info.url().spec()); // Note: URL gets lowercased. 527 matches[0].url_info.url().spec()); // Note: URL gets lowercased.
535 EXPECT_EQ(ASCIIToUTF16("Practically Useless Search Result"), 528 EXPECT_EQ(ASCIIToUTF16("Practically Useless Search Result"),
536 matches[0].url_info.title()); 529 matches[0].url_info.title());
537 EXPECT_FALSE(matches[0].can_inline); 530 EXPECT_FALSE(matches[0].can_inline);
538 531
539 // Search which will match at the end of an URL with encoded characters. 532 // Search which will match at the end of an URL with encoded characters.
540 matches = url_index_->HistoryItemsForTerms( 533 matches = url_index_->HistoryItemsForTerms(ASCIIToUTF16("Mice"),
541 ASCIIToUTF16("Mice"), base::string16::npos, kMaxMatches, builder_); 534 base::string16::npos, kMaxMatches);
542 ASSERT_EQ(1U, matches.size()); 535 ASSERT_EQ(1U, matches.size());
543 EXPECT_EQ(30, matches[0].url_info.id()); 536 EXPECT_EQ(30, matches[0].url_info.id());
544 EXPECT_FALSE(matches[0].can_inline); 537 EXPECT_FALSE(matches[0].can_inline);
545 538
546 // Check that URLs are not escaped an escape time. 539 // Check that URLs are not escaped an escape time.
547 matches = url_index_->HistoryItemsForTerms(ASCIIToUTF16("1% wikipedia"), 540 matches = url_index_->HistoryItemsForTerms(ASCIIToUTF16("1% wikipedia"),
548 base::string16::npos, kMaxMatches, 541 base::string16::npos, kMaxMatches);
549 builder_);
550 ASSERT_EQ(1U, matches.size()); 542 ASSERT_EQ(1U, matches.size());
551 EXPECT_EQ(35, matches[0].url_info.id()); 543 EXPECT_EQ(35, matches[0].url_info.id());
552 EXPECT_EQ("http://en.wikipedia.org/wiki/1%25_rule_(Internet_culture)", 544 EXPECT_EQ("http://en.wikipedia.org/wiki/1%25_rule_(Internet_culture)",
553 matches[0].url_info.url().spec()); 545 matches[0].url_info.url().spec());
554 546
555 // Verify that a single term can appear multiple times in the URL and as long 547 // Verify that a single term can appear multiple times in the URL and as long
556 // as one starts the URL it is still inlined. 548 // as one starts the URL it is still inlined.
557 matches = url_index_->HistoryItemsForTerms( 549 matches = url_index_->HistoryItemsForTerms(ASCIIToUTF16("fubar"),
558 ASCIIToUTF16("fubar"), base::string16::npos, kMaxMatches, builder_); 550 base::string16::npos, kMaxMatches);
559 ASSERT_EQ(1U, matches.size()); 551 ASSERT_EQ(1U, matches.size());
560 EXPECT_EQ(34, matches[0].url_info.id()); 552 EXPECT_EQ(34, matches[0].url_info.id());
561 EXPECT_EQ("http://fubarfubarandfubar.com/", matches[0].url_info.url().spec()); 553 EXPECT_EQ("http://fubarfubarandfubar.com/", matches[0].url_info.url().spec());
562 EXPECT_EQ(ASCIIToUTF16("Situation Normal -- FUBARED"), 554 EXPECT_EQ(ASCIIToUTF16("Situation Normal -- FUBARED"),
563 matches[0].url_info.title()); 555 matches[0].url_info.title());
564 EXPECT_TRUE(matches[0].can_inline); 556 EXPECT_TRUE(matches[0].can_inline);
565 } 557 }
566 558
567 TEST_F(InMemoryURLIndexTest, CursorPositionRetrieval) { 559 TEST_F(InMemoryURLIndexTest, CursorPositionRetrieval) {
568 // See if a very specific term with no cursor gives an empty result. 560 // See if a very specific term with no cursor gives an empty result.
569 ScoredHistoryMatches matches = url_index_->HistoryItemsForTerms( 561 ScoredHistoryMatches matches = url_index_->HistoryItemsForTerms(
570 ASCIIToUTF16("DrudReport"), base::string16::npos, kMaxMatches, builder_); 562 ASCIIToUTF16("DrudReport"), base::string16::npos, kMaxMatches);
571 ASSERT_EQ(0U, matches.size()); 563 ASSERT_EQ(0U, matches.size());
572 564
573 // The same test with the cursor at the end should give an empty result. 565 // The same test with the cursor at the end should give an empty result.
574 matches = url_index_->HistoryItemsForTerms(ASCIIToUTF16("DrudReport"), 10u, 566 matches = url_index_->HistoryItemsForTerms(ASCIIToUTF16("DrudReport"), 10u,
575 kMaxMatches, builder_); 567 kMaxMatches);
576 ASSERT_EQ(0U, matches.size()); 568 ASSERT_EQ(0U, matches.size());
577 569
578 // If the cursor is between Drud and Report, we should find the desired 570 // If the cursor is between Drud and Report, we should find the desired
579 // result. 571 // result.
580 matches = url_index_->HistoryItemsForTerms(ASCIIToUTF16("DrudReport"), 4u, 572 matches = url_index_->HistoryItemsForTerms(ASCIIToUTF16("DrudReport"), 4u,
581 kMaxMatches, builder_); 573 kMaxMatches);
582 ASSERT_EQ(1U, matches.size()); 574 ASSERT_EQ(1U, matches.size());
583 EXPECT_EQ("http://drudgereport.com/", matches[0].url_info.url().spec()); 575 EXPECT_EQ("http://drudgereport.com/", matches[0].url_info.url().spec());
584 EXPECT_EQ(ASCIIToUTF16("DRUDGE REPORT 2010"), matches[0].url_info.title()); 576 EXPECT_EQ(ASCIIToUTF16("DRUDGE REPORT 2010"), matches[0].url_info.title());
585 577
586 // Now check multi-word inputs. No cursor should fail to find a 578 // Now check multi-word inputs. No cursor should fail to find a
587 // result on this input. 579 // result on this input.
588 matches = url_index_->HistoryItemsForTerms(ASCIIToUTF16("MORTGAGERATE DROPS"), 580 matches = url_index_->HistoryItemsForTerms(ASCIIToUTF16("MORTGAGERATE DROPS"),
589 base::string16::npos, kMaxMatches, 581 base::string16::npos, kMaxMatches);
590 builder_);
591 ASSERT_EQ(0U, matches.size()); 582 ASSERT_EQ(0U, matches.size());
592 583
593 // Ditto with cursor at end. 584 // Ditto with cursor at end.
594 matches = url_index_->HistoryItemsForTerms(ASCIIToUTF16("MORTGAGERATE DROPS"), 585 matches = url_index_->HistoryItemsForTerms(ASCIIToUTF16("MORTGAGERATE DROPS"),
595 18u, kMaxMatches, builder_); 586 18u, kMaxMatches);
596 ASSERT_EQ(0U, matches.size()); 587 ASSERT_EQ(0U, matches.size());
597 588
598 // If the cursor is between MORTAGE And RATE, we should find the 589 // If the cursor is between MORTAGE And RATE, we should find the
599 // desired result. 590 // desired result.
600 matches = url_index_->HistoryItemsForTerms(ASCIIToUTF16("MORTGAGERATE DROPS"), 591 matches = url_index_->HistoryItemsForTerms(ASCIIToUTF16("MORTGAGERATE DROPS"),
601 8u, kMaxMatches, builder_); 592 8u, kMaxMatches);
602 ASSERT_EQ(1U, matches.size()); 593 ASSERT_EQ(1U, matches.size());
603 EXPECT_EQ("http://www.reuters.com/article/idUSN0839880620100708", 594 EXPECT_EQ("http://www.reuters.com/article/idUSN0839880620100708",
604 matches[0].url_info.url().spec()); 595 matches[0].url_info.url().spec());
605 EXPECT_EQ(ASCIIToUTF16( 596 EXPECT_EQ(ASCIIToUTF16(
606 "UPDATE 1-US 30-yr mortgage rate drops to new record low | Reuters"), 597 "UPDATE 1-US 30-yr mortgage rate drops to new record low | Reuters"),
607 matches[0].url_info.title()); 598 matches[0].url_info.title());
608 } 599 }
609 600
610 TEST_F(InMemoryURLIndexTest, URLPrefixMatching) { 601 TEST_F(InMemoryURLIndexTest, URLPrefixMatching) {
611 // "drudgere" - found, can inline 602 // "drudgere" - found, can inline
612 ScoredHistoryMatches matches = url_index_->HistoryItemsForTerms( 603 ScoredHistoryMatches matches = url_index_->HistoryItemsForTerms(
613 ASCIIToUTF16("drudgere"), base::string16::npos, kMaxMatches, builder_); 604 ASCIIToUTF16("drudgere"), base::string16::npos, kMaxMatches);
614 ASSERT_EQ(1U, matches.size()); 605 ASSERT_EQ(1U, matches.size());
615 EXPECT_TRUE(matches[0].can_inline); 606 EXPECT_TRUE(matches[0].can_inline);
616 607
617 // "drudgere" - found, can inline 608 // "drudgere" - found, can inline
618 matches = url_index_->HistoryItemsForTerms( 609 matches = url_index_->HistoryItemsForTerms(ASCIIToUTF16("drudgere"),
619 ASCIIToUTF16("drudgere"), base::string16::npos, kMaxMatches, builder_); 610 base::string16::npos, kMaxMatches);
620 ASSERT_EQ(1U, matches.size()); 611 ASSERT_EQ(1U, matches.size());
621 EXPECT_TRUE(matches[0].can_inline); 612 EXPECT_TRUE(matches[0].can_inline);
622 613
623 // "www.atdmt" - not found 614 // "www.atdmt" - not found
624 matches = url_index_->HistoryItemsForTerms( 615 matches = url_index_->HistoryItemsForTerms(ASCIIToUTF16("www.atdmt"),
625 ASCIIToUTF16("www.atdmt"), base::string16::npos, kMaxMatches, builder_); 616 base::string16::npos, kMaxMatches);
626 EXPECT_EQ(0U, matches.size()); 617 EXPECT_EQ(0U, matches.size());
627 618
628 // "atdmt" - found, cannot inline 619 // "atdmt" - found, cannot inline
629 matches = url_index_->HistoryItemsForTerms( 620 matches = url_index_->HistoryItemsForTerms(ASCIIToUTF16("atdmt"),
630 ASCIIToUTF16("atdmt"), base::string16::npos, kMaxMatches, builder_); 621 base::string16::npos, kMaxMatches);
631 ASSERT_EQ(1U, matches.size()); 622 ASSERT_EQ(1U, matches.size());
632 EXPECT_FALSE(matches[0].can_inline); 623 EXPECT_FALSE(matches[0].can_inline);
633 624
634 // "view.atdmt" - found, can inline 625 // "view.atdmt" - found, can inline
635 matches = url_index_->HistoryItemsForTerms( 626 matches = url_index_->HistoryItemsForTerms(ASCIIToUTF16("view.atdmt"),
636 ASCIIToUTF16("view.atdmt"), base::string16::npos, kMaxMatches, builder_); 627 base::string16::npos, kMaxMatches);
637 ASSERT_EQ(1U, matches.size()); 628 ASSERT_EQ(1U, matches.size());
638 EXPECT_TRUE(matches[0].can_inline); 629 EXPECT_TRUE(matches[0].can_inline);
639 630
640 // "view.atdmt" - found, can inline 631 // "view.atdmt" - found, can inline
641 matches = url_index_->HistoryItemsForTerms( 632 matches = url_index_->HistoryItemsForTerms(ASCIIToUTF16("view.atdmt"),
642 ASCIIToUTF16("view.atdmt"), base::string16::npos, kMaxMatches, builder_); 633 base::string16::npos, kMaxMatches);
643 ASSERT_EQ(1U, matches.size()); 634 ASSERT_EQ(1U, matches.size());
644 EXPECT_TRUE(matches[0].can_inline); 635 EXPECT_TRUE(matches[0].can_inline);
645 636
646 // "cnn.com" - found, can inline 637 // "cnn.com" - found, can inline
647 matches = url_index_->HistoryItemsForTerms( 638 matches = url_index_->HistoryItemsForTerms(ASCIIToUTF16("cnn.com"),
648 ASCIIToUTF16("cnn.com"), base::string16::npos, kMaxMatches, builder_); 639 base::string16::npos, kMaxMatches);
649 ASSERT_EQ(2U, matches.size()); 640 ASSERT_EQ(2U, matches.size());
650 // One match should be inline-able, the other not. 641 // One match should be inline-able, the other not.
651 EXPECT_TRUE(matches[0].can_inline != matches[1].can_inline); 642 EXPECT_TRUE(matches[0].can_inline != matches[1].can_inline);
652 643
653 // "www.cnn.com" - found, can inline 644 // "www.cnn.com" - found, can inline
654 matches = url_index_->HistoryItemsForTerms( 645 matches = url_index_->HistoryItemsForTerms(ASCIIToUTF16("www.cnn.com"),
655 ASCIIToUTF16("www.cnn.com"), base::string16::npos, kMaxMatches, builder_); 646 base::string16::npos, kMaxMatches);
656 ASSERT_EQ(1U, matches.size()); 647 ASSERT_EQ(1U, matches.size());
657 EXPECT_TRUE(matches[0].can_inline); 648 EXPECT_TRUE(matches[0].can_inline);
658 649
659 // "ww.cnn.com" - found because we allow mid-term matches in hostnames 650 // "ww.cnn.com" - found because we allow mid-term matches in hostnames
660 matches = url_index_->HistoryItemsForTerms( 651 matches = url_index_->HistoryItemsForTerms(ASCIIToUTF16("ww.cnn.com"),
661 ASCIIToUTF16("ww.cnn.com"), base::string16::npos, kMaxMatches, builder_); 652 base::string16::npos, kMaxMatches);
662 ASSERT_EQ(1U, matches.size()); 653 ASSERT_EQ(1U, matches.size());
663 654
664 // "www.cnn.com" - found, can inline 655 // "www.cnn.com" - found, can inline
665 matches = url_index_->HistoryItemsForTerms( 656 matches = url_index_->HistoryItemsForTerms(ASCIIToUTF16("www.cnn.com"),
666 ASCIIToUTF16("www.cnn.com"), base::string16::npos, kMaxMatches, builder_); 657 base::string16::npos, kMaxMatches);
667 ASSERT_EQ(1U, matches.size()); 658 ASSERT_EQ(1U, matches.size());
668 EXPECT_TRUE(matches[0].can_inline); 659 EXPECT_TRUE(matches[0].can_inline);
669 660
670 // "tp://www.cnn.com" - not found because we don't allow tp as a mid-term 661 // "tp://www.cnn.com" - not found because we don't allow tp as a mid-term
671 // match 662 // match
672 matches = url_index_->HistoryItemsForTerms(ASCIIToUTF16("tp://www.cnn.com"), 663 matches = url_index_->HistoryItemsForTerms(ASCIIToUTF16("tp://www.cnn.com"),
673 base::string16::npos, kMaxMatches, 664 base::string16::npos, kMaxMatches);
674 builder_);
675 ASSERT_EQ(0U, matches.size()); 665 ASSERT_EQ(0U, matches.size());
676 } 666 }
677 667
678 TEST_F(InMemoryURLIndexTest, ProperStringMatching) { 668 TEST_F(InMemoryURLIndexTest, ProperStringMatching) {
679 // Search for the following with the expected results: 669 // Search for the following with the expected results:
680 // "atdmt view" - found 670 // "atdmt view" - found
681 // "atdmt.view" - not found 671 // "atdmt.view" - not found
682 // "view.atdmt" - found 672 // "view.atdmt" - found
683 ScoredHistoryMatches matches = url_index_->HistoryItemsForTerms( 673 ScoredHistoryMatches matches = url_index_->HistoryItemsForTerms(
684 ASCIIToUTF16("atdmt view"), base::string16::npos, kMaxMatches, builder_); 674 ASCIIToUTF16("atdmt view"), base::string16::npos, kMaxMatches);
685 ASSERT_EQ(1U, matches.size()); 675 ASSERT_EQ(1U, matches.size());
686 matches = url_index_->HistoryItemsForTerms( 676 matches = url_index_->HistoryItemsForTerms(ASCIIToUTF16("atdmt.view"),
687 ASCIIToUTF16("atdmt.view"), base::string16::npos, kMaxMatches, builder_); 677 base::string16::npos, kMaxMatches);
688 ASSERT_EQ(0U, matches.size()); 678 ASSERT_EQ(0U, matches.size());
689 matches = url_index_->HistoryItemsForTerms( 679 matches = url_index_->HistoryItemsForTerms(ASCIIToUTF16("view.atdmt"),
690 ASCIIToUTF16("view.atdmt"), base::string16::npos, kMaxMatches, builder_); 680 base::string16::npos, kMaxMatches);
691 ASSERT_EQ(1U, matches.size()); 681 ASSERT_EQ(1U, matches.size());
692 } 682 }
693 683
694 TEST_F(InMemoryURLIndexTest, HugeResultSet) { 684 TEST_F(InMemoryURLIndexTest, HugeResultSet) {
695 // Create a huge set of qualifying history items. 685 // Create a huge set of qualifying history items.
696 for (history::URLID row_id = 5000; row_id < 6000; ++row_id) { 686 for (history::URLID row_id = 5000; row_id < 6000; ++row_id) {
697 history::URLRow new_row(GURL("http://www.brokeandaloneinmanitoba.com/"), 687 history::URLRow new_row(GURL("http://www.brokeandaloneinmanitoba.com/"),
698 row_id); 688 row_id);
699 new_row.set_last_visit(base::Time::Now()); 689 new_row.set_last_visit(base::Time::Now());
700 EXPECT_TRUE(UpdateURL(new_row)); 690 EXPECT_TRUE(UpdateURL(new_row));
701 } 691 }
702 692
703 ScoredHistoryMatches matches = url_index_->HistoryItemsForTerms( 693 ScoredHistoryMatches matches = url_index_->HistoryItemsForTerms(
704 ASCIIToUTF16("b"), base::string16::npos, kMaxMatches, builder_); 694 ASCIIToUTF16("b"), base::string16::npos, kMaxMatches);
705 URLIndexPrivateData& private_data(*GetPrivateData()); 695 URLIndexPrivateData& private_data(*GetPrivateData());
706 ASSERT_EQ(kMaxMatches, matches.size()); 696 ASSERT_EQ(kMaxMatches, matches.size());
707 // There are 7 matches already in the database. 697 // There are 7 matches already in the database.
708 ASSERT_EQ(1008U, private_data.pre_filter_item_count_); 698 ASSERT_EQ(1008U, private_data.pre_filter_item_count_);
709 ASSERT_EQ(500U, private_data.post_filter_item_count_); 699 ASSERT_EQ(500U, private_data.post_filter_item_count_);
710 ASSERT_EQ(kMaxMatches, private_data.post_scoring_item_count_); 700 ASSERT_EQ(kMaxMatches, private_data.post_scoring_item_count_);
711 } 701 }
712 702
713 #if defined(OS_WIN) 703 #if defined(OS_WIN)
714 // Flaky on windows trybots: http://crbug.com/351500 704 // Flaky on windows trybots: http://crbug.com/351500
715 #define MAYBE_TitleSearch DISABLED_TitleSearch 705 #define MAYBE_TitleSearch DISABLED_TitleSearch
716 #else 706 #else
717 #define MAYBE_TitleSearch TitleSearch 707 #define MAYBE_TitleSearch TitleSearch
718 #endif 708 #endif
719 TEST_F(InMemoryURLIndexTest, MAYBE_TitleSearch) { 709 TEST_F(InMemoryURLIndexTest, MAYBE_TitleSearch) {
720 // Signal if someone has changed the test DB. 710 // Signal if someone has changed the test DB.
721 EXPECT_EQ(29U, GetPrivateData()->history_info_map_.size()); 711 EXPECT_EQ(29U, GetPrivateData()->history_info_map_.size());
722 712
723 // Ensure title is being searched. 713 // Ensure title is being searched.
724 ScoredHistoryMatches matches = url_index_->HistoryItemsForTerms( 714 ScoredHistoryMatches matches = url_index_->HistoryItemsForTerms(
725 ASCIIToUTF16("MORTGAGE RATE DROPS"), base::string16::npos, kMaxMatches, 715 ASCIIToUTF16("MORTGAGE RATE DROPS"), base::string16::npos, kMaxMatches);
726 builder_);
727 ASSERT_EQ(1U, matches.size()); 716 ASSERT_EQ(1U, matches.size());
728 717
729 // Verify that we got back the result we expected. 718 // Verify that we got back the result we expected.
730 EXPECT_EQ(1, matches[0].url_info.id()); 719 EXPECT_EQ(1, matches[0].url_info.id());
731 EXPECT_EQ("http://www.reuters.com/article/idUSN0839880620100708", 720 EXPECT_EQ("http://www.reuters.com/article/idUSN0839880620100708",
732 matches[0].url_info.url().spec()); 721 matches[0].url_info.url().spec());
733 EXPECT_EQ(ASCIIToUTF16( 722 EXPECT_EQ(ASCIIToUTF16(
734 "UPDATE 1-US 30-yr mortgage rate drops to new record low | Reuters"), 723 "UPDATE 1-US 30-yr mortgage rate drops to new record low | Reuters"),
735 matches[0].url_info.title()); 724 matches[0].url_info.title());
736 } 725 }
737 726
738 TEST_F(InMemoryURLIndexTest, TitleChange) { 727 TEST_F(InMemoryURLIndexTest, TitleChange) {
739 // Verify current title terms retrieves desired item. 728 // Verify current title terms retrieves desired item.
740 base::string16 original_terms = 729 base::string16 original_terms =
741 ASCIIToUTF16("lebronomics could high taxes influence"); 730 ASCIIToUTF16("lebronomics could high taxes influence");
742 ScoredHistoryMatches matches = url_index_->HistoryItemsForTerms( 731 ScoredHistoryMatches matches = url_index_->HistoryItemsForTerms(
743 original_terms, base::string16::npos, kMaxMatches, builder_); 732 original_terms, base::string16::npos, kMaxMatches);
744 ASSERT_EQ(1U, matches.size()); 733 ASSERT_EQ(1U, matches.size());
745 734
746 // Verify that we got back the result we expected. 735 // Verify that we got back the result we expected.
747 const history::URLID expected_id = 3; 736 const history::URLID expected_id = 3;
748 EXPECT_EQ(expected_id, matches[0].url_info.id()); 737 EXPECT_EQ(expected_id, matches[0].url_info.id());
749 EXPECT_EQ("http://www.businessandmedia.org/articles/2010/20100708120415.aspx", 738 EXPECT_EQ("http://www.businessandmedia.org/articles/2010/20100708120415.aspx",
750 matches[0].url_info.url().spec()); 739 matches[0].url_info.url().spec());
751 EXPECT_EQ(ASCIIToUTF16( 740 EXPECT_EQ(ASCIIToUTF16(
752 "LeBronomics: Could High Taxes Influence James' Team Decision?"), 741 "LeBronomics: Could High Taxes Influence James' Team Decision?"),
753 matches[0].url_info.title()); 742 matches[0].url_info.title());
754 history::URLRow old_row(matches[0].url_info); 743 history::URLRow old_row(matches[0].url_info);
755 744
756 // Verify new title terms retrieves nothing. 745 // Verify new title terms retrieves nothing.
757 base::string16 new_terms = ASCIIToUTF16("does eat oats little lambs ivy"); 746 base::string16 new_terms = ASCIIToUTF16("does eat oats little lambs ivy");
758 matches = url_index_->HistoryItemsForTerms(new_terms, base::string16::npos, 747 matches = url_index_->HistoryItemsForTerms(new_terms, base::string16::npos,
759 kMaxMatches, builder_); 748 kMaxMatches);
760 ASSERT_EQ(0U, matches.size()); 749 ASSERT_EQ(0U, matches.size());
761 750
762 // Update the row. 751 // Update the row.
763 old_row.set_title(ASCIIToUTF16("Does eat oats and little lambs eat ivy")); 752 old_row.set_title(ASCIIToUTF16("Does eat oats and little lambs eat ivy"));
764 EXPECT_TRUE(UpdateURL(old_row)); 753 EXPECT_TRUE(UpdateURL(old_row));
765 754
766 // Verify we get the row using the new terms but not the original terms. 755 // Verify we get the row using the new terms but not the original terms.
767 matches = url_index_->HistoryItemsForTerms(new_terms, base::string16::npos, 756 matches = url_index_->HistoryItemsForTerms(new_terms, base::string16::npos,
768 kMaxMatches, builder_); 757 kMaxMatches);
769 ASSERT_EQ(1U, matches.size()); 758 ASSERT_EQ(1U, matches.size());
770 EXPECT_EQ(expected_id, matches[0].url_info.id()); 759 EXPECT_EQ(expected_id, matches[0].url_info.id());
771 matches = url_index_->HistoryItemsForTerms( 760 matches = url_index_->HistoryItemsForTerms(original_terms,
772 original_terms, base::string16::npos, kMaxMatches, builder_); 761 base::string16::npos, kMaxMatches);
773 ASSERT_EQ(0U, matches.size()); 762 ASSERT_EQ(0U, matches.size());
774 } 763 }
775 764
776 TEST_F(InMemoryURLIndexTest, NonUniqueTermCharacterSets) { 765 TEST_F(InMemoryURLIndexTest, NonUniqueTermCharacterSets) {
777 // The presence of duplicate characters should succeed. Exercise by cycling 766 // The presence of duplicate characters should succeed. Exercise by cycling
778 // through a string with several duplicate characters. 767 // through a string with several duplicate characters.
779 ScoredHistoryMatches matches = url_index_->HistoryItemsForTerms( 768 ScoredHistoryMatches matches = url_index_->HistoryItemsForTerms(
780 ASCIIToUTF16("ABRA"), base::string16::npos, kMaxMatches, builder_); 769 ASCIIToUTF16("ABRA"), base::string16::npos, kMaxMatches);
781 ASSERT_EQ(1U, matches.size()); 770 ASSERT_EQ(1U, matches.size());
782 EXPECT_EQ(28, matches[0].url_info.id()); 771 EXPECT_EQ(28, matches[0].url_info.id());
783 EXPECT_EQ("http://www.ddj.com/windows/184416623", 772 EXPECT_EQ("http://www.ddj.com/windows/184416623",
784 matches[0].url_info.url().spec()); 773 matches[0].url_info.url().spec());
785 774
786 matches = url_index_->HistoryItemsForTerms( 775 matches = url_index_->HistoryItemsForTerms(ASCIIToUTF16("ABRACAD"),
787 ASCIIToUTF16("ABRACAD"), base::string16::npos, kMaxMatches, builder_); 776 base::string16::npos, kMaxMatches);
788 ASSERT_EQ(1U, matches.size()); 777 ASSERT_EQ(1U, matches.size());
789 EXPECT_EQ(28, matches[0].url_info.id()); 778 EXPECT_EQ(28, matches[0].url_info.id());
790 779
791 matches = url_index_->HistoryItemsForTerms( 780 matches = url_index_->HistoryItemsForTerms(ASCIIToUTF16("ABRACADABRA"),
792 ASCIIToUTF16("ABRACADABRA"), base::string16::npos, kMaxMatches, builder_); 781 base::string16::npos, kMaxMatches);
793 ASSERT_EQ(1U, matches.size()); 782 ASSERT_EQ(1U, matches.size());
794 EXPECT_EQ(28, matches[0].url_info.id()); 783 EXPECT_EQ(28, matches[0].url_info.id());
795 784
796 matches = url_index_->HistoryItemsForTerms( 785 matches = url_index_->HistoryItemsForTerms(ASCIIToUTF16("ABRACADABR"),
797 ASCIIToUTF16("ABRACADABR"), base::string16::npos, kMaxMatches, builder_); 786 base::string16::npos, kMaxMatches);
798 ASSERT_EQ(1U, matches.size()); 787 ASSERT_EQ(1U, matches.size());
799 EXPECT_EQ(28, matches[0].url_info.id()); 788 EXPECT_EQ(28, matches[0].url_info.id());
800 789
801 matches = url_index_->HistoryItemsForTerms( 790 matches = url_index_->HistoryItemsForTerms(ASCIIToUTF16("ABRACA"),
802 ASCIIToUTF16("ABRACA"), base::string16::npos, kMaxMatches, builder_); 791 base::string16::npos, kMaxMatches);
803 ASSERT_EQ(1U, matches.size()); 792 ASSERT_EQ(1U, matches.size());
804 EXPECT_EQ(28, matches[0].url_info.id()); 793 EXPECT_EQ(28, matches[0].url_info.id());
805 } 794 }
806 795
807 TEST_F(InMemoryURLIndexTest, TypedCharacterCaching) { 796 TEST_F(InMemoryURLIndexTest, TypedCharacterCaching) {
808 // Verify that match results for previously typed characters are retained 797 // Verify that match results for previously typed characters are retained
809 // (in the term_char_word_set_cache_) and reused, if possible, in future 798 // (in the term_char_word_set_cache_) and reused, if possible, in future
810 // autocompletes. 799 // autocompletes.
811 800
812 URLIndexPrivateData::SearchTermCacheMap& cache( 801 URLIndexPrivateData::SearchTermCacheMap& cache(
813 GetPrivateData()->search_term_cache_); 802 GetPrivateData()->search_term_cache_);
814 803
815 // The cache should be empty at this point. 804 // The cache should be empty at this point.
816 EXPECT_EQ(0U, cache.size()); 805 EXPECT_EQ(0U, cache.size());
817 806
818 // Now simulate typing search terms into the omnibox and check the state of 807 // Now simulate typing search terms into the omnibox and check the state of
819 // the cache as each item is 'typed'. 808 // the cache as each item is 'typed'.
820 809
821 // Simulate typing "r" giving "r" in the simulated omnibox. The results for 810 // Simulate typing "r" giving "r" in the simulated omnibox. The results for
822 // 'r' will be not cached because it is only 1 character long. 811 // 'r' will be not cached because it is only 1 character long.
823 url_index_->HistoryItemsForTerms(ASCIIToUTF16("r"), base::string16::npos, 812 url_index_->HistoryItemsForTerms(ASCIIToUTF16("r"), base::string16::npos,
824 kMaxMatches, builder_); 813 kMaxMatches);
825 EXPECT_EQ(0U, cache.size()); 814 EXPECT_EQ(0U, cache.size());
826 815
827 // Simulate typing "re" giving "r re" in the simulated omnibox. 816 // Simulate typing "re" giving "r re" in the simulated omnibox.
828 // 're' should be cached at this point but not 'r' as it is a single 817 // 're' should be cached at this point but not 'r' as it is a single
829 // character. 818 // character.
830 url_index_->HistoryItemsForTerms(ASCIIToUTF16("r re"), base::string16::npos, 819 url_index_->HistoryItemsForTerms(ASCIIToUTF16("r re"), base::string16::npos,
831 kMaxMatches, builder_); 820 kMaxMatches);
832 ASSERT_EQ(1U, cache.size()); 821 ASSERT_EQ(1U, cache.size());
833 CheckTerm(cache, ASCIIToUTF16("re")); 822 CheckTerm(cache, ASCIIToUTF16("re"));
834 823
835 // Simulate typing "reco" giving "r re reco" in the simulated omnibox. 824 // Simulate typing "reco" giving "r re reco" in the simulated omnibox.
836 // 're' and 'reco' should be cached at this point but not 'r' as it is a 825 // 're' and 'reco' should be cached at this point but not 'r' as it is a
837 // single character. 826 // single character.
838 url_index_->HistoryItemsForTerms(ASCIIToUTF16("r re reco"), 827 url_index_->HistoryItemsForTerms(ASCIIToUTF16("r re reco"),
839 base::string16::npos, kMaxMatches, builder_); 828 base::string16::npos, kMaxMatches);
840 ASSERT_EQ(2U, cache.size()); 829 ASSERT_EQ(2U, cache.size());
841 CheckTerm(cache, ASCIIToUTF16("re")); 830 CheckTerm(cache, ASCIIToUTF16("re"));
842 CheckTerm(cache, ASCIIToUTF16("reco")); 831 CheckTerm(cache, ASCIIToUTF16("reco"));
843 832
844 // Simulate typing "mort". 833 // Simulate typing "mort".
845 // Since we now have only one search term, the cached results for 're' and 834 // Since we now have only one search term, the cached results for 're' and
846 // 'reco' should be purged, giving us only 1 item in the cache (for 'mort'). 835 // 'reco' should be purged, giving us only 1 item in the cache (for 'mort').
847 url_index_->HistoryItemsForTerms(ASCIIToUTF16("mort"), base::string16::npos, 836 url_index_->HistoryItemsForTerms(ASCIIToUTF16("mort"), base::string16::npos,
848 kMaxMatches, builder_); 837 kMaxMatches);
849 ASSERT_EQ(1U, cache.size()); 838 ASSERT_EQ(1U, cache.size());
850 CheckTerm(cache, ASCIIToUTF16("mort")); 839 CheckTerm(cache, ASCIIToUTF16("mort"));
851 840
852 // Simulate typing "reco" giving "mort reco" in the simulated omnibox. 841 // Simulate typing "reco" giving "mort reco" in the simulated omnibox.
853 url_index_->HistoryItemsForTerms(ASCIIToUTF16("mort reco"), 842 url_index_->HistoryItemsForTerms(ASCIIToUTF16("mort reco"),
854 base::string16::npos, kMaxMatches, builder_); 843 base::string16::npos, kMaxMatches);
855 ASSERT_EQ(2U, cache.size()); 844 ASSERT_EQ(2U, cache.size());
856 CheckTerm(cache, ASCIIToUTF16("mort")); 845 CheckTerm(cache, ASCIIToUTF16("mort"));
857 CheckTerm(cache, ASCIIToUTF16("reco")); 846 CheckTerm(cache, ASCIIToUTF16("reco"));
858 847
859 // Simulate a <DELETE> by removing the 'reco' and adding back the 'rec'. 848 // Simulate a <DELETE> by removing the 'reco' and adding back the 'rec'.
860 url_index_->HistoryItemsForTerms(ASCIIToUTF16("mort rec"), 849 url_index_->HistoryItemsForTerms(ASCIIToUTF16("mort rec"),
861 base::string16::npos, kMaxMatches, builder_); 850 base::string16::npos, kMaxMatches);
862 ASSERT_EQ(2U, cache.size()); 851 ASSERT_EQ(2U, cache.size());
863 CheckTerm(cache, ASCIIToUTF16("mort")); 852 CheckTerm(cache, ASCIIToUTF16("mort"));
864 CheckTerm(cache, ASCIIToUTF16("rec")); 853 CheckTerm(cache, ASCIIToUTF16("rec"));
865 } 854 }
866 855
867 TEST_F(InMemoryURLIndexTest, AddNewRows) { 856 TEST_F(InMemoryURLIndexTest, AddNewRows) {
868 // Verify that the row we're going to add does not already exist. 857 // Verify that the row we're going to add does not already exist.
869 history::URLID new_row_id = 87654321; 858 history::URLID new_row_id = 87654321;
870 // Newly created history::URLRows get a last_visit time of 'right now' so it 859 // Newly created history::URLRows get a last_visit time of 'right now' so it
871 // should 860 // should
872 // qualify as a quick result candidate. 861 // qualify as a quick result candidate.
873 EXPECT_TRUE(url_index_->HistoryItemsForTerms(ASCIIToUTF16("brokeandalone"), 862 EXPECT_TRUE(url_index_->HistoryItemsForTerms(ASCIIToUTF16("brokeandalone"),
874 base::string16::npos, 863 base::string16::npos,
875 kMaxMatches, builder_).empty()); 864 kMaxMatches).empty());
876 865
877 // Add a new row. 866 // Add a new row.
878 history::URLRow new_row(GURL("http://www.brokeandaloneinmanitoba.com/"), 867 history::URLRow new_row(GURL("http://www.brokeandaloneinmanitoba.com/"),
879 new_row_id++); 868 new_row_id++);
880 new_row.set_last_visit(base::Time::Now()); 869 new_row.set_last_visit(base::Time::Now());
881 EXPECT_TRUE(UpdateURL(new_row)); 870 EXPECT_TRUE(UpdateURL(new_row));
882 871
883 // Verify that we can retrieve it. 872 // Verify that we can retrieve it.
884 EXPECT_EQ(1U, url_index_->HistoryItemsForTerms(ASCIIToUTF16("brokeandalone"), 873 EXPECT_EQ(1U, url_index_->HistoryItemsForTerms(ASCIIToUTF16("brokeandalone"),
885 base::string16::npos, 874 base::string16::npos,
886 kMaxMatches, builder_).size()); 875 kMaxMatches).size());
887 876
888 // Add it again just to be sure that is harmless and that it does not update 877 // Add it again just to be sure that is harmless and that it does not update
889 // the index. 878 // the index.
890 EXPECT_FALSE(UpdateURL(new_row)); 879 EXPECT_FALSE(UpdateURL(new_row));
891 EXPECT_EQ(1U, url_index_->HistoryItemsForTerms(ASCIIToUTF16("brokeandalone"), 880 EXPECT_EQ(1U, url_index_->HistoryItemsForTerms(ASCIIToUTF16("brokeandalone"),
892 base::string16::npos, 881 base::string16::npos,
893 kMaxMatches, builder_).size()); 882 kMaxMatches).size());
894 883
895 // Make up an URL that does not qualify and try to add it. 884 // Make up an URL that does not qualify and try to add it.
896 history::URLRow unqualified_row( 885 history::URLRow unqualified_row(
897 GURL("http://www.brokeandaloneinmanitoba.com/"), new_row_id++); 886 GURL("http://www.brokeandaloneinmanitoba.com/"), new_row_id++);
898 EXPECT_FALSE(UpdateURL(new_row)); 887 EXPECT_FALSE(UpdateURL(new_row));
899 } 888 }
900 889
901 TEST_F(InMemoryURLIndexTest, DeleteRows) { 890 TEST_F(InMemoryURLIndexTest, DeleteRows) {
902 ScoredHistoryMatches matches = url_index_->HistoryItemsForTerms( 891 ScoredHistoryMatches matches = url_index_->HistoryItemsForTerms(
903 ASCIIToUTF16("DrudgeReport"), base::string16::npos, kMaxMatches, 892 ASCIIToUTF16("DrudgeReport"), base::string16::npos, kMaxMatches);
904 builder_);
905 ASSERT_EQ(1U, matches.size()); 893 ASSERT_EQ(1U, matches.size());
906 894
907 // Delete the URL then search again. 895 // Delete the URL then search again.
908 EXPECT_TRUE(DeleteURL(matches[0].url_info.url())); 896 EXPECT_TRUE(DeleteURL(matches[0].url_info.url()));
909 EXPECT_TRUE(url_index_->HistoryItemsForTerms(ASCIIToUTF16("DrudgeReport"), 897 EXPECT_TRUE(url_index_->HistoryItemsForTerms(ASCIIToUTF16("DrudgeReport"),
910 base::string16::npos, 898 base::string16::npos,
911 kMaxMatches, builder_).empty()); 899 kMaxMatches).empty());
912 900
913 // Make up an URL that does not exist in the database and delete it. 901 // Make up an URL that does not exist in the database and delete it.
914 GURL url("http://www.hokeypokey.com/putyourrightfootin.html"); 902 GURL url("http://www.hokeypokey.com/putyourrightfootin.html");
915 EXPECT_FALSE(DeleteURL(url)); 903 EXPECT_FALSE(DeleteURL(url));
916 } 904 }
917 905
918 TEST_F(InMemoryURLIndexTest, ExpireRow) { 906 TEST_F(InMemoryURLIndexTest, ExpireRow) {
919 ScoredHistoryMatches matches = url_index_->HistoryItemsForTerms( 907 ScoredHistoryMatches matches = url_index_->HistoryItemsForTerms(
920 ASCIIToUTF16("DrudgeReport"), base::string16::npos, kMaxMatches, 908 ASCIIToUTF16("DrudgeReport"), base::string16::npos, kMaxMatches);
921 builder_);
922 ASSERT_EQ(1U, matches.size()); 909 ASSERT_EQ(1U, matches.size());
923 910
924 // Determine the row id for the result, remember that id, broadcast a 911 // Determine the row id for the result, remember that id, broadcast a
925 // delete notification, then ensure that the row has been deleted. 912 // delete notification, then ensure that the row has been deleted.
926 history::URLRows deleted_rows; 913 history::URLRows deleted_rows;
927 deleted_rows.push_back(matches[0].url_info); 914 deleted_rows.push_back(matches[0].url_info);
928 url_index_->OnURLsDeleted(nullptr, false, false, deleted_rows, 915 url_index_->OnURLsDeleted(nullptr, false, false, deleted_rows,
929 std::set<GURL>()); 916 std::set<GURL>());
930 EXPECT_TRUE(url_index_->HistoryItemsForTerms(ASCIIToUTF16("DrudgeReport"), 917 EXPECT_TRUE(url_index_->HistoryItemsForTerms(ASCIIToUTF16("DrudgeReport"),
931 base::string16::npos, 918 base::string16::npos,
932 kMaxMatches, builder_).empty()); 919 kMaxMatches).empty());
933 } 920 }
934 921
935 TEST_F(InMemoryURLIndexTest, WhitelistedURLs) { 922 TEST_F(InMemoryURLIndexTest, WhitelistedURLs) {
936 struct TestData { 923 struct TestData {
937 const std::string url_spec; 924 const std::string url_spec;
938 const bool expected_is_whitelisted; 925 const bool expected_is_whitelisted;
939 } data[] = { 926 } data[] = {
940 // URLs with whitelisted schemes. 927 // URLs with whitelisted schemes.
941 { "about:histograms", true }, 928 { "about:histograms", true },
942 { "chrome://settings", true }, 929 { "chrome://settings", true },
(...skipping 275 matching lines...) Expand 10 before | Expand all | Expand 10 after
1218 void set_history_dir(const base::FilePath& dir_path); 1205 void set_history_dir(const base::FilePath& dir_path);
1219 bool GetCacheFilePath(base::FilePath* file_path) const; 1206 bool GetCacheFilePath(base::FilePath* file_path) const;
1220 1207
1221 base::ScopedTempDir temp_dir_; 1208 base::ScopedTempDir temp_dir_;
1222 scoped_ptr<InMemoryURLIndex> url_index_; 1209 scoped_ptr<InMemoryURLIndex> url_index_;
1223 }; 1210 };
1224 1211
1225 void InMemoryURLIndexCacheTest::SetUp() { 1212 void InMemoryURLIndexCacheTest::SetUp() {
1226 ASSERT_TRUE(temp_dir_.CreateUniqueTempDir()); 1213 ASSERT_TRUE(temp_dir_.CreateUniqueTempDir());
1227 base::FilePath path(temp_dir_.path()); 1214 base::FilePath path(temp_dir_.path());
1228 url_index_.reset(new InMemoryURLIndex(nullptr, path, kTestLanguages)); 1215 url_index_.reset(
1216 new InMemoryURLIndex(nullptr, nullptr, path, kTestLanguages));
1229 } 1217 }
1230 1218
1231 void InMemoryURLIndexCacheTest::TearDown() { 1219 void InMemoryURLIndexCacheTest::TearDown() {
1232 if (url_index_) 1220 if (url_index_)
1233 url_index_->Shutdown(); 1221 url_index_->Shutdown();
1234 } 1222 }
1235 1223
1236 void InMemoryURLIndexCacheTest::set_history_dir( 1224 void InMemoryURLIndexCacheTest::set_history_dir(
1237 const base::FilePath& dir_path) { 1225 const base::FilePath& dir_path) {
1238 return url_index_->set_history_dir(dir_path); 1226 return url_index_->set_history_dir(dir_path);
(...skipping 14 matching lines...) Expand all
1253 ASSERT_TRUE(GetCacheFilePath(&full_file_path)); 1241 ASSERT_TRUE(GetCacheFilePath(&full_file_path));
1254 std::vector<base::FilePath::StringType> actual_parts; 1242 std::vector<base::FilePath::StringType> actual_parts;
1255 full_file_path.GetComponents(&actual_parts); 1243 full_file_path.GetComponents(&actual_parts);
1256 ASSERT_EQ(expected_parts.size(), actual_parts.size()); 1244 ASSERT_EQ(expected_parts.size(), actual_parts.size());
1257 size_t count = expected_parts.size(); 1245 size_t count = expected_parts.size();
1258 for (size_t i = 0; i < count; ++i) 1246 for (size_t i = 0; i < count; ++i)
1259 EXPECT_EQ(expected_parts[i], actual_parts[i]); 1247 EXPECT_EQ(expected_parts[i], actual_parts[i]);
1260 // Must clear the history_dir_ to satisfy the dtor's DCHECK. 1248 // Must clear the history_dir_ to satisfy the dtor's DCHECK.
1261 set_history_dir(base::FilePath()); 1249 set_history_dir(base::FilePath());
1262 } 1250 }
OLDNEW
« no previous file with comments | « chrome/browser/autocomplete/in_memory_url_index_factory.cc ('k') | chrome/browser/autocomplete/scored_history_match.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698