blob: 65f727f6137fd3d3ccf38199d35dd1b22b2c2093 [file] [log] [blame]
// Copyright 2024 The Chromium Authors
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
#include "chrome/browser/on_device_translation/language_pack_util.h"
#include <string>
#include "base/logging.h"
#include "base/test/gtest_util.h"
#include "testing/gmock/include/gmock/gmock.h"
#include "testing/gtest/include/gtest/gtest.h"
namespace on_device_translation {
namespace {
TEST(LanguagePackUtilTest, ToLanguageCode) {
EXPECT_EQ(ToLanguageCode(SupportedLanguage::kEn), "en");
EXPECT_EQ(ToLanguageCode(SupportedLanguage::kEs), "es");
EXPECT_EQ(ToLanguageCode(SupportedLanguage::kJa), "ja");
}
TEST(LanguagePackUtilTest, ToSupportedLanguage) {
EXPECT_EQ(ToSupportedLanguage("en"), SupportedLanguage::kEn);
EXPECT_EQ(ToSupportedLanguage("es"), SupportedLanguage::kEs);
EXPECT_EQ(ToSupportedLanguage("ja"), SupportedLanguage::kJa);
// TODO(crbug.com/358030919): Currently we are checking case-sensitive
// language codes. This may be changed in the future.
EXPECT_EQ(ToSupportedLanguage("En"), std::nullopt);
// Check that the empty string is not a valid language code.
EXPECT_EQ(ToSupportedLanguage(""), std::nullopt);
}
TEST(LanguagePackUtilTest, GetLanguagePackComponentConfig) {
// En to Es.
EXPECT_EQ(GetLanguagePackComponentConfig(LanguagePackKey::kEn_Es).language1,
SupportedLanguage::kEn);
EXPECT_EQ(GetLanguagePackComponentConfig(LanguagePackKey::kEn_Es).language2,
SupportedLanguage::kEs);
EXPECT_THAT(
std::string(GetLanguagePackComponentConfig(LanguagePackKey::kEn_Es)
.config_path_pref),
std::string(kTranslateKitEnEsPath));
// En to Ja.
EXPECT_EQ(GetLanguagePackComponentConfig(LanguagePackKey::kEn_Ja).language1,
SupportedLanguage::kEn);
EXPECT_EQ(GetLanguagePackComponentConfig(LanguagePackKey::kEn_Ja).language2,
SupportedLanguage::kJa);
EXPECT_THAT(
std::string(GetLanguagePackComponentConfig(LanguagePackKey::kEn_Ja)
.config_path_pref),
std::string(kTranslateKitEnJaPath));
}
TEST(LanguagePackUtilTest, CalculateRequiredLanguagePacks) {
// Check that invalid language codes are not supported.
EXPECT_THAT(CalculateRequiredLanguagePacks("en", "invalid"),
std::set<LanguagePackKey>());
EXPECT_THAT(CalculateRequiredLanguagePacks("invalid", "en"),
std::set<LanguagePackKey>());
// Check that the same language is not supported.
EXPECT_THAT(CalculateRequiredLanguagePacks("en", "en"),
std::set<LanguagePackKey>());
EXPECT_THAT(CalculateRequiredLanguagePacks("es", "es"),
std::set<LanguagePackKey>());
EXPECT_THAT(CalculateRequiredLanguagePacks("ja", "ja"),
std::set<LanguagePackKey>());
// One of the languages is English.
EXPECT_THAT(CalculateRequiredLanguagePacks("en", "es"),
std::set<LanguagePackKey>({LanguagePackKey::kEn_Es}));
EXPECT_THAT(CalculateRequiredLanguagePacks("es", "en"),
std::set<LanguagePackKey>({LanguagePackKey::kEn_Es}));
EXPECT_THAT(CalculateRequiredLanguagePacks("en", "ja"),
std::set<LanguagePackKey>({LanguagePackKey::kEn_Ja}));
EXPECT_THAT(CalculateRequiredLanguagePacks("ja", "en"),
std::set<LanguagePackKey>({LanguagePackKey::kEn_Ja}));
// Both languages are non-English.
EXPECT_THAT(CalculateRequiredLanguagePacks("es", "ja"),
std::set<LanguagePackKey>(
{LanguagePackKey::kEn_Es, LanguagePackKey::kEn_Ja}));
EXPECT_THAT(CalculateRequiredLanguagePacks("ja", "es"),
std::set<LanguagePackKey>(
{LanguagePackKey::kEn_Es, LanguagePackKey::kEn_Ja}));
}
TEST(LanguagePackUtilTest, GetPackageInstallDirName) {
EXPECT_EQ(GetPackageInstallDirName(LanguagePackKey::kEn_Es), "en_es");
EXPECT_EQ(GetPackageInstallDirName(LanguagePackKey::kEn_Ja), "en_ja");
}
TEST(LanguagePackUtilTest, GetPackageNameSuffix) {
EXPECT_EQ(GetPackageNameSuffix(LanguagePackKey::kEn_Es), "en-es");
EXPECT_EQ(GetPackageNameSuffix(LanguagePackKey::kEn_Ja), "en-ja");
}
TEST(LanguagePackUtilTest, GetPackageInstallSubDirNamesForVerification) {
EXPECT_THAT(
GetPackageInstallSubDirNamesForVerification(LanguagePackKey::kEn_Es),
std::vector<std::string>({"en_es_dictionary", "en_es_nmt", "es_en_nmt"}));
EXPECT_THAT(
GetPackageInstallSubDirNamesForVerification(LanguagePackKey::kEn_Ja),
std::vector<std::string>({"en_ja_dictionary", "en_ja_nmt", "ja_en_nmt"}));
}
} // namespace
} // namespace on_device_translation