/*
* Copyright (C) 2008 The Android Open Source Project
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package libcore.java.util;
import java.nio.charset.Charset;
import java.text.DateFormatSymbols;
import java.util.Calendar;
import java.util.Currency;
import java.util.Locale;
import java.util.Set;
import java.util.TimeZone;
import junit.framework.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.
*/
public class OldAndroidLocaleTest extends TestCase {
// Test basic Locale infrastructure.
public void testLocale() throws Exception {
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 void testResourceBundles() throws Exception {
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 Standard Time",
berlin.getDisplayName(false, TimeZone.LONG, eng));
assertEquals("Central European Summer Time",
berlin.getDisplayName(true, TimeZone.LONG, eng));
assertEquals("Mitteleuropäische Normalzeit",
berlin.getDisplayName(false, TimeZone.LONG, deu));
assertEquals("Mitteleuropäische Sommerzeit",
berlin.getDisplayName(true, TimeZone.LONG, deu));
assertTrue(engSymbols.getZoneStrings().length > 100);
}
// This one makes sure we have all necessary locales installed.
public void testICULocales() {
// List of locales currently required for Android.
Locale[] locales = new Locale[] {
new Locale("en", "US"),
new Locale("es", "US"),
new Locale("en", "GB"),
new Locale("fr", "FR"),
new Locale("de", "DE"),
new Locale("de", "AT"),
new Locale("cs", "CZ"),
new Locale("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++) {
final Locale l = locales[i];
DateFormatSymbols d = new DateFormatSymbols(l);
assertEquals("Monday name for " + locales[i] + " must match",
mondays[i], d.getWeekdays()[2]);
Currency c = Currency.getInstance(l);
assertEquals("Currency code for " + locales[i] + " must match",
currencies[i], c.getCurrencyCode());
}
}
// Regression test for 1118570: Create test cases for tracking ICU config
// changes. This one makes sure we have the necessary converters installed
// and don't lose the changes to the converter alias table.
public void testICUConverters() {
// 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-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",
"GSM0338"
};
for (String encoding : encodings) {
assertTrue("Charset " + encoding + " must be supported", Charset.isSupported(encoding));
Charset cs = Charset.forName(encoding);
Set<String> aliases = cs.aliases();
System.out.println(cs.name() + ": " + aliases);
}
}
}