summaryrefslogtreecommitdiffstats
path: root/chrome/browser/autocomplete/network_action_predictor_unittest.cc
blob: b49bd92957a4514a8e1d3a80a43adb515220219b (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
// 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 "chrome/browser/autocomplete/network_action_predictor.h"

#include "base/message_loop.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/url_database.h"
#include "chrome/test/base/testing_profile.h"
#include "content/browser/browser_thread.h"
#include "testing/gtest/include/gtest/gtest.h"

typedef testing::Test NetworkActionPredictorTest;

TEST_F(NetworkActionPredictorTest, RecommendAction) {
  MessageLoop loop(MessageLoop::TYPE_DEFAULT);
  BrowserThread ui_thread(BrowserThread::UI, &loop);
  BrowserThread file_thread(BrowserThread::FILE, &loop);

  TestingProfile profile;
  profile.CreateHistoryService(true, false);
  profile.BlockUntilHistoryProcessesPendingRequests();

  NetworkActionPredictor predictor(&profile);

  HistoryService* history = profile.GetHistoryService(Profile::EXPLICIT_ACCESS);
  CHECK(history);
  history::URLDatabase* url_db = history->InMemoryDatabase();
  CHECK(url_db);

  struct TestUrlInfo {
    GURL url;
    string16 title;
    int typed_count;
    int days_from_now;
    string16 user_text;
    NetworkActionPredictor::Action expected_action;
  } test_url_db[] = {
    { GURL("http://www.testsite.com/a.html"),
      ASCIIToUTF16("Test - site - just a test"), 1, 1,
      ASCIIToUTF16("just"),
      NetworkActionPredictor::ACTION_PRERENDER },
    { GURL("http://www.testsite.com/b.html"),
      ASCIIToUTF16("Test - site - just a test"), 0, 1,
      ASCIIToUTF16("just"),
      NetworkActionPredictor::ACTION_PRERENDER },
    { GURL("http://www.testsite.com/c.html"),
      ASCIIToUTF16("Test - site - just a test"), 1, 5,
      ASCIIToUTF16("just"),
      NetworkActionPredictor::ACTION_PRECONNECT },
    { GURL("http://www.testsite.com/d.html"),
      ASCIIToUTF16("Test - site - just a test"), 2, 5,
      ASCIIToUTF16("just"),
      NetworkActionPredictor::ACTION_PRERENDER },
    { GURL("http://www.testsite.com/e.html"),
      ASCIIToUTF16("Test - site - just a test"), 1, 8,
      ASCIIToUTF16("just"),
      NetworkActionPredictor::ACTION_PRECONNECT },
    { GURL("http://www.testsite.com/f.html"),
      ASCIIToUTF16("Test - site - just a test"), 4, 8,
      ASCIIToUTF16("just"),
      NetworkActionPredictor::ACTION_PRERENDER },
    { GURL("http://www.testsite.com/g.html"),
      ASCIIToUTF16("Test - site - just a test"), 1, 12,
      ASCIIToUTF16("just a"),
      NetworkActionPredictor::ACTION_NONE },
    { GURL("http://www.testsite.com/h.html"),
      ASCIIToUTF16("Test - site - just a test"), 2, 21,
      ASCIIToUTF16("just a test"),
      NetworkActionPredictor::ACTION_NONE },
    { GURL("http://www.testsite.com/i.html"),
      ASCIIToUTF16("Test - site - just a test"), 3, 28,
      ASCIIToUTF16("just a test"),
      NetworkActionPredictor::ACTION_NONE }
  };

  for (size_t i = 0; i < ARRAYSIZE_UNSAFE(test_url_db); ++i) {
    const base::Time visit_time =
        base::Time::Now() - base::TimeDelta::FromDays(
            test_url_db[i].days_from_now);

    history::URLRow row(test_url_db[i].url);
    row.set_title(test_url_db[i].title);
    row.set_typed_count(test_url_db[i].typed_count);
    row.set_last_visit(visit_time);

    CHECK(url_db->AddURL(row));
  }

  AutocompleteMatch match;

  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;
  }
}