mirror of
https://github.com/ethauvin/JSON-java.git
synced 2025-06-17 07:50:52 -07:00
Updates tests for better error handling changes
This commit is contained in:
parent
93ca7b176f
commit
c5e4b91fa4
3 changed files with 134 additions and 6 deletions
|
@ -1,5 +1,7 @@
|
||||||
package org.json.junit;
|
package org.json.junit;
|
||||||
|
|
||||||
|
import static org.junit.Assert.assertEquals;
|
||||||
|
import static org.junit.Assert.assertNull;
|
||||||
import static org.junit.Assert.assertTrue;
|
import static org.junit.Assert.assertTrue;
|
||||||
|
|
||||||
import java.util.EnumSet;
|
import java.util.EnumSet;
|
||||||
|
@ -325,6 +327,7 @@ public class EnumTest {
|
||||||
|
|
||||||
JSONObject jsonObject = new JSONObject();
|
JSONObject jsonObject = new JSONObject();
|
||||||
jsonObject.put("strKey", "value");
|
jsonObject.put("strKey", "value");
|
||||||
|
jsonObject.put("strKey2", "VAL1");
|
||||||
jsonObject.put("enumKey", myEnumField);
|
jsonObject.put("enumKey", myEnumField);
|
||||||
jsonObject.put("enumClassKey", myEnumClass);
|
jsonObject.put("enumClassKey", myEnumClass);
|
||||||
|
|
||||||
|
@ -360,11 +363,18 @@ public class EnumTest {
|
||||||
|
|
||||||
// opt with default the wrong value
|
// opt with default the wrong value
|
||||||
actualEnum = jsonObject.optEnum(MyEnumField.class, "strKey", null);
|
actualEnum = jsonObject.optEnum(MyEnumField.class, "strKey", null);
|
||||||
assertTrue("opt null", actualEnum == null);
|
assertNull("opt null", actualEnum);
|
||||||
|
|
||||||
|
// opt with default the string value
|
||||||
|
actualEnum = jsonObject.optEnum(MyEnumField.class, "strKey2", null);
|
||||||
|
assertEquals(MyEnumField.VAL1, actualEnum);
|
||||||
|
|
||||||
// opt with default an index that does not exist
|
// opt with default an index that does not exist
|
||||||
actualEnum = jsonObject.optEnum(MyEnumField.class, "noKey", null);
|
actualEnum = jsonObject.optEnum(MyEnumField.class, "noKey", null);
|
||||||
assertTrue("opt null", actualEnum == null);
|
assertNull("opt null", actualEnum);
|
||||||
|
|
||||||
|
assertNull("Expected Null when the enum class is null",
|
||||||
|
jsonObject.optEnum(null, "enumKey"));
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Exercise the proposed enum API methods on JSONArray
|
* Exercise the proposed enum API methods on JSONArray
|
||||||
|
|
|
@ -2010,6 +2010,8 @@ public class JSONObjectTest {
|
||||||
public void jsonObjectOptNoKey() {
|
public void jsonObjectOptNoKey() {
|
||||||
|
|
||||||
JSONObject jsonObject = new JSONObject();
|
JSONObject jsonObject = new JSONObject();
|
||||||
|
|
||||||
|
assertNull(jsonObject.opt(null));
|
||||||
|
|
||||||
assertTrue("optBigDecimal() should return default BigDecimal",
|
assertTrue("optBigDecimal() should return default BigDecimal",
|
||||||
BigDecimal.TEN.compareTo(jsonObject.optBigDecimal("myKey", BigDecimal.TEN))==0);
|
BigDecimal.TEN.compareTo(jsonObject.optBigDecimal("myKey", BigDecimal.TEN))==0);
|
||||||
|
@ -2088,6 +2090,46 @@ public class JSONObjectTest {
|
||||||
assertEquals(19007199254740992l, (long)Double.parseDouble("19007199254740993.35481234487103587486413587843213584"));
|
assertEquals(19007199254740992l, (long)Double.parseDouble("19007199254740993.35481234487103587486413587843213584"));
|
||||||
assertEquals(2147483647, (int)Double.parseDouble("19007199254740993.35481234487103587486413587843213584"));
|
assertEquals(2147483647, (int)Double.parseDouble("19007199254740993.35481234487103587486413587843213584"));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Verifies that the optBigDecimal method properly converts values to BigDecimal and coerce them consistently.
|
||||||
|
*/
|
||||||
|
@Test
|
||||||
|
public void jsonObjectOptBigDecimal() {
|
||||||
|
JSONObject jo = new JSONObject().put("int", 123).put("long", 654L)
|
||||||
|
.put("float", 1.234f).put("double", 2.345d)
|
||||||
|
.put("bigInteger", new BigInteger("1234"))
|
||||||
|
.put("bigDecimal", new BigDecimal("1234.56789"))
|
||||||
|
.put("nullVal", JSONObject.NULL);
|
||||||
|
|
||||||
|
assertEquals(new BigDecimal("123"),jo.optBigDecimal("int", null));
|
||||||
|
assertEquals(new BigDecimal("654"),jo.optBigDecimal("long", null));
|
||||||
|
assertEquals(new BigDecimal(1.234f),jo.optBigDecimal("float", null));
|
||||||
|
assertEquals(new BigDecimal(2.345d),jo.optBigDecimal("double", null));
|
||||||
|
assertEquals(new BigDecimal("1234"),jo.optBigDecimal("bigInteger", null));
|
||||||
|
assertEquals(new BigDecimal("1234.56789"),jo.optBigDecimal("bigDecimal", null));
|
||||||
|
assertNull(jo.optBigDecimal("nullVal", null));
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Verifies that the optBigDecimal method properly converts values to BigDecimal and coerce them consistently.
|
||||||
|
*/
|
||||||
|
@Test
|
||||||
|
public void jsonObjectOptBigInteger() {
|
||||||
|
JSONObject jo = new JSONObject().put("int", 123).put("long", 654L)
|
||||||
|
.put("float", 1.234f).put("double", 2.345d)
|
||||||
|
.put("bigInteger", new BigInteger("1234"))
|
||||||
|
.put("bigDecimal", new BigDecimal("1234.56789"))
|
||||||
|
.put("nullVal", JSONObject.NULL);
|
||||||
|
|
||||||
|
assertEquals(new BigInteger("123"),jo.optBigInteger("int", null));
|
||||||
|
assertEquals(new BigInteger("654"),jo.optBigInteger("long", null));
|
||||||
|
assertEquals(new BigInteger("1"),jo.optBigInteger("float", null));
|
||||||
|
assertEquals(new BigInteger("2"),jo.optBigInteger("double", null));
|
||||||
|
assertEquals(new BigInteger("1234"),jo.optBigInteger("bigInteger", null));
|
||||||
|
assertEquals(new BigInteger("1234"),jo.optBigInteger("bigDecimal", null));
|
||||||
|
assertNull(jo.optBigDecimal("nullVal", null));
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Confirm behavior when JSONObject put(key, null object) is called
|
* Confirm behavior when JSONObject put(key, null object) is called
|
||||||
|
@ -2099,13 +2141,13 @@ public class JSONObjectTest {
|
||||||
String str = "{\"myKey\": \"myval\"}";
|
String str = "{\"myKey\": \"myval\"}";
|
||||||
JSONObject jsonObjectRemove = new JSONObject(str);
|
JSONObject jsonObjectRemove = new JSONObject(str);
|
||||||
jsonObjectRemove.remove("myKey");
|
jsonObjectRemove.remove("myKey");
|
||||||
|
assertEquals("jsonObject should be empty",0 ,jsonObjectRemove.length());
|
||||||
|
|
||||||
JSONObject jsonObjectPutNull = new JSONObject(str);
|
JSONObject jsonObjectPutNull = new JSONObject(str);
|
||||||
jsonObjectPutNull.put("myKey", (Object) null);
|
jsonObjectPutNull.put("myKey", (Object) null);
|
||||||
|
assertEquals("jsonObject should be empty",0 ,jsonObjectPutNull.length());
|
||||||
|
|
||||||
|
|
||||||
// validate JSON
|
|
||||||
assertTrue("jsonObject should be empty", jsonObjectRemove.length() == 0
|
|
||||||
&& jsonObjectPutNull.length() == 0);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@ -2190,6 +2232,70 @@ public class JSONObjectTest {
|
||||||
stringWriter.close();
|
stringWriter.close();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Confirms that exceptions thrown when writing values are wrapped properly.
|
||||||
|
*/
|
||||||
|
@Test
|
||||||
|
public void testJSONWriterException() throws IOException {
|
||||||
|
final JSONObject jsonObject = new JSONObject();
|
||||||
|
|
||||||
|
jsonObject.put("someKey",new BrokenToString());
|
||||||
|
|
||||||
|
// test single element JSONObject
|
||||||
|
try(StringWriter writer = new StringWriter();) {
|
||||||
|
jsonObject.write(writer).toString();
|
||||||
|
fail("Expected an exception, got a String value");
|
||||||
|
} catch (JSONException e) {
|
||||||
|
assertEquals("Unable to write JSONObject value for key: someKey", e.getMessage());
|
||||||
|
} catch(Exception e) {
|
||||||
|
fail("Expected JSONException");
|
||||||
|
}
|
||||||
|
|
||||||
|
//test multiElement
|
||||||
|
jsonObject.put("somethingElse", "a value");
|
||||||
|
|
||||||
|
try (StringWriter writer = new StringWriter()) {
|
||||||
|
jsonObject.write(writer).toString();
|
||||||
|
fail("Expected an exception, got a String value");
|
||||||
|
} catch (JSONException e) {
|
||||||
|
assertEquals("Unable to write JSONObject value for key: someKey", e.getMessage());
|
||||||
|
} catch(Exception e) {
|
||||||
|
fail("Expected JSONException");
|
||||||
|
}
|
||||||
|
|
||||||
|
// test a more complex object
|
||||||
|
try (StringWriter writer = new StringWriter()) {
|
||||||
|
new JSONObject()
|
||||||
|
.put("somethingElse", "a value")
|
||||||
|
.put("someKey", new JSONArray()
|
||||||
|
.put(new JSONObject().put("key1", new BrokenToString())))
|
||||||
|
.write(writer).toString();
|
||||||
|
fail("Expected an exception, got a String value");
|
||||||
|
} catch (JSONException e) {
|
||||||
|
assertEquals("Unable to write JSONObject value for key: someKey", e.getMessage());
|
||||||
|
} catch(Exception e) {
|
||||||
|
fail("Expected JSONException");
|
||||||
|
}
|
||||||
|
|
||||||
|
// test a more slightly complex object
|
||||||
|
try (StringWriter writer = new StringWriter()) {
|
||||||
|
new JSONObject()
|
||||||
|
.put("somethingElse", "a value")
|
||||||
|
.put("someKey", new JSONArray()
|
||||||
|
.put(new JSONObject().put("key1", new BrokenToString()))
|
||||||
|
.put(12345)
|
||||||
|
)
|
||||||
|
.write(writer).toString();
|
||||||
|
fail("Expected an exception, got a String value");
|
||||||
|
} catch (JSONException e) {
|
||||||
|
assertEquals("Unable to write JSONObject value for key: someKey", e.getMessage());
|
||||||
|
} catch(Exception e) {
|
||||||
|
fail("Expected JSONException");
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Exercise the JSONObject write() method
|
* Exercise the JSONObject write() method
|
||||||
|
@ -2468,4 +2574,16 @@ public class JSONObjectTest {
|
||||||
assertTrue("Map should have 2 elements", map.size() == 2);
|
assertTrue("Map should have 2 elements", map.size() == 2);
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* test class for verifying write errors.
|
||||||
|
* @author John Aylward
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
private static class BrokenToString {
|
||||||
|
@Override
|
||||||
|
public String toString() {
|
||||||
|
throw new IllegalStateException("Something went horribly wrong!");
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -242,7 +242,7 @@ public class JSONStringTest {
|
||||||
jsonArray.write(writer).toString();
|
jsonArray.write(writer).toString();
|
||||||
fail("Expected an exception, got a String value");
|
fail("Expected an exception, got a String value");
|
||||||
} catch (JSONException e) {
|
} catch (JSONException e) {
|
||||||
assertTrue("Exception message does not match", "the exception value".equals(e.getMessage()));
|
assertEquals("Unable to write JSONArray value at index: 0", e.getMessage());
|
||||||
} catch(Exception e) {
|
} catch(Exception e) {
|
||||||
fail("Expected JSONException");
|
fail("Expected JSONException");
|
||||||
} finally {
|
} finally {
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue