2 * License : The MIT License
3 * Copyright(c) 2009 olyutorskii
6 package jp.sourceforge.jovsonz;
8 import java.util.Iterator;
9 import java.util.LinkedList;
10 import java.util.List;
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 import static org.junit.Assert.*;
22 public class JsObjectTest {
24 public JsObjectTest() {
28 public static void setUpClass() throws Exception{
32 public static void tearDownClass() throws Exception{
40 public void tearDown() {
44 * Test of parseObject method, of class JsObject.
47 public void testParseObject() throws Exception{
48 System.out.println("parseObject");
53 source = new JsonSource("{}");
54 object = JsObject.parseObject(source);
55 assertEquals(0, object.size());
57 source = new JsonSource("{\"A\":true}");
58 object = JsObject.parseObject(source);
59 assertEquals(1, object.size());
60 assertEquals(JsBoolean.TRUE, object.getPair("A").getValue());
62 source = new JsonSource("{\"A\":true,\"B\":false}");
63 object = JsObject.parseObject(source);
64 assertEquals(2, object.size());
65 assertEquals(JsBoolean.TRUE, object.getPair("A").getValue());
66 assertEquals(JsBoolean.FALSE, object.getPair("B").getValue());
68 source = new JsonSource("\n{\r\"A\"\t: true,\"B\":false\n}\r");
69 object = JsObject.parseObject(source);
72 source = new JsonSource("{\r\"A\"\t: true,\"B\":false\n}\r");
73 object = JsObject.parseObject(source);
74 assertEquals(2, object.size());
75 assertEquals(JsBoolean.TRUE, object.getPair("A").getValue());
76 assertEquals(JsBoolean.FALSE, object.getPair("B").getValue());
79 source = new JsonSource("{,}");
80 object = JsObject.parseObject(source);
82 }catch(JsParseException e){
87 source = new JsonSource("{true,}");
88 object = JsObject.parseObject(source);
90 }catch(JsParseException e){
95 source = new JsonSource("{true");
96 object = JsObject.parseObject(source);
98 }catch(JsParseException e){
103 source = new JsonSource("{\"A\",");
104 object = JsObject.parseObject(source);
106 }catch(JsParseException e){
111 source = new JsonSource("{\"A\":");
112 object = JsObject.parseObject(source);
114 }catch(JsParseException e){
119 source = new JsonSource("{\"A\":#");
120 object = JsObject.parseObject(source);
122 }catch(JsParseException e){
127 source = new JsonSource("{\"A\":true#");
128 object = JsObject.parseObject(source);
130 }catch(JsParseException e){
135 source = new JsonSource("{\"A\":true,");
136 object = JsObject.parseObject(source);
138 }catch(JsParseException e){
143 source = new JsonSource("{\"A\":true,#");
144 object = JsObject.parseObject(source);
146 }catch(JsParseException e){
150 source = new JsonSource("true}");
151 object = JsObject.parseObject(source);
158 * Test of putValue method, of class JsObject.
161 public void testPutGetValue(){
162 System.out.println("putValue");
164 JsObject object = new JsObject();
165 assertEquals(0, object.size());
167 object.putValue("x", JsNull.NULL);
168 assertEquals(1, object.size());
169 assertEquals(JsNull.NULL, object.getValue("x"));
170 assertEquals(null, object.getValue("y"));
172 object.putValue("y", JsBoolean.TRUE);
173 assertEquals(2, object.size());
174 assertEquals(JsBoolean.TRUE, object.getValue("y"));
176 object.putValue("x", JsBoolean.FALSE);
177 assertEquals(2, object.size());
178 assertEquals(JsBoolean.FALSE, object.getValue("x"));
181 object.putValue("x", null);
183 }catch(NullPointerException e){
188 object.putValue(null, JsNull.NULL);
190 }catch(NullPointerException e){
198 * Test of putPair method, of class JsObject.
201 public void testPutGetPair(){
202 System.out.println("putPair");
204 JsObject object = new JsObject();
205 assertEquals(0, object.size());
207 JsPair pair = new JsPair("x", JsNull.NULL);
208 object.putPair(pair);
209 assertEquals(1, object.size());
210 assertEquals(JsNull.NULL, object.getValue("x"));
212 JsPair pair2 = object.getPair("x");
213 assertNotNull(pair2);
214 assertEquals("x", pair2.getName());
215 assertEquals(JsNull.NULL, pair2.getValue());
217 assertNull(object.getPair("y"));
223 * Test of clear method, of class JsObject.
226 public void testClear(){
227 System.out.println("clear");
229 JsObject object = new JsObject();
230 assertEquals(0, object.size());
232 object.putValue("x", JsNull.NULL);
233 assertEquals(1, object.size());
236 assertEquals(0, object.size());
238 object = new JsObject();
239 object.putValue("x", JsNull.NULL);
240 assertEquals(1, object.size());
241 assertTrue(object.hasChanged());
242 object.setUnchanged();
243 assertFalse(object.hasChanged());
245 assertEquals(0, object.size());
246 assertTrue(object.hasChanged());
247 object.setUnchanged();
249 assertEquals(0, object.size());
250 assertFalse(object.hasChanged());
256 * Test of remove method, of class JsObject.
259 public void testRemove(){
260 System.out.println("remove");
262 JsObject object = new JsObject();
264 object.putValue("x", JsNull.NULL);
265 assertEquals(1, object.size());
267 assertNotNull(object.getValue("x"));
269 assertEquals(JsNull.NULL, object.remove("x").getValue());
270 assertEquals(0, object.size());
271 assertNull(object.getValue("x"));
273 assertNull(object.remove("y"));
279 * Test of nameSet method, of class JsObject.
282 public void testNameSet(){
283 System.out.println("nameSet");
285 JsObject object = new JsObject();
288 set = object.nameSet();
289 assertEquals(0, set.size());
291 object.putValue("y", JsNull.NULL);
292 object.putValue("z", JsNull.NULL);
293 object.putValue("x", JsNull.NULL);
295 set = object.nameSet();
296 assertEquals(3, set.size());
297 Object[] names = set.toArray();
299 assertEquals("x", names[0]);
300 assertEquals("y", names[1]);
301 assertEquals("z", names[2]);
307 * Test of getPairList method, of class JsObject.
310 public void testGetPairList(){
311 System.out.println("getPairList");
313 JsObject object = new JsObject();
316 list = object.getPairList();
317 assertEquals(0, list.size());
319 object.putValue("y", JsNull.NULL);
320 object.putValue("z", JsBoolean.TRUE);
321 object.putValue("x", JsBoolean.FALSE);
323 list = object.getPairList();
324 assertEquals(3, list.size());
326 assertEquals("x", list.get(0).getName());
327 assertEquals("y", list.get(1).getName());
328 assertEquals("z", list.get(2).getName());
329 assertEquals(JsBoolean.FALSE, list.get(0).getValue());
330 assertEquals(JsNull.NULL, list.get(1).getValue());
331 assertEquals(JsBoolean.TRUE, list.get(2).getValue());
337 * Test of iterator method, of class JsObject.
340 public void testIterator(){
341 System.out.println("iterator");
343 JsObject object = new JsObject();
344 object.putValue("y", JsBoolean.FALSE);
345 object.putValue("x", JsBoolean.TRUE);
347 Iterator<JsPair> it = object.iterator();
349 assertTrue(it.hasNext());
350 assertEquals(JsBoolean.TRUE, it.next().getValue());
351 assertTrue(it.hasNext());
352 assertEquals(JsBoolean.FALSE, it.next().getValue());
353 assertFalse(it.hasNext());
359 * Test of size method, of class JsObject.
362 public void testSize(){
363 System.out.println("size");
365 JsObject object = new JsObject();
366 assertEquals(0, object.size());
367 assertTrue(object.isEmpty());
369 object.putValue("x", JsBoolean.TRUE);
370 assertEquals(1, object.size());
371 assertFalse(object.isEmpty());
373 object.putValue("y", JsBoolean.FALSE);
374 assertEquals(2, object.size());
375 assertFalse(object.isEmpty());
381 * Test of hashCode method, of class JsObject.
384 public void testHashCode(){
385 System.out.println("hashCode");
387 JsObject obj1 = new JsObject();
388 JsObject obj2 = new JsObject();
389 assertEquals(obj1.hashCode(), obj2.hashCode());
391 obj1.putValue("x", new JsNumber("99"));
392 obj2.putValue("x", new JsNumber("99"));
393 assertEquals(obj1.hashCode(), obj2.hashCode());
399 * Test of equals method, of class JsObject.
402 public void testEquals(){
403 System.out.println("equals");
405 JsObject obj1 = new JsObject();
406 JsObject obj2 = new JsObject();
407 assertTrue(obj1.equals(obj2));
409 obj1.putValue("x", new JsNumber("99"));
410 obj2.putValue("x", new JsNumber("99"));
411 assertTrue(obj1.equals(obj2));
413 obj1.putValue("x", new JsNumber("99"));
414 obj2.putValue("x", new JsNumber("999"));
415 assertFalse(obj1.equals(obj2));
417 JsObject nullVal = null;
418 assertFalse(obj1.equals(nullVal));
419 assertFalse(obj1.equals(""));
425 * Test of toString method, of class JsObject.
428 public void testToString(){
429 System.out.println("toString");
431 JsObject object = new JsObject();
433 assertEquals("{}", object.toString());
435 object.putValue("x", JsBoolean.TRUE);
436 assertEquals("{\"x\":true}", object.toString());
438 object.putValue("y", JsBoolean.FALSE);
439 assertEquals("{\"x\":true,\"y\":false}", object.toString());
441 object.putValue("z", new JsObject());
442 assertEquals("{\"x\":true,\"y\":false,\"z\":{}}", object.toString());
448 * Test of traverse method, of class JsObject.
451 public void testTraverse() throws Exception{
452 System.out.println("traverse");
454 JsObject obj = new JsObject();
455 JsValue val1 = new JsNumber("12");
456 JsValue val2 = new JsString("AB");
457 obj.putValue("x", val1);
458 obj.putValue("y", val2);
460 final List<Object> visited = new LinkedList<Object>();
463 obj.traverse(new ValueVisitor(){
464 public void visitValue(JsValue value)
465 throws JsVisitException{
470 public void visitPairName(String name)
471 throws JsVisitException{
476 public void visitCompositionClose(JsComposition composite)
477 throws JsVisitException{
478 visited.add(composite);
482 }catch(JsVisitException e){
486 assertEquals(6, visited.size());
487 assertEquals(obj, visited.get(0));
488 assertEquals("x", visited.get(1));
489 assertEquals(val1, visited.get(2));
490 assertEquals("y", visited.get(3));
491 assertEquals(val2, visited.get(4));
492 assertEquals(obj, visited.get(5));
498 * Test of hasChanged method, of class JsObject.
501 public void testHasChanged(){
502 System.out.println("hasChanged");
504 JsObject obj = new JsObject();
505 assertFalse(obj.hasChanged());
507 obj.putValue("x", JsNull.NULL);
508 assertTrue(obj.hasChanged());
511 assertFalse(obj.hasChanged());
513 JsObject child = new JsObject();
514 obj.putValue("y", child);
516 assertFalse(obj.hasChanged());
518 child.putValue("z", JsBoolean.TRUE);
519 assertTrue(obj.hasChanged());
521 assertFalse(obj.hasChanged());
527 * Test of setUnchanged method, of class JsObject.
530 public void testSetUnchanged(){
531 System.out.println("setUnchanged");
533 JsObject obj = new JsObject();
534 JsObject child = new JsObject();
535 obj.putValue("x", child);
537 child.putValue("y", JsNull.NULL);
538 assertTrue(child.hasChanged());
541 assertFalse(child.hasChanged());
547 * Test of getJsTypes method, of class JsObject.
550 public void testGetJsTypes() {
551 System.out.println("getJsTypes");
553 JsObject instance = new JsObject();
555 assertEquals(JsTypes.OBJECT, instance.getJsTypes());