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.List;
21 import java.util.Map;
22
23 import junit.framework.TestCase;
24 import net.sf.json.sample.ArrayJSONStringBean;
25 import net.sf.json.sample.BeanA;
26 import net.sf.json.sample.MappingBean;
27 import net.sf.json.sample.ObjectJSONStringBean;
28 import net.sf.json.sample.ValueBean;
29 import net.sf.json.util.JSONTokener;
30
31 import org.apache.commons.beanutils.DynaBean;
32 import org.apache.commons.beanutils.PropertyUtils;
33
34
35
36
37 public class TestJSONSerializer extends TestCase {
38 public static void main( String[] args ) {
39 junit.textui.TestRunner.run( TestJSONSerializer.class );
40 }
41
42 private JsonConfig jsonConfig;
43
44 public TestJSONSerializer( String name ) {
45 super( name );
46 }
47
48 public void testToJava_JSONArray_1() {
49 setName( "JSONArray('[]') -> ToJava[default]" );
50 JSONArray jsonArray = JSONArray.fromObject( "[]" );
51 Object java = JSONSerializer.toJava( jsonArray );
52 assertNotNull( java );
53 assertTrue( java instanceof List );
54 List list = (List) java;
55 assertEquals( 0, list.size() );
56 }
57
58 public void testToJava_JSONArray_2() {
59 setName( "JSONArray('[]') -> ToJava[arrayMode:OBJECT_ARRAY]" );
60 JSONArray jsonArray = JSONArray.fromObject( "[]" );
61 jsonConfig.setArrayMode( JsonConfig.MODE_OBJECT_ARRAY );
62 Object java = JSONSerializer.toJava( jsonArray, jsonConfig );
63 assertNotNull( java );
64 assertTrue( Object[].class.isAssignableFrom( java.getClass() ) );
65 Object[] array = (Object[]) java;
66 assertEquals( 0, array.length );
67 }
68
69 public void testToJava_JSONNull_1() {
70 setName( "JSONNull -> ToJava[default]" );
71 Object java = JSONSerializer.toJava( JSONNull.getInstance() );
72 assertNull( java );
73 }
74
75 public void testToJava_JSONObject_1() {
76 setName( "JSONObject(null:true) -> ToJava[default]" );
77 Object java = JSONSerializer.toJava( new JSONObject( true ) );
78 assertNull( java );
79 }
80
81 public void testToJava_JSONObject_2() throws Exception {
82 setName( "JSONObject -> ToJava[default]" );
83 String json = "{name=\"json\",bool:true,int:1,double:2.2,func:function(a){ return a; },array:[1,2]}";
84 JSONObject jsonObject = JSONObject.fromObject( json );
85 Object bean = JSONSerializer.toJava( jsonObject );
86 assertNotNull( bean );
87 assertTrue( bean instanceof DynaBean );
88 assertEquals( jsonObject.get( "name" ), PropertyUtils.getProperty( bean, "name" ) );
89 assertEquals( jsonObject.get( "bool" ), PropertyUtils.getProperty( bean, "bool" ) );
90 assertEquals( jsonObject.get( "int" ), PropertyUtils.getProperty( bean, "int" ) );
91 assertEquals( jsonObject.get( "double" ), PropertyUtils.getProperty( bean, "double" ) );
92 assertEquals( jsonObject.get( "func" ), PropertyUtils.getProperty( bean, "func" ) );
93 List expected = (List) JSONArray.toCollection( jsonObject.getJSONArray( "array" ) );
94 Assertions.assertEquals( expected, (List) PropertyUtils.getProperty( bean, "array" ) );
95 }
96
97 public void testToJava_JSONObject_3() throws Exception {
98 setName( "JSONObject -> ToJava[rootClass:BeanA]" );
99 String json = "{bool:true,integer:1,string:\"json\"}";
100 JSONObject jsonObject = JSONObject.fromObject( json );
101 jsonConfig.setRootClass( BeanA.class );
102 Object java = JSONSerializer.toJava( jsonObject, jsonConfig );
103 assertNotNull( java );
104 assertTrue( java instanceof BeanA );
105 BeanA bean = (BeanA) java;
106 assertEquals( jsonObject.get( "bool" ), Boolean.valueOf( bean.isBool() ) );
107 assertEquals( jsonObject.get( "integer" ), new Integer( bean.getInteger() ) );
108 assertEquals( jsonObject.get( "string" ), bean.getString() );
109 }
110
111 public void testToJava_JSONObject_4() {
112 setName( "JSONObject -> ToJava[rootClass:BeanA,classMap]" );
113
114 MappingBean mappingBean = new MappingBean();
115 ValueBean beanA = new ValueBean();
116 beanA.setValue( 90000 );
117 ValueBean beanB = new ValueBean();
118 beanB.setValue( 91000 );
119 mappingBean.addAttribute( "beanA", beanA );
120 mappingBean.addAttribute( "beanB", beanB );
121 Map classMap = new HashMap();
122 classMap.put( "bean.*", ValueBean.class );
123
124 JSONObject jsonObject = JSONObject.fromObject( mappingBean );
125 jsonConfig.setRootClass( MappingBean.class );
126 jsonConfig.setClassMap( classMap );
127 Object java = JSONSerializer.toJava( jsonObject, jsonConfig );
128 assertNotNull( java );
129 assertTrue( java instanceof MappingBean );
130 MappingBean mappingBean2 = (MappingBean) java;
131
132 Object ba = mappingBean2.getAttributes()
133 .get( "beanA" );
134 Object bb = mappingBean2.getAttributes()
135 .get( "beanB" );
136 assertTrue( ba instanceof ValueBean );
137 assertTrue( bb instanceof ValueBean );
138 assertEquals( beanA.getValue(), ((ValueBean) ba).getValue() );
139 assertEquals( beanB.getValue(), ((ValueBean) bb).getValue() );
140 }
141
142 public void testToJava_JSONObject_and_reset() throws Exception {
143 String json = "{bool:true,integer:1,string:\"json\"}";
144 JSONObject jsonObject = JSONObject.fromObject( json );
145 jsonConfig.setRootClass( BeanA.class );
146 Object java = JSONSerializer.toJava( jsonObject, jsonConfig );
147 assertNotNull( java );
148 assertTrue( java instanceof BeanA );
149 BeanA bean = (BeanA) java;
150 assertEquals( jsonObject.get( "bool" ), Boolean.valueOf( bean.isBool() ) );
151 assertEquals( jsonObject.get( "integer" ), new Integer( bean.getInteger() ) );
152 assertEquals( jsonObject.get( "string" ), bean.getString() );
153 jsonConfig.reset();
154 java = JSONSerializer.toJava( jsonObject, jsonConfig );
155 assertTrue( java instanceof DynaBean );
156 assertEquals( jsonObject.get( "bool" ), PropertyUtils.getProperty( java, "bool" ) );
157 assertEquals( jsonObject.get( "integer" ), PropertyUtils.getProperty( java, "integer" ) );
158 assertEquals( jsonObject.get( "string" ), PropertyUtils.getProperty( java, "string" ) );
159 }
160
161 public void testToJSON_JSONString_array() {
162 ArrayJSONStringBean bean = new ArrayJSONStringBean();
163 bean.setValue( "'json','json'" );
164 JSON json = JSONSerializer.toJSON( bean );
165 assertNotNull( json );
166 assertTrue( json instanceof JSONArray );
167 Assertions.assertEquals( JSONArray.fromObject( "['json','json']" ), (JSONArray) json );
168 }
169
170 public void testToJSON_JSONString_null() {
171 JSON json = JSONSerializer.toJSON( (JSONString) null );
172 assertNotNull( json );
173 assertTrue( JSONNull.getInstance()
174 .equals( json ) );
175 }
176
177 public void testToJSON_JSONString_object() {
178 ObjectJSONStringBean bean = new ObjectJSONStringBean();
179 bean.setName( "json" );
180 JSON json = JSONSerializer.toJSON( bean );
181 assertNotNull( json );
182 assertTrue( json instanceof JSONObject );
183 Assertions.assertEquals( JSONObject.fromObject( "{\"name\":\"json\"}" ), (JSONObject) json );
184 }
185
186 public void testToJSON_Object_array() {
187 JSON json = JSONSerializer.toJSON( new int[] { 1, 2 } );
188 assertNotNull( json );
189 assertTrue( json instanceof JSONArray );
190 Assertions.assertEquals( JSONArray.fromObject( "[1,2]" ), (JSONArray) json );
191 }
192
193 public void testToJSON_Object_JSONTokener_array() {
194 JSON json = JSONSerializer.toJSON( new JSONTokener( "[1,2]" ) );
195 assertNotNull( json );
196 assertTrue( json instanceof JSONArray );
197 Assertions.assertEquals( JSONArray.fromObject( "[1,2]" ), (JSONArray) json );
198 }
199
200 public void testToJSON_Object_null() {
201 JSON json = JSONSerializer.toJSON( (Object) null );
202 assertNotNull( json );
203 assertTrue( JSONNull.getInstance()
204 .equals( json ) );
205 }
206
207 public void testToJSON_Object_object() {
208 JSON json = JSONSerializer.toJSON( new BeanA() );
209 assertNotNull( json );
210 assertTrue( json instanceof JSONObject );
211 Assertions.assertEquals( JSONObject.fromObject( new BeanA() ), (JSONObject) json );
212 }
213
214 public void testToJSON_String_array() {
215 JSON json = JSONSerializer.toJSON( "['json','json']" );
216 assertNotNull( json );
217 assertTrue( json instanceof JSONArray );
218 Assertions.assertEquals( JSONArray.fromObject( "['json','json']" ), (JSONArray) json );
219 }
220
221 public void testToJSON_String_invalid() {
222 try{
223 JSONSerializer.toJSON( "garbage" );
224 fail( "Should have throwed a JSONException" );
225 }catch( JSONException expected ){
226
227 }
228 }
229
230 public void testToJSON_String_null() {
231 JSON json = JSONSerializer.toJSON( (String) null );
232 assertNotNull( json );
233 assertTrue( JSONNull.getInstance()
234 .equals( json ) );
235 }
236
237 public void testToJSON_String_null_literal() {
238 JSON json = JSONSerializer.toJSON( "null" );
239 assertNotNull( json );
240 assertTrue( JSONNull.getInstance()
241 .equals( json ) );
242 }
243
244 public void testToJSON_String_object() {
245 JSON json = JSONSerializer.toJSON( "{'name':'json'}" );
246 assertNotNull( json );
247 assertTrue( json instanceof JSONObject );
248 Assertions.assertEquals( JSONObject.fromObject( "{\"name\":\"json\"}" ), (JSONObject) json );
249 }
250
251 protected void setUp() throws Exception {
252 jsonConfig = new JsonConfig();
253 }
254 }