Author: niallp
Date: Wed Jul 11 21:53:26 2007
New Revision: 555489
URL: http://svn.apache.org/viewvc?view=rev&rev=555489
Log:
BEANUTILS-44 FloatLocaleConverter cannot parse negative values - reported by
Paul Jenkins
Modified:
jakarta/commons/proper/beanutils/trunk/src/java/org/apache/commons/beanutils/locale/converters/FloatLocaleConverter.java
jakarta/commons/proper/beanutils/trunk/src/test/org/apache/commons/beanutils/locale/converters/FloatLocaleConverterTestCase.java
Modified:
jakarta/commons/proper/beanutils/trunk/src/java/org/apache/commons/beanutils/locale/converters/FloatLocaleConverter.java
URL:
http://svn.apache.org/viewvc/jakarta/commons/proper/beanutils/trunk/src/java/org/apache/commons/beanutils/locale/converters/FloatLocaleConverter.java?view=diff&rev=555489&r1=555488&r2=555489
==============================================================================
---
jakarta/commons/proper/beanutils/trunk/src/java/org/apache/commons/beanutils/locale/converters/FloatLocaleConverter.java
(original)
+++
jakarta/commons/proper/beanutils/trunk/src/java/org/apache/commons/beanutils/locale/converters/FloatLocaleConverter.java
Wed Jul 11 21:53:26 2007
@@ -214,8 +214,10 @@
*/
protected Object parse(Object value, String pattern) throws ParseException {
final Number parsed = (Number) super.parse(value, pattern);
- if( Math.abs(parsed.doubleValue() - parsed.floatValue()) >
parsed.floatValue() * 0.00001 ) {
- throw new ConversionException("Suplied number is not of type Float:
"+parsed.longValue());
+ double doubleValue = parsed.doubleValue();
+ double posDouble = (doubleValue >= (double)0) ? doubleValue :
(doubleValue * (double)-1);
+ if (posDouble < Float.MIN_VALUE || posDouble > Float.MAX_VALUE) {
+ throw new ConversionException("Suplied number is not of type Float:
"+parsed);
}
return new Float(parsed.floatValue()); // unlike superclass it returns
Float type
}
Modified:
jakarta/commons/proper/beanutils/trunk/src/test/org/apache/commons/beanutils/locale/converters/FloatLocaleConverterTestCase.java
URL:
http://svn.apache.org/viewvc/jakarta/commons/proper/beanutils/trunk/src/test/org/apache/commons/beanutils/locale/converters/FloatLocaleConverterTestCase.java?view=diff&rev=555489&r1=555488&r2=555489
==============================================================================
---
jakarta/commons/proper/beanutils/trunk/src/test/org/apache/commons/beanutils/locale/converters/FloatLocaleConverterTestCase.java
(original)
+++
jakarta/commons/proper/beanutils/trunk/src/test/org/apache/commons/beanutils/locale/converters/FloatLocaleConverterTestCase.java
Wed Jul 11 21:53:26 2007
@@ -17,6 +17,8 @@
package org.apache.commons.beanutils.locale.converters;
+import java.text.DecimalFormat;
+import org.apache.commons.beanutils.ConversionException;
/**
* Test Case for the FloatLocaleConverter class.
@@ -256,6 +258,49 @@
convertInvalid(converter, defaultValue);
convertNull(converter, defaultValue);
+ }
+
+ /**
+ * Test Float limits
+ */
+ public void testFloatLimits() {
+
+ converter = new FloatLocaleConverter(defaultLocale,
defaultDecimalPattern);
+ DecimalFormat fmt = new
DecimalFormat("#.#############################################################");
+
+ assertEquals(new Float(-0.12), converter.convert("-0.12"));
+ assertEquals("Positive Float.MAX_VALUE", new Float(Float.MAX_VALUE),
converter.convert(fmt.format(Float.MAX_VALUE)));
+ assertEquals("Positive Float.MIN_VALUE", new Float(Float.MIN_VALUE),
converter.convert(fmt.format(Float.MIN_VALUE)));
+
+ assertEquals("Negative Float.MAX_VALUE", new Float(Float.MAX_VALUE *
-1), converter.convert(fmt.format(Float.MAX_VALUE * -1)));
+ assertEquals("Negative Float.MIN_VALUE", new Float(Float.MIN_VALUE *
-1), converter.convert(fmt.format(Float.MIN_VALUE * -1)));
+
+
+ try {
+ converter.convert(fmt.format((double)Float.MAX_VALUE *
(double)10));
+ fail("Positive Too Large should throw ConversionException");
+ } catch (ConversionException e) {
+ // expected result
+ }
+ try {
+ converter.convert(fmt.format((double)Float.MAX_VALUE *
(double)-10));
+ fail("Negative Too Large should throw ConversionException");
+ } catch (ConversionException e) {
+ // expected result
+ }
+
+ try {
+ converter.convert(fmt.format((double)Float.MIN_VALUE /
(double)10));
+ fail("Positive Too Small should throw ConversionException");
+ } catch (ConversionException e) {
+ // expected result
+ }
+ try {
+ converter.convert(fmt.format((double)Float.MIN_VALUE /
(double)-10));
+ fail("Negative Too Small should throw ConversionException");
+ } catch (ConversionException e) {
+ // expected result
+ }
}
---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]