Since every time icu update, it behaviors change, and we may need to modify our delegate code to make Harmony work with it correctly, some test cases need to update as well.

Deven's patch based on icu 4.0, so our test/fix work all based on this. From icu's release notes, seems no much update from 4.0 to 4.0.1, I suppose upgrade should not be hard.

Nathan Beyer wrote:
Any reason not to use 4.0.1 instead? Can we upgrade to that quickly?

On Sun, Apr 19, 2009 at 9:45 PM, Regis <[email protected]> wrote:
As title, it's icu 4.0. Thanks.

Nathan Beyer wrote:
Is this icu 4.0 or 4.0.1?

Sent from my iPhone

On Apr 17, 2009, at 1:37 AM, [email protected] wrote:

Author: regisxu
Date: Fri Apr 17 06:37:53 2009
New Revision: 765865

URL: http://svn.apache.org/viewvc?rev=765865&view=rev
Log:
Apply patches for HARMONY-6096: [classlib][icu] upgrade icu4j 3.8 to
icu4j 4.0

include patches config_icu40.diff, CurrencyTest_v2.diff and
Charset_v3.diff (with minor changes)

Modified:
  harmony/enhanced/classlib/trunk/depends/files/bootclasspath.properties
  harmony/enhanced/classlib/trunk/make/build-java.xml

harmony/enhanced/classlib/trunk/modules/luni/src/test/api/common/org/apache/harmony/luni/tests/java/util/CurrencyTest.java

harmony/enhanced/classlib/trunk/modules/nio_char/src/main/java/java/nio/charset/Charset.java

Modified:
harmony/enhanced/classlib/trunk/depends/files/bootclasspath.properties
URL:
http://svn.apache.org/viewvc/harmony/enhanced/classlib/trunk/depends/files/bootclasspath.properties?rev=765865&r1=765864&r2=765865&view=diff

==============================================================================
---
harmony/enhanced/classlib/trunk/depends/files/bootclasspath.properties
(original)
+++
harmony/enhanced/classlib/trunk/depends/files/bootclasspath.properties Fri
Apr 17 06:37:53 2009
@@ -165,8 +165,8 @@

# ICU functionality for text/characters are provided by the ICU4J
# and ICU4J-charsets JAR files.
-bootclasspath.31=icu4j_3.8/icu4j-3_8.jar
-bootclasspath.32=icu4j_3.8/icu4j-charsets-3_8.jar
+bootclasspath.31=icu4j_4.0/icu4j-4_0.jar
+bootclasspath.32=icu4j_4.0/icu4j-charsets-4_0.jar

# The following JARs are from Xerces/Xalan
bootclasspath.34=xalan-j_2.7.0/xalan.jar

Modified: harmony/enhanced/classlib/trunk/make/build-java.xml
URL:
http://svn.apache.org/viewvc/harmony/enhanced/classlib/trunk/make/build-java.xml?rev=765865&r1=765864&r2=765865&view=diff

==============================================================================
--- harmony/enhanced/classlib/trunk/make/build-java.xml (original)
+++ harmony/enhanced/classlib/trunk/make/build-java.xml Fri Apr 17
06:37:53 2009
@@ -203,7 +203,7 @@
           <fileset dir="${depends.jars}">
               <patternset includes="bcel-5.2/*.jar" />
               <patternset includes="asm-3.1/*.jar" />
-                <patternset includes="icu4j_3.8/*.jar" />
+                <patternset includes="icu4j_4.0/*.jar" />
               <patternset includes="mx4j_3.0.2/*.jar" />
               <patternset includes="xalan-j_2.7.0/*.jar" />
               <patternset includes="xerces_2.9.1/*.jar" />

Modified:
harmony/enhanced/classlib/trunk/modules/luni/src/test/api/common/org/apache/harmony/luni/tests/java/util/CurrencyTest.java
URL:
http://svn.apache.org/viewvc/harmony/enhanced/classlib/trunk/modules/luni/src/test/api/common/org/apache/harmony/luni/tests/java/util/CurrencyTest.java?rev=765865&r1=765864&r2=765865&view=diff

==============================================================================
---
harmony/enhanced/classlib/trunk/modules/luni/src/test/api/common/org/apache/harmony/luni/tests/java/util/CurrencyTest.java
(original)
+++
harmony/enhanced/classlib/trunk/modules/luni/src/test/api/common/org/apache/harmony/luni/tests/java/util/CurrencyTest.java
Fri Apr 17 06:37:53 2009
@@ -102,11 +102,11 @@
       loc = new Locale("", "ZAR");
       Currency.getInstance(loc);

-        loc = new Locale("", "FX");
-        Currency.getInstance(loc);
+        // loc = new Locale("", "FX");
+        // Currency.getInstance(loc);

-        loc = new Locale("", "FXX");
-        Currency.getInstance(loc);
+        // loc = new Locale("", "FXX");
+        // Currency.getInstance(loc);
   }

   /**
@@ -119,15 +119,15 @@
       Currency currUS = Currency.getInstance("USD");

       Locale.setDefault(Locale.US);
-        assertEquals("currK.getSymbol()", "KRW", currK.getSymbol());
+        assertEquals("currK.getSymbol()", "\u20a9", currK.getSymbol());
       // Some non-bug differences below because of CLDR data.
-        assertEquals("currI.getSymbol()", "0#Rs.|1#Re.|1<Rs.", currI
+        assertEquals("currI.getSymbol()", "\u20a8", currI
               .getSymbol());
       assertEquals("currUS.getSymbol()", "$", currUS.getSymbol());

       Locale.setDefault(new Locale("ko", "KR"));
       assertEquals("currK.getSymbol()", "\uffe6", currK.getSymbol());
-        assertEquals("currI.getSymbol()", "0#Rs.|1#Re.|1<Rs.", currI
+        assertEquals("currI.getSymbol()", "0\u2264Rs.|1\u2264Re.|1<Rs.",
currI
               .getSymbol());
       assertEquals("currUS.getSymbol()", "US$", currUS.getSymbol());

@@ -189,10 +189,10 @@
       assertEquals("CAD", currCA.getSymbol(Locale.JAPANESE));
       assertEquals("$Ca", currCA.getSymbol(Locale.FRANCE));
       assertEquals("CAD", currCA.getSymbol(Locale.FRENCH));
-        assertEquals("Can$", currCA.getSymbol(Locale.US));
+        assertEquals("CA$", currCA.getSymbol(Locale.US));
       assertEquals("CAD", currCA.getSymbol(Locale.ENGLISH));
       assertEquals("Can$", currCA.getSymbol(new Locale("es", "US")));
-        assertEquals("Can$", currCA.getSymbol(new Locale("en", "US")));
+        assertEquals("CA$", currCA.getSymbol(new Locale("en", "US")));

       assertEquals("$", currCA.getSymbol(Locale.CANADA));
       assertEquals("$", currCA.getSymbol(Locale.CANADA_FRENCH));

Modified:
harmony/enhanced/classlib/trunk/modules/nio_char/src/main/java/java/nio/charset/Charset.java
URL:
http://svn.apache.org/viewvc/harmony/enhanced/classlib/trunk/modules/nio_char/src/main/java/java/nio/charset/Charset.java?rev=765865&r1=765864&r2=765865&view=diff

==============================================================================
---
harmony/enhanced/classlib/trunk/modules/nio_char/src/main/java/java/nio/charset/Charset.java
(original)
+++
harmony/enhanced/classlib/trunk/modules/nio_char/src/main/java/java/nio/charset/Charset.java
Fri Apr 17 06:37:53 2009
@@ -109,6 +109,8 @@
   // cached Charset table
   private final static HashMap<String, Charset> cachedCharsetTable = new
HashMap<String, Charset>();

+    private static boolean inForNameInternal = false;
+
   static {
       /*
        * Create built-in charset provider even if no privilege to access
@@ -322,6 +324,11 @@
    */
   @SuppressWarnings("unchecked")
   public static SortedMap<String, Charset> availableCharsets() {
+        // workaround: conflicted Charsets with icu4j 4.0
+        Charset.forName("TIS-620");
+        Charset.forName("windows-1258");
+        Charset.forName("cp856");
+        Charset.forName("cp922");
       // Initialize the built-in charsets map cache if necessary
       if (null == _builtInCharsets) {
           synchronized (Charset.class) {
@@ -468,8 +475,10 @@

           // examine each configuration file
           while (e.hasMoreElements()) {
-                cs = searchConfiguredCharsets(charsetName,
contextClassLoader,
+                 inForNameInternal = true;
+                 cs = searchConfiguredCharsets(charsetName,
contextClassLoader,
                       e.nextElement());
+                 inForNameInternal = false;
               if (null != cs) {
                   cacheCharset(cs);
                   return cs;
@@ -477,6 +486,8 @@
           }
       } catch (IOException ex) {
           // Unexpected ClassLoader exception, ignore
+        } finally {
+            inForNameInternal = false;
       }
       return null;
   }
@@ -485,13 +496,17 @@
    * save charset into cachedCharsetTable
    */
   private static void cacheCharset(Charset cs) {
-        cachedCharsetTable.put(cs.name(), cs);
+        if (!cachedCharsetTable.containsKey(cs.name())){
+            cachedCharsetTable.put(cs.name(), cs);
+        }
       Set<String> aliasesSet = cs.aliases();
       if (null != aliasesSet) {
           Iterator<String> iter = aliasesSet.iterator();
           while (iter.hasNext()) {
               String alias = iter.next();
-                cachedCharsetTable.put(alias, cs);
+                if (!cachedCharsetTable.containsKey(alias)) {
+                    cachedCharsetTable.put(alias, cs);
+                }
           }
       }
   }
@@ -525,8 +540,32 @@
    *             If the specified charset name is illegal.
    */
   public static boolean isSupported(String charsetName) {
-        Charset cs = forNameInternal(charsetName);
-        return (null != cs);
+        if (inForNameInternal  == true) {
+            Charset cs = cachedCharsetTable.get(charsetName);
+            if (null != cs) {
+                return true;
+            }
+
+            if (null == charsetName) {
+                throw new IllegalArgumentException();
+            }
+            checkCharsetName(charsetName);
+
+            // Try built-in charsets
+            if (_builtInProvider == null) {
+                _builtInProvider = new CharsetProviderImpl();
+            }
+            cs = _builtInProvider.charsetForName(charsetName);
+            if (null != cs) {
+                cacheCharset(cs);
+                return true;
+            }
+            return false;
+        } else {
+            Charset cs = forNameInternal(charsetName);
+            return (null != cs);
+        }
+
   }

   /**



--
Best Regards,
Regis.




--
Best Regards,
Regis.

Reply via email to