/*
 **********************************************************************
 * 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());
        }
    }
}
