package biz.paluch.logging.gelf.intern; import static org.assertj.core.api.Assertions.assertThat; import java.io.ByteArrayOutputStream; import java.util.HashMap; import java.util.Map; import org.apache.commons.io.IOUtils; import org.junit.jupiter.api.BeforeEach; import org.junit.jupiter.api.Test; import com.fasterxml.jackson.databind.ObjectMapper; /** * @author Mark Paluch */ public class JsonWriterUnitTests { private String content; @BeforeEach public void before() throws Exception { byte[] bytes = IOUtils.toByteArray(getClass().getResourceAsStream("/utf8.txt")); content = new String(bytes, "UTF-8"); } @Test public void testUtf8Encoding() throws Exception { Map<String, String> map = new HashMap<String, String>(); map.put("key", content); ByteArrayOutputStream buffer = new ByteArrayOutputStream(); JsonWriter.toJSONString(OutputAccessor.from(buffer), map); ObjectMapper objectMapper = new ObjectMapper(); Map parsedByJackson = objectMapper.readValue(buffer.toByteArray(), Map.class); assertThat(parsedByJackson).isEqualTo(map); } @Test public void testUtf8EncodingWithJacksonEncoding() throws Exception { Map<String, String> map = new HashMap<String, String>(); map.put("key", content); ObjectMapper objectMapper = new ObjectMapper(); Map parsedByJackson = objectMapper.readValue(objectMapper.writeValueAsBytes(map), Map.class); assertThat(parsedByJackson).isEqualTo(map); } @Test public void testTypeEncoding() throws Exception { Map<String, Object> map = new HashMap<String, Object>(); map.put("key", "string"); map.put("double", Double.MAX_VALUE); map.put("doublePosInfinite", Double.POSITIVE_INFINITY); map.put("doubleNegInfinite", Double.NEGATIVE_INFINITY); map.put("doubleNaN", Double.NaN); map.put("int", 1); Map<String, Object> expected = new HashMap<String, Object>(); expected.put("key", "string"); expected.put("double", Double.MAX_VALUE); expected.put("doublePosInfinite", "Infinite"); expected.put("doubleNegInfinite", "-Infinite"); expected.put("doubleNaN", "NaN"); expected.put("int", 1); ByteArrayOutputStream buffer = new ByteArrayOutputStream(); JsonWriter.toJSONString(OutputAccessor.from(buffer), map); ObjectMapper objectMapper = new ObjectMapper(); Map parsedByJackson = objectMapper.readValue(buffer.toByteArray(), Map.class); assertThat(parsedByJackson).isEqualTo(expected); } }