Welcome to mirror list, hosted at ThFree Co, Russian Federation.

feature_metadata_test.cpp « indexer_tests « indexer - github.com/mapsme/omim.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
blob: 1f88dc780cfb1b015d4dec447d4d232df89a3a92 (plain)
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
#include "testing/testing.hpp"

#include "indexer/feature_meta.hpp"

#include "coding/reader.hpp"
#include "coding/writer.hpp"

#include "std/map.hpp"
#include "std/target_os.hpp"

using feature::Metadata;

namespace
{
map<Metadata::EType, string> const kKeyValues =
{
  {Metadata::FMD_ELE, "12345"},
  {Metadata::FMD_CUISINE, "greek;mediterranean"},
  {Metadata::FMD_EMAIL, "cool@email.at"},
  // This string is longer than 255 bytes.
  {Metadata::FMD_URL, "http://rskxmkjwnikfnjqhyv"
                      "kpjgaghhyhukjyenduiuanxgb"
                      "mndtlpfphdgaizfcpzuiuspcp"
                      "umeojwvekvjprlutwjmxudyzr"
                      "lwwsepewevsuqelobqcfdzsoq"
                      "ozkesghojribepbaitivmaqep"
                      "hheckitonddqhbapdybhetvnw"
                      "vlchjafepdjaeoaapysdvculx"
                      "uwjbgdddryodiihvnpvmkgqvs"
                      "mawbdsrbmnndcozmrgeoahbkh"
                      "cevxkmtdqnxpxlsju.org"}
};
} // namespace

UNIT_TEST(Feature_Metadata_GetSet)
{
  Metadata m;
  Metadata::EType const type = Metadata::FMD_ELE;
  // Absent types should return empty values.
  TEST_EQUAL(m.Get(type), "", ());
  m.Set(type, "12345");
  TEST_EQUAL(m.Get(type), "12345", ());
  TEST_EQUAL(m.Size(), 1, ());
  // Same types should replace old metadata values.
  m.Set(type, "5678");
  TEST_EQUAL(m.Get(type), "5678", ());
  // Empty values should drop fields.
  m.Set(type, "");
  TEST_EQUAL(m.Get(type), "", ());
  TEST_EQUAL(m.Size(), 0, ());
  TEST(m.Empty(), ());
}

UNIT_TEST(Feature_Metadata_PresentTypes)
{
  Metadata m;
  for (auto const & value : kKeyValues)
    m.Set(value.first, value.second);
  TEST_EQUAL(m.Size(), kKeyValues.size(), ());

  auto const types = m.GetPresentTypes();
  TEST_EQUAL(types.size(), m.Size(), ());
  for (auto const & type : types)
    TEST_EQUAL(m.Get(type), kKeyValues.find(static_cast<Metadata::EType>(type))->second, ());
}

UNIT_TEST(Feature_Serialization)
{
  Metadata original;
  for (auto const & value : kKeyValues)
    original.Set(value.first, value.second);
  TEST_EQUAL(original.Size(), kKeyValues.size(), ());

  {
    Metadata serialized;
    vector<char> buffer;
    MemWriter<decltype(buffer)> writer(buffer);
    original.Serialize(writer);

    MemReader reader(buffer.data(), buffer.size());
    ReaderSource<MemReader> src(reader);
    serialized.Deserialize(src);

    for (auto const & value : kKeyValues)
      TEST_EQUAL(serialized.Get(value.first), value.second, ());
    TEST_EQUAL(serialized.Get(Metadata::FMD_OPERATOR), "", ());
    TEST_EQUAL(serialized.Size(), kKeyValues.size(), ());
  }
}

UNIT_TEST(Feature_Metadata_GetWikipedia)
{
  Metadata m;
  Metadata::EType const wikiType = Metadata::FMD_WIKIPEDIA;
  m.Set(wikiType, "en:Article");
  TEST_EQUAL(m.Get(wikiType), "en:Article", ());
#ifdef OMIM_OS_MOBILE
  TEST_EQUAL(m.GetWikiURL(), "https://en.m.wikipedia.org/wiki/Article", ());
#else
  TEST_EQUAL(m.GetWikiURL(), "https://en.wikipedia.org/wiki/Article", ());
#endif
}

UNIT_TEST(Feature_Metadata_RegionData_Languages)
{
  {
    feature::RegionData rd;
    vector<string> const langs = {"ru", "en", "et"};
    rd.SetLanguages(langs);
    TEST(rd.HasLanguage(StringUtf8Multilang::GetLangIndex("ru")), ());
    TEST(rd.HasLanguage(StringUtf8Multilang::GetLangIndex("en")), ());
    TEST(rd.HasLanguage(StringUtf8Multilang::GetLangIndex("et")), ());
    TEST(!rd.HasLanguage(StringUtf8Multilang::GetLangIndex("es")), ());
    TEST(!rd.IsSingleLanguage(StringUtf8Multilang::GetLangIndex("ru")), ());
  }
  {
    feature::RegionData rd;
    vector<string> const langs = {"et"};
    rd.SetLanguages(langs);
    TEST(rd.HasLanguage(StringUtf8Multilang::GetLangIndex("et")), ());
    TEST(rd.IsSingleLanguage(StringUtf8Multilang::GetLangIndex("et")), ());
    TEST(!rd.HasLanguage(StringUtf8Multilang::GetLangIndex("en")), ());
    TEST(!rd.IsSingleLanguage(StringUtf8Multilang::GetLangIndex("en")), ());
  }
}