package com.googlecode.mycontainer.commons.json; import static org.junit.Assert.assertEquals; import static org.junit.Assert.assertNotNull; import java.util.HashMap; import java.util.Map; import org.junit.Before; import org.junit.Test; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import com.googlecode.mycontainer.commons.json.JsonHandler; public class JsonHandlerTest { private static final Logger LOG = LoggerFactory .getLogger(JsonHandlerTest.class); private JsonHandler handler; @Before public void setUp() { handler = JsonHandler.instance(); } @Test public void testFormatBasics() { assertEquals("null", handler.format(null)); assertEquals("true", handler.format(true)); assertEquals("false", handler.format(false)); assertEquals("\"my string\"", handler.format("my string")); assertEquals("\"null\"", handler.format("null")); assertEquals("\"true\"", handler.format("true")); assertEquals("2", handler.format(2)); assertEquals("2.4", handler.format(2.4)); assertEquals("\"\"", handler.format("")); } @Test public void testParseBasics() { assertEquals(null, handler.parse("null")); assertEquals(true, handler.parse("true")); assertEquals(false, handler.parse("false")); assertEquals("my string", handler.parse("'my string'")); assertEquals("null", handler.parse("'null'")); assertEquals("true", handler.parse("'true'")); assertEquals(2, handler.parse("2")); assertEquals(2.4, handler.parse("2.4")); assertEquals("", handler.parse("''")); } @Test public void testPhone() { testFormatParse("{\"class\":\"" + TestJsonPhone.class.getName() + "\",\"id\":null,\"mainPhone\":null,\"number\":null}", TestJsonPhone.class); testFormatParse( "{\"class\":\"" + TestJsonPhone.class.getName() + "\",\"id\":null,\"mainPhone\":null,\"number\":\"my number\"}", TestJsonPhone.class); testFormatParse("{\"class\":\"" + TestJsonPhone.class.getName() + "\",\"id\":5,\"mainPhone\":null,\"number\":\"my number\"}", TestJsonPhone.class); testFormatParse( "{\"class\":\"" + TestJsonPhone.class.getName() + "\",\"id\":5,\"mainPhone\":{\"class\":\"" + TestJsonPhone.class.getName() + "\",\"id\":6,\"mainPhone\":null,\"number\":\"my number6\"},\"number\":\"my number\"}", TestJsonPhone.class); } @Test public void testClient() { testFormatParse( "{\"age\":0,\"class\":\"" + TestJsonCustomer.class.getName() + "\",\"id\":null,\"name\":null,\"phones\":[]}", TestJsonCustomer.class); testFormatParse( "{\"age\":0,\"class\":\"" + TestJsonCustomer.class.getName() + "\",\"id\":null,\"name\":null,\"phones\":[{\"class\":\"" + TestJsonPhone.class.getName() + "\",\"id\":null,\"mainPhone\":null,\"number\":\"test1\"},{\"class\":\"" + TestJsonPhone.class.getName() + "\",\"id\":null,\"mainPhone\":null,\"number\":\"test1\"}]}", TestJsonCustomer.class); } protected void testFormatParse(String str, Class<?> clazz) { LOG.info("Parsing: " + clazz + ": " + str); assertNotNull(str); assertNotNull(clazz); Object obj = handler.parse(str, clazz); assertNotNull(obj); assertEquals(clazz, obj.getClass()); String format = handler.format(obj); LOG.info("Format : " + clazz + ": " + format); assertEquals(str, format); } @SuppressWarnings("unchecked") @Test public void parseMap() { Map<String, Object> map = new HashMap<String, Object>(); map.put("type", "FILE"); map.put("test", "value"); String json = handler.format(map); assertEquals("{\"test\":\"value\",\"type\":\"FILE\"}", json); Map<String, Object> parsed = handler.parse(json, map.getClass()); assertEquals(map, parsed); } }