| @ -0,0 +1,176 @@ | |||
| // Copyright (C) 2012 The Libphonenumber Authors | |||
| // | |||
| // Licensed under the Apache License, Version 2.0 (the "License"); | |||
| // you may not use this file except in compliance with the License. | |||
| // You may obtain a copy of the License at | |||
| // | |||
| // http://www.apache.org/licenses/LICENSE-2.0 | |||
| // | |||
| // Unless required by applicable law or agreed to in writing, software | |||
| // distributed under the License is distributed on an "AS IS" BASIS, | |||
| // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. | |||
| // See the License for the specific language governing permissions and | |||
| // limitations under the License. | |||
| // | |||
| // Author: Patrick Mezard | |||
| #include <cmath> | |||
| #include <set> | |||
| #include <string> | |||
| #include <gtest/gtest.h> // NOLINT(build/include_order) | |||
| #include "base/basictypes.h" | |||
| #include "phonenumbers/geocoding/geocoding_data.h" | |||
| #include "phonenumbers/geocoding/geocoding_test_data.h" | |||
| #include "phonenumbers/stringutil.h" | |||
| namespace i18n { | |||
| namespace phonenumbers { | |||
| using std::set; | |||
| using std::string; | |||
| namespace { | |||
| typedef const CountryLanguages* (*country_languages_getter)(int index); | |||
| typedef const PrefixDescriptions* (*prefix_descriptions_getter)(int index); | |||
| void TestCountryLanguages(const CountryLanguages* languages) { | |||
| EXPECT_GT(languages->available_languages_size, 0); | |||
| for (int i = 0; i < languages->available_languages_size; ++i) { | |||
| string language(languages->available_languages[i]); | |||
| EXPECT_GT(language.size(), 0); | |||
| if (i > 0) { | |||
| EXPECT_LT(string(languages->available_languages[i - 1]), | |||
| language); | |||
| } | |||
| } | |||
| } | |||
| void TestCountryCallingCodeLanguages( | |||
| const int* country_calling_codes, int country_calling_codes_size, | |||
| country_languages_getter get_country_languages) { | |||
| EXPECT_GT(country_calling_codes_size, 0); | |||
| for (int i = 0; i < country_calling_codes_size; ++i) { | |||
| int code = country_calling_codes[i]; | |||
| EXPECT_GT(code, 0); | |||
| if (i > 0) { | |||
| EXPECT_LT(country_calling_codes[i-1], code); | |||
| } | |||
| TestCountryLanguages(get_country_languages(i)); | |||
| } | |||
| } | |||
| void TestPrefixDescriptions(const PrefixDescriptions* descriptions) { | |||
| EXPECT_GT(descriptions->prefixes_size, 0); | |||
| set<int> possible_lengths; | |||
| for (int i = 0; i < descriptions->prefixes_size; ++i) { | |||
| int prefix = descriptions->prefixes[i]; | |||
| EXPECT_GT(prefix, 0); | |||
| if (i > 0) { | |||
| EXPECT_LT(descriptions->prefixes[i - 1], prefix); | |||
| } | |||
| possible_lengths.insert(log10(prefix) + 1); | |||
| } | |||
| EXPECT_GT(descriptions->possible_lengths_size, 0); | |||
| for (int i = 0; i < descriptions->possible_lengths_size; ++i) { | |||
| int possible_length = descriptions->possible_lengths[i]; | |||
| EXPECT_GT(possible_length, 0); | |||
| if (i > 0) { | |||
| EXPECT_LT(descriptions->possible_lengths[i - 1], possible_length); | |||
| } | |||
| EXPECT_TRUE( | |||
| possible_lengths.find(possible_length) != possible_lengths.end()); | |||
| } | |||
| } | |||
| void TestAllPrefixDescriptions( | |||
| const char** prefix_language_code_pairs, | |||
| int prefix_language_code_pairs_size, | |||
| prefix_descriptions_getter get_prefix_descriptions) { | |||
| EXPECT_GT(prefix_language_code_pairs_size, 0); | |||
| for (int i = 0; i < prefix_language_code_pairs_size; ++i) { | |||
| string language_code_pair(prefix_language_code_pairs[i]); | |||
| EXPECT_GT(language_code_pair.size(), 0); | |||
| if (i > 0) { | |||
| EXPECT_LT(string(prefix_language_code_pairs[i - 1]), | |||
| language_code_pair); | |||
| } | |||
| TestPrefixDescriptions(get_prefix_descriptions(i)); | |||
| } | |||
| } | |||
| } // namespace | |||
| TEST(GeocodingDataTest, TestCountryCallingCodeLanguages) { | |||
| TestCountryCallingCodeLanguages(get_country_calling_codes(), | |||
| get_country_calling_codes_size(), | |||
| get_country_languages); | |||
| } | |||
| TEST(GeocodingDataTest, TestTestCountryCallingCodeLanguages) { | |||
| TestCountryCallingCodeLanguages(get_test_country_calling_codes(), | |||
| get_test_country_calling_codes_size(), | |||
| get_test_country_languages); | |||
| } | |||
| TEST(GeocodingDataTest, TestPrefixDescriptions) { | |||
| TestAllPrefixDescriptions(get_prefix_language_code_pairs(), | |||
| get_prefix_language_code_pairs_size(), | |||
| get_prefix_descriptions); | |||
| } | |||
| TEST(GeocodingDataTest, TestTestPrefixDescriptions) { | |||
| TestAllPrefixDescriptions(get_test_prefix_language_code_pairs(), | |||
| get_test_prefix_language_code_pairs_size(), | |||
| get_test_prefix_descriptions); | |||
| } | |||
| TEST(GeocodingDataTest, TestTestGeocodingData) { | |||
| ASSERT_EQ(2, get_test_country_calling_codes_size()); | |||
| const int* country_calling_codes = get_test_country_calling_codes(); | |||
| const int expected_calling_codes[] = {1, 82}; | |||
| for (int i = 0; i < get_test_country_calling_codes_size(); ++i) { | |||
| EXPECT_EQ(expected_calling_codes[i], country_calling_codes[i]); | |||
| } | |||
| const CountryLanguages* langs_1 = get_test_country_languages(0); | |||
| ASSERT_EQ(2, langs_1->available_languages_size); | |||
| const char* expected_languages[] = {"de", "en"}; | |||
| for (int i = 0; i < langs_1->available_languages_size; ++i) { | |||
| EXPECT_STREQ(expected_languages[i], langs_1->available_languages[i]); | |||
| } | |||
| ASSERT_EQ(4, get_test_prefix_language_code_pairs_size()); | |||
| const char** language_code_pairs = get_test_prefix_language_code_pairs(); | |||
| const char* expected_language_code_pairs[] = { | |||
| "1_de", "1_en", "82_en", "82_ko", | |||
| }; | |||
| for (int i = 0; i < get_test_prefix_language_code_pairs_size(); ++i) { | |||
| EXPECT_STREQ(expected_language_code_pairs[i], language_code_pairs[i]); | |||
| } | |||
| const PrefixDescriptions* desc_1_de = get_test_prefix_descriptions(0); | |||
| ASSERT_EQ(2, desc_1_de->prefixes_size); | |||
| const int32 expected_prefixes[] = {1201, 1650}; | |||
| const char* expected_descriptions[] = { | |||
| "New Jerse", | |||
| "Kalifornie", | |||
| }; | |||
| for (int i = 0; i < desc_1_de->prefixes_size; ++i) { | |||
| EXPECT_EQ(expected_prefixes[i], desc_1_de->prefixes[i]); | |||
| EXPECT_STREQ(expected_descriptions[i], desc_1_de->descriptions[i]); | |||
| } | |||
| ASSERT_EQ(1, desc_1_de->possible_lengths_size); | |||
| const int expected_lengths[] = {4}; | |||
| for (int i = 0; i < desc_1_de->possible_lengths_size; ++i) { | |||
| EXPECT_EQ(expected_lengths[i], desc_1_de->possible_lengths[i]); | |||
| } | |||
| } | |||
| } // namespace phonenumbers | |||
| } // namespace i18n | |||