Skip to content

Commit c400de3

Browse files
authored
Merge pull request #53 from run2000/master
valueToString() and write() tests
2 parents a418d07 + e57881f commit c400de3

5 files changed

Lines changed: 838 additions & 15 deletions

File tree

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

Lines changed: 243 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,10 @@
22

33
import static org.junit.Assert.assertNull;
44
import static org.junit.Assert.assertTrue;
5+
import static org.junit.Assert.assertEquals;
56

7+
import java.io.StringWriter;
8+
import java.io.Writer;
69
import java.math.BigDecimal;
710
import java.math.BigInteger;
811
import java.util.ArrayList;
@@ -642,6 +645,71 @@ public void notSimilar() {
642645
!jsonArray.similar(otherJsonArray));
643646
}
644647

648+
/**
649+
* Exercise JSONArray toString() method with various indent levels.
650+
*/
651+
@Test
652+
public void jsonArrayToStringIndent() {
653+
String jsonArray0Str =
654+
"[" +
655+
"[1,2," +
656+
"{\"key3\":true}" +
657+
"]," +
658+
"{\"key1\":\"val1\",\"key2\":" +
659+
"{\"key2\":\"val2\"}" +
660+
"}," +
661+
"[" +
662+
"[1,2.1]" +
663+
"," +
664+
"[null]" +
665+
"]" +
666+
"]";
667+
668+
String jsonArray1Str =
669+
"[\n" +
670+
" [\n" +
671+
" 1,\n" +
672+
" 2,\n" +
673+
" {\"key3\": true}\n" +
674+
" ],\n" +
675+
" {\n" +
676+
" \"key1\": \"val1\",\n" +
677+
" \"key2\": {\"key2\": \"val2\"}\n" +
678+
" },\n" +
679+
" [\n" +
680+
" [\n" +
681+
" 1,\n" +
682+
" 2.1\n" +
683+
" ],\n" +
684+
" [null]\n" +
685+
" ]\n" +
686+
"]";
687+
String jsonArray4Str =
688+
"[\n" +
689+
" [\n" +
690+
" 1,\n" +
691+
" 2,\n" +
692+
" {\"key3\": true}\n" +
693+
" ],\n" +
694+
" {\n" +
695+
" \"key1\": \"val1\",\n" +
696+
" \"key2\": {\"key2\": \"val2\"}\n" +
697+
" },\n" +
698+
" [\n" +
699+
" [\n" +
700+
" 1,\n" +
701+
" 2.1\n" +
702+
" ],\n" +
703+
" [null]\n" +
704+
" ]\n" +
705+
"]";
706+
JSONArray jsonArray = new JSONArray(jsonArray0Str);
707+
assertEquals(jsonArray0Str, jsonArray.toString());
708+
assertEquals(jsonArray0Str, jsonArray.toString(0));
709+
assertEquals(jsonArray1Str, jsonArray.toString(1));
710+
assertEquals(jsonArray4Str, jsonArray.toString(4));
711+
}
712+
645713
/**
646714
* Convert an empty JSONArray to JSONObject
647715
*/
@@ -729,4 +797,179 @@ public void optQueryWithNoResult() {
729797
public void optQueryWithSyntaxError() {
730798
new JSONArray().optQuery("invalid");
731799
}
800+
801+
802+
/**
803+
* Exercise the JSONArray write() method
804+
*/
805+
@Test
806+
public void write() {
807+
String str = "[\"value1\",\"value2\",{\"key1\":1,\"key2\":2,\"key3\":3}]";
808+
JSONArray jsonArray = new JSONArray(str);
809+
String expectedStr = str;
810+
StringWriter stringWriter = new StringWriter();
811+
Writer writer = jsonArray.write(stringWriter);
812+
String actualStr = writer.toString();
813+
assertTrue("write() expected " + expectedStr +
814+
" but found " + actualStr,
815+
expectedStr.equals(actualStr));
816+
}
817+
818+
/**
819+
* Exercise the JSONArray write() method using Appendable.
820+
*/
821+
/*
822+
@Test
823+
public void writeAppendable() {
824+
String str = "[\"value1\",\"value2\",{\"key1\":1,\"key2\":2,\"key3\":3}]";
825+
JSONArray jsonArray = new JSONArray(str);
826+
String expectedStr = str;
827+
StringBuilder stringBuilder = new StringBuilder();
828+
Appendable appendable = jsonArray.write(stringBuilder);
829+
String actualStr = appendable.toString();
830+
assertTrue("write() expected " + expectedStr +
831+
" but found " + actualStr,
832+
expectedStr.equals(actualStr));
833+
}
834+
*/
835+
836+
/**
837+
* Exercise the JSONArray write(Writer, int, int) method
838+
*/
839+
@Test
840+
public void write3Param() {
841+
String str0 = "[\"value1\",\"value2\",{\"key1\":1,\"key2\":false,\"key3\":3.14}]";
842+
String str2 =
843+
"[\n" +
844+
" \"value1\",\n" +
845+
" \"value2\",\n" +
846+
" {\n" +
847+
" \"key1\": 1,\n" +
848+
" \"key2\": false,\n" +
849+
" \"key3\": 3.14\n" +
850+
" }\n" +
851+
" ]";
852+
JSONArray jsonArray = new JSONArray(str0);
853+
String expectedStr = str0;
854+
StringWriter stringWriter = new StringWriter();
855+
Writer writer = jsonArray.write(stringWriter, 0, 0);
856+
String actualStr = writer.toString();
857+
assertEquals(expectedStr, actualStr);
858+
859+
expectedStr = str2;
860+
stringWriter = new StringWriter();
861+
writer = jsonArray.write(stringWriter, 2, 1);
862+
actualStr = writer.toString();
863+
assertEquals(expectedStr, actualStr);
864+
}
865+
866+
/**
867+
* Exercise the JSONArray write(Appendable, int, int) method
868+
*/
869+
/*
870+
@Test
871+
public void write3ParamAppendable() {
872+
String str0 = "[\"value1\",\"value2\",{\"key1\":1,\"key2\":false,\"key3\":3.14}]";
873+
String str2 =
874+
"[\n" +
875+
" \"value1\",\n" +
876+
" \"value2\",\n" +
877+
" {\n" +
878+
" \"key1\": 1,\n" +
879+
" \"key2\": false,\n" +
880+
" \"key3\": 3.14\n" +
881+
" }\n" +
882+
" ]";
883+
JSONArray jsonArray = new JSONArray(str0);
884+
String expectedStr = str0;
885+
StringBuilder stringBuilder = new StringBuilder();
886+
Appendable appendable = jsonArray.write(stringBuilder, 0, 0);
887+
String actualStr = appendable.toString();
888+
assertEquals(expectedStr, actualStr);
889+
890+
expectedStr = str2;
891+
stringBuilder = new StringBuilder();
892+
appendable = jsonArray.write(stringBuilder, 2, 1);
893+
actualStr = appendable.toString();
894+
assertEquals(expectedStr, actualStr);
895+
}
896+
*/
897+
898+
/**
899+
* Exercise JSONArray toString() method with various indent levels.
900+
*/
901+
@Test
902+
public void toList() {
903+
String jsonArrayStr =
904+
"[" +
905+
"[1,2," +
906+
"{\"key3\":true}" +
907+
"]," +
908+
"{\"key1\":\"val1\",\"key2\":" +
909+
"{\"key2\":null}," +
910+
"\"key3\":42,\"key4\":[]" +
911+
"}," +
912+
"[" +
913+
"[\"value1\",2.1]" +
914+
"," +
915+
"[null]" +
916+
"]" +
917+
"]";
918+
919+
JSONArray jsonArray = new JSONArray(jsonArrayStr);
920+
List list = jsonArray.toList();
921+
922+
assertTrue("List should not be null", list != null);
923+
assertTrue("List should have 3 elements", list.size() == 3);
924+
925+
List val1List = (List) list.get(0);
926+
assertTrue("val1 should not be null", val1List != null);
927+
assertTrue("val1 should have 3 elements", val1List.size() == 3);
928+
929+
assertTrue("val1 value 1 should be 1", val1List.get(0).equals(Integer.valueOf(1)));
930+
assertTrue("val1 value 2 should be 2", val1List.get(1).equals(Integer.valueOf(2)));
931+
932+
Map key1Value3Map = (Map)val1List.get(2);
933+
assertTrue("Map should not be null", key1Value3Map != null);
934+
assertTrue("Map should have 1 element", key1Value3Map.size() == 1);
935+
assertTrue("Map key3 should be true", key1Value3Map.get("key3").equals(Boolean.TRUE));
936+
937+
Map val2Map = (Map) list.get(1);
938+
assertTrue("val2 should not be null", val2Map != null);
939+
assertTrue("val2 should have 4 elements", val2Map.size() == 4);
940+
assertTrue("val2 map key 1 should be val1", val2Map.get("key1").equals("val1"));
941+
assertTrue("val2 map key 3 should be 42", val2Map.get("key3").equals(Integer.valueOf(42)));
942+
943+
Map val2Key2Map = (Map)val2Map.get("key2");
944+
assertTrue("val2 map key 2 should not be null", val2Key2Map != null);
945+
assertTrue("val2 map key 2 should have an entry", val2Key2Map.containsKey("key2"));
946+
assertTrue("val2 map key 2 value should be null", val2Key2Map.get("key2") == null);
947+
948+
List val2Key4List = (List)val2Map.get("key4");
949+
assertTrue("val2 map key 4 should not be null", val2Key4List != null);
950+
assertTrue("val2 map key 4 should be empty", val2Key4List.isEmpty());
951+
952+
List val3List = (List) list.get(2);
953+
assertTrue("val3 should not be null", val3List != null);
954+
assertTrue("val3 should have 2 elements", val3List.size() == 2);
955+
956+
List val3Val1List = (List)val3List.get(0);
957+
assertTrue("val3 list val 1 should not be null", val3Val1List != null);
958+
assertTrue("val3 list val 1 should have 2 elements", val3Val1List.size() == 2);
959+
assertTrue("val3 list val 1 list element 1 should be value1", val3Val1List.get(0).equals("value1"));
960+
assertTrue("val3 list val 1 list element 2 should be 2.1", val3Val1List.get(1).equals(Double.valueOf("2.1")));
961+
962+
List val3Val2List = (List)val3List.get(1);
963+
assertTrue("val3 list val 2 should not be null", val3Val2List != null);
964+
assertTrue("val3 list val 2 should have 1 element", val3Val2List.size() == 1);
965+
assertTrue("val3 list val 2 list element 1 should be null", val3Val2List.get(0) == null);
966+
967+
// assert that toList() is a deep copy
968+
jsonArray.getJSONObject(1).put("key1", "still val1");
969+
assertTrue("val2 map key 1 should be val1", val2Map.get("key1").equals("val1"));
970+
971+
// assert that the new list is mutable
972+
assertTrue("Removing an entry should succeed", list.remove(2) != null);
973+
assertTrue("List should have 2 elements", list.size() == 2);
974+
}
732975
}

0 commit comments

Comments
 (0)