786c638a897ecf6b787c75b16e93841720a79558
[platform/upstream/libphonenumber.git] / cpp / test / phonenumbers / geocoding / area_code_map_test.cc
1 // Copyright (C) 2012 The Libphonenumber Authors
2 //
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
6 //
7 // http://www.apache.org/licenses/LICENSE-2.0
8 //
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.
14 //
15 // Author: Patrick Mezard
16 //
17 // Basic test cases for MappingFileProvider.
18
19 #include "phonenumbers/geocoding/area_code_map.h"
20
21 #include <cstddef>
22 #include <vector>
23
24 #include <gtest/gtest.h>  // NOLINT(build/include_order)
25
26 #include "phonenumbers/geocoding/geocoding_data.h"
27 #include "phonenumbers/phonenumber.pb.h"
28
29 namespace i18n {
30 namespace phonenumbers {
31
32 using std::map;
33 using std::string;
34 using std::vector;
35
36 namespace {
37
38 void MakeCodeMap(const PrefixDescriptions* descriptions,
39                  scoped_ptr<AreaCodeMap>* code_map) {
40   scoped_ptr<AreaCodeMap> cm(new AreaCodeMap());
41   cm->ReadAreaCodeMap(descriptions);
42   code_map->swap(cm);
43 }
44
45 const int32 prefix_1_us_prefixes[] = {
46   1212,
47   1480,
48   1650,
49   1907,
50   1201664,
51   1480893,
52   1501372,
53   1626308,
54   1650345,
55   1867993,
56   1972480,
57 };
58
59 const char* prefix_1_us_descriptions[] = {
60   "New York",
61   "Arizona",
62   "California",
63   "Alaska",
64   "Westwood, NJ",
65   "Phoenix, AZ",
66   "Little Rock, AR",
67   "Alhambra, CA",
68   "San Mateo, CA",
69   "Dawson, YT",
70   "Richardson, TX",
71 };
72
73 const int32 prefix_1_us_lengths[] = {
74   4, 7,
75 };
76
77 const PrefixDescriptions prefix_1_us = {
78   prefix_1_us_prefixes,
79   sizeof(prefix_1_us_prefixes) / sizeof(*prefix_1_us_prefixes),
80   prefix_1_us_descriptions,
81   prefix_1_us_lengths,
82   sizeof(prefix_1_us_lengths) / sizeof(*prefix_1_us_lengths),
83 };
84
85 const int32 prefix_39_it_prefixes[] = {
86   3902,
87   3906,
88   39010,
89   390131,
90   390321,
91   390975,
92 };
93
94 const char* prefix_39_it_descriptions[] = {
95   "Milan",
96   "Rome",
97   "Genoa",
98   "Alessandria",
99   "Novara",
100   "Potenza",
101 };
102
103 const int32 prefix_39_it_lengths[] = {
104   4, 5, 6,
105 };
106
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),
113 };
114
115 void MakeCodeMapUS(scoped_ptr<AreaCodeMap>* code_map) {
116   MakeCodeMap(&prefix_1_us, code_map);
117 }
118
119 void MakeCodeMapIT(scoped_ptr<AreaCodeMap>* code_map) {
120   MakeCodeMap(&prefix_39_it, code_map);
121 }
122
123 PhoneNumber MakePhoneNumber(int32 country_code, uint64 national_number) {
124   PhoneNumber number;
125   number.set_country_code(country_code);
126   number.set_national_number(national_number);
127   return number;
128 }
129
130 }  // namespace
131
132 class AreaCodeMapTest : public testing::Test {
133  protected:
134   virtual void SetUp() {
135     MakeCodeMapUS(&map_US_);
136     MakeCodeMapIT(&map_IT_);
137   }
138
139   scoped_ptr<AreaCodeMap> map_US_;
140   scoped_ptr<AreaCodeMap> map_IT_;
141 };
142
143 TEST_F(AreaCodeMapTest, TestLookupInvalidNumberUS) {
144   EXPECT_STREQ("New York", map_US_->Lookup(MakePhoneNumber(1, 2121234567L)));
145 }
146
147 TEST_F(AreaCodeMapTest, TestLookupNumberNJ) {
148   EXPECT_STREQ("Westwood, NJ",
149                map_US_->Lookup(MakePhoneNumber(1, 2016641234L)));
150 }
151
152 TEST_F(AreaCodeMapTest, TestLookupNumberNY) {
153   EXPECT_STREQ("New York", map_US_->Lookup(MakePhoneNumber(1, 2126641234L)));
154 }
155
156 TEST_F(AreaCodeMapTest, TestLookupNumberCA1) {
157   EXPECT_STREQ("San Mateo, CA",
158                map_US_->Lookup(MakePhoneNumber(1, 6503451234L)));
159 }
160
161 TEST_F(AreaCodeMapTest, TestLookupNumberCA2) {
162   EXPECT_STREQ("California", map_US_->Lookup(MakePhoneNumber(1, 6502531234L)));
163 }
164
165 TEST_F(AreaCodeMapTest, TestLookupNumberTX) {
166   EXPECT_STREQ("Richardson, TX",
167             map_US_->Lookup(MakePhoneNumber(1, 9724801234L)));
168 }
169
170 TEST_F(AreaCodeMapTest, TestLookupNumberNotFoundTX) {
171   EXPECT_STREQ(NULL, map_US_->Lookup(MakePhoneNumber(1, 9724811234L)));
172 }
173
174 TEST_F(AreaCodeMapTest, TestLookupNumberCH) {
175   EXPECT_STREQ(NULL, map_US_->Lookup(MakePhoneNumber(41, 446681300L)));
176 }
177
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));
182
183   number.set_national_number(612345678L);
184   EXPECT_STREQ("Rome", map_IT_->Lookup(number));
185
186   number.set_national_number(3211234L);
187   EXPECT_STREQ("Novara", map_IT_->Lookup(number));
188
189   // A mobile number
190   number.set_national_number(321123456L);
191   number.set_italian_leading_zero(false);
192   EXPECT_STREQ(NULL, map_IT_->Lookup(number));
193
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));
198 }
199
200 }  // namespace phonenumbers
201 }  // namespace i18n