OLD | NEW |
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 "chrome/browser/autocomplete/bookmark_provider.h" | 5 #include "chrome/browser/autocomplete/bookmark_provider.h" |
6 | 6 |
7 #include <algorithm> | 7 #include <algorithm> |
8 #include <string> | 8 #include <string> |
9 #include <vector> | 9 #include <vector> |
10 | 10 |
11 #include "base/memory/ref_counted.h" | 11 #include "base/memory/ref_counted.h" |
12 #include "base/memory/scoped_ptr.h" | 12 #include "base/memory/scoped_ptr.h" |
13 #include "base/strings/string16.h" | 13 #include "base/strings/string16.h" |
14 #include "base/strings/string_number_conversions.h" | 14 #include "base/strings/string_number_conversions.h" |
15 #include "base/strings/utf_string_conversions.h" | 15 #include "base/strings/utf_string_conversions.h" |
16 #include "chrome/browser/autocomplete/autocomplete_provider.h" | 16 #include "chrome/browser/autocomplete/autocomplete_provider.h" |
17 #include "chrome/browser/autocomplete/autocomplete_provider_listener.h" | 17 #include "chrome/browser/autocomplete/autocomplete_provider_listener.h" |
18 #include "chrome/browser/bookmarks/bookmark_model.h" | 18 #include "chrome/browser/bookmarks/bookmark_model.h" |
19 #include "chrome/browser/bookmarks/bookmark_model_factory.h" | 19 #include "chrome/browser/bookmarks/bookmark_model_factory.h" |
| 20 #include "chrome/browser/bookmarks/bookmark_title_match.h" |
20 #include "chrome/test/base/testing_profile.h" | 21 #include "chrome/test/base/testing_profile.h" |
21 #include "testing/gtest/include/gtest/gtest.h" | 22 #include "testing/gtest/include/gtest/gtest.h" |
22 | 23 |
23 // The bookmark corpus against which we will simulate searches. | 24 // The bookmark corpus against which we will simulate searches. |
24 struct BookmarksTestInfo { | 25 struct BookmarksTestInfo { |
25 std::string title; | 26 std::string title; |
26 std::string url; | 27 std::string url; |
27 } bookmark_provider_test_data[] = { | 28 } bookmark_provider_test_data[] = { |
28 { "abc def", "http://www.catsanddogs.com/a" }, | 29 { "abc def", "http://www.catsanddogs.com/a" }, |
29 { "abcde", "http://www.catsanddogs.com/b" }, | 30 { "abcde", "http://www.catsanddogs.com/b" }, |
30 { "abcdef", "http://www.catsanddogs.com/c" }, | 31 { "abcdef", "http://www.catsanddogs.com/c" }, |
31 { "a definition", "http://www.catsanddogs.com/d" }, | 32 { "a definition", "http://www.catsanddogs.com/d" }, |
32 { "carry carbon carefully", "http://www.catsanddogs.com/e" }, | 33 { "carry carbon carefully", "http://www.catsanddogs.com/e" }, |
33 { "ghi jkl", "http://www.catsanddogs.com/f" }, | 34 { "ghi jkl", "http://www.catsanddogs.com/f" }, |
34 { "jkl ghi", "http://www.catsanddogs.com/g" }, | 35 { "jkl ghi", "http://www.catsanddogs.com/g" }, |
35 { "frankly frankly frank", "http://www.catsanddogs.com/h" }, | 36 { "frankly frankly frank", "http://www.catsanddogs.com/h" }, |
36 { "foobar foobar", "http://www.foobar.com/" }, | 37 { "foobar foobar", "http://www.foobar.com/" }, |
| 38 // For testing inline_autocompletion. |
| 39 { "http://blah.com/", "http://blah.com/" }, |
| 40 { "http://fiddle.com/", "http://fiddle.com/" }, |
| 41 { "http://www.www.com/", "http://www.www.com/" }, |
| 42 { "chrome://version", "chrome://version" }, |
| 43 { "chrome://omnibox", "chrome://omnibox" }, |
37 // For testing ranking with different URLs. | 44 // For testing ranking with different URLs. |
38 {"achlorhydric featherheads resuscitates mockingbirds", | 45 {"achlorhydric featherheads resuscitates mockingbirds", |
39 "http://www.featherheads.com/a" }, | 46 "http://www.featherheads.com/a" }, |
40 {"achlorhydric mockingbirds resuscitates featherhead", | 47 {"achlorhydric mockingbirds resuscitates featherhead", |
41 "http://www.featherheads.com/b" }, | 48 "http://www.featherheads.com/b" }, |
42 {"featherhead resuscitates achlorhydric mockingbirds", | 49 {"featherhead resuscitates achlorhydric mockingbirds", |
43 "http://www.featherheads.com/c" }, | 50 "http://www.featherheads.com/c" }, |
44 {"mockingbirds resuscitates featherheads achlorhydric", | 51 {"mockingbirds resuscitates featherheads achlorhydric", |
45 "http://www.featherheads.com/d" }, | 52 "http://www.featherheads.com/d" }, |
46 // For testing URL boosting. | 53 // For testing URL boosting. |
(...skipping 285 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
332 continue; | 339 continue; |
333 EXPECT_LT(j, matches.size()) << " Missing match '" | 340 EXPECT_LT(j, matches.size()) << " Missing match '" |
334 << query_data[i].matches[j] << "' for query: '" | 341 << query_data[i].matches[j] << "' for query: '" |
335 << query_data[i].query << "'."; | 342 << query_data[i].query << "'."; |
336 if (j >= matches.size()) | 343 if (j >= matches.size()) |
337 continue; | 344 continue; |
338 EXPECT_EQ(query_data[i].matches[j], | 345 EXPECT_EQ(query_data[i].matches[j], |
339 base::UTF16ToUTF8(matches[j].description)) | 346 base::UTF16ToUTF8(matches[j].description)) |
340 << " Mismatch at [" << base::IntToString(j) << "] for query '" | 347 << " Mismatch at [" << base::IntToString(j) << "] for query '" |
341 << query_data[i].query << "'."; | 348 << query_data[i].query << "'."; |
342 EXPECT_FALSE(matches[j].allowed_to_be_default_match); | |
343 } | 349 } |
344 } | 350 } |
345 } | 351 } |
| 352 |
| 353 TEST_F(BookmarkProviderTest, InlineAutocompletion) { |
| 354 // Simulate searches. |
| 355 struct QueryData { |
| 356 const std::string query; |
| 357 const std::string url; |
| 358 const bool allowed_to_be_default_match; |
| 359 const std::string inline_autocompletion; |
| 360 } query_data[] = { |
| 361 { "bla", "http://blah.com/", true, "h.com" }, |
| 362 { "blah ", "http://blah.com/", false, ".com" }, |
| 363 { "http://bl", "http://blah.com/", true, "ah.com" }, |
| 364 { "fiddle.c", "http://fiddle.com/", true, "om" }, |
| 365 { "www", "http://www.www.com/", true, ".com" }, |
| 366 { "chro", "chrome://version", true, "me://version" }, |
| 367 { "chrome://ve", "chrome://version", true, "rsion" }, |
| 368 { "chrome ver", "chrome://version", false, "" }, |
| 369 { "versi", "chrome://version", false, "" }, |
| 370 { "abou", "chrome://omnibox", false, "" }, |
| 371 { "about:om", "chrome://omnibox", true, "nibox" } |
| 372 // Note: when adding a new URL to this test, be sure to add it to the list |
| 373 // of bookmarks at the top of the file as well. All items in this list |
| 374 // need to be in the bookmarks list because BookmarkProvider's |
| 375 // TitleMatchToACMatch() has an assertion that verifies the URL is |
| 376 // actually bookmarked. |
| 377 }; |
| 378 |
| 379 for (size_t i = 0; i < ARRAYSIZE_UNSAFE(query_data); ++i) { |
| 380 const std::string description = "for query=" + query_data[i].query + |
| 381 " and url=" + query_data[i].url; |
| 382 AutocompleteInput input(base::ASCIIToUTF16(query_data[i].query), |
| 383 base::string16::npos, base::string16(), GURL(), |
| 384 AutocompleteInput::INVALID_SPEC, false, false, |
| 385 false, AutocompleteInput::ALL_MATCHES); |
| 386 AutocompleteInput fixed_up_input(input); |
| 387 provider_->FixupUserInput(&fixed_up_input); |
| 388 BookmarkNode node(GURL(query_data[i].url)); |
| 389 node.SetTitle(base::ASCIIToUTF16(query_data[i].url)); |
| 390 BookmarkTitleMatch bookmark_match; |
| 391 bookmark_match.node = &node; |
| 392 const AutocompleteMatch& ac_match = |
| 393 provider_->TitleMatchToACMatch(input, fixed_up_input, bookmark_match); |
| 394 EXPECT_EQ(query_data[i].allowed_to_be_default_match, |
| 395 ac_match.allowed_to_be_default_match) << description; |
| 396 EXPECT_EQ(base::ASCIIToUTF16(query_data[i].inline_autocompletion), |
| 397 ac_match.inline_autocompletion) << description; |
| 398 } |
| 399 } |
OLD | NEW |