11767c5feSopenharmony_ci// Copyright (C) 2012 The Libphonenumber Authors
21767c5feSopenharmony_ci//
31767c5feSopenharmony_ci// Licensed under the Apache License, Version 2.0 (the "License");
41767c5feSopenharmony_ci// you may not use this file except in compliance with the License.
51767c5feSopenharmony_ci// You may obtain a copy of the License at
61767c5feSopenharmony_ci//
71767c5feSopenharmony_ci// http://www.apache.org/licenses/LICENSE-2.0
81767c5feSopenharmony_ci//
91767c5feSopenharmony_ci// Unless required by applicable law or agreed to in writing, software
101767c5feSopenharmony_ci// distributed under the License is distributed on an "AS IS" BASIS,
111767c5feSopenharmony_ci// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
121767c5feSopenharmony_ci// See the License for the specific language governing permissions and
131767c5feSopenharmony_ci// limitations under the License.
141767c5feSopenharmony_ci//
151767c5feSopenharmony_ci// Author: Patrick Mezard
161767c5feSopenharmony_ci
171767c5feSopenharmony_ci#include <cmath>
181767c5feSopenharmony_ci#include <set>
191767c5feSopenharmony_ci#include <string>
201767c5feSopenharmony_ci
211767c5feSopenharmony_ci#include <gtest/gtest.h>  // NOLINT(build/include_order)
221767c5feSopenharmony_ci
231767c5feSopenharmony_ci#include "phonenumbers/base/basictypes.h"
241767c5feSopenharmony_ci#include "phonenumbers/geocoding/geocoding_data.h"
251767c5feSopenharmony_ci#include "phonenumbers/geocoding/geocoding_test_data.h"
261767c5feSopenharmony_ci
271767c5feSopenharmony_ci#include "absl/container/btree_set.h"
281767c5feSopenharmony_ci
291767c5feSopenharmony_cinamespace i18n {
301767c5feSopenharmony_cinamespace phonenumbers {
311767c5feSopenharmony_ci
321767c5feSopenharmony_ciusing std::set;
331767c5feSopenharmony_ciusing std::string;
341767c5feSopenharmony_ci
351767c5feSopenharmony_cinamespace {
361767c5feSopenharmony_ci
371767c5feSopenharmony_citypedef const CountryLanguages* (*country_languages_getter)(int index);
381767c5feSopenharmony_citypedef const PrefixDescriptions* (*prefix_descriptions_getter)(int index);
391767c5feSopenharmony_ci
401767c5feSopenharmony_civoid TestCountryLanguages(const CountryLanguages* languages) {
411767c5feSopenharmony_ci  EXPECT_GT(languages->available_languages_size, 0);
421767c5feSopenharmony_ci  for (int i = 0; i < languages->available_languages_size; ++i) {
431767c5feSopenharmony_ci    string language(languages->available_languages[i]);
441767c5feSopenharmony_ci    EXPECT_GT(language.size(), 0);
451767c5feSopenharmony_ci    if (i > 0) {
461767c5feSopenharmony_ci      EXPECT_LT(string(languages->available_languages[i - 1]),
471767c5feSopenharmony_ci                language);
481767c5feSopenharmony_ci    }
491767c5feSopenharmony_ci  }
501767c5feSopenharmony_ci}
511767c5feSopenharmony_ci
521767c5feSopenharmony_civoid TestCountryCallingCodeLanguages(
531767c5feSopenharmony_ci    const int* country_calling_codes, int country_calling_codes_size,
541767c5feSopenharmony_ci    country_languages_getter get_country_languages) {
551767c5feSopenharmony_ci  EXPECT_GT(country_calling_codes_size, 0);
561767c5feSopenharmony_ci  for (int i = 0; i < country_calling_codes_size; ++i) {
571767c5feSopenharmony_ci    int code = country_calling_codes[i];
581767c5feSopenharmony_ci    EXPECT_GT(code, 0);
591767c5feSopenharmony_ci    if (i > 0) {
601767c5feSopenharmony_ci      EXPECT_LT(country_calling_codes[i-1], code);
611767c5feSopenharmony_ci    }
621767c5feSopenharmony_ci    TestCountryLanguages(get_country_languages(i));
631767c5feSopenharmony_ci  }
641767c5feSopenharmony_ci}
651767c5feSopenharmony_ci
661767c5feSopenharmony_civoid TestPrefixDescriptions(const PrefixDescriptions* descriptions) {
671767c5feSopenharmony_ci  EXPECT_GT(descriptions->prefixes_size, 0);
681767c5feSopenharmony_ci  absl::btree_set<int> possible_lengths;
691767c5feSopenharmony_ci  for (int i = 0; i < descriptions->prefixes_size; ++i) {
701767c5feSopenharmony_ci    int prefix = descriptions->prefixes[i];
711767c5feSopenharmony_ci    EXPECT_GT(prefix, 0);
721767c5feSopenharmony_ci    if (i > 0) {
731767c5feSopenharmony_ci      EXPECT_LT(descriptions->prefixes[i - 1], prefix);
741767c5feSopenharmony_ci    }
751767c5feSopenharmony_ci    possible_lengths.insert(log10(prefix) + 1);
761767c5feSopenharmony_ci  }
771767c5feSopenharmony_ci
781767c5feSopenharmony_ci  EXPECT_GT(descriptions->possible_lengths_size, 0);
791767c5feSopenharmony_ci  for (int i = 0; i < descriptions->possible_lengths_size; ++i) {
801767c5feSopenharmony_ci    int possible_length = descriptions->possible_lengths[i];
811767c5feSopenharmony_ci    EXPECT_GT(possible_length, 0);
821767c5feSopenharmony_ci    if (i > 0) {
831767c5feSopenharmony_ci      EXPECT_LT(descriptions->possible_lengths[i - 1], possible_length);
841767c5feSopenharmony_ci    }
851767c5feSopenharmony_ci    EXPECT_TRUE(
861767c5feSopenharmony_ci        possible_lengths.find(possible_length) != possible_lengths.end());
871767c5feSopenharmony_ci  }
881767c5feSopenharmony_ci}
891767c5feSopenharmony_ci
901767c5feSopenharmony_civoid TestAllPrefixDescriptions(
911767c5feSopenharmony_ci    const char** prefix_language_code_pairs,
921767c5feSopenharmony_ci    int prefix_language_code_pairs_size,
931767c5feSopenharmony_ci    prefix_descriptions_getter get_prefix_descriptions) {
941767c5feSopenharmony_ci  EXPECT_GT(prefix_language_code_pairs_size, 0);
951767c5feSopenharmony_ci  for (int i = 0; i < prefix_language_code_pairs_size; ++i) {
961767c5feSopenharmony_ci    string language_code_pair(prefix_language_code_pairs[i]);
971767c5feSopenharmony_ci    EXPECT_GT(language_code_pair.size(), 0);
981767c5feSopenharmony_ci    if (i > 0) {
991767c5feSopenharmony_ci      EXPECT_LT(string(prefix_language_code_pairs[i - 1]),
1001767c5feSopenharmony_ci                language_code_pair);
1011767c5feSopenharmony_ci    }
1021767c5feSopenharmony_ci    TestPrefixDescriptions(get_prefix_descriptions(i));
1031767c5feSopenharmony_ci  }
1041767c5feSopenharmony_ci}
1051767c5feSopenharmony_ci
1061767c5feSopenharmony_ci}  // namespace
1071767c5feSopenharmony_ci
1081767c5feSopenharmony_ciTEST(GeocodingDataTest, TestCountryCallingCodeLanguages) {
1091767c5feSopenharmony_ci  TestCountryCallingCodeLanguages(get_country_calling_codes(),
1101767c5feSopenharmony_ci                                  get_country_calling_codes_size(),
1111767c5feSopenharmony_ci                                  get_country_languages);
1121767c5feSopenharmony_ci}
1131767c5feSopenharmony_ci
1141767c5feSopenharmony_ciTEST(GeocodingDataTest, TestTestCountryCallingCodeLanguages) {
1151767c5feSopenharmony_ci  TestCountryCallingCodeLanguages(get_test_country_calling_codes(),
1161767c5feSopenharmony_ci                                  get_test_country_calling_codes_size(),
1171767c5feSopenharmony_ci                                  get_test_country_languages);
1181767c5feSopenharmony_ci}
1191767c5feSopenharmony_ci
1201767c5feSopenharmony_ciTEST(GeocodingDataTest, TestPrefixDescriptions) {
1211767c5feSopenharmony_ci  TestAllPrefixDescriptions(get_prefix_language_code_pairs(),
1221767c5feSopenharmony_ci                            get_prefix_language_code_pairs_size(),
1231767c5feSopenharmony_ci                            get_prefix_descriptions);
1241767c5feSopenharmony_ci}
1251767c5feSopenharmony_ci
1261767c5feSopenharmony_ci
1271767c5feSopenharmony_ciTEST(GeocodingDataTest, TestTestPrefixDescriptions) {
1281767c5feSopenharmony_ci  TestAllPrefixDescriptions(get_test_prefix_language_code_pairs(),
1291767c5feSopenharmony_ci                            get_test_prefix_language_code_pairs_size(),
1301767c5feSopenharmony_ci                            get_test_prefix_descriptions);
1311767c5feSopenharmony_ci}
1321767c5feSopenharmony_ci
1331767c5feSopenharmony_ciTEST(GeocodingDataTest, TestTestGeocodingData) {
1341767c5feSopenharmony_ci  ASSERT_EQ(3, get_test_country_calling_codes_size());
1351767c5feSopenharmony_ci  const int* country_calling_codes = get_test_country_calling_codes();
1361767c5feSopenharmony_ci  const int expected_calling_codes[] = {1, 54, 82};
1371767c5feSopenharmony_ci  for (int i = 0; i < get_test_country_calling_codes_size(); ++i) {
1381767c5feSopenharmony_ci    EXPECT_EQ(expected_calling_codes[i], country_calling_codes[i]);
1391767c5feSopenharmony_ci  }
1401767c5feSopenharmony_ci
1411767c5feSopenharmony_ci  const CountryLanguages* langs_1 = get_test_country_languages(0);
1421767c5feSopenharmony_ci  ASSERT_EQ(2, langs_1->available_languages_size);
1431767c5feSopenharmony_ci  const char* expected_languages[] = {"de", "en"};
1441767c5feSopenharmony_ci  for (int i = 0; i < langs_1->available_languages_size; ++i) {
1451767c5feSopenharmony_ci    EXPECT_STREQ(expected_languages[i], langs_1->available_languages[i]);
1461767c5feSopenharmony_ci  }
1471767c5feSopenharmony_ci
1481767c5feSopenharmony_ci  ASSERT_EQ(5, get_test_prefix_language_code_pairs_size());
1491767c5feSopenharmony_ci  const char** language_code_pairs = get_test_prefix_language_code_pairs();
1501767c5feSopenharmony_ci  const char* expected_language_code_pairs[] = {
1511767c5feSopenharmony_ci    "1_de", "1_en", "54_en", "82_en", "82_ko",
1521767c5feSopenharmony_ci  };
1531767c5feSopenharmony_ci  for (int i = 0; i < get_test_prefix_language_code_pairs_size(); ++i) {
1541767c5feSopenharmony_ci    EXPECT_STREQ(expected_language_code_pairs[i], language_code_pairs[i]);
1551767c5feSopenharmony_ci  }
1561767c5feSopenharmony_ci
1571767c5feSopenharmony_ci  const PrefixDescriptions* desc_1_de = get_test_prefix_descriptions(0);
1581767c5feSopenharmony_ci  ASSERT_EQ(2, desc_1_de->prefixes_size);
1591767c5feSopenharmony_ci  const int32 expected_prefixes[] = {1201, 1650};
1601767c5feSopenharmony_ci  const char* expected_descriptions[] = {
1611767c5feSopenharmony_ci    "New Jersey",
1621767c5feSopenharmony_ci    "Kalifornien",
1631767c5feSopenharmony_ci  };
1641767c5feSopenharmony_ci  for (int i = 0; i < desc_1_de->prefixes_size; ++i) {
1651767c5feSopenharmony_ci    EXPECT_EQ(expected_prefixes[i], desc_1_de->prefixes[i]);
1661767c5feSopenharmony_ci    EXPECT_STREQ(expected_descriptions[i], desc_1_de->descriptions[i]);
1671767c5feSopenharmony_ci  }
1681767c5feSopenharmony_ci
1691767c5feSopenharmony_ci  ASSERT_EQ(1, desc_1_de->possible_lengths_size);
1701767c5feSopenharmony_ci  const int expected_lengths[] = {4};
1711767c5feSopenharmony_ci  for (int i = 0; i < desc_1_de->possible_lengths_size; ++i) {
1721767c5feSopenharmony_ci    EXPECT_EQ(expected_lengths[i], desc_1_de->possible_lengths[i]);
1731767c5feSopenharmony_ci  }
1741767c5feSopenharmony_ci}
1751767c5feSopenharmony_ci
1761767c5feSopenharmony_ci}  // namespace phonenumbers
1771767c5feSopenharmony_ci}  // namespace i18n
178