You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@harmony.apache.org by hi...@apache.org on 2010/06/10 14:36:07 UTC

svn commit: r953307 - in /harmony/enhanced/java/branches/java6/classlib/modules/text/src: main/java/java/text/DecimalFormat.java test/java/org/apache/harmony/text/tests/java/text/DecimalFormatTest.java

Author: hindessm
Date: Thu Jun 10 12:36:07 2010
New Revision: 953307

URL: http://svn.apache.org/viewvc?rev=953307&view=rev
Log:
Apply java6 patch from "#HARMONY-6485] [classlib][text] DecimalFormat
applyPattern error".

Modified:
    harmony/enhanced/java/branches/java6/classlib/modules/text/src/main/java/java/text/DecimalFormat.java
    harmony/enhanced/java/branches/java6/classlib/modules/text/src/test/java/org/apache/harmony/text/tests/java/text/DecimalFormatTest.java

Modified: harmony/enhanced/java/branches/java6/classlib/modules/text/src/main/java/java/text/DecimalFormat.java
URL: http://svn.apache.org/viewvc/harmony/enhanced/java/branches/java6/classlib/modules/text/src/main/java/java/text/DecimalFormat.java?rev=953307&r1=953306&r2=953307&view=diff
==============================================================================
--- harmony/enhanced/java/branches/java6/classlib/modules/text/src/main/java/java/text/DecimalFormat.java (original)
+++ harmony/enhanced/java/branches/java6/classlib/modules/text/src/main/java/java/text/DecimalFormat.java Thu Jun 10 12:36:07 2010
@@ -640,6 +640,13 @@ public class DecimalFormat extends Numbe
      */
     public void applyLocalizedPattern(String pattern) {
         dform.applyLocalizedPattern(pattern);
+        super.setMaximumFractionDigits(dform.getMaximumFractionDigits());
+        super.setMaximumIntegerDigits(dform.getMaximumIntegerDigits());
+        super.setMinimumFractionDigits(dform.getMinimumFractionDigits());
+        super.setMinimumIntegerDigits(dform.getMinimumIntegerDigits());
+        if (roundingMode != RoundingMode.HALF_EVEN) {
+            setRoundingIncrement(getMaximumFractionDigits());
+        }
     }
 
     /**
@@ -654,6 +661,13 @@ public class DecimalFormat extends Numbe
     public void applyPattern(String pattern) {
 
         dform.applyPattern(pattern);
+        super.setMaximumFractionDigits(dform.getMaximumFractionDigits());
+        super.setMaximumIntegerDigits(dform.getMaximumIntegerDigits());
+        super.setMinimumFractionDigits(dform.getMinimumFractionDigits());
+        super.setMinimumIntegerDigits(dform.getMinimumIntegerDigits());
+        if (roundingMode != RoundingMode.HALF_EVEN) {
+            setRoundingIncrement(getMaximumFractionDigits());
+        }
     }
 
     /**

Modified: harmony/enhanced/java/branches/java6/classlib/modules/text/src/test/java/org/apache/harmony/text/tests/java/text/DecimalFormatTest.java
URL: http://svn.apache.org/viewvc/harmony/enhanced/java/branches/java6/classlib/modules/text/src/test/java/org/apache/harmony/text/tests/java/text/DecimalFormatTest.java?rev=953307&r1=953306&r2=953307&view=diff
==============================================================================
--- harmony/enhanced/java/branches/java6/classlib/modules/text/src/test/java/org/apache/harmony/text/tests/java/text/DecimalFormatTest.java (original)
+++ harmony/enhanced/java/branches/java6/classlib/modules/text/src/test/java/org/apache/harmony/text/tests/java/text/DecimalFormatTest.java Thu Jun 10 12:36:07 2010
@@ -752,6 +752,16 @@ public class DecimalFormatTest extends T
         assertEquals("Wrong pattern 3", "#", format.toPattern());
         format = new DecimalFormat(".#");
         assertEquals("Wrong pattern 4", "#.0", format.toPattern());
+        // Regression for HARMONY-6485
+        format = new DecimalFormat();
+        format.setMinimumIntegerDigits(0);
+        format.setMinimumFractionDigits(0);
+        format.setMaximumFractionDigits(0);
+        format.applyPattern("00.0#");
+        assertEquals("Minimum integer digits not set", 2, format.getMinimumIntegerDigits());
+        assertEquals("Minimum fraction digits not set", 1, format.getMinimumFractionDigits());
+        assertEquals("Maximum fraction digits not set", 2, format.getMaximumFractionDigits());
+
     }
 
     /**
@@ -2063,5 +2073,112 @@ public class DecimalFormatTest extends T
 				"Incorrect RoundingMode behavior: RoundingMode.UNNECESSARY",
 				"-1", result);
 
+		// Regression for HARMONY-6485
+		// Test with applyPattern call after setRoundingMode
+
+		// set RoundingMode.HALF_UP of this DecimalFormat and test its
+		// behavior
+		decimalFormat.setRoundingMode(RoundingMode.HALF_UP);
+		decimalFormat.applyPattern(".##");
+		result = decimalFormat.format(0.125);
+		assertEquals(
+			"Incorrect RoundingMode behavior after applyPattern",
+			".13", result);
+		result = decimalFormat.format(0.255);
+		assertEquals(
+			"Incorrect RoundingMode behavior after applyPattern",
+			".26", result);
+		result = decimalFormat.format(0.732);
+		assertEquals(
+			"Incorrect RoundingMode behavior after applyPattern",
+			".73", result);
+		result = decimalFormat.format(0.467);
+		assertEquals(
+			"Incorrect RoundingMode behavior after applyPattern",
+			".47", result);
+
+		// set RoundingMode.HALF_DOWN of this DecimalFormat and test its
+		// behavior
+		decimalFormat.setRoundingMode(RoundingMode.HALF_DOWN);
+		decimalFormat.applyPattern(".##");
+		result = decimalFormat.format(0.125);
+		assertEquals(
+			"Incorrect RoundingMode behavior after applyPattern",
+			".12", result);
+		result = decimalFormat.format(0.255);
+		assertEquals(
+			"Incorrect RoundingMode behavior after applyPattern",
+			".25", result);
+		result = decimalFormat.format(0.732);
+		assertEquals(
+			"Incorrect RoundingMode behavior after applyPattern",
+			".73", result);
+		result = decimalFormat.format(0.467);
+		assertEquals(
+			"Incorrect RoundingMode behavior after applyPattern",
+			".47", result);
+
+		// set RoundingMode.UP of this DecimalFormat and test its
+		// behavior
+		decimalFormat.setRoundingMode(RoundingMode.UP);
+		decimalFormat.applyPattern(".##");
+		result = decimalFormat.format(0.125);
+		assertEquals(
+			"Incorrect RoundingMode behavior after applyPattern",
+			".13", result);
+		result = decimalFormat.format(0.255);
+		assertEquals(
+			"Incorrect RoundingMode behavior after applyPattern",
+			".26", result);
+		result = decimalFormat.format(0.732);
+		assertEquals(
+			"Incorrect RoundingMode behavior after applyPattern",
+			".74", result);
+		result = decimalFormat.format(0.467);
+		assertEquals(
+			"Incorrect RoundingMode behavior after applyPattern",
+			".47", result);
+
+		// set RoundingMode.DOWN of this DecimalFormat and test its
+		// behavior
+		decimalFormat.setRoundingMode(RoundingMode.DOWN);
+		decimalFormat.applyPattern(".##");
+		result = decimalFormat.format(0.125);
+		assertEquals(
+			"Incorrect RoundingMode behavior after applyPattern",
+			".12", result);
+		result = decimalFormat.format(0.255);
+		assertEquals(
+			"Incorrect RoundingMode behavior after applyPattern",
+			".25", result);
+		result = decimalFormat.format(0.732);
+		assertEquals(
+			"Incorrect RoundingMode behavior after applyPattern",
+			".73", result);
+		result = decimalFormat.format(0.467);
+		assertEquals(
+			"Incorrect RoundingMode behavior after applyPattern",
+			".46", result);
+
+		// set RoundingMode.HALF_EVEN of this DecimalFormat and test its
+		// behavior
+		decimalFormat.setRoundingMode(RoundingMode.HALF_EVEN);
+		decimalFormat.applyPattern(".##");
+		result = decimalFormat.format(0.125);
+		assertEquals(
+			"Incorrect RoundingMode behavior after applyPattern",
+			".12", result);
+		result = decimalFormat.format(0.255);
+		assertEquals(
+			"Incorrect RoundingMode behavior after applyPattern",
+			".26", result);
+		result = decimalFormat.format(0.732);
+		assertEquals(
+			"Incorrect RoundingMode behavior after applyPattern",
+			".73", result);
+		result = decimalFormat.format(0.467);
+		assertEquals(
+			"Incorrect RoundingMode behavior after applyPattern",
+			".47", result);
 	}
 }