• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 /*
2  * Copyright (C) 2012 The Libphonenumber Authors
3  *
4  * Licensed under the Apache License, Version 2.0 (the "License");
5  * you may not use this file except in compliance with the License.
6  * You may obtain a copy of the License at
7  *
8  * http://www.apache.org/licenses/LICENSE-2.0
9  *
10  * Unless required by applicable law or agreed to in writing, software
11  * distributed under the License is distributed on an "AS IS" BASIS,
12  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13  * See the License for the specific language governing permissions and
14  * limitations under the License.
15  */
16 
17 package com.android.i18n.phonenumbers.prefixmapper;
18 
19 import com.android.i18n.phonenumbers.Phonenumber.PhoneNumber;
20 import junit.framework.TestCase;
21 
22 import java.io.ByteArrayInputStream;
23 import java.io.ByteArrayOutputStream;
24 import java.io.IOException;
25 import java.io.ObjectInputStream;
26 import java.io.ObjectOutputStream;
27 import java.util.ArrayList;
28 import java.util.List;
29 import java.util.SortedMap;
30 import java.util.TreeMap;
31 
32 /**
33  * Unittests for PrefixTimeZonesMap.java
34  */
35 public class PrefixTimeZonesMapTest extends TestCase {
36   private final PrefixTimeZonesMap prefixTimeZonesMapForUS = new PrefixTimeZonesMap();
37   private final PrefixTimeZonesMap prefixTimeZonesMapForRU = new PrefixTimeZonesMap();
38 
39   // US time zones
40   private static final String CHICAGO_TZ = "America/Chicago";
41   private static final String DENVER_TZ = "America/Denver";
42   private static final String LOS_ANGELES_TZ = "America/Los_Angeles";
43   private static final String NEW_YORK_TZ = "America/New_York";
44 
45   // Russian time zones
46   private static final String IRKUTSK_TZ = "Asia/Irkutsk";
47   private static final String MOSCOW_TZ = "Europe/Moscow";
48   private static final String VLADIVOSTOK_TZ = "Asia/Vladivostok";
49   private static final String YEKATERINBURG_TZ = "Asia/Yekaterinburg";
50 
PrefixTimeZonesMapTest()51   public PrefixTimeZonesMapTest() {
52     SortedMap<Integer, String> sortedMapForUS = new TreeMap<Integer, String>();
53     sortedMapForUS.put(1, NEW_YORK_TZ + "&" + CHICAGO_TZ + "&" + LOS_ANGELES_TZ + "&" + DENVER_TZ);
54     sortedMapForUS.put(1201, NEW_YORK_TZ);
55     sortedMapForUS.put(1205, CHICAGO_TZ);
56     sortedMapForUS.put(1208292, LOS_ANGELES_TZ);
57     sortedMapForUS.put(1208234, DENVER_TZ);
58     sortedMapForUS.put(1541367, LOS_ANGELES_TZ);
59     sortedMapForUS.put(1423843, NEW_YORK_TZ);
60     sortedMapForUS.put(1402721, CHICAGO_TZ);
61     sortedMapForUS.put(1208888, DENVER_TZ);
62 
63     prefixTimeZonesMapForUS.readPrefixTimeZonesMap(sortedMapForUS);
64 
65     SortedMap<Integer, String> sortedMapForRU = new TreeMap<Integer, String>();
66     sortedMapForRU.put(7421, VLADIVOSTOK_TZ);
67     sortedMapForRU.put(7879, MOSCOW_TZ);
68     sortedMapForRU.put(7342, YEKATERINBURG_TZ);
69     sortedMapForRU.put(7395, IRKUTSK_TZ);
70 
71     prefixTimeZonesMapForRU.readPrefixTimeZonesMap(sortedMapForRU);
72   }
73 
buildListOfTimeZones(String .... timezones)74   static List<String> buildListOfTimeZones(String ... timezones) {
75     ArrayList<String> timezonesList = new ArrayList<String>(timezones.length);
76     for (String timezone : timezones) {
77       timezonesList.add(timezone);
78     }
79     return timezonesList;
80   }
81 
createMapCandidate()82   private static SortedMap<Integer, String> createMapCandidate() {
83     SortedMap<Integer, String> sortedMap = new TreeMap<Integer, String>();
84     sortedMap.put(1212, NEW_YORK_TZ);
85     sortedMap.put(1213, NEW_YORK_TZ);
86     sortedMap.put(1214, NEW_YORK_TZ);
87     sortedMap.put(1480, CHICAGO_TZ);
88     return sortedMap;
89   }
90 
testLookupTimeZonesForNumberCountryLevel_US()91   public void testLookupTimeZonesForNumberCountryLevel_US() {
92     PhoneNumber number = new PhoneNumber();
93     number.setCountryCode(1).setNationalNumber(1000000000L);
94     assertEquals(buildListOfTimeZones(NEW_YORK_TZ, CHICAGO_TZ, LOS_ANGELES_TZ, DENVER_TZ),
95                  prefixTimeZonesMapForUS.lookupTimeZonesForNumber(number));
96   }
97 
testLookupTimeZonesForNumber_ValidNumber_Chicago()98   public void testLookupTimeZonesForNumber_ValidNumber_Chicago() {
99     PhoneNumber number = new PhoneNumber();
100     number.setCountryCode(1).setNationalNumber(2051235458L);
101     assertEquals(buildListOfTimeZones(CHICAGO_TZ),
102                  prefixTimeZonesMapForUS.lookupTimeZonesForNumber(number));
103   }
104 
testLookupTimeZonesForNumber_LA()105   public void testLookupTimeZonesForNumber_LA() {
106     PhoneNumber number = new PhoneNumber();
107     number.setCountryCode(1).setNationalNumber(2082924565L);
108     assertEquals(buildListOfTimeZones(LOS_ANGELES_TZ),
109                  prefixTimeZonesMapForUS.lookupTimeZonesForNumber(number));
110   }
111 
testLookupTimeZonesForNumber_NY()112   public void testLookupTimeZonesForNumber_NY() {
113     PhoneNumber number = new PhoneNumber();
114     number.setCountryCode(1).setNationalNumber(2016641234L);
115     assertEquals(buildListOfTimeZones(NEW_YORK_TZ),
116                  prefixTimeZonesMapForUS.lookupTimeZonesForNumber(number));
117   }
118 
testLookupTimeZonesForNumber_CH()119   public void testLookupTimeZonesForNumber_CH() {
120     PhoneNumber number = new PhoneNumber();
121     number.setCountryCode(41).setNationalNumber(446681300L);
122     assertEquals(buildListOfTimeZones(),
123                  prefixTimeZonesMapForUS.lookupTimeZonesForNumber(number));
124   }
125 
testLookupTimeZonesForNumber_RU()126   public void testLookupTimeZonesForNumber_RU() {
127     PhoneNumber number = new PhoneNumber();
128     number.setCountryCode(7).setNationalNumber(87945154L);
129     assertEquals(buildListOfTimeZones(MOSCOW_TZ),
130                  prefixTimeZonesMapForRU.lookupTimeZonesForNumber(number));
131 
132     number.setNationalNumber(421548578L);
133     assertEquals(buildListOfTimeZones(VLADIVOSTOK_TZ),
134                  prefixTimeZonesMapForRU.lookupTimeZonesForNumber(number));
135 
136     number.setNationalNumber(342457897L);
137     assertEquals(buildListOfTimeZones(YEKATERINBURG_TZ),
138                  prefixTimeZonesMapForRU.lookupTimeZonesForNumber(number));
139 
140     // A mobile number
141     number.setNationalNumber(9342457897L);
142     assertEquals(buildListOfTimeZones(),
143                  prefixTimeZonesMapForRU.lookupTimeZonesForNumber(number));
144 
145     // An invalid number (too short)
146     number.setNationalNumber(3951L);
147     assertEquals(buildListOfTimeZones(IRKUTSK_TZ),
148                  prefixTimeZonesMapForRU.lookupTimeZonesForNumber(number));
149   }
150 
151   /**
152    * Creates a new PrefixTimeZonesMap serializing the provided map to a stream and then reading
153    * this stream. The resulting PrefixTimeZonesMap is expected to be strictly equal to the provided
154    * one from which it was generated.
155    */
createNewPrefixTimeZonesMap( PrefixTimeZonesMap prefixTimeZonesMap)156   private static PrefixTimeZonesMap createNewPrefixTimeZonesMap(
157       PrefixTimeZonesMap prefixTimeZonesMap) throws IOException {
158     ByteArrayOutputStream byteArrayOutputStream = new ByteArrayOutputStream();
159     ObjectOutputStream objectOutputStream = new ObjectOutputStream(byteArrayOutputStream);
160     prefixTimeZonesMap.writeExternal(objectOutputStream);
161     objectOutputStream.flush();
162 
163     PrefixTimeZonesMap newPrefixTimeZonesMap = new PrefixTimeZonesMap();
164     newPrefixTimeZonesMap.readExternal(
165         new ObjectInputStream(new ByteArrayInputStream(byteArrayOutputStream.toByteArray())));
166     return newPrefixTimeZonesMap;
167   }
168 
testReadWriteExternal()169   public void testReadWriteExternal() throws IOException {
170     PrefixTimeZonesMap localPrefixTimeZonesMap = new PrefixTimeZonesMap();
171     localPrefixTimeZonesMap.readPrefixTimeZonesMap(createMapCandidate());
172 
173     PrefixTimeZonesMap newPrefixTimeZonesMap = createNewPrefixTimeZonesMap(localPrefixTimeZonesMap);
174     assertEquals(localPrefixTimeZonesMap.toString(), newPrefixTimeZonesMap.toString());
175   }
176 }
177