From 5f799aea8c2ef1b996d6ee50fd1c243b3f698d4b Mon Sep 17 00:00:00 2001 From: Yoshito Umaoka Date: Fri, 20 Jun 2008 15:22:15 +0000 Subject: [PATCH] ICU-6368 Workaround for the IBM Java 6 Locale SPI support problems in the test cases. X-SVN-Rev: 24252 --- .../dev/test/localespi/BreakIteratorTest.java | 4 ++ .../icu/dev/test/localespi/CollatorTest.java | 5 +++ .../dev/test/localespi/CurrencyNameTest.java | 5 +++ .../test/localespi/DateFormatSymbolsTest.java | 5 +++ .../dev/test/localespi/DateFormatTest.java | 4 ++ .../localespi/DecimalFormatSymbolsTest.java | 5 +++ .../dev/test/localespi/LocaleNameTest.java | 15 +++++++ .../dev/test/localespi/NumberFormatTest.java | 4 ++ .../ibm/icu/dev/test/localespi/TestUtil.java | 41 +++++++++++++++++++ .../dev/test/localespi/TimeZoneNameTest.java | 4 ++ 10 files changed, 92 insertions(+) diff --git a/icu4j/localespi/src/com/ibm/icu/dev/test/localespi/BreakIteratorTest.java b/icu4j/localespi/src/com/ibm/icu/dev/test/localespi/BreakIteratorTest.java index 31222a6e2cb..afbd308f3a7 100644 --- a/icu4j/localespi/src/com/ibm/icu/dev/test/localespi/BreakIteratorTest.java +++ b/icu4j/localespi/src/com/ibm/icu/dev/test/localespi/BreakIteratorTest.java @@ -26,6 +26,10 @@ public class BreakIteratorTest extends TestFmwk { */ public void TestGetInstance() { for (Locale loc : BreakIterator.getAvailableLocales()) { + if (TestUtil.isProblematicIBMLocale(loc)) { + logln("Skipped " + loc); + continue; + } checkGetInstance(CHARACTER_BRK, loc); checkGetInstance(WORD_BRK, loc); checkGetInstance(LINE_BRK, loc); diff --git a/icu4j/localespi/src/com/ibm/icu/dev/test/localespi/CollatorTest.java b/icu4j/localespi/src/com/ibm/icu/dev/test/localespi/CollatorTest.java index ebd84f1470e..9ef945771e0 100644 --- a/icu4j/localespi/src/com/ibm/icu/dev/test/localespi/CollatorTest.java +++ b/icu4j/localespi/src/com/ibm/icu/dev/test/localespi/CollatorTest.java @@ -22,6 +22,11 @@ public class CollatorTest extends TestFmwk { */ public void TestGetInstance() { for (Locale loc : Collator.getAvailableLocales()) { + if (TestUtil.isProblematicIBMLocale(loc)) { + logln("Skipped " + loc); + continue; + } + Collator coll = Collator.getInstance(loc); boolean isIcuImpl = (coll instanceof com.ibm.icu.impl.jdkadapter.CollatorICU); diff --git a/icu4j/localespi/src/com/ibm/icu/dev/test/localespi/CurrencyNameTest.java b/icu4j/localespi/src/com/ibm/icu/dev/test/localespi/CurrencyNameTest.java index 2077e238be6..dd62fa70fbb 100644 --- a/icu4j/localespi/src/com/ibm/icu/dev/test/localespi/CurrencyNameTest.java +++ b/icu4j/localespi/src/com/ibm/icu/dev/test/localespi/CurrencyNameTest.java @@ -39,6 +39,11 @@ public class CurrencyNameTest extends TestFmwk { continue; } for (Locale loc : Locale.getAvailableLocales()) { + if (TestUtil.isProblematicIBMLocale(loc)) { + logln("Skipped " + loc); + continue; + } + String curSymbol = currency.getSymbol(loc); String curSymbolIcu = currencyIcu.getSymbol(loc); diff --git a/icu4j/localespi/src/com/ibm/icu/dev/test/localespi/DateFormatSymbolsTest.java b/icu4j/localespi/src/com/ibm/icu/dev/test/localespi/DateFormatSymbolsTest.java index b09d1d0efbf..d9357ddbfdb 100644 --- a/icu4j/localespi/src/com/ibm/icu/dev/test/localespi/DateFormatSymbolsTest.java +++ b/icu4j/localespi/src/com/ibm/icu/dev/test/localespi/DateFormatSymbolsTest.java @@ -21,6 +21,11 @@ public class DateFormatSymbolsTest extends TestFmwk { */ public void TestGetInstance() { for (Locale loc : DateFormatSymbols.getAvailableLocales()) { + if (TestUtil.isProblematicIBMLocale(loc)) { + logln("Skipped " + loc); + continue; + } + DateFormatSymbols dfs = DateFormatSymbols.getInstance(loc); boolean isIcuImpl = (dfs instanceof com.ibm.icu.impl.jdkadapter.DateFormatSymbolsICU); diff --git a/icu4j/localespi/src/com/ibm/icu/dev/test/localespi/DateFormatTest.java b/icu4j/localespi/src/com/ibm/icu/dev/test/localespi/DateFormatTest.java index 0633e215c26..8bef67fd4ab 100644 --- a/icu4j/localespi/src/com/ibm/icu/dev/test/localespi/DateFormatTest.java +++ b/icu4j/localespi/src/com/ibm/icu/dev/test/localespi/DateFormatTest.java @@ -24,6 +24,10 @@ public class DateFormatTest extends TestFmwk { */ public void TestGetInstance() { for (Locale loc : DateFormat.getAvailableLocales()) { + if (TestUtil.isProblematicIBMLocale(loc)) { + logln("Skipped " + loc); + continue; + } checkGetInstance(DateFormat.FULL, DateFormat.LONG, loc); checkGetInstance(DateFormat.MEDIUM, -1, loc); checkGetInstance(1, DateFormat.SHORT, loc); diff --git a/icu4j/localespi/src/com/ibm/icu/dev/test/localespi/DecimalFormatSymbolsTest.java b/icu4j/localespi/src/com/ibm/icu/dev/test/localespi/DecimalFormatSymbolsTest.java index dac260efddb..cbb51c39c52 100644 --- a/icu4j/localespi/src/com/ibm/icu/dev/test/localespi/DecimalFormatSymbolsTest.java +++ b/icu4j/localespi/src/com/ibm/icu/dev/test/localespi/DecimalFormatSymbolsTest.java @@ -22,6 +22,11 @@ public class DecimalFormatSymbolsTest extends TestFmwk { */ public void TestGetInstance() { for (Locale loc : DecimalFormatSymbols.getAvailableLocales()) { + if (TestUtil.isProblematicIBMLocale(loc)) { + logln("Skipped " + loc); + continue; + } + DecimalFormatSymbols decfs = DecimalFormatSymbols.getInstance(loc); boolean isIcuImpl = (decfs instanceof com.ibm.icu.impl.jdkadapter.DecimalFormatSymbolsICU); diff --git a/icu4j/localespi/src/com/ibm/icu/dev/test/localespi/LocaleNameTest.java b/icu4j/localespi/src/com/ibm/icu/dev/test/localespi/LocaleNameTest.java index e643d94f58d..714243944e7 100644 --- a/icu4j/localespi/src/com/ibm/icu/dev/test/localespi/LocaleNameTest.java +++ b/icu4j/localespi/src/com/ibm/icu/dev/test/localespi/LocaleNameTest.java @@ -20,6 +20,11 @@ public class LocaleNameTest extends TestFmwk { Locale[] locales = Locale.getAvailableLocales(); StringBuffer icuid = new StringBuffer(); for (Locale inLocale : locales) { + if (TestUtil.isProblematicIBMLocale(inLocale)) { + logln("Skipped " + inLocale); + continue; + } + ULocale inULocale = ULocale.forLocale(inLocale); Locale inLocaleICU = TestUtil.toICUExtendedLocale(inLocale); for (Locale forLocale : locales) { @@ -73,6 +78,11 @@ public class LocaleNameTest extends TestFmwk { public void TestCountryNames() { Locale[] locales = Locale.getAvailableLocales(); for (Locale inLocale : locales) { + if (TestUtil.isProblematicIBMLocale(inLocale)) { + logln("Skipped " + inLocale); + continue; + } + ULocale inULocale = ULocale.forLocale(inLocale); Locale inLocaleICU = TestUtil.toICUExtendedLocale(inLocale); for (Locale forLocale : locales) { @@ -114,6 +124,11 @@ public class LocaleNameTest extends TestFmwk { Locale[] locales = Locale.getAvailableLocales(); StringBuffer icuid = new StringBuffer(); for (Locale inLocale : locales) { + if (TestUtil.isProblematicIBMLocale(inLocale)) { + logln("Skipped " + inLocale); + continue; + } + ULocale inULocale = ULocale.forLocale(inLocale); Locale inLocaleICU = TestUtil.toICUExtendedLocale(inLocale); for (Locale forLocale : locales) { diff --git a/icu4j/localespi/src/com/ibm/icu/dev/test/localespi/NumberFormatTest.java b/icu4j/localespi/src/com/ibm/icu/dev/test/localespi/NumberFormatTest.java index 3000b7a7536..b8811824e46 100644 --- a/icu4j/localespi/src/com/ibm/icu/dev/test/localespi/NumberFormatTest.java +++ b/icu4j/localespi/src/com/ibm/icu/dev/test/localespi/NumberFormatTest.java @@ -30,6 +30,10 @@ public class NumberFormatTest extends TestFmwk { */ public void TestGetInstance() { for (Locale loc : NumberFormat.getAvailableLocales()) { + if (TestUtil.isProblematicIBMLocale(loc)) { + logln("Skipped " + loc); + continue; + } checkGetInstance(DEFAULT_TYPE, loc); checkGetInstance(NUMBER_TYPE, loc); checkGetInstance(INTEGER_TYPE, loc); diff --git a/icu4j/localespi/src/com/ibm/icu/dev/test/localespi/TestUtil.java b/icu4j/localespi/src/com/ibm/icu/dev/test/localespi/TestUtil.java index fa969598707..ded4dfdc5c0 100644 --- a/icu4j/localespi/src/com/ibm/icu/dev/test/localespi/TestUtil.java +++ b/icu4j/localespi/src/com/ibm/icu/dev/test/localespi/TestUtil.java @@ -39,4 +39,45 @@ public class TestUtil { } return o1.equals(o2); } + + /* + * Ticket#6368 + * + * The ICU4J locale spi test cases reports many errors on IBM Java 6. There are two kinds + * of problems observed and both of them look like implementation problems in IBM Java 6. + * + * - When a locale has variant field (for example, sr_RS_Cyrl, de_DE_PREEURO), adding ICU + * suffix in the variant field (for example, sr_RS_Cyrl_ICU, de_DE_PREEURO_ICU) has no effects. + * For these locales, IBM JRE 6 ignores installed Locale providers. + * + * - For "sh" sublocales with "ICU" variant (for example, sh__ICU, sh_CS_ICU), IBM JRE 6 also + * ignores installed ICU locale providers. Probably, "sh" is internally mapped to "sr_RS_Cyrl" + * internally before locale look up. + * + * For now, we exclude these problematic locales from locale spi test cases on IBM Java 6. + */ + private static final boolean IBMJRE; + static { + String javaVendor = System.getProperty("java.vendor"); + if (javaVendor != null && javaVendor.indexOf("IBM") >= 0) { + IBMJRE = true; + } else { + IBMJRE = false; + } + } + + public static boolean isProblematicIBMLocale(Locale loc) { + if (!IBMJRE) { + return false; + } + if (loc.getLanguage().equals("sh")) { + return true; + } + String variant = loc.getVariant(); + if (variant.startsWith("EURO") || variant.startsWith("PREEURO") + || variant.startsWith("Cyrl") || variant.startsWith("Latn")) { + return true; + } + return false; + } } diff --git a/icu4j/localespi/src/com/ibm/icu/dev/test/localespi/TimeZoneNameTest.java b/icu4j/localespi/src/com/ibm/icu/dev/test/localespi/TimeZoneNameTest.java index 51dcc241128..d831a765af8 100644 --- a/icu4j/localespi/src/com/ibm/icu/dev/test/localespi/TimeZoneNameTest.java +++ b/icu4j/localespi/src/com/ibm/icu/dev/test/localespi/TimeZoneNameTest.java @@ -21,6 +21,10 @@ public class TimeZoneNameTest extends TestFmwk { public void TestTimeZoneNames() { String[] tzids = TimeZone.getAvailableIDs(); for (Locale loc : Locale.getAvailableLocales()) { + if (TestUtil.isProblematicIBMLocale(loc)) { + logln("Skipped " + loc); + continue; + } for (String tzid : tzids) { TimeZone tz = TimeZone.getTimeZone(tzid); com.ibm.icu.util.TimeZone tzIcu = com.ibm.icu.util.TimeZone.getTimeZone(tzid);