FileDocCategorySizeDatePackage
LocaleTest.javaAPI DocAndroid 1.5 API9344Wed May 06 22:42:02 BST 2009android.core

LocaleTest

public class LocaleTest extends TestCase
Test some locale-dependent stuff for Android. This test mainly ensures that our ICU configuration is correct and contains all the needed locales and resource bundles.

Fields Summary
Constructors Summary
Methods Summary
public voidtestICUConverters()

        // List of encodings currently required for Android.
        String[] encodings = new String[] {
                // Encoding required by the language specification.
                "US-ASCII",
                "UTF-8",
                "UTF-16",
                "UTF-16BE",
                "UTF-16LE",
                "ISO-8859-1",
                
                // Additional encodings included in standard ICU
                "ISO-8859-2",
                "ISO-8859-3",
                "ISO-8859-4",
                "ISO-8859-5",
                "ISO-8859-6",
                "ISO-8859-7",
                "ISO-8859-8",
                "ISO-8859-8-I",
                "ISO-8859-9",
                "ISO-8859-10", 
                "ISO-8859-11", 
                "ISO-8859-13",
                "ISO-8859-14", 
                "ISO-8859-15",
                "ISO-8859-16", 
                "ISO-2022-JP",
                "Windows-950",
                "Windows-1250",
                "Windows-1251",
                "Windows-1252",
                "Windows-1253",
                "Windows-1254",
                "Windows-1255",
                "Windows-1256",
                "Windows-1257",
                "Windows-1258",              
                "Big5",
                "CP864",
                "CP874",
                "EUC-CN",
                "EUC-JP",
                "KOI8-R",
                "Macintosh",
                "GBK",
                "GB2312",
                "EUC-KR",
                
                // Additional encoding not included in standard ICU.
                "GSM0338" };
        
        for (int i = 0; i < encodings.length; i++) {
            assertTrue("Charset " + encodings[i] + " must be supported",
                    Charset.isSupported(encodings[i]));
            
            Charset cs = Charset.forName(encodings[i]);
            android.util.Log.d("LocaleTest", cs.name());
            
            Set<String> aliases = cs.aliases();
            for (String s: aliases) {
                android.util.Log.d("LocaleTest", " - " + s);
            }
        }
        
        // Test for valid encoding that is not included in Android. IBM-37 is
        // a perfect candidate for this, as it is being used for mainframes and
        // thus somewhat out of the scope of Android.
        assertFalse("Charset IBM-37 must not be supported",
                Charset.isSupported("IBM-37"));

        // Test for a bogus encoding.
        assertFalse("Charset KLINGON must not be supported",
                Charset.isSupported("KLINGON"));
        
        // Make sure our local change to the real translation table used for
        // EUC-JP doesn't get lost.
        Charset cs = Charset.forName("EUC-JP");
        assertTrue("EUC-JP must use 'ibm-954_P101-2007'", cs.aliases().contains("ibm-954_P101-2007"));
    
public voidtestICULocales()

        String[] locales = new String[] {
                // List of locales currently required for Android.
                "en_US", "es_US", "en_GB", "fr_FR", "de_DE", "de_AT", "cs_CZ", "nl_NL" };
        
        String[] mondays = new String[] {
                "Monday", "lunes", "Monday", "lundi", "Montag", "Montag", "pond\u011bl\u00ed", "maandag" };
        
        String[] currencies = new String[] {
                "USD", "USD", "GBP", "EUR", "EUR", "EUR", "CZK", "EUR"};

        for (int i = 0; i < locales.length; i++) {
            Locale l = new Locale(locales[i].substring(0, 2), locales[i].substring(3));
            
            // Check language part of locale.
            DateFormatSymbols d = new DateFormatSymbols(l);
            assertEquals("Monday name for " + locales[i] + " must match",
                    mondays[i], d.getWeekdays()[2]);
            
            // Check country part of locale.
            Currency c = Currency.getInstance(l);
            assertEquals("Currency code for " + locales[i] + " must match",
                    currencies[i], c.getCurrencyCode());
        }
    
public voidtestLocale()

        Locale locale = new Locale("en");
        assertEquals("en", locale.toString());

        locale = new Locale("en", "US");
        assertEquals("en_US", locale.toString());

        locale = new Locale("en", "", "POSIX");
        assertEquals("en__POSIX", locale.toString());

        locale = new Locale("en", "US", "POSIX");
        assertEquals("en_US_POSIX", locale.toString());
    
public voidtestResourceBundles()

        Locale eng = new Locale("en", "US");
        DateFormatSymbols engSymbols = new DateFormatSymbols(eng);
        
        //Locale deu = new Locale("de", "DE");
        //DateFormatSymbols deuSymbols = new DateFormatSymbols(deu);
        
        TimeZone berlin = TimeZone.getTimeZone("Europe/Berlin");
        
        assertEquals("January", engSymbols.getMonths()[0]);
        //assertEquals("Januar", deuSymbols.getMonths()[0]);

        assertEquals("Sunday", engSymbols.getWeekdays()[Calendar.SUNDAY]);
        //assertEquals("Sonntag", deuSymbols.getWeekdays()[Calendar.SUNDAY]);
        
        assertEquals("Central European Time",
                berlin.getDisplayName(false, TimeZone.LONG, eng));
        assertEquals("Central European Summer Time",
                berlin.getDisplayName(true, TimeZone.LONG, eng));

        //assertEquals("Mitteleurop\u00E4ische Zeit",
        //        berlin.getDisplayName(false, TimeZone.LONG, deu));
        //assertEquals("Mitteleurop\u00E4ische Sommerzeit",
        //        berlin.getDisplayName(true, TimeZone.LONG, deu));
        
        assertTrue(engSymbols.getZoneStrings().length > 100);