/* * 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.Map; import junit.framework.TestCase; import net.sf.ezmorph.bean.MorphDynaBean; import net.sf.ezmorph.bean.MorphDynaClass; import net.sf.json.sample.BeanA; import net.sf.json.sample.JsonEventAdpater; import net.sf.json.sample.PropertyBean; import org.apache.commons.beanutils.DynaBean; /** * @author Andres Almiray <aalmiray@users.sourceforge.net> */ public class TestJSONObjectEvents extends TestCase { public static void main( String[] args ) { junit.textui.TestRunner.run( TestJSONObjectEvents.class ); } private JsonConfig jsonConfig; private JsonEventAdpater jsonEventAdpater; public TestJSONObjectEvents( String name ) { super( name ); } public void testFromObject_bean() { JSONObject.fromObject( new BeanA(), jsonConfig ); assertEvents(); } public void testFromObject_bean2() { JSONObject.fromObject( new PropertyBean(), jsonConfig ); assertEquals( 0, jsonEventAdpater.getError() ); assertEquals( 1, jsonEventAdpater.getWarning() ); assertEquals( 0, jsonEventAdpater.getArrayStart() ); assertEquals( 0, jsonEventAdpater.getArrayEnd() ); assertEquals( 1, jsonEventAdpater.getObjectStart() ); assertEquals( 1, jsonEventAdpater.getObjectEnd() ); assertEquals( 0, jsonEventAdpater.getElementAdded() ); assertEquals( 1, jsonEventAdpater.getPropertySet() ); } public void testFromObject_dynaBean() throws Exception { JSONObject.fromObject( createDynaBean(), jsonConfig ); assertEvents(); } public void testFromObject_error() { try{ JSONObject.fromObject( "[]", jsonConfig ); fail( "A JSONException was expected" ); }catch( JSONException expected ){ assertEquals( 1, jsonEventAdpater.getError() ); assertEquals( 0, jsonEventAdpater.getWarning() ); assertEquals( 0, jsonEventAdpater.getArrayStart() ); assertEquals( 0, jsonEventAdpater.getArrayEnd() ); assertEquals( 0, jsonEventAdpater.getObjectStart() ); assertEquals( 0, jsonEventAdpater.getObjectEnd() ); assertEquals( 0, jsonEventAdpater.getElementAdded() ); assertEquals( 0, jsonEventAdpater.getPropertySet() ); } } public void testFromObject_JSONObject() { JSONObject jsonObject = new JSONObject().element( "name", "json" ) .element( "func", new JSONFunction( "return this;" ) ) .element( "int", new Integer( 1 ) ); JSONObject.fromObject( jsonObject, jsonConfig ); assertEvents(); } public void testFromObject_map() { Map map = new HashMap(); map.put( "name", "json" ); map.put( "func", new JSONFunction( "return this;" ) ); map.put( "int", new Integer( 1 ) ); JSONObject.fromObject( map, jsonConfig ); assertEvents(); } public void testFromObject_string() { JSONObject.fromObject( "{name:'json',int:1,func:function(){ return this; }}", jsonConfig ); assertEvents(); } protected void setUp() throws Exception { jsonEventAdpater = new JsonEventAdpater(); jsonConfig = new JsonConfig(); jsonConfig.addJsonEventListener( jsonEventAdpater ); jsonConfig.enableEventTriggering(); } protected void tearDown() throws Exception { jsonEventAdpater.reset(); } private void assertEvents() { assertEquals( 0, jsonEventAdpater.getError() ); assertEquals( 0, jsonEventAdpater.getWarning() ); assertEquals( 0, jsonEventAdpater.getArrayStart() ); assertEquals( 0, jsonEventAdpater.getArrayEnd() ); assertEquals( 1, jsonEventAdpater.getObjectStart() ); assertEquals( 1, jsonEventAdpater.getObjectEnd() ); assertEquals( 0, jsonEventAdpater.getElementAdded() ); assertEquals( 3, jsonEventAdpater.getPropertySet() ); } private DynaBean createDynaBean() throws Exception { Map properties = new HashMap(); properties.put( "name", String.class ); properties.put( "func", JSONFunction.class ); properties.put( "int", Integer.class ); MorphDynaClass dynaClass = new MorphDynaClass( properties ); MorphDynaBean dynaBean = (MorphDynaBean) dynaClass.newInstance(); dynaBean.setDynaBeanClass( dynaClass ); dynaBean.set( "name", "json" ); dynaBean.set( "func", new JSONFunction( "return this;" ) ); dynaBean.set( "int", new Integer( 1 ) ); return dynaBean; } }