| Index: chrome/browser/history/text_database_manager_unittest.cc
|
| diff --git a/chrome/browser/history/text_database_manager_unittest.cc b/chrome/browser/history/text_database_manager_unittest.cc
|
| deleted file mode 100644
|
| index 0ea76f6dd8aa8842b29fefd80df2502729c7f8b7..0000000000000000000000000000000000000000
|
| --- a/chrome/browser/history/text_database_manager_unittest.cc
|
| +++ /dev/null
|
| @@ -1,598 +0,0 @@
|
| -// Copyright (c) 2011 The Chromium Authors. All rights reserved.
|
| -// Use of this source code is governed by a BSD-style license that can be
|
| -// found in the LICENSE file.
|
| -
|
| -#include <set>
|
| -
|
| -#include "base/file_util.h"
|
| -#include "base/files/file_path.h"
|
| -#include "base/message_loop/message_loop.h"
|
| -#include "base/strings/utf_string_conversions.h"
|
| -#include "chrome/browser/history/text_database_manager.h"
|
| -#include "chrome/browser/history/visit_database.h"
|
| -#include "sql/connection.h"
|
| -#include "testing/gtest/include/gtest/gtest.h"
|
| -
|
| -using base::Time;
|
| -using base::TimeDelta;
|
| -using base::TimeTicks;
|
| -
|
| -namespace history {
|
| -
|
| -namespace {
|
| -
|
| -const char* kURL1 = "http://www.google.com/asdf";
|
| -const char* kTitle1 = "Google A";
|
| -const char* kBody1 = "FOO page one.";
|
| -
|
| -const char* kURL2 = "http://www.google.com/qwer";
|
| -const char* kTitle2 = "Google B";
|
| -const char* kBody2 = "FOO two.";
|
| -
|
| -const char* kURL3 = "http://www.google.com/zxcv";
|
| -const char* kTitle3 = "Google C";
|
| -const char* kBody3 = "FOO drei";
|
| -
|
| -const char* kURL4 = "http://www.google.com/hjkl";
|
| -const char* kTitle4 = "Google D";
|
| -const char* kBody4 = "FOO lalala four.";
|
| -
|
| -const char* kURL5 = "http://www.google.com/uiop";
|
| -const char* kTitle5 = "Google cinq";
|
| -const char* kBody5 = "FOO page one.";
|
| -
|
| -// This provides a simple implementation of a URL+VisitDatabase using an
|
| -// in-memory sqlite connection. The text database manager expects to be able to
|
| -// update the visit database to keep in sync.
|
| -class InMemDB : public URLDatabase, public VisitDatabase {
|
| - public:
|
| - InMemDB() {
|
| - EXPECT_TRUE(db_.OpenInMemory());
|
| - CreateURLTable(false);
|
| - InitVisitTable();
|
| - }
|
| - virtual ~InMemDB() {
|
| - }
|
| -
|
| - private:
|
| - virtual sql::Connection& GetDB() OVERRIDE { return db_; }
|
| -
|
| - sql::Connection db_;
|
| -
|
| - DISALLOW_COPY_AND_ASSIGN(InMemDB);
|
| -};
|
| -
|
| -// Adds all the pages once, and the first page once more in the next month.
|
| -// The times of all the pages will be filled into |*times|.
|
| -void AddAllPages(TextDatabaseManager& manager, VisitDatabase* visit_db,
|
| - std::vector<Time>* times) {
|
| - Time::Exploded exploded;
|
| - memset(&exploded, 0, sizeof(Time::Exploded));
|
| -
|
| - // Put the visits in two different months so it will query across databases.
|
| - exploded.year = 2008;
|
| - exploded.month = 1;
|
| - exploded.day_of_month = 3;
|
| -
|
| - VisitRow visit_row;
|
| - visit_row.url_id = 1;
|
| - visit_row.visit_time = Time::FromUTCExploded(exploded);
|
| - visit_row.referring_visit = 0;
|
| - visit_row.transition = content::PageTransitionFromInt(0);
|
| - visit_row.segment_id = 0;
|
| - visit_row.is_indexed = false;
|
| - visit_db->AddVisit(&visit_row, SOURCE_BROWSED);
|
| -
|
| - times->push_back(visit_row.visit_time);
|
| - manager.AddPageData(GURL(kURL1), visit_row.url_id, visit_row.visit_id,
|
| - visit_row.visit_time, UTF8ToUTF16(kTitle1),
|
| - UTF8ToUTF16(kBody1));
|
| -
|
| - exploded.day_of_month++;
|
| - visit_row.url_id = 2;
|
| - visit_row.visit_time = Time::FromUTCExploded(exploded);
|
| - visit_db->AddVisit(&visit_row, SOURCE_BROWSED);
|
| - times->push_back(visit_row.visit_time);
|
| - manager.AddPageData(GURL(kURL2), visit_row.url_id, visit_row.visit_id,
|
| - visit_row.visit_time, UTF8ToUTF16(kTitle2),
|
| - UTF8ToUTF16(kBody2));
|
| -
|
| - exploded.day_of_month++;
|
| - visit_row.url_id = 2;
|
| - visit_row.visit_time = Time::FromUTCExploded(exploded);
|
| - visit_db->AddVisit(&visit_row, SOURCE_BROWSED);
|
| - times->push_back(visit_row.visit_time);
|
| - manager.AddPageData(GURL(kURL3), visit_row.url_id, visit_row.visit_id,
|
| - visit_row.visit_time, UTF8ToUTF16(kTitle3),
|
| - UTF8ToUTF16(kBody3));
|
| -
|
| - // Put the next ones in the next month.
|
| - exploded.month++;
|
| - visit_row.url_id = 2;
|
| - visit_row.visit_time = Time::FromUTCExploded(exploded);
|
| - visit_db->AddVisit(&visit_row, SOURCE_BROWSED);
|
| - times->push_back(visit_row.visit_time);
|
| - manager.AddPageData(GURL(kURL4), visit_row.url_id, visit_row.visit_id,
|
| - visit_row.visit_time, UTF8ToUTF16(kTitle4),
|
| - UTF8ToUTF16(kBody4));
|
| -
|
| - exploded.day_of_month++;
|
| - visit_row.url_id = 2;
|
| - visit_row.visit_time = Time::FromUTCExploded(exploded);
|
| - visit_db->AddVisit(&visit_row, SOURCE_BROWSED);
|
| - times->push_back(visit_row.visit_time);
|
| - manager.AddPageData(GURL(kURL5), visit_row.url_id, visit_row.visit_id,
|
| - visit_row.visit_time, UTF8ToUTF16(kTitle5),
|
| - UTF8ToUTF16(kBody5));
|
| -
|
| - // Put the first one in again in the second month.
|
| - exploded.day_of_month++;
|
| - visit_row.url_id = 2;
|
| - visit_row.visit_time = Time::FromUTCExploded(exploded);
|
| - visit_db->AddVisit(&visit_row, SOURCE_BROWSED);
|
| - times->push_back(visit_row.visit_time);
|
| - manager.AddPageData(GURL(kURL1), visit_row.url_id, visit_row.visit_id,
|
| - visit_row.visit_time, UTF8ToUTF16(kTitle1),
|
| - UTF8ToUTF16(kBody1));
|
| -}
|
| -
|
| -bool ResultsHaveURL(const std::vector<TextDatabase::Match>& results,
|
| - const char* url) {
|
| - GURL gurl(url);
|
| - for (size_t i = 0; i < results.size(); i++) {
|
| - if (results[i].url == gurl)
|
| - return true;
|
| - }
|
| - return false;
|
| -}
|
| -
|
| -} // namespace
|
| -
|
| -class TextDatabaseManagerTest : public testing::Test {
|
| - public:
|
| - // Called manually by the test so it can report failure to initialize.
|
| - bool Init() {
|
| - return file_util::CreateNewTempDirectory(
|
| - FILE_PATH_LITERAL("TestSearchTest"), &dir_);
|
| - }
|
| -
|
| - protected:
|
| - virtual void SetUp() {
|
| - }
|
| -
|
| - virtual void TearDown() {
|
| - base::DeleteFile(dir_, true);
|
| - }
|
| -
|
| - base::MessageLoop message_loop_;
|
| -
|
| - // Directory containing the databases.
|
| - base::FilePath dir_;
|
| -};
|
| -
|
| -// Tests basic querying.
|
| -TEST_F(TextDatabaseManagerTest, InsertQuery) {
|
| - ASSERT_TRUE(Init());
|
| - InMemDB visit_db;
|
| - TextDatabaseManager manager(dir_, &visit_db, &visit_db);
|
| - ASSERT_TRUE(manager.Init(NULL));
|
| -
|
| - std::vector<Time> times;
|
| - AddAllPages(manager, &visit_db, ×);
|
| -
|
| - QueryOptions options;
|
| - options.begin_time = times[0] - TimeDelta::FromDays(100);
|
| - options.end_time = times[times.size() - 1] + TimeDelta::FromDays(100);
|
| - std::vector<TextDatabase::Match> results;
|
| - Time first_time_searched;
|
| - manager.GetTextMatches(UTF8ToUTF16("FOO"), options,
|
| - &results, &first_time_searched);
|
| -
|
| - // We should have matched every page.
|
| - EXPECT_EQ(6U, results.size());
|
| - EXPECT_TRUE(ResultsHaveURL(results, kURL1));
|
| - EXPECT_TRUE(ResultsHaveURL(results, kURL2));
|
| - EXPECT_TRUE(ResultsHaveURL(results, kURL3));
|
| - EXPECT_TRUE(ResultsHaveURL(results, kURL4));
|
| - EXPECT_TRUE(ResultsHaveURL(results, kURL5));
|
| -
|
| - // The first time searched should have been the first page's time or before
|
| - // (it could have eliminated some time for us).
|
| - EXPECT_TRUE(first_time_searched <= times[0]);
|
| -}
|
| -
|
| -// Tests that adding page components piecemeal will get them added properly.
|
| -// This does not supply a visit to update, this mode is used only by the unit
|
| -// tests right now, but we test it anyway.
|
| -TEST_F(TextDatabaseManagerTest, InsertCompleteNoVisit) {
|
| - ASSERT_TRUE(Init());
|
| - InMemDB visit_db;
|
| - TextDatabaseManager manager(dir_, &visit_db, &visit_db);
|
| - ASSERT_TRUE(manager.Init(NULL));
|
| -
|
| - // First add one without a visit.
|
| - const GURL url(kURL1);
|
| - manager.AddPageURL(url, 0, 0, Time::Now());
|
| - manager.AddPageTitle(url, UTF8ToUTF16(kTitle1));
|
| - manager.AddPageContents(url, UTF8ToUTF16(kBody1));
|
| -
|
| - // Check that the page got added.
|
| - QueryOptions options;
|
| - std::vector<TextDatabase::Match> results;
|
| - Time first_time_searched;
|
| -
|
| - manager.GetTextMatches(UTF8ToUTF16("FOO"), options,
|
| - &results, &first_time_searched);
|
| - ASSERT_EQ(1U, results.size());
|
| - EXPECT_EQ(kTitle1, UTF16ToUTF8(results[0].title));
|
| -}
|
| -
|
| -// Like InsertCompleteNoVisit but specifies a visit to update. We check that the
|
| -// visit was updated properly.
|
| -TEST_F(TextDatabaseManagerTest, InsertCompleteVisit) {
|
| - ASSERT_TRUE(Init());
|
| - InMemDB visit_db;
|
| - TextDatabaseManager manager(dir_, &visit_db, &visit_db);
|
| - ASSERT_TRUE(manager.Init(NULL));
|
| -
|
| - // First add a visit to a page. We can just make up a URL ID since there is
|
| - // not actually any URL database around.
|
| - VisitRow visit;
|
| - visit.url_id = 1;
|
| - visit.visit_time = Time::Now();
|
| - visit.referring_visit = 0;
|
| - visit.transition = content::PAGE_TRANSITION_LINK;
|
| - visit.segment_id = 0;
|
| - visit.is_indexed = false;
|
| - visit_db.AddVisit(&visit, SOURCE_BROWSED);
|
| -
|
| - // Add a full text indexed entry for that visit.
|
| - const GURL url(kURL2);
|
| - manager.AddPageURL(url, visit.url_id, visit.visit_id, visit.visit_time);
|
| - manager.AddPageContents(url, UTF8ToUTF16(kBody2));
|
| - manager.AddPageTitle(url, UTF8ToUTF16(kTitle2));
|
| -
|
| - // Check that the page got added.
|
| - QueryOptions options;
|
| - std::vector<TextDatabase::Match> results;
|
| - Time first_time_searched;
|
| -
|
| - manager.GetTextMatches(UTF8ToUTF16("FOO"), options,
|
| - &results, &first_time_searched);
|
| - ASSERT_EQ(1U, results.size());
|
| - EXPECT_EQ(kTitle2, UTF16ToUTF8(results[0].title));
|
| -
|
| - // Check that the visit got updated for its new indexed state.
|
| - VisitRow out_visit;
|
| - ASSERT_TRUE(visit_db.GetRowForVisit(visit.visit_id, &out_visit));
|
| - EXPECT_TRUE(out_visit.is_indexed);
|
| -}
|
| -
|
| -// Tests that partial inserts that expire are added to the database.
|
| -TEST_F(TextDatabaseManagerTest, InsertPartial) {
|
| - ASSERT_TRUE(Init());
|
| - InMemDB visit_db;
|
| - TextDatabaseManager manager(dir_, &visit_db, &visit_db);
|
| - ASSERT_TRUE(manager.Init(NULL));
|
| -
|
| - // Add the first one with just a URL.
|
| - GURL url1(kURL1);
|
| - manager.AddPageURL(url1, 0, 0, Time::Now());
|
| -
|
| - // Now add a second one with a URL and title.
|
| - GURL url2(kURL2);
|
| - manager.AddPageURL(url2, 0, 0, Time::Now());
|
| - manager.AddPageTitle(url2, UTF8ToUTF16(kTitle2));
|
| -
|
| - // The third one has a URL and body.
|
| - GURL url3(kURL3);
|
| - manager.AddPageURL(url3, 0, 0, Time::Now());
|
| - manager.AddPageContents(url3, UTF8ToUTF16(kBody3));
|
| -
|
| - // Expire stuff very fast. This assumes that the time between the first
|
| - // AddPageURL and this line is less than the expiration time (20 seconds).
|
| - TimeTicks added_time = TimeTicks::Now();
|
| - TimeTicks expire_time = added_time + TimeDelta::FromSeconds(5);
|
| - manager.FlushOldChangesForTime(expire_time);
|
| -
|
| - // Do a query, nothing should be added yet.
|
| - QueryOptions options;
|
| - std::vector<TextDatabase::Match> results;
|
| - Time first_time_searched;
|
| - manager.GetTextMatches(UTF8ToUTF16("google"), options,
|
| - &results, &first_time_searched);
|
| - ASSERT_EQ(0U, results.size());
|
| -
|
| - // Compute a time threshold that will cause everything to be flushed, and
|
| - // poke at the manager's internals to cause this to happen.
|
| - expire_time = added_time + TimeDelta::FromDays(1);
|
| - manager.FlushOldChangesForTime(expire_time);
|
| -
|
| - // Now we should have all 3 URLs added.
|
| - manager.GetTextMatches(UTF8ToUTF16("google"), options,
|
| - &results, &first_time_searched);
|
| - ASSERT_EQ(3U, results.size());
|
| - EXPECT_TRUE(ResultsHaveURL(results, kURL1));
|
| - EXPECT_TRUE(ResultsHaveURL(results, kURL2));
|
| - EXPECT_TRUE(ResultsHaveURL(results, kURL3));
|
| -}
|
| -
|
| -// Tests that partial inserts (due to timeouts) will still get updated if the
|
| -// data comes in later.
|
| -TEST_F(TextDatabaseManagerTest, PartialComplete) {
|
| - ASSERT_TRUE(Init());
|
| - InMemDB visit_db;
|
| - TextDatabaseManager manager(dir_, &visit_db, &visit_db);
|
| - ASSERT_TRUE(manager.Init(NULL));
|
| -
|
| - Time added_time = Time::Now();
|
| - GURL url(kURL1);
|
| -
|
| - // We have to have the URL in the URL and visit databases for this test to
|
| - // work.
|
| - URLRow url_row(url);
|
| - url_row.set_title(UTF8ToUTF16("chocolate"));
|
| - URLID url_id = visit_db.AddURL(url_row);
|
| - ASSERT_TRUE(url_id);
|
| - VisitRow visit_row;
|
| - visit_row.url_id = url_id;
|
| - visit_row.visit_time = added_time;
|
| - visit_db.AddVisit(&visit_row, SOURCE_BROWSED);
|
| -
|
| - // Add a URL with no title or body, and say that it expired.
|
| - manager.AddPageURL(url, 0, 0, added_time);
|
| - TimeTicks expire_time = TimeTicks::Now() + TimeDelta::FromDays(1);
|
| - manager.FlushOldChangesForTime(expire_time);
|
| -
|
| - // Add the title. We should be able to query based on that. The title in the
|
| - // URL row we set above should not come into the picture.
|
| - manager.AddPageTitle(url, UTF8ToUTF16("Some unique title"));
|
| - Time first_time_searched;
|
| - QueryOptions options;
|
| - std::vector<TextDatabase::Match> results;
|
| - manager.GetTextMatches(UTF8ToUTF16("unique"), options,
|
| - &results, &first_time_searched);
|
| - EXPECT_EQ(1U, results.size());
|
| - manager.GetTextMatches(UTF8ToUTF16("chocolate"), options,
|
| - &results, &first_time_searched);
|
| - EXPECT_EQ(0U, results.size());
|
| -
|
| - // Now add the body, which should be queryable.
|
| - manager.AddPageContents(url, UTF8ToUTF16("Very awesome body"));
|
| - manager.GetTextMatches(UTF8ToUTF16("awesome"), options, &results, &first_time_searched);
|
| - EXPECT_EQ(1U, results.size());
|
| -
|
| - // Adding the body will actually copy the title from the URL table rather
|
| - // than the previously indexed row (we made them not match above). This isn't
|
| - // necessarily what we want, but it's how it's implemented, and we don't want
|
| - // to regress it.
|
| - manager.GetTextMatches(UTF8ToUTF16("chocolate"), options, &results, &first_time_searched);
|
| - EXPECT_EQ(1U, results.size());
|
| -}
|
| -
|
| -// Tests that changes get properly committed to disk.
|
| -TEST_F(TextDatabaseManagerTest, Writing) {
|
| - ASSERT_TRUE(Init());
|
| -
|
| - QueryOptions options;
|
| - std::vector<TextDatabase::Match> results;
|
| - Time first_time_searched;
|
| -
|
| - InMemDB visit_db;
|
| -
|
| - // Create the manager and write some stuff to it.
|
| - {
|
| - TextDatabaseManager manager(dir_, &visit_db, &visit_db);
|
| - ASSERT_TRUE(manager.Init(NULL));
|
| -
|
| - std::vector<Time> times;
|
| - AddAllPages(manager, &visit_db, ×);
|
| -
|
| - // We should have matched every page.
|
| - manager.GetTextMatches(UTF8ToUTF16("FOO"), options, &results, &first_time_searched);
|
| - EXPECT_EQ(6U, results.size());
|
| - }
|
| - results.clear();
|
| -
|
| - // Recreate the manager and make sure it finds the written stuff.
|
| - {
|
| - TextDatabaseManager manager(dir_, &visit_db, &visit_db);
|
| - ASSERT_TRUE(manager.Init(NULL));
|
| -
|
| - // We should have matched every page again.
|
| - manager.GetTextMatches(UTF8ToUTF16("FOO"), options,
|
| - &results, &first_time_searched);
|
| - EXPECT_EQ(6U, results.size());
|
| - }
|
| -}
|
| -
|
| -// Tests that changes get properly committed to disk, as in the Writing test
|
| -// above, but when there is a transaction around the adds.
|
| -TEST_F(TextDatabaseManagerTest, WritingTransaction) {
|
| - ASSERT_TRUE(Init());
|
| -
|
| - QueryOptions options;
|
| - std::vector<TextDatabase::Match> results;
|
| - Time first_time_searched;
|
| -
|
| - InMemDB visit_db;
|
| -
|
| - // Create the manager and write some stuff to it.
|
| - {
|
| - TextDatabaseManager manager(dir_, &visit_db, &visit_db);
|
| - ASSERT_TRUE(manager.Init(NULL));
|
| -
|
| - std::vector<Time> times;
|
| - manager.BeginTransaction();
|
| - AddAllPages(manager, &visit_db, ×);
|
| - // "Forget" to commit, it should be autocommittedd for us.
|
| -
|
| - // We should have matched every page.
|
| - manager.GetTextMatches(UTF8ToUTF16("FOO"), options,
|
| - &results, &first_time_searched);
|
| - EXPECT_EQ(6U, results.size());
|
| - }
|
| - results.clear();
|
| -
|
| - // Recreate the manager and make sure it finds the written stuff.
|
| - {
|
| - TextDatabaseManager manager(dir_, &visit_db, &visit_db);
|
| - ASSERT_TRUE(manager.Init(NULL));
|
| -
|
| - // We should have matched every page again.
|
| - manager.GetTextMatches(UTF8ToUTF16("FOO"), options,
|
| - &results, &first_time_searched);
|
| - EXPECT_EQ(6U, results.size());
|
| - }
|
| -}
|
| -
|
| -// Tests querying where the maximum number of items is met.
|
| -TEST_F(TextDatabaseManagerTest, QueryMax) {
|
| - ASSERT_TRUE(Init());
|
| - InMemDB visit_db;
|
| - TextDatabaseManager manager(dir_, &visit_db, &visit_db);
|
| - ASSERT_TRUE(manager.Init(NULL));
|
| -
|
| - std::vector<Time> times;
|
| - AddAllPages(manager, &visit_db, ×);
|
| -
|
| - string16 foo = UTF8ToUTF16("FOO");
|
| -
|
| - QueryOptions options;
|
| - options.begin_time = times[0] - TimeDelta::FromDays(100);
|
| - options.end_time = times[times.size() - 1] + TimeDelta::FromDays(100);
|
| - options.max_count = 2;
|
| - std::vector<TextDatabase::Match> results;
|
| - Time first_time_searched;
|
| - manager.GetTextMatches(foo, options, &results, &first_time_searched);
|
| -
|
| - // We should have gotten the last two pages as results (the first page is
|
| - // also the last).
|
| - EXPECT_EQ(2U, results.size());
|
| - EXPECT_TRUE(first_time_searched <= times[4]);
|
| - EXPECT_TRUE(ResultsHaveURL(results, kURL5));
|
| - EXPECT_TRUE(ResultsHaveURL(results, kURL1));
|
| -
|
| - // Asking for 4 pages, the first one should be in another DB.
|
| - options.max_count = 4;
|
| - manager.GetTextMatches(foo, options, &results, &first_time_searched);
|
| -
|
| - EXPECT_EQ(4U, results.size());
|
| - EXPECT_TRUE(first_time_searched <= times[4]);
|
| - EXPECT_TRUE(ResultsHaveURL(results, kURL3));
|
| - EXPECT_TRUE(ResultsHaveURL(results, kURL4));
|
| - EXPECT_TRUE(ResultsHaveURL(results, kURL5));
|
| - EXPECT_TRUE(ResultsHaveURL(results, kURL1));
|
| -}
|
| -
|
| -// Tests querying backwards in time in chunks.
|
| -TEST_F(TextDatabaseManagerTest, QueryBackwards) {
|
| - ASSERT_TRUE(Init());
|
| - InMemDB visit_db;
|
| - TextDatabaseManager manager(dir_, &visit_db, &visit_db);
|
| - ASSERT_TRUE(manager.Init(NULL));
|
| -
|
| - std::vector<Time> times;
|
| - AddAllPages(manager, &visit_db, ×);
|
| -
|
| - string16 foo = UTF8ToUTF16("FOO");
|
| -
|
| - // First do a query for all time, but with a max of 2. This will give us the
|
| - // last two results and will tell us where to start searching when we want
|
| - // to go back in time.
|
| - QueryOptions options;
|
| - options.begin_time = times[0] - TimeDelta::FromDays(100);
|
| - options.end_time = times[times.size() - 1] + TimeDelta::FromDays(100);
|
| - options.max_count = 2;
|
| - std::vector<TextDatabase::Match> results;
|
| - Time first_time_searched;
|
| - manager.GetTextMatches(foo, options, &results, &first_time_searched);
|
| -
|
| - // Check that we got the last two results.
|
| - EXPECT_EQ(2U, results.size());
|
| - EXPECT_TRUE(first_time_searched <= times[4]);
|
| - EXPECT_TRUE(ResultsHaveURL(results, kURL5));
|
| - EXPECT_TRUE(ResultsHaveURL(results, kURL1));
|
| -
|
| - // Query the previous two URLs and make sure we got the correct ones.
|
| - options.end_time = first_time_searched;
|
| - manager.GetTextMatches(foo, options, &results, &first_time_searched);
|
| - EXPECT_EQ(2U, results.size());
|
| - EXPECT_TRUE(first_time_searched <= times[2]);
|
| - EXPECT_TRUE(ResultsHaveURL(results, kURL3));
|
| - EXPECT_TRUE(ResultsHaveURL(results, kURL4));
|
| -
|
| - // Query the previous two URLs...
|
| - options.end_time = first_time_searched;
|
| - manager.GetTextMatches(foo, options, &results, &first_time_searched);
|
| - EXPECT_EQ(2U, results.size());
|
| - EXPECT_TRUE(first_time_searched <= times[0]);
|
| - EXPECT_TRUE(ResultsHaveURL(results, kURL2));
|
| - EXPECT_TRUE(ResultsHaveURL(results, kURL1));
|
| -
|
| - // Try to query some more, there should be no results.
|
| - options.end_time = first_time_searched;
|
| - manager.GetTextMatches(foo, options, &results, &first_time_searched);
|
| - EXPECT_EQ(0U, results.size());
|
| -}
|
| -
|
| -// Tests deletion of uncommitted entries.
|
| -TEST_F(TextDatabaseManagerTest, DeleteUncommitted) {
|
| - ASSERT_TRUE(Init());
|
| - InMemDB visit_db;
|
| - TextDatabaseManager manager(dir_, &visit_db, &visit_db);
|
| - ASSERT_TRUE(manager.Init(NULL));
|
| -
|
| - manager.AddPageURL(GURL(kURL1), 0, 0, Time::FromInternalValue(1));
|
| - manager.AddPageURL(GURL(kURL2), 0, 0, Time::FromInternalValue(2));
|
| - manager.AddPageURL(GURL(kURL3), 0, 0, Time::FromInternalValue(3));
|
| - manager.AddPageURL(GURL(kURL4), 0, 0, Time::FromInternalValue(4));
|
| - manager.AddPageURL(GURL(kURL5), 0, 0, Time::FromInternalValue(5));
|
| -
|
| - EXPECT_EQ(5u, manager.GetUncommittedEntryCountForTest());
|
| -
|
| - // Should delete the first two entries.
|
| - manager.DeleteFromUncommitted(std::set<GURL>(),
|
| - Time::FromInternalValue(1),
|
| - Time::FromInternalValue(3));
|
| -
|
| - EXPECT_EQ(3u, manager.GetUncommittedEntryCountForTest());
|
| -
|
| - // Should delete the third entry.
|
| - {
|
| - std::set<GURL> urls;
|
| - urls.insert(GURL(kURL3));
|
| - manager.DeleteFromUncommitted(urls, Time(), Time());
|
| - }
|
| -
|
| - EXPECT_EQ(2u, manager.GetUncommittedEntryCountForTest());
|
| -}
|
| -
|
| -// Tests deletion of uncommitted entries by time.
|
| -TEST_F(TextDatabaseManagerTest, DeleteUncommittedForTimes) {
|
| - ASSERT_TRUE(Init());
|
| - InMemDB visit_db;
|
| - TextDatabaseManager manager(dir_, &visit_db, &visit_db);
|
| - ASSERT_TRUE(manager.Init(NULL));
|
| -
|
| - manager.AddPageURL(GURL(kURL1), 0, 0, Time::FromInternalValue(2));
|
| - manager.AddPageURL(GURL(kURL2), 0, 0, Time::FromInternalValue(3));
|
| - manager.AddPageURL(GURL(kURL3), 0, 0, Time::FromInternalValue(4));
|
| - manager.AddPageURL(GURL(kURL4), 0, 0, Time::FromInternalValue(5));
|
| - manager.AddPageURL(GURL(kURL5), 0, 0, Time::FromInternalValue(6));
|
| -
|
| - EXPECT_EQ(5u, manager.GetUncommittedEntryCountForTest());
|
| -
|
| - std::vector<base::Time> times;
|
| - times.push_back(Time::FromInternalValue(9));
|
| - times.push_back(Time::FromInternalValue(7));
|
| - times.push_back(Time::FromInternalValue(5));
|
| - times.push_back(Time::FromInternalValue(5));
|
| - times.push_back(Time::FromInternalValue(3));
|
| - times.push_back(Time::FromInternalValue(1));
|
| - manager.DeleteFromUncommittedForTimes(times);
|
| -
|
| - EXPECT_EQ(3u, manager.GetUncommittedEntryCountForTest());
|
| -}
|
| -
|
| -} // namespace history
|
|
|