com.evrythng.java.wrapper.util.JSONUtilsTest.java Source code

Java tutorial

Introduction

Here is the source code for com.evrythng.java.wrapper.util.JSONUtilsTest.java

Source

/*
 * (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());
    }
}