001: package org.vraptor.remote;
002:
003: import java.text.ParseException;
004: import java.text.SimpleDateFormat;
005: import java.util.ArrayList;
006: import java.util.Calendar;
007: import java.util.Date;
008: import java.util.GregorianCalendar;
009: import java.util.HashMap;
010: import java.util.LinkedHashSet;
011: import java.util.List;
012: import java.util.Map;
013: import java.util.Set;
014:
015: import junit.framework.TestCase;
016:
017: import org.vraptor.remote.json.JSONSerializer;
018:
019: public class JSONSerializerTest extends TestCase {
020:
021: public static class Person {
022: private String name = "Nico";
023:
024: private int age = 1;
025:
026: public int getAge() {
027: return age;
028: }
029:
030: public String getName() {
031: return name;
032: }
033:
034: }
035:
036: public void testSimpleBeanPerson() {
037: JSONSerializer ser = new JSONSerializer();
038: assertEquals("{\"age\":1,\"name\":\"Nico\"}", ser.serialize(
039: new Person()).toString());
040: }
041:
042: public void testNull() {
043: JSONSerializer ser = new JSONSerializer();
044: assertEquals("null", ser.serialize(null).toString());
045: }
046:
047: public void testBoolean() {
048: JSONSerializer ser = new JSONSerializer();
049: assertEquals("false", ser.serialize(false).toString());
050: assertEquals("true", ser.serialize(true).toString());
051: assertEquals("true", ser.serialize(Boolean.TRUE).toString());
052: }
053:
054: public void testDate() throws ParseException {
055: Date date = new SimpleDateFormat("dd/MM/yyyy HH:mm")
056: .parse("14/05/1977 20:33");
057: JSONSerializer ser = new JSONSerializer();
058: assertEquals("" + date.getTime(), ser.serialize(date)
059: .toString());
060: }
061:
062: public void testCalendar() throws ParseException {
063: Date date = new SimpleDateFormat("dd/MM/yyyy HH:mm")
064: .parse("14/05/1977 20:33");
065: Calendar c = GregorianCalendar.getInstance();
066: c.setTime(date);
067: JSONSerializer ser = new JSONSerializer();
068: assertEquals("" + c.getTimeInMillis(), ser.serialize(c)
069: .toString());
070: }
071:
072: public void testScape() {
073: JSONSerializer ser = new JSONSerializer();
074: assertEquals("\"\\\"\\\\\\/\"", ser.serialize("\"\\/")
075: .toString());
076: }
077:
078: public void testLineFeed() {
079: JSONSerializer ser = new JSONSerializer();
080: assertEquals("\"\\r\\n\"", ser.serialize("\r\n").toString());
081: }
082:
083: public void testSimpleBeanPersonList() {
084: JSONSerializer ser = new JSONSerializer();
085: List<Person> list = new ArrayList<Person>();
086: list.add(new Person());
087: list.add(new Person());
088: assertEquals(
089: "[{\"age\":1,\"name\":\"Nico\"},{\"age\":1,\"name\":\"Nico\"}]",
090: ser.serialize(list).toString());
091:
092: }
093:
094: public void testSerialize1String() {
095: Map<String, Object> objects = new HashMap<String, Object>();
096: objects.put("string", "name");
097: JSONSerializer ser = new JSONSerializer();
098: assertEquals("{\"string\":\"name\"}", ser.serialize(objects)
099: .toString());
100: }
101:
102: public void testSerializeUnicodeString() {
103: Map<String, Object> objects = new HashMap<String, Object>();
104: objects.put("string", "\u5B66\uD800\uDF30");
105: JSONSerializer ser = new JSONSerializer();
106: assertEquals("{\"string\":\"\u5B66\uD800\uDF30\"}", ser
107: .serialize(objects).toString());
108: }
109:
110: public void testSerialize1Bean() {
111: Map<String, Object> objects = new HashMap<String, Object>();
112: objects.put("bean", new Bean());
113: JSONSerializer ser = new JSONSerializer();
114: assertEquals("{\"bean\":{\"first\":1,\"second\":3.2}}", ser
115: .serialize(objects).toString());
116: assertTrue((ser.serialize(objects).toString()
117: .contains("\"first\":1")));
118: }
119:
120: public void testSerializeBeanInsideBean() {
121: Map<String, Object> objects = new HashMap<String, Object>();
122: objects.put("bean2", new Bean2());
123: JSONSerializer ser = new JSONSerializer();
124: assertEquals(
125: "{\"bean2\":{\"bean\":{\"first\":1,\"second\":3.2}}}",
126: ser.serialize(objects).toString());
127: }
128:
129: public void testSerializeBeanInsideBeanTestingDepth() {
130: Map<String, Object> objects = new HashMap<String, Object>();
131: objects.put("bean2", new Bean2());
132: JSONSerializer ser = new JSONSerializer(2);
133: assertEquals(
134: "{\"bean2\":{\"bean\":{\"first\":{},\"second\":{}}}}",
135: ser.serialize(objects).toString());
136: }
137:
138: public void testSerializeBoolean() {
139: Map<String, Object> objects = new HashMap<String, Object>();
140: objects.put("boolean", true);
141: JSONSerializer ser = new JSONSerializer();
142: assertTrue((ser.serialize(objects).toString()
143: .contains("\"boolean\":true")));
144: }
145:
146: public void testSerializeMapInsideMap() {
147: Map<String, Object> objects = new HashMap<String, Object>();
148: Map<String, Object> otherMap = new HashMap<String, Object>();
149: otherMap.put("age", 5);
150: objects.put("map", otherMap);
151: JSONSerializer ser = new JSONSerializer();
152: assertTrue((ser.serialize(objects).toString()
153: .contains("{\"map\":{\"age\":5}}")));
154: }
155:
156: public void testSerializeBizarreBean() {
157: Map<String, Object> objects = new HashMap<String, Object>();
158: objects.put("bean", new BizarreBean());
159: JSONSerializer ser = new JSONSerializer();
160: assertEquals("{\"bean\":{}}", ser.serialize(objects).toString());
161: }
162:
163: public void testSerializeSet() {
164: Map<String, Object> objects = new HashMap<String, Object>();
165: Set<Object> set = new LinkedHashSet<Object>();
166: set.add(3.7);
167: set.add(-4);
168: objects.put("set", set);
169: JSONSerializer ser = new JSONSerializer();
170: assertTrue((ser.serialize(objects).toString()
171: .contains("{\"set\":[3.7,-4]}")));
172: }
173:
174: public void testSerializeList() {
175: Map<String, Object> objects = new HashMap<String, Object>();
176: List<Object> list = new ArrayList<Object>();
177: list.add(3.7);
178: list.add(-4);
179: objects.put("list", list);
180: JSONSerializer ser = new JSONSerializer();
181: assertTrue((ser.serialize(objects).toString()
182: .contains("{\"list\":[3.7,-4]}")));
183: }
184:
185: public void testSerializeArray() {
186: Map<String, Object> objects = new HashMap<String, Object>();
187: int[] array = { 7, 4, 12 };
188: objects.put("array", array);
189: JSONSerializer ser = new JSONSerializer();
190: assertTrue((ser.serialize(objects).toString()
191: .contains("{\"array\":[7,4,12]}")));
192: }
193:
194: public void testSerializeArray2() {
195: Map<String, Object> objects = new HashMap<String, Object>();
196: Integer[] array = { 7, 4, 12 };
197: objects.put("array", array);
198: JSONSerializer ser = new JSONSerializer();
199: assertTrue((ser.serialize(objects).toString()
200: .contains("{\"array\":[7,4,12]}")));
201: }
202:
203: public void testSerializeCyclicDependecy() {
204: try {
205: Map<String, Object> map = new HashMap<String, Object>();
206: Map<String, Object> map1 = new HashMap<String, Object>();
207: map.put("map1", map1);
208: map1.put("map", map);
209: JSONSerializer ser = new JSONSerializer();
210: ser.serialize(map);
211: // ok
212: } catch (StackOverflowError ex) {
213: fail();
214: }
215: }
216:
217: public void testMaximumDepth() {
218: Map<String, Object> map = new HashMap<String, Object>();
219: Map<String, Object> map1 = new HashMap<String, Object>();
220: Map<String, Object> map2 = new HashMap<String, Object>();
221: Map<String, Object> map3 = new HashMap<String, Object>();
222: map.put("map1", map1);
223: map1.put("map2", map2);
224: map2.put("map3", map3);
225: map3.put("last", "one");
226: JSONSerializer ser = new JSONSerializer(3);
227: assertFalse(ser.serialize(map).toString().contains("last"));
228: assertFalse(ser.serialize(map).toString().contains("one"));
229: }
230:
231: public static class Bean2 {
232: private Bean bean = new Bean();
233:
234: public Bean getBean() {
235: return bean;
236: }
237: }
238:
239: public static class Bean {
240: private int first = 1;
241:
242: private double second = 3.2;
243:
244: public int getFirst() {
245: return first;
246: }
247:
248: public double getSecond() {
249: return second;
250: }
251: }
252:
253: public static class BizarreBean {
254: private int first = 1;
255:
256: private double second = 3.2;
257:
258: public int getFirst(double d) {
259: return first;
260: }
261:
262: public double get() {
263: return second;
264: }
265: }
266:
267: }
|