Beefed up test suite
This commit is contained in:
parent
e9416db472
commit
c693f216f1
|
|
@ -37,7 +37,7 @@ final class ArrayToArrayGenericConverter implements GenericConverter {
|
||||||
Object target = Array.newInstance(targetElementType.getType(), Array.getLength(source));
|
Object target = Array.newInstance(targetElementType.getType(), Array.getLength(source));
|
||||||
GenericConverter converter = this.conversionService.getConverter(sourceElementType, targetElementType);
|
GenericConverter converter = this.conversionService.getConverter(sourceElementType, targetElementType);
|
||||||
if (converter == null) {
|
if (converter == null) {
|
||||||
throw new ConverterNotFoundException(sourceType, targetType);
|
throw new ConverterNotFoundException(sourceElementType, targetElementType);
|
||||||
}
|
}
|
||||||
for (int i = 0; i < Array.getLength(target); i++) {
|
for (int i = 0; i < Array.getLength(target); i++) {
|
||||||
Array.set(target, i, converter.convert(Array.get(source, i), sourceElementType, targetElementType));
|
Array.set(target, i, converter.convert(Array.get(source, i), sourceElementType, targetElementType));
|
||||||
|
|
|
||||||
|
|
@ -42,7 +42,7 @@ final class ArrayToCollectionGenericConverter implements GenericConverter {
|
||||||
} else {
|
} else {
|
||||||
GenericConverter converter = this.conversionService.getConverter(sourceElementType, targetElementType);
|
GenericConverter converter = this.conversionService.getConverter(sourceElementType, targetElementType);
|
||||||
if (converter == null) {
|
if (converter == null) {
|
||||||
throw new ConverterNotFoundException(sourceType, targetType);
|
throw new ConverterNotFoundException(sourceElementType, targetElementType);
|
||||||
}
|
}
|
||||||
for (int i = 0; i < length; i++) {
|
for (int i = 0; i < length; i++) {
|
||||||
collection.add(converter.convert(Array.get(source, i), sourceElementType, targetElementType));
|
collection.add(converter.convert(Array.get(source, i), sourceElementType, targetElementType));
|
||||||
|
|
|
||||||
|
|
@ -39,7 +39,7 @@ final class ArrayToObjectGenericConverter implements GenericConverter {
|
||||||
} else {
|
} else {
|
||||||
GenericConverter converter = this.conversionService.getConverter(sourceElementType, targetType);
|
GenericConverter converter = this.conversionService.getConverter(sourceElementType, targetType);
|
||||||
if (converter == null) {
|
if (converter == null) {
|
||||||
throw new ConverterNotFoundException(sourceType, targetType);
|
throw new ConverterNotFoundException(sourceElementType, targetType);
|
||||||
}
|
}
|
||||||
return converter.convert(Array.get(source, 0), sourceElementType, targetType);
|
return converter.convert(Array.get(source, 0), sourceElementType, targetType);
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -46,7 +46,7 @@ final class CollectionToArrayGenericConverter implements GenericConverter {
|
||||||
} else {
|
} else {
|
||||||
GenericConverter converter = this.conversionService.getConverter(sourceElementType, targetElementType);
|
GenericConverter converter = this.conversionService.getConverter(sourceElementType, targetElementType);
|
||||||
if (converter == null) {
|
if (converter == null) {
|
||||||
throw new ConverterNotFoundException(sourceType, targetType);
|
throw new ConverterNotFoundException(sourceElementType, targetElementType);
|
||||||
}
|
}
|
||||||
for (Iterator it = sourceCollection.iterator(); it.hasNext(); i++) {
|
for (Iterator it = sourceCollection.iterator(); it.hasNext(); i++) {
|
||||||
Array.set(array, i, converter.convert(it.next(), sourceElementType, targetElementType));
|
Array.set(array, i, converter.convert(it.next(), sourceElementType, targetElementType));
|
||||||
|
|
|
||||||
|
|
@ -28,7 +28,7 @@ final class CollectionToCollectionGenericConverter implements GenericConverter {
|
||||||
public CollectionToCollectionGenericConverter(GenericConversionService conversionService) {
|
public CollectionToCollectionGenericConverter(GenericConversionService conversionService) {
|
||||||
this.conversionService = conversionService;
|
this.conversionService = conversionService;
|
||||||
}
|
}
|
||||||
|
|
||||||
public Object convert(Object source, TypeDescriptor sourceType, TypeDescriptor targetType) {
|
public Object convert(Object source, TypeDescriptor sourceType, TypeDescriptor targetType) {
|
||||||
Collection sourceCollection = (Collection) source;
|
Collection sourceCollection = (Collection) source;
|
||||||
TypeDescriptor sourceElementType = sourceType.getElementTypeDescriptor();
|
TypeDescriptor sourceElementType = sourceType.getElementTypeDescriptor();
|
||||||
|
|
@ -40,7 +40,8 @@ final class CollectionToCollectionGenericConverter implements GenericConverter {
|
||||||
if (sourceType.isAssignableTo(targetType)) {
|
if (sourceType.isAssignableTo(targetType)) {
|
||||||
return sourceCollection;
|
return sourceCollection;
|
||||||
} else {
|
} else {
|
||||||
Collection targetCollection = CollectionFactory.createCollection(targetType.getType(), sourceCollection.size());
|
Collection targetCollection = CollectionFactory.createCollection(targetType.getType(), sourceCollection
|
||||||
|
.size());
|
||||||
targetCollection.addAll(sourceCollection);
|
targetCollection.addAll(sourceCollection);
|
||||||
return targetCollection;
|
return targetCollection;
|
||||||
}
|
}
|
||||||
|
|
@ -48,14 +49,14 @@ final class CollectionToCollectionGenericConverter implements GenericConverter {
|
||||||
Collection targetCollection = CollectionFactory.createCollection(targetType.getType(), sourceCollection.size());
|
Collection targetCollection = CollectionFactory.createCollection(targetType.getType(), sourceCollection.size());
|
||||||
GenericConverter converter = this.conversionService.getConverter(sourceElementType, targetElementType);
|
GenericConverter converter = this.conversionService.getConverter(sourceElementType, targetElementType);
|
||||||
if (converter == null) {
|
if (converter == null) {
|
||||||
throw new ConverterNotFoundException(sourceType, targetType);
|
throw new ConverterNotFoundException(sourceElementType, targetElementType);
|
||||||
}
|
}
|
||||||
for (Object element : sourceCollection) {
|
for (Object element : sourceCollection) {
|
||||||
targetCollection.add(converter.convert(element, sourceElementType, targetElementType));
|
targetCollection.add(converter.convert(element, sourceElementType, targetElementType));
|
||||||
}
|
}
|
||||||
return targetCollection;
|
return targetCollection;
|
||||||
}
|
}
|
||||||
|
|
||||||
private TypeDescriptor getElementType(Collection collection) {
|
private TypeDescriptor getElementType(Collection collection) {
|
||||||
for (Object element : collection) {
|
for (Object element : collection) {
|
||||||
if (element != null) {
|
if (element != null) {
|
||||||
|
|
|
||||||
|
|
@ -33,15 +33,19 @@ final class CollectionToObjectGenericConverter implements GenericConverter {
|
||||||
if (sourceCollection.size() == 0) {
|
if (sourceCollection.size() == 0) {
|
||||||
return null;
|
return null;
|
||||||
} else {
|
} else {
|
||||||
|
Object firstElement = sourceCollection.iterator().next();
|
||||||
TypeDescriptor sourceElementType = sourceType.getElementTypeDescriptor();
|
TypeDescriptor sourceElementType = sourceType.getElementTypeDescriptor();
|
||||||
|
if (sourceElementType == TypeDescriptor.NULL && firstElement != null) {
|
||||||
|
sourceElementType = TypeDescriptor.valueOf(firstElement.getClass());
|
||||||
|
}
|
||||||
if (sourceElementType == TypeDescriptor.NULL || sourceElementType.isAssignableTo(targetType)) {
|
if (sourceElementType == TypeDescriptor.NULL || sourceElementType.isAssignableTo(targetType)) {
|
||||||
return sourceCollection.iterator().next();
|
return firstElement;
|
||||||
} else {
|
} else {
|
||||||
GenericConverter converter = this.conversionService.getConverter(sourceElementType, targetType);
|
GenericConverter converter = this.conversionService.getConverter(sourceElementType, targetType);
|
||||||
if (converter == null) {
|
if (converter == null) {
|
||||||
throw new ConverterNotFoundException(sourceType, targetType);
|
throw new ConverterNotFoundException(sourceElementType, targetType);
|
||||||
}
|
}
|
||||||
return converter.convert(sourceCollection.iterator().next(), sourceElementType, targetType);
|
return converter.convert(firstElement, sourceElementType, targetType);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -36,7 +36,7 @@ final class ObjectToArrayGenericConverter implements GenericConverter {
|
||||||
} else {
|
} else {
|
||||||
GenericConverter converter = this.conversionService.getConverter(sourceType, targetElementType);
|
GenericConverter converter = this.conversionService.getConverter(sourceType, targetElementType);
|
||||||
if (converter == null) {
|
if (converter == null) {
|
||||||
throw new ConverterNotFoundException(sourceType, targetType);
|
throw new ConverterNotFoundException(sourceType, targetElementType);
|
||||||
}
|
}
|
||||||
Array.set(target, 0, converter.convert(source, sourceType, targetElementType));
|
Array.set(target, 0, converter.convert(source, sourceType, targetElementType));
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -37,7 +37,7 @@ final class ObjectToCollectionGenericConverter implements GenericConverter {
|
||||||
} else {
|
} else {
|
||||||
GenericConverter converter = this.conversionService.getConverter(sourceType, targetElementType);
|
GenericConverter converter = this.conversionService.getConverter(sourceType, targetElementType);
|
||||||
if (converter == null) {
|
if (converter == null) {
|
||||||
throw new ConverterNotFoundException(sourceType, targetType);
|
throw new ConverterNotFoundException(sourceType, targetElementType);
|
||||||
}
|
}
|
||||||
target.add(converter.convert(source, sourceType, targetElementType));
|
target.add(converter.convert(source, sourceType, targetElementType));
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -24,6 +24,7 @@ import static org.junit.Assert.assertTrue;
|
||||||
|
|
||||||
import java.util.AbstractList;
|
import java.util.AbstractList;
|
||||||
import java.util.ArrayList;
|
import java.util.ArrayList;
|
||||||
|
import java.util.Collections;
|
||||||
import java.util.HashMap;
|
import java.util.HashMap;
|
||||||
import java.util.LinkedHashSet;
|
import java.util.LinkedHashSet;
|
||||||
import java.util.LinkedList;
|
import java.util.LinkedList;
|
||||||
|
|
@ -145,7 +146,7 @@ public class GenericConversionServiceTests {
|
||||||
assertEquals(2, result[1]);
|
assertEquals(2, result[1]);
|
||||||
assertEquals(3, result[2]);
|
assertEquals(3, result[2]);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
public void convertArrayToArrayAssignable() {
|
public void convertArrayToArrayAssignable() {
|
||||||
int[] result = converter.convert(new int[] { 1, 2, 3 }, int[].class);
|
int[] result = converter.convert(new int[] { 1, 2, 3 }, int[].class);
|
||||||
|
|
@ -182,7 +183,7 @@ public class GenericConversionServiceTests {
|
||||||
assertEquals("3", result.get(2));
|
assertEquals("3", result.get(2));
|
||||||
}
|
}
|
||||||
|
|
||||||
@Test(expected=ConversionFailedException.class)
|
@Test(expected = ConversionFailedException.class)
|
||||||
public void convertArrayToAbstractList() {
|
public void convertArrayToAbstractList() {
|
||||||
converter.convert(new String[] { "1", "2", "3" }, AbstractList.class);
|
converter.convert(new String[] { "1", "2", "3" }, AbstractList.class);
|
||||||
}
|
}
|
||||||
|
|
@ -241,6 +242,37 @@ public class GenericConversionServiceTests {
|
||||||
assertEquals(map.get(2), FooEnum.BAZ);
|
assertEquals(map.get(2), FooEnum.BAZ);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
public void convertObjectToCollection() {
|
||||||
|
List<String> result = (List<String>) converter.convert("test", List.class);
|
||||||
|
assertEquals(1, result.size());
|
||||||
|
assertEquals("test", result.get(0));
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
public void convertObjectToCollectionWithElementConversion() throws Exception {
|
||||||
|
converter.addConverterFactory(new StringToNumberConverterFactory());
|
||||||
|
List<Integer> result = (List<Integer>) converter.convert("3", TypeDescriptor.valueOf(String.class),
|
||||||
|
new TypeDescriptor(getClass().getField("genericList")));
|
||||||
|
assertEquals(1, result.size());
|
||||||
|
assertEquals(new Integer(3), result.get(0));
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
public void convertCollectionToObject() {
|
||||||
|
List<String> list = Collections.singletonList("test");
|
||||||
|
String result = converter.convert(list, String.class);
|
||||||
|
assertEquals("test", result);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
public void convertCollectionToObjectWithElementConversion() {
|
||||||
|
converter.addConverterFactory(new StringToNumberConverterFactory());
|
||||||
|
List<String> list = Collections.singletonList("3");
|
||||||
|
Integer result = converter.convert(list, Integer.class);
|
||||||
|
assertEquals(new Integer(3), result);
|
||||||
|
}
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
public void convertObjectToArray() {
|
public void convertObjectToArray() {
|
||||||
String[] result = converter.convert("test", String[].class);
|
String[] result = converter.convert("test", String[].class);
|
||||||
|
|
@ -256,6 +288,21 @@ public class GenericConversionServiceTests {
|
||||||
assertEquals(new Integer(1), result[0]);
|
assertEquals(new Integer(1), result[0]);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
public void convertArrayToObject() {
|
||||||
|
String[] array = new String[] { "test" };
|
||||||
|
String result = converter.convert(array, String.class);
|
||||||
|
assertEquals("test", result);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
public void convertArrayToObjectWithElementConversion() {
|
||||||
|
converter.addConverterFactory(new StringToNumberConverterFactory());
|
||||||
|
String[] array = new String[] { "3" };
|
||||||
|
Integer result = converter.convert(array, Integer.class);
|
||||||
|
assertEquals(new Integer(3), result);
|
||||||
|
}
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
@Ignore
|
@Ignore
|
||||||
public void convertStringToArrayWithElementConversion() {
|
public void convertStringToArrayWithElementConversion() {
|
||||||
|
|
@ -275,7 +322,7 @@ public class GenericConversionServiceTests {
|
||||||
assertTrue(e.getCause() instanceof ConverterNotFoundException);
|
assertTrue(e.getCause() instanceof ConverterNotFoundException);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
public void parent() {
|
public void parent() {
|
||||||
GenericConversionService parent = new GenericConversionService();
|
GenericConversionService parent = new GenericConversionService();
|
||||||
|
|
@ -284,7 +331,7 @@ public class GenericConversionServiceTests {
|
||||||
try {
|
try {
|
||||||
converter.convert("3", Integer.class);
|
converter.convert("3", Integer.class);
|
||||||
} catch (ConverterNotFoundException e) {
|
} catch (ConverterNotFoundException e) {
|
||||||
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue