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

Side by Side Diff: chrome/browser/autocomplete/search_provider_unittest.cc

Issue 58003005: Modify Entity Suggestion support and Add Profile Suggest support (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Fix tests Created 7 years 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 unified diff | Download patch
OLDNEW
1 // Copyright 2012 The Chromium Authors. All rights reserved. 1 // Copyright 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/search_provider.h" 5 #include "chrome/browser/autocomplete/search_provider.h"
6 6
7 #include <string> 7 #include <string>
8 8
9 #include "base/command_line.h" 9 #include "base/command_line.h"
10 #include "base/metrics/field_trial.h" 10 #include "base/metrics/field_trial.h"
(...skipping 3365 matching lines...) Expand 10 before | Expand all | Expand 10 after
3376 const std::string& suggestion = cases[i].results[j].suggestion; 3376 const std::string& suggestion = cases[i].results[j].suggestion;
3377 if (suggestion == kNotApplicable) 3377 if (suggestion == kNotApplicable)
3378 break; 3378 break;
3379 if (cases[i].results[j].is_navigation_result) { 3379 if (cases[i].results[j].is_navigation_result) {
3380 provider_->default_results_.navigation_results.push_back( 3380 provider_->default_results_.navigation_results.push_back(
3381 SearchProvider::NavigationResult( 3381 SearchProvider::NavigationResult(
3382 *provider_.get(), GURL(suggestion), base::string16(), false, 3382 *provider_.get(), GURL(suggestion), base::string16(), false,
3383 cases[i].results[j].relevance, false)); 3383 cases[i].results[j].relevance, false));
3384 } else { 3384 } else {
3385 provider_->default_results_.suggest_results.push_back( 3385 provider_->default_results_.suggest_results.push_back(
3386 SearchProvider::SuggestResult(ASCIIToUTF16(suggestion), base::string 16(), 3386 SearchProvider::SuggestResult(
3387 base::string16(), std::string(), 3387 ASCIIToUTF16(suggestion), AutocompleteMatchType::SEARCH_SUGGEST,
3388 std::string(), false, 3388 base::string16(), base::string16(), std::string(),
3389 cases[i].results[j].relevance, 3389 std::string(), false, cases[i].results[j].relevance, false,
3390 false, false)); 3390 false));
3391 } 3391 }
3392 } 3392 }
3393 3393
3394 provider_->input_ = AutocompleteInput( 3394 provider_->input_ = AutocompleteInput(
3395 ASCIIToUTF16(cases[i].omnibox_input), base::string16::npos, base::string 16(), 3395 ASCIIToUTF16(cases[i].omnibox_input), base::string16::npos, base::string 16(),
3396 GURL(), AutocompleteInput::INVALID_SPEC, false, false, true, 3396 GURL(), AutocompleteInput::INVALID_SPEC, false, false, true,
3397 AutocompleteInput::ALL_MATCHES); 3397 AutocompleteInput::ALL_MATCHES);
3398 provider_->RemoveAllStaleResults(); 3398 provider_->RemoveAllStaleResults();
3399 3399
3400 // Check cached results. 3400 // Check cached results.
(...skipping 24 matching lines...) Expand all
3425 EXPECT_EQ(sug_end, sug_it); 3425 EXPECT_EQ(sug_end, sug_it);
3426 EXPECT_EQ(nav_end, nav_it); 3426 EXPECT_EQ(nav_end, nav_it);
3427 } 3427 }
3428 } 3428 }
3429 3429
3430 #if !defined(OS_WIN) 3430 #if !defined(OS_WIN)
3431 // Verify entity suggestion parsing. 3431 // Verify entity suggestion parsing.
3432 TEST_F(SearchProviderTest, ParseEntitySuggestion) { 3432 TEST_F(SearchProviderTest, ParseEntitySuggestion) {
3433 struct Match { 3433 struct Match {
3434 std::string contents; 3434 std::string contents;
3435 std::string description;
3435 std::string query_params; 3436 std::string query_params;
3436 std::string fill_into_edit; 3437 std::string fill_into_edit;
3437 AutocompleteMatchType::Type type; 3438 AutocompleteMatchType::Type type;
3438 size_t classification_offsets[3];
3439 int classification_styles[3];
3440 }; 3439 };
3441 const size_t invalid_offset = 10;
3442 const int invalid_style = -1;
3443 const Match kEmptyMatch = { 3440 const Match kEmptyMatch = {
3444 kNotApplicable, kNotApplicable, kNotApplicable, 3441 kNotApplicable, kNotApplicable, kNotApplicable, kNotApplicable,
3445 AutocompleteMatchType::NUM_TYPES, 3442 AutocompleteMatchType::NUM_TYPES};
3446 { invalid_offset, invalid_offset, invalid_offset },
3447 { invalid_style, invalid_style, invalid_style } };
3448 3443
3449 struct { 3444 struct {
3450 const std::string input_text; 3445 const std::string input_text;
3451 const std::string response_json; 3446 const std::string response_json;
3452 const Match matches[5]; 3447 const Match matches[5];
3453 } cases[] = { 3448 } cases[] = {
3454 // A query and an entity suggestion with different search terms. 3449 // A query and an entity suggestion with different search terms.
3455 { "x", 3450 { "x",
3456 "[\"x\",[\"xy\", \"xy\"],[\"\",\"\"],[]," 3451 "[\"x\",[\"xy\", \"yy\"],[\"\",\"\"],[],"
3457 " {\"google:suggestdetail\":[{}," 3452 " {\"google:suggestdetail\":[{},"
3458 " {\"a\":\"A\",\"dq\":\"yy\",\"q\":\"p=v\"}]," 3453 " {\"a\":\"A\",\"t\":\"xy\",\"q\":\"p=v\"}],"
3459 "\"google:suggesttype\":[\"QUERY\",\"ENTITY\"]}]", 3454 "\"google:suggesttype\":[\"QUERY\",\"ENTITY\"]}]",
3460 { { "x", "", "x", AutocompleteMatchType::SEARCH_WHAT_YOU_TYPED, 3455 { { "x", "", "", "x", AutocompleteMatchType::SEARCH_WHAT_YOU_TYPED },
3461 { 0, invalid_offset, invalid_offset }, 3456 { "xy", "", "", "xy", AutocompleteMatchType::SEARCH_SUGGEST },
3462 { ACMatchClassification::NONE, invalid_style, invalid_style } }, 3457 { "xy", "A", "p=v", "yy",
3463 { "xy", "", "xy", AutocompleteMatchType::SEARCH_SUGGEST, 3458 AutocompleteMatchType::SEARCH_SUGGEST_ENTITY },
3464 { 0, 1, invalid_offset },
3465 { ACMatchClassification::NONE, ACMatchClassification::MATCH,
3466 invalid_style } },
3467 { "xy - A", "p=v", "yy", AutocompleteMatchType::SEARCH_SUGGEST,
3468 { 0, 1, 2 },
3469 { ACMatchClassification::NONE, ACMatchClassification::MATCH,
3470 ACMatchClassification::DIM } },
3471 kEmptyMatch, 3459 kEmptyMatch,
3472 kEmptyMatch 3460 kEmptyMatch
3473 }, 3461 },
3474 }, 3462 },
3475 // A query and an entity suggestion with same search terms. 3463 // A query and an entity suggestion with same search terms.
3476 { "x", 3464 { "x",
3477 "[\"x\",[\"xy\", \"xy\"],[\"\",\"\"],[]," 3465 "[\"x\",[\"xy\", \"xy\"],[\"\",\"\"],[],"
3478 " {\"google:suggestdetail\":[{}," 3466 " {\"google:suggestdetail\":[{},"
3479 " {\"a\":\"A\",\"dq\":\"xy\",\"q\":\"p=v\"}]," 3467 " {\"a\":\"A\",\"t\":\"xy\",\"q\":\"p=v\"}],"
3480 "\"google:suggesttype\":[\"QUERY\",\"ENTITY\"]}]", 3468 "\"google:suggesttype\":[\"QUERY\",\"ENTITY\"]}]",
3481 { { "x", "", "x", AutocompleteMatchType::SEARCH_WHAT_YOU_TYPED, 3469 { { "x", "", "", "x", AutocompleteMatchType::SEARCH_WHAT_YOU_TYPED },
3482 { 0, invalid_offset, invalid_offset }, 3470 { "xy", "", "", "xy", AutocompleteMatchType::SEARCH_SUGGEST },
3483 { ACMatchClassification::NONE, invalid_style, invalid_style } }, 3471 { "xy", "A", "p=v", "xy",
3484 { "xy", "", "xy", AutocompleteMatchType::SEARCH_SUGGEST, 3472 AutocompleteMatchType::SEARCH_SUGGEST_ENTITY },
3485 { 0, 1, invalid_offset },
3486 { ACMatchClassification::NONE, ACMatchClassification::MATCH,
3487 invalid_style } },
3488 { "xy - A", "p=v", "xy", AutocompleteMatchType::SEARCH_SUGGEST,
3489 { 0, 1, 2 },
3490 { ACMatchClassification::NONE, ACMatchClassification::MATCH,
3491 ACMatchClassification::DIM } },
3492 kEmptyMatch, 3473 kEmptyMatch,
3493 kEmptyMatch 3474 kEmptyMatch
3494 }, 3475 },
3495 }, 3476 },
3496 }; 3477 };
3497 for (size_t i = 0; i < ARRAYSIZE_UNSAFE(cases); i++) { 3478 for (size_t i = 0; i < ARRAYSIZE_UNSAFE(cases); i++) {
3498 QueryForInput(ASCIIToUTF16(cases[i].input_text), false, false); 3479 QueryForInput(ASCIIToUTF16(cases[i].input_text), false, false);
3499 3480
3500 // Set up a default fetcher with provided results. 3481 // Set up a default fetcher with provided results.
3501 net::TestURLFetcher* fetcher = 3482 net::TestURLFetcher* fetcher =
(...skipping 12 matching lines...) Expand all
3514 SCOPED_TRACE("for input with json = " + cases[i].response_json); 3495 SCOPED_TRACE("for input with json = " + cases[i].response_json);
3515 3496
3516 ASSERT_LE(matches.size(), ARRAYSIZE_UNSAFE(cases[i].matches)); 3497 ASSERT_LE(matches.size(), ARRAYSIZE_UNSAFE(cases[i].matches));
3517 size_t j = 0; 3498 size_t j = 0;
3518 // Ensure that the returned matches equal the expectations. 3499 // Ensure that the returned matches equal the expectations.
3519 for (; j < matches.size(); ++j) { 3500 for (; j < matches.size(); ++j) {
3520 const Match& match = cases[i].matches[j]; 3501 const Match& match = cases[i].matches[j];
3521 SCOPED_TRACE(" and match index: " + base::IntToString(j)); 3502 SCOPED_TRACE(" and match index: " + base::IntToString(j));
3522 EXPECT_EQ(match.contents, 3503 EXPECT_EQ(match.contents,
3523 UTF16ToUTF8(matches[j].contents)); 3504 UTF16ToUTF8(matches[j].contents));
3505 EXPECT_EQ(match.description,
3506 UTF16ToUTF8(matches[j].description));
3524 EXPECT_EQ(match.query_params, 3507 EXPECT_EQ(match.query_params,
3525 matches[j].search_terms_args->suggest_query_params); 3508 matches[j].search_terms_args->suggest_query_params);
3526 EXPECT_EQ(match.fill_into_edit, 3509 EXPECT_EQ(match.fill_into_edit,
3527 UTF16ToUTF8(matches[j].fill_into_edit)); 3510 UTF16ToUTF8(matches[j].fill_into_edit));
3528 EXPECT_EQ(match.type, matches[j].type); 3511 EXPECT_EQ(match.type, matches[j].type);
3529
3530 size_t k = 0;
3531 for (; k < matches[j].contents_class.size(); k++) {
3532 SCOPED_TRACE(" and contents class: " + base::IntToString(k));
3533 EXPECT_EQ(match.classification_offsets[k],
3534 matches[j].contents_class[k].offset);
3535 EXPECT_EQ(match.classification_styles[k],
3536 matches[j].contents_class[k].style);
3537 }
3538 for (; k < ARRAYSIZE_UNSAFE(match.classification_offsets); k++) {
3539 SCOPED_TRACE(" and contents class: " + base::IntToString(k));
3540 EXPECT_EQ(match.classification_offsets[k], invalid_offset);
3541 EXPECT_EQ(match.classification_styles[k], invalid_style);
3542 }
3543 } 3512 }
3544 // Ensure that no expected matches are missing. 3513 // Ensure that no expected matches are missing.
3545 for (; j < ARRAYSIZE_UNSAFE(cases[i].matches); ++j) { 3514 for (; j < ARRAYSIZE_UNSAFE(cases[i].matches); ++j) {
3546 SCOPED_TRACE(" and match index: " + base::IntToString(j)); 3515 SCOPED_TRACE(" and match index: " + base::IntToString(j));
3547 EXPECT_EQ(cases[i].matches[j].contents, kNotApplicable); 3516 EXPECT_EQ(cases[i].matches[j].contents, kNotApplicable);
3517 EXPECT_EQ(cases[i].matches[j].description, kNotApplicable);
3548 EXPECT_EQ(cases[i].matches[j].query_params, kNotApplicable); 3518 EXPECT_EQ(cases[i].matches[j].query_params, kNotApplicable);
3549 EXPECT_EQ(cases[i].matches[j].fill_into_edit, kNotApplicable); 3519 EXPECT_EQ(cases[i].matches[j].fill_into_edit, kNotApplicable);
3550 EXPECT_EQ(cases[i].matches[j].type, AutocompleteMatchType::NUM_TYPES); 3520 EXPECT_EQ(cases[i].matches[j].type, AutocompleteMatchType::NUM_TYPES);
3551 } 3521 }
3552 } 3522 }
3553 } 3523 }
3554 #endif // !defined(OS_WIN) 3524 #endif // !defined(OS_WIN)
3555 3525
3556 TEST_F(SearchProviderTest, SearchHistorySuppressesEntitySuggestion) {
3557 struct Match {
3558 std::string contents;
3559 std::string query_params;
3560 std::string fill_into_edit;
3561 AutocompleteMatchType::Type type;
3562 };
3563 const Match kEmptyMatch = { kNotApplicable, kNotApplicable, kNotApplicable,
3564 AutocompleteMatchType::NUM_TYPES};
3565
3566 struct {
3567 const std::string input_text;
3568 const std::string history_search_term;
3569 const std::string response_json;
3570 const Match matches[5];
3571 } cases[] = {
3572 // Search history suppresses both query and entity suggestions.
3573 { "x", "xy",
3574 "[\"x\",[\"xy\", \"xy\"],[\"\",\"\"],[],"
3575 " {\"google:suggestdetail\":[{},"
3576 " {\"a\":\"A\",\"dq\":\"xy\",\"q\":\"p=v\"}],"
3577 "\"google:suggesttype\":[\"QUERY\",\"ENTITY\"]}]",
3578 {
3579 {"xy", "", "xy", AutocompleteMatchType::SEARCH_HISTORY},
3580 {"x", "", "x", AutocompleteMatchType::SEARCH_WHAT_YOU_TYPED},
3581 {"xy - A", "p=v", "xy", AutocompleteMatchType::SEARCH_SUGGEST},
3582 kEmptyMatch,
3583 kEmptyMatch,
3584 },
3585 },
3586 // Search history suppresses only query suggestion.
3587 { "x", "xyy",
3588 "[\"x\",[\"xy\", \"xy\"],[\"\",\"\"],[],"
3589 " {\"google:suggestdetail\":[{},"
3590 " {\"a\":\"A\",\"dq\":\"xyy\",\"q\":\"p=v\"}],"
3591 "\"google:suggesttype\":[\"QUERY\",\"ENTITY\"]}]",
3592 {
3593 {"xyy", "", "xyy", AutocompleteMatchType::SEARCH_HISTORY},
3594 {"xy", "", "xy", AutocompleteMatchType::SEARCH_HISTORY},
3595 {"x", "", "x", AutocompleteMatchType::SEARCH_WHAT_YOU_TYPED},
3596 {"xy - A", "p=v", "xyy", AutocompleteMatchType::SEARCH_SUGGEST},
3597 kEmptyMatch,
3598 },
3599 }
3600 };
3601
3602 for (size_t i = 0; i < ARRAYSIZE_UNSAFE(cases); i++) {
3603 GURL term_url(AddSearchToHistory(
3604 default_t_url_, ASCIIToUTF16(cases[i].history_search_term), 10));
3605 profile_.BlockUntilHistoryProcessesPendingRequests();
3606 QueryForInput(ASCIIToUTF16(cases[i].input_text), false, false);
3607
3608 // Set up a default fetcher with provided results.
3609 net::TestURLFetcher* fetcher =
3610 test_factory_.GetFetcherByID(
3611 SearchProvider::kDefaultProviderURLFetcherID);
3612 ASSERT_TRUE(fetcher);
3613 fetcher->set_response_code(200);
3614 fetcher->SetResponseString(cases[i].response_json);
3615 fetcher->delegate()->OnURLFetchComplete(fetcher);
3616
3617 RunTillProviderDone();
3618
3619 const ACMatches& matches = provider_->matches();
3620 ASSERT_FALSE(matches.empty());
3621 SCOPED_TRACE("for case: " + base::IntToString(i));
3622
3623 ASSERT_LE(matches.size(), ARRAYSIZE_UNSAFE(cases[i].matches));
3624 size_t j = 0;
3625 // Ensure that the returned matches equal the expectations.
3626 for (; j < matches.size(); ++j) {
3627 SCOPED_TRACE(" and match index: " + base::IntToString(j));
3628 EXPECT_EQ(cases[i].matches[j].contents,
3629 UTF16ToUTF8(matches[j].contents));
3630 EXPECT_EQ(cases[i].matches[j].query_params,
3631 matches[j].search_terms_args->suggest_query_params);
3632 EXPECT_EQ(cases[i].matches[j].fill_into_edit,
3633 UTF16ToUTF8(matches[j].fill_into_edit));
3634 EXPECT_EQ(cases[i].matches[j].type, matches[j].type);
3635 }
3636 // Ensure that no expected matches are missing.
3637 for (; j < ARRAYSIZE_UNSAFE(cases[i].matches); ++j) {
3638 SCOPED_TRACE(" and match index: " + base::IntToString(j));
3639 EXPECT_EQ(cases[i].matches[j].contents, kNotApplicable);
3640 EXPECT_EQ(cases[i].matches[j].query_params, kNotApplicable);
3641 EXPECT_EQ(cases[i].matches[j].fill_into_edit, kNotApplicable);
3642 EXPECT_EQ(cases[i].matches[j].type, AutocompleteMatchType::NUM_TYPES);
3643 }
3644 }
3645 }
3646 3526
3647 // A basic test that verifies the prefetch metadata parsing logic. 3527 // A basic test that verifies the prefetch metadata parsing logic.
3648 TEST_F(SearchProviderTest, PrefetchMetadataParsing) { 3528 TEST_F(SearchProviderTest, PrefetchMetadataParsing) {
3649 struct Match { 3529 struct Match {
3650 std::string contents; 3530 std::string contents;
3651 bool allowed_to_be_prefetched; 3531 bool allowed_to_be_prefetched;
3652 AutocompleteMatchType::Type type; 3532 AutocompleteMatchType::Type type;
3653 bool from_keyword; 3533 bool from_keyword;
3654 }; 3534 };
3655 const Match kEmptyMatch = { kNotApplicable, 3535 const Match kEmptyMatch = { kNotApplicable,
(...skipping 487 matching lines...) Expand 10 before | Expand all | Expand 10 after
4143 EXPECT_FALSE(provider_->deletion_handlers_.empty()); 4023 EXPECT_FALSE(provider_->deletion_handlers_.empty());
4144 // Set up a default fetcher with provided results. 4024 // Set up a default fetcher with provided results.
4145 fetcher = test_factory_.GetFetcherByID( 4025 fetcher = test_factory_.GetFetcherByID(
4146 SearchProvider::kDeletionURLFetcherID); 4026 SearchProvider::kDeletionURLFetcherID);
4147 ASSERT_TRUE(fetcher); 4027 ASSERT_TRUE(fetcher);
4148 fetcher->set_response_code(500); 4028 fetcher->set_response_code(500);
4149 fetcher->delegate()->OnURLFetchComplete(fetcher); 4029 fetcher->delegate()->OnURLFetchComplete(fetcher);
4150 EXPECT_TRUE(provider_->deletion_handlers_.empty()); 4030 EXPECT_TRUE(provider_->deletion_handlers_.empty());
4151 EXPECT_FALSE(provider_->is_success()); 4031 EXPECT_FALSE(provider_->is_success());
4152 } 4032 }
OLDNEW
« no previous file with comments | « chrome/browser/autocomplete/search_provider.cc ('k') | chrome/browser/autocomplete/zero_suggest_provider.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698