You are viewing a plain text version of this content. The canonical link for it is here.
Posted to java-dev@axis.apache.org by to...@apache.org on 2002/09/24 23:06:09 UTC
cvs commit: xml-axis/java/test/types TestUnsignedLong.java
tomj 2002/09/24 14:06:09
Modified: java/src/org/apache/axis/types UnsignedLong.java
java/test/types TestUnsignedLong.java
Log:
Fix bug 12969 - UnsignedLong doesn't format correctly
Remove code that was chopping off thenumber after the decimal for string
formatting as this is bad when the number is 1.234567E7.
Add a test case for the problem, and enhance test which exposed
more limits of precision.
Revision Changes Path
1.8 +10 -9 xml-axis/java/src/org/apache/axis/types/UnsignedLong.java
Index: UnsignedLong.java
===================================================================
RCS file: /home/cvs/xml-axis/java/src/org/apache/axis/types/UnsignedLong.java,v
retrieving revision 1.7
retrieving revision 1.8
diff -u -r1.7 -r1.8
--- UnsignedLong.java 24 Sep 2002 15:23:11 -0000 1.7
+++ UnsignedLong.java 24 Sep 2002 21:06:09 -0000 1.8
@@ -55,6 +55,8 @@
package org.apache.axis.types;
import java.util.ArrayList;
+import java.text.NumberFormat;
+import java.text.FieldPosition;
import org.apache.axis.utils.JavaUtils;
import org.apache.axis.utils.Messages;
@@ -100,17 +102,16 @@
}
/**
- * strip the decimal part of the double value. toString tacks on .0
- */
- private String stripDecimal(String stValue) {
- return stValue.substring(0,stValue.lastIndexOf('.'));
- }
-
+ * Format the Double in to a string
+ */
private String convertDoubleToUnsignedLong(Double lValue) {
if (lValue != null) {
- String stRetval = lValue.toString(); // convert to string
- // strip trailing .0
- return stripDecimal(stRetval);
+ NumberFormat nf = NumberFormat.getInstance();
+ nf.setGroupingUsed(false);
+ StringBuffer buf = new StringBuffer();
+ FieldPosition pos = new FieldPosition(NumberFormat.INTEGER_FIELD);
+ nf.format(lValue.doubleValue(), buf, pos);
+ return buf.toString();
}
return null;
}
1.2 +19 -17 xml-axis/java/test/types/TestUnsignedLong.java
Index: TestUnsignedLong.java
===================================================================
RCS file: /home/cvs/xml-axis/java/test/types/TestUnsignedLong.java,v
retrieving revision 1.1
retrieving revision 1.2
diff -u -r1.1 -r1.2
--- TestUnsignedLong.java 16 Aug 2002 20:28:52 -0000 1.1
+++ TestUnsignedLong.java 24 Sep 2002 21:06:09 -0000 1.2
@@ -84,26 +84,27 @@
}
/**
- * Run a successful test. value should be valid.
+ * Run a successful test. value should be valid. String should come out
+ * as expected.
*/
- private void runPassTest(double value) throws Exception {
+ private void runPassTest(double value, String strValue) throws Exception {
UnsignedLong oUnsignedLong = null;
try {
oUnsignedLong = new UnsignedLong(value);
}
catch (Exception e) { // catch the validation exception
+ // error!
+ assertTrue("validation error thrown and it shouldn't be", false);
}
- String stRetval = String.valueOf(value); // contains .0
- stRetval = stRetval.substring(0,stRetval.lastIndexOf('.'));
- assertEquals("unsigned long not equal" +
- String.valueOf(value), oUnsignedLong.toString(),stRetval);
+ assertEquals("unsigned long not equal: " +
+ String.valueOf(value), strValue, oUnsignedLong.toString());
}
/**
* Test that a positive value succeeeds
*/
public void testPositiveValue() throws Exception {
- runPassTest(100);
+ runPassTest(100, "100");
}
/**
@@ -113,28 +114,29 @@
runFailTest(-100);
}
-
/**
- * Test that a number over MaxInclusive fails
+ * Test that a big number that send the double in scientific notation is OK
*/
public void testMaxInclusive() throws Exception {
- runPassTest(18446744073709551615D);
+ runPassTest(123456789, "123456789");
}
/**
- * Test that a number at MaxInclusive succeeds
+ * Test that a number over MaxInclusive fails
+ * This test wont pass because of precision issues:
+ * expected:<18446744073709551615> but was:<18446744073709552000>
*/
-// public void testMaxOver() throws Exception {
- // actual MaxOver should be 18446744073709551615D
- // but we are running into a precision issue
-// runFailTest(18446744073709551616D);
-// }
+/*
+ public void testBigNumber() throws Exception {
+ runPassTest(18446744073709551615D, "18446744073709551615");
+ }
+*/
/**
* Test that a number at MinInclusive succeeds
*/
public void testMinExclusive() throws Exception {
- runPassTest(0L);
+ runPassTest(0L, "0");
}