Java tutorial
/* * Copyright 2002-2009 the original author or authors. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package net.sf.json; import java.io.StringWriter; import java.io.IOException; import java.math.BigDecimal; import java.math.BigInteger; import java.util.ArrayList; import java.util.HashMap; import java.util.List; import java.util.Map; import junit.framework.TestCase; import net.sf.ezmorph.MorphUtils; import net.sf.ezmorph.bean.MorphDynaBean; import net.sf.ezmorph.bean.MorphDynaClass; import net.sf.json.sample.ArrayJSONStringBean; import net.sf.json.sample.BeanA; import net.sf.json.util.JSONTokener; import org.apache.commons.beanutils.DynaBean; /** * @author Andres Almiray <aalmiray@users.sourceforge.net> */ public class TestJSONArray extends TestCase { public static void main(String[] args) { junit.textui.TestRunner.run(TestJSONArray.class); } public TestJSONArray(String testName) { super(testName); } public void testDiscard() { JSONArray jsonArray = new JSONArray().element("1").element("true").element("string") .element("function(){ return this; }").element("[1,2,3]"); assertEquals(5, jsonArray.size()); jsonArray.discard("string").discard(0); assertEquals(3, jsonArray.size()); assertFalse(jsonArray.contains("string")); assertFalse(jsonArray.contains("1")); } public void testConstructor_Collection() { List l = new ArrayList(); l.add(Boolean.TRUE); l.add(new Integer(1)); l.add("string"); l.add(Object.class); testJSONArray(l, "[true,1,\"string\",\"java.lang.Object\"]"); } public void testConstructor_Collection_JSONArray() { List l = new ArrayList(); l.add(JSONArray.fromObject(new int[] { 1, 2 })); testJSONArray(l, "[[1,2]]"); } public void testConstructor_Collection_JSONFunction() { List l = new ArrayList(); l.add(new JSONFunction(new String[] { "a" }, "return a;")); testJSONArray(l, "[function(a){ return a; }]"); } public void testConstructor_Collection_JSONString() { ArrayJSONStringBean bean = new ArrayJSONStringBean(); bean.setValue("'json','json'"); List l = new ArrayList(); l.add(bean); testJSONArray(l, "[[\"json\",\"json\"]]"); } public void testConstructor_Collection_nulls() { List l = new ArrayList(); l.add(null); l.add(null); testJSONArray(l, "[null,null]"); } public void testConstructor_func() { JSONArray expected = JSONArray.fromObject( new String[] { "'" + new JSONFunction(new String[] { "a" }, "return a;").toString() + "'" }); JSONArray actual = JSONArray.fromObject(new String[] { "'function(a){ return a; }'" }); Assertions.assertEquals(expected, actual); } public void testConstructor_func2() { JSONArray expected = JSONArray.fromObject( new String[] { "\"" + new JSONFunction(new String[] { "a" }, "return a;").toString() + "\"" }); JSONArray actual = JSONArray.fromObject(new String[] { "\"function(a){ return a; }\"" }); Assertions.assertEquals(expected, actual); } public void testConstructor_JSONArray() { JSONArray expected = JSONArray.fromObject("[1,2]"); JSONArray actual = JSONArray.fromObject(JSONArray.fromObject("[1,2]")); Assertions.assertEquals(expected, actual); } public void testConstructor_JSONTokener_functions() { testJSONArray(new JSONTokener("[function(a){ return a; }]"), "[function(a){ return a; }]"); } public void testConstructor_JSONTokener_nulls() { testJSONArray(new JSONTokener("[,,]"), "[null,null]"); } public void testConstructor_JSONTokener_syntax_errors() { try { JSONArray.fromObject(""); fail("Expected a JSONException"); } catch (JSONException expected) { // ok } } public void testConstructor_Object_Array() { JSONArray expected = JSONArray.fromObject("[\"json\",1]"); JSONArray actual = JSONArray.fromObject(new Object[] { "json", new Integer(1) }); Assertions.assertEquals(expected, actual); } public void testConstructor_Object_Array_Array() { JSONArray expected = JSONArray.fromObject("[[1,2]]"); JSONArray actual = JSONArray.fromObject(new Object[] { new int[] { 1, 2 } }); Assertions.assertEquals(expected, actual); } public void testConstructor_Object_Array_BigDecimal() { // bug 1596168 // an array of BigDecimals Number[] numberArray = new Number[] { BigDecimal.valueOf(10000000000L, 10), new BigDecimal("-1.0"), new BigDecimal("99.99E-1") }; assertEquals("1.0000000000", numberArray[0].toString()); assertEquals("-1.0", numberArray[1].toString()); assertEquals("9.999", numberArray[2].toString()); JSONArray jsonNumArray = JSONArray.fromObject(numberArray); assertEquals("1.0000000000", jsonNumArray.get(0).toString()); assertEquals("-1.0", jsonNumArray.get(1).toString()); assertEquals("9.999", jsonNumArray.get(2).toString()); } public void testConstructor_Object_Array_BigInteger() { // bug 1596168 Number[] numberArray = new Number[] { new BigInteger("18437736874454810627"), new BigInteger("9007199254740990") }; assertEquals("18437736874454810627", numberArray[0].toString()); assertEquals("9007199254740990", numberArray[1].toString()); JSONArray jsonNumArray = JSONArray.fromObject(numberArray); assertEquals("18437736874454810627", jsonNumArray.get(0).toString()); assertEquals("9007199254740990", jsonNumArray.get(1).toString()); } public void testConstructor_Object_Array_Class() { JSONArray expected = JSONArray.fromObject("[\"java.lang.Object\"]"); JSONArray actual = JSONArray.fromObject(new Object[] { Object.class }); Assertions.assertEquals(expected, actual); } public void testConstructor_Object_Array_functions() { JSONArray expected = JSONArray.fromObject("[function(a){ return a; }]"); JSONArray actual = JSONArray .fromObject(new JSONFunction[] { new JSONFunction(new String[] { "a" }, "return a;") }); Assertions.assertEquals(expected, actual); } public void testConstructor_Object_Array_functions_2() { JSONArray expected = JSONArray .fromObject(new JSONFunction[] { new JSONFunction(new String[] { "a" }, "return a;") }); JSONArray actual = JSONArray.fromObject("[function(a){ return a; }]"); Assertions.assertEquals(expected, actual); } public void testConstructor_Object_Array_functions_3() { JSONArray expected = JSONArray .fromObject(new JSONFunction[] { new JSONFunction(new String[] { "a" }, "return a;") }); JSONArray actual = JSONArray.fromObject(new String[] { "function(a){ return a; }" }); Assertions.assertEquals(expected, actual); } public void testConstructor_Object_Array_JSONArray() { JSONArray expected = JSONArray.fromObject("[[1,2]]"); JSONArray actual = JSONArray.fromObject(new Object[] { JSONArray.fromObject("[1,2]") }); Assertions.assertEquals(expected, actual); } public void testConstructor_Object_Array_JSONString() { ArrayJSONStringBean bean = new ArrayJSONStringBean(); bean.setValue("'json','json'"); JSONArray expected = JSONArray.fromObject("[[\"json\",\"json\"]]"); JSONArray actual = JSONArray.fromObject(new Object[] { bean }); Assertions.assertEquals(expected, actual); } public void testConstructor_Object_Array_nulls() { JSONArray expected = JSONArray.fromObject("[null,null]"); JSONArray actual = JSONArray.fromObject(new Object[] { null, null }); Assertions.assertEquals(expected, actual); } public void testConstructor_primitive_array_boolean() { testJSONArray(new boolean[] { true, false }, "[true,false]"); } public void testConstructor_primitive_array_byte() { testJSONArray(new byte[] { 1, 2, 3 }, "[1,2,3]"); } public void testConstructor_primitive_array_char() { testJSONArray(new char[] { 'a', 'b', 'c' }, "[\"a\",\"b\",\"c\"]"); } public void testConstructor_primitive_array_double() { testJSONArray(new double[] { 1.1, 2.2, 3.3 }, "[1.1,2.2,3.3]"); } public void testConstructor_primitive_array_double_Infinity() { try { JSONArray.fromObject(new double[] { Double.NEGATIVE_INFINITY }); fail("Should have thrown a JSONException"); } catch (JSONException expected) { // OK } try { JSONArray.fromObject(new double[] { Double.POSITIVE_INFINITY }); fail("Should have thrown a JSONException"); } catch (JSONException expected) { // OK } } public void testConstructor_primitive_array_double_NaNs() { try { JSONArray.fromObject(new double[] { Double.NaN }); fail("Should have thrown a JSONException"); } catch (JSONException expected) { // OK } } public void testConstructor_primitive_array_float() { testJSONArray(new float[] { 1.1f, 2.2f, 3.3f }, "[1.1,2.2,3.3]"); } public void testConstructor_primitive_array_float_Infinity() { try { JSONArray.fromObject(new float[] { Float.NEGATIVE_INFINITY }); fail("Should have thrown a JSONException"); } catch (JSONException expected) { // OK } try { JSONArray.fromObject(new float[] { Float.POSITIVE_INFINITY }); fail("Should have thrown a JSONException"); } catch (JSONException expected) { // OK } } public void testConstructor_primitive_array_float_NaNs() { try { JSONArray.fromObject(new float[] { Float.NaN }); fail("Should have thrown a JSONException"); } catch (JSONException expected) { // OK } } public void testConstructor_primitive_array_int() { testJSONArray(new int[] { 1, 2, 3 }, "[1,2,3]"); } public void testConstructor_primitive_array_long() { testJSONArray(new long[] { 1, 2, 3 }, "[1,2,3]"); } public void testConstructor_primitive_array_short() { testJSONArray(new short[] { 1, 2, 3 }, "[1,2,3]"); } public void testConstructor_String_functions() { testJSONArray("[function(a){ return a; }]", "[function(a){ return a; }]"); } public void testConstructor_String_functions_multi() { testJSONArray("[function(a){ return a; },[function(b){ return b; }]]", "[function(a){ return a; },[function(b){ return b; }]]"); } public void testCycleDetection_arrays() { Object[] array1 = new Object[2]; Object[] array2 = new Object[2]; array1[0] = new Integer(1); array1[1] = array2; array2[0] = new Integer(2); array2[1] = array1; try { JSONArray.fromObject(array1); fail("A JSONException was expected"); } catch (JSONException expected) { assertTrue(expected.getMessage().endsWith("There is a cycle in the hierarchy!")); } } public void testElement_Array() { JSONArray array = new JSONArray(); int[] ints = { 1, 2 }; array.element(ints); Assertions.assertEquals(JSONArray.fromObject(ints), array.getJSONArray(0)); } public void testElement_boolean() { JSONArray jsonArray = new JSONArray(); jsonArray.element(true); assertEquals(1, jsonArray.size()); assertTrue(jsonArray.getBoolean(0)); } public void testElement_Boolean() { JSONArray array = new JSONArray(); array.element(Boolean.TRUE); Assertions.assertTrue(array.getBoolean(0)); } public void testElement_Collection() { List l = new ArrayList(); l.add(Boolean.TRUE); l.add(new Integer(1)); l.add("string"); JSONArray jsonArray = new JSONArray(); jsonArray.element(l); assertEquals(1, jsonArray.size()); Assertions.assertEquals(JSONArray.fromObject("[true,1,\"string\"]"), jsonArray.getJSONArray(0)); } public void testElement_double() { JSONArray jsonArray = new JSONArray(); jsonArray.element(2.0d); assertEquals(1, jsonArray.size()); assertEquals(2.0d, jsonArray.getDouble(0), 0d); } public void testElement_index_0_Array() { JSONArray array = JSONArray.fromObject("[null,null]"); ; int[] ints = { 0, 2 }; array.element(0, ints); Assertions.assertEquals(JSONArray.fromObject(ints), array.getJSONArray(0)); } public void testElement_index_0_Boolean() { JSONArray array = JSONArray.fromObject("[null,null]"); ; array.element(0, Boolean.TRUE); Assertions.assertTrue(array.getBoolean(0)); } public void testElement_index_0_Class() { JSONArray array = JSONArray.fromObject("[null,null]"); array.element(0, Object.class); Assertions.assertEquals("java.lang.Object", array.getString(0)); } public void testElement_index_0_JSON() { JSONArray array = JSONArray.fromObject("[null,null]"); array.element(0, JSONNull.getInstance()); Assertions.assertEquals(JSONNull.getInstance(), array.get(0)); } public void testElement_index_0_JSONFunction() { JSONArray array = JSONArray.fromObject("[null,null]"); JSONFunction f = new JSONFunction("return this;"); array.element(0, f); Assertions.assertEquals(f, (JSONFunction) array.get(0)); } public void testElement_index_0_JSONString() { JSONArray array = JSONArray.fromObject("[null,null]"); ArrayJSONStringBean bean = new ArrayJSONStringBean(); bean.setValue("'json','json'"); array.element(0, bean); Assertions.assertEquals(JSONArray.fromObject(bean), array.getJSONArray(0)); } public void testElement_index_0_JSONTokener() { JSONArray array = JSONArray.fromObject("[null,null]"); JSONTokener tok = new JSONTokener("[0,2]"); array.element(0, tok); tok.reset(); Assertions.assertEquals(JSONArray.fromObject(tok), array.getJSONArray(0)); } public void testElement_index_0_Number() { JSONArray array = JSONArray.fromObject("[null,null]"); array.element(0, new Double(2)); Assertions.assertEquals(new Double(2).doubleValue(), array.getDouble(0), 0d); } public void testElement_index_0_Object() { JSONArray array = JSONArray.fromObject("[null,null]"); array.element(0, new BeanA()); Assertions.assertEquals(JSONObject.fromObject(new BeanA()), array.getJSONObject(0)); } public void testElement_index_0_String() { JSONArray array = JSONArray.fromObject("[null,null]"); array.element(0, "json"); Assertions.assertEquals("json", array.getString(0)); } public void testElement_index_0_String_JSON() { JSONArray array = JSONArray.fromObject("[null,null]"); array.element(0, "[]"); Assertions.assertEquals(new JSONArray().toString(), array.getString(0)); } public void testElement_index_0_String_null() { JSONArray array = JSONArray.fromObject("[null,null]"); array.element(0, (String) null); Assertions.assertEquals("", array.getString(0)); } public void testElement_index_1_Array() { JSONArray array = new JSONArray(); int[] ints = { 1, 2 }; array.element(1, ints); Assertions.assertEquals(JSONArray.fromObject(ints), array.getJSONArray(1)); } public void testElement_index_1_boolean() { JSONArray jsonArray = new JSONArray(); jsonArray.element(1, true); assertEquals(2, jsonArray.size()); assertEquals(JSONNull.getInstance(), jsonArray.get(0)); assertTrue(jsonArray.getBoolean(1)); } public void testElement_index_1_Boolean() { JSONArray array = new JSONArray(); array.element(1, Boolean.TRUE); Assertions.assertTrue(array.getBoolean(1)); } public void testElement_index_1_Class() { JSONArray array = new JSONArray(); array.element(1, Object.class); Assertions.assertEquals("java.lang.Object", array.getString(1)); } public void testElement_index_1_Collection() { List l = new ArrayList(); l.add(Boolean.TRUE); l.add(new Integer(1)); l.add("string"); JSONArray jsonArray = new JSONArray(); jsonArray.element(1, l); assertEquals(2, jsonArray.size()); assertEquals(JSONNull.getInstance(), jsonArray.get(0)); Assertions.assertEquals(JSONArray.fromObject("[true,1,\"string\"]"), jsonArray.getJSONArray(1)); } public void testElement_index_1_double() { JSONArray jsonArray = new JSONArray(); jsonArray.element(1, 2.0d); assertEquals(2, jsonArray.size()); assertEquals(JSONNull.getInstance(), jsonArray.get(0)); assertEquals(2.0d, jsonArray.getDouble(1), 0d); } public void testElement_index_1_int() { JSONArray jsonArray = new JSONArray(); jsonArray.element(1, 1); assertEquals(2, jsonArray.size()); assertEquals(JSONNull.getInstance(), jsonArray.get(0)); assertEquals(1, jsonArray.getInt(1)); } public void testElement_index_1_JSON() { JSONArray array = new JSONArray(); array.element(1, JSONNull.getInstance()); Assertions.assertEquals(JSONNull.getInstance(), array.get(1)); } public void testElement_index_1_JSONFunction() { JSONArray array = new JSONArray(); JSONFunction f = new JSONFunction("return this;"); array.element(1, f); Assertions.assertEquals(f, (JSONFunction) array.get(1)); } public void testElement_index_1_JSONString() { JSONArray array = new JSONArray(); ArrayJSONStringBean bean = new ArrayJSONStringBean(); bean.setValue("'json','json'"); array.element(1, bean); Assertions.assertEquals(JSONArray.fromObject(bean), array.getJSONArray(1)); } public void testElement_index_1_JSONTokener() { JSONArray array = new JSONArray(); JSONTokener tok = new JSONTokener("[1,2]"); array.element(1, tok); tok.reset(); Assertions.assertEquals(JSONArray.fromObject(tok), array.getJSONArray(1)); } public void testElement_index_1_long() { JSONArray jsonArray = new JSONArray(); jsonArray.element(1, 1L); assertEquals(2, jsonArray.size()); assertEquals(JSONNull.getInstance(), jsonArray.get(0)); assertEquals(1L, jsonArray.getLong(1)); } public void testElement_index_1_Map() { Map map = new HashMap(); map.put("name", "json"); JSONArray jsonArray = new JSONArray(); jsonArray.element(1, map); assertEquals(2, jsonArray.size()); assertEquals(JSONNull.getInstance(), jsonArray.get(0)); Assertions.assertEquals(JSONObject.fromObject(map), jsonArray.getJSONObject(1)); } public void testElement_index_1_Number() { JSONArray array = new JSONArray(); array.element(1, new Double(2)); Assertions.assertEquals(new Double(2).doubleValue(), array.getDouble(1), 1d); } public void testElement_index_1_Object() { JSONArray array = new JSONArray(); array.element(1, new BeanA()); Assertions.assertEquals(JSONObject.fromObject(new BeanA()), array.getJSONObject(1)); } public void testElement_index_1_String() { JSONArray array = new JSONArray(); array.element(1, "json"); Assertions.assertEquals("json", array.getString(1)); } public void testElement_index_1_String_JSON() { JSONArray array = new JSONArray(); array.element(1, "[]"); Assertions.assertEquals(new JSONArray().toString(), array.getString(1)); } public void testElement_index_1_String_null() { JSONArray array = new JSONArray(); array.element(1, (String) null); Assertions.assertEquals("", array.getString(1)); } public void testElement_int() { JSONArray jsonArray = new JSONArray(); jsonArray.element(1); assertEquals(1, jsonArray.size()); assertEquals(1, jsonArray.getInt(0)); } public void testElement_JSON() { JSONArray array = new JSONArray(); array.element(JSONNull.getInstance()); Assertions.assertEquals(JSONNull.getInstance(), array.get(0)); } public void testElement_JSONFunction() { JSONArray array = new JSONArray(); JSONFunction f = new JSONFunction("return this;"); array.element(f); Assertions.assertEquals(f, (JSONFunction) array.get(0)); } public void testElement_JSONString() { JSONArray array = new JSONArray(); ArrayJSONStringBean bean = new ArrayJSONStringBean(); bean.setValue("'json','json'"); array.element(bean); Assertions.assertEquals(JSONArray.fromObject(bean), array.getJSONArray(0)); } public void testElement_JSONTokener() { JSONArray array = new JSONArray(); JSONTokener tok = new JSONTokener("[1,2]"); array.element(tok); tok.reset(); Assertions.assertEquals(JSONArray.fromObject(tok), array.getJSONArray(0)); } public void testElement_long() { JSONArray jsonArray = new JSONArray(); jsonArray.element(1L); assertEquals(1, jsonArray.size()); assertEquals(1L, jsonArray.getLong(0)); } public void testElement_Map() { Map map = new HashMap(); map.put("name", "json"); JSONArray jsonArray = new JSONArray(); jsonArray.element(map); assertEquals(1, jsonArray.size()); Assertions.assertEquals(JSONObject.fromObject(map), jsonArray.getJSONObject(0)); } public void testElement_negativeIndex() { try { JSONArray jsonArray = new JSONArray(); jsonArray.element(-1, JSONNull.getInstance()); fail("Expected a JSONException"); } catch (JSONException expected) { // OK } } public void testElement_Number() { JSONArray array = new JSONArray(); array.element(new Double(2)); Assertions.assertEquals(new Double(2).doubleValue(), array.getDouble(0), 0d); } public void testElement_Object() { JSONArray array = new JSONArray(); array.element(new BeanA()); Assertions.assertEquals(JSONObject.fromObject(new BeanA()), array.getJSONObject(0)); } public void testElement_replace() { JSONArray jsonArray = new JSONArray(); jsonArray.element(true); assertEquals(1, jsonArray.size()); assertTrue(jsonArray.getBoolean(0)); jsonArray.element(0, false); assertEquals(1, jsonArray.size()); assertFalse(jsonArray.getBoolean(0)); } public void testElement_String() { JSONArray array = new JSONArray(); array.element("json"); Assertions.assertEquals("json", array.getString(0)); } public void testElement_String_JSON() { JSONArray array = new JSONArray(); array.element("[]"); Assertions.assertEquals(new JSONArray().toString(), array.getString(0)); } public void testElement_String_null() { JSONArray array = new JSONArray(); array.element((String) null); Assertions.assertEquals("", array.getString(0)); } public void testFromObject_BigDecimal() { JSONArray actual = JSONArray.fromObject(new BigDecimal("12345678901234567890.1234567890")); assertTrue(actual.get(0) instanceof BigDecimal); } public void testFromObject_BigInteger() { JSONArray actual = JSONArray.fromObject(new BigInteger("123456789012345678901234567890")); assertTrue(actual.get(0) instanceof BigInteger); } public void testFromObject_Boolean() { JSONArray expected = JSONArray.fromObject("[true]"); JSONArray actual = JSONArray.fromObject(Boolean.TRUE); Assertions.assertEquals(expected, actual); } public void testFromObject_Byte() { JSONArray expected = JSONArray.fromObject("[1]"); JSONArray actual = JSONArray.fromObject(new Byte((byte) 1)); Assertions.assertEquals(expected, actual); } public void testFromObject_Double() { JSONArray expected = JSONArray.fromObject("[1.0]"); JSONArray actual = JSONArray.fromObject(new Double(1d)); Assertions.assertEquals(expected, actual); } public void testFromObject_Float() { JSONArray expected = JSONArray.fromObject("[1.0]"); JSONArray actual = JSONArray.fromObject(new Float(1f)); Assertions.assertEquals(expected, actual); } public void testFromObject_Integer() { JSONArray expected = JSONArray.fromObject("[1]"); JSONArray actual = JSONArray.fromObject(new Integer(1)); Assertions.assertEquals(expected, actual); } public void testFromObject_JSONArray() { JSONArray expected = JSONArray.fromObject("[1,2]"); JSONArray actual = JSONArray.fromObject(JSONArray.fromObject("[1,2]")); Assertions.assertEquals(expected, actual); } public void testFromObject_JSONFunction() { JSONArray expected = JSONArray.fromObject("[function(a){ return a; }]"); JSONArray actual = JSONArray.fromObject(new JSONFunction(new String[] { "a" }, "return a;")); Assertions.assertEquals(expected, actual); } public void testFromObject_JSONString() { ArrayJSONStringBean bean = new ArrayJSONStringBean(); bean.setValue("'json','json'"); JSONArray actual = JSONArray.fromObject(bean); JSONArray expected = JSONArray.fromObject("['json','json']"); Assertions.assertEquals(expected, actual); } public void testFromObject_Long() { JSONArray expected = JSONArray.fromObject("[1]"); JSONArray actual = JSONArray.fromObject(new Long(1L)); Assertions.assertEquals(expected, actual); } public void testFromObject_Map() { JSONArray expected = JSONArray.fromObject("[{}]"); JSONArray actual = JSONArray.fromObject(new HashMap()); Assertions.assertEquals(expected, actual); } public void testFromObject_Short() { JSONArray expected = JSONArray.fromObject("[1]"); JSONArray actual = JSONArray.fromObject(new Short((short) 1)); Assertions.assertEquals(expected, actual); } public void testGet_exception() { try { JSONArray jsonArray = JSONArray.fromObject("[]"); jsonArray.get(0); fail("Expected a IndexOutOfBoundsException"); } catch (IndexOutOfBoundsException expected) { // OK } } public void testGetBoolean_exception() { try { JSONArray jsonArray = JSONArray.fromObject("[[]]"); jsonArray.getBoolean(0); fail("Expected a JSONException"); } catch (JSONException expected) { // OK } } public void testGetBoolean_false() { JSONArray jsonArray = JSONArray.fromObject("[false]"); assertFalse(jsonArray.getBoolean(0)); } public void testGetBoolean_true() { JSONArray jsonArray = JSONArray.fromObject("[true]"); assertTrue(jsonArray.getBoolean(0)); } public void testGetDimensions_empty_array() { int[] dims = JSONArray.getDimensions(new JSONArray()); assertEquals(1, dims.length); assertEquals(0, dims[0]); } public void testGetDimensions_null_array() { int[] dims = JSONArray.getDimensions(null); assertEquals(1, dims.length); assertEquals(0, dims[0]); } public void testGetDimensions_one_dimension() { int[] dims = JSONArray.getDimensions(JSONArray.fromObject("[1,2,3]")); assertEquals(1, dims.length); assertEquals(3, dims[0]); } public void testGetDimensions_pyramid() { int[] dims = JSONArray.getDimensions(JSONArray.fromObject("[1,[2,[3,[4]]]]")); assertEquals(4, dims.length); assertEquals(2, dims[0]); assertEquals(2, dims[1]); assertEquals(2, dims[2]); assertEquals(1, dims[3]); dims = JSONArray.getDimensions(JSONArray.fromObject("[[[[1],2],3],4]")); assertEquals(4, dims.length); assertEquals(2, dims[0]); assertEquals(2, dims[1]); assertEquals(2, dims[2]); assertEquals(1, dims[3]); } public void testGetDimensions_two_dimension() { int[] dims = JSONArray.getDimensions(JSONArray.fromObject("[[1,2,3],[4,5,6]]")); assertEquals(2, dims.length); assertEquals(2, dims[0]); assertEquals(3, dims[1]); dims = JSONArray.getDimensions(JSONArray.fromObject("[[1,2],[4,5,6]]")); assertEquals(2, dims.length); assertEquals(2, dims[0]); assertEquals(3, dims[1]); dims = JSONArray.getDimensions(JSONArray.fromObject("[[1,2,3],[4,5]]")); assertEquals(2, dims.length); assertEquals(2, dims[0]); assertEquals(3, dims[1]); } public void testGetDouble_exception() { try { JSONArray jsonArray = JSONArray.fromObject("[[]]"); jsonArray.getDouble(0); fail("Expected a JSONException"); } catch (JSONException expected) { // OK } } public void testGetDouble_Number() { JSONArray jsonArray = JSONArray.fromObject("[2.0]"); assertEquals(2.0d, jsonArray.getDouble(0), 0d); } public void testGetDouble_String() { JSONArray jsonArray = JSONArray.fromObject("[\"2.0\"]"); assertEquals(2.0d, jsonArray.getDouble(0), 0d); } public void testGetInt_exception() { try { JSONArray jsonArray = JSONArray.fromObject("[[]]"); jsonArray.getInt(0); fail("Expected a JSONException"); } catch (JSONException expected) { // OK } } public void testGetInt_Number() { JSONArray jsonArray = JSONArray.fromObject("[2.0]"); assertEquals(2, jsonArray.getInt(0)); } public void testGetInt_String() { JSONArray jsonArray = JSONArray.fromObject("[\"2.0\"]"); assertEquals(2, jsonArray.getInt(0)); } public void testGetJSONArray() { JSONArray jsonArray = JSONArray.fromObject("[[1,2]]"); Assertions.assertEquals(JSONArray.fromObject("[1,2]").toString(), jsonArray.getJSONArray(0).toString()); } public void testGetJSONArray_exception() { try { JSONArray jsonArray = JSONArray.fromObject("[1]"); jsonArray.getJSONArray(0); fail("Expected a JSONException"); } catch (JSONException expected) { // OK } } public void testGetJSONObject() { JSONArray jsonArray = JSONArray.fromObject("[{\"name\":\"json\"}]"); Assertions.assertEquals(JSONObject.fromObject("{\"name\":\"json\"}"), jsonArray.getJSONObject(0)); } public void testGetJSONObject_exception() { try { JSONArray jsonArray = JSONArray.fromObject("[1]"); jsonArray.getJSONObject(0); fail("Expected a JSONException"); } catch (JSONException expected) { // OK } } public void testGetLong_exception() { try { JSONArray jsonArray = JSONArray.fromObject("[[]]"); jsonArray.getLong(0); fail("Expected a JSONException"); } catch (JSONException expected) { // OK } } public void testGetLong_Number() { JSONArray jsonArray = JSONArray.fromObject("[2.0]"); assertEquals(2, jsonArray.getLong(0)); } public void testGetLong_String() { JSONArray jsonArray = JSONArray.fromObject("[\"2.0\"]"); assertEquals(2, jsonArray.getLong(0)); } public void testGetString() { JSONArray jsonArray = JSONArray.fromObject("[\"2.0\"]"); assertEquals("2.0", jsonArray.getString(0)); } public void testGetString_exception() { try { JSONArray jsonArray = JSONArray.fromObject("[]"); jsonArray.getString(0); fail("Expected a IndexOutOfBoundsException"); } catch (IndexOutOfBoundsException expected) { // OK } } public void testOptionalGet() { Object[] params = new Object[] { new JSONArray(), JSONObject.fromObject("{\"int\":1}") }; JSONArray jsonArray = JSONArray.fromObject(params); assertFalse(jsonArray.optBoolean(0)); assertTrue(jsonArray.optBoolean(0, true)); assertTrue(Double.isNaN(jsonArray.optDouble(0))); assertEquals(0d, jsonArray.optDouble(0, 0d), 0d); assertEquals(0, jsonArray.optInt(0)); assertEquals(1, jsonArray.optInt(0, 1)); assertEquals(null, jsonArray.optJSONArray(1)); Assertions.assertEquals((JSONArray) params[0], jsonArray.optJSONArray(0)); assertEquals(null, jsonArray.optJSONObject(0)); Assertions.assertEquals((JSONObject) params[1], jsonArray.optJSONObject(1)); assertEquals(0, jsonArray.optLong(0)); assertEquals(1, jsonArray.optLong(0, 1)); assertEquals("", jsonArray.optString(3)); assertEquals("json", jsonArray.optString(3, "json")); } public void testToArray_bean_element() { BeanA[] expected = new BeanA[] { new BeanA() }; JSONArray jsonArray = JSONArray.fromObject(expected); Object actual = JSONArray.toArray(jsonArray, BeanA.class); Assertions.assertEquals(expected, actual); } public void testToArray_BigDecimal() { BigDecimal[] expected = new BigDecimal[] { MorphUtils.BIGDECIMAL_ZERO, MorphUtils.BIGDECIMAL_ONE }; JSONArray jsonArray = JSONArray.fromObject(expected); Object actual = JSONArray.toArray(jsonArray); Assertions.assertEquals(expected, actual); } public void testToArray_BigInteger() { BigInteger[] expected = new BigInteger[] { BigInteger.ZERO, BigInteger.ONE }; JSONArray jsonArray = JSONArray.fromObject(expected); Object actual = JSONArray.toArray(jsonArray); Assertions.assertEquals(expected, actual); } public void testToArray_boolean() { boolean[] expected = new boolean[] { true, false }; JSONArray jsonArray = JSONArray.fromObject(expected); Object actual = JSONArray.toArray(jsonArray); Assertions.assertEquals(expected, actual); } public void testToArray_Boolean() { Boolean[] expected = new Boolean[] { Boolean.TRUE, Boolean.FALSE }; JSONArray jsonArray = JSONArray.fromObject(expected); Object actual = JSONArray.toArray(jsonArray); Assertions.assertEquals(expected, actual); } public void testToArray_boolean_multi() { boolean[][] expected = new boolean[][] { { true, false }, { false, true } }; JSONArray jsonArray = JSONArray.fromObject(expected); Object actual = JSONArray.toArray(jsonArray); Assertions.assertEquals(expected, actual); } public void testToArray_byte() { byte[] input = new byte[] { 1, 2, 3, 4, 5, 6 }; int[] expected = new int[] { 1, 2, 3, 4, 5, 6 }; JSONArray jsonArray = JSONArray.fromObject(input); Object actual = JSONArray.toArray(jsonArray); Assertions.assertEquals(expected, actual); } public void testToArray_Byte() { Integer[] expected = new Integer[] { new Integer(1), new Integer(2) }; Byte[] bytes = new Byte[] { new Byte((byte) 1), new Byte((byte) 2) }; JSONArray jsonArray = JSONArray.fromObject(bytes); Object actual = JSONArray.toArray(jsonArray); Assertions.assertEquals(expected, actual); } public void testToArray_byte_multi() { byte[][] input = new byte[][] { { 1, 2, 3 }, { 4, 5, 6 } }; int[][] expected = new int[][] { { 1, 2, 3 }, { 4, 5, 6 } }; JSONArray jsonArray = JSONArray.fromObject(input); Object actual = JSONArray.toArray(jsonArray); Assertions.assertEquals(expected, actual); } public void testToArray_char() { String[] expected = new String[] { "A", "B" }; char[] input = new char[] { 'A', 'B' }; JSONArray jsonArray = JSONArray.fromObject(input); Object actual = JSONArray.toArray(jsonArray); Assertions.assertEquals(expected, actual); } public void testToArray_char_multi() { String[][] expected = new String[][] { { "a", "b" }, { "c", "d" } }; char[][] input = new char[][] { { 'a', 'b' }, { 'c', 'd' } }; JSONArray jsonArray = JSONArray.fromObject(input); Object actual = JSONArray.toArray(jsonArray); Assertions.assertEquals(expected, actual); } public void testToArray_Character() { String[] expected = { "A", "B" }; Character[] chars = new Character[] { new Character('A'), new Character('B') }; JSONArray jsonArray = JSONArray.fromObject(chars); Object actual = JSONArray.toArray(jsonArray); Assertions.assertEquals(expected, actual); } public void testToArray_double() { double[] expected = new double[] { 1, 2, 3, 4, 5, 6 }; JSONArray jsonArray = JSONArray.fromObject(expected); Object actual = JSONArray.toArray(jsonArray); Assertions.assertEquals(expected, actual); } public void testToArray_Double() { Double[] expected = new Double[] { new Double(1d), new Double(2d) }; JSONArray jsonArray = JSONArray.fromObject(expected); Object actual = JSONArray.toArray(jsonArray); Assertions.assertEquals(expected, actual); } public void testToArray_double_multi() { double[][] expected = new double[][] { { 1, 2, 3 }, { 4, 5, 6 } }; JSONArray jsonArray = JSONArray.fromObject(expected); Object actual = JSONArray.toArray(jsonArray); Assertions.assertEquals(expected, actual); } public void testToArray_dynabean_element() throws Exception { DynaBean[] expected = new DynaBean[] { createDynaBean() }; JSONArray jsonArray = JSONArray.fromObject(expected); Object actual = JSONArray.toArray(jsonArray); Assertions.assertEquals(expected, actual); } public void testToArray_float() { double[] expected = new double[] { 1, 2, 3, 4, 5, 6 }; float[] input = new float[] { 1, 2, 3, 4, 5, 6 }; JSONArray jsonArray = JSONArray.fromObject(input); Object actual = JSONArray.toArray(jsonArray); Assertions.assertEquals(expected, actual); } public void testToArray_Float() { Double[] expected = new Double[] { new Double(1d), new Double(2d) }; Float[] floats = new Float[] { new Float(1f), new Float(2f) }; JSONArray jsonArray = JSONArray.fromObject(floats); Object actual = JSONArray.toArray(jsonArray); Assertions.assertEquals(expected, actual); } public void testToArray_float_multi() { double[][] expected = new double[][] { { 1, 2, 3 }, { 4, 5, 6 } }; float[][] input = new float[][] { { 1, 2, 3 }, { 4, 5, 6 } }; JSONArray jsonArray = JSONArray.fromObject(input); Object actual = JSONArray.toArray(jsonArray); Assertions.assertEquals(expected, actual); } public void testToArray_int() { int[] expected = new int[] { 1, 2, 3, 4, 5, 6 }; JSONArray jsonArray = JSONArray.fromObject(expected); Object actual = JSONArray.toArray(jsonArray); Assertions.assertEquals(expected, actual); } public void testToArray_int_multi() { int[][] expected = new int[][] { { 1, 2, 3 }, { 4, 5, 6 } }; JSONArray jsonArray = JSONArray.fromObject(expected); Object actual = JSONArray.toArray(jsonArray); Assertions.assertEquals(expected, actual); } public void testToArray_Integer() { Integer[] expected = new Integer[] { new Integer(1), new Integer(2) }; JSONArray jsonArray = JSONArray.fromObject(expected); Object actual = JSONArray.toArray(jsonArray); Assertions.assertEquals(expected, actual); } public void testToArray_long() { long[] input = new long[] { 1, 2, 3, 4, 5, 6 }; int[] expected = new int[] { 1, 2, 3, 4, 5, 6 }; JSONArray jsonArray = JSONArray.fromObject(input); Object actual = JSONArray.toArray(jsonArray); Assertions.assertEquals(expected, actual); } public void testToArray_Long() { Integer[] expected = new Integer[] { new Integer(1), new Integer(2) }; Long[] longs = new Long[] { new Long(1L), new Long(2L) }; JSONArray jsonArray = JSONArray.fromObject(longs); Object actual = JSONArray.toArray(jsonArray); Assertions.assertEquals(expected, actual); } public void testToArray_long_multi() { long[][] input = new long[][] { { 1, 2, 3 }, { 4, 5, 6 } }; int[][] expected = new int[][] { { 1, 2, 3 }, { 4, 5, 6 } }; JSONArray jsonArray = JSONArray.fromObject(input); Object actual = JSONArray.toArray(jsonArray); Assertions.assertEquals(expected, actual); } public void testToArray_Long2() { Long[] expected = new Long[] { new Long(Integer.MAX_VALUE + 1L), new Long(Integer.MAX_VALUE + 2L) }; JSONArray jsonArray = JSONArray.fromObject(expected); Object actual = JSONArray.toArray(jsonArray); Assertions.assertEquals(expected, actual); } public void testToArray_null_elements() { String[] expected = new String[] { null, null, null }; JSONArray jsonArray = JSONArray.fromObject(expected); Object actual = JSONArray.toArray(jsonArray); Assertions.assertEquals(expected, actual); } public void testToArray_short() { short[] input = new short[] { 1, 2, 3, 4, 5, 6 }; int[] expected = new int[] { 1, 2, 3, 4, 5, 6 }; JSONArray jsonArray = JSONArray.fromObject(input); Object actual = JSONArray.toArray(jsonArray); Assertions.assertEquals(expected, actual); } public void testToArray_Short() { Integer[] expected = new Integer[] { new Integer(1), new Integer(2) }; Short[] shorts = new Short[] { new Short((short) 1), new Short((short) 2) }; JSONArray jsonArray = JSONArray.fromObject(shorts); Object actual = JSONArray.toArray(jsonArray); Assertions.assertEquals(expected, actual); } public void testToArray_short_multi() { short[][] input = new short[][] { { 1, 2, 3 }, { 4, 5, 6 } }; int[][] expected = new int[][] { { 1, 2, 3 }, { 4, 5, 6 } }; JSONArray jsonArray = JSONArray.fromObject(input); Object actual = JSONArray.toArray(jsonArray); Assertions.assertEquals(expected, actual); } public void testToArray_String() { String[] expected = new String[] { "1", "2", "3", "4", "5", "6" }; JSONArray jsonArray = JSONArray.fromObject(expected); Object actual = JSONArray.toArray(jsonArray); Assertions.assertEquals(expected, actual); } public void testToArray_String_multi() { String[][] expected = new String[][] { { "1", "2", "3" }, { "4", "5", "6" } }; JSONArray jsonArray = JSONArray.fromObject(expected); Object actual = JSONArray.toArray(jsonArray); Assertions.assertEquals(expected, actual); } public void testToArray_StringToInt() { int[] expected = new int[] { 1, 2, 3, 4, 5, 6 }; String[] input = new String[] { "1", "2", "3", "4", "5", "6" }; JSONArray jsonArray = JSONArray.fromObject(input); JsonConfig jsonConfig = new JsonConfig(); jsonConfig.setRootClass(Integer.TYPE); Object actual = JSONArray.toArray(jsonArray, jsonConfig); Assertions.assertEquals(expected, actual); } public void testToArray_StringToInteger() { int[] expected = new int[] { 1, 2, 3, 4, 5, 6 }; String[] input = new String[] { "1", "2", "3", "4", "5", "6" }; JSONArray jsonArray = JSONArray.fromObject(input); JsonConfig jsonConfig = new JsonConfig(); jsonConfig.setRootClass(Integer.class); Object actual = JSONArray.toArray(jsonArray, jsonConfig); Assertions.assertEquals(expected, actual); } public void testToArray_StringToInteger_empty() { int[] expected = new int[] {}; String[] input = new String[] {}; JSONArray jsonArray = JSONArray.fromObject(input); JsonConfig jsonConfig = new JsonConfig(); jsonConfig.setRootClass(Integer.class); Object actual = JSONArray.toArray(jsonArray, jsonConfig); Assertions.assertEquals(expected, actual); } public void testToJSONObject() { JSONArray jsonArray = JSONArray.fromObject("[\"json\",1,true]"); JSONObject expected = JSONObject.fromObject("{\"string\":\"json\",\"int\":1,\"bool\":true}"); JSONArray names = JSONArray.fromObject("['string','int','bool']"); Assertions.assertEquals(expected, jsonArray.toJSONObject(names)); } public void testToJSONObject_null_object() { JSONArray jsonArray = new JSONArray(); assertNull(jsonArray.toJSONObject(null)); assertNull(jsonArray.toJSONObject(new JSONArray())); assertNull(jsonArray.toJSONObject(JSONArray.fromObject("['json']"))); } public void testToList_bean_elements() { List expected = new ArrayList(); expected.add(new BeanA()); JSONArray jsonArray = JSONArray.fromObject(expected); List actual = JSONArray.toList(jsonArray, BeanA.class); Assertions.assertEquals(expected, actual); } public void testToList_BigDecimal() { List expected = new ArrayList(); expected.add(MorphUtils.BIGDECIMAL_ZERO); expected.add(MorphUtils.BIGDECIMAL_ONE); JSONArray jsonArray = JSONArray.fromObject(expected); List actual = JSONArray.toList(jsonArray); Assertions.assertEquals(expected, actual); } public void testToList_BigInteger() { List expected = new ArrayList(); expected.add(BigInteger.ZERO); expected.add(BigInteger.ONE); JSONArray jsonArray = JSONArray.fromObject(expected); List actual = JSONArray.toList(jsonArray); Assertions.assertEquals(expected, actual); } public void testToList_Boolean() { List expected = new ArrayList(); expected.add(Boolean.TRUE); expected.add(Boolean.FALSE); JSONArray jsonArray = JSONArray.fromObject(expected); List actual = JSONArray.toList(jsonArray); Assertions.assertEquals(expected, actual); } public void testToList_Byte() { List expected = new ArrayList(); expected.add(new Integer(1)); expected.add(new Integer(2)); List bytes = new ArrayList(); bytes.add(new Byte((byte) 1)); bytes.add(new Byte((byte) 2)); JSONArray jsonArray = JSONArray.fromObject(bytes); List actual = JSONArray.toList(jsonArray); Assertions.assertEquals(expected, actual); } public void testToList_Character() { List expected = new ArrayList(); expected.add("A"); expected.add("B"); List chars = new ArrayList(); chars.add(new Character('A')); chars.add(new Character('B')); JSONArray jsonArray = JSONArray.fromObject(chars); List actual = JSONArray.toList(jsonArray); Assertions.assertEquals(expected, actual); } public void testToList_Double() { List expected = new ArrayList(); expected.add(new Double(1d)); expected.add(new Double(2d)); JSONArray jsonArray = JSONArray.fromObject(expected); List actual = JSONArray.toList(jsonArray); Assertions.assertEquals(expected, actual); } public void testToList_dynaBean_elements() throws Exception { List expected = new ArrayList(); expected.add(createDynaBean()); JSONArray jsonArray = JSONArray.fromObject(expected); List actual = JSONArray.toList(jsonArray); Assertions.assertEquals(expected, actual); } public void testToList_Float() { List expected = new ArrayList(); expected.add(new Double(1d)); expected.add(new Double(2d)); List floats = new ArrayList(); floats.add(new Float(1f)); floats.add(new Float(2f)); JSONArray jsonArray = JSONArray.fromObject(floats); List actual = JSONArray.toList(jsonArray); Assertions.assertEquals(expected, actual); } public void testToList_Integer() { List expected = new ArrayList(); expected.add(new Integer(1)); expected.add(new Integer(2)); JSONArray jsonArray = JSONArray.fromObject(expected); List actual = JSONArray.toList(jsonArray); Assertions.assertEquals(expected, actual); } public void testToList_JSONFunction_elements() { List expected = new ArrayList(); expected.add(new JSONFunction(new String[] { "a" }, "return a;")); JSONArray jsonArray = JSONArray.fromObject(expected); List actual = JSONArray.toList(jsonArray); Assertions.assertEquals(expected, actual); } public void testToList_JSONFunction_elements_2() { List expected = new ArrayList(); expected.add("function(a){ return a; }"); JSONArray jsonArray = JSONArray.fromObject(expected); List actual = JSONArray.toList(jsonArray); Assertions.assertEquals(expected, actual); } public void testToList_Long() { List expected = new ArrayList(); expected.add(new Integer(1)); expected.add(new Integer(2)); List longs = new ArrayList(); longs.add(new Long(1L)); longs.add(new Long(2L)); JSONArray jsonArray = JSONArray.fromObject(longs); List actual = JSONArray.toList(jsonArray); Assertions.assertEquals(expected, actual); } public void testToList_Long2() { List expected = new ArrayList(); expected.add(new Long(Integer.MAX_VALUE + 1L)); expected.add(new Long(Integer.MAX_VALUE + 2L)); JSONArray jsonArray = JSONArray.fromObject(expected); List actual = JSONArray.toList(jsonArray); Assertions.assertEquals(expected, actual); } public void testToList_null_elements() { List expected = new ArrayList(); expected.add(null); expected.add(null); expected.add(null); JSONArray jsonArray = JSONArray.fromObject(expected); List actual = JSONArray.toList(jsonArray); Assertions.assertEquals(expected, actual); } public void testToList_Short() { List expected = new ArrayList(); expected.add(new Integer(1)); expected.add(new Integer(2)); List shorts = new ArrayList(); shorts.add(new Short((short) 1)); shorts.add(new Short((short) 2)); JSONArray jsonArray = JSONArray.fromObject(shorts); List actual = JSONArray.toList(jsonArray); Assertions.assertEquals(expected, actual); } public void testToList_String() { List expected = new ArrayList(); expected.add("A"); expected.add("B"); JSONArray jsonArray = JSONArray.fromObject(expected); List actual = JSONArray.toList(jsonArray); Assertions.assertEquals(expected, actual); } public void testToList_String_multi() { List a = new ArrayList(); a.add("a"); a.add("b"); List b = new ArrayList(); b.add("1"); b.add("2"); List expected = new ArrayList(); expected.add(a); expected.add(b); JSONArray jsonArray = JSONArray.fromObject(expected); List actual = JSONArray.toList(jsonArray); Assertions.assertEquals(expected, actual); } public void testWrite() throws IOException { JSONArray jsonArray = JSONArray.fromObject("[[],{},1,true,\"json\"]"); StringWriter sw = new StringWriter(); jsonArray.write(sw); assertEquals("[[],{},1,true,\"json\"]", sw.toString()); } private MorphDynaBean createDynaBean() throws Exception { Map properties = new HashMap(); properties.put("name", String.class); MorphDynaClass dynaClass = new MorphDynaClass(properties); MorphDynaBean dynaBean = (MorphDynaBean) dynaClass.newInstance(); dynaBean.setDynaBeanClass(dynaClass); dynaBean.set("name", "json"); // JSON Strings can not be null, only empty return dynaBean; } private void testJSONArray(Object array, String expected) { try { JSONArray jsonArray = JSONArray.fromObject(array); assertEquals(expected, jsonArray.toString()); } catch (JSONException jsone) { fail(jsone.getMessage()); } } }