/* * Copyright 2014 Red Hat, Inc. * * All rights reserved. This program and the accompanying materials * are made available under the terms of the Eclipse Public License v1.0 * and Apache License v2.0 which accompanies this distribution. * * The Eclipse Public License is available at * http://www.eclipse.org/legal/epl-v10.html * * The Apache License v2.0 is available at * http://www.opensource.org/licenses/apache2.0.php * * You may elect to redistribute this code under either of these licenses. */ package io.vertx.test.core; import com.fasterxml.jackson.annotation.JsonProperty; import com.fasterxml.jackson.core.type.TypeReference; import com.fasterxml.jackson.databind.ObjectMapper; import io.vertx.core.json.Json; import org.junit.Test; import java.time.Instant; import static java.time.format.DateTimeFormatter.ISO_INSTANT; import java.util.Collections; import java.util.List; import java.util.Map; /** * @author <a href="http://tfox.org">Tim Fox</a> */ public class JsonMapperTest extends VertxTestBase { @Test public void testGetSetMapper() { ObjectMapper mapper = Json.mapper; assertNotNull(mapper); ObjectMapper newMapper = new ObjectMapper(); Json.mapper = newMapper; assertSame(newMapper, Json.mapper); Json.mapper = mapper; } @Test public void testGetSetPrettyMapper() { ObjectMapper mapper = Json.prettyMapper; assertNotNull(mapper); ObjectMapper newMapper = new ObjectMapper(); Json.prettyMapper = newMapper; assertSame(newMapper, Json.prettyMapper); Json.prettyMapper = mapper; } @Test public void encodeCustomTypeInstant() { Instant now = Instant.now(); String json = Json.encode(now); assertNotNull(json); // the RFC is one way only Instant decoded = Instant.from(ISO_INSTANT.parse(json.substring(1, json.length() - 1))); assertEquals(now, decoded); } @Test public void encodeCustomTypeInstantNull() { Instant now = null; String json = Json.encode(now); assertNotNull(json); assertEquals("null", json); } @Test public void encodeCustomTypeBinary() { byte[] data = new byte[] { 'h', 'e', 'l', 'l', 'o'}; String json = Json.encode(data); assertNotNull(json); // base64 encoded hello assertEquals("\"aGVsbG8=\"", json); } @Test public void encodeCustomTypeBinaryNull() { byte[] data = null; String json = Json.encode(data); assertNotNull(json); assertEquals("null", json); } @Test public void testGenericDecoding() { Pojo original = new Pojo(); original.value = "test"; String json = Json.encode(Collections.singletonList(original)); List<Pojo> correct = Json.decodeValue(json, new TypeReference<List<Pojo>>() {}); assertTrue(((List)correct).get(0) instanceof Pojo); assertEquals(original.value, correct.get(0).value); List incorrect = Json.decodeValue(json, List.class); assertFalse(incorrect.get(0) instanceof Pojo); assertTrue(incorrect.get(0) instanceof Map); assertEquals(original.value, ((Map)(incorrect.get(0))).get("value")); } private static class Pojo { @JsonProperty String value; } }