/* | |
********************************************************************** | |
* Copyright (c) 2011, International Business Machines | |
* Corporation and others. All Rights Reserved. | |
********************************************************************** | |
* Author: John Emmons | |
* Created: April 8 - 2011 | |
* Since: ICU 4.8 | |
********************************************************************** | |
*/ | |
package com.ibm.icu.dev.test.util; | |
import java.util.Set; | |
import com.ibm.icu.dev.test.TestFmwk; | |
import com.ibm.icu.util.Region; | |
import com.ibm.icu.util.Region.RegionType; | |
/** | |
* @test | |
* @summary General test of Regions | |
*/ | |
public class RegionTest extends TestFmwk { | |
public static void main(String[] args) throws Exception { | |
new RegionTest().run(args); | |
} | |
/** | |
* Test for known regions. | |
*/ | |
public void TestKnownRegions() { | |
String[][] knownRegions = { | |
// Code , Numeric , Parent, Type | |
{ "001", "001", null , "WORLD" }, | |
{ "002", "002", "001", "CONTINENT" }, | |
{ "003", "003", null, "GROUPING" }, | |
{ "005", "005", "019", "SUBCONTINENT" }, | |
{ "009", "009", "001", "CONTINENT" }, | |
{ "011", "011", "002", "SUBCONTINENT" }, | |
{ "013", "013", "019", "SUBCONTINENT" }, | |
{ "014", "014", "002", "SUBCONTINENT" }, | |
{ "015", "015", "002", "SUBCONTINENT" }, | |
{ "017", "017", "002", "SUBCONTINENT" }, | |
{ "018", "018", "002", "SUBCONTINENT" }, | |
{ "019", "019", "001", "CONTINENT" }, | |
{ "021", "021", "019", "SUBCONTINENT" }, | |
{ "029", "029", "019", "SUBCONTINENT" }, | |
{ "030", "030", "142", "SUBCONTINENT" }, | |
{ "034", "034", "142", "SUBCONTINENT" }, | |
{ "035", "035", "142", "SUBCONTINENT" }, | |
{ "039", "039", "150", "SUBCONTINENT" }, | |
{ "053", "053", "009", "SUBCONTINENT" }, | |
{ "054", "054", "009", "SUBCONTINENT" }, | |
{ "057", "057", "009", "SUBCONTINENT" }, | |
{ "061", "061", "009", "SUBCONTINENT" }, | |
{ "062", "062", null, "DEPRECATED" }, | |
{ "142", "142", "001", "CONTINENT" }, | |
{ "143", "143", "142", "SUBCONTINENT" }, | |
{ "145", "145", "142", "SUBCONTINENT" }, | |
{ "150", "150", "001", "CONTINENT" }, | |
{ "151", "151", "150", "SUBCONTINENT" }, | |
{ "154", "154", "150", "SUBCONTINENT" }, | |
{ "155", "155", "150", "SUBCONTINENT" }, | |
{ "419", "419", null, "GROUPING" }, | |
{ "172", "172", null, "DEPRECATED" }, | |
{ "200", "200", null, "DEPRECATED" }, | |
{ "830", "830", null, "DEPRECATED" }, | |
{ "AC" , "-1" , "QO" , "TERRITORY" }, | |
{ "AD" , "020", "039", "TERRITORY" }, | |
{ "AE" , "784", "145", "TERRITORY" }, | |
{ "AF" , "004", "034", "TERRITORY" }, | |
{ "AG" , "028", "029", "TERRITORY" }, | |
{ "AI" , "660", "029", "TERRITORY" }, | |
{ "AL" , "008", "039", "TERRITORY" }, | |
{ "AM" , "051", "145", "TERRITORY" }, | |
{ "AN" , "530", "029", "TERRITORY" }, | |
{ "AO" , "024", "017", "TERRITORY" }, | |
{ "AQ" , "010", "QO" , "TERRITORY" }, | |
{ "AR" , "032", "005", "TERRITORY" }, | |
{ "AS" , "016", "061", "TERRITORY" }, | |
{ "AT" , "040", "155", "TERRITORY" }, | |
{ "AU" , "036", "053", "TERRITORY" }, | |
{ "AW" , "533", "029", "TERRITORY" }, | |
{ "AX" , "248", "154", "TERRITORY" }, | |
{ "AZ" , "031", "145", "TERRITORY" }, | |
{ "BA" , "070", "039", "TERRITORY" }, | |
{ "BB" , "052", "029", "TERRITORY" }, | |
{ "BD" , "050", "034", "TERRITORY" }, | |
{ "BE" , "056", "155", "TERRITORY" }, | |
{ "BF" , "854", "011", "TERRITORY" }, | |
{ "BG" , "100", "151", "TERRITORY" }, | |
{ "BH" , "048", "145", "TERRITORY" }, | |
{ "BI" , "108", "014", "TERRITORY" }, | |
{ "BJ" , "204", "011", "TERRITORY" }, | |
{ "BL" , "652", "029", "TERRITORY" }, | |
{ "BM" , "060", "021", "TERRITORY" }, | |
{ "BN" , "096", "035", "TERRITORY" }, | |
{ "BO" , "068", "005", "TERRITORY" }, | |
{ "BQ" , "010", "QO" , "TERRITORY" }, | |
{ "BR" , "076", "005", "TERRITORY" }, | |
{ "BS" , "044", "029", "TERRITORY" }, | |
{ "BT" , "064", "034", "TERRITORY" }, | |
{ "BU" , "104", "035", "TERRITORY" }, | |
{ "BV" , "074", "QO" , "TERRITORY" }, | |
{ "BW" , "072", "018", "TERRITORY" }, | |
{ "BY" , "112", "151", "TERRITORY" }, | |
{ "BZ" , "084", "013", "TERRITORY" }, | |
{ "CA" , "124", "021", "TERRITORY" }, | |
{ "CC" , "166", "QO" , "TERRITORY" }, | |
{ "CD" , "180", "017", "TERRITORY" }, | |
{ "CF" , "140", "017", "TERRITORY" }, | |
{ "CG" , "178", "017", "TERRITORY" }, | |
{ "CH" , "756", "155", "TERRITORY" }, | |
{ "CI" , "384", "011", "TERRITORY" }, | |
{ "CK" , "184", "061", "TERRITORY" }, | |
{ "CL" , "152", "005", "TERRITORY" }, | |
{ "CM" , "120", "017", "TERRITORY" }, | |
{ "CN" , "156", "030", "TERRITORY" }, | |
{ "CO" , "170", "005", "TERRITORY" }, | |
{ "CP" , "-1" , "QO" , "TERRITORY" }, | |
{ "CR" , "188", "013", "TERRITORY" }, | |
{ "CS" , "891", null , "DEPRECATED" }, | |
{ "CU" , "192", "029", "TERRITORY" }, | |
{ "CV" , "132", "011", "TERRITORY" }, | |
{ "CX" , "162", "QO" , "TERRITORY" }, | |
{ "CY" , "196", "145", "TERRITORY" }, | |
{ "CZ" , "203", "151", "TERRITORY" }, | |
{ "DD" , "276", "155", "TERRITORY" }, | |
{ "DE" , "276", "155", "TERRITORY" }, | |
{ "DG" , "-1" , "QO" , "TERRITORY" }, | |
{ "DJ" , "262", "014", "TERRITORY" }, | |
{ "DK" , "208", "154", "TERRITORY" }, | |
{ "DM" , "212", "029", "TERRITORY" }, | |
{ "DO" , "214", "029", "TERRITORY" }, | |
{ "DY" , "204", "011", "TERRITORY" }, | |
{ "DZ" , "012", "015", "TERRITORY" }, | |
{ "EA" , "-1" , "015", "TERRITORY" }, | |
{ "EC" , "218", "005", "TERRITORY" }, | |
{ "EE" , "233", "154", "TERRITORY" }, | |
{ "EG" , "818", "015", "TERRITORY" }, | |
{ "EH" , "732", "015", "TERRITORY" }, | |
{ "ER" , "232", "014", "TERRITORY" }, | |
{ "ES" , "724", "039", "TERRITORY" }, | |
{ "ET" , "231", "014", "TERRITORY" }, | |
{ "EU" , "967", null, "GROUPING" }, | |
{ "FI" , "246", "154", "TERRITORY" }, | |
{ "FJ" , "242", "054", "TERRITORY" }, | |
{ "FK" , "238", "005", "TERRITORY" }, | |
{ "FM" , "583", "057", "TERRITORY" }, | |
{ "FO" , "234", "154", "TERRITORY" }, | |
{ "FQ" , "-1", null , "DEPRECATED" }, | |
{ "FR" , "250", "155", "TERRITORY" }, | |
{ "FX" , "250", "155", "TERRITORY" }, | |
{ "GA" , "266", "017", "TERRITORY" }, | |
{ "GB" , "826", "154", "TERRITORY" }, | |
{ "GD" , "308", "029", "TERRITORY" }, | |
{ "GE" , "268", "145", "TERRITORY" }, | |
{ "GF" , "254", "005", "TERRITORY" }, | |
{ "GG" , "831", "154", "TERRITORY" }, | |
{ "GH" , "288", "011", "TERRITORY" }, | |
{ "GI" , "292", "039", "TERRITORY" }, | |
{ "GL" , "304", "021", "TERRITORY" }, | |
{ "GM" , "270", "011", "TERRITORY" }, | |
{ "GN" , "324", "011", "TERRITORY" }, | |
{ "GP" , "312", "029", "TERRITORY" }, | |
{ "GQ" , "226", "017", "TERRITORY" }, | |
{ "GR" , "300", "039", "TERRITORY" }, | |
{ "GS" , "239", "QO" , "TERRITORY" }, | |
{ "GT" , "320", "013", "TERRITORY" }, | |
{ "GU" , "316", "057", "TERRITORY" }, | |
{ "GW" , "624", "011", "TERRITORY" }, | |
{ "GY" , "328", "005", "TERRITORY" }, | |
{ "HK" , "344", "030", "TERRITORY" }, | |
{ "HM" , "334", "QO" , "TERRITORY" }, | |
{ "HN" , "340", "013", "TERRITORY" }, | |
{ "HR" , "191", "039", "TERRITORY" }, | |
{ "HT" , "332", "029", "TERRITORY" }, | |
{ "HU" , "348", "151", "TERRITORY" }, | |
{ "HV" , "854", "011", "TERRITORY" }, | |
{ "IC" , "-1" , "015", "TERRITORY" }, | |
{ "ID" , "360", "035", "TERRITORY" }, | |
{ "IE" , "372", "154", "TERRITORY" }, | |
{ "IL" , "376", "145", "TERRITORY" }, | |
{ "IM" , "833", "154", "TERRITORY" }, | |
{ "IN" , "356", "034", "TERRITORY" }, | |
{ "IO" , "086", "QO" , "TERRITORY" }, | |
{ "IQ" , "368", "145", "TERRITORY" }, | |
{ "IR" , "364", "034", "TERRITORY" }, | |
{ "IS" , "352", "154", "TERRITORY" }, | |
{ "IT" , "380", "039", "TERRITORY" }, | |
{ "JE" , "832", "154", "TERRITORY" }, | |
{ "JM" , "388", "029", "TERRITORY" }, | |
{ "JO" , "400", "145", "TERRITORY" }, | |
{ "JP" , "392", "030", "TERRITORY" }, | |
{ "JT" , "581", "QO" , "TERRITORY" }, | |
{ "KE" , "404", "014", "TERRITORY" }, | |
{ "KG" , "417", "143", "TERRITORY" }, | |
{ "KH" , "116", "035", "TERRITORY" }, | |
{ "KI" , "296", "057", "TERRITORY" }, | |
{ "KM" , "174", "014", "TERRITORY" }, | |
{ "KN" , "659", "029", "TERRITORY" }, | |
{ "KP" , "408", "030", "TERRITORY" }, | |
{ "KR" , "410", "030", "TERRITORY" }, | |
{ "KW" , "414", "145", "TERRITORY" }, | |
{ "KY" , "136", "029", "TERRITORY" }, | |
{ "KZ" , "398", "143", "TERRITORY" }, | |
{ "LA" , "418", "035", "TERRITORY" }, | |
{ "LB" , "422", "145", "TERRITORY" }, | |
{ "LC" , "662", "029", "TERRITORY" }, | |
{ "LI" , "438", "155", "TERRITORY" }, | |
{ "LK" , "144", "034", "TERRITORY" }, | |
{ "LR" , "430", "011", "TERRITORY" }, | |
{ "LS" , "426", "018", "TERRITORY" }, | |
{ "LT" , "440", "154", "TERRITORY" }, | |
{ "LU" , "442", "155", "TERRITORY" }, | |
{ "LV" , "428", "154", "TERRITORY" }, | |
{ "LY" , "434", "015", "TERRITORY" }, | |
{ "MA" , "504", "015", "TERRITORY" }, | |
{ "MC" , "492", "155", "TERRITORY" }, | |
{ "MD" , "498", "151", "TERRITORY" }, | |
{ "ME" , "499", "039", "TERRITORY" }, | |
{ "MF" , "663", "029", "TERRITORY" }, | |
{ "MG" , "450", "014", "TERRITORY" }, | |
{ "MH" , "584", "057", "TERRITORY" }, | |
{ "MI" , "581", "QO" , "TERRITORY" }, | |
{ "MK" , "807", "039", "TERRITORY" }, | |
{ "ML" , "466", "011", "TERRITORY" }, | |
{ "MM" , "104", "035", "TERRITORY" }, | |
{ "MN" , "496", "030", "TERRITORY" }, | |
{ "MO" , "446", "030", "TERRITORY" }, | |
{ "MP" , "580", "057", "TERRITORY" }, | |
{ "MQ" , "474", "029", "TERRITORY" }, | |
{ "MR" , "478", "011", "TERRITORY" }, | |
{ "MS" , "500", "029", "TERRITORY" }, | |
{ "MT" , "470", "039", "TERRITORY" }, | |
{ "MU" , "480", "014", "TERRITORY" }, | |
{ "MV" , "462", "034", "TERRITORY" }, | |
{ "MW" , "454", "014", "TERRITORY" }, | |
{ "MX" , "484", "013", "TERRITORY" }, | |
{ "MY" , "458", "035", "TERRITORY" }, | |
{ "MZ" , "508", "014", "TERRITORY" }, | |
{ "NA" , "516", "018", "TERRITORY" }, | |
{ "NC" , "540", "054", "TERRITORY" }, | |
{ "NE" , "562", "011", "TERRITORY" }, | |
{ "NF" , "574", "053", "TERRITORY" }, | |
{ "NG" , "566", "011", "TERRITORY" }, | |
{ "NH" , "548", "054", "TERRITORY" }, | |
{ "NI" , "558", "013", "TERRITORY" }, | |
{ "NL" , "528", "155", "TERRITORY" }, | |
{ "NO" , "578", "154", "TERRITORY" }, | |
{ "NP" , "524", "034", "TERRITORY" }, | |
{ "NQ" , "010", "QO" , "TERRITORY" }, | |
{ "NR" , "520", "057", "TERRITORY" }, | |
{ "NT" , "536", null , "DEPRECATED" }, | |
{ "NU" , "570", "061", "TERRITORY" }, | |
{ "NZ" , "554", "053", "TERRITORY" }, | |
{ "OM" , "512", "145", "TERRITORY" }, | |
{ "PA" , "591", "013", "TERRITORY" }, | |
{ "PC" , "-1", null, "DEPRECATED" }, | |
{ "PE" , "604", "005", "TERRITORY" }, | |
{ "PF" , "258", "061", "TERRITORY" }, | |
{ "PG" , "598", "054", "TERRITORY" }, | |
{ "PH" , "608", "035", "TERRITORY" }, | |
{ "PK" , "586", "034", "TERRITORY" }, | |
{ "PL" , "616", "151", "TERRITORY" }, | |
{ "PM" , "666", "021", "TERRITORY" }, | |
{ "PN" , "612", "061", "TERRITORY" }, | |
{ "PR" , "630", "029", "TERRITORY" }, | |
{ "PS" , "275", "145", "TERRITORY" }, | |
{ "PT" , "620", "039", "TERRITORY" }, | |
{ "PU" , "581", "QO" , "TERRITORY" }, | |
{ "PW" , "585", "057", "TERRITORY" }, | |
{ "PY" , "600", "005", "TERRITORY" }, | |
{ "PZ" , "591", "013", "TERRITORY" }, | |
{ "QA" , "634", "145", "TERRITORY" }, | |
{ "QO" , "961", "009", "SUBCONTINENT" }, | |
{ "QU" , "967", null, "GROUPING" }, | |
{ "RE" , "638", "014", "TERRITORY" }, | |
{ "RO" , "642", "151", "TERRITORY" }, | |
{ "RS" , "688", "039", "TERRITORY" }, | |
{ "RU" , "643", "151", "TERRITORY" }, | |
{ "RW" , "646", "014", "TERRITORY" }, | |
{ "SA" , "682", "145", "TERRITORY" }, | |
{ "SB" , "090", "054", "TERRITORY" }, | |
{ "SC" , "690", "014", "TERRITORY" }, | |
{ "SD" , "736", "015", "TERRITORY" }, | |
{ "SE" , "752", "154", "TERRITORY" }, | |
{ "SG" , "702", "035", "TERRITORY" }, | |
{ "SH" , "654", "011", "TERRITORY" }, | |
{ "SI" , "705", "039", "TERRITORY" }, | |
{ "SJ" , "744", "154", "TERRITORY" }, | |
{ "SK" , "703", "151", "TERRITORY" }, | |
{ "SL" , "694", "011", "TERRITORY" }, | |
{ "SM" , "674", "039", "TERRITORY" }, | |
{ "SN" , "686", "011", "TERRITORY" }, | |
{ "SO" , "706", "014", "TERRITORY" }, | |
{ "SR" , "740", "005", "TERRITORY" }, | |
{ "ST" , "678", "017", "TERRITORY" }, | |
{ "SU" , "810", null , "DEPRECATED" }, | |
{ "SV" , "222", "013", "TERRITORY" }, | |
{ "SY" , "760", "145", "TERRITORY" }, | |
{ "SZ" , "748", "018", "TERRITORY" }, | |
{ "TA" , "-1" , "QO", "TERRITORY" }, | |
{ "TC" , "796", "029", "TERRITORY" }, | |
{ "TD" , "148", "017", "TERRITORY" }, | |
{ "TF" , "260", "QO" , "TERRITORY" }, | |
{ "TG" , "768", "011", "TERRITORY" }, | |
{ "TH" , "764", "035", "TERRITORY" }, | |
{ "TJ" , "762", "143", "TERRITORY" }, | |
{ "TK" , "772", "061", "TERRITORY" }, | |
{ "TL" , "626", "035", "TERRITORY" }, | |
{ "TM" , "795", "143", "TERRITORY" }, | |
{ "TN" , "788", "015", "TERRITORY" }, | |
{ "TO" , "776", "061", "TERRITORY" }, | |
{ "TP" , "626", "035", "TERRITORY" }, | |
{ "TR" , "792", "145", "TERRITORY" }, | |
{ "TT" , "780", "029", "TERRITORY" }, | |
{ "TV" , "798", "061", "TERRITORY" }, | |
{ "TW" , "158", "030", "TERRITORY" }, | |
{ "TZ" , "834", "014", "TERRITORY" }, | |
{ "UA" , "804", "151", "TERRITORY" }, | |
{ "UG" , "800", "014", "TERRITORY" }, | |
{ "UM" , "581", "QO" , "TERRITORY" }, | |
{ "US" , "840", "021", "TERRITORY" }, | |
{ "UY" , "858", "005", "TERRITORY" }, | |
{ "UZ" , "860", "143", "TERRITORY" }, | |
{ "VA" , "336", "039", "TERRITORY" }, | |
{ "VC" , "670", "029", "TERRITORY" }, | |
{ "VE" , "862", "005", "TERRITORY" }, | |
{ "VG" , "092", "029", "TERRITORY" }, | |
{ "VI" , "850", "029", "TERRITORY" }, | |
{ "VN" , "704", "035", "TERRITORY" }, | |
{ "VU" , "548", "054", "TERRITORY" }, | |
{ "WF" , "876", "061", "TERRITORY" }, | |
{ "WS" , "882", "061", "TERRITORY" }, | |
{ "YD" , "887", "145", "TERRITORY" }, | |
{ "YE" , "887", "145", "TERRITORY" }, | |
{ "YT" , "175", "014", "TERRITORY" }, | |
{ "YU" , "891", null , "DEPRECATED" }, | |
{ "ZA" , "710", "018", "TERRITORY" }, | |
{ "ZM" , "894", "014", "TERRITORY" }, | |
{ "ZR" , "180", "017", "TERRITORY" }, | |
{ "ZW" , "716", "014", "TERRITORY" }, | |
{ "ZZ" , "999", null , "UNKNOWN" } | |
}; | |
for (String [] rd : knownRegions ) { | |
try { | |
Region r = Region.get(rd[0]); | |
int n = r.getNumericCode(); | |
int e = Integer.valueOf(rd[1]).intValue(); | |
if ( n != e ) { | |
errln("Numeric code mismatch for region " + r.toString() + ". Expected: " + e + " Got:" + n); | |
} | |
Region c = r.getContainingRegion(); | |
if (rd[2] == null) { | |
if ( c != null) { | |
errln("Parent for " + r.toString() + " should have been NULL. Got: " + c.toString()); | |
} | |
} else { | |
Region p = Region.get(rd[2]); | |
if ( !p.equals(c)) { | |
errln("Expected parent of region " + r.toString() + " was " + p.toString() + ". Got: " + ( c == null ? "NULL" : c.toString()) ); | |
} | |
} | |
if (!r.isOfType(Region.RegionType.valueOf(rd[3]))) { | |
errln("Expected region " + r.toString() + " to be of type " + rd[3] + ". Got:" + r.getType().toString()); | |
} | |
int nc = Integer.valueOf(rd[1]).intValue(); | |
if ( nc > 0 ) { | |
Region ncRegion = Region.get(nc); | |
if ( !ncRegion.equals(r) && nc != 891 ) { // 891 is special case - CS and YU both deprecated codes for region 891 | |
errln("Creating region " + r.toString() + " by its numeric code returned a different region. Got: " + ncRegion.toString()); | |
} | |
} | |
} catch (IllegalArgumentException ex ) { | |
errln("Known region " + rd[0] + "was not recognized."); | |
} | |
} | |
} | |
public void TestBadArguments() { | |
try { | |
Region.get(null); | |
errln("Calling Region.get(null) should have thrown a NullPointerException, but didn't."); | |
} catch ( NullPointerException ex ) { | |
// Do nothing - we're supposed to get here. | |
} | |
try { | |
Region.get("BOGUS"); | |
errln("Calling Region.get(BOGUS) should have thrown a IllegalArgumentException, but didn't."); | |
} catch ( IllegalArgumentException ex ) { | |
// Do nothing - we're supposed to get here. | |
} | |
try { | |
Region.get(-123); | |
errln("Calling Region.get(-123) should have thrown a IllegalArgumentException, but didn't."); | |
} catch ( IllegalArgumentException ex ) { | |
// Do nothing - we're supposed to get here. | |
} | |
} | |
public void TestAvailableRegions() { | |
// Test to make sure that the set of territories contained in World and the set of all available | |
// territories are one and the same. | |
Set<Region> availableTerritories = Region.getAvailable(RegionType.TERRITORY); | |
Region world = Region.get("001"); | |
Set<Region> containedInWorld = world.getContainedTerritories(); | |
if ( !availableTerritories.equals(containedInWorld) ) { | |
errln("Available territories and all territories contained in world should be the same set." + | |
"Available = " + availableTerritories.toString() + | |
" : Contained in World = " + containedInWorld.toString()); | |
} | |
} | |
} |