/*
* 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.Calendar;
import java.util.Date;
import java.util.HashMap;
import java.util.Map;
import junit.framework.TestCase;
import net.sf.json.processors.JsDateJsonBeanProcessor;
import net.sf.json.processors.JsDateJsonValueProcessor;
import net.sf.json.sample.DateBean;
import net.sf.json.sample.IdentityJsonValueProcessor;
import net.sf.json.test.JSONAssert;
/**
* @author Andres Almiray <aalmiray@users.sourceforge.net>
*/
public class TestJSONObjectWithProcessors extends TestCase {
public static void main( String[] args ) {
junit.textui.TestRunner.run( TestJSONObjectWithProcessors.class );
}
private Date date;
private JsonConfig jsonConfig;
public TestJSONObjectWithProcessors( String name ) {
super( name );
}
public void testBeanWithDateProperty_fromObject_withJsonBeanProcessor() {
DateBean bean = new DateBean();
bean.setDate( date );
bean.setValue( 42 );
jsonConfig.registerJsonBeanProcessor( Date.class, new JsDateJsonBeanProcessor() );
JSONObject jsonObject = JSONObject.fromObject( bean, jsonConfig );
assertNotNull( jsonObject );
assertEquals( 42, jsonObject.getInt( "value" ) );
JSONObject jsDate = jsonObject.getJSONObject( "date" );
assertJsDate( jsDate );
}
public void testBeanWithDateProperty_fromObject_withJsonValueProcessor_1() {
DateBean bean = new DateBean();
bean.setDate( date );
bean.setValue( 42 );
jsonConfig.registerJsonValueProcessor( DateBean.class, Date.class,
new JsDateJsonValueProcessor() );
JSONObject jsonObject = JSONObject.fromObject( bean, jsonConfig );
assertNotNull( jsonObject );
assertEquals( 42, jsonObject.getInt( "value" ) );
JSONObject jsDate = jsonObject.getJSONObject( "date" );
assertJsDate( jsDate );
}
public void testBeanWithDateProperty_fromObject_withJsonValueProcessor_2() {
DateBean bean = new DateBean();
bean.setDate( date );
bean.setValue( 42 );
jsonConfig.registerJsonValueProcessor( DateBean.class, "date", new JsDateJsonValueProcessor() );
JSONObject jsonObject = JSONObject.fromObject( bean, jsonConfig );
assertNotNull( jsonObject );
assertEquals( 42, jsonObject.getInt( "value" ) );
JSONObject jsDate = jsonObject.getJSONObject( "date" );
assertJsDate( jsDate );
}
public void testBeanWithDateProperty_fromObject_withJsonValueProcessor_3() {
DateBean bean = new DateBean();
bean.setDate( date );
bean.setValue( 42 );
jsonConfig.registerJsonValueProcessor( Date.class, new JsDateJsonValueProcessor() );
JSONObject jsonObject = JSONObject.fromObject( bean, jsonConfig );
assertNotNull( jsonObject );
assertEquals( 42, jsonObject.getInt( "value" ) );
JSONObject jsDate = jsonObject.getJSONObject( "date" );
assertJsDate( jsDate );
}
public void testBeanWithDateProperty_fromObject_withJsonValueProcessor_4() {
DateBean bean = new DateBean();
bean.setDate( date );
bean.setValue( 42 );
jsonConfig.registerJsonValueProcessor( "date", new JsDateJsonValueProcessor() );
JSONObject jsonObject = JSONObject.fromObject( bean, jsonConfig );
assertNotNull( jsonObject );
assertEquals( 42, jsonObject.getInt( "value" ) );
JSONObject jsDate = jsonObject.getJSONObject( "date" );
assertJsDate( jsDate );
}
public void testBeanWithDateProperty_put() {
DateBean bean = new DateBean();
bean.setValue( 42 );
jsonConfig.registerJsonBeanProcessor( Date.class, new JsDateJsonBeanProcessor() );
JSONObject jsonObject = JSONObject.fromObject( bean, jsonConfig );
assertNotNull( jsonObject );
assertEquals( 42, jsonObject.getInt( "value" ) );
JSONObject jsDate = jsonObject.getJSONObject( "date" );
JSONAssert.assertNull( jsDate );
jsonObject.element( "date", date, jsonConfig );
jsDate = jsonObject.getJSONObject( "date" );
assertJsDate( jsDate );
}
public void testDateAsBean_fromObject() {
jsonConfig.registerJsonBeanProcessor( Date.class, new JsDateJsonBeanProcessor() );
JSONObject jsDate = JSONObject.fromObject( date, jsonConfig );
assertJsDate( jsDate );
}
public void testNumericValueWithProcessor_Byte(){
Map bean = new HashMap();
bean.put( "value", new Byte(Byte.MAX_VALUE) );
jsonConfig.registerJsonValueProcessor( "value", new IdentityJsonValueProcessor() );
JSONObject jsonObject = JSONObject.fromObject( bean, jsonConfig );
assertNotNull( jsonObject );
assertEquals( new Integer(Byte.MAX_VALUE), jsonObject.get( "value" ));
}
public void testNumericValueWithProcessor_Short(){
Map bean = new HashMap();
bean.put( "value", new Short(Short.MAX_VALUE) );
jsonConfig.registerJsonValueProcessor( "value", new IdentityJsonValueProcessor() );
JSONObject jsonObject = JSONObject.fromObject( bean, jsonConfig );
assertNotNull( jsonObject );
assertEquals( new Integer(Short.MAX_VALUE), jsonObject.get( "value" ));
}
protected void setUp() throws Exception {
Calendar c = Calendar.getInstance();
c.set( Calendar.YEAR, 2007 );
c.set( Calendar.MONTH, 5 );
c.set( Calendar.DAY_OF_MONTH, 17 );
c.set( Calendar.HOUR_OF_DAY, 12 );
c.set( Calendar.MINUTE, 13 );
c.set( Calendar.SECOND, 14 );
c.set( Calendar.MILLISECOND, 150 );
date = c.getTime();
jsonConfig = new JsonConfig();
}
private void assertJsDate( JSONObject jsDate ) {
JSONAssert.assertNotNull( jsDate );
int year = jsDate.getInt( "year" );
// bug ?
assertTrue( year == 2007 || year == 107 );
assertEquals( 5, jsDate.getInt( "month" ) );
assertEquals( 17, jsDate.getInt( "day" ) );
assertEquals( 12, jsDate.getInt( "hours" ) );
assertEquals( 13, jsDate.getInt( "minutes" ) );
assertEquals( 14, jsDate.getInt( "seconds" ) );
assertEquals( 150, jsDate.getInt( "milliseconds" ) );
}
}