@@ -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