package com.fasterxml.jackson.databind.convert;
import java.util.*;
import static org.junit.Assert.*;
import com.fasterxml.jackson.core.Base64Variants;
import com.fasterxml.jackson.databind.*;
import com.fasterxml.jackson.databind.annotation.JsonDeserialize;
import com.fasterxml.jackson.databind.annotation.JsonSerialize;
import com.fasterxml.jackson.databind.util.StdConverter;
public class TestStringConversions
extends com.fasterxml.jackson.databind.BaseMapTest
{
static class LCConverter extends StdConverter<String,String>
{
@Override public String convert(String value) {
return value.toLowerCase();
}
}
static class StringWrapperWithConvert
{
@JsonSerialize(converter=LCConverter.class)
@JsonDeserialize(converter=LCConverter.class)
public String value;
protected StringWrapperWithConvert() { }
public StringWrapperWithConvert(String v) { value = v; }
}
private final ObjectMapper MAPPER = new ObjectMapper();
public void testSimple()
{
assertEquals(Boolean.TRUE, MAPPER.convertValue("true", Boolean.class));
assertEquals(Integer.valueOf(-3), MAPPER.convertValue(" -3 ", Integer.class));
assertEquals(Long.valueOf(77), MAPPER.convertValue("77", Long.class));
int[] ints = { 1, 2, 3 };
List<Integer> Ints = new ArrayList<Integer>();
Ints.add(1);
Ints.add(2);
Ints.add(3);
assertArrayEquals(ints, MAPPER.convertValue(Ints, int[].class));
}
public void testStringsToInts()
{
// let's verify our "neat trick" actually works...
assertArrayEquals(new int[] { 1, 2, 3, 4, -1, 0 },
MAPPER.convertValue("1 2 3 4 -1 0".split("\\s+"), int[].class));
}
public void testBytesToBase64AndBack() throws Exception
{
byte[] input = new byte[] { 1, 2, 3, 4, 5, 6, 7 };
String encoded = MAPPER.convertValue(input, String.class);
assertNotNull(encoded);
assertEquals("AQIDBAUGBw==", encoded);
// plus, ensure this is consistent:
assertEquals(Base64Variants.MIME.encode(input), encoded);
byte[] result = MAPPER.convertValue(encoded, byte[].class);
assertArrayEquals(input, result);
}
public void testBytestoCharArray() throws Exception
{
byte[] input = new byte[] { 1, 2, 3, 4, 5, 6, 7 };
// first, do baseline encoding
char[] expEncoded = MAPPER.convertValue(input, String.class).toCharArray();
// then compare
char[] actEncoded = MAPPER.convertValue(input, char[].class);
assertArrayEquals(expEncoded, actEncoded);
}
public void testLowerCasingSerializer() throws Exception
{
assertEquals("{\"value\":\"abc\"}", MAPPER.writeValueAsString(new StringWrapperWithConvert("ABC")));
}
public void testLowerCasingDeserializer() throws Exception
{
StringWrapperWithConvert value = MAPPER.readValue("{\"value\":\"XyZ\"}", StringWrapperWithConvert.class);
assertNotNull(value);
assertEquals("xyz", value.value);
}
}