added TypeDescriptor resolveCollectionElement and Map key/value types

This commit is contained in:
Keith Donald
2011-06-04 05:38:51 +00:00
parent 9c3c1c64b3
commit 5db1687d29
14 changed files with 269 additions and 146 deletions

View File

@@ -37,6 +37,7 @@ import java.util.Map;
import org.junit.Ignore;
import org.junit.Test;
import org.springframework.core.GenericCollectionTypeResolver;
import org.springframework.core.MethodParameter;
/**
@@ -61,6 +62,18 @@ public class TypeDescriptorTests {
public Map<String, List<Integer>> nestedMapField = new HashMap<String, List<Integer>>();
@Test
public void nullTypeDescriptor() {
TypeDescriptor desc = TypeDescriptor.NULL;
assertEquals(false, desc.isMap());
assertEquals(false, desc.isCollection());
assertEquals(false, desc.isArray());
assertEquals(null, desc.getType());
assertEquals(null, desc.getObjectType());
assertEquals(null, desc.getName());
assertEquals(0, desc.getAnnotations().length);
}
@Test
public void parameterPrimitive() throws Exception {
TypeDescriptor desc = new TypeDescriptor(new MethodParameter(getClass().getMethod("testParameterPrimitive", int.class), 0));
@@ -70,14 +83,8 @@ public class TypeDescriptorTests {
assertEquals("int", desc.toString());
assertTrue(desc.isPrimitive());
assertEquals(0, desc.getAnnotations().length);
assertTrue(!desc.isCollection());
assertNull(desc.getElementType());
assertEquals(TypeDescriptor.NULL, desc.getElementTypeDescriptor());
assertTrue(!desc.isMap());
assertNull(desc.getMapKeyType());
assertEquals(TypeDescriptor.NULL, desc.getMapKeyTypeDescriptor());
assertNull(desc.getMapValueType());
assertEquals(TypeDescriptor.NULL, desc.getMapValueTypeDescriptor());
assertFalse(desc.isCollection());
assertFalse(desc.isMap());
}
public void testParameterPrimitive(int primitive) {
@@ -95,13 +102,7 @@ public class TypeDescriptorTests {
assertEquals(0, desc.getAnnotations().length);
assertFalse(desc.isCollection());
assertFalse(desc.isArray());
assertNull(desc.getElementType());
assertEquals(TypeDescriptor.NULL, desc.getElementTypeDescriptor());
assertFalse(desc.isMap());
assertNull(desc.getMapKeyType());
assertEquals(TypeDescriptor.NULL, desc.getMapKeyTypeDescriptor());
assertNull(desc.getMapValueType());
assertEquals(TypeDescriptor.NULL, desc.getMapValueTypeDescriptor());
}
public void testParameterScalar(String value) {
@@ -127,10 +128,6 @@ public class TypeDescriptorTests {
assertEquals(Integer.class, desc.getElementTypeDescriptor().getElementTypeDescriptor().getMapKeyTypeDescriptor().getType());
assertEquals(Enum.class, desc.getElementTypeDescriptor().getElementTypeDescriptor().getMapValueTypeDescriptor().getType());
assertFalse(desc.isMap());
assertNull(desc.getMapKeyType());
assertEquals(TypeDescriptor.NULL, desc.getMapKeyTypeDescriptor());
assertNull(desc.getMapValueType());
assertEquals(TypeDescriptor.NULL, desc.getMapValueTypeDescriptor());
}
public void testParameterList(List<List<Map<Integer, Enum<?>>>> list) {
@@ -152,10 +149,6 @@ public class TypeDescriptorTests {
assertEquals(Object.class, desc.getElementType());
assertEquals(TypeDescriptor.valueOf(Object.class), desc.getElementTypeDescriptor());
assertFalse(desc.isMap());
assertNull(desc.getMapKeyType());
assertEquals(TypeDescriptor.NULL, desc.getMapKeyTypeDescriptor());
assertNull(desc.getMapValueType());
assertEquals(TypeDescriptor.NULL, desc.getMapValueTypeDescriptor());
}
public void testParameterListNoParamTypes(List list) {
@@ -176,11 +169,7 @@ public class TypeDescriptorTests {
assertTrue(desc.isArray());
assertEquals(Integer.class, desc.getElementType());
assertEquals(TypeDescriptor.valueOf(Integer.class), desc.getElementTypeDescriptor());
assertTrue(!desc.isMap());
assertNull(desc.getMapKeyType());
assertEquals(TypeDescriptor.NULL, desc.getMapKeyTypeDescriptor());
assertNull(desc.getMapValueType());
assertEquals(TypeDescriptor.NULL, desc.getMapValueTypeDescriptor());
assertFalse(desc.isMap());
}
public void testParameterArray(Integer[] array) {
@@ -199,8 +188,6 @@ public class TypeDescriptorTests {
assertEquals(0, desc.getAnnotations().length);
assertFalse(desc.isCollection());
assertFalse(desc.isArray());
assertNull(desc.getElementType());
assertEquals(TypeDescriptor.NULL, desc.getElementTypeDescriptor());
assertTrue(desc.isMap());
assertEquals(TypeDescriptor.nested(methodParameter, 1), desc.getMapValueTypeDescriptor());
assertEquals(TypeDescriptor.nested(methodParameter, 2), desc.getMapValueTypeDescriptor().getElementTypeDescriptor());
@@ -383,12 +370,6 @@ public class TypeDescriptorTests {
assertFalse(typeDescriptor.isMap());
assertEquals(Integer.class, typeDescriptor.getType());
assertEquals(Integer.class, typeDescriptor.getObjectType());
assertNull(typeDescriptor.getElementType());
assertEquals(TypeDescriptor.NULL, typeDescriptor.getElementTypeDescriptor());
assertNull(typeDescriptor.getMapKeyType());
assertEquals(TypeDescriptor.NULL, typeDescriptor.getMapKeyTypeDescriptor());
assertNull(typeDescriptor.getMapValueType());
assertEquals(TypeDescriptor.NULL, typeDescriptor.getMapValueTypeDescriptor());
}
public Integer fieldScalar;
@@ -488,12 +469,6 @@ public class TypeDescriptorTests {
assertFalse(typeDescriptor.isMap());
assertEquals(Integer.class, typeDescriptor.getType());
assertEquals(Integer.class, typeDescriptor.getObjectType());
assertNull(typeDescriptor.getElementType());
assertEquals(TypeDescriptor.NULL, typeDescriptor.getElementTypeDescriptor());
assertNull(typeDescriptor.getMapKeyType());
assertEquals(TypeDescriptor.NULL, typeDescriptor.getMapKeyTypeDescriptor());
assertNull(typeDescriptor.getMapValueType());
assertEquals(TypeDescriptor.NULL, typeDescriptor.getMapValueTypeDescriptor());
}
@Test
@@ -505,12 +480,6 @@ public class TypeDescriptorTests {
assertFalse(typeDescriptor.isMap());
assertEquals(Integer.TYPE, typeDescriptor.getType());
assertEquals(Integer.class, typeDescriptor.getObjectType());
assertNull(typeDescriptor.getElementType());
assertEquals(TypeDescriptor.NULL, typeDescriptor.getElementTypeDescriptor());
assertNull(typeDescriptor.getMapKeyType());
assertEquals(TypeDescriptor.NULL, typeDescriptor.getMapKeyTypeDescriptor());
assertNull(typeDescriptor.getMapValueType());
assertEquals(TypeDescriptor.NULL, typeDescriptor.getMapValueTypeDescriptor());
}
@Test
@@ -520,10 +489,6 @@ public class TypeDescriptorTests {
assertFalse(typeDescriptor.isCollection());
assertFalse(typeDescriptor.isMap());
assertEquals(Integer.TYPE, typeDescriptor.getElementType());
assertNull(typeDescriptor.getMapKeyType());
assertEquals(TypeDescriptor.NULL, typeDescriptor.getMapKeyTypeDescriptor());
assertNull(typeDescriptor.getMapValueType());
assertEquals(TypeDescriptor.NULL, typeDescriptor.getMapValueTypeDescriptor());
}
@Test
@@ -533,10 +498,6 @@ public class TypeDescriptorTests {
assertFalse(typeDescriptor.isArray());
assertFalse(typeDescriptor.isMap());
assertEquals(Object.class, typeDescriptor.getElementType());
assertNull(typeDescriptor.getMapKeyType());
assertEquals(TypeDescriptor.NULL, typeDescriptor.getMapKeyTypeDescriptor());
assertNull(typeDescriptor.getMapValueType());
assertEquals(TypeDescriptor.NULL, typeDescriptor.getMapValueTypeDescriptor());
}
@Test
@@ -734,10 +695,6 @@ public class TypeDescriptorTests {
assertEquals(Integer.class, desc.getElementType());
assertEquals(TypeDescriptor.valueOf(Integer.class), desc.getElementTypeDescriptor());
assertFalse(desc.isMap());
assertNull(desc.getMapKeyType());
assertEquals(TypeDescriptor.NULL, desc.getMapKeyTypeDescriptor());
assertNull(desc.getMapValueType());
assertEquals(TypeDescriptor.NULL, desc.getMapValueTypeDescriptor());
}
@Test
@@ -754,10 +711,6 @@ public class TypeDescriptorTests {
assertEquals(List.class, desc.getElementType());
assertEquals(TypeDescriptor.valueOf(Integer.class), desc.getElementTypeDescriptor().getElementTypeDescriptor());
assertFalse(desc.isMap());
assertNull(desc.getMapKeyType());
assertEquals(TypeDescriptor.NULL, desc.getMapKeyTypeDescriptor());
assertNull(desc.getMapValueType());
assertEquals(TypeDescriptor.NULL, desc.getMapValueTypeDescriptor());
}
@Test
@@ -771,8 +724,6 @@ public class TypeDescriptorTests {
assertEquals(0, desc.getAnnotations().length);
assertFalse(desc.isCollection());
assertFalse(desc.isArray());
assertNull(desc.getElementType());
assertEquals(TypeDescriptor.NULL, desc.getElementTypeDescriptor());
assertTrue(desc.isMap());
assertEquals(String.class, desc.getMapKeyTypeDescriptor().getType());
assertEquals(Integer.class, desc.getMapValueTypeDescriptor().getType());
@@ -790,8 +741,6 @@ public class TypeDescriptorTests {
assertEquals(0, desc.getAnnotations().length);
assertFalse(desc.isCollection());
assertFalse(desc.isArray());
assertNull(desc.getElementType());
assertEquals(TypeDescriptor.NULL, desc.getElementTypeDescriptor());
assertTrue(desc.isMap());
assertEquals(String.class, desc.getMapKeyTypeDescriptor().getType());
assertEquals(String.class, desc.getMapValueTypeDescriptor().getMapKeyTypeDescriptor().getType());

View File

@@ -168,7 +168,18 @@ public class CollectionToCollectionConverterTests {
TypeDescriptor sourceType = TypeDescriptor.forObject(resources);
assertEquals(resources, conversionService.convert(resources, sourceType, new TypeDescriptor(getClass().getField("resources"))));
}
@Test(expected=ConverterNotFoundException.class)
public void allNullsNotConvertible() throws Exception {
List<Resource> resources = new ArrayList<Resource>();
resources.add(null);
resources.add(null);
TypeDescriptor sourceType = new TypeDescriptor(getClass().getField("allNullsNotConvertible"));
assertEquals(resources, conversionService.convert(resources, sourceType, new TypeDescriptor(getClass().getField("resources"))));
}
public List<String> allNullsNotConvertible;
@Test(expected=ConverterNotFoundException.class)
public void nothingInCommon() throws Exception {
List<Object> resources = new ArrayList<Object>();

View File

@@ -68,7 +68,12 @@ public class GenericConversionServiceTests {
@Test(expected=ConversionFailedException.class)
public void convertNullSourcePrimitiveTargetTypeDescriptor() {
assertEquals(null, conversionService.convert(null, TypeDescriptor.valueOf(String.class), TypeDescriptor.valueOf(int.class)));
conversionService.convert(null, TypeDescriptor.valueOf(String.class), TypeDescriptor.valueOf(int.class));
}
@Test(expected=IllegalArgumentException.class)
public void convertNotNullSourceNullSourceTypeDescriptor() {
conversionService.convert("3", TypeDescriptor.NULL, TypeDescriptor.valueOf(int.class));
}
@Test
@@ -129,6 +134,11 @@ public class GenericConversionServiceTests {
assertNull(conversionService.convert("3", TypeDescriptor.valueOf(String.class), TypeDescriptor.NULL));
}
@Test(expected=IllegalArgumentException.class)
public void convertWrongSourceTypeDescriptor() {
conversionService.convert("3", TypeDescriptor.valueOf(Integer.class), TypeDescriptor.valueOf(Long.class));
}
@Test
public void convertWrongTypeArgument() {
conversionService.addConverterFactory(new StringToNumberConverterFactory());