Index: components/omnibox/browser/shortcuts_provider_test_util.cc |
diff --git a/components/omnibox/browser/shortcuts_provider_test_util.cc b/components/omnibox/browser/shortcuts_provider_test_util.cc |
new file mode 100644 |
index 0000000000000000000000000000000000000000..59022bdcaaa658a438eef9dbeee31da42c30f0b1 |
--- /dev/null |
+++ b/components/omnibox/browser/shortcuts_provider_test_util.cc |
@@ -0,0 +1,108 @@ |
+// Copyright 2016 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 "components/omnibox/browser/shortcuts_provider_test_util.h" |
+ |
+#include "base/message_loop/message_loop.h" |
+#include "base/strings/utf_string_conversions.h" |
+#include "components/omnibox/browser/autocomplete_match.h" |
+#include "components/omnibox/browser/shortcuts_backend.h" |
+#include "components/omnibox/browser/shortcuts_provider.h" |
+#include "components/omnibox/browser/test_scheme_classifier.h" |
+#include "testing/gtest/include/gtest/gtest.h" |
+ |
+TestShortcutData::TestShortcutData(std::string guid, |
+ std::string text, |
+ std::string fill_into_edit, |
+ std::string destination_url, |
+ std::string contents, |
+ std::string contents_class, |
+ std::string description, |
+ std::string description_class, |
+ ui::PageTransition transition, |
+ AutocompleteMatch::Type type, |
+ std::string keyword, |
+ int days_from_now, |
+ int number_of_hits) { |
+ this->guid = guid; |
+ this->text = text; |
+ this->fill_into_edit = fill_into_edit; |
+ this->destination_url = destination_url; |
+ this->contents = contents; |
+ this->contents_class = contents_class; |
+ this->description = description; |
+ this->description_class = description_class; |
+ this->transition = transition; |
+ this->type = type; |
+ this->keyword = keyword; |
+ this->days_from_now = days_from_now; |
+ this->number_of_hits = number_of_hits; |
+} |
+ |
+TestShortcutData::~TestShortcutData() {} |
+ |
+void PopulateShortcutsBackendWithTestData( |
+ scoped_refptr<ShortcutsBackend> backend, |
+ TestShortcutData* db, |
+ size_t db_size) { |
+ size_t expected_size = backend->shortcuts_map().size() + db_size; |
+ for (size_t i = 0; i < db_size; ++i) { |
+ const TestShortcutData& cur = db[i]; |
+ ShortcutsDatabase::Shortcut shortcut( |
+ cur.guid, base::ASCIIToUTF16(cur.text), |
+ ShortcutsDatabase::Shortcut::MatchCore( |
+ base::ASCIIToUTF16(cur.fill_into_edit), GURL(cur.destination_url), |
+ base::ASCIIToUTF16(cur.contents), cur.contents_class, |
+ base::ASCIIToUTF16(cur.description), cur.description_class, |
+ cur.transition, cur.type, base::ASCIIToUTF16(cur.keyword)), |
+ base::Time::Now() - base::TimeDelta::FromDays(cur.days_from_now), |
+ cur.number_of_hits); |
+ backend->AddShortcut(shortcut); |
+ } |
+ EXPECT_EQ(expected_size, backend->shortcuts_map().size()); |
+} |
+ |
+void RunShortcutsProviderTest( |
+ scoped_refptr<ShortcutsProvider> provider, |
+ const base::string16 text, |
+ bool prevent_inline_autocomplete, |
+ const std::vector<ExpectedURLAndAllowedToBeDefault>& expected_urls, |
+ std::string expected_top_result, |
+ base::string16 top_result_inline_autocompletion) { |
+ base::MessageLoop::current()->RunUntilIdle(); |
+ AutocompleteInput input(text, base::string16::npos, std::string(), GURL(), |
+ metrics::OmniboxEventProto::INVALID_SPEC, |
+ prevent_inline_autocomplete, false, true, true, false, |
+ TestSchemeClassifier()); |
+ provider->Start(input, false); |
+ EXPECT_TRUE(provider->done()); |
+ |
+ ACMatches ac_matches = provider->matches(); |
+ |
+ // We should have gotten back at most AutocompleteProvider::kMaxMatches. |
+ EXPECT_LE(ac_matches.size(), AutocompleteProvider::kMaxMatches); |
+ |
+ // If the number of expected and actual matches aren't equal then we need |
+ // test no further, but let's do anyway so that we know which URLs failed. |
+ EXPECT_EQ(expected_urls.size(), ac_matches.size()); |
+ |
+ for (const auto& expected_url : expected_urls) { |
+ auto iter = std::find_if( |
+ ac_matches.begin(), ac_matches.end(), |
+ [&expected_url](const AutocompleteMatch& match) { |
+ return expected_url.first == match.destination_url.spec() && |
+ expected_url.second == match.allowed_to_be_default_match; |
+ }); |
+ EXPECT_TRUE(iter != ac_matches.end()); |
+ } |
+ |
+ // See if we got the expected top scorer. |
+ if (!ac_matches.empty()) { |
+ 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()); |
+ EXPECT_EQ(top_result_inline_autocompletion, |
+ ac_matches[0].inline_autocompletion); |
+ } |
+} |