2 * Copyright(c) 2009 olyutorskii
\r
5 package jp.sourceforge.jindolf.json;
\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
22 public class JsObjectTest {
\r
24 public JsObjectTest() {
\r
28 public static void setUpClass() throws Exception{
\r
32 public static void tearDownClass() throws Exception{
\r
36 public void setUp() {
\r
40 public void tearDown() {
\r
44 * Test of parseObject method, of class JsObject.
\r
47 public void testParseObject() throws Exception{
\r
48 System.out.println("parseObject");
\r
53 reader = new JsonReader(new StringReader("{}"));
\r
54 object = JsObject.parseObject(reader);
\r
55 assertEquals(0, object.size());
\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
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
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
75 reader = new JsonReader(new StringReader("{,}"));
\r
76 object = JsObject.parseObject(reader);
\r
78 }catch(JsParseException e){
\r
83 reader = new JsonReader(new StringReader("{true,}"));
\r
84 object = JsObject.parseObject(reader);
\r
86 }catch(JsParseException e){
\r
91 reader = new JsonReader(new StringReader("{true"));
\r
92 object = JsObject.parseObject(reader);
\r
94 }catch(JsParseException e){
\r
99 reader = new JsonReader(new StringReader("true}"));
\r
100 object = JsObject.parseObject(reader);
\r
102 }catch(JsParseException e){
\r
110 * Test of putValue method, of class JsObject.
\r
113 public void testPutGetValue(){
\r
114 System.out.println("putValue");
\r
116 JsObject object = new JsObject();
\r
117 assertEquals(0, object.size());
\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
124 object.putValue("y", JsBoolean.TRUE);
\r
125 assertEquals(2, object.size());
\r
126 assertEquals(JsBoolean.TRUE, object.getValue("y"));
\r
128 object.putValue("x", JsBoolean.FALSE);
\r
129 assertEquals(2, object.size());
\r
130 assertEquals(JsBoolean.FALSE, object.getValue("x"));
\r
136 * Test of putPair method, of class JsObject.
\r
139 public void testPutGetPair(){
\r
140 System.out.println("putPair");
\r
142 JsObject object = new JsObject();
\r
143 assertEquals(0, object.size());
\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
150 JsPair pair2 = object.getPair("x");
\r
151 assertNotNull(pair2);
\r
152 assertEquals("x", pair2.getName());
\r
153 assertEquals(JsNull.NULL, pair2.getValue());
\r
155 assertNull(object.getPair("y"));
\r
161 * Test of clear method, of class JsObject.
\r
164 public void testClear(){
\r
165 System.out.println("clear");
\r
167 JsObject object = new JsObject();
\r
168 assertEquals(0, object.size());
\r
170 object.putValue("x", JsNull.NULL);
\r
171 assertEquals(1, object.size());
\r
174 assertEquals(0, object.size());
\r
180 * Test of remove method, of class JsObject.
\r
183 public void testRemove(){
\r
184 System.out.println("remove");
\r
186 JsObject object = new JsObject();
\r
188 object.putValue("x", JsNull.NULL);
\r
189 assertEquals(1, object.size());
\r
191 assertNotNull(object.getValue("x"));
\r
193 assertEquals(JsNull.NULL, object.remove("x"));
\r
194 assertEquals(0, object.size());
\r
195 assertNull(object.getValue("x"));
\r
197 assertNull(object.remove("y"));
\r
203 * Test of nameSet method, of class JsObject.
\r
206 public void testNameSet(){
\r
207 System.out.println("nameSet");
\r
209 JsObject object = new JsObject();
\r
212 set = object.nameSet();
\r
213 assertEquals(0, set.size());
\r
215 object.putValue("y", JsNull.NULL);
\r
216 object.putValue("z", JsNull.NULL);
\r
217 object.putValue("x", JsNull.NULL);
\r
219 set = object.nameSet();
\r
220 assertEquals(3, set.size());
\r
221 Object[] names = set.toArray();
\r
223 assertEquals("x", names[0]);
\r
224 assertEquals("y", names[1]);
\r
225 assertEquals("z", names[2]);
\r
231 * Test of getPairList method, of class JsObject.
\r
234 public void testGetPairList(){
\r
235 System.out.println("getPairList");
\r
237 JsObject object = new JsObject();
\r
240 list = object.getPairList();
\r
241 assertEquals(0, list.size());
\r
243 object.putValue("y", JsNull.NULL);
\r
244 object.putValue("z", JsBoolean.TRUE);
\r
245 object.putValue("x", JsBoolean.FALSE);
\r
247 list = object.getPairList();
\r
248 assertEquals(3, list.size());
\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
261 * Test of iterator method, of class JsObject.
\r
264 public void testIterator(){
\r
265 System.out.println("iterator");
\r
267 JsObject object = new JsObject();
\r
268 object.putValue("y", JsBoolean.FALSE);
\r
269 object.putValue("x", JsBoolean.TRUE);
\r
271 Iterator<JsPair> it = object.iterator();
\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
283 * Test of size method, of class JsObject.
\r
286 public void testSize(){
\r
287 System.out.println("size");
\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
300 * Test of hashCode method, of class JsObject.
\r
303 public void testHashCode(){
\r
304 System.out.println("hashCode");
\r
306 JsObject obj1 = new JsObject();
\r
307 JsObject obj2 = new JsObject();
\r
308 assertEquals(obj1.hashCode(), obj2.hashCode());
\r
310 obj1.putValue("x", new JsNumber("99"));
\r
311 obj2.putValue("x", new JsNumber("99"));
\r
312 assertEquals(obj1.hashCode(), obj2.hashCode());
\r
318 * Test of equals method, of class JsObject.
\r
321 public void testEquals(){
\r
322 System.out.println("equals");
\r
324 JsObject obj1 = new JsObject();
\r
325 JsObject obj2 = new JsObject();
\r
326 assertTrue(obj1.equals(obj2));
\r
328 obj1.putValue("x", new JsNumber("99"));
\r
329 obj2.putValue("x", new JsNumber("99"));
\r
330 assertTrue(obj1.equals(obj2));
\r
332 obj1.putValue("x", new JsNumber("99"));
\r
333 obj2.putValue("x", new JsNumber("999"));
\r
334 assertFalse(obj1.equals(obj2));
\r
336 assertFalse(obj1.equals(null));
\r
342 * Test of toString method, of class JsObject.
\r
345 public void testToString(){
\r
346 System.out.println("toString");
\r
348 JsObject object = new JsObject();
\r
350 assertEquals("{}", object.toString());
\r
352 object.putValue("x", JsBoolean.TRUE);
\r
353 assertEquals("{\"x\":true}", object.toString());
\r
355 object.putValue("y", JsBoolean.FALSE);
\r
356 assertEquals("{\"x\":true,\"y\":false}", object.toString());
\r
358 object.putValue("z", new JsObject());
\r
359 assertEquals("{\"x\":true,\"y\":false,\"z\":{}}", object.toString());
\r
365 * Test of traverse method, of class JsObject.
\r
368 public void testTraverse() throws Exception{
\r
369 System.out.println("traverse");
\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
377 final List<Object> visited = new LinkedList<Object>();
\r
380 obj.traverse(new ValueVisitor(){
\r
381 public void visitValue(JsValue value)
\r
382 throws JsVisitException{
\r
383 visited.add(value);
\r
387 public void visitPairName(String name)
\r
388 throws JsVisitException{
\r
393 public void visitCollectionClose(JsValue composite)
\r
394 throws JsVisitException{
\r
395 visited.add(composite);
\r
399 }catch(JsVisitException e){
\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
415 * Test of hasChanged method, of class JsObject.
\r
418 public void testHasChanged(){
\r
419 System.out.println("hasChanged");
\r
421 JsObject obj = new JsObject();
\r
422 assertFalse(obj.hasChanged());
\r
424 obj.putValue("x", JsNull.NULL);
\r
425 assertTrue(obj.hasChanged());
\r
427 obj.setUnchanged();
\r
428 assertFalse(obj.hasChanged());
\r
430 JsObject child = new JsObject();
\r
431 obj.putValue("y", child);
\r
432 obj.setUnchanged();
\r
433 assertFalse(obj.hasChanged());
\r
435 child.putValue("z", JsBoolean.TRUE);
\r
436 assertTrue(obj.hasChanged());
\r
437 obj.setUnchanged();
\r
438 assertFalse(obj.hasChanged());
\r
444 * Test of setUnchanged method, of class JsObject.
\r
447 public void testSetUnchanged(){
\r
448 System.out.println("setUnchanged");
\r
450 JsObject obj = new JsObject();
\r
451 JsObject child = new JsObject();
\r
452 obj.putValue("x", child);
\r
454 child.putValue("y", JsNull.NULL);
\r
455 assertTrue(child.hasChanged());
\r
457 obj.setUnchanged();
\r
458 assertFalse(child.hasChanged());
\r