blob: 7cfbbc654ee78e905e4a431a315db9e6711bff5c [file] [log] [blame] [edit]
// Copyright 2022 The Chromium Authors
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
#include "base/strings/string_util.h"
#include "base/test/scoped_feature_list.h"
#include "components/omnibox/browser/autocomplete_scheme_classifier.h"
#include "components/omnibox/browser/omnibox_field_trial.h"
#include "components/omnibox/browser/suggestion_group_util.h"
#include "components/omnibox/common/omnibox_features.h"
#include "components/strings/grit/components_strings.h"
#include "testing/gtest/include/gtest/gtest.h"
#include "third_party/omnibox_proto/groups.pb.h"
#include "ui/base/l10n/l10n_util.h"
class TestingSchemeClassifier : public AutocompleteSchemeClassifier {
public:
TestingSchemeClassifier() = default;
TestingSchemeClassifier(const TestingSchemeClassifier&) = delete;
TestingSchemeClassifier& operator=(const TestingSchemeClassifier&) = delete;
metrics::OmniboxInputType GetInputTypeForScheme(
const std::string& scheme) const override {
DCHECK_EQ(scheme, base::ToLowerASCII(scheme));
return (scheme == url::kHttpScheme || scheme == url::kHttpsScheme)
? metrics::OmniboxInputType::URL
: metrics::OmniboxInputType::EMPTY;
}
};
// Ensures that accessing unset fields is safe and verifies the default values.
// https://developers.google.com/protocol-buffers/docs/reference/cpp-generated
TEST(SuggestionGroupTest, DefaultValuesForUnsetFields) {
omnibox::GroupConfig group_config;
ASSERT_FALSE(group_config.has_header_text());
ASSERT_EQ("", group_config.header_text());
ASSERT_FALSE(group_config.has_side_type());
ASSERT_EQ(omnibox::GroupConfig_SideType_DEFAULT_PRIMARY,
group_config.side_type());
ASSERT_FALSE(group_config.has_render_type());
ASSERT_EQ(omnibox::GroupConfig_RenderType_DEFAULT_VERTICAL,
group_config.render_type());
ASSERT_FALSE(group_config.has_visibility());
ASSERT_EQ(omnibox::GroupConfig_Visibility_DEFAULT_VISIBLE,
group_config.visibility());
ASSERT_FALSE(group_config.has_why_this_result_reason());
ASSERT_EQ(0U, group_config.why_this_result_reason());
ASSERT_FALSE(group_config.has_section());
ASSERT_EQ(omnibox::SECTION_DEFAULT, group_config.section());
}
// Ensures that omnibox::GroupIdForNumber() returns the omnibox::GroupId enum
// object corresponding to the given value; and returns omnibox::GROUP_INVALID
// when there is no corresponding enum object.
TEST(SuggestionGroupTest, GroupIdForNumber) {
ASSERT_EQ(omnibox::GROUP_PERSONALIZED_ZERO_SUGGEST,
omnibox::GroupIdForNumber(40000));
ASSERT_EQ(omnibox::GROUP_INVALID, omnibox::GroupIdForNumber(-1));
ASSERT_EQ(omnibox::GROUP_INVALID, omnibox::GroupIdForNumber(0));
ASSERT_EQ(omnibox::GROUP_INVALID, omnibox::GroupIdForNumber(123456789));
}
TEST(SuggestionGroupTest, SectionMobileMostVisited_HorizontalRenderType) {
omnibox::ResetDefaultGroupsForTest();
base::test::ScopedFeatureList features;
features.InitWithFeatures({omnibox::kMostVisitedTilesHorizontalRenderGroup},
{});
AutocompleteInput input;
auto default_groups = omnibox::BuildDefaultGroupsForInput(input);
auto most_visited_group_config =
default_groups.find(omnibox::GROUP_MOBILE_MOST_VISITED);
ASSERT_NE(most_visited_group_config, default_groups.end());
ASSERT_EQ(omnibox::GroupConfig_RenderType_HORIZONTAL,
most_visited_group_config->second.render_type());
}
TEST(SuggestionGroupTest, SectionMobileMostVisited_VerticalRenderType) {
omnibox::ResetDefaultGroupsForTest();
base::test::ScopedFeatureList features;
features.InitWithFeatures({},
{omnibox::kMostVisitedTilesHorizontalRenderGroup});
AutocompleteInput input;
auto default_groups = omnibox::BuildDefaultGroupsForInput(input);
auto most_visited_group_config =
default_groups.find(omnibox::GROUP_MOBILE_MOST_VISITED);
ASSERT_NE(most_visited_group_config, default_groups.end());
ASSERT_EQ(omnibox::GroupConfig_RenderType_DEFAULT_VERTICAL,
most_visited_group_config->second.render_type());
}
TEST(SuggestionGroupTest, AndroidHubZPS) {
omnibox::ResetDefaultGroupsForTest();
base::test::ScopedFeatureList features;
features.InitWithFeatures({},
{omnibox::kMostVisitedTilesHorizontalRenderGroup});
using OEP = ::metrics::OmniboxEventProto;
AutocompleteInput input(u"", OEP::ANDROID_HUB, TestingSchemeClassifier());
auto default_groups = omnibox::BuildDefaultGroupsForInput(input);
auto open_tabs_group_config =
default_groups.find(omnibox::GROUP_MOBILE_OPEN_TABS);
ASSERT_NE(open_tabs_group_config, default_groups.end());
ASSERT_EQ(omnibox::GroupConfig_RenderType_DEFAULT_VERTICAL,
open_tabs_group_config->second.render_type());
ASSERT_EQ("Last open tabs", open_tabs_group_config->second.header_text());
}
TEST(SuggestionGroupTest, AndroidHubTyped) {
omnibox::ResetDefaultGroupsForTest();
base::test::ScopedFeatureList features;
features.InitWithFeatures({},
{omnibox::kMostVisitedTilesHorizontalRenderGroup});
using OEP = ::metrics::OmniboxEventProto;
AutocompleteInput input(u"test", OEP::ANDROID_HUB, TestingSchemeClassifier());
auto default_groups = omnibox::BuildDefaultGroupsForInput(input);
auto open_tabs_group_config =
default_groups.find(omnibox::GROUP_MOBILE_OPEN_TABS);
ASSERT_NE(open_tabs_group_config, default_groups.end());
ASSERT_EQ(omnibox::GroupConfig_RenderType_DEFAULT_VERTICAL,
open_tabs_group_config->second.render_type());
ASSERT_EQ("", open_tabs_group_config->second.header_text());
auto search_group_config = default_groups.find(omnibox::GROUP_SEARCH);
ASSERT_NE(search_group_config, default_groups.end());
ASSERT_EQ(omnibox::GroupConfig_RenderType_DEFAULT_VERTICAL,
search_group_config->second.render_type());
ASSERT_EQ("Search the web", search_group_config->second.header_text());
}