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