package com.github.rmannibucau.boon.jaxrs; import org.junit.BeforeClass; import org.junit.Test; import javax.ws.rs.core.MediaType; import java.io.ByteArrayInputStream; import java.io.IOException; import java.io.InputStream; import java.io.Reader; import java.lang.annotation.Annotation; import java.util.ArrayList; import java.util.HashMap; import java.util.List; import java.util.Map; import static org.assertj.core.api.Assertions.assertThat; public class BoonJsonMessageBodyReaderTest { @BeforeClass // 1.8.0 is not handled, merged on master public static void forceJava() { System.setProperty("java.version", "1.7.0_0"); } @Test public void isReadableInputStream() { assertThat(new BoonJsonMessageBodyReader<Object>().isReadable(InputStream.class, InputStream.class, new Annotation[0], MediaType.TEXT_HTML_TYPE)).isFalse(); assertThat(new BoonJsonMessageBodyReader<Object>().isReadable(InputStream.class, InputStream.class, new Annotation[0], MediaType.APPLICATION_JSON_TYPE)).isFalse(); } @Test public void isReadableReader() { assertThat(new BoonJsonMessageBodyReader<Object>().isReadable(Reader.class, Reader.class, new Annotation[0], MediaType.TEXT_HTML_TYPE)).isFalse(); assertThat(new BoonJsonMessageBodyReader<Object>().isReadable(Reader.class, Reader.class, new Annotation[0], MediaType.APPLICATION_JSON_TYPE)).isFalse(); } @Test public void isReadableJson() { assertThat(new BoonJsonMessageBodyReader<Object>().isReadable(Object.class, Object.class, new Annotation[0], MediaType.APPLICATION_JSON_TYPE)).isTrue(); } @Test public void unmarshallingPojo() throws IOException { assertThat(new BoonJsonMessageBodyReader<ReadablePojo>().readFrom( ReadablePojo.class, ReadablePojo.class, new Annotation[0], MediaType.APPLICATION_JSON_TYPE, null, new ByteArrayInputStream( "{\"id\":\"a\", \"name\":\"the name\", \"age\":25}".getBytes() ) )).isEqualTo(new ReadablePojo("a", "the name", 25)); } @Test public void unmarshallingList() throws IOException { assertThat(new BoonJsonMessageBodyReader<List>().readFrom( List.class, List.class, new Annotation[0], MediaType.APPLICATION_JSON_TYPE, null, new ByteArrayInputStream( "[\"a\",\"b\",\"c\"]".getBytes() ) )).isEqualTo(new ArrayList<String>() {{ add("a"); add("b"); add("c"); }}); } @Test public void unmarshallingMap() throws IOException { assertThat(new BoonJsonMessageBodyReader<Map>().readFrom( Map.class, Map.class, new Annotation[0], MediaType.APPLICATION_JSON_TYPE, null, new ByteArrayInputStream( "{\"id\":\"a\", \"name\":\"the name\", \"age\":\"25\"}".getBytes() ) )).isEqualTo(new HashMap<String, String>() {{ put("id", "a"); put("name", "the name"); put("age", "25"); }}); } public static class ReadablePojo { private String id; private String name; private int age; public ReadablePojo(final String id, final String name, final int age) { this.id = id; this.name = name; this.age = age; } @Override public boolean equals(final Object o) { if (this == o) return true; if (o == null || getClass() != o.getClass()) return false; final ReadablePojo that = ReadablePojo.class.cast(o); return age == that.age && id.equals(that.id) && name.equals(that.name); } @Override public int hashCode() { int result = id.hashCode(); result = 31 * result + name.hashCode(); result = 31 * result + age; return result; } } }