1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17 package net.sf.json;
18
19 import java.util.HashMap;
20 import java.util.Map;
21
22 import junit.framework.TestCase;
23 import net.sf.ezmorph.bean.MorphDynaBean;
24 import net.sf.ezmorph.bean.MorphDynaClass;
25 import net.sf.json.sample.BeanA;
26 import net.sf.json.sample.JsonEventAdpater;
27 import net.sf.json.sample.PropertyBean;
28
29 import org.apache.commons.beanutils.DynaBean;
30
31
32
33
34 public class TestJSONObjectEvents extends TestCase {
35 public static void main( String[] args ) {
36 junit.textui.TestRunner.run( TestJSONObjectEvents.class );
37 }
38
39 private JsonConfig jsonConfig;
40 private JsonEventAdpater jsonEventAdpater;
41
42 public TestJSONObjectEvents( String name ) {
43 super( name );
44 }
45
46 public void testFromObject_bean() {
47 JSONObject.fromObject( new BeanA(), jsonConfig );
48 assertEvents();
49 }
50
51 public void testFromObject_bean2() {
52 JSONObject.fromObject( new PropertyBean(), jsonConfig );
53 assertEquals( 0, jsonEventAdpater.getError() );
54 assertEquals( 1, jsonEventAdpater.getWarning() );
55 assertEquals( 0, jsonEventAdpater.getArrayStart() );
56 assertEquals( 0, jsonEventAdpater.getArrayEnd() );
57 assertEquals( 1, jsonEventAdpater.getObjectStart() );
58 assertEquals( 1, jsonEventAdpater.getObjectEnd() );
59 assertEquals( 0, jsonEventAdpater.getElementAdded() );
60 assertEquals( 1, jsonEventAdpater.getPropertySet() );
61 }
62
63 public void testFromObject_dynaBean() throws Exception {
64 JSONObject.fromObject( createDynaBean(), jsonConfig );
65 assertEvents();
66 }
67
68 public void testFromObject_error() {
69 try{
70 JSONObject.fromObject( "[]", jsonConfig );
71 fail( "A JSONException was expected" );
72 }catch( JSONException expected ){
73 assertEquals( 1, jsonEventAdpater.getError() );
74 assertEquals( 0, jsonEventAdpater.getWarning() );
75 assertEquals( 0, jsonEventAdpater.getArrayStart() );
76 assertEquals( 0, jsonEventAdpater.getArrayEnd() );
77 assertEquals( 0, jsonEventAdpater.getObjectStart() );
78 assertEquals( 0, jsonEventAdpater.getObjectEnd() );
79 assertEquals( 0, jsonEventAdpater.getElementAdded() );
80 assertEquals( 0, jsonEventAdpater.getPropertySet() );
81 }
82 }
83
84 public void testFromObject_JSONObject() {
85 JSONObject jsonObject = new JSONObject().element( "name", "json" )
86 .element( "func", new JSONFunction( "return this;" ) )
87 .element( "int", new Integer( 1 ) );
88 JSONObject.fromObject( jsonObject, jsonConfig );
89 assertEvents();
90 }
91
92 public void testFromObject_map() {
93 Map map = new HashMap();
94 map.put( "name", "json" );
95 map.put( "func", new JSONFunction( "return this;" ) );
96 map.put( "int", new Integer( 1 ) );
97 JSONObject.fromObject( map, jsonConfig );
98 assertEvents();
99 }
100
101 public void testFromObject_string() {
102 JSONObject.fromObject( "{name:'json',int:1,func:function(){ return this; }}", jsonConfig );
103 assertEvents();
104 }
105
106 protected void setUp() throws Exception {
107 jsonEventAdpater = new JsonEventAdpater();
108 jsonConfig = new JsonConfig();
109 jsonConfig.addJsonEventListener( jsonEventAdpater );
110 jsonConfig.enableEventTriggering();
111
112 }
113
114 protected void tearDown() throws Exception {
115 jsonEventAdpater.reset();
116 }
117
118 private void assertEvents() {
119 assertEquals( 0, jsonEventAdpater.getError() );
120 assertEquals( 0, jsonEventAdpater.getWarning() );
121 assertEquals( 0, jsonEventAdpater.getArrayStart() );
122 assertEquals( 0, jsonEventAdpater.getArrayEnd() );
123 assertEquals( 1, jsonEventAdpater.getObjectStart() );
124 assertEquals( 1, jsonEventAdpater.getObjectEnd() );
125 assertEquals( 0, jsonEventAdpater.getElementAdded() );
126 assertEquals( 3, jsonEventAdpater.getPropertySet() );
127 }
128
129 private DynaBean createDynaBean() throws Exception {
130 Map properties = new HashMap();
131 properties.put( "name", String.class );
132 properties.put( "func", JSONFunction.class );
133 properties.put( "int", Integer.class );
134 MorphDynaClass dynaClass = new MorphDynaClass( properties );
135 MorphDynaBean dynaBean = (MorphDynaBean) dynaClass.newInstance();
136 dynaBean.setDynaBeanClass( dynaClass );
137 dynaBean.set( "name", "json" );
138 dynaBean.set( "func", new JSONFunction( "return this;" ) );
139 dynaBean.set( "int", new Integer( 1 ) );
140 return dynaBean;
141 }
142 }