OSDN Git Service

add copyright
[jindolf/Jindolf.git] / src / test / java / jp / sourceforge / jindolf / json / JsObjectTest.java
1 /*\r
2  * Copyright(c) 2009 olyutorskii\r
3  */\r
4 \r
5 package jp.sourceforge.jindolf.json;\r
6 \r
7 import java.io.StringReader;\r
8 import java.util.Iterator;\r
9 import java.util.LinkedList;\r
10 import java.util.List;\r
11 import java.util.Set;\r
12 import org.junit.After;\r
13 import org.junit.AfterClass;\r
14 import org.junit.Before;\r
15 import org.junit.BeforeClass;\r
16 import org.junit.Test;\r
17 import static org.junit.Assert.*;\r
18 \r
19 /**\r
20  *\r
21  */\r
22 public class JsObjectTest {\r
23 \r
24     public JsObjectTest() {\r
25     }\r
26 \r
27     @BeforeClass\r
28     public static void setUpClass() throws Exception{\r
29     }\r
30 \r
31     @AfterClass\r
32     public static void tearDownClass() throws Exception{\r
33     }\r
34 \r
35     @Before\r
36     public void setUp() {\r
37     }\r
38 \r
39     @After\r
40     public void tearDown() {\r
41     }\r
42 \r
43     /**\r
44      * Test of parseObject method, of class JsObject.\r
45      */\r
46     @Test\r
47     public void testParseObject() throws Exception{\r
48         System.out.println("parseObject");\r
49 \r
50         JsonReader reader;\r
51         JsObject object;\r
52 \r
53         reader = new JsonReader(new StringReader("{}"));\r
54         object = JsObject.parseObject(reader);\r
55         assertEquals(0, object.size());\r
56 \r
57         reader = new JsonReader(new StringReader("{\"A\":true}"));\r
58         object = JsObject.parseObject(reader);\r
59         assertEquals(1, object.size());\r
60         assertEquals(JsBoolean.TRUE, object.getPair("A").getValue());\r
61 \r
62         reader = new JsonReader(new StringReader("{\"A\":true,\"B\":false}"));\r
63         object = JsObject.parseObject(reader);\r
64         assertEquals(2, object.size());\r
65         assertEquals(JsBoolean.TRUE, object.getPair("A").getValue());\r
66         assertEquals(JsBoolean.FALSE, object.getPair("B").getValue());\r
67 \r
68         reader = new JsonReader(new StringReader("\n{\r\"A\"\t: true,\"B\":false\n}\r"));\r
69         object = JsObject.parseObject(reader);\r
70         assertEquals(2, object.size());\r
71         assertEquals(JsBoolean.TRUE, object.getPair("A").getValue());\r
72         assertEquals(JsBoolean.FALSE, object.getPair("B").getValue());\r
73 \r
74         try{\r
75             reader = new JsonReader(new StringReader("{,}"));\r
76             object = JsObject.parseObject(reader);\r
77             fail();\r
78         }catch(JsParseException e){\r
79             // NOTHING\r
80         }\r
81 \r
82         try{\r
83             reader = new JsonReader(new StringReader("{true,}"));\r
84             object = JsObject.parseObject(reader);\r
85             fail();\r
86         }catch(JsParseException e){\r
87             // NOTHING\r
88         }\r
89 \r
90         try{\r
91             reader = new JsonReader(new StringReader("{true"));\r
92             object = JsObject.parseObject(reader);\r
93             fail();\r
94         }catch(JsParseException e){\r
95             // NOTHING\r
96         }\r
97 \r
98         try{\r
99             reader = new JsonReader(new StringReader("true}"));\r
100             object = JsObject.parseObject(reader);\r
101             fail();\r
102         }catch(JsParseException e){\r
103             // NOTHING\r
104         }\r
105 \r
106         return;\r
107     }\r
108 \r
109     /**\r
110      * Test of putValue method, of class JsObject.\r
111      */\r
112     @Test\r
113     public void testPutGetValue(){\r
114         System.out.println("putValue");\r
115 \r
116         JsObject object = new JsObject();\r
117         assertEquals(0, object.size());\r
118 \r
119         object.putValue("x", JsNull.NULL);\r
120         assertEquals(1, object.size());\r
121         assertEquals(JsNull.NULL, object.getValue("x"));\r
122         assertEquals(null, object.getValue("y"));\r
123 \r
124         object.putValue("y", JsBoolean.TRUE);\r
125         assertEquals(2, object.size());\r
126         assertEquals(JsBoolean.TRUE, object.getValue("y"));\r
127 \r
128         object.putValue("x", JsBoolean.FALSE);\r
129         assertEquals(2, object.size());\r
130         assertEquals(JsBoolean.FALSE, object.getValue("x"));\r
131 \r
132         return;\r
133     }\r
134 \r
135     /**\r
136      * Test of putPair method, of class JsObject.\r
137      */\r
138     @Test\r
139     public void testPutGetPair(){\r
140         System.out.println("putPair");\r
141 \r
142         JsObject object = new JsObject();\r
143         assertEquals(0, object.size());\r
144 \r
145         JsPair pair = new JsPair("x", JsNull.NULL);\r
146         object.putPair(pair);\r
147         assertEquals(1, object.size());\r
148         assertEquals(JsNull.NULL, object.getValue("x"));\r
149 \r
150         JsPair pair2 = object.getPair("x");\r
151         assertNotNull(pair2);\r
152         assertEquals("x", pair2.getName());\r
153         assertEquals(JsNull.NULL, pair2.getValue());\r
154 \r
155         assertNull(object.getPair("y"));\r
156 \r
157         return;\r
158     }\r
159 \r
160     /**\r
161      * Test of clear method, of class JsObject.\r
162      */\r
163     @Test\r
164     public void testClear(){\r
165         System.out.println("clear");\r
166 \r
167         JsObject object = new JsObject();\r
168         assertEquals(0, object.size());\r
169 \r
170         object.putValue("x", JsNull.NULL);\r
171         assertEquals(1, object.size());\r
172 \r
173         object.clear();\r
174         assertEquals(0, object.size());\r
175 \r
176         return;\r
177     }\r
178 \r
179     /**\r
180      * Test of remove method, of class JsObject.\r
181      */\r
182     @Test\r
183     public void testRemove(){\r
184         System.out.println("remove");\r
185 \r
186         JsObject object = new JsObject();\r
187 \r
188         object.putValue("x", JsNull.NULL);\r
189         assertEquals(1, object.size());\r
190 \r
191         assertNotNull(object.getValue("x"));\r
192 \r
193         assertEquals(JsNull.NULL, object.remove("x"));\r
194         assertEquals(0, object.size());\r
195         assertNull(object.getValue("x"));\r
196 \r
197         assertNull(object.remove("y"));\r
198 \r
199         return;\r
200     }\r
201 \r
202     /**\r
203      * Test of nameSet method, of class JsObject.\r
204      */\r
205     @Test\r
206     public void testNameSet(){\r
207         System.out.println("nameSet");\r
208 \r
209         JsObject object = new JsObject();\r
210         Set<String> set;\r
211 \r
212         set = object.nameSet();\r
213         assertEquals(0, set.size());\r
214 \r
215         object.putValue("y", JsNull.NULL);\r
216         object.putValue("z", JsNull.NULL);\r
217         object.putValue("x", JsNull.NULL);\r
218 \r
219         set = object.nameSet();\r
220         assertEquals(3, set.size());\r
221         Object[] names = set.toArray();\r
222 \r
223         assertEquals("x", names[0]);\r
224         assertEquals("y", names[1]);\r
225         assertEquals("z", names[2]);\r
226 \r
227         return;\r
228     }\r
229 \r
230     /**\r
231      * Test of getPairList method, of class JsObject.\r
232      */\r
233     @Test\r
234     public void testGetPairList(){\r
235         System.out.println("getPairList");\r
236 \r
237         JsObject object = new JsObject();\r
238         List<JsPair> list;\r
239 \r
240         list = object.getPairList();\r
241         assertEquals(0, list.size());\r
242 \r
243         object.putValue("y", JsNull.NULL);\r
244         object.putValue("z", JsBoolean.TRUE);\r
245         object.putValue("x", JsBoolean.FALSE);\r
246 \r
247         list = object.getPairList();\r
248         assertEquals(3, list.size());\r
249 \r
250         assertEquals("x", list.get(0).getName());\r
251         assertEquals("y", list.get(1).getName());\r
252         assertEquals("z", list.get(2).getName());\r
253         assertEquals(JsBoolean.FALSE, list.get(0).getValue());\r
254         assertEquals(JsNull.NULL, list.get(1).getValue());\r
255         assertEquals(JsBoolean.TRUE, list.get(2).getValue());\r
256 \r
257         return;\r
258     }\r
259 \r
260     /**\r
261      * Test of iterator method, of class JsObject.\r
262      */\r
263     @Test\r
264     public void testIterator(){\r
265         System.out.println("iterator");\r
266 \r
267         JsObject object = new JsObject();\r
268         object.putValue("y", JsBoolean.FALSE);\r
269         object.putValue("x", JsBoolean.TRUE);\r
270 \r
271         Iterator<JsPair> it = object.iterator();\r
272 \r
273         assertTrue(it.hasNext());\r
274         assertEquals(JsBoolean.TRUE, it.next().getValue());\r
275         assertTrue(it.hasNext());\r
276         assertEquals(JsBoolean.FALSE, it.next().getValue());\r
277         assertFalse(it.hasNext());\r
278 \r
279         return;\r
280     }\r
281 \r
282     /**\r
283      * Test of size method, of class JsObject.\r
284      */\r
285     @Test\r
286     public void testSize(){\r
287         System.out.println("size");\r
288 \r
289         JsObject object = new JsObject();\r
290         assertEquals(0, object.size());\r
291         object.putValue("x", JsBoolean.TRUE);\r
292         assertEquals(1, object.size());\r
293         object.putValue("y", JsBoolean.FALSE);\r
294         assertEquals(2, object.size());\r
295 \r
296         return;\r
297     }\r
298 \r
299     /**\r
300      * Test of hashCode method, of class JsObject.\r
301      */\r
302     @Test\r
303     public void testHashCode(){\r
304         System.out.println("hashCode");\r
305 \r
306         JsObject obj1 = new JsObject();\r
307         JsObject obj2 = new JsObject();\r
308         assertEquals(obj1.hashCode(), obj2.hashCode());\r
309 \r
310         obj1.putValue("x", new JsNumber("99"));\r
311         obj2.putValue("x", new JsNumber("99"));\r
312         assertEquals(obj1.hashCode(), obj2.hashCode());\r
313 \r
314         return;\r
315     }\r
316 \r
317     /**\r
318      * Test of equals method, of class JsObject.\r
319      */\r
320     @Test\r
321     public void testEquals(){\r
322         System.out.println("equals");\r
323 \r
324         JsObject obj1 = new JsObject();\r
325         JsObject obj2 = new JsObject();\r
326         assertTrue(obj1.equals(obj2));\r
327 \r
328         obj1.putValue("x", new JsNumber("99"));\r
329         obj2.putValue("x", new JsNumber("99"));\r
330         assertTrue(obj1.equals(obj2));\r
331 \r
332         obj1.putValue("x", new JsNumber("99"));\r
333         obj2.putValue("x", new JsNumber("999"));\r
334         assertFalse(obj1.equals(obj2));\r
335 \r
336         assertFalse(obj1.equals(null));\r
337 \r
338         return;\r
339     }\r
340 \r
341     /**\r
342      * Test of toString method, of class JsObject.\r
343      */\r
344     @Test\r
345     public void testToString(){\r
346         System.out.println("toString");\r
347 \r
348         JsObject object = new JsObject();\r
349 \r
350         assertEquals("{}", object.toString());\r
351 \r
352         object.putValue("x", JsBoolean.TRUE);\r
353         assertEquals("{\"x\":true}", object.toString());\r
354 \r
355         object.putValue("y", JsBoolean.FALSE);\r
356         assertEquals("{\"x\":true,\"y\":false}", object.toString());\r
357 \r
358         object.putValue("z", new JsObject());\r
359         assertEquals("{\"x\":true,\"y\":false,\"z\":{}}", object.toString());\r
360 \r
361         return;\r
362     }\r
363 \r
364     /**\r
365      * Test of traverse method, of class JsObject.\r
366      */\r
367     @Test\r
368     public void testTraverse() throws Exception{\r
369         System.out.println("traverse");\r
370 \r
371         JsObject obj = new JsObject();\r
372         JsValue val1 = new JsNumber("12");\r
373         JsValue val2 = new JsString("AB");\r
374         obj.putValue("x", val1);\r
375         obj.putValue("y", val2);\r
376 \r
377         final List<Object> visited = new LinkedList<Object>();\r
378 \r
379         try{\r
380             obj.traverse(new ValueVisitor(){\r
381                 public void visitValue(JsValue value)\r
382                         throws JsVisitException{\r
383                     visited.add(value);\r
384                     return;\r
385                 }\r
386 \r
387                 public void visitPairName(String name)\r
388                         throws JsVisitException{\r
389                     visited.add(name);\r
390                     return;\r
391                 }\r
392 \r
393                 public void visitCollectionClose(JsValue composite)\r
394                         throws JsVisitException{\r
395                     visited.add(composite);\r
396                     return;\r
397                 }\r
398             });\r
399         }catch(JsVisitException e){\r
400             fail();\r
401         }\r
402 \r
403         assertEquals(6, visited.size());\r
404         assertEquals(obj, visited.get(0));\r
405         assertEquals("x", visited.get(1));\r
406         assertEquals(val1, visited.get(2));\r
407         assertEquals("y", visited.get(3));\r
408         assertEquals(val2, visited.get(4));\r
409         assertEquals(obj, visited.get(5));\r
410 \r
411         return;\r
412     }\r
413 \r
414     /**\r
415      * Test of hasChanged method, of class JsObject.\r
416      */\r
417     @Test\r
418     public void testHasChanged(){\r
419         System.out.println("hasChanged");\r
420 \r
421         JsObject obj = new JsObject();\r
422         assertFalse(obj.hasChanged());\r
423 \r
424         obj.putValue("x", JsNull.NULL);\r
425         assertTrue(obj.hasChanged());\r
426 \r
427         obj.setUnchanged();\r
428         assertFalse(obj.hasChanged());\r
429 \r
430         JsObject child = new JsObject();\r
431         obj.putValue("y", child);\r
432         obj.setUnchanged();\r
433         assertFalse(obj.hasChanged());\r
434 \r
435         child.putValue("z", JsBoolean.TRUE);\r
436         assertTrue(obj.hasChanged());\r
437         obj.setUnchanged();\r
438         assertFalse(obj.hasChanged());\r
439 \r
440         return;\r
441     }\r
442 \r
443     /**\r
444      * Test of setUnchanged method, of class JsObject.\r
445      */\r
446     @Test\r
447     public void testSetUnchanged(){\r
448         System.out.println("setUnchanged");\r
449 \r
450         JsObject obj = new JsObject();\r
451         JsObject child = new JsObject();\r
452         obj.putValue("x", child);\r
453 \r
454         child.putValue("y", JsNull.NULL);\r
455         assertTrue(child.hasChanged());\r
456 \r
457         obj.setUnchanged();\r
458         assertFalse(child.hasChanged());\r
459 \r
460         return;\r
461     }\r
462 \r
463 }\r