Skip to content

Commit 0dc886d

Browse files
committed
Merge pull request stleary#33 from stleary/Fix-todos-and-cleanup
Fix some todos, clean up some tests, improve coverage
2 parents 0990f34 + fc318a7 commit 0dc886d

File tree

2 files changed

+58
-31
lines changed

2 files changed

+58
-31
lines changed

CookieListTest.java

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -143,6 +143,11 @@ public void convertCookieListToString() {
143143
"name5=myCookieValue5;"+
144144
" name6=myCookieValue6;";
145145
JSONObject jsonObject = CookieList.toJSONObject(cookieStr);
146+
// exercise CookieList.toString()
147+
String cookieListString = CookieList.toString(jsonObject);
148+
// have to convert it back for validation
149+
jsonObject = CookieList.toJSONObject(cookieListString);
150+
146151
// validate JSON content
147152
Object doc = Configuration.defaultConfiguration().jsonProvider().parse(jsonObject.toString());
148153
assertTrue("Expected 6 top level items", ((Map<?,?>)(JsonPath.read(doc, "$"))).size() == 6);

JSONObjectTest.java

Lines changed: 53 additions & 31 deletions
Original file line numberDiff line numberDiff line change
@@ -299,15 +299,6 @@ public void jsonObjectByBean() {
299299
when(myBean.isFalseKey()).thenReturn(false);
300300
when(myBean.getStringReaderKey()).thenReturn(
301301
new StringReader("") {
302-
/**
303-
* TODO: Need to understand why returning a string
304-
* turns "this" into an empty JSONObject,
305-
* but not overriding turns "this" into a string.
306-
*/
307-
@Override
308-
public String toString(){
309-
return "Whatever";
310-
}
311302
});
312303

313304
JSONObject jsonObject = new JSONObject(myBean);
@@ -349,11 +340,11 @@ public void jsonObjectByObjectAndNames() {
349340
}
350341

351342
/**
352-
* Exercise the JSONObject from resource bundle functionality
343+
* Exercise the JSONObject from resource bundle functionality.
344+
* The test resource bundle is uncomplicated, but provides adequate test coverage.
353345
*/
354346
@Test
355347
public void jsonObjectByResourceBundle() {
356-
// TODO: how to improve resource bundle testing?
357348
JSONObject jsonObject = new
358349
JSONObject("org.json.junit.StringsResourceBundle",
359350
Locale.getDefault());
@@ -374,7 +365,6 @@ public void jsonObjectByResourceBundle() {
374365
*/
375366
@Test
376367
public void jsonObjectAccumulate() {
377-
// TODO: should include an unsupported object
378368

379369
JSONObject jsonObject = new JSONObject();
380370
jsonObject.accumulate("myArray", true);
@@ -383,6 +373,11 @@ public void jsonObjectAccumulate() {
383373
jsonObject.accumulate("myArray", "h\be\tllo w\u1234orld!");
384374
jsonObject.accumulate("myArray", 42);
385375
jsonObject.accumulate("myArray", -23.45e7);
376+
// include an unsupported object for coverage
377+
try {
378+
jsonObject.accumulate("myArray", Double.NaN);
379+
assertTrue("Expected exception", false);
380+
} catch (JSONException ignored) {}
386381

387382
// validate JSON
388383
Object doc = Configuration.defaultConfiguration().jsonProvider().parse(jsonObject.toString());
@@ -401,14 +396,18 @@ public void jsonObjectAccumulate() {
401396
*/
402397
@Test
403398
public void jsonObjectAppend() {
404-
// TODO: should include an unsupported object
405399
JSONObject jsonObject = new JSONObject();
406400
jsonObject.append("myArray", true);
407401
jsonObject.append("myArray", false);
408402
jsonObject.append("myArray", "hello world!");
409403
jsonObject.append("myArray", "h\be\tllo w\u1234orld!");
410404
jsonObject.append("myArray", 42);
411405
jsonObject.append("myArray", -23.45e7);
406+
// include an unsupported object for coverage
407+
try {
408+
jsonObject.append("myArray", Double.NaN);
409+
assertTrue("Expected exception", false);
410+
} catch (JSONException ignored) {}
412411

413412
// validate JSON
414413
Object doc = Configuration.defaultConfiguration().jsonProvider().parse(jsonObject.toString());
@@ -818,34 +817,49 @@ public void bigNumberOperations() {
818817
/**
819818
* JSONObject put(String, Object) method stores and serializes
820819
* bigInt and bigDec correctly. Nothing needs to change.
821-
* TODO: New methods
822-
* get|optBigInteger|BigDecimal() should work like other supported
823-
* objects. Uncomment the get/opt methods after JSONObject is updated.
824820
*/
825821
jsonObject = new JSONObject();
826822
jsonObject.put("bigInt", bigInteger);
827823
assertTrue("jsonObject.put() handles bigInt correctly",
828824
jsonObject.get("bigInt").equals(bigInteger));
829-
// assertTrue("jsonObject.getBigInteger() handles bigInt correctly",
830-
// jsonObject.getBigInteger("bigInt").equals(bigInteger));
831-
// assertTrue("jsonObject.optBigInteger() handles bigInt correctly",
832-
// jsonObject.optBigInteger("bigInt", BigInteger.ONE).equals(bigInteger));
825+
assertTrue("jsonObject.getBigInteger() handles bigInt correctly",
826+
jsonObject.getBigInteger("bigInt").equals(bigInteger));
827+
assertTrue("jsonObject.optBigInteger() handles bigInt correctly",
828+
jsonObject.optBigInteger("bigInt", BigInteger.ONE).equals(bigInteger));
833829
assertTrue("jsonObject serializes bigInt correctly",
834830
jsonObject.toString().equals("{\"bigInt\":123456789012345678901234567890}"));
835831
jsonObject = new JSONObject();
836832
jsonObject.put("bigDec", bigDecimal);
837833
assertTrue("jsonObject.put() handles bigDec correctly",
838834
jsonObject.get("bigDec").equals(bigDecimal));
839-
// assertTrue("jsonObject.getBigDecimal() handles bigDec correctly",
840-
// jsonObject.getBigDecimal("bigDec").equals(bigDecimal));
841-
// assertTrue("jsonObject.optBigDecimal() handles bigDec correctly",
842-
// jsonObject.optBigDecimal("bigDec", BigDecimal.ONE).equals(bigDecimal));
835+
assertTrue("jsonObject.getBigDecimal() handles bigDec correctly",
836+
jsonObject.getBigDecimal("bigDec").equals(bigDecimal));
837+
assertTrue("jsonObject.optBigDecimal() handles bigDec correctly",
838+
jsonObject.optBigDecimal("bigDec", BigDecimal.ONE).equals(bigDecimal));
843839
assertTrue("jsonObject serializes bigDec correctly",
844840
jsonObject.toString().equals(
845841
"{\"bigDec\":123456789012345678901234567890.12345678901234567890123456789}"));
846842

847-
JSONArray jsonArray = new JSONArray();
848-
843+
/**
844+
* exercise some exceptions
845+
*/
846+
try {
847+
jsonObject.getBigDecimal("bigInt");
848+
assertTrue("expected an exeption", false);
849+
} catch (JSONException ignored) {}
850+
obj = jsonObject.optBigDecimal("bigInt", BigDecimal.ONE);
851+
assertTrue("expected BigDecimal", obj.equals(BigDecimal.ONE));
852+
try {
853+
jsonObject.getBigInteger("bigDec");
854+
assertTrue("expected an exeption", false);
855+
} catch (JSONException ignored) {}
856+
jsonObject.put("stringKey", "abc");
857+
try {
858+
jsonObject.getBigDecimal("stringKey");
859+
assertTrue("expected an exeption", false);
860+
} catch (JSONException ignored) {}
861+
obj = jsonObject.optBigInteger("bigDec", BigInteger.ONE);
862+
assertTrue("expected BigInteger", obj.equals(BigInteger.ONE));
849863

850864
/**
851865
* JSONObject.numberToString() works correctly, nothing to change.
@@ -904,7 +918,7 @@ public void bigNumberOperations() {
904918
actualFromPutStr.equals(
905919
"{\"bigDec\":123456789012345678901234567890.12345678901234567890123456789}"));
906920
// bigInt,bigDec put
907-
jsonArray = new JSONArray();
921+
JSONArray jsonArray = new JSONArray();
908922
jsonArray.put(bigInteger);
909923
jsonArray.put(bigDecimal);
910924
actualFromPutStr = jsonArray.toString();
@@ -1105,7 +1119,7 @@ public void jsonObjectIncrement() {
11051119
String str =
11061120
"{"+
11071121
"\"keyLong\":9999999991,"+
1108-
"\"keyDouble\":1.1,"+
1122+
"\"keyDouble\":1.1"+
11091123
"}";
11101124
JSONObject jsonObject = new JSONObject(str);
11111125
jsonObject.increment("keyInt");
@@ -1115,16 +1129,26 @@ public void jsonObjectIncrement() {
11151129
jsonObject.increment("keyInt");
11161130
jsonObject.increment("keyLong");
11171131
jsonObject.increment("keyDouble");
1132+
/**
1133+
* JSONObject constructor won't handle these types correctly, but
1134+
* adding them via put works.
1135+
*/
11181136
jsonObject.put("keyFloat", new Float(1.1));
1137+
jsonObject.put("keyBigInt", new BigInteger("123456789123456789123456789123456780"));
1138+
jsonObject.put("keyBigDec", new BigDecimal("123456789123456789123456789123456780.1"));
11191139
jsonObject.increment("keyFloat");
11201140
jsonObject.increment("keyFloat");
1141+
jsonObject.increment("keyBigInt");
1142+
jsonObject.increment("keyBigDec");
11211143

11221144
// validate JSON
11231145
Object doc = Configuration.defaultConfiguration().jsonProvider().parse(jsonObject.toString());
1124-
assertTrue("expected 4 top level items", ((Map<?,?>)(JsonPath.read(doc, "$"))).size() == 4);
1146+
assertTrue("expected 6 top level items", ((Map<?,?>)(JsonPath.read(doc, "$"))).size() == 6);
11251147
assertTrue("expected 3", Integer.valueOf(3).equals(JsonPath.read(doc, "$.keyInt")));
11261148
assertTrue("expected 9999999993", Long.valueOf(9999999993L).equals(JsonPath.read(doc, "$.keyLong")));
11271149
assertTrue("expected 3.1", Double.valueOf(3.1).equals(JsonPath.read(doc, "$.keyDouble")));
1150+
assertTrue("expected 123456789123456789123456789123456781", new BigInteger("123456789123456789123456789123456781").equals(JsonPath.read(doc, "$.keyBigInt")));
1151+
assertTrue("expected 123456789123456789123456789123456781.1", new BigDecimal("123456789123456789123456789123456781.1").equals(JsonPath.read(doc, "$.keyBigDec")));
11281152

11291153
/**
11301154
* Should work the same way on any platform! @see https://docs.oracle
@@ -1526,8 +1550,6 @@ public void wrapObject() {
15261550
assertTrue("expected val1", "val1".equals(JsonPath.read(doc, "$.key1")));
15271551
assertTrue("expected val2", "val2".equals(JsonPath.read(doc, "$.key2")));
15281552
assertTrue("expected val3", "val3".equals(JsonPath.read(doc, "$.key3")));
1529-
1530-
// TODO test wrap(package)
15311553
}
15321554

15331555
/**

0 commit comments

Comments
 (0)