OSDN Git Service

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