|
2 | 2 |
|
3 | 3 | import static org.junit.Assert.assertNull; |
4 | 4 | import static org.junit.Assert.assertTrue; |
| 5 | +import static org.junit.Assert.assertEquals; |
5 | 6 |
|
| 7 | +import java.io.StringWriter; |
| 8 | +import java.io.Writer; |
6 | 9 | import java.math.BigDecimal; |
7 | 10 | import java.math.BigInteger; |
8 | 11 | import java.util.ArrayList; |
@@ -642,6 +645,71 @@ public void notSimilar() { |
642 | 645 | !jsonArray.similar(otherJsonArray)); |
643 | 646 | } |
644 | 647 |
|
| 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 | + |
645 | 713 | /** |
646 | 714 | * Convert an empty JSONArray to JSONObject |
647 | 715 | */ |
@@ -729,4 +797,179 @@ public void optQueryWithNoResult() { |
729 | 797 | public void optQueryWithSyntaxError() { |
730 | 798 | new JSONArray().optQuery("invalid"); |
731 | 799 | } |
| 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 | + } |
732 | 975 | } |
0 commit comments