2 **********************************************************************
3 * Copyright (c) 2011, International Business Machines
4 * Corporation and others. All Rights Reserved.
5 **********************************************************************
7 * Created: April 8 - 2011
9 **********************************************************************
12 package com.ibm.icu.dev.test.util;
16 import com.ibm.icu.dev.test.TestFmwk;
17 import com.ibm.icu.util.Region;
18 import com.ibm.icu.util.Region.RegionType;
22 * @summary General test of Regions
25 public class RegionTest extends TestFmwk {
27 public static void main(String[] args) throws Exception {
28 new RegionTest().run(args);
31 * Test for known regions.
33 public void TestKnownRegions() {
34 String[][] knownRegions = {
35 // Code , Numeric , Parent, Type
36 { "001", "001", null , "WORLD" },
37 { "002", "002", "001", "CONTINENT" },
38 { "003", "003", null, "GROUPING" },
39 { "005", "005", "019", "SUBCONTINENT" },
40 { "009", "009", "001", "CONTINENT" },
41 { "011", "011", "002", "SUBCONTINENT" },
42 { "013", "013", "019", "SUBCONTINENT" },
43 { "014", "014", "002", "SUBCONTINENT" },
44 { "015", "015", "002", "SUBCONTINENT" },
45 { "017", "017", "002", "SUBCONTINENT" },
46 { "018", "018", "002", "SUBCONTINENT" },
47 { "019", "019", "001", "CONTINENT" },
48 { "021", "021", "019", "SUBCONTINENT" },
49 { "029", "029", "019", "SUBCONTINENT" },
50 { "030", "030", "142", "SUBCONTINENT" },
51 { "034", "034", "142", "SUBCONTINENT" },
52 { "035", "035", "142", "SUBCONTINENT" },
53 { "039", "039", "150", "SUBCONTINENT" },
54 { "053", "053", "009", "SUBCONTINENT" },
55 { "054", "054", "009", "SUBCONTINENT" },
56 { "057", "057", "009", "SUBCONTINENT" },
57 { "061", "061", "009", "SUBCONTINENT" },
58 { "062", "062", null, "DEPRECATED" },
59 { "142", "142", "001", "CONTINENT" },
60 { "143", "143", "142", "SUBCONTINENT" },
61 { "145", "145", "142", "SUBCONTINENT" },
62 { "150", "150", "001", "CONTINENT" },
63 { "151", "151", "150", "SUBCONTINENT" },
64 { "154", "154", "150", "SUBCONTINENT" },
65 { "155", "155", "150", "SUBCONTINENT" },
66 { "419", "419", null, "GROUPING" },
67 { "172", "172", null, "DEPRECATED" },
68 { "200", "200", null, "DEPRECATED" },
69 { "830", "830", null, "DEPRECATED" },
70 { "AC" , "-1" , "QO" , "TERRITORY" },
71 { "AD" , "020", "039", "TERRITORY" },
72 { "AE" , "784", "145", "TERRITORY" },
73 { "AF" , "004", "034", "TERRITORY" },
74 { "AG" , "028", "029", "TERRITORY" },
75 { "AI" , "660", "029", "TERRITORY" },
76 { "AL" , "008", "039", "TERRITORY" },
77 { "AM" , "051", "145", "TERRITORY" },
78 { "AN" , "530", null, "DEPRECATED" },
79 { "AO" , "024", "017", "TERRITORY" },
80 { "AQ" , "010", "QO" , "TERRITORY" },
81 { "AR" , "032", "005", "TERRITORY" },
82 { "AS" , "016", "061", "TERRITORY" },
83 { "AT" , "040", "155", "TERRITORY" },
84 { "AU" , "036", "053", "TERRITORY" },
85 { "AW" , "533", "029", "TERRITORY" },
86 { "AX" , "248", "154", "TERRITORY" },
87 { "AZ" , "031", "145", "TERRITORY" },
88 { "BA" , "070", "039", "TERRITORY" },
89 { "BB" , "052", "029", "TERRITORY" },
90 { "BD" , "050", "034", "TERRITORY" },
91 { "BE" , "056", "155", "TERRITORY" },
92 { "BF" , "854", "011", "TERRITORY" },
93 { "BG" , "100", "151", "TERRITORY" },
94 { "BH" , "048", "145", "TERRITORY" },
95 { "BI" , "108", "014", "TERRITORY" },
96 { "BJ" , "204", "011", "TERRITORY" },
97 { "BL" , "652", "029", "TERRITORY" },
98 { "BM" , "060", "021", "TERRITORY" },
99 { "BN" , "096", "035", "TERRITORY" },
100 { "BO" , "068", "005", "TERRITORY" },
101 { "BQ" , "535", "029", "TERRITORY" },
102 { "BR" , "076", "005", "TERRITORY" },
103 { "BS" , "044", "029", "TERRITORY" },
104 { "BT" , "064", "034", "TERRITORY" },
105 { "BU" , "104", "035", "TERRITORY" },
106 { "BV" , "074", "QO" , "TERRITORY" },
107 { "BW" , "072", "018", "TERRITORY" },
108 { "BY" , "112", "151", "TERRITORY" },
109 { "BZ" , "084", "013", "TERRITORY" },
110 { "CA" , "124", "021", "TERRITORY" },
111 { "CC" , "166", "QO" , "TERRITORY" },
112 { "CD" , "180", "017", "TERRITORY" },
113 { "CF" , "140", "017", "TERRITORY" },
114 { "CG" , "178", "017", "TERRITORY" },
115 { "CH" , "756", "155", "TERRITORY" },
116 { "CI" , "384", "011", "TERRITORY" },
117 { "CK" , "184", "061", "TERRITORY" },
118 { "CL" , "152", "005", "TERRITORY" },
119 { "CM" , "120", "017", "TERRITORY" },
120 { "CN" , "156", "030", "TERRITORY" },
121 { "CO" , "170", "005", "TERRITORY" },
122 { "CP" , "-1" , "QO" , "TERRITORY" },
123 { "CR" , "188", "013", "TERRITORY" },
124 { "CU" , "192", "029", "TERRITORY" },
125 { "CV" , "132", "011", "TERRITORY" },
126 { "CW" , "531", "029", "TERRITORY" },
127 { "CX" , "162", "QO" , "TERRITORY" },
128 { "CY" , "196", "145", "TERRITORY" },
129 { "CZ" , "203", "151", "TERRITORY" },
130 { "DD" , "276", "155", "TERRITORY" },
131 { "DE" , "276", "155", "TERRITORY" },
132 { "DG" , "-1" , "QO" , "TERRITORY" },
133 { "DJ" , "262", "014", "TERRITORY" },
134 { "DK" , "208", "154", "TERRITORY" },
135 { "DM" , "212", "029", "TERRITORY" },
136 { "DO" , "214", "029", "TERRITORY" },
137 { "DY" , "204", "011", "TERRITORY" },
138 { "DZ" , "012", "015", "TERRITORY" },
139 { "EA" , "-1" , "015", "TERRITORY" },
140 { "EC" , "218", "005", "TERRITORY" },
141 { "EE" , "233", "154", "TERRITORY" },
142 { "EG" , "818", "015", "TERRITORY" },
143 { "EH" , "732", "015", "TERRITORY" },
144 { "ER" , "232", "014", "TERRITORY" },
145 { "ES" , "724", "039", "TERRITORY" },
146 { "ET" , "231", "014", "TERRITORY" },
147 { "EU" , "967", null, "GROUPING" },
148 { "FI" , "246", "154", "TERRITORY" },
149 { "FJ" , "242", "054", "TERRITORY" },
150 { "FK" , "238", "005", "TERRITORY" },
151 { "FM" , "583", "057", "TERRITORY" },
152 { "FO" , "234", "154", "TERRITORY" },
153 { "FQ" , "-1", null , "DEPRECATED" },
154 { "FR" , "250", "155", "TERRITORY" },
155 { "FX" , "250", "155", "TERRITORY" },
156 { "GA" , "266", "017", "TERRITORY" },
157 { "GB" , "826", "154", "TERRITORY" },
158 { "GD" , "308", "029", "TERRITORY" },
159 { "GE" , "268", "145", "TERRITORY" },
160 { "GF" , "254", "005", "TERRITORY" },
161 { "GG" , "831", "154", "TERRITORY" },
162 { "GH" , "288", "011", "TERRITORY" },
163 { "GI" , "292", "039", "TERRITORY" },
164 { "GL" , "304", "021", "TERRITORY" },
165 { "GM" , "270", "011", "TERRITORY" },
166 { "GN" , "324", "011", "TERRITORY" },
167 { "GP" , "312", "029", "TERRITORY" },
168 { "GQ" , "226", "017", "TERRITORY" },
169 { "GR" , "300", "039", "TERRITORY" },
170 { "GS" , "239", "QO" , "TERRITORY" },
171 { "GT" , "320", "013", "TERRITORY" },
172 { "GU" , "316", "057", "TERRITORY" },
173 { "GW" , "624", "011", "TERRITORY" },
174 { "GY" , "328", "005", "TERRITORY" },
175 { "HK" , "344", "030", "TERRITORY" },
176 { "HM" , "334", "QO" , "TERRITORY" },
177 { "HN" , "340", "013", "TERRITORY" },
178 { "HR" , "191", "039", "TERRITORY" },
179 { "HT" , "332", "029", "TERRITORY" },
180 { "HU" , "348", "151", "TERRITORY" },
181 { "HV" , "854", "011", "TERRITORY" },
182 { "IC" , "-1" , "015", "TERRITORY" },
183 { "ID" , "360", "035", "TERRITORY" },
184 { "IE" , "372", "154", "TERRITORY" },
185 { "IL" , "376", "145", "TERRITORY" },
186 { "IM" , "833", "154", "TERRITORY" },
187 { "IN" , "356", "034", "TERRITORY" },
188 { "IO" , "086", "QO" , "TERRITORY" },
189 { "IQ" , "368", "145", "TERRITORY" },
190 { "IR" , "364", "034", "TERRITORY" },
191 { "IS" , "352", "154", "TERRITORY" },
192 { "IT" , "380", "039", "TERRITORY" },
193 { "JE" , "832", "154", "TERRITORY" },
194 { "JM" , "388", "029", "TERRITORY" },
195 { "JO" , "400", "145", "TERRITORY" },
196 { "JP" , "392", "030", "TERRITORY" },
197 { "JT" , "581", "QO" , "TERRITORY" },
198 { "KE" , "404", "014", "TERRITORY" },
199 { "KG" , "417", "143", "TERRITORY" },
200 { "KH" , "116", "035", "TERRITORY" },
201 { "KI" , "296", "057", "TERRITORY" },
202 { "KM" , "174", "014", "TERRITORY" },
203 { "KN" , "659", "029", "TERRITORY" },
204 { "KP" , "408", "030", "TERRITORY" },
205 { "KR" , "410", "030", "TERRITORY" },
206 { "KW" , "414", "145", "TERRITORY" },
207 { "KY" , "136", "029", "TERRITORY" },
208 { "KZ" , "398", "143", "TERRITORY" },
209 { "LA" , "418", "035", "TERRITORY" },
210 { "LB" , "422", "145", "TERRITORY" },
211 { "LC" , "662", "029", "TERRITORY" },
212 { "LI" , "438", "155", "TERRITORY" },
213 { "LK" , "144", "034", "TERRITORY" },
214 { "LR" , "430", "011", "TERRITORY" },
215 { "LS" , "426", "018", "TERRITORY" },
216 { "LT" , "440", "154", "TERRITORY" },
217 { "LU" , "442", "155", "TERRITORY" },
218 { "LV" , "428", "154", "TERRITORY" },
219 { "LY" , "434", "015", "TERRITORY" },
220 { "MA" , "504", "015", "TERRITORY" },
221 { "MC" , "492", "155", "TERRITORY" },
222 { "MD" , "498", "151", "TERRITORY" },
223 { "ME" , "499", "039", "TERRITORY" },
224 { "MF" , "663", "029", "TERRITORY" },
225 { "MG" , "450", "014", "TERRITORY" },
226 { "MH" , "584", "057", "TERRITORY" },
227 { "MI" , "581", "QO" , "TERRITORY" },
228 { "MK" , "807", "039", "TERRITORY" },
229 { "ML" , "466", "011", "TERRITORY" },
230 { "MM" , "104", "035", "TERRITORY" },
231 { "MN" , "496", "030", "TERRITORY" },
232 { "MO" , "446", "030", "TERRITORY" },
233 { "MP" , "580", "057", "TERRITORY" },
234 { "MQ" , "474", "029", "TERRITORY" },
235 { "MR" , "478", "011", "TERRITORY" },
236 { "MS" , "500", "029", "TERRITORY" },
237 { "MT" , "470", "039", "TERRITORY" },
238 { "MU" , "480", "014", "TERRITORY" },
239 { "MV" , "462", "034", "TERRITORY" },
240 { "MW" , "454", "014", "TERRITORY" },
241 { "MX" , "484", "013", "TERRITORY" },
242 { "MY" , "458", "035", "TERRITORY" },
243 { "MZ" , "508", "014", "TERRITORY" },
244 { "NA" , "516", "018", "TERRITORY" },
245 { "NC" , "540", "054", "TERRITORY" },
246 { "NE" , "562", "011", "TERRITORY" },
247 { "NF" , "574", "053", "TERRITORY" },
248 { "NG" , "566", "011", "TERRITORY" },
249 { "NH" , "548", "054", "TERRITORY" },
250 { "NI" , "558", "013", "TERRITORY" },
251 { "NL" , "528", "155", "TERRITORY" },
252 { "NO" , "578", "154", "TERRITORY" },
253 { "NP" , "524", "034", "TERRITORY" },
254 { "NQ" , "010", "QO" , "TERRITORY" },
255 { "NR" , "520", "057", "TERRITORY" },
256 { "NT" , "536", null , "DEPRECATED" },
257 { "NU" , "570", "061", "TERRITORY" },
258 { "NZ" , "554", "053", "TERRITORY" },
259 { "OM" , "512", "145", "TERRITORY" },
260 { "PA" , "591", "013", "TERRITORY" },
261 { "PC" , "-1", null, "DEPRECATED" },
262 { "PE" , "604", "005", "TERRITORY" },
263 { "PF" , "258", "061", "TERRITORY" },
264 { "PG" , "598", "054", "TERRITORY" },
265 { "PH" , "608", "035", "TERRITORY" },
266 { "PK" , "586", "034", "TERRITORY" },
267 { "PL" , "616", "151", "TERRITORY" },
268 { "PM" , "666", "021", "TERRITORY" },
269 { "PN" , "612", "061", "TERRITORY" },
270 { "PR" , "630", "029", "TERRITORY" },
271 { "PS" , "275", "145", "TERRITORY" },
272 { "PT" , "620", "039", "TERRITORY" },
273 { "PU" , "581", "QO" , "TERRITORY" },
274 { "PW" , "585", "057", "TERRITORY" },
275 { "PY" , "600", "005", "TERRITORY" },
276 { "PZ" , "591", "013", "TERRITORY" },
277 { "QA" , "634", "145", "TERRITORY" },
278 { "QO" , "961", "009", "SUBCONTINENT" },
279 { "QU" , "967", null, "GROUPING" },
280 { "RE" , "638", "014", "TERRITORY" },
281 { "RO" , "642", "151", "TERRITORY" },
282 { "RS" , "688", "039", "TERRITORY" },
283 { "RU" , "643", "151", "TERRITORY" },
284 { "RW" , "646", "014", "TERRITORY" },
285 { "SA" , "682", "145", "TERRITORY" },
286 { "SB" , "090", "054", "TERRITORY" },
287 { "SC" , "690", "014", "TERRITORY" },
288 { "SD" , "736", "015", "TERRITORY" },
289 { "SE" , "752", "154", "TERRITORY" },
290 { "SG" , "702", "035", "TERRITORY" },
291 { "SH" , "654", "011", "TERRITORY" },
292 { "SI" , "705", "039", "TERRITORY" },
293 { "SJ" , "744", "154", "TERRITORY" },
294 { "SK" , "703", "151", "TERRITORY" },
295 { "SL" , "694", "011", "TERRITORY" },
296 { "SM" , "674", "039", "TERRITORY" },
297 { "SN" , "686", "011", "TERRITORY" },
298 { "SO" , "706", "014", "TERRITORY" },
299 { "SR" , "740", "005", "TERRITORY" },
300 { "ST" , "678", "017", "TERRITORY" },
301 { "SU" , "810", null , "DEPRECATED" },
302 { "SV" , "222", "013", "TERRITORY" },
303 { "SX" , "534", "029", "TERRITORY" },
304 { "SY" , "760", "145", "TERRITORY" },
305 { "SZ" , "748", "018", "TERRITORY" },
306 { "TA" , "-1" , "QO", "TERRITORY" },
307 { "TC" , "796", "029", "TERRITORY" },
308 { "TD" , "148", "017", "TERRITORY" },
309 { "TF" , "260", "QO" , "TERRITORY" },
310 { "TG" , "768", "011", "TERRITORY" },
311 { "TH" , "764", "035", "TERRITORY" },
312 { "TJ" , "762", "143", "TERRITORY" },
313 { "TK" , "772", "061", "TERRITORY" },
314 { "TL" , "626", "035", "TERRITORY" },
315 { "TM" , "795", "143", "TERRITORY" },
316 { "TN" , "788", "015", "TERRITORY" },
317 { "TO" , "776", "061", "TERRITORY" },
318 { "TP" , "626", "035", "TERRITORY" },
319 { "TR" , "792", "145", "TERRITORY" },
320 { "TT" , "780", "029", "TERRITORY" },
321 { "TV" , "798", "061", "TERRITORY" },
322 { "TW" , "158", "030", "TERRITORY" },
323 { "TZ" , "834", "014", "TERRITORY" },
324 { "UA" , "804", "151", "TERRITORY" },
325 { "UG" , "800", "014", "TERRITORY" },
326 { "UM" , "581", "QO" , "TERRITORY" },
327 { "US" , "840", "021", "TERRITORY" },
328 { "UY" , "858", "005", "TERRITORY" },
329 { "UZ" , "860", "143", "TERRITORY" },
330 { "VA" , "336", "039", "TERRITORY" },
331 { "VC" , "670", "029", "TERRITORY" },
332 { "VE" , "862", "005", "TERRITORY" },
333 { "VG" , "092", "029", "TERRITORY" },
334 { "VI" , "850", "029", "TERRITORY" },
335 { "VN" , "704", "035", "TERRITORY" },
336 { "VU" , "548", "054", "TERRITORY" },
337 { "WF" , "876", "061", "TERRITORY" },
338 { "WS" , "882", "061", "TERRITORY" },
339 { "YD" , "887", "145", "TERRITORY" },
340 { "YE" , "887", "145", "TERRITORY" },
341 { "YT" , "175", "014", "TERRITORY" },
342 { "ZA" , "710", "018", "TERRITORY" },
343 { "ZM" , "894", "014", "TERRITORY" },
344 { "ZR" , "180", "017", "TERRITORY" },
345 { "ZW" , "716", "014", "TERRITORY" },
346 { "ZZ" , "999", null , "UNKNOWN" }
349 for (String [] rd : knownRegions ) {
351 Region r = Region.get(rd[0]);
352 int n = r.getNumericCode();
353 int e = Integer.valueOf(rd[1]).intValue();
355 errln("Numeric code mismatch for region " + r.toString() + ". Expected: " + e + " Got:" + n);
357 Region c = r.getContainingRegion();
360 errln("Parent for " + r.toString() + " should have been NULL. Got: " + c.toString());
363 Region p = Region.get(rd[2]);
365 errln("Expected parent of region " + r.toString() + " was " + p.toString() + ". Got: " + ( c == null ? "NULL" : c.toString()) );
368 if (!r.isOfType(Region.RegionType.valueOf(rd[3]))) {
369 errln("Expected region " + r.toString() + " to be of type " + rd[3] + ". Got:" + r.getType().toString());
371 int nc = Integer.valueOf(rd[1]).intValue();
373 Region ncRegion = Region.get(nc);
374 if ( !ncRegion.equals(r) && nc != 891 ) { // 891 is special case - CS and YU both deprecated codes for region 891
375 errln("Creating region " + r.toString() + " by its numeric code returned a different region. Got: " + ncRegion.toString());
378 } catch (IllegalArgumentException ex ) {
379 errln("Known region " + rd[0] + "was not recognized.");
384 public void TestBadArguments() {
387 errln("Calling Region.get(null) should have thrown a NullPointerException, but didn't.");
388 } catch ( NullPointerException ex ) {
389 // Do nothing - we're supposed to get here.
393 errln("Calling Region.get(BOGUS) should have thrown a IllegalArgumentException, but didn't.");
394 } catch ( IllegalArgumentException ex ) {
395 // Do nothing - we're supposed to get here.
399 errln("Calling Region.get(-123) should have thrown a IllegalArgumentException, but didn't.");
400 } catch ( IllegalArgumentException ex ) {
401 // Do nothing - we're supposed to get here.
404 public void TestAvailableRegions() {
405 // Test to make sure that the set of territories contained in World and the set of all available
406 // territories are one and the same.
407 Set<Region> availableTerritories = Region.getAvailable(RegionType.TERRITORY);
408 Region world = Region.get("001");
409 Set<Region> containedInWorld = world.getContainedTerritories();
410 if ( !availableTerritories.equals(containedInWorld) ) {
411 errln("Available territories and all territories contained in world should be the same set." +
412 "Available = " + availableTerritories.toString() +
413 " : Contained in World = " + containedInWorld.toString());