/* * Copyright 2004-2015 the Seasar Foundation and the Others. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, * either express or implied. See the License for the specific language * governing permissions and limitations under the License. */ package org.seasar.framework.util; import java.util.ArrayList; import java.util.HashMap; import java.util.List; import java.util.Map; import junit.framework.TestCase; /** * {@link JSONSerializer}のテストクラスです。 * * @author mopemope */ public class JSONSerializerTest extends TestCase { /** * @throws Exception */ public void testToString_null() throws Exception { assertEquals("null", JSONSerializer.serialize(null)); } /** * @throws Exception */ public void testToJson_boolean() throws Exception { assertEquals("true", JSONSerializer.serialize(Boolean.TRUE)); assertEquals("false", JSONSerializer.serialize(Boolean.FALSE)); } /** * @throws Exception */ public void testToJson_string() throws Exception { assertEquals("\"a\"", JSONSerializer.serialize("a")); } /** * @throws Exception */ public void testToJson_float() throws Exception { assertEquals("1.0", JSONSerializer.serialize(new Float(1.0f))); try { JSONSerializer.serialize(new Float(Float.NaN)); fail(); } catch (IllegalArgumentException e) { System.out.println(e); } } /** * @throws Exception */ public void testToJson_double() throws Exception { assertEquals("1.0", JSONSerializer.serialize(new Double(1.0d))); try { JSONSerializer.serialize(new Double(Double.NaN)); fail(); } catch (IllegalArgumentException e) { System.out.println(e); } } /** * @throws Exception */ public void testToJson_number() throws Exception { assertEquals("100", JSONSerializer.serialize(new Integer(100))); } /** * @throws Exception */ public void testToJson_array() throws Exception { assertEquals("[]", JSONSerializer.serialize(new Object[0])); assertEquals("[1]", JSONSerializer .serialize(new Integer[] { new Integer(1) })); assertEquals("[1,2]", JSONSerializer.serialize(new Integer[] { new Integer(1), new Integer(2) })); } /** * @throws Exception */ public void testToJson_collection() throws Exception { assertEquals("[]", JSONSerializer.serialize(new ArrayList())); ArrayList list = new ArrayList(); list.add(new Integer(1)); assertEquals("[1]", JSONSerializer.serialize(list)); } /** * @throws Exception */ public void testToJson_map() throws Exception { assertEquals("{}", JSONSerializer.serialize(new HashMap())); HashMap map = new HashMap(); map.put("aaa", new Integer(1)); assertEquals("{\"aaa\":1}", JSONSerializer.serialize(map)); map.put("bbb", new Integer(2)); assertEquals("{\"aaa\":1,\"bbb\":2}", JSONSerializer.serialize(map)); map.put("bbb", new HashMap()); assertEquals("{\"aaa\":1,\"bbb\":{}}", JSONSerializer.serialize(map)); } /** * @throws Exception */ public void testToJson_map2() throws Exception { Map child1 = new HashMap(); child1.put("aaa", new String[] { "aaa", "bbb", "ccc" }); Map child2 = new HashMap(); child2.put("bbb", new String[] { "AAA", "BBB", "CCC" }); Map parent = new HashMap(); parent.put("map", new Map[] { child1, child2 }); String s = JSONSerializer.serialize(parent); System.out.println(s); // {map:[{aaa:["aaa","bbb","ccc"]},{bbb:["AAA","BBB","CCC"]}]} Map eval = (Map) JSONSerializer.eval(s); assertNotNull(eval); System.out.println(eval); Object o = eval.get("map"); List maps = (List) o; Map ret = (Map) maps.get(0); System.out.println(ret.get("aaa")); } /** * @throws Exception */ public void testToJson_map3() throws Exception { Hoge hoge = new Hoge(); String s = JSONSerializer.serialize(hoge); System.out.println(s); // {map:{maplist:[{aaa:["aaa","bbb","ccc"]},{bbb:["AAA","BBB","CCC"]}]}} Map eval = (Map) JSONSerializer.eval(s); assertNotNull(eval); Object o = eval.get("map"); assertNotNull(o); Map map = (Map) o; List maplist = (List) map.get("maplist"); Map aaamap = (Map) maplist.get(0); List strsList1 = (List) aaamap.get("aaa"); assertNotNull(strsList1); assertTrue(strsList1.size() == 3); assertEquals("aaa", strsList1.get(0)); assertEquals("bbb", strsList1.get(1)); assertEquals("ccc", strsList1.get(2)); Map bbbmap = (Map) maplist.get(1); List strsList2 = (List) bbbmap.get("bbb"); assertNotNull(strsList2); assertTrue(strsList2.size() == 3); assertEquals("AAA", strsList2.get(0)); assertEquals("BBB", strsList2.get(1)); assertEquals("CCC", strsList2.get(2)); } /** * @throws Exception */ public void testToJson_map4() throws Exception { Hoge2 hoge = new Hoge2(); String s = JSONSerializer.serialize(hoge); System.out.println(s); // {map:{maplist:[{ccc:[1,2],aaa:["aaa","bbb","ccc"]},{bbb:["AAA","BBB","CCC"]}]}} Map eval = (Map) JSONSerializer.eval(s); assertNotNull(eval); Object o = eval.get("map"); assertNotNull(o); Map map = (Map) o; List maplist = (List) map.get("maplist"); Map aaamap = (Map) maplist.get(0); List strsList1 = (List) aaamap.get("aaa"); assertNotNull(strsList1); assertTrue(strsList1.size() == 3); assertEquals("aaa", strsList1.get(0)); assertEquals("bbb", strsList1.get(1)); assertEquals("ccc", strsList1.get(2)); List ccclist = (List) aaamap.get("ccc"); assertNotNull(ccclist); assertTrue(ccclist.size() == 2); assertEquals(new Integer(1), ccclist.get(0)); assertEquals(new Integer(2), ccclist.get(1)); Map bbbmap = (Map) maplist.get(1); List strsList2 = (List) bbbmap.get("bbb"); assertNotNull(strsList2); assertTrue(strsList2.size() == 3); assertEquals("AAA", strsList2.get(0)); assertEquals("BBB", strsList2.get(1)); assertEquals("CCC", strsList2.get(2)); } /** * @throws Exception */ public void testToJson_map5() throws Exception { Hoge3 hoge = new Hoge3(); String s = JSONSerializer.serialize(hoge); System.out.println(s); // {list:[{ccc:[1,2],aaa:["aaa","bbb","ccc"]},{bbb:["AAA","BBB","CCC"]}]} Object eval = JSONSerializer.eval(s); assertNotNull(eval); Map root = (Map) eval; List list = (List) root.get("list"); Map child1 = (Map) list.get(0); assertNotNull(child1); assertTrue(child1.size() == 2); List aaalist = (List) child1.get("aaa"); assertNotNull(aaalist); assertTrue(aaalist.size() == 3); List ccclist = (List) child1.get("ccc"); assertNotNull(ccclist); assertTrue(ccclist.size() == 2); Map child2 = (Map) list.get(1); assertNotNull(child2); assertTrue(child2.size() == 1); List bbblist = (List) child2.get("bbb"); assertNotNull(bbblist); assertTrue(bbblist.size() == 3); assertEquals("AAA", bbblist.get(0)); assertEquals("BBB", bbblist.get(1)); assertEquals("CCC", bbblist.get(2)); } /** * @throws Exception */ public void testToJson_PrimitiveArray() throws Exception { assertEquals("[1]", JSONSerializer.serialize(new int[] { 1 })); assertEquals("[1,2,3]", JSONSerializer.serialize(new int[] { 1, 2, 3 })); assertEquals("[true]", JSONSerializer.serialize(new boolean[] { true })); assertEquals("[true,false,true]", JSONSerializer .serialize(new boolean[] { true, false, true })); assertEquals("[1.11]", JSONSerializer.serialize(new double[] { 1.11 })); assertEquals("[1.11,2.22,3.33]", JSONSerializer.serialize(new double[] { 1.11, 2.22, 3.33 })); // assertEquals( // "{bbb:[11,22,33],ccc:[true,false,true],ddd:[1.11,2.22,3.33]}", // JSONSerializer.serialize(new Test2())); System.out.println(JSONSerializer.serialize(new Test2())); } /** * @throws Exception */ public void testToJson_bean() throws Exception { String s = JSONSerializer.serialize(new MyBean()); System.out.println(s); assertTrue(s.indexOf("aaa:null") > 0); assertTrue(s.indexOf("bbb:null") > 0); MyBean bean = new MyBean(); bean.setBbb(new MyBean()); s = JSONSerializer.serialize(bean); System.out.println(s); } /** * @throws Exception */ public void testToJson_htmlBean1() throws Exception { final HtmlBean bean = new HtmlBean(); final String s = JSONSerializer.serialize(bean); assertTrue(s.indexOf("status:null") > 0); assertTrue(s.indexOf("html:null") > 0); } /** * @throws Exception */ public void testToJson_htmlBean2() throws Exception { final HtmlBean bean = new HtmlBean(); bean.setStatus(new Integer(30)); bean.setHtml("<div>hoge</div>"); final String s = JSONSerializer.serialize(bean); assertTrue(s.indexOf("status:30") > 0); assertTrue(s.indexOf("html:\"<div>hoge<\\/div>\"") > 0); } /** * @throws Exception */ public void testQuote() throws Exception { assertEquals("\"a\"", JSONSerializer.quote("a")); assertEquals("\"\\t\"", JSONSerializer.quote("\t")); assertEquals("\"\\n\"", JSONSerializer.quote("\n")); assertEquals("\"\\u0000\"", JSONSerializer.quote("\0")); assertEquals("\"\\\"\"", JSONSerializer.quote("\"")); assertEquals("\"\\\\\"", JSONSerializer.quote("\\")); assertEquals("\"\\/\"", JSONSerializer.quote("/")); } /** * @throws Exception */ public void testIsString() throws Exception { String s = "'aaa'"; assertTrue(JSONSerializer.isString(s)); } /** * @throws Exception */ public void testIsString2() throws Exception { String s = "\"aaa\""; assertTrue(JSONSerializer.isString(s)); } /** * @throws Exception */ public void testIsString3() throws Exception { String s = "aaa"; assertFalse(JSONSerializer.isString(s)); } /** * */ public void testIsObject1() { String str = "{'test1':'test2'}"; boolean result = JSONSerializer.isObject(str); assertTrue(result); } /** * */ public void testIsObject2() { String str = "['test1','test2']"; boolean result = JSONSerializer.isObject(str); assertFalse(result); } /** * */ public void testIsObject3() { String str = "'test2'"; boolean result = JSONSerializer.isObject(str); assertFalse(result); } /** * */ public void testIsArray1() { String str = "['test1','test2']"; boolean result = JSONSerializer.isArray(str); assertTrue(result); } /** * */ public void testIsArray2() { String str = "{'test1','test2'}"; boolean result = JSONSerializer.isArray(str); assertFalse(result); } /** * */ public void testIsArray3() { String str = "'test2'"; boolean result = JSONSerializer.isArray(str); assertFalse(result); } /** * */ public void testParseObject1() { String str = "{'test1':'test2'}"; Map map = JSONSerializer.evalMap(str); assertEquals("{test1=test2}", map.toString()); } /** * */ public void testParseObject2() { String str = "{'test1':test2}"; Map map = JSONSerializer.evalMap(str); assertEquals("{test1=test2}", map.toString()); } /** * */ public void testParseObject3() { String str = "{'test1':3}"; Map map = JSONSerializer.evalMap(str); Integer i = (Integer) map.get("test1"); assertEquals(i, new Integer(3)); } /** * */ public void testParseObject4() { String str = "{'test1':'4'}"; Map map = JSONSerializer.evalMap(str); String i = (String) map.get("test1"); assertEquals(i, "4"); } /** * */ public void testParseObject5() { String str = "{'test2':{'test1':'5'}}"; Map map = JSONSerializer.evalMap(str); Map m = (Map) map.get("test2"); assertNotNull(m); String s = (String) m.get("test1"); assertEquals(s, "5"); } /** * */ public void testParseObject6() { String str = "{'test1':{'test2':'2'},'test3':{'test4':'4'}}"; Map map = JSONSerializer.evalMap(str); assertEquals("{test3={test4=4}, test1={test2=2}}", map.toString()); } /** * */ public void testParseArray1() { String str = "['test1']"; List list = JSONSerializer.evalArray(str); assertEquals("test1", list.get(0)); } /** * */ public void testParseArray2() { String str = "['test1', 'test2']"; List list = JSONSerializer.evalArray(str); assertEquals("test1", list.get(0)); assertEquals("test2", list.get(1)); } /** * */ public void testParseArray3() { String str = "[1, 2]"; List list = JSONSerializer.evalArray(str); assertEquals(new Integer(1), list.get(0)); assertEquals(new Integer(2), list.get(1)); } /** * */ public void testParseArray4() { String str = "[1, [2, 3, 4, 5], 3]"; List list = JSONSerializer.evalArray(str); assertEquals(new Integer(1), list.get(0)); assertEquals(list.toString(), "[1, [2, 3, 4, 5], 3]"); } /** * */ public void testParseArray5() { String str = "[{'test1':1}, {'test2':'2'}]"; List list = JSONSerializer.evalArray(str); Map map1 = (Map) list.get(0); Integer i = (Integer) map1.get("test1"); assertEquals(i, new Integer(1)); Map map2 = (Map) list.get(1); String s = (String) map2.get("test2"); assertEquals(s, "2"); } /** * */ public void testParseArray6() { String str = "[{'test1':{'test2':'2'},'test3':{'test4':'4'}}]"; List list = JSONSerializer.evalArray(str); assertEquals("[{test3={test4=4}, test1={test2=2}}]", list.toString()); } /** * @author mopemope */ public static class MyBean { private String aaa; private MyBean bbb; /** * @return */ public String getAaa() { return aaa; } /** * @param aaa */ public void setAaa(String aaa) { this.aaa = aaa; } /** * @return */ public MyBean getBbb() { return bbb; } /** * @param bbb */ public void setBbb(MyBean bbb) { this.bbb = bbb; } } /** * @author mopemope */ public static class Test1 { private String aaa = "hoge"; private int bbb = 100; private boolean ccc = true; private double ddd = 3.14; /** * @return */ public String getAaa() { return aaa; } /** * @return */ public int getBbb() { return bbb; } /** * @return */ public boolean isCcc() { return ccc; } /** * @return */ public double getDdd() { return ddd; } } /** * @author mopemope */ public static class Test2 { private int[] bbb = { 11, 22, 33 }; private boolean[] ccc = { true, false, true }; private double[] ddd = { 1.11, 2.22, 3.33 }; /** * @return */ public int[] getBbb() { return bbb; } /** * @return */ public boolean[] getCcc() { return ccc; } /** * @return */ public double[] getDdd() { return ddd; } } /** * @author mopemope */ public static class HtmlBean { private Integer status; private String html; /** * @return */ public String getHtml() { return html; } /** * @param html */ public void setHtml(final String html) { this.html = html; } /** * @return */ public Integer getStatus() { return status; } /** * @param status */ public void setStatus(final Integer status) { this.status = status; } } /** */ public static class Hoge { private Map map; /** * */ public Hoge() { map = new HashMap(); Map child1 = new HashMap(); child1.put("aaa", new String[] { "aaa", "bbb", "ccc" }); Map child2 = new HashMap(); child2.put("bbb", new String[] { "AAA", "BBB", "CCC" }); map.put("maplist", new Map[] { child1, child2 }); } /** * @return */ public Map getMap() { return map; } /** * @param map */ public void setMap(Map map) { this.map = map; } } /** * */ public static class Hoge2 { private Map map; /** * */ public Hoge2() { map = new HashMap(); Map child1 = new HashMap(); child1.put("aaa", new String[] { "aaa", "bbb", "ccc" }); child1.put("ccc", new Integer[] { new Integer(1), new Integer(2) }); Map child2 = new HashMap(); child2.put("bbb", new String[] { "AAA", "BBB", "CCC" }); map.put("maplist", new Map[] { child1, child2 }); } /** * @return */ public Map getMap() { return map; } /** * @param map */ public void setMap(Map map) { this.map = map; } } /** * */ public static class Hoge3 { private List list; /** * */ public Hoge3() { list = new ArrayList(); Map child1 = new HashMap(); child1.put("aaa", new String[] { "aaa", "bbb", "ccc" }); child1.put("ccc", new Integer[] { new Integer(1), new Integer(2) }); list.add(child1); Map child2 = new HashMap(); child2.put("bbb", new String[] { "AAA", "BBB", "CCC" }); list.add(child2); } /** * @return */ public List getList() { return list; } /** * @param list */ public void setList(final List list) { this.list = list; } } }