Beefed up test suite

This commit is contained in:
Keith Donald 2009-09-21 22:59:48 +00:00
parent e9416db472
commit c693f216f1
9 changed files with 70 additions and 18 deletions

View File

@ -37,7 +37,7 @@ final class ArrayToArrayGenericConverter implements GenericConverter {
Object target = Array.newInstance(targetElementType.getType(), Array.getLength(source));
GenericConverter converter = this.conversionService.getConverter(sourceElementType, targetElementType);
if (converter == null) {
throw new ConverterNotFoundException(sourceType, targetType);
throw new ConverterNotFoundException(sourceElementType, targetElementType);
}
for (int i = 0; i < Array.getLength(target); i++) {
Array.set(target, i, converter.convert(Array.get(source, i), sourceElementType, targetElementType));

View File

@ -42,7 +42,7 @@ final class ArrayToCollectionGenericConverter implements GenericConverter {
} else {
GenericConverter converter = this.conversionService.getConverter(sourceElementType, targetElementType);
if (converter == null) {
throw new ConverterNotFoundException(sourceType, targetType);
throw new ConverterNotFoundException(sourceElementType, targetElementType);
}
for (int i = 0; i < length; i++) {
collection.add(converter.convert(Array.get(source, i), sourceElementType, targetElementType));

View File

@ -39,7 +39,7 @@ final class ArrayToObjectGenericConverter implements GenericConverter {
} else {
GenericConverter converter = this.conversionService.getConverter(sourceElementType, targetType);
if (converter == null) {
throw new ConverterNotFoundException(sourceType, targetType);
throw new ConverterNotFoundException(sourceElementType, targetType);
}
return converter.convert(Array.get(source, 0), sourceElementType, targetType);
}

View File

@ -46,7 +46,7 @@ final class CollectionToArrayGenericConverter implements GenericConverter {
} else {
GenericConverter converter = this.conversionService.getConverter(sourceElementType, targetElementType);
if (converter == null) {
throw new ConverterNotFoundException(sourceType, targetType);
throw new ConverterNotFoundException(sourceElementType, targetElementType);
}
for (Iterator it = sourceCollection.iterator(); it.hasNext(); i++) {
Array.set(array, i, converter.convert(it.next(), sourceElementType, targetElementType));

View File

@ -40,7 +40,8 @@ final class CollectionToCollectionGenericConverter implements GenericConverter {
if (sourceType.isAssignableTo(targetType)) {
return sourceCollection;
} else {
Collection targetCollection = CollectionFactory.createCollection(targetType.getType(), sourceCollection.size());
Collection targetCollection = CollectionFactory.createCollection(targetType.getType(), sourceCollection
.size());
targetCollection.addAll(sourceCollection);
return targetCollection;
}
@ -48,7 +49,7 @@ final class CollectionToCollectionGenericConverter implements GenericConverter {
Collection targetCollection = CollectionFactory.createCollection(targetType.getType(), sourceCollection.size());
GenericConverter converter = this.conversionService.getConverter(sourceElementType, targetElementType);
if (converter == null) {
throw new ConverterNotFoundException(sourceType, targetType);
throw new ConverterNotFoundException(sourceElementType, targetElementType);
}
for (Object element : sourceCollection) {
targetCollection.add(converter.convert(element, sourceElementType, targetElementType));

View File

@ -33,15 +33,19 @@ final class CollectionToObjectGenericConverter implements GenericConverter {
if (sourceCollection.size() == 0) {
return null;
} else {
Object firstElement = sourceCollection.iterator().next();
TypeDescriptor sourceElementType = sourceType.getElementTypeDescriptor();
if (sourceElementType == TypeDescriptor.NULL && firstElement != null) {
sourceElementType = TypeDescriptor.valueOf(firstElement.getClass());
}
if (sourceElementType == TypeDescriptor.NULL || sourceElementType.isAssignableTo(targetType)) {
return sourceCollection.iterator().next();
return firstElement;
} else {
GenericConverter converter = this.conversionService.getConverter(sourceElementType, targetType);
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);
}
}
}

View File

@ -36,7 +36,7 @@ final class ObjectToArrayGenericConverter implements GenericConverter {
} else {
GenericConverter converter = this.conversionService.getConverter(sourceType, targetElementType);
if (converter == null) {
throw new ConverterNotFoundException(sourceType, targetType);
throw new ConverterNotFoundException(sourceType, targetElementType);
}
Array.set(target, 0, converter.convert(source, sourceType, targetElementType));
}

View File

@ -37,7 +37,7 @@ final class ObjectToCollectionGenericConverter implements GenericConverter {
} else {
GenericConverter converter = this.conversionService.getConverter(sourceType, targetElementType);
if (converter == null) {
throw new ConverterNotFoundException(sourceType, targetType);
throw new ConverterNotFoundException(sourceType, targetElementType);
}
target.add(converter.convert(source, sourceType, targetElementType));
}

View File

@ -24,6 +24,7 @@ import static org.junit.Assert.assertTrue;
import java.util.AbstractList;
import java.util.ArrayList;
import java.util.Collections;
import java.util.HashMap;
import java.util.LinkedHashSet;
import java.util.LinkedList;
@ -241,6 +242,37 @@ public class GenericConversionServiceTests {
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
public void convertObjectToArray() {
String[] result = converter.convert("test", String[].class);
@ -256,6 +288,21 @@ public class GenericConversionServiceTests {
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
@Ignore
public void convertStringToArrayWithElementConversion() {