| Index: chrome/browser/autocomplete/network_action_predictor_unittest.cc
|
| diff --git a/chrome/browser/autocomplete/network_action_predictor_unittest.cc b/chrome/browser/autocomplete/network_action_predictor_unittest.cc
|
| deleted file mode 100644
|
| index e5ce30b94d64eb7166753271d2cd317d5b5d9ae2..0000000000000000000000000000000000000000
|
| --- a/chrome/browser/autocomplete/network_action_predictor_unittest.cc
|
| +++ /dev/null
|
| @@ -1,364 +0,0 @@
|
| -// Copyright (c) 2012 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 "chrome/browser/autocomplete/network_action_predictor.h"
|
| -
|
| -#include "base/command_line.h"
|
| -#include "base/memory/ref_counted.h"
|
| -#include "base/message_loop.h"
|
| -#include "base/string_util.h"
|
| -#include "base/time.h"
|
| -#include "base/utf_string_conversions.h"
|
| -#include "chrome/browser/autocomplete/autocomplete_match.h"
|
| -#include "chrome/browser/history/history.h"
|
| -#include "chrome/browser/history/in_memory_database.h"
|
| -#include "chrome/browser/history/url_database.h"
|
| -#include "chrome/browser/prerender/prerender_field_trial.h"
|
| -#include "chrome/common/chrome_switches.h"
|
| -#include "chrome/common/guid.h"
|
| -#include "chrome/test/base/testing_profile.h"
|
| -#include "content/test/test_browser_thread.h"
|
| -#include "testing/gtest/include/gtest/gtest.h"
|
| -
|
| -using content::BrowserThread;
|
| -
|
| -namespace {
|
| -
|
| -struct TestUrlInfo {
|
| - GURL url;
|
| - string16 title;
|
| - int days_from_now;
|
| - string16 user_text;
|
| - int number_of_hits;
|
| - int number_of_misses;
|
| - NetworkActionPredictor::Action expected_action;
|
| -} test_url_db[] = {
|
| - { GURL("http://www.testsite.com/a.html"),
|
| - ASCIIToUTF16("Test - site - just a test"), 1,
|
| - ASCIIToUTF16("j"), 5, 0,
|
| - NetworkActionPredictor::ACTION_PRERENDER },
|
| - { GURL("http://www.testsite.com/b.html"),
|
| - ASCIIToUTF16("Test - site - just a test"), 1,
|
| - ASCIIToUTF16("ju"), 3, 0,
|
| - NetworkActionPredictor::ACTION_PRERENDER },
|
| - { GURL("http://www.testsite.com/c.html"),
|
| - ASCIIToUTF16("Test - site - just a test"), 5,
|
| - ASCIIToUTF16("just"), 3, 1,
|
| - NetworkActionPredictor::ACTION_PRECONNECT },
|
| - { GURL("http://www.testsite.com/d.html"),
|
| - ASCIIToUTF16("Test - site - just a test"), 5,
|
| - ASCIIToUTF16("just"), 3, 0,
|
| - NetworkActionPredictor::ACTION_PRERENDER },
|
| - { GURL("http://www.testsite.com/e.html"),
|
| - ASCIIToUTF16("Test - site - just a test"), 8,
|
| - ASCIIToUTF16("just"), 3, 1,
|
| - NetworkActionPredictor::ACTION_PRECONNECT },
|
| - { GURL("http://www.testsite.com/f.html"),
|
| - ASCIIToUTF16("Test - site - just a test"), 8,
|
| - ASCIIToUTF16("just"), 3, 0,
|
| - NetworkActionPredictor::ACTION_PRERENDER },
|
| - { GURL("http://www.testsite.com/g.html"),
|
| - ASCIIToUTF16("Test - site - just a test"), 12,
|
| - ASCIIToUTF16(""), 5, 0,
|
| - NetworkActionPredictor::ACTION_NONE },
|
| - { GURL("http://www.testsite.com/h.html"),
|
| - ASCIIToUTF16("Test - site - just a test"), 21,
|
| - ASCIIToUTF16("just a test"), 2, 0,
|
| - NetworkActionPredictor::ACTION_NONE },
|
| - { GURL("http://www.testsite.com/i.html"),
|
| - ASCIIToUTF16("Test - site - just a test"), 28,
|
| - ASCIIToUTF16("just a test"), 2, 0,
|
| - NetworkActionPredictor::ACTION_NONE }
|
| -};
|
| -
|
| -} // end namespace
|
| -
|
| -class NetworkActionPredictorTest : public testing::Test {
|
| - public:
|
| - NetworkActionPredictorTest()
|
| - : loop_(MessageLoop::TYPE_DEFAULT),
|
| - ui_thread_(BrowserThread::UI, &loop_),
|
| - db_thread_(BrowserThread::DB, &loop_),
|
| - file_thread_(BrowserThread::FILE, &loop_),
|
| - predictor_(new NetworkActionPredictor(&profile_)) {
|
| - }
|
| -
|
| - void SetUp() {
|
| - CommandLine::ForCurrentProcess()->AppendSwitchASCII(
|
| - switches::kPrerenderFromOmnibox,
|
| - switches::kPrerenderFromOmniboxSwitchValueEnabled);
|
| -
|
| - profile_.CreateHistoryService(true, false);
|
| - profile_.BlockUntilHistoryProcessesPendingRequests();
|
| -
|
| - ASSERT_TRUE(predictor_->initialized_);
|
| - ASSERT_TRUE(db_cache()->empty());
|
| - ASSERT_TRUE(db_id_cache()->empty());
|
| - }
|
| -
|
| - void TearDown() {
|
| - profile_.DestroyHistoryService();
|
| - predictor_->Shutdown();
|
| - }
|
| -
|
| - protected:
|
| - typedef NetworkActionPredictor::DBCacheKey DBCacheKey;
|
| - typedef NetworkActionPredictor::DBCacheValue DBCacheValue;
|
| - typedef NetworkActionPredictor::DBCacheMap DBCacheMap;
|
| - typedef NetworkActionPredictor::DBIdCacheMap DBIdCacheMap;
|
| -
|
| - void AddAllRowsToHistory() {
|
| - for (size_t i = 0; i < arraysize(test_url_db); ++i)
|
| - ASSERT_TRUE(AddRowToHistory(test_url_db[i]));
|
| - }
|
| -
|
| - history::URLID AddRowToHistory(const TestUrlInfo& test_row) {
|
| - HistoryService* history =
|
| - profile_.GetHistoryService(Profile::EXPLICIT_ACCESS);
|
| - CHECK(history);
|
| - history::URLDatabase* url_db = history->InMemoryDatabase();
|
| - CHECK(url_db);
|
| -
|
| - const base::Time visit_time =
|
| - base::Time::Now() - base::TimeDelta::FromDays(
|
| - test_row.days_from_now);
|
| -
|
| - history::URLRow row(test_row.url);
|
| - row.set_title(test_row.title);
|
| - row.set_last_visit(visit_time);
|
| -
|
| - return url_db->AddURL(row);
|
| - }
|
| -
|
| - NetworkActionPredictorDatabase::Row CreateRowFromTestUrlInfo(
|
| - const TestUrlInfo& test_row) const {
|
| - NetworkActionPredictorDatabase::Row row;
|
| - row.id = guid::GenerateGUID();
|
| - row.user_text = test_row.user_text;
|
| - row.url = test_row.url;
|
| - row.number_of_hits = test_row.number_of_hits;
|
| - row.number_of_misses = test_row.number_of_misses;
|
| - return row;
|
| - }
|
| -
|
| - void AddAllRows() {
|
| - for (size_t i = 0; i < arraysize(test_url_db); ++i)
|
| - AddRow(test_url_db[i]);
|
| - }
|
| -
|
| - std::string AddRow(const TestUrlInfo& test_row) {
|
| - NetworkActionPredictor::DBCacheKey key = { test_row.user_text,
|
| - test_row.url };
|
| - NetworkActionPredictorDatabase::Row row =
|
| - CreateRowFromTestUrlInfo(test_row);
|
| - predictor_->AddRow(key, row);
|
| -
|
| - return row.id;
|
| - }
|
| -
|
| - void UpdateRow(NetworkActionPredictor::DBCacheKey key,
|
| - const NetworkActionPredictorDatabase::Row& row) {
|
| - NetworkActionPredictor::DBCacheMap::iterator it =
|
| - db_cache()->find(key);
|
| - ASSERT_TRUE(it != db_cache()->end());
|
| -
|
| - predictor_->UpdateRow(it, row);
|
| - }
|
| -
|
| - void DeleteAllRows() {
|
| - predictor_->DeleteAllRows();
|
| - }
|
| -
|
| - void DeleteRowsWithURLs(const history::URLRows& rows) {
|
| - predictor_->DeleteRowsWithURLs(rows);
|
| - }
|
| -
|
| - void DeleteOldIdsFromCaches(
|
| - std::vector<NetworkActionPredictorDatabase::Row::Id>* id_list) {
|
| - HistoryService* history_service =
|
| - profile_.GetHistoryService(Profile::EXPLICIT_ACCESS);
|
| - ASSERT_TRUE(history_service);
|
| -
|
| - history::URLDatabase* url_db = history_service->InMemoryDatabase();
|
| - ASSERT_TRUE(url_db);
|
| -
|
| - predictor_->DeleteOldIdsFromCaches(url_db, id_list);
|
| - }
|
| -
|
| - NetworkActionPredictor* predictor() { return predictor_.get(); }
|
| -
|
| - DBCacheMap* db_cache() { return &predictor_->db_cache_; }
|
| - DBIdCacheMap* db_id_cache() { return &predictor_->db_id_cache_; }
|
| -
|
| - static int maximum_days_to_keep_entry() {
|
| - return NetworkActionPredictor::kMaximumDaysToKeepEntry;
|
| - }
|
| -
|
| - private:
|
| - MessageLoop loop_;
|
| - content::TestBrowserThread ui_thread_;
|
| - content::TestBrowserThread db_thread_;
|
| - content::TestBrowserThread file_thread_;
|
| - TestingProfile profile_;
|
| - scoped_ptr<NetworkActionPredictor> predictor_;
|
| -};
|
| -
|
| -
|
| -TEST_F(NetworkActionPredictorTest, AddRow) {
|
| - // Add a test entry to the predictor.
|
| - std::string guid = AddRow(test_url_db[0]);
|
| -
|
| - // Get the data back out of the cache.
|
| - const DBCacheKey key = { test_url_db[0].user_text, test_url_db[0].url };
|
| - DBCacheMap::const_iterator it = db_cache()->find(key);
|
| - EXPECT_TRUE(it != db_cache()->end());
|
| -
|
| - const DBCacheValue value = { test_url_db[0].number_of_hits,
|
| - test_url_db[0].number_of_misses };
|
| - EXPECT_EQ(value.number_of_hits, it->second.number_of_hits);
|
| - EXPECT_EQ(value.number_of_misses, it->second.number_of_misses);
|
| -
|
| - DBIdCacheMap::const_iterator id_it = db_id_cache()->find(key);
|
| - EXPECT_TRUE(id_it != db_id_cache()->end());
|
| - EXPECT_EQ(guid, id_it->second);
|
| -}
|
| -
|
| -TEST_F(NetworkActionPredictorTest, UpdateRow) {
|
| - ASSERT_NO_FATAL_FAILURE(AddAllRows());
|
| -
|
| - EXPECT_EQ(arraysize(test_url_db), db_cache()->size());
|
| - EXPECT_EQ(arraysize(test_url_db), db_id_cache()->size());
|
| -
|
| - // Get the data back out of the cache.
|
| - const DBCacheKey key = { test_url_db[0].user_text, test_url_db[0].url };
|
| - DBCacheMap::const_iterator it = db_cache()->find(key);
|
| - EXPECT_TRUE(it != db_cache()->end());
|
| -
|
| - DBIdCacheMap::const_iterator id_it = db_id_cache()->find(key);
|
| - EXPECT_TRUE(id_it != db_id_cache()->end());
|
| -
|
| - NetworkActionPredictorDatabase::Row update_row;
|
| - update_row.id = id_it->second;
|
| - update_row.user_text = key.user_text;
|
| - update_row.url = key.url;
|
| - update_row.number_of_hits = it->second.number_of_hits + 1;
|
| - update_row.number_of_misses = it->second.number_of_misses + 2;
|
| -
|
| - UpdateRow(key, update_row);
|
| -
|
| - // Get the updated version.
|
| - DBCacheMap::const_iterator update_it = db_cache()->find(key);
|
| - EXPECT_TRUE(update_it != db_cache()->end());
|
| -
|
| - EXPECT_EQ(update_row.number_of_hits, update_it->second.number_of_hits);
|
| - EXPECT_EQ(update_row.number_of_misses, update_it->second.number_of_misses);
|
| -
|
| - DBIdCacheMap::const_iterator update_id_it = db_id_cache()->find(key);
|
| - EXPECT_TRUE(update_id_it != db_id_cache()->end());
|
| -
|
| - EXPECT_EQ(id_it->second, update_id_it->second);
|
| -}
|
| -
|
| -TEST_F(NetworkActionPredictorTest, DeleteAllRows) {
|
| - ASSERT_NO_FATAL_FAILURE(AddAllRows());
|
| -
|
| - EXPECT_EQ(arraysize(test_url_db), db_cache()->size());
|
| - EXPECT_EQ(arraysize(test_url_db), db_id_cache()->size());
|
| -
|
| - DeleteAllRows();
|
| -
|
| - EXPECT_TRUE(db_cache()->empty());
|
| - EXPECT_TRUE(db_id_cache()->empty());
|
| -}
|
| -
|
| -TEST_F(NetworkActionPredictorTest, DeleteRowsWithURLs) {
|
| - ASSERT_NO_FATAL_FAILURE(AddAllRows());
|
| -
|
| - EXPECT_EQ(arraysize(test_url_db), db_cache()->size());
|
| - EXPECT_EQ(arraysize(test_url_db), db_id_cache()->size());
|
| -
|
| - history::URLRows rows;
|
| - for (size_t i = 0; i < 2; ++i)
|
| - rows.push_back(history::URLRow(test_url_db[i].url));
|
| -
|
| - DeleteRowsWithURLs(rows);
|
| -
|
| - EXPECT_EQ(arraysize(test_url_db) - 2, db_cache()->size());
|
| - EXPECT_EQ(arraysize(test_url_db) - 2, db_id_cache()->size());
|
| -
|
| - for (size_t i = 0; i < arraysize(test_url_db); ++i) {
|
| - DBCacheKey key = { test_url_db[i].user_text, test_url_db[i].url };
|
| -
|
| - bool deleted = (i < 2);
|
| - EXPECT_EQ(deleted, db_cache()->find(key) == db_cache()->end());
|
| - EXPECT_EQ(deleted, db_id_cache()->find(key) == db_id_cache()->end());
|
| - }
|
| -}
|
| -
|
| -TEST_F(NetworkActionPredictorTest, DeleteOldIdsFromCaches) {
|
| - std::vector<NetworkActionPredictorDatabase::Row::Id> expected;
|
| - std::vector<NetworkActionPredictorDatabase::Row::Id> all_ids;
|
| -
|
| - for (size_t i = 0; i < arraysize(test_url_db); ++i) {
|
| - std::string row_id = AddRow(test_url_db[i]);
|
| - all_ids.push_back(row_id);
|
| -
|
| - bool exclude_url = StartsWithASCII(test_url_db[i].url.path(), "/d", true) ||
|
| - (test_url_db[i].days_from_now > maximum_days_to_keep_entry());
|
| -
|
| - if (exclude_url)
|
| - expected.push_back(row_id);
|
| - else
|
| - ASSERT_TRUE(AddRowToHistory(test_url_db[i]));
|
| - }
|
| -
|
| - std::vector<NetworkActionPredictorDatabase::Row::Id> id_list;
|
| - DeleteOldIdsFromCaches(&id_list);
|
| - EXPECT_EQ(expected.size(), id_list.size());
|
| - EXPECT_EQ(all_ids.size() - expected.size(), db_cache()->size());
|
| - EXPECT_EQ(all_ids.size() - expected.size(), db_id_cache()->size());
|
| -
|
| - for (std::vector<NetworkActionPredictorDatabase::Row::Id>::iterator it =
|
| - all_ids.begin();
|
| - it != all_ids.end(); ++it) {
|
| - bool in_expected =
|
| - (std::find(expected.begin(), expected.end(), *it) != expected.end());
|
| - bool in_list =
|
| - (std::find(id_list.begin(), id_list.end(), *it) != id_list.end());
|
| - EXPECT_EQ(in_expected, in_list);
|
| - }
|
| -}
|
| -
|
| -TEST_F(NetworkActionPredictorTest, RecommendActionURL) {
|
| - ASSERT_NO_FATAL_FAILURE(AddAllRows());
|
| -
|
| - AutocompleteMatch match;
|
| - match.type = AutocompleteMatch::HISTORY_URL;
|
| -
|
| - for (size_t i = 0; i < ARRAYSIZE_UNSAFE(test_url_db); ++i) {
|
| - match.destination_url = GURL(test_url_db[i].url);
|
| - EXPECT_EQ(test_url_db[i].expected_action,
|
| - predictor()->RecommendAction(test_url_db[i].user_text, match))
|
| - << "Unexpected action for " << match.destination_url;
|
| - }
|
| -}
|
| -
|
| -TEST_F(NetworkActionPredictorTest, RecommendActionSearch) {
|
| - ASSERT_NO_FATAL_FAILURE(AddAllRows());
|
| -
|
| - AutocompleteMatch match;
|
| - match.type = AutocompleteMatch::SEARCH_WHAT_YOU_TYPED;
|
| -
|
| - for (size_t i = 0; i < arraysize(test_url_db); ++i) {
|
| - match.destination_url = GURL(test_url_db[i].url);
|
| - NetworkActionPredictor::Action expected_action =
|
| - (test_url_db[i].expected_action ==
|
| - NetworkActionPredictor::ACTION_PRERENDER) ?
|
| - NetworkActionPredictor::ACTION_PRECONNECT :
|
| - test_url_db[i].expected_action;
|
| - EXPECT_EQ(expected_action,
|
| - predictor()->RecommendAction(test_url_db[i].user_text, match))
|
| - << "Unexpected action for " << match.destination_url;
|
| - }
|
| -}
|
|
|