You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@struts.apache.org by mc...@apache.org on 2011/11/10 17:51:47 UTC
svn commit: r1200422 - in /struts/struts2/trunk/plugins/json/src:
main/java/org/apache/struts2/json/JSONReader.java
test/java/org/apache/struts2/json/JSONReaderTest.java
Author: mcucchiara
Date: Thu Nov 10 16:51:46 2011
New Revision: 1200422
URL: http://svn.apache.org/viewvc?rev=1200422&view=rev
Log:
WW-3701 - Wrong parsing of number with exponents
Added:
struts/struts2/trunk/plugins/json/src/test/java/org/apache/struts2/json/JSONReaderTest.java
Modified:
struts/struts2/trunk/plugins/json/src/main/java/org/apache/struts2/json/JSONReader.java
Modified: struts/struts2/trunk/plugins/json/src/main/java/org/apache/struts2/json/JSONReader.java
URL: http://svn.apache.org/viewvc/struts/struts2/trunk/plugins/json/src/main/java/org/apache/struts2/json/JSONReader.java?rev=1200422&r1=1200421&r2=1200422&view=diff
==============================================================================
--- struts/struts2/trunk/plugins/json/src/main/java/org/apache/struts2/json/JSONReader.java (original)
+++ struts/struts2/trunk/plugins/json/src/main/java/org/apache/struts2/json/JSONReader.java Thu Nov 10 16:51:46 2011
@@ -176,6 +176,7 @@ class JSONReader {
private Object number() {
this.buf.setLength(0);
+ boolean toDouble = false;
if (this.c == '-') {
this.add();
@@ -184,11 +185,13 @@ class JSONReader {
this.addDigits();
if (this.c == '.') {
+ toDouble = true;
this.add();
this.addDigits();
}
if ((this.c == 'e') || (this.c == 'E')) {
+ toDouble = true;
this.add();
if ((this.c == '+') || (this.c == '-')) {
@@ -198,8 +201,11 @@ class JSONReader {
this.addDigits();
}
- return (this.buf.indexOf(".") >= 0) ? (Object) Double.parseDouble(this.buf.toString())
- : (Object) Long.parseLong(this.buf.toString());
+ if (toDouble) {
+ return Double.parseDouble(this.buf.toString());
+ } else {
+ return Long.parseLong(this.buf.toString());
+ }
}
private Object string(char quote) {
Added: struts/struts2/trunk/plugins/json/src/test/java/org/apache/struts2/json/JSONReaderTest.java
URL: http://svn.apache.org/viewvc/struts/struts2/trunk/plugins/json/src/test/java/org/apache/struts2/json/JSONReaderTest.java?rev=1200422&view=auto
==============================================================================
--- struts/struts2/trunk/plugins/json/src/test/java/org/apache/struts2/json/JSONReaderTest.java (added)
+++ struts/struts2/trunk/plugins/json/src/test/java/org/apache/struts2/json/JSONReaderTest.java Thu Nov 10 16:51:46 2011
@@ -0,0 +1,47 @@
+package org.apache.struts2.json;
+
+import org.junit.Test;
+
+import static org.junit.Assert.assertEquals;
+import static org.junit.Assert.assertNotNull;
+
+/**
+ * User: mcucchiara
+ * Date: 10/11/11
+ * Time: 17.26
+ */
+public class JSONReaderTest {
+ private JSONReader reader = new JSONReader();
+
+ @Test
+ public void testExponentialNumber() throws Exception {
+ Object ret = reader.read("5e-5");
+ assertNotNull(ret);
+ assertEquals(Double.class, ret.getClass());
+ assertEquals(5.0E-5, ret);
+ }
+
+ @Test
+ public void testExponentialNumber2() throws Exception {
+ Object ret = reader.read("123.4e10");
+ assertNotNull(ret);
+ assertEquals(Double.class, ret.getClass());
+ assertEquals(123.4e10, ret);
+ }
+
+ @Test
+ public void testDecimalNumber() throws Exception {
+ Object ret = reader.read("3.2");
+ assertNotNull(ret);
+ assertEquals(Double.class, ret.getClass());
+ assertEquals(3.2, ret);
+ }
+
+ @Test
+ public void testNaturalNumber() throws Exception {
+ Object ret = reader.read("123");
+ assertNotNull(ret);
+ assertEquals(Long.class, ret.getClass());
+ assertEquals(123L, ret);
+ }
+}