/* * (c) Copyright Reserved EVRYTHNG Limited 2016. All rights reserved. * Use of this material is subject to license. * Copying and unauthorised use of this material strictly prohibited. */ package com.evrythng.java.wrapper.util; import com.fasterxml.jackson.core.type.TypeReference; import org.junit.Assert; import org.junit.Test; /** * Test class for {@link JSONUtils}. */ public class JSONUtilsTest { private static class MyObject { private String myProp; private Integer b; private MySubObject sub; public String getMyProp() { return myProp; } public void setMyProp(final String myProp) { this.myProp = myProp; } public Integer getB() { return b; } public void setB(final Integer b) { this.b = b; } public MySubObject getSub() { return sub; } public void setSub(final MySubObject sub) { this.sub = sub; } } private static class MySubObject { private Integer x; private Integer y; public Integer getX() { return x; } public void setX(final Integer x) { this.x = x; } public Integer getY() { return y; } public void setY(final Integer y) { this.y = y; } } @Test public void deserialize() { String json = "{\"myProp\":\" 1 \",\"b\":2, \"sub\": {\"x\":14,\"y\":33} }"; MyObject o = JSONUtils.read(json, new TypeReference<MyObject>() { }); Assert.assertEquals("1", o.getMyProp()); Assert.assertEquals(Integer.valueOf(2), o.getB()); Assert.assertNotNull(o.getSub()); Assert.assertSame(MySubObject.class, o.getSub().getClass()); Assert.assertEquals(Integer.valueOf(14), o.getSub().getX()); Assert.assertEquals(Integer.valueOf(33), o.getSub().getY()); } @Test public void deserializeLess() { String json = "{\"myProp\":\"1\" }"; MyObject o = JSONUtils.read(json, new TypeReference<MyObject>() { }); Assert.assertEquals("1", o.getMyProp()); Assert.assertNull(o.getB()); Assert.assertNull(o.getSub()); } @Test public void deserializeLessInSubObject() { String json = "{\"myProp\":\"1\",\"b\":2, \"sub\": {\"y\":33} }"; MyObject o = JSONUtils.read(json, new TypeReference<MyObject>() { }); Assert.assertEquals("1", o.getMyProp()); Assert.assertEquals(Integer.valueOf(2), o.getB()); Assert.assertNotNull(o.getSub()); Assert.assertSame(MySubObject.class, o.getSub().getClass()); Assert.assertNull(o.getSub().getX()); Assert.assertEquals(Integer.valueOf(33), o.getSub().getY()); } @Test public void deserializeNoneInSubObject() { String json = "{\"myProp\":\"1\",\"b\":2, \"sub\": {} }"; MyObject o = JSONUtils.read(json, new TypeReference<MyObject>() { }); Assert.assertEquals("1", o.getMyProp()); Assert.assertEquals(Integer.valueOf(2), o.getB()); Assert.assertNotNull(o.getSub()); Assert.assertSame(MySubObject.class, o.getSub().getClass()); Assert.assertNull(o.getSub().getX()); Assert.assertNull(o.getSub().getY()); } @Test public void deserializeMore() { String json = "{\"myProp\":\"1\",\"b\":2,\"sub\": {\"x\":14,\"y\":33},\"unexpected\":\"3\", \"w\":{\"y\":42}}"; MyObject o = JSONUtils.read(json, new TypeReference<MyObject>() { }); Assert.assertEquals("1", o.getMyProp()); Assert.assertEquals(Integer.valueOf(2), o.getB()); Assert.assertNotNull(o.getSub()); Assert.assertSame(MySubObject.class, o.getSub().getClass()); Assert.assertEquals(Integer.valueOf(14), o.getSub().getX()); Assert.assertEquals(Integer.valueOf(33), o.getSub().getY()); } @Test public void deserializeMoreInSubObject() { String json = "{\"myProp\":\"1\",\"b\":2, \"sub\": {\"x\":14,\"y\":33,\"u\":12} }"; MyObject o = JSONUtils.read(json, new TypeReference<MyObject>() { }); Assert.assertEquals("1", o.getMyProp()); Assert.assertEquals(Integer.valueOf(2), o.getB()); Assert.assertNotNull(o.getSub()); Assert.assertSame(MySubObject.class, o.getSub().getClass()); Assert.assertEquals(Integer.valueOf(14), o.getSub().getX()); Assert.assertEquals(Integer.valueOf(33), o.getSub().getY()); } @Test(expected = Exception.class) public void deserializeBadType() { String json = "{\"myProp\":\"1\",\"b\":\"a\", \"sub\": {\"x\":14,\"y\":33} }"; JSONUtils.read(json, new TypeReference<MyObject>() { }); } @Test(expected = Exception.class) public void deserializeBadSubType() { String json = "{\"myProp\":\"1\",\"b\":2, \"sub\": {\"x\":\"a\",\"y\":33} }"; JSONUtils.read(json, new TypeReference<MyObject>() { }); } @Test public void serialize() { MyObject exp = new MyObject(); exp.setMyProp("1"); exp.setB(2); String json = JSONUtils.write(exp); MyObject act = JSONUtils.read(json, new TypeReference<MyObject>() { }); Assert.assertEquals(exp.getMyProp(), act.getMyProp()); Assert.assertEquals(exp.getB(), act.getB()); } @Test public void serializeLess() { MyObject exp = new MyObject(); exp.setMyProp("1"); String json = JSONUtils.write(exp); Assert.assertFalse(json.contains("\"b\"")); Assert.assertFalse(json.contains("\"sub\"")); MyObject act = JSONUtils.read(json, new TypeReference<MyObject>() { }); Assert.assertEquals(exp.getMyProp(), act.getMyProp()); Assert.assertEquals(exp.getB(), act.getB()); } }