Skip to content

Commit bdb1163

Browse files
author
John J. Aylward
committed
Adds conversion tests to ensure downward type coercions are handled sanely
1 parent 2867aaa commit bdb1163

File tree

1 file changed

+10
-1
lines changed

1 file changed

+10
-1
lines changed

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

Lines changed: 10 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2003,7 +2003,7 @@ public void jsonObjectOptNoKey() {
20032003
*/
20042004
@Test
20052005
public void jsonObjectOptStringConversion() {
2006-
JSONObject jo = new JSONObject("{\"int\":\"123\",\"true\":\"true\",\"false\":\"false\"}");
2006+
JSONObject jo = new JSONObject("{\"int\":\"123\",\"true\":\"true\",\"false\":\"false\",\"largeNumber\":\"19007199254740993.35481234487103587486413587843213584\"}");
20072007
assertTrue("unexpected optBoolean value",jo.optBoolean("true",false)==true);
20082008
assertTrue("unexpected optBoolean value",jo.optBoolean("false",true)==false);
20092009
assertTrue("unexpected optInt value",jo.optInt("int",0)==123);
@@ -2014,6 +2014,15 @@ public void jsonObjectOptStringConversion() {
20142014
assertTrue("unexpected optBigDecimal value",jo.optBigDecimal("int",BigDecimal.ZERO).compareTo(new BigDecimal("123"))==0);
20152015
assertTrue("unexpected optBigDecimal value",jo.optBigDecimal("int",BigDecimal.ZERO).compareTo(new BigDecimal("123"))==0);
20162016
assertTrue("unexpected optNumber value",jo.optNumber("int",BigInteger.ZERO).longValue()==123l);
2017+
2018+
// Test type coercion from larger to smaller
2019+
final BigDecimal largeValue = new BigDecimal("19007199254740993.35481234487103587486413587843213584");
2020+
assertEquals(largeValue,jo.optBigDecimal("largeNumber", null));
2021+
assertEquals(largeValue.toBigInteger(),jo.optBigInteger("largeNumber", null));
2022+
assertEquals(largeValue.doubleValue(), jo.optDouble("largeNumber"), 0.0d);
2023+
assertEquals(largeValue.floatValue(), jo.optFloat("largeNumber"), 0.0f);
2024+
assertEquals(largeValue.longValue(), jo.optLong("largeNumber"));
2025+
assertEquals(largeValue.intValue(), jo.optInt("largeNumber"));
20172026
}
20182027

20192028
/**

0 commit comments

Comments
 (0)