@Test public void testBytesDecoding() { Pojo original = new Pojo(); original.bytes = TestUtils.randomByteArray(12); Pojo decoded = Json.decodeValue("{\"bytes\":\"" + Base64.getEncoder().encodeToString(original.bytes) + "\"}", Pojo.class); assertArrayEquals(original.bytes, decoded.bytes); }
@Test public void testDecodeValue() { assertDecodeValue(Buffer.buffer("42"), 42, INTEGER_TYPE_REF); assertDecodeValue(Buffer.buffer("42"), 42L, LONG_TYPE_REF); assertDecodeValue(Buffer.buffer("\"foobar\""), "foobar", STRING_TYPE_REF); assertDecodeValue(Buffer.buffer("3.4"), 3.4f, FLOAT_TYPE_REF); assertDecodeValue(Buffer.buffer("3.4"), 3.4d, DOUBLE_TYPE_REF); assertDecodeValue(Buffer.buffer("{\"foo\":4}"), Collections.singletonMap("foo", 4), MAP_TYPE_REF); assertDecodeValue(Buffer.buffer("[0,1,2]"), Arrays.asList(0, 1, 2), LIST_TYPE_REF); assertDecodeValue(Buffer.buffer("true"), true, BOOLEAN_TYPE_REF); assertDecodeValue(Buffer.buffer("false"), false, BOOLEAN_TYPE_REF); }
@Test public void encodeCustomTypeBinaryNull() { byte[] data = null; String json = Json.encode(data); assertNotNull(json); assertEquals("null", json); }
@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 testGenericDecoding() { Pojo original = new Pojo(); original.value = "test"; String json = Json.encode(Collections.singletonList(original)); List<Pojo> correct; correct = Json.decodeValue(json, new TypeReference<List<Pojo>>() {}); assertTrue(((List)correct).get(0) instanceof Pojo); assertEquals(original.value, correct.get(0).value); // same must apply if instead of string we use a buffer correct = Json.decodeValue(Buffer.buffer(json, "UTF8"), 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 <T> void assertDecodeValue(Buffer buffer, T expected, TypeReference<T> ref) { Type type = ref.getType(); Class<?> clazz = type instanceof Class ? (Class<?>) type : (Class<?>) ((ParameterizedType) type).getRawType(); assertEquals(expected, Json.decodeValue(buffer, clazz)); assertEquals(expected, Json.decodeValue(buffer, ref)); assertEquals(expected, Json.decodeValue(buffer.toString(StandardCharsets.UTF_8), clazz)); assertEquals(expected, Json.decodeValue(buffer.toString(StandardCharsets.UTF_8), ref)); Buffer nullValue = Buffer.buffer("null"); assertNull(Json.decodeValue(nullValue, clazz)); assertNull(Json.decodeValue(nullValue, ref)); assertNull(Json.decodeValue(nullValue.toString(StandardCharsets.UTF_8), clazz)); assertNull(Json.decodeValue(nullValue.toString(StandardCharsets.UTF_8), ref)); } }
@Test public void testNullBytesDecoding() { Pojo original = new Pojo(); Pojo decoded = Json.decodeValue("{\"bytes\":null}", Pojo.class); assertEquals(original.bytes, decoded.bytes); }
@Test public void testGenericDecoding() { Pojo original = new Pojo(); original.value = "test"; String json = Json.encode(Collections.singletonList(original)); List<Pojo> correct; correct = Json.decodeValue(json, new TypeReference<List<Pojo>>() {}); assertTrue(((List)correct).get(0) instanceof Pojo); assertEquals(original.value, correct.get(0).value); // same must apply if instead of string we use a buffer correct = Json.decodeValue(Buffer.buffer(json, "UTF8"), 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")); }
@Test public void testGetSetPrettyMapper() { ObjectMapper mapper = Json.prettyMapper; assertNotNull(mapper); ObjectMapper newMapper = new ObjectMapper(); Json.prettyMapper = newMapper; assertSame(newMapper, Json.prettyMapper); Json.prettyMapper = mapper; }
private <T> void assertDecodeValue(Buffer buffer, T expected, TypeReference<T> ref) { Type type = ref.getType(); Class<?> clazz = type instanceof Class ? (Class<?>) type : (Class<?>) ((ParameterizedType) type).getRawType(); assertEquals(expected, Json.decodeValue(buffer, clazz)); assertEquals(expected, Json.decodeValue(buffer, ref)); assertEquals(expected, Json.decodeValue(buffer.toString(StandardCharsets.UTF_8), clazz)); assertEquals(expected, Json.decodeValue(buffer.toString(StandardCharsets.UTF_8), ref)); Buffer nullValue = Buffer.buffer("null"); assertNull(Json.decodeValue(nullValue, clazz)); assertNull(Json.decodeValue(nullValue, ref)); assertNull(Json.decodeValue(nullValue.toString(StandardCharsets.UTF_8), clazz)); assertNull(Json.decodeValue(nullValue.toString(StandardCharsets.UTF_8), ref)); } }
@Test public void testInstantDecoding() { Pojo original = new Pojo(); original.instant = Instant.from(ISO_INSTANT.parse("2018-06-20T07:25:38.397Z")); Pojo decoded = Json.decodeValue("{\"instant\":\"2018-06-20T07:25:38.397Z\"}", Pojo.class); assertEquals(original.instant, decoded.instant); }
@Test public void encodeCustomTypeInstantNull() { Instant now = null; String json = Json.encode(now); assertNotNull(json); assertEquals("null", json); }
@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 testNullInstantDecoding() { Pojo original = new Pojo(); Pojo decoded = Json.decodeValue("{\"instant\":null}", Pojo.class); assertEquals(original.instant, decoded.instant); }
@Test public void testDecodeValue() { assertDecodeValue(Buffer.buffer("42"), 42, INTEGER_TYPE_REF); assertDecodeValue(Buffer.buffer("42"), 42L, LONG_TYPE_REF); assertDecodeValue(Buffer.buffer("\"foobar\""), "foobar", STRING_TYPE_REF); assertDecodeValue(Buffer.buffer("3.4"), 3.4f, FLOAT_TYPE_REF); assertDecodeValue(Buffer.buffer("3.4"), 3.4d, DOUBLE_TYPE_REF); assertDecodeValue(Buffer.buffer("{\"foo\":4}"), Collections.singletonMap("foo", 4), MAP_TYPE_REF); assertDecodeValue(Buffer.buffer("[0,1,2]"), Arrays.asList(0, 1, 2), LIST_TYPE_REF); assertDecodeValue(Buffer.buffer("true"), true, BOOLEAN_TYPE_REF); assertDecodeValue(Buffer.buffer("false"), false, BOOLEAN_TYPE_REF); }
@Test public void testBytesDecoding() { Pojo original = new Pojo(); original.bytes = TestUtils.randomByteArray(12); Pojo decoded = Json.decodeValue("{\"bytes\":\"" + Base64.getEncoder().encodeToString(original.bytes) + "\"}", Pojo.class); assertArrayEquals(original.bytes, decoded.bytes); }
@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 testGetSetPrettyMapper() { ObjectMapper mapper = Json.prettyMapper; assertNotNull(mapper); ObjectMapper newMapper = new ObjectMapper(); Json.prettyMapper = newMapper; assertSame(newMapper, Json.prettyMapper); Json.prettyMapper = mapper; }
@Test public void testInstantDecoding() { Pojo original = new Pojo(); original.instant = Instant.from(ISO_INSTANT.parse("2018-06-20T07:25:38.397Z")); Pojo decoded = Json.decodeValue("{\"instant\":\"2018-06-20T07:25:38.397Z\"}", Pojo.class); assertEquals(original.instant, decoded.instant); }
@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); }