blob: 53f035a10c2063a110bfee21e5e7039d97a2c771 [file] [log] [blame]
// Copyright 2018 The Chromium Authors
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
#include "components/search_engines/template_url_data.h"
#include <string_view>
#include "base/strings/utf_string_conversions.h"
#include "base/test/scoped_feature_list.h"
#include "base/values.h"
#include "components/search_engines/regulatory_extension_type.h"
#include "components/search_engines/search_engines_switches.h"
#include "testing/gtest/include/gtest/gtest.h"
#include "third_party/search_engines_data/resources/definitions/prepopulated_engines.h"
namespace {
TemplateURLData BuildTestTemplateURLData(
int id,
base::span<TemplateURLData::RegulatoryExtension> extensions) {
return TemplateURLData(
/*name=*/u"shortname", /*keyword=*/u"keyword",
/*search_url=*/"https://cs.chromium.org",
/*suggest_url=*/{}, /*image_url=*/{}, /*image_translate_url=*/{},
/*new_tab_url=*/{}, /*contextual_search_url=*/{}, /*logo_url=*/{},
/*doodle_url=*/{}, /*base_builtin_resource_id=*/{},
/*search_url_post_params=*/{},
/*suggest_url_post_params=*/{}, /*image_url_post_params=*/{},
/*image_translate_source_language_param_key=*/{},
/*image_translate_target_language_param_key=*/{},
/*search_intent_params=*/{}, /*favicon_url=*/{}, /*encoding=*/{},
/*image_search_branding_label=*/{}, /*alternate_urls_list=*/{},
/*preconnect_to_search_url=*/false, /*prefetch_likely_navigations=*/false,
/*id=*/id, /*regulatory_extensions=*/extensions);
}
} // namespace
TEST(TemplateURLDataTest, Trim) {
TemplateURLData data(BuildTestTemplateURLData(0, {}));
EXPECT_EQ(u"shortname", data.short_name());
EXPECT_EQ(u"keyword", data.keyword());
data.SetShortName(u" othershortname ");
data.SetKeyword(u" otherkeyword ");
EXPECT_EQ(u"othershortname", data.short_name());
EXPECT_EQ(u"otherkeyword", data.keyword());
data.SetKeyword(u" other other keyword ");
EXPECT_EQ(u"otherotherkeyword", data.keyword());
}
TEST(TemplateURLDataTest, AcceptKnownRegulatoryKeywords) {
std::array<TemplateURLData::RegulatoryExtension, 2> extensions = {{
{.variant = RegulatoryExtensionType::kDefault,
.search_params = "default_search",
.suggest_params = "default_suggest"},
{.variant = RegulatoryExtensionType::kAndroidEEA,
.search_params = "android_eea_search",
.suggest_params = "android_eea_suggest"},
}};
auto data = BuildTestTemplateURLData(0, extensions);
EXPECT_EQ("default_search",
data.regulatory_extensions.at(RegulatoryExtensionType::kDefault)
->search_params);
EXPECT_EQ("default_suggest",
data.regulatory_extensions.at(RegulatoryExtensionType::kDefault)
->suggest_params);
EXPECT_EQ("android_eea_search",
data.regulatory_extensions.at(RegulatoryExtensionType::kAndroidEEA)
->search_params);
EXPECT_EQ("android_eea_suggest",
data.regulatory_extensions.at(RegulatoryExtensionType::kAndroidEEA)
->suggest_params);
}
#if DCHECK_IS_ON()
TEST(TemplateURLDataTest, DuplicateRegulatoryKeywords) {
std::array<TemplateURLData::RegulatoryExtension, 2> duplicate_data = {{
{RegulatoryExtensionType::kDefault, "default_data"},
{RegulatoryExtensionType::kDefault, "android_eea_data"},
}};
EXPECT_DEATH_IF_SUPPORTED(BuildTestTemplateURLData(0, duplicate_data), "");
}
#endif
TEST(TemplateURLDataTest, PrepopulatedActiveStatus) {
// Newly created TemplateURLData should be kUnspecified by default.
TemplateURLData data1;
ASSERT_EQ(data1.prepopulate_id, 0);
EXPECT_EQ(data1.is_active, TemplateURLData::ActiveStatus::kUnspecified);
TemplateURLData data2(BuildTestTemplateURLData(0, {}));
ASSERT_EQ(data2.prepopulate_id, 0);
EXPECT_EQ(data2.is_active, TemplateURLData::ActiveStatus::kUnspecified);
// Prepopulated engines also have active status as kUnspecified by default.
TemplateURLData data3(BuildTestTemplateURLData(1, {}));
ASSERT_EQ(data3.prepopulate_id, 1);
EXPECT_EQ(data3.is_active, TemplateURLData::ActiveStatus::kUnspecified);
}