review fixes

This commit is contained in:
LaGrunge 2019-06-28 12:43:38 +03:00 committed by Tatiana Yan
parent 3e2bce4bb1
commit b268734f93
5 changed files with 71 additions and 47 deletions

View file

@ -38,6 +38,7 @@ set(
street_regions_tracing_tests.cpp
tag_admixer_test.cpp
tesselator_test.cpp
translation_test.cpp
triangles_tree_coding_test.cpp
types_helper.hpp
ugc_test.cpp

View file

@ -487,46 +487,3 @@ UNIT_TEST(RegionsBuilderTest_GenerateRusSPetersburgSuburb)
());
*/
}
// Transliteration tests ---------------------------------------------------------------------------
using Translations = std::vector<std::pair<std::string, std::string>>;
bool TestTransliteration(Translations const & translations,
std::string const & expectedTransliteration)
{
StringUtf8Multilang regionName;
for (auto const & langAndTranslation : translations)
{
regionName.AddString(langAndTranslation.first, langAndTranslation.second);
}
RegionWithName region(regionName);
return region.GetTranslatedOrTransliteratedName(StringUtf8Multilang::GetLangIndex("en")) ==
expectedTransliteration;
}
UNIT_TEST(RegionTransliteration)
{
Transliteration & translit = Transliteration::Instance();
translit.Init(GetPlatform().ResourcesDir());
Translations const scotlandTranslations = {
{"default", "Scotland"}, {"be", "Шатландыя"}, {"cs", "Skotsko"}, {"cy", "Yr Alban"},
{"da", "Skotland"}, {"de", "Schottland"}, {"eo", "Skotlando"}, {"es", "Escocia"},
{"eu", "Eskozia"}, {"fi", "Skotlanti"}, {"fr", "Écosse"}, {"ga", "Albain"},
{"gd", "Alba"}, {"hr", "Škotska"}, {"ia", "Scotia"}, {"io", "Skotia"},
{"ja", "スコットランド"}, {"ku", "Skotland"}, {"lfn", "Scotland"}, {"nl", "Schotland"},
{"pl", "Szkocja"}, {"ru", "Шотландия"}, {"sco", "Scotland"}, {"sk", "Škótsko"},
{"sr", "Шкотска"}, {"sv", "Skottland"}, {"tok", "Sukosi"}, {"tzl", "Escot"},
{"uk", "Шотландія"}, {"vo", "Skotän"}, {"zh", "苏格兰"}};
Translations const michiganTranslations = {
{"default", "Michigan"}, {"ar", "ميشيغان"}, {"az", "Miçiqan"}, {"be", "Мічыган"},
{"bg", "Мичиган"}, {"br", "Michigan"}, {"en", "Michigan"}, {"eo", "Miĉigano"},
{"es", "Míchigan"}, {"fa", "میشیگان"}, {"haw", "Mikikana"}, {"he", "מישיגן"},
{"hy", "Միչիգան"}, {"ja", "ミシガン州"}, {"ko", "미시간"}, {"lt", "Mičiganas"},
{"lv", "Mičigana"}, {"nv", "Míshigin"}, {"pl", "Michigan"}, {"ru", "Мичиган"},
{"sr", "Мичиген"}, {"ta", "மிச்சிகன்"}, {"th", "รัฐมิชิแกน"}, {"tl", "Misigan"},
{"uk", "Мічиган"}, {"yi", "מישיגן"}, {"zh", "密歇根州"}};
TEST(TestTransliteration(scotlandTranslations, "Shotlandiya"), ());
TEST(TestTransliteration(michiganTranslations, "Michigan"), ());
}

View file

@ -0,0 +1,58 @@
#include "testing/testing.hpp"
#include "generator/translation.hpp"
#include "coding/transliteration.hpp"
#include "platform/platform.hpp"
#include <string>
#include <utility>
#include <vector>
using namespace generator;
// Transliteration tests ---------------------------------------------------------------------------
using Translations = std::vector<std::pair<std::string, std::string>>;
bool TestTransliteration(Translations const & translations,
std::string const & expectedTransliteration,
std::string const & lang)
{
StringUtf8Multilang name;
for (auto const & langAndTranslation : translations)
{
name.AddString(langAndTranslation.first, langAndTranslation.second);
}
return GetTranslatedOrTransliteratedName(name, StringUtf8Multilang::GetLangIndex(lang)) ==
expectedTransliteration;
}
UNIT_TEST(Transliteration)
{
Transliteration & translit = Transliteration::Instance();
translit.Init(GetPlatform().ResourcesDir());
Translations const scotlandTranslations = {
{"default", "Scotland"}, {"be", "Шатландыя"}, {"cs", "Skotsko"}, {"cy", "Yr Alban"},
{"da", "Skotland"}, {"de", "Schottland"}, {"eo", "Skotlando"}, {"es", "Escocia"},
{"eu", "Eskozia"}, {"fi", "Skotlanti"}, {"fr", "Écosse"}, {"ga", "Albain"},
{"gd", "Alba"}, {"hr", "Škotska"}, {"ia", "Scotia"}, {"io", "Skotia"},
{"ja", "スコットランド"}, {"ku", "Skotland"}, {"lfn", "Scotland"}, {"nl", "Schotland"},
{"pl", "Szkocja"}, {"ru", "Шотландия"}, {"sco", "Scotland"}, {"sk", "Škótsko"},
{"sr", "Шкотска"}, {"sv", "Skottland"}, {"tok", "Sukosi"}, {"tzl", "Escot"},
{"uk", "Шотландія"}, {"vo", "Skotän"}, {"zh", "苏格兰"}};
Translations const michiganTranslations = {
{"default", "Michigan"}, {"ar", "ميشيغان"}, {"az", "Miçiqan"}, {"be", "Мічыган"},
{"bg", "Мичиган"}, {"br", "Michigan"}, {"en", "Michigan"}, {"eo", "Miĉigano"},
{"es", "Míchigan"}, {"fa", "میشیگان"}, {"haw", "Mikikana"}, {"he", "מישיגן"},
{"hy", "Միչիգան"}, {"ja", "ミシガン州"}, {"ko", "미시간"}, {"lt", "Mičiganas"},
{"lv", "Mičigana"}, {"nv", "Míshigin"}, {"pl", "Michigan"}, {"ru", "Мичиган"},
{"sr", "Мичиген"}, {"ta", "மிச்சிகன்"}, {"th", "รัฐมิชิแกน"}, {"tl", "Misigan"},
{"uk", "Мічиган"}, {"yi", "מישיגן"}, {"zh", "密歇根州"}};
TEST(TestTransliteration(scotlandTranslations, "Shotlandiya", "en"), ());
TEST(TestTransliteration(michiganTranslations, "Michigan", "en"), ());
TEST(TestTransliteration(scotlandTranslations, "Shotlandiya", "ru"), ());
TEST(TestTransliteration(michiganTranslations, "Michigan", "ru"), ());
}

View file

@ -1,8 +1,11 @@
#include "translation.hpp"
#include "base/string_utils.hpp"
#include "coding/transliteration.hpp"
#include <unordered_map>
namespace
{
// Languages in order for better transliterations. This is kind

View file

@ -1,13 +1,17 @@
#pragma once
#include "3party/jansson/myjansson.hpp"
#include "coding/string_utf8_multilang.hpp"
#include "3party/jansson/myjansson.hpp"
#include <string>
#include <vector>
namespace generator
{
using LanguageCode = int8_t;
inline std::string GetName(StringUtf8Multilang const & name, int8_t lang)
inline std::string GetName(StringUtf8Multilang const & name, LanguageCode lang)
{
std::string s;
VERIFY(name.GetString(lang, s) != s.empty(), ());
@ -15,8 +19,9 @@ inline std::string GetName(StringUtf8Multilang const & name, int8_t lang)
}
/// This function will take the following steps:
/// 1. Return the |languageCode| name if it exists.
/// 2. Return transliteration trying to use kPreferredLanguagesForTransliterate
/// 1. Return the |languageCode| name if it exists and is ASCII.
/// 2. Try to get International name
/// 3. Return transliteration trying to use kPreferredLanguagesForTransliterate
/// first, then any, if it succeeds.
/// 3. Otherwise, return empty string.
std::string GetTranslatedOrTransliteratedName(StringUtf8Multilang const & name,