/*
* 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();
}
}