package org.simpleflatmapper.converter.test;
import org.junit.Test;
import org.simpleflatmapper.converter.ConversionException;
import org.simpleflatmapper.converter.ConverterService;
import java.io.Reader;
import java.lang.reflect.InvocationTargetException;
import java.lang.reflect.Method;
import java.math.BigDecimal;
import java.math.BigInteger;
import java.net.MalformedURLException;
import java.net.URL;
import java.net.URLClassLoader;
import java.util.List;
import java.util.ServiceLoader;
import java.util.UUID;
import static org.junit.Assert.*;
import static org.simpleflatmapper.converter.test.ConverterServiceTestHelper.testConverter;
public class ConverterServiceTest {
public enum ENUM {
type1, type2
}
@Test
public void testToStringConverter() throws Exception {
testConverter("Hoy", "Hoy", Object.class, String.class);
}
@Test
public void testNumberToNumberConverter() throws Exception {
testConverter(13, (byte)13);
testConverter((byte)13, 13);
testConverter(13, (short)13);
testConverter((short)13, 13);
testConverter(13, 13);
testConverter(13, 13);
testConverter(13, (long)13);
testConverter((long)13, 13);
testConverter(13, (float)13);
testConverter((float)13, 13);
testConverter(13, (double)13);
testConverter((double)13, 13);
testConverter(13, new BigDecimal(13));
testConverter(new BigDecimal(13), 13);
testConverter(new BigInteger("13"), new BigDecimal("13"));
testConverter(13, new BigInteger("13"));
testConverter(new BigDecimal("13"), new BigInteger("13"));
testConverter(new BigInteger("13"), 13);
}
@Test
public void testChain2Converters() throws Exception {
testConverter("1", BigDecimal.ONE);
}
@Test
public void testObjectToEnumConverter() throws Exception {
testConverter(0, ENUM.type1, Object.class, ENUM.class);
testConverter("type2", ENUM.type2, Object.class, ENUM.class);
testConverter(null, null, Object.class, ENUM.class);
}
@Test
public void testNumberToEnumConverter() throws Exception {
testConverter(0, ENUM.type1);
testConverter(1, ENUM.type2);
testConverter(null, null, Number.class, ENUM.class);
try {
testConverter(2, ENUM.type2);
fail();
} catch(IllegalArgumentException e) {
}
}
@Test
public void testIdentity() throws Exception {
Object o = new Object();
testConverter(o, o);
}
@Test
public void testURLConverter() throws Exception {
testConverter("http://url.net", new URL("http://url.net"));
try {
ConverterService.getInstance().findConverter(String.class, URL.class).convert("blop");
fail();
} catch(ConversionException e) {
// expected
}
}
@Test
public void testCharSequenceConverter() throws Exception {
testConverter(new StringBuilder("hello"), "hello");
testConverter("123", Byte.valueOf((byte)123));
testConverter("123", Character.valueOf((char)123));
testConverter("1234", Short.valueOf((short)1234));
testConverter("1234", Integer.valueOf(1234));
testConverter("1234", Long.valueOf(1234));
testConverter("1234.56", Float.valueOf(1234.56f));
testConverter("1234.56", Double.valueOf(1234.56));
testConverter("type2", ENUM.type2);
final UUID uuid = UUID.randomUUID();
testConverter(uuid.toString(), uuid);
}
@Test
public void testNoConverter() {
assertNull(ConverterService.getInstance().findConverter(Reader.class, System.class));
}
}