type descriptor initial commit
This commit is contained in:
@@ -28,6 +28,8 @@ import org.springframework.core.convert.ConversionException;
|
||||
import org.springframework.core.convert.ConversionExecutionException;
|
||||
import org.springframework.core.convert.ConversionExecutor;
|
||||
import org.springframework.core.convert.ConversionExecutorNotFoundException;
|
||||
import org.springframework.core.convert.TypeDescriptor;
|
||||
import org.springframework.core.convert.TypedValue;
|
||||
import org.springframework.core.convert.converter.Converter;
|
||||
import org.springframework.core.convert.converter.NumberToNumber;
|
||||
import org.springframework.core.convert.converter.StringToEnum;
|
||||
@@ -37,47 +39,55 @@ public class GenericConversionServiceTests extends TestCase {
|
||||
|
||||
private GenericConversionService service = new GenericConversionService();
|
||||
|
||||
private TypedValue value(Object obj) {
|
||||
return new TypedValue(obj, new TypeDescriptor(obj.getClass()));
|
||||
}
|
||||
|
||||
private TypeDescriptor type(Class clazz) {
|
||||
return new TypeDescriptor(clazz);
|
||||
}
|
||||
|
||||
public void testExecuteConversion() {
|
||||
service.addConverter(new StringToInteger());
|
||||
assertEquals(new Integer(3), service.executeConversion("3", Integer.class));
|
||||
assertEquals(new Integer(3), service.executeConversion(value("3"), type(Integer.class)));
|
||||
}
|
||||
|
||||
public void testConverterConversionForwardIndex() {
|
||||
service.addConverter(new StringToInteger());
|
||||
ConversionExecutor executor = service.getConversionExecutor(String.class, Integer.class);
|
||||
ConversionExecutor executor = service.getConversionExecutor(type(String.class), type(Integer.class));
|
||||
Integer three = (Integer) executor.execute("3");
|
||||
assertEquals(3, three.intValue());
|
||||
}
|
||||
|
||||
public void testConverterConversionReverseIndex() {
|
||||
service.addConverter(new StringToInteger());
|
||||
ConversionExecutor executor = service.getConversionExecutor(Integer.class, String.class);
|
||||
ConversionExecutor executor = service.getConversionExecutor(type(Integer.class), type(String.class));
|
||||
String threeString = (String) executor.execute(new Integer(3));
|
||||
assertEquals("3", threeString);
|
||||
}
|
||||
|
||||
public void testConversionExecutorNotFound() {
|
||||
try {
|
||||
service.getConversionExecutor(String.class, Integer.class);
|
||||
service.getConversionExecutor(type(String.class), type(Integer.class));
|
||||
fail("Should have thrown an exception");
|
||||
} catch (ConversionExecutorNotFoundException e) {
|
||||
}
|
||||
}
|
||||
|
||||
public void testConversionCompatibleTypes() {
|
||||
ArrayList source = new ArrayList();
|
||||
assertSame(source, service.getConversionExecutor(ArrayList.class, List.class).execute(source));
|
||||
String source = "foo";
|
||||
assertSame(source, service.getConversionExecutor(type(String.class), type(String.class)).execute(source));
|
||||
}
|
||||
|
||||
public void testConversionExecutorNullArgument() {
|
||||
service.addConverter(new StringToInteger());
|
||||
ConversionExecutor executor = service.getConversionExecutor(String.class, Integer.class);
|
||||
ConversionExecutor executor = service.getConversionExecutor(type(String.class), type(Integer.class));
|
||||
assertNull(executor.execute(null));
|
||||
}
|
||||
|
||||
public void testConversionExecutorWrongTypeArgument() {
|
||||
service.addConverter(new StringToInteger());
|
||||
ConversionExecutor executor = service.getConversionExecutor(Integer.class, String.class);
|
||||
ConversionExecutor executor = service.getConversionExecutor(type(Integer.class), type(String.class));
|
||||
try {
|
||||
executor.execute("BOGUS");
|
||||
fail("Should have failed");
|
||||
@@ -96,7 +106,7 @@ public class GenericConversionServiceTests extends TestCase {
|
||||
return target.toString();
|
||||
}
|
||||
});
|
||||
ConversionExecutor executor = service.getConversionExecutor(String.class, Integer.class);
|
||||
ConversionExecutor executor = service.getConversionExecutor(type(String.class), type(Integer.class));
|
||||
Integer result = (Integer) executor.execute("3");
|
||||
assertEquals(new Integer(3), result);
|
||||
}
|
||||
@@ -112,7 +122,7 @@ public class GenericConversionServiceTests extends TestCase {
|
||||
}
|
||||
});
|
||||
try {
|
||||
ConversionExecutor executor = service.getConversionExecutor(String.class, Integer.class);
|
||||
ConversionExecutor executor = service.getConversionExecutor(type(String.class), type(Integer.class));
|
||||
fail("Should have failed");
|
||||
} catch (ConversionExecutorNotFoundException e) {
|
||||
|
||||
@@ -121,14 +131,14 @@ public class GenericConversionServiceTests extends TestCase {
|
||||
|
||||
public void testConversionObjectToPrimitive() {
|
||||
service.addConverter(new StringToInteger());
|
||||
ConversionExecutor executor = service.getConversionExecutor(String.class, int.class);
|
||||
ConversionExecutor executor = service.getConversionExecutor(type(String.class), type(int.class));
|
||||
Integer three = (Integer) executor.execute("3");
|
||||
assertEquals(3, three.intValue());
|
||||
}
|
||||
|
||||
public void testConversionArrayToArray() {
|
||||
service.addConverter(new StringToInteger());
|
||||
ConversionExecutor executor = service.getConversionExecutor(String[].class, Integer[].class);
|
||||
ConversionExecutor executor = service.getConversionExecutor(type(String[].class), type(Integer[].class));
|
||||
Integer[] result = (Integer[]) executor.execute(new String[] { "1", "2", "3" });
|
||||
assertEquals(new Integer(1), result[0]);
|
||||
assertEquals(new Integer(2), result[1]);
|
||||
@@ -137,7 +147,7 @@ public class GenericConversionServiceTests extends TestCase {
|
||||
|
||||
public void testConversionArrayToPrimitiveArray() {
|
||||
service.addConverter(new StringToInteger());
|
||||
ConversionExecutor executor = service.getConversionExecutor(String[].class, int[].class);
|
||||
ConversionExecutor executor = service.getConversionExecutor(type(String[].class), type(int[].class));
|
||||
int[] result = (int[]) executor.execute(new String[] { "1", "2", "3" });
|
||||
assertEquals(1, result[0]);
|
||||
assertEquals(2, result[1]);
|
||||
@@ -145,15 +155,23 @@ public class GenericConversionServiceTests extends TestCase {
|
||||
}
|
||||
|
||||
public void testConversionArrayToListInterface() {
|
||||
ConversionExecutor executor = service.getConversionExecutor(String[].class, List.class);
|
||||
ConversionExecutor executor = service.getConversionExecutor(type(String[].class), type(List.class));
|
||||
List result = (List) executor.execute(new String[] { "1", "2", "3" });
|
||||
assertEquals("1", result.get(0));
|
||||
assertEquals("2", result.get(1));
|
||||
assertEquals("3", result.get(2));
|
||||
}
|
||||
|
||||
public void testConversionArrayToListGenericTypeConversion() {
|
||||
ConversionExecutor executor = service.getConversionExecutor(type(String[].class), type(List.class));
|
||||
List result = (List) executor.execute(new String[] { "1", "2", "3" });
|
||||
assertEquals(new Integer("1"), result.get(0));
|
||||
assertEquals(new Integer("2"), result.get(1));
|
||||
assertEquals(new Integer("3"), result.get(2));
|
||||
}
|
||||
|
||||
public void testConversionArrayToListImpl() {
|
||||
ConversionExecutor executor = service.getConversionExecutor(String[].class, LinkedList.class);
|
||||
ConversionExecutor executor = service.getConversionExecutor(type(String[].class), type(LinkedList.class));
|
||||
LinkedList result = (LinkedList) executor.execute(new String[] { "1", "2", "3" });
|
||||
assertEquals("1", result.get(0));
|
||||
assertEquals("2", result.get(1));
|
||||
@@ -162,14 +180,14 @@ public class GenericConversionServiceTests extends TestCase {
|
||||
|
||||
public void testConversionArrayToAbstractList() {
|
||||
try {
|
||||
service.getConversionExecutor(String[].class, AbstractList.class);
|
||||
service.getConversionExecutor(type(String[].class), type(AbstractList.class));
|
||||
} catch (IllegalArgumentException e) {
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
public void testConversionListToArray() {
|
||||
ConversionExecutor executor = service.getConversionExecutor(Collection.class, String[].class);
|
||||
ConversionExecutor executor = service.getConversionExecutor(type(Collection.class), type(String[].class));
|
||||
List list = new ArrayList();
|
||||
list.add("1");
|
||||
list.add("2");
|
||||
@@ -182,7 +200,7 @@ public class GenericConversionServiceTests extends TestCase {
|
||||
|
||||
public void testConversionListToArrayWithComponentConversion() {
|
||||
service.addConverter(new StringToInteger());
|
||||
ConversionExecutor executor = service.getConversionExecutor(Collection.class, Integer[].class);
|
||||
ConversionExecutor executor = service.getConversionExecutor(type(Collection.class), type(Integer[].class));
|
||||
List list = new ArrayList();
|
||||
list.add("1");
|
||||
list.add("2");
|
||||
@@ -194,7 +212,7 @@ public class GenericConversionServiceTests extends TestCase {
|
||||
}
|
||||
|
||||
public void testConversionObjectToArray() {
|
||||
ConversionExecutor executor = service.getConversionExecutor(String.class, String[].class);
|
||||
ConversionExecutor executor = service.getConversionExecutor(type(String.class), type(String[].class));
|
||||
String[] result = (String[]) executor.execute("1,2,3");
|
||||
assertEquals(1, result.length);
|
||||
assertEquals("1,2,3", result[0]);
|
||||
@@ -202,7 +220,7 @@ public class GenericConversionServiceTests extends TestCase {
|
||||
|
||||
public void testConversionObjectToArrayWithElementConversion() {
|
||||
service.addConverter(new StringToInteger());
|
||||
ConversionExecutor executor = service.getConversionExecutor(String.class, Integer[].class);
|
||||
ConversionExecutor executor = service.getConversionExecutor(type(String.class), type(Integer[].class));
|
||||
Integer[] result = (Integer[]) executor.execute("123");
|
||||
assertEquals(1, result.length);
|
||||
assertEquals(new Integer(123), result[0]);
|
||||
@@ -214,19 +232,19 @@ public class GenericConversionServiceTests extends TestCase {
|
||||
|
||||
public void testSuperConverterConversionForwardIndex() {
|
||||
service.addConverter(new StringToEnum());
|
||||
ConversionExecutor executor = service.getConversionExecutor(String.class, FooEnum.class);
|
||||
ConversionExecutor executor = service.getConversionExecutor(type(String.class), type(FooEnum.class));
|
||||
assertEquals(FooEnum.BAR, executor.execute("BAR"));
|
||||
}
|
||||
|
||||
public void testSuperTwoWayConverterConversionReverseIndex() {
|
||||
service.addConverter(new StringToEnum());
|
||||
ConversionExecutor executor = service.getConversionExecutor(FooEnum.class, String.class);
|
||||
ConversionExecutor executor = service.getConversionExecutor(type(FooEnum.class), type(String.class));
|
||||
assertEquals("BAR", executor.execute(FooEnum.BAR));
|
||||
}
|
||||
|
||||
public void testSuperConverterConversionNotConvertibleAbstractType() {
|
||||
service.addConverter(new StringToEnum());
|
||||
ConversionExecutor executor = service.getConversionExecutor(String.class, Enum.class);
|
||||
ConversionExecutor executor = service.getConversionExecutor(type(String.class), type(Enum.class));
|
||||
try {
|
||||
executor.execute("WHATEV");
|
||||
fail("Should have failed");
|
||||
@@ -258,7 +276,7 @@ public class GenericConversionServiceTests extends TestCase {
|
||||
return 0;
|
||||
}
|
||||
};
|
||||
ConversionExecutor executor = service.getConversionExecutor(Integer.class, customNumber.getClass());
|
||||
ConversionExecutor executor = service.getConversionExecutor(type(Integer.class), type(customNumber.getClass()));
|
||||
try {
|
||||
executor.execute(3);
|
||||
fail("Should have failed");
|
||||
@@ -286,13 +304,13 @@ public class GenericConversionServiceTests extends TestCase {
|
||||
|
||||
public void testCustomConverterConversionForwardIndex() {
|
||||
service.addConverter("princy", new CustomTwoWayConverter());
|
||||
ConversionExecutor executor = service.getConversionExecutor("princy", String.class, Principal.class);
|
||||
ConversionExecutor executor = service.getConversionExecutor("princy", type(String.class), type(Principal.class));
|
||||
assertEquals("keith", ((Principal) executor.execute("keith")).getName());
|
||||
}
|
||||
|
||||
public void testCustomConverterConversionReverseIndex() {
|
||||
service.addConverter("princy", new CustomTwoWayConverter());
|
||||
ConversionExecutor executor = service.getConversionExecutor("princy", Principal.class, String.class);
|
||||
ConversionExecutor executor = service.getConversionExecutor("princy", type(Principal.class), type(String.class));
|
||||
assertEquals("keith", executor.execute(new Principal() {
|
||||
public String getName() {
|
||||
return "keith";
|
||||
@@ -302,14 +320,14 @@ public class GenericConversionServiceTests extends TestCase {
|
||||
|
||||
public void testCustomConverterConversionForSameType() {
|
||||
service.addConverter("trimmer", new Trimmer());
|
||||
ConversionExecutor executor = service.getConversionExecutor("trimmer", String.class, String.class);
|
||||
ConversionExecutor executor = service.getConversionExecutor("trimmer", type(String.class), type(String.class));
|
||||
assertEquals("a string", executor.execute("a string "));
|
||||
}
|
||||
|
||||
public void testCustomConverterLookupNotCompatibleSource() {
|
||||
service.addConverter("trimmer", new Trimmer());
|
||||
try {
|
||||
service.getConversionExecutor("trimmer", Object.class, String.class);
|
||||
service.getConversionExecutor("trimmer", type(Object.class), type(String.class));
|
||||
fail("Should have failed");
|
||||
} catch (ConversionException e) {
|
||||
|
||||
@@ -319,7 +337,7 @@ public class GenericConversionServiceTests extends TestCase {
|
||||
public void testCustomConverterLookupNotCompatibleTarget() {
|
||||
service.addConverter("trimmer", new Trimmer());
|
||||
try {
|
||||
service.getConversionExecutor("trimmer", String.class, Object.class);
|
||||
service.getConversionExecutor("trimmer", type(String.class), type(Object.class));
|
||||
} catch (ConversionException e) {
|
||||
|
||||
}
|
||||
@@ -328,7 +346,7 @@ public class GenericConversionServiceTests extends TestCase {
|
||||
public void testCustomConverterLookupNotCompatibleTargetReverse() {
|
||||
service.addConverter("princy", new CustomTwoWayConverter());
|
||||
try {
|
||||
service.getConversionExecutor("princy", Principal.class, Integer.class);
|
||||
service.getConversionExecutor("princy", type(Principal.class), type(Integer.class));
|
||||
} catch (ConversionException e) {
|
||||
|
||||
}
|
||||
@@ -336,7 +354,7 @@ public class GenericConversionServiceTests extends TestCase {
|
||||
|
||||
public void testCustomConverterConversionArrayToArray() {
|
||||
service.addConverter("princy", new CustomTwoWayConverter());
|
||||
ConversionExecutor executor = service.getConversionExecutor("princy", String[].class, Principal[].class);
|
||||
ConversionExecutor executor = service.getConversionExecutor("princy", type(String[].class), type(Principal[].class));
|
||||
Principal[] p = (Principal[]) executor.execute(new String[] { "princy1", "princy2" });
|
||||
assertEquals("princy1", p[0].getName());
|
||||
assertEquals("princy2", p[1].getName());
|
||||
@@ -344,7 +362,7 @@ public class GenericConversionServiceTests extends TestCase {
|
||||
|
||||
public void testCustomConverterConversionArrayToArrayReverse() {
|
||||
service.addConverter("princy", new CustomTwoWayConverter());
|
||||
ConversionExecutor executor = service.getConversionExecutor("princy", Principal[].class, String[].class);
|
||||
ConversionExecutor executor = service.getConversionExecutor("princy", type(Principal[].class), type(String[].class));
|
||||
final Principal princy1 = new Principal() {
|
||||
public String getName() {
|
||||
return "princy1";
|
||||
@@ -363,7 +381,7 @@ public class GenericConversionServiceTests extends TestCase {
|
||||
public void testCustomConverterLookupArrayToArrayBogusSource() {
|
||||
service.addConverter("princy", new CustomTwoWayConverter());
|
||||
try {
|
||||
service.getConversionExecutor("princy", Integer[].class, Principal[].class);
|
||||
service.getConversionExecutor("princy", type(Integer[].class), type(Principal[].class));
|
||||
fail("Should have failed");
|
||||
} catch (ConversionExecutorNotFoundException e) {
|
||||
}
|
||||
@@ -372,7 +390,7 @@ public class GenericConversionServiceTests extends TestCase {
|
||||
public void testCustomConverterLookupArrayToArrayBogusTarget() {
|
||||
service.addConverter("princy", new CustomTwoWayConverter());
|
||||
try {
|
||||
service.getConversionExecutor("princy", Principal[].class, Integer[].class);
|
||||
service.getConversionExecutor("princy", type(Principal[].class), type(Integer[].class));
|
||||
} catch (ConversionExecutorNotFoundException e) {
|
||||
|
||||
}
|
||||
@@ -380,7 +398,7 @@ public class GenericConversionServiceTests extends TestCase {
|
||||
|
||||
public void testCustomConverterConversionArrayToCollection() {
|
||||
service.addConverter("princy", new CustomTwoWayConverter());
|
||||
ConversionExecutor executor = service.getConversionExecutor("princy", String[].class, List.class);
|
||||
ConversionExecutor executor = service.getConversionExecutor("princy", type(String[].class), type(List.class));
|
||||
List list = (List) executor.execute(new String[] { "princy1", "princy2" });
|
||||
assertEquals("princy1", ((Principal) list.get(0)).getName());
|
||||
assertEquals("princy2", ((Principal) list.get(1)).getName());
|
||||
@@ -388,7 +406,7 @@ public class GenericConversionServiceTests extends TestCase {
|
||||
|
||||
public void testCustomConverterConversionArrayToCollectionReverse() {
|
||||
service.addConverter("princy", new CustomTwoWayConverter());
|
||||
ConversionExecutor executor = service.getConversionExecutor("princy", Principal[].class, List.class);
|
||||
ConversionExecutor executor = service.getConversionExecutor("princy", type(Principal[].class), type(List.class));
|
||||
final Principal princy1 = new Principal() {
|
||||
public String getName() {
|
||||
return "princy1";
|
||||
@@ -407,7 +425,7 @@ public class GenericConversionServiceTests extends TestCase {
|
||||
public void testCustomConverterLookupArrayToCollectionBogusSource() {
|
||||
service.addConverter("princy", new CustomTwoWayConverter());
|
||||
try {
|
||||
service.getConversionExecutor("princy", Integer[].class, List.class);
|
||||
service.getConversionExecutor("princy", type(Integer[].class), type(List.class));
|
||||
fail("Should have failed");
|
||||
} catch (ConversionExecutorNotFoundException e) {
|
||||
|
||||
@@ -416,7 +434,7 @@ public class GenericConversionServiceTests extends TestCase {
|
||||
|
||||
public void testCustomConverterLookupCollectionToArray() {
|
||||
service.addConverter("princy", new CustomTwoWayConverter());
|
||||
ConversionExecutor executor = service.getConversionExecutor("princy", List.class, Principal[].class);
|
||||
ConversionExecutor executor = service.getConversionExecutor("princy", type(List.class), type(Principal[].class));
|
||||
List princyList = new ArrayList();
|
||||
princyList.add("princy1");
|
||||
princyList.add("princy2");
|
||||
@@ -427,7 +445,7 @@ public class GenericConversionServiceTests extends TestCase {
|
||||
|
||||
public void testCustomConverterLookupCollectionToArrayReverse() {
|
||||
service.addConverter("princy", new CustomTwoWayConverter());
|
||||
ConversionExecutor executor = service.getConversionExecutor("princy", List.class, String[].class);
|
||||
ConversionExecutor executor = service.getConversionExecutor("princy", type(List.class), type(String[].class));
|
||||
final Principal princy1 = new Principal() {
|
||||
public String getName() {
|
||||
return "princy1";
|
||||
@@ -449,7 +467,7 @@ public class GenericConversionServiceTests extends TestCase {
|
||||
public void testtestCustomConverterLookupCollectionToArrayBogusTarget() {
|
||||
service.addConverter("princy", new CustomTwoWayConverter());
|
||||
try {
|
||||
service.getConversionExecutor("princy", List.class, Integer[].class);
|
||||
service.getConversionExecutor("princy", type(List.class), type(Integer[].class));
|
||||
fail("Should have failed");
|
||||
} catch (ConversionExecutorNotFoundException e) {
|
||||
|
||||
@@ -458,14 +476,14 @@ public class GenericConversionServiceTests extends TestCase {
|
||||
|
||||
public void testCustomConverterConversionObjectToArray() {
|
||||
service.addConverter("princy", new CustomTwoWayConverter());
|
||||
ConversionExecutor executor = service.getConversionExecutor("princy", String.class, Principal[].class);
|
||||
ConversionExecutor executor = service.getConversionExecutor("princy", type(String.class), type(Principal[].class));
|
||||
Principal[] p = (Principal[]) executor.execute("princy1");
|
||||
assertEquals("princy1", p[0].getName());
|
||||
}
|
||||
|
||||
public void testCustomConverterConversionObjectToArrayReverse() {
|
||||
service.addConverter("princy", new CustomTwoWayConverter());
|
||||
ConversionExecutor executor = service.getConversionExecutor("princy", Principal.class, String[].class);
|
||||
ConversionExecutor executor = service.getConversionExecutor("princy", type(Principal.class), type(String[].class));
|
||||
final Principal princy1 = new Principal() {
|
||||
public String getName() {
|
||||
return "princy1";
|
||||
@@ -478,7 +496,7 @@ public class GenericConversionServiceTests extends TestCase {
|
||||
public void testCustomConverterLookupObjectToArrayBogusSource() {
|
||||
service.addConverter("princy", new CustomTwoWayConverter());
|
||||
try {
|
||||
service.getConversionExecutor("princy", Integer.class, Principal[].class);
|
||||
service.getConversionExecutor("princy", type(Integer.class), type(Principal[].class));
|
||||
fail("Should have failed");
|
||||
} catch (ConversionExecutorNotFoundException e) {
|
||||
|
||||
|
||||
Reference in New Issue
Block a user