Skip to content

Commit 04d76b6

Browse files
author
John J. Aylward
committed
split out tests for better readability
1 parent cfe6851 commit 04d76b6

File tree

1 file changed

+24
-3
lines changed

1 file changed

+24
-3
lines changed

src/test/java/org/json/junit/JSONObjectTest.java

Lines changed: 24 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -708,7 +708,7 @@ public void stringToValueNumbersTest() {
708708
* This test documents a need for BigDecimal conversion.
709709
*/
710710
Object obj = JSONObject.stringToValue( "299792.457999999984" );
711-
assertTrue( "evaluates to 299792.458 doubld instead of 299792.457999999984 BigDecimal!",
711+
assertTrue( "evaluates to 299792.458 double instead of 299792.457999999984 BigDecimal!",
712712
obj.equals(new Double(299792.458)) );
713713
assertTrue( "1 should be an Integer!",
714714
JSONObject.stringToValue( "1" ) instanceof Integer );
@@ -2042,7 +2042,7 @@ public void jsonObjectOptNoKey() {
20422042
*/
20432043
@Test
20442044
public void jsonObjectOptStringConversion() {
2045-
JSONObject jo = new JSONObject("{\"int\":\"123\",\"true\":\"true\",\"false\":\"false\",\"largeNumber\":\"19007199254740993.35481234487103587486413587843213584\"}");
2045+
JSONObject jo = new JSONObject("{\"int\":\"123\",\"true\":\"true\",\"false\":\"false\"}");
20462046
assertTrue("unexpected optBoolean value",jo.optBoolean("true",false)==true);
20472047
assertTrue("unexpected optBoolean value",jo.optBoolean("false",true)==false);
20482048
assertTrue("unexpected optInt value",jo.optInt("int",0)==123);
@@ -2053,17 +2053,38 @@ public void jsonObjectOptStringConversion() {
20532053
assertTrue("unexpected optBigDecimal value",jo.optBigDecimal("int",BigDecimal.ZERO).compareTo(new BigDecimal("123"))==0);
20542054
assertTrue("unexpected optBigDecimal value",jo.optBigDecimal("int",BigDecimal.ZERO).compareTo(new BigDecimal("123"))==0);
20552055
assertTrue("unexpected optNumber value",jo.optNumber("int",BigInteger.ZERO).longValue()==123l);
2056+
}
2057+
2058+
/**
2059+
* Verifies that the opt methods properly convert string values to numbers and coerce them consistently.
2060+
*/
2061+
@Test
2062+
public void jsonObjectOptCoercion() {
2063+
JSONObject jo = new JSONObject("{\"largeNumberStr\":\"19007199254740993.35481234487103587486413587843213584\"}");
2064+
// currently the parser doesn't recognize BigDecimal, to we have to put it manually
2065+
jo.put("largeNumber", new BigDecimal("19007199254740993.35481234487103587486413587843213584"));
20562066

20572067
// Test type coercion from larger to smaller
2068+
assertEquals(new BigDecimal("19007199254740993.35481234487103587486413587843213584"), jo.optBigDecimal("largeNumber",null));
20582069
assertEquals(new BigInteger("19007199254740993"), jo.optBigInteger("largeNumber",null));
20592070
assertEquals(1.9007199254740992E16, jo.optDouble("largeNumber"),0.0);
20602071
assertEquals(1.90071995E16f, jo.optFloat("largeNumber"),0.0f);
20612072
assertEquals(19007199254740993l, jo.optLong("largeNumber"));
20622073
assertEquals(1874919425, jo.optInt("largeNumber"));
2063-
2074+
2075+
// conversion from a string
2076+
assertEquals(new BigDecimal("19007199254740993.35481234487103587486413587843213584"), jo.optBigDecimal("largeNumberStr",null));
2077+
assertEquals(new BigInteger("19007199254740993"), jo.optBigInteger("largeNumberStr",null));
2078+
assertEquals(1.9007199254740992E16, jo.optDouble("largeNumberStr"),0.0);
2079+
assertEquals(1.90071995E16f, jo.optFloat("largeNumberStr"),0.0f);
2080+
assertEquals(19007199254740993l, jo.optLong("largeNumberStr"));
2081+
assertEquals(1874919425, jo.optInt("largeNumberStr"));
2082+
20642083
// the integer portion of the actual value is larger than a double can hold.
20652084
assertNotEquals((long)Double.parseDouble("19007199254740993.35481234487103587486413587843213584"), jo.optLong("largeNumber"));
20662085
assertNotEquals((int)Double.parseDouble("19007199254740993.35481234487103587486413587843213584"), jo.optInt("largeNumber"));
2086+
assertNotEquals((long)Double.parseDouble("19007199254740993.35481234487103587486413587843213584"), jo.optLong("largeNumberStr"));
2087+
assertNotEquals((int)Double.parseDouble("19007199254740993.35481234487103587486413587843213584"), jo.optInt("largeNumberStr"));
20672088
assertEquals(19007199254740992l, (long)Double.parseDouble("19007199254740993.35481234487103587486413587843213584"));
20682089
assertEquals(2147483647, (int)Double.parseDouble("19007199254740993.35481234487103587486413587843213584"));
20692090
}

0 commit comments

Comments
 (0)