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.util.HashMap; import java.util.List; import java.util.Map; import junit.framework.TestCase; import net.sf.json.sample.ArrayJSONStringBean; import net.sf.json.sample.BeanA; import net.sf.json.sample.MappingBean; import net.sf.json.sample.ObjectJSONStringBean; import net.sf.json.sample.ValueBean; import net.sf.json.util.JSONTokener; import org.apache.commons.beanutils.DynaBean; import org.apache.commons.beanutils.PropertyUtils; /** * @author Andres Almiray <aalmiray@users.sourceforge.net> */ public class TestJSONSerializer extends TestCase { public static void main(String[] args) { junit.textui.TestRunner.run(TestJSONSerializer.class); } private JsonConfig jsonConfig; public TestJSONSerializer(String name) { super(name); } public void testToJava_JSONArray_1() { setName("JSONArray('[]') -> ToJava[default]"); JSONArray jsonArray = JSONArray.fromObject("[]"); Object java = JSONSerializer.toJava(jsonArray); assertNotNull(java); assertTrue(java instanceof List); List list = (List) java; assertEquals(0, list.size()); } public void testToJava_JSONArray_2() { setName("JSONArray('[]') -> ToJava[arrayMode:OBJECT_ARRAY]"); JSONArray jsonArray = JSONArray.fromObject("[]"); jsonConfig.setArrayMode(JsonConfig.MODE_OBJECT_ARRAY); Object java = JSONSerializer.toJava(jsonArray, jsonConfig); assertNotNull(java); assertTrue(Object[].class.isAssignableFrom(java.getClass())); Object[] array = (Object[]) java; assertEquals(0, array.length); } public void testToJava_JSONNull_1() { setName("JSONNull -> ToJava[default]"); Object java = JSONSerializer.toJava(JSONNull.getInstance()); assertNull(java); } public void testToJava_JSONObject_1() { setName("JSONObject(null:true) -> ToJava[default]"); Object java = JSONSerializer.toJava(new JSONObject(true)); assertNull(java); } public void testToJava_JSONObject_2() throws Exception { setName("JSONObject -> ToJava[default]"); String json = "{name=\"json\",bool:true,int:1,double:2.2,func:function(a){ return a; },array:[1,2]}"; JSONObject jsonObject = JSONObject.fromObject(json); Object bean = JSONSerializer.toJava(jsonObject); assertNotNull(bean); assertTrue(bean instanceof DynaBean); assertEquals(jsonObject.get("name"), PropertyUtils.getProperty(bean, "name")); assertEquals(jsonObject.get("bool"), PropertyUtils.getProperty(bean, "bool")); assertEquals(jsonObject.get("int"), PropertyUtils.getProperty(bean, "int")); assertEquals(jsonObject.get("double"), PropertyUtils.getProperty(bean, "double")); assertEquals(jsonObject.get("func"), PropertyUtils.getProperty(bean, "func")); List expected = (List) JSONArray.toCollection(jsonObject.getJSONArray("array")); Assertions.assertEquals(expected, (List) PropertyUtils.getProperty(bean, "array")); } public void testToJava_JSONObject_3() throws Exception { setName("JSONObject -> ToJava[rootClass:BeanA]"); String json = "{bool:true,integer:1,string:\"json\"}"; JSONObject jsonObject = JSONObject.fromObject(json); jsonConfig.setRootClass(BeanA.class); Object java = JSONSerializer.toJava(jsonObject, jsonConfig); assertNotNull(java); assertTrue(java instanceof BeanA); BeanA bean = (BeanA) java; assertEquals(jsonObject.get("bool"), Boolean.valueOf(bean.isBool())); assertEquals(jsonObject.get("integer"), new Integer(bean.getInteger())); assertEquals(jsonObject.get("string"), bean.getString()); } public void testToJava_JSONObject_4() { setName("JSONObject -> ToJava[rootClass:BeanA,classMap]"); MappingBean mappingBean = new MappingBean(); ValueBean beanA = new ValueBean(); beanA.setValue(90000); ValueBean beanB = new ValueBean(); beanB.setValue(91000); mappingBean.addAttribute("beanA", beanA); mappingBean.addAttribute("beanB", beanB); Map classMap = new HashMap(); classMap.put("bean.*", ValueBean.class); JSONObject jsonObject = JSONObject.fromObject(mappingBean); jsonConfig.setRootClass(MappingBean.class); jsonConfig.setClassMap(classMap); Object java = JSONSerializer.toJava(jsonObject, jsonConfig); assertNotNull(java); assertTrue(java instanceof MappingBean); MappingBean mappingBean2 = (MappingBean) java; Object ba = mappingBean2.getAttributes().get("beanA"); Object bb = mappingBean2.getAttributes().get("beanB"); assertTrue(ba instanceof ValueBean); assertTrue(bb instanceof ValueBean); assertEquals(beanA.getValue(), ((ValueBean) ba).getValue()); assertEquals(beanB.getValue(), ((ValueBean) bb).getValue()); } public void testToJava_JSONObject_and_reset() throws Exception { String json = "{bool:true,integer:1,string:\"json\"}"; JSONObject jsonObject = JSONObject.fromObject(json); jsonConfig.setRootClass(BeanA.class); Object java = JSONSerializer.toJava(jsonObject, jsonConfig); assertNotNull(java); assertTrue(java instanceof BeanA); BeanA bean = (BeanA) java; assertEquals(jsonObject.get("bool"), Boolean.valueOf(bean.isBool())); assertEquals(jsonObject.get("integer"), new Integer(bean.getInteger())); assertEquals(jsonObject.get("string"), bean.getString()); jsonConfig.reset(); java = JSONSerializer.toJava(jsonObject, jsonConfig); assertTrue(java instanceof DynaBean); assertEquals(jsonObject.get("bool"), PropertyUtils.getProperty(java, "bool")); assertEquals(jsonObject.get("integer"), PropertyUtils.getProperty(java, "integer")); assertEquals(jsonObject.get("string"), PropertyUtils.getProperty(java, "string")); } public void testToJSON_JSONString_array() { ArrayJSONStringBean bean = new ArrayJSONStringBean(); bean.setValue("'json','json'"); JSON json = JSONSerializer.toJSON(bean); assertNotNull(json); assertTrue(json instanceof JSONArray); Assertions.assertEquals(JSONArray.fromObject("['json','json']"), (JSONArray) json); } public void testToJSON_JSONString_null() { JSON json = JSONSerializer.toJSON((JSONString) null); assertNotNull(json); assertTrue(JSONNull.getInstance().equals(json)); } public void testToJSON_JSONString_object() { ObjectJSONStringBean bean = new ObjectJSONStringBean(); bean.setName("json"); JSON json = JSONSerializer.toJSON(bean); assertNotNull(json); assertTrue(json instanceof JSONObject); Assertions.assertEquals(JSONObject.fromObject("{\"name\":\"json\"}"), (JSONObject) json); } public void testToJSON_Object_array() { JSON json = JSONSerializer.toJSON(new int[] { 1, 2 }); assertNotNull(json); assertTrue(json instanceof JSONArray); Assertions.assertEquals(JSONArray.fromObject("[1,2]"), (JSONArray) json); } public void testToJSON_Object_JSONTokener_array() { JSON json = JSONSerializer.toJSON(new JSONTokener("[1,2]")); assertNotNull(json); assertTrue(json instanceof JSONArray); Assertions.assertEquals(JSONArray.fromObject("[1,2]"), (JSONArray) json); } public void testToJSON_Object_null() { JSON json = JSONSerializer.toJSON((Object) null); assertNotNull(json); assertTrue(JSONNull.getInstance().equals(json)); } public void testToJSON_Object_object() { JSON json = JSONSerializer.toJSON(new BeanA()); assertNotNull(json); assertTrue(json instanceof JSONObject); Assertions.assertEquals(JSONObject.fromObject(new BeanA()), (JSONObject) json); } public void testToJSON_String_array() { JSON json = JSONSerializer.toJSON("['json','json']"); assertNotNull(json); assertTrue(json instanceof JSONArray); Assertions.assertEquals(JSONArray.fromObject("['json','json']"), (JSONArray) json); } public void testToJSON_String_invalid() { try { JSONSerializer.toJSON("garbage"); fail("Should have thrown a JSONException"); } catch (JSONException expected) { // ok } } public void testToJSON_String_null() { JSON json = JSONSerializer.toJSON((String) null); assertNotNull(json); assertTrue(JSONNull.getInstance().equals(json)); } public void testToJSON_String_null_literal() { JSON json = JSONSerializer.toJSON("null"); assertNotNull(json); assertTrue(JSONNull.getInstance().equals(json)); } public void testToJSON_String_object() { JSON json = JSONSerializer.toJSON("{'name':'json'}"); assertNotNull(json); assertTrue(json instanceof JSONObject); Assertions.assertEquals(JSONObject.fromObject("{\"name\":\"json\"}"), (JSONObject) json); } protected void setUp() throws Exception { jsonConfig = new JsonConfig(); } }