You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@harmony.apache.org by py...@apache.org on 2006/08/08 17:18:27 UTC

svn commit: r429685 - in /incubator/harmony/enhanced/classlib/trunk/modules/text/src: main/java/java/text/ChoiceFormat.java test/java/org/apache/harmony/text/tests/java/text/ChoiceFormatTest.java

Author: pyang
Date: Tue Aug  8 08:18:27 2006
New Revision: 429685

URL: http://svn.apache.org/viewvc?rev=429685&view=rev
Log:
Fix for HARMONY-1081 ([classlib][lang] ChoiceFormat.format(double, StringBuffer, FieldPosition) throws unexpected ArrayIndexOutOfBoundsException)

Modified:
    incubator/harmony/enhanced/classlib/trunk/modules/text/src/main/java/java/text/ChoiceFormat.java
    incubator/harmony/enhanced/classlib/trunk/modules/text/src/test/java/org/apache/harmony/text/tests/java/text/ChoiceFormatTest.java

Modified: incubator/harmony/enhanced/classlib/trunk/modules/text/src/main/java/java/text/ChoiceFormat.java
URL: http://svn.apache.org/viewvc/incubator/harmony/enhanced/classlib/trunk/modules/text/src/main/java/java/text/ChoiceFormat.java?rev=429685&r1=429684&r2=429685&view=diff
==============================================================================
--- incubator/harmony/enhanced/classlib/trunk/modules/text/src/main/java/java/text/ChoiceFormat.java (original)
+++ incubator/harmony/enhanced/classlib/trunk/modules/text/src/main/java/java/text/ChoiceFormat.java Tue Aug  8 08:18:27 2006
@@ -191,16 +191,15 @@
 	 */
 	public StringBuffer format(double value, StringBuffer buffer,
 			FieldPosition field) {
-		if (Double.isNaN(value)
-				|| (choiceLimits.length > 1 && value < choiceLimits[1])) {
+        if(Double.isNaN(value)){
             return buffer.append(choiceFormats[0]);
         }
-		for (int i = 2; i < choiceLimits.length; i++) {
-            if (value >= choiceLimits[i - 1] && value < choiceLimits[i]) {
-                return buffer.append(choiceFormats[i - 1]);
+        for(int i = 0; i < choiceLimits.length; i++) {
+            if (value < choiceLimits[i]) {
+                return buffer.append(choiceFormats[i == 0 ? 0 : i - 1]);
             }
         }
-		return buffer.append(choiceFormats[choiceFormats.length - 1]);
+        return choiceFormats.length == 0 ? buffer : buffer.append(choiceFormats[choiceFormats.length - 1]);
 	}
 
 	/**

Modified: incubator/harmony/enhanced/classlib/trunk/modules/text/src/test/java/org/apache/harmony/text/tests/java/text/ChoiceFormatTest.java
URL: http://svn.apache.org/viewvc/incubator/harmony/enhanced/classlib/trunk/modules/text/src/test/java/org/apache/harmony/text/tests/java/text/ChoiceFormatTest.java?rev=429685&r1=429684&r2=429685&view=diff
==============================================================================
--- incubator/harmony/enhanced/classlib/trunk/modules/text/src/test/java/org/apache/harmony/text/tests/java/text/ChoiceFormatTest.java (original)
+++ incubator/harmony/enhanced/classlib/trunk/modules/text/src/test/java/org/apache/harmony/text/tests/java/text/ChoiceFormatTest.java Tue Aug  8 08:18:27 2006
@@ -262,6 +262,10 @@
         buf.setLength(0);
         r = f1.format(3, buf, field).toString();
 		assertEquals("Wrong choice for 3", "Greater than two", r);
+
+        // Regression test for HARMONY-1081
+        assertEquals(0, new ChoiceFormat("|").format(1, new StringBuffer(), new FieldPosition(6)).length());
+        assertEquals("Less than one", f1.format(Double.NaN, new StringBuffer(), field).toString());
     }
 
     /**