1 // Copyright (C) 2012 The Libphonenumber Authors
3 // Licensed under the Apache License, Version 2.0 (the "License");
4 // you may not use this file except in compliance with the License.
5 // You may obtain a copy of the License at
7 // http://www.apache.org/licenses/LICENSE-2.0
9 // Unless required by applicable law or agreed to in writing, software
10 // distributed under the License is distributed on an "AS IS" BASIS,
11 // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12 // See the License for the specific language governing permissions and
13 // limitations under the License.
15 // Author: Patrick Mezard
17 // Basic test cases for MappingFileProvider.
19 #include "phonenumbers/geocoding/area_code_map.h"
24 #include <gtest/gtest.h> // NOLINT(build/include_order)
26 #include "phonenumbers/geocoding/geocoding_data.h"
27 #include "phonenumbers/phonenumber.pb.h"
30 namespace phonenumbers {
38 void MakeCodeMap(const PrefixDescriptions* descriptions,
39 scoped_ptr<AreaCodeMap>* code_map) {
40 scoped_ptr<AreaCodeMap> cm(new AreaCodeMap());
41 cm->ReadAreaCodeMap(descriptions);
45 const int32 prefix_1_us_prefixes[] = {
59 const char* prefix_1_us_descriptions[] = {
73 const int32 prefix_1_us_lengths[] = {
77 const PrefixDescriptions prefix_1_us = {
79 sizeof(prefix_1_us_prefixes) / sizeof(*prefix_1_us_prefixes),
80 prefix_1_us_descriptions,
82 sizeof(prefix_1_us_lengths) / sizeof(*prefix_1_us_lengths),
85 const int32 prefix_39_it_prefixes[] = {
94 const char* prefix_39_it_descriptions[] = {
103 const int32 prefix_39_it_lengths[] = {
107 const PrefixDescriptions prefix_39_it = {
108 prefix_39_it_prefixes,
109 sizeof(prefix_39_it_prefixes) / sizeof(*prefix_39_it_prefixes),
110 prefix_39_it_descriptions,
111 prefix_39_it_lengths,
112 sizeof(prefix_39_it_lengths) / sizeof(*prefix_1_us_lengths),
115 void MakeCodeMapUS(scoped_ptr<AreaCodeMap>* code_map) {
116 MakeCodeMap(&prefix_1_us, code_map);
119 void MakeCodeMapIT(scoped_ptr<AreaCodeMap>* code_map) {
120 MakeCodeMap(&prefix_39_it, code_map);
123 PhoneNumber MakePhoneNumber(int32 country_code, uint64 national_number) {
125 number.set_country_code(country_code);
126 number.set_national_number(national_number);
132 class AreaCodeMapTest : public testing::Test {
134 virtual void SetUp() {
135 MakeCodeMapUS(&map_US_);
136 MakeCodeMapIT(&map_IT_);
139 scoped_ptr<AreaCodeMap> map_US_;
140 scoped_ptr<AreaCodeMap> map_IT_;
143 TEST_F(AreaCodeMapTest, TestLookupInvalidNumberUS) {
144 EXPECT_STREQ("New York", map_US_->Lookup(MakePhoneNumber(1, 2121234567L)));
147 TEST_F(AreaCodeMapTest, TestLookupNumberNJ) {
148 EXPECT_STREQ("Westwood, NJ",
149 map_US_->Lookup(MakePhoneNumber(1, 2016641234L)));
152 TEST_F(AreaCodeMapTest, TestLookupNumberNY) {
153 EXPECT_STREQ("New York", map_US_->Lookup(MakePhoneNumber(1, 2126641234L)));
156 TEST_F(AreaCodeMapTest, TestLookupNumberCA1) {
157 EXPECT_STREQ("San Mateo, CA",
158 map_US_->Lookup(MakePhoneNumber(1, 6503451234LL)));
161 TEST_F(AreaCodeMapTest, TestLookupNumberCA2) {
162 EXPECT_STREQ("California", map_US_->Lookup(MakePhoneNumber(1, 6502531234LL)));
165 TEST_F(AreaCodeMapTest, TestLookupNumberTX) {
166 EXPECT_STREQ("Richardson, TX",
167 map_US_->Lookup(MakePhoneNumber(1, 9724801234LL)));
170 TEST_F(AreaCodeMapTest, TestLookupNumberNotFoundTX) {
171 EXPECT_STREQ(NULL, map_US_->Lookup(MakePhoneNumber(1, 9724811234LL)));
174 TEST_F(AreaCodeMapTest, TestLookupNumberCH) {
175 EXPECT_STREQ(NULL, map_US_->Lookup(MakePhoneNumber(41, 446681300L)));
178 TEST_F(AreaCodeMapTest, TestLookupNumberIT) {
179 PhoneNumber number = MakePhoneNumber(39, 212345678L);
180 number.set_italian_leading_zero(true);
181 EXPECT_STREQ("Milan", map_IT_->Lookup(number));
183 number.set_national_number(612345678L);
184 EXPECT_STREQ("Rome", map_IT_->Lookup(number));
186 number.set_national_number(3211234L);
187 EXPECT_STREQ("Novara", map_IT_->Lookup(number));
190 number.set_national_number(321123456L);
191 number.set_italian_leading_zero(false);
192 EXPECT_STREQ(NULL, map_IT_->Lookup(number));
194 // An invalid number (too short)
195 number.set_national_number(321123L);
196 number.set_italian_leading_zero(true);
197 EXPECT_STREQ("Novara", map_IT_->Lookup(number));
200 } // namespace phonenumbers