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

Unified Diff: components/omnibox/browser/autocomplete_provider_utils_unittest.cc

Issue 2583763003: Factor out AutocompleteMatch creation from BookmarkProvider (Closed)
Patch Set: add unit test Created 4 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 side-by-side diff with in-line comments
Download patch
Index: components/omnibox/browser/autocomplete_provider_utils_unittest.cc
diff --git a/components/omnibox/browser/autocomplete_provider_utils_unittest.cc b/components/omnibox/browser/autocomplete_provider_utils_unittest.cc
new file mode 100644
index 0000000000000000000000000000000000000000..7c94276800a5c06652724876a9f7a853e1e49f92
--- /dev/null
+++ b/components/omnibox/browser/autocomplete_provider_utils_unittest.cc
@@ -0,0 +1,176 @@
+// Copyright (c) 2016 The Chromium Authors. All rights reserved.
Mark P 2016/12/23 22:38:50 Thank you again for writing good, comprehensive te
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+#include "components/omnibox/browser/autocomplete_provider_utils.h"
+
+#include "base/memory/ptr_util.h"
+#include "base/strings/utf_string_conversions.h"
+#include "components/bookmarks/browser/titled_url_match.h"
+#include "components/bookmarks/browser/titled_url_node.h"
+#include "components/metrics/proto/omnibox_event.pb.h"
+#include "components/omnibox/browser/autocomplete_input.h"
+#include "components/omnibox/browser/autocomplete_match.h"
+#include "components/omnibox/browser/autocomplete_provider.h"
+#include "components/omnibox/browser/test_scheme_classifier.h"
+#include "testing/gtest/include/gtest/gtest.h"
+#include "url/gurl.h"
+
+namespace {
+
+// A simple AutocompleteProvider that does nothing.
+class MockAutocompleteProvider : public AutocompleteProvider {
+ public:
+ MockAutocompleteProvider(Type type) : AutocompleteProvider(type) {}
+
+ void Start(const AutocompleteInput& input, bool minimal_changes) override {}
+
+ private:
+ ~MockAutocompleteProvider() override {}
+};
+
+class MockTitledUrlNode : public bookmarks::TitledUrlNode {
+ public:
+ MockTitledUrlNode(const base::string16& title, const GURL& url)
+ : title_(title), url_(url) {}
+
+ // TitledUrlNode
+ const base::string16& GetTitledUrlNodeTitle() const override {
+ return title_;
+ }
+ const GURL& GetTitledUrlNodeUrl() const override { return url_; }
+
+ private:
+ base::string16 title_;
+ GURL url_;
+};
+
+} // namespace
+
+bool operator==(const ACMatchClassification& lhs,
+ const ACMatchClassification& rhs) {
+ return lhs.offset == rhs.offset && lhs.style == rhs.style;
Mark P 2016/12/23 22:38:49 nit: parens around binary operators (==)
mattreynolds 2017/01/04 00:58:03 Done.
+}
+
+class AutocompleteProviderUtilsTest : public testing::Test {
+ public:
+ AutocompleteProviderUtilsTest() {}
+
+ private:
+ DISALLOW_COPY_AND_ASSIGN(AutocompleteProviderUtilsTest);
+};
+
+TEST_F(AutocompleteProviderUtilsTest, TitledUrlMatchToAutocompleteMatch) {
+ base::string16 input_text(base::ASCIIToUTF16("goo"));
+ base::string16 match_title(base::ASCIIToUTF16("Google Search"));
+ base::string16 match_url_string(base::ASCIIToUTF16("https://www.google.com"));
+ GURL match_url(match_url_string);
+ bookmarks::TitledUrlMatch::MatchPositions title_match_positions = {{0, 3}};
+ bookmarks::TitledUrlMatch::MatchPositions url_match_positions = {{12, 15}};
+ AutocompleteMatchType::Type type = AutocompleteMatchType::BOOKMARK_TITLE;
+ int relevance = 123;
+
+ MockTitledUrlNode node(match_title, match_url);
+ bookmarks::TitledUrlMatch titled_url_match;
+ titled_url_match.node = &node;
+ titled_url_match.title_match_positions = title_match_positions;
+ titled_url_match.url_match_positions = url_match_positions;
+
+ scoped_refptr<MockAutocompleteProvider> provider =
+ new MockAutocompleteProvider(AutocompleteProvider::Type::TYPE_BOOKMARK);
+ TestSchemeClassifier classifier;
+ AutocompleteInput input(input_text, base::string16::npos,
+ std::string(), GURL(),
+ metrics::OmniboxEventProto::INVALID_SPEC,
+ false, false, false, true, false, classifier);
+
+ AutocompleteMatch autocomplete_match =
+ TitledUrlMatchToAutocompleteMatch(provider.get(), classifier, input,
+ input_text, titled_url_match, type,
+ relevance);
+
+ ACMatchClassifications expected_contents_class = {
+ {0, ACMatchClassification::URL},
+ {12, ACMatchClassification::URL | ACMatchClassification::MATCH},
+ {15, ACMatchClassification::URL},
+ };
+ ACMatchClassifications expected_description_class = {
+ {0, ACMatchClassification::MATCH},
+ {3, ACMatchClassification::NONE},
+ };
+ base::string16 expected_inline_autocompletion(base::ASCIIToUTF16("gle.com"));
+
+ EXPECT_EQ(provider.get(), autocomplete_match.provider);
+ EXPECT_EQ(type, autocomplete_match.type);
+ EXPECT_EQ(relevance, autocomplete_match.relevance);
+ EXPECT_EQ(match_url, autocomplete_match.destination_url);
+ EXPECT_EQ(match_url_string, autocomplete_match.contents);
+ EXPECT_TRUE(std::equal(expected_contents_class.begin(),
+ expected_contents_class.end(),
+ autocomplete_match.contents_class.begin()));
+ EXPECT_EQ(match_title, autocomplete_match.description);
+ EXPECT_TRUE(std::equal(expected_description_class.begin(),
+ expected_description_class.end(),
+ autocomplete_match.description_class.begin()));
+ EXPECT_TRUE(autocomplete_match.allowed_to_be_default_match);
+ EXPECT_EQ(match_url_string, autocomplete_match.fill_into_edit);
+ EXPECT_EQ(expected_inline_autocompletion,
+ autocomplete_match.inline_autocompletion);
+}
+
+TEST_F(AutocompleteProviderUtilsTest, EmptyInlineAutocompletion) {
+ // The search term matches the title but not the URL. Since there is no URL
+ // match, the inline autocompletion string will be empty.
+ base::string16 input_text(base::ASCIIToUTF16("goo"));
+ base::string16 match_title(base::ASCIIToUTF16("Email by Google"));
+ base::string16 match_url_string(base::ASCIIToUTF16("https://www.gmail.com"));
Mark P 2016/12/23 22:38:49 nit: add trailing slash to make this a proper URL.
mattreynolds 2017/01/04 00:58:03 Done.
+ GURL match_url(match_url_string);
+ bookmarks::TitledUrlMatch::MatchPositions title_match_positions = {{9, 12}};
+ bookmarks::TitledUrlMatch::MatchPositions url_match_positions;
+ AutocompleteMatchType::Type type = AutocompleteMatchType::BOOKMARK_TITLE;
+ int relevance = 123;
+
+ MockTitledUrlNode node(match_title, match_url);
+ bookmarks::TitledUrlMatch titled_url_match;
+ titled_url_match.node = &node;
+ titled_url_match.title_match_positions = title_match_positions;
+ titled_url_match.url_match_positions = url_match_positions;
+
+ scoped_refptr<MockAutocompleteProvider> provider =
+ new MockAutocompleteProvider(AutocompleteProvider::Type::TYPE_BOOKMARK);
+ TestSchemeClassifier classifier;
+ AutocompleteInput input(input_text, base::string16::npos,
+ std::string(), GURL(),
+ metrics::OmniboxEventProto::INVALID_SPEC,
Mark P 2016/12/23 22:38:50 Please use a valid page classifier like NTP. ditto
mattreynolds 2017/01/04 00:58:02 Done.
+ false, false, false, true, false, classifier);
Mark P 2016/12/23 22:38:50 Please make the third false to true to better alig
mattreynolds 2017/01/04 00:58:02 Done.
+
+ AutocompleteMatch autocomplete_match =
Mark P 2016/12/23 22:38:49 Maybe say something here about using input_text as
mattreynolds 2017/01/04 00:58:02 Done.
+ TitledUrlMatchToAutocompleteMatch(provider.get(), classifier, input,
+ input_text, titled_url_match, type,
+ relevance);
+
+ ACMatchClassifications expected_contents_class = {
+ {0, ACMatchClassification::URL},
+ };
+ ACMatchClassifications expected_description_class = {
+ {0, ACMatchClassification::NONE},
+ {9, ACMatchClassification::MATCH},
+ {12, ACMatchClassification::NONE},
+ };
+
+ EXPECT_EQ(provider.get(), autocomplete_match.provider);
+ EXPECT_EQ(type, autocomplete_match.type);
+ EXPECT_EQ(relevance, autocomplete_match.relevance);
+ EXPECT_EQ(match_url, autocomplete_match.destination_url);
+ EXPECT_EQ(match_url_string, autocomplete_match.contents);
+ EXPECT_TRUE(std::equal(expected_contents_class.begin(),
+ expected_contents_class.end(),
+ autocomplete_match.contents_class.begin()));
+ EXPECT_EQ(match_title, autocomplete_match.description);
+ EXPECT_TRUE(std::equal(expected_description_class.begin(),
+ expected_description_class.end(),
+ autocomplete_match.description_class.begin()));
+ EXPECT_FALSE(autocomplete_match.allowed_to_be_default_match);
+ EXPECT_EQ(match_url_string, autocomplete_match.fill_into_edit);
Mark P 2016/12/23 22:38:49 Please reverse the order of lines 173 and 174; all
mattreynolds 2017/01/04 00:58:02 Done.
+ EXPECT_TRUE(autocomplete_match.inline_autocompletion.empty());
+}

Powered by Google App Engine
This is Rietveld 408576698