1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145
|
// 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());
}
|