PojoAsArrayRoundtripTest.java

package tools.jackson.databind.struct;

import java.util.ArrayList;
import java.util.List;

import org.junit.jupiter.api.Test;

import com.fasterxml.jackson.annotation.JsonFormat;
import com.fasterxml.jackson.annotation.JsonPropertyOrder;

import tools.jackson.databind.ObjectMapper;
import tools.jackson.databind.testutil.DatabindTestUtil;

import static org.junit.jupiter.api.Assertions.assertEquals;
import static org.junit.jupiter.api.Assertions.assertNotNull;

public class PojoAsArrayRoundtripTest extends DatabindTestUtil
{
    @JsonFormat(shape=JsonFormat.Shape.ARRAY)
    @JsonPropertyOrder({"content", "images"})
    static class MediaItemAsArray
    {
        public enum Player { JAVA, FLASH;  }
        public enum Size { SMALL, LARGE; }

        private List<Photo> _photos;
        private Content _content;

        public MediaItemAsArray() { }

        protected MediaItemAsArray(Content c)
        {
            _content = c;
        }

        public void addPhoto(Photo p) {
            if (_photos == null) {
                _photos = new ArrayList<Photo>();
            }
            _photos.add(p);
        }

        public List<Photo> getImages() { return _photos; }
        public void setImages(List<Photo> p) { _photos = p; }

        public Content getContent() { return _content; }
        public void setContent(Content c) { _content = c; }

        @JsonFormat(shape=JsonFormat.Shape.ARRAY)
        @JsonPropertyOrder({"uri","title","width","height","size"})
        static class Photo
        {
            private String _uri;
            private String _title;
            private int _width;
            private int _height;
            private Size _size;

            public Photo() {}
            protected Photo(String uri, String title, int w, int h, Size s)
            {
              _uri = uri;
              _title = title;
              _width = w;
              _height = h;
              _size = s;
            }

          public String getUri() { return _uri; }
          public String getTitle() { return _title; }
          public int getWidth() { return _width; }
          public int getHeight() { return _height; }
          public Size getSize() { return _size; }

          public void setUri(String u) { _uri = u; }
          public void setTitle(String t) { _title = t; }
          public void setWidth(int w) { _width = w; }
          public void setHeight(int h) { _height = h; }
          public void setSize(Size s) { _size = s; }
        }

        @JsonFormat(shape=JsonFormat.Shape.ARRAY)
        @JsonPropertyOrder({"uri","title","width","height","format","duration","size","bitrate","persons","player","copyright"})
        public static class Content
        {
            private Player _player;
            private String _uri;
            private String _title;
            private int _width;
            private int _height;
            private String _format;
            private long _duration;
            private long _size;
            private int _bitrate;
            private List<String> _persons;
            private String _copyright;

            public Content() { }

            public void addPerson(String p) {
                if (_persons == null) {
                    _persons = new ArrayList<>();
                }
                _persons.add(p);
            }

            public Player getPlayer() { return _player; }
            public String getUri() { return _uri; }
            public String getTitle() { return _title; }
            public int getWidth() { return _width; }
            public int getHeight() { return _height; }
            public String getFormat() { return _format; }
            public long getDuration() { return _duration; }
            public long getSize() { return _size; }
            public int getBitrate() { return _bitrate; }
            public List<String> getPersons() { return _persons; }
            public String getCopyright() { return _copyright; }

            public void setPlayer(Player p) { _player = p; }
            public void setUri(String u) {  _uri = u; }
            public void setTitle(String t) {  _title = t; }
            public void setWidth(int w) {  _width = w; }
            public void setHeight(int h) {  _height = h; }
            public void setFormat(String f) {  _format = f;  }
            public void setDuration(long d) {  _duration = d; }
            public void setSize(long s) {  _size = s; }
            public void setBitrate(int b) {  _bitrate = b; }
            public void setPersons(List<String> p) {  _persons = p; }
            public void setCopyright(String c) {  _copyright = c; }
        }
    }

    /*
    /**********************************************************************
    /* Test methods
    /**********************************************************************
     */

    private final ObjectMapper MAPPER = newJsonMapper();

    @Test
    public void testMedaItemRoundtrip() throws Exception
    {
        MediaItemAsArray.Content c = new MediaItemAsArray.Content();
        c.setBitrate(9600);
        c.setCopyright("none");
        c.setDuration(360000L);
        c.setFormat("lzf");
        c.setHeight(640);
        c.setSize(128000L);
        c.setTitle("Amazing Stuff For Something Or Oth\u00CBr!");
        c.setUri("http://multi.fario.us/index.html");
        c.setWidth(1400);

        c.addPerson("Joe Sixp\u00e2ck");
        c.addPerson("Ezekiel");
        c.addPerson("Sponge-Bob Squarepant\u00DF");

        MediaItemAsArray input = new MediaItemAsArray(c);
        input.addPhoto(new MediaItemAsArray.Photo());
        input.addPhoto(new MediaItemAsArray.Photo());
        input.addPhoto(new MediaItemAsArray.Photo());

        String json = MAPPER.writerWithDefaultPrettyPrinter().writeValueAsString(input);

        MediaItemAsArray output = MAPPER.readValue(new java.io.StringReader(json), MediaItemAsArray.class);
        assertNotNull(output);

        assertNotNull(output.getImages());
        assertEquals(input.getImages().size(), output.getImages().size());
        assertNotNull(output.getContent());
        assertEquals(input.getContent().getTitle(), output.getContent().getTitle());
        assertEquals(input.getContent().getUri(), output.getContent().getUri());

        // compare re-serialization as a simple check as well
        assertEquals(json, MAPPER.writerWithDefaultPrettyPrinter().writeValueAsString(output));
    }
}