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

Unified Diff: chrome/browser/autocomplete/history_quick_provider_unittest.cc

Issue 9317011: Fine-tune HQP Candidate Result Scoring (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src/
Patch Set: '' Created 8 years, 11 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 side-by-side diff with in-line comments
Download patch
Index: chrome/browser/autocomplete/history_quick_provider_unittest.cc
===================================================================
--- chrome/browser/autocomplete/history_quick_provider_unittest.cc (revision 120243)
+++ chrome/browser/autocomplete/history_quick_provider_unittest.cc (working copy)
@@ -45,9 +45,9 @@
{"http://news.google.com/", "Google News", 1, 1, 0},
{"http://foo.com/", "Dir", 200, 100, 0},
{"http://foo.com/dir/", "Dir", 2, 1, 10},
- {"http://foo.com/dir/another/", "Dir", 5, 1, 0},
+ {"http://foo.com/dir/another/", "Dir", 5, 10, 0},
{"http://foo.com/dir/another/again/", "Dir", 5, 1, 0},
- {"http://foo.com/dir/another/again/myfile.html", "File", 10, 2, 0},
+ {"http://foo.com/dir/another/again/myfile.html", "File", 3, 2, 0},
{"http://visitedest.com/y/a", "VA", 10, 1, 20},
{"http://visitedest.com/y/b", "VB", 9, 1, 20},
{"http://visitedest.com/x/c", "VC", 8, 1, 20},
@@ -104,6 +104,8 @@
provider_ = NULL;
}
+ virtual void GetTestData(size_t* data_count, TestURLInfo** test_data);
+
// Fills test data into the history system.
void FillData();
@@ -112,7 +114,6 @@
// need to be in sorted order.
void RunTest(const string16 text,
std::vector<std::string> expected_urls,
- std::string expected_top_result,
bool can_inline_top_result,
string16 expected_fill_into_edit);
@@ -144,6 +145,14 @@
MessageLoop::current()->Quit();
}
+void HistoryQuickProviderTest::GetTestData(size_t* data_count,
+ TestURLInfo** test_data) {
+ DCHECK(data_count);
+ DCHECK(test_data);
+ *data_count = arraysize(quick_test_db);
+ *test_data = &quick_test_db[0];
+}
+
void HistoryQuickProviderTest::FillData() {
history::URLDatabase* db = history_service_->InMemoryDatabase();
ASSERT_TRUE(db != NULL);
@@ -153,8 +162,11 @@
PrefService* prefs = profile_->GetPrefs();
std::string languages(prefs->GetString(prefs::kAcceptLanguages));
index->Init(db, languages);
- for (size_t i = 0; i < arraysize(quick_test_db); ++i) {
- const TestURLInfo& cur = quick_test_db[i];
+ size_t data_count = 0;
+ TestURLInfo* test_data = NULL;
+ GetTestData(&data_count, &test_data);
+ for (size_t i = 0; i < data_count; ++i) {
+ const TestURLInfo& cur(test_data[i]);
const GURL current_url(cur.url);
Time visit_time = Time::Now() - TimeDelta::FromDays(cur.days_from_now);
@@ -186,12 +198,9 @@
void HistoryQuickProviderTest::RunTest(const string16 text,
std::vector<std::string> expected_urls,
- std::string expected_top_result,
bool can_inline_top_result,
string16 expected_fill_into_edit) {
SCOPED_TRACE(text); // Minimal hint to query being run.
- std::sort(expected_urls.begin(), expected_urls.end());
-
MessageLoop::current()->RunAllPending();
AutocompleteInput input(text, string16(), false, false, true,
AutocompleteInput::ALL_MATCHES);
@@ -218,41 +227,53 @@
// We always expect to get at least one result.
ASSERT_FALSE(ac_matches_.empty());
- // See if we got the expected top scorer.
- std::partial_sort(ac_matches_.begin(), ac_matches_.begin() + 1,
- ac_matches_.end(), AutocompleteMatch::MoreRelevant);
- EXPECT_EQ(expected_top_result, ac_matches_[0].destination_url.spec())
- << "Unexpected top result '" << ac_matches_[0].destination_url.spec()
- << "'.";
- // If the top scorer is inline-able then validate the autocomplete offset.
- EXPECT_EQ(can_inline_top_result ? text.size() : string16::npos,
- ac_matches_[0].inline_autocomplete_offset);
- // And make sure we get the expected fill_into_edit.
- EXPECT_EQ(expected_fill_into_edit, ac_matches_[0].fill_into_edit);
+ // Verify that we got the results in the order expected.
+ int i = 0;
+ std::vector<std::string>::const_iterator expected = expected_urls.begin();
+ for (ACMatches::const_iterator actual = ac_matches_.begin();
+ actual != ac_matches_.end() && expected != expected_urls.end();
+ ++actual, ++expected, ++i) {
+ EXPECT_EQ(*expected, actual->destination_url.spec())
+ << "For result #" << i << " we got '" << actual->destination_url.spec()
+ << "' but expected '" << *expected << "'.";
+ }
+
+ if (can_inline_top_result) {
+ // When the top scorer is inline-able make sure we get the expected
+ // fill_into_edit and autocomplete offset.
+ EXPECT_EQ(expected_fill_into_edit, ac_matches_[0].fill_into_edit)
+ << "fill_into_edit was: '" << ac_matches_[0].fill_into_edit
+ << "' but we expected '" << expected_fill_into_edit << "'.";
+ size_t text_pos = expected_fill_into_edit.find(text);
+ ASSERT_NE(string16::npos, text_pos);
+ EXPECT_EQ(text_pos + text.size(),
+ ac_matches_[0].inline_autocomplete_offset);
+ } else {
+ // When the top scorer is not inline-able autocomplete offset must be npos.
+ EXPECT_EQ(string16::npos, ac_matches_[0].inline_autocomplete_offset);
+ }
}
TEST_F(HistoryQuickProviderTest, SimpleSingleMatch) {
- std::string expected_url("http://slashdot.org/favorite_page.html");
std::vector<std::string> expected_urls;
- expected_urls.push_back(expected_url);
- RunTest(ASCIIToUTF16("slashdot"), expected_urls, expected_url, true,
+ expected_urls.push_back("http://slashdot.org/favorite_page.html");
+ RunTest(ASCIIToUTF16("slashdot"), expected_urls, true,
ASCIIToUTF16("slashdot.org/favorite_page.html"));
}
TEST_F(HistoryQuickProviderTest, MultiTermTitleMatch) {
- std::string expected_url(
+ std::vector<std::string> expected_urls;
+ expected_urls.push_back(
"http://cda.com/Dogs%20Cats%20Gorillas%20Sea%20Slugs%20and%20Mice");
- std::vector<std::string> expected_urls;
- expected_urls.push_back(expected_url);
- RunTest(ASCIIToUTF16("mice other animals"), expected_urls, expected_url,
- false, ASCIIToUTF16("cda.com/Dogs Cats Gorillas Sea Slugs and Mice"));
+ RunTest(ASCIIToUTF16("mice other animals"), expected_urls, false,
+ ASCIIToUTF16("cda.com/Dogs Cats Gorillas Sea Slugs and Mice"));
}
TEST_F(HistoryQuickProviderTest, NonWordLastCharacterMatch) {
std::string expected_url("http://slashdot.org/favorite_page.html");
std::vector<std::string> expected_urls;
expected_urls.push_back(expected_url);
- RunTest(ASCIIToUTF16("slashdot.org/"), expected_urls, expected_url, true,
+ RunTest(ASCIIToUTF16("slashdot.org/"), expected_urls, true,
ASCIIToUTF16("slashdot.org/favorite_page.html"));
}
@@ -263,9 +284,8 @@
// Scores high because of visit count.
expected_urls.push_back("http://foo.com/dir/another/");
// Scores high because of high visit count.
- expected_urls.push_back("http://foo.com/dir/another/again/myfile.html");
- RunTest(ASCIIToUTF16("foo"), expected_urls, "http://foo.com/", true,
- ASCIIToUTF16("foo.com"));
+ expected_urls.push_back("http://foo.com/dir/another/again/");
+ RunTest(ASCIIToUTF16("foo"), expected_urls, true, ASCIIToUTF16("foo.com"));
}
TEST_F(HistoryQuickProviderTest, StartRelativeMatch) {
@@ -273,8 +293,7 @@
expected_urls.push_back("http://xyzabcdefghijklmnopqrstuvw.com/a");
expected_urls.push_back("http://abcxyzdefghijklmnopqrstuvw.com/a");
expected_urls.push_back("http://abcdefxyzghijklmnopqrstuvw.com/a");
- RunTest(ASCIIToUTF16("xyz"), expected_urls,
- "http://xyzabcdefghijklmnopqrstuvw.com/a", true,
+ RunTest(ASCIIToUTF16("xyz"), expected_urls, true,
ASCIIToUTF16("xyzabcdefghijklmnopqrstuvw.com/a"));
}
@@ -282,8 +301,8 @@
std::vector<std::string> expected_urls;
expected_urls.push_back("http://foo.com/");
expected_urls.push_back("http://slashdot.org/favorite_page.html");
- expected_urls.push_back("http://typeredest.com/y/a");
- RunTest(ASCIIToUTF16("http://"), expected_urls, "http://foo.com/", true,
+ expected_urls.push_back("http://foo.com/dir/another/");
+ RunTest(ASCIIToUTF16("http://"), expected_urls, true,
ASCIIToUTF16("http://foo.com"));
}
@@ -292,8 +311,7 @@
expected_urls.push_back("http://visitedest.com/y/a");
expected_urls.push_back("http://visitedest.com/y/b");
expected_urls.push_back("http://visitedest.com/x/c");
- RunTest(ASCIIToUTF16("visitedest"), expected_urls,
- "http://visitedest.com/y/a", true,
+ RunTest(ASCIIToUTF16("visitedest"), expected_urls, true,
ASCIIToUTF16("visitedest.com/y/a"));
}
@@ -302,8 +320,7 @@
expected_urls.push_back("http://typeredest.com/y/a");
expected_urls.push_back("http://typeredest.com/y/b");
expected_urls.push_back("http://typeredest.com/x/c");
- RunTest(ASCIIToUTF16("typeredest"), expected_urls,
- "http://typeredest.com/y/a", true,
+ RunTest(ASCIIToUTF16("typeredest"), expected_urls, true,
ASCIIToUTF16("typeredest.com/y/a"));
}
@@ -312,8 +329,7 @@
expected_urls.push_back("http://daysagoest.com/y/a");
expected_urls.push_back("http://daysagoest.com/y/b");
expected_urls.push_back("http://daysagoest.com/x/c");
- RunTest(ASCIIToUTF16("daysagoest"), expected_urls,
- "http://daysagoest.com/y/a", true,
+ RunTest(ASCIIToUTF16("daysagoest"), expected_urls, true,
ASCIIToUTF16("daysagoest.com/y/a"));
}
@@ -322,7 +338,7 @@
std::string url(
"http://cda.com/Dogs%20Cats%20Gorillas%20Sea%20Slugs%20and%20Mice");
expected_urls.push_back(url);
- RunTest(ASCIIToUTF16("ice"), expected_urls, url, false,
+ RunTest(ASCIIToUTF16("ice"), expected_urls, false,
ASCIIToUTF16("cda.com/Dogs Cats Gorillas Sea Slugs and Mice"));
// Verify that the matches' ACMatchClassifications offsets are in range.
ACMatchClassifications content(ac_matches_[0].contents_class);
@@ -455,3 +471,72 @@
EXPECT_EQ(HistoryQuickProvider::CalculateRelevance(match, &next_score), 500);
EXPECT_EQ(next_score, 499);
}
+
+// HQPOrderingTest -------------------------------------------------------------
+
+TestURLInfo ordering_test_db[] = {
+ {"http://www.teamliquid.net/tlpd/korean/games/21648_bisu_vs_iris", "", 6, 3,
+ 256},
+ {"http://www.amazon.com/", "amazon.com: online shopping for electronics, "
+ "apparel, computers, books, dvds & more", 20, 20, 10},
+ {"http://www.teamliquid.net/forum/viewmessage.php?topic_id=52045&"
+ "currentpage=83", "google images", 6, 6, 0},
+ {"http://www.tempurpedic.com/", "tempur-pedic", 7, 7, 0},
+ {"http://www.teamfortress.com/", "", 5, 5, 6},
+ {"http://www.rottentomatoes.com/", "", 3, 3, 7},
+ {"http://music.google.com/music/listen?u=0#start_pl", "", 3, 3, 9},
+ {"https://www.emigrantdirect.com/", "high interest savings account, high "
+ "yield savings - emigrantdirect", 5, 5, 3},
+ {"http://store.steampowered.com/", "", 6, 6, 1},
+ {"http://techmeme.com/", "techmeme", 111, 110, 4},
+ {"http://www.teamliquid.net/tlpd", "team liquid progaming database", 15, 15,
+ 2},
+ {"http://store.steampowered.com/", "the steam summer camp sale", 6, 6, 1},
+ {"http://www.teamliquid.net/tlpd/korean/players", "tlpd - bw korean - player "
+ "index", 100, 45, 219},
+ {"http://slashdot.org/", "slashdot: news for nerds, stuff that matters", 3, 3,
+ 6},
+ {"http://translate.google.com/", "google translate", 3, 3, 0},
+ {"http://arstechnica.com/", "ars technica", 3, 3, 3},
+ {"http://www.rottentomatoes.com/", "movies | movie trailers | reviews - "
+ "rotten tomatoes", 3, 3, 7},
+ {"http://www.teamliquid.net/", "team liquid - starcraft 2 and brood war pro "
+ "gaming news", 26, 25, 3},
+ {"http://metaleater.com/", "metaleater", 4, 3, 8},
+ {"http://half.com/", "half.com: textbooks , books , music , movies , games , "
+ "video games", 4, 4, 6},
+ {"http://teamliquid.net/", "team liquid - starcraft 2 and brood war pro "
+ "gaming news", 8, 5, 9},
+};
+
+class HQPOrderingTest : public HistoryQuickProviderTest {
+ protected:
+ virtual void GetTestData(size_t* data_count,
+ TestURLInfo** test_data) OVERRIDE;
+};
+
+void HQPOrderingTest::GetTestData(size_t* data_count, TestURLInfo** test_data) {
+ DCHECK(data_count);
+ DCHECK(test_data);
+ *data_count = arraysize(ordering_test_db);
+ *test_data = &ordering_test_db[0];
+}
+
+TEST_F(HQPOrderingTest, TEMatch) {
+ std::vector<std::string> expected_urls;
+ expected_urls.push_back("http://techmeme.com/");
+ expected_urls.push_back("http://www.teamliquid.net/");
+ expected_urls.push_back("http://www.teamliquid.net/tlpd");
+ RunTest(ASCIIToUTF16("te"), expected_urls, true,
+ ASCIIToUTF16("techmeme.com"));
+}
+
+TEST_F(HQPOrderingTest, TEAMatch) {
+ std::vector<std::string> expected_urls;
+ expected_urls.push_back("http://www.teamliquid.net/");
+ expected_urls.push_back("http://www.teamliquid.net/tlpd");
+ expected_urls.push_back("http://www.teamliquid.net/tlpd/korean/players");
+ RunTest(ASCIIToUTF16("tea"), expected_urls, true,
+ ASCIIToUTF16("www.teamliquid.net"));
+}
+

Powered by Google App Engine
This is Rietveld 408576698