View Javadoc

1   package test.crispy.impl.rest;
2   
3   import java.math.BigDecimal;
4   import java.util.Hashtable;
5   import java.util.Map;
6   import java.util.Vector;
7   
8   import junit.framework.TestCase;
9   import net.sf.crispy.impl.rest.ParameterDeserializer;
10  import net.sf.crispy.impl.rest.ParameterSerializer;
11  import test.crispy.example.model.Adresse;
12  import test.crispy.example.model.Kunde;
13  import test.crispy.example.model.Node;
14  
15  public class ParameterDeserializerTest extends TestCase {
16  	
17  	public void testConvertString2Map() throws Exception {
18  		Map lvMap = ParameterDeserializer.convertString2Map("param0=Hello");
19  		assertNotNull(lvMap.get("param0"));
20  		String s[] = (String[]) lvMap.get("param0");
21  		assertEquals(s.length, 1);
22  		assertEquals(s[0], "Hello");
23  	}
24  	
25  	public void testConvertString2MapFromList() throws Exception {
26  		Map lvMap = ParameterDeserializer.convertString2Map("param0=Peter&param1=7");
27  
28  		assertNotNull(lvMap.get("param0"));
29  		String s[] = (String[]) lvMap.get("param0");
30  		assertEquals(s.length, 1);
31  		assertEquals(s[0], "Peter");
32  
33  		assertNotNull(lvMap.get("param1"));
34  		s = (String[]) lvMap.get("param1");
35  		assertEquals(s.length, 1);
36  		assertEquals(s[0], "7");
37  	}
38  
39  	public void testDeserializerSimple() throws Exception {
40  		Map lvMap = ParameterDeserializer.convertString2Map("param0=4711");
41  		Object o = new ParameterDeserializer().deserialize(lvMap);
42  		assertTrue(o instanceof String);
43  		assertEquals(o, "4711");
44  	}
45  	
46  	public void testDeserializerSimpleList() throws Exception {
47  		Map lvMap = ParameterDeserializer.convertString2Map("param0=Peter&param1=7");
48  		Object o = new ParameterDeserializer().deserialize(lvMap);
49  		assertTrue(o instanceof Vector);
50  		Vector lvVector = (Vector) o;
51  		assertEquals(lvVector.size(), 2);
52  		assertEquals(lvVector.get(0), "Peter");
53  		assertEquals(lvVector.get(1), "7");
54  	}
55  
56  	public void testDeserializerSimpleList2() throws Exception {
57  		Vector v = new Vector();
58  		v.add("1");v.add("2");v.add("3");
59  
60  		String lvString = new ParameterSerializer().serialize(v);
61  		Map lvMap = ParameterDeserializer.convertString2Map(lvString);
62  		Object o = new ParameterDeserializer().deserialize(lvMap);
63  		assertNotNull(o);
64  		assertEquals(o.getClass(), Vector.class);
65  		Vector lvVector = (Vector) o;
66  		assertEquals(lvVector.size(), 3);
67  		assertEquals(lvVector.get(0), "1");
68  		assertEquals(lvVector.get(1), "2");
69  		assertEquals(lvVector.get(2), "3");
70  	}
71  	
72  	public void testDeserializerSimpleMap() throws Exception {
73  		Map m = new Hashtable();
74  		m.put("1", "A");m.put("2", "BB");m.put("3", "CCC");
75  		String lvString = new ParameterSerializer().serialize(m);
76  		Map lvMap = ParameterDeserializer.convertString2Map(lvString);
77  		Object o = new ParameterDeserializer().deserialize(lvMap);
78  		assertNotNull(o);
79  		assertEquals(o.getClass(), Hashtable.class);
80  		Map lvMap2 = (Map) o;
81  		assertEquals(lvMap2.get("1"), "A");
82  		assertEquals(lvMap2.get("2"), "BB");
83  		assertEquals(lvMap2.get("3"), "CCC");
84  	}
85  	
86  	public void testParameterDeserializerVectorAndComplex() throws Exception {
87  		Kunde k = new Kunde("Mario");
88  		k.setGehalt(new BigDecimal(12.34));
89  
90  		Vector v = new Vector();
91  		v.add(k);
92  		v.add(new Integer(7));
93  		
94  		String lvString = new ParameterSerializer().serialize(v);
95  		Map lvMap = ParameterDeserializer.convertString2Map(lvString);
96  		Object o = new ParameterDeserializer().deserialize(lvMap);
97  		assertNotNull(o);
98  		assertEquals(o.getClass(), Vector.class);
99  		Vector v2 = (Vector) o;
100 		assertTrue(v2.size() == 2);
101 		assertEquals(v2.get(0).getClass(), Kunde.class);
102 		Kunde kAfter = (Kunde) v2.get(0);
103 		assertEquals(kAfter.getName(), "Mario");
104 		assertEquals(kAfter.getGehalt(), new BigDecimal(12.34));
105 		assertEquals(v2.get(1), "7");
106 	}
107 	
108 	public void testParameterDeserializerMapAndComplex() throws Exception {
109 		Map lvMap0 = new Hashtable ();
110 		Kunde k = new Kunde("Mario");
111 		k.setGehalt(new BigDecimal(12.34));
112 		lvMap0.put("kunde", k);
113 		lvMap0.put("integer", new Integer (7));
114 
115 		String lvString = new ParameterSerializer().serialize(lvMap0);
116 		Map lvMap = ParameterDeserializer.convertString2Map(lvString);
117 		Object o = new ParameterDeserializer().deserialize(lvMap);
118 		assertNotNull(o);
119 		assertEquals(o.getClass(), Hashtable.class);
120 		Map m = (Map) o;
121 		assertEquals(m.get("integer"), "7");
122 		Kunde kAfter = (Kunde) m.get("kunde");
123 		assertEquals(kAfter.getName(), "Mario");
124 		assertEquals(kAfter.getGehalt(), new BigDecimal(12.34));
125 	}
126 
127 	public void testParameterDeserializerComplex() throws Exception {
128 		Kunde k = new Kunde("Mario");
129 		k.setGehalt(new BigDecimal(12.34));
130 
131 		String lvString = new ParameterSerializer().serialize(k);
132 		Map lvMap = ParameterDeserializer.convertString2Map(lvString);
133 		Object o = new ParameterDeserializer().deserialize(lvMap);
134 		assertNotNull(o);
135 		assertEquals(o.getClass(), Kunde.class);
136 		Kunde kAfter = (Kunde) o;
137 		assertEquals(kAfter.getName(), "Mario");
138 		assertEquals(kAfter.getGehalt(), new BigDecimal(12.34));
139 	}
140 	
141 	public void testParameterDeserializerComplexWithRelation() throws Exception {
142 		Kunde k = new Kunde("Mario");
143 		k.setGehalt(new BigDecimal(12.34));
144 		Adresse a = new Adresse();
145 		a.setOrt("Magdeburg");
146 		a.setPlz("39104");
147 		
148 		Adresse a2 = new Adresse();
149 		a2.setOrt("Cottbus");
150 		a2.setPlz("03044");
151 		
152 		k.getAdressen().add(a);
153 		k.getAdressen().add(a2);
154 
155 		String lvString = new ParameterSerializer().serialize(k);
156 		Map lvMap = ParameterDeserializer.convertString2Map(lvString);
157 		Object o = new ParameterDeserializer().deserialize(lvMap);
158 		assertNotNull(o);
159 		assertEquals(o.getClass(), Kunde.class);
160 		Kunde kAfter = (Kunde) o;
161 		assertEquals(kAfter.getName(), "Mario");
162 		assertEquals(kAfter.getGehalt(), new BigDecimal(12.34));
163 		assertEquals(kAfter.getAdressen().size(), 2);
164 		Adresse aAfter1 = (Adresse) kAfter.getAdressen().get(0);
165 		Adresse aAfter2 = (Adresse) kAfter.getAdressen().get(1);
166 		assertEquals(aAfter1.getOrt(), "Magdeburg");
167 		assertEquals(aAfter1.getPlz(), "39104");
168 		assertEquals(aAfter2.getOrt(), "Cottbus");
169 		assertEquals(aAfter2.getPlz(), "03044");
170 	}
171 
172 	public void testParameterDeserializerComplexWithCycle() throws Exception {
173 		Kunde k = new Kunde("Mario");
174 		k.setGehalt(new BigDecimal(12.34));
175 		Adresse a = new Adresse();
176 		a.setOrt("Magdeburg");
177 		a.setPlz("39104");
178 		k.getAdressen().add(a);
179 		a.setKunde(k);
180 		
181 		String lvString = new ParameterSerializer().serialize(k);
182 		Map lvMap = ParameterDeserializer.convertString2Map(lvString);
183 		Object o = new ParameterDeserializer().deserialize(lvMap);
184 		assertNotNull(o);
185 		assertEquals(o.getClass(), Kunde.class);
186 		Kunde kAfter = (Kunde) o;
187 		assertEquals(kAfter.getName(), "Mario");
188 		assertEquals(kAfter.getGehalt(), new BigDecimal(12.34));
189 		assertEquals(kAfter.getAdressen().size(), 1);
190 		Adresse aAfter1 = (Adresse) kAfter.getAdressen().get(0);
191 		assertEquals(aAfter1.getOrt(), "Magdeburg");
192 		assertEquals(aAfter1.getPlz(), "39104");
193 		assertEquals(aAfter1.getKunde(), kAfter);
194 	}
195 	
196 	public void testParameterDeserializerComplexObjectWithVectorWithSameReferences() throws Exception {
197 		Node n1 = new Node("Node1");
198 		Node n2 = new Node("Node2");
199 		Node n3 = new Node("Node3");		
200 		Node nA = new Node("NodeA");
201 		Node nB = new Node("NodeB");
202 		
203 		n1.getChildren().add(n2);
204 		n1.getChildren().add(n3);
205 		n2.getChildren().add(nA);
206 		n2.getChildren().add(nB);
207 		n3.getChildren().add(nA);
208 
209 		String lvString = new ParameterSerializer().serialize(n1);
210 		Map lvMap = ParameterDeserializer.convertString2Map(lvString);
211 		Object o = new ParameterDeserializer().deserialize(lvMap);
212 		assertNotNull(o);
213 		assertEquals(o.getClass(), Node.class);
214 		Node n = (Node) o;
215 		assertEquals(n.getChildren().size(), n1.getChildren().size());
216 		Node n22 = (Node) n.getChildren().get(0);
217 		Node n33 = (Node) n.getChildren().get(1);
218 		assertEquals(n22.getName(), n2.getName());
219 		assertEquals(n22.getChildren().size(), n2.getChildren().size());
220 		Node nA2 = (Node) n22.getChildren().get(0);
221 		Node nB2 = (Node) n22.getChildren().get(1);
222 		assertEquals(nA2.getName(), nA.getName());
223 		assertEquals(nB2.getName(), nB.getName());
224 		assertEquals(n33.getName(), n3.getName());
225 		assertEquals(n33.getChildren().size(), n3.getChildren().size());
226 		Node nA3 = (Node) n33.getChildren().get(0);
227 		assertEquals(nA2.getName(), nA3.getName());
228 		assertEquals(nA2, nA3);
229 	}
230 	
231 
232 	public void testParameterDeserializerComplexObjectWithVector() throws Exception {
233 		Node n1 = new Node("Node1");
234 		Node n2 = new Node("Node2");
235 		Node n3 = new Node("Node3");		
236 		
237 		n1.getChildren().add(n2);
238 		n1.getChildren().add(n3);
239 
240 		String lvString = new ParameterSerializer().serialize(n1);
241 		Map lvMap = ParameterDeserializer.convertString2Map(lvString);
242 		Object o = new ParameterDeserializer().deserialize(lvMap);
243 		assertNotNull(o);
244 		assertEquals(o.getClass(), Node.class);
245 		Node n = (Node) o;
246 		assertEquals(n.getChildren().size(), 2);
247 		Node n22 = (Node) n.getChildren().get(0);
248 		Node n33 = (Node) n.getChildren().get(1);
249 		assertEquals(n22.getName(), n2.getName());
250 		assertEquals(n22.getChildren().size(), n2.getChildren().size());
251 		assertEquals(n33.getName(), n3.getName());
252 		assertEquals(n33.getChildren().size(), n3.getChildren().size());
253 	}
254 
255 	public void testParameterDeserializerComplexObjectWithVectorWithCycle() throws Exception {
256 		Node n1 = new Node("Node1");
257 		Node n2 = new Node("Node2");
258 		Node n3 = new Node("Node3");		
259 		
260 		n1.getChildren().add(n2);
261 		n1.getChildren().add(n3);
262 		n2.getChildren().add(n3);
263 		n3.getChildren().add(n1);
264 
265 		String lvString = new ParameterSerializer().serialize(n1);
266 		Map lvMap = ParameterDeserializer.convertString2Map(lvString);
267 		Object o = new ParameterDeserializer().deserialize(lvMap);
268 		assertNotNull(o);
269 		assertEquals(o.getClass(), Node.class);
270 		Node n11 = (Node) o;
271 		assertEquals(n11.getChildren().size(), 2);
272 		Node n22 = (Node) n11.getChildren().get(0);
273 		Node n33 = (Node) n11.getChildren().get(1);
274 		assertEquals(n22.getName(), n2.getName());
275 		assertEquals(n22.getChildren().size(), n2.getChildren().size());
276 		assertEquals(n33.getName(), n3.getName());
277 		assertEquals(n33.getChildren().size(), n3.getChildren().size());
278 		
279 		Node n223 = (Node) n22.getChildren().get(0);
280 		assertEquals(n223, n33);
281 		
282 		Node n331 = (Node) n33.getChildren().get(0);
283 		assertEquals(n331.getName(), n11.getName());
284 		assertEquals(n331, n11);
285 	}
286 	
287 	public void testParameterDeserializerComplexObjectWithMapWithCycle() throws Exception {
288 		Node n1 = new Node("Node1");
289 		Node n2 = new Node("Node2");
290 		Node n3 = new Node("Node3");		
291 		
292 		n1.getChildrenMap().put(n2.getName(), n2);
293 		n2.getChildrenMap().put(n3.getName(), n3);
294 		n3.getChildrenMap().put(n1.getName(), n1);
295 
296 		String lvString = new ParameterSerializer().serialize(n1);
297 		Map lvMap = ParameterDeserializer.convertString2Map(lvString);
298 		Object o = new ParameterDeserializer().deserialize(lvMap);
299 		assertNotNull(o);
300 		assertEquals(o.getClass(), Node.class);
301 		Node n11 = (Node) o;
302 		assertEquals(n11.getChildrenMap().size(), 1);
303 		Node n22 = (Node) n11.getChildrenMap().get("Node2");
304 		Node n33 = (Node) n22.getChildrenMap().get("Node3");
305 		assertNotNull(n22);
306 		assertNotNull(n33);
307 		assertEquals(n33.getChildrenMap().get("Node1"), n11);
308 	}
309 	
310 	public void testParameterDeserializerComplexObjectWithVector2() throws Exception {
311 		Node n1 = new Node("Node1");
312 		Node n2 = new Node("Node2");
313 		Node n3 = new Node("Node3");		
314 		Node nA = new Node("NodeA");
315 		Node nB = new Node("NodeB");
316 		
317 		n1.getChildren().add(n2);
318 		n2.getChildren().add(n3);
319 		n3.getChildren().add(nA);
320 		nA.getChildren().add(nB);
321 		nB.getChildren().add(n3);
322 		
323 		String lvString = new ParameterSerializer().serialize(n1);
324 		Map lvMap = ParameterDeserializer.convertString2Map(lvString);
325 		Object o = new ParameterDeserializer().deserialize(lvMap);
326 		assertNotNull(o);
327 		assertEquals(o.getClass(), Node.class);
328 		Node n11 = (Node) o;
329 		assertEquals(n11.getChildren().size(), 1);
330 		Node n12 = (Node) n11.getChildren().get(0);
331 		assertEquals(n12.getName(), n2.getName());
332 		Node n13 = (Node) n12.getChildren().get(0);
333 		assertEquals(n13.getName(), n3.getName());
334 		Node n1A = (Node) n13.getChildren().get(0);
335 		assertEquals(n1A.getName(), nA.getName());
336 		Node n1B = (Node) n1A.getChildren().get(0);
337 		assertEquals(n1B.getName(), nB.getName());
338 		
339 		assertEquals(n1B.getChildren().get(0), n13);
340 	}
341 	
342 	public void testParameterDeserializerComplexObjectWithVectorSimple() throws Exception {
343 		Node n1 = new Node("Node1");
344 		n1.getChildren().add("A");
345 		n1.getChildren().add("BBB");
346 		n1.getChildren().add("CC");
347 		
348 		String lvString = new ParameterSerializer().serialize(n1);
349 		Map lvMap = ParameterDeserializer.convertString2Map(lvString);
350 		Object o = new ParameterDeserializer().deserialize(lvMap);
351 		assertNotNull(o);
352 		assertEquals(o.getClass(), Node.class);
353 		Node n11 = (Node) o;
354 		assertEquals(n11.getChildren().size(), n1.getChildren().size());
355 		assertEquals(n11.getChildren().get(0), "A");
356 		assertEquals(n11.getChildren().get(1), "BBB");
357 		assertEquals(n11.getChildren().get(2), "CC");
358 	}
359 	
360 
361 	public void testParameterDeserializerComplexObjectWithMap() throws Exception {
362 		Node n1 = new Node("Node1");
363 		Node n2 = new Node("Node2");
364 		
365 		n1.getChildrenMap().put(n2.getName(), n2);
366 
367 		String lvString = new ParameterSerializer().serialize(n1);
368 		Map lvMap = ParameterDeserializer.convertString2Map(lvString);
369 		Object o = new ParameterDeserializer().deserialize(lvMap);
370 		assertNotNull(o);
371 		assertEquals(o.getClass(), Node.class);
372 		Node n11 = (Node) o;
373 		assertEquals(n11.getChildrenMap().size(), n1.getChildrenMap().size());
374 		Node n22 = (Node) n11.getChildrenMap().get(n2.getName());
375 		assertEquals(n22.getName(), n2.getName());
376 	}
377 	
378 	public void testParameterDeserializerComplexObjectWithMap2() throws Exception {	
379 		Node n1 = new Node("Node1");
380 		Node n2 = new Node("Node2");
381 		Node n3 = new Node("Node3");		
382 		
383 		n1.getChildrenMap().put(n2.getName(), n2);
384 		n1.getChildrenMap().put(n3.getName(), n3);
385 
386 		String lvString = new ParameterSerializer().serialize(n1);
387 		Map lvMap = ParameterDeserializer.convertString2Map(lvString);
388 		Object o = new ParameterDeserializer().deserialize(lvMap);
389 		assertNotNull(o);
390 		assertEquals(o.getClass(), Node.class);
391 		Node n11 = (Node) o;
392 		assertEquals(n11.getChildrenMap().size(), n1.getChildrenMap().size());
393 		Node n22 = (Node) n11.getChildrenMap().get(n2.getName());
394 		assertEquals(n22.getName(), n2.getName());
395 		Node n33 = (Node) n11.getChildrenMap().get(n3.getName());
396 		assertEquals(n33.getName(), n3.getName());
397 	}
398 	
399 	public void testParameterDeserializerComplexObjectWithMapandVectorMix() throws Exception {
400 		Node n1 = new Node("Node1");
401 		Node n2 = new Node("Node2");
402 		Node n3 = new Node("Node3");
403 		Node nA = new Node("NodeA");
404 		
405 		n1.getChildrenMap().put(n2.getName(), n2);
406 		n1.getChildrenMap().put(n3.getName(), n3);
407 		
408 		n1.getChildren().add(n2);
409 		n1.getChildren().add(n3);
410 		n1.getChildren().add(nA);
411 		
412 		String lvString = new ParameterSerializer().serialize(n1);
413 		Map lvMap = ParameterDeserializer.convertString2Map(lvString);
414 		Object o = new ParameterDeserializer().deserialize(lvMap);
415 		assertNotNull(o);
416 		assertEquals(o.getClass(), Node.class);
417 		Node n11 = (Node) o;
418 		assertEquals(n11.getChildrenMap().size(), n1.getChildrenMap().size());
419 		assertEquals(n11.getChildren().size(), n1.getChildren().size());
420 		Node n22 = (Node) n11.getChildrenMap().get(n2.getName());
421 		Node n33 = (Node) n11.getChildrenMap().get(n3.getName());
422 		assertEquals(n22.getName(), n2.getName());
423 		assertEquals(n33.getName(), n3.getName());
424 		
425 		Node n222 = (Node) n11.getChildren().get(0);
426 		Node n333 = (Node) n11.getChildren().get(1);
427 		Node nAAA = (Node) n11.getChildren().get(2);
428 		assertEquals(n22, n222);
429 		assertEquals(n33, n333);
430 		assertEquals(nAAA.getName(), nA.getName());
431 	}
432 	
433 }