Browse Source

Improve assertions in DefaultConversionServiceTests

Specifically, we now check the actual type of a converted collection in
various assertions to ensure that converters adhere to their contracts.
pull/30971/head
Sam Brannen 3 years ago
parent
commit
03f1fabbdb
  1. 93
      spring-core/src/test/java/org/springframework/core/convert/converter/DefaultConversionServiceTests.java

93
spring-core/src/test/java/org/springframework/core/convert/converter/DefaultConversionServiceTests.java

@ -342,30 +342,31 @@ class DefaultConversionServiceTests { @@ -342,30 +342,31 @@ class DefaultConversionServiceTests {
@Test
void convertArrayToCollectionInterface() {
Collection<?> result = conversionService.convert(new String[] {"1", "2", "3"}, Collection.class);
assertThat(result).isEqualTo(new LinkedHashSet<>(Arrays.asList("1", "2", "3")));
@SuppressWarnings("unchecked")
Collection<String> result = conversionService.convert(new String[] {"1", "2", "3"}, Collection.class);
assertThat(result).isExactlyInstanceOf(LinkedHashSet.class).containsExactly("1", "2", "3");
}
@Test
void convertArrayToSetInterface() {
Collection<?> result = conversionService.convert(new String[] {"1", "2", "3"}, Set.class);
assertThat(result).isEqualTo(new LinkedHashSet<>(Arrays.asList("1", "2", "3")));
@SuppressWarnings("unchecked")
Collection<String> result = conversionService.convert(new String[] {"1", "2", "3"}, Set.class);
assertThat(result).isExactlyInstanceOf(LinkedHashSet.class).containsExactly("1", "2", "3");
}
@Test
void convertArrayToListInterface() {
List<?> result = conversionService.convert(new String[] {"1", "2", "3"}, List.class);
assertThat(result).isEqualTo(Arrays.asList("1", "2", "3"));
@SuppressWarnings("unchecked")
List<String> result = conversionService.convert(new String[] {"1", "2", "3"}, List.class);
assertThat(result).isExactlyInstanceOf(ArrayList.class).containsExactly("1", "2", "3");
}
@Test
void convertArrayToCollectionGenericTypeConversion() throws Exception {
@SuppressWarnings("unchecked")
List<Integer> result = (List<Integer>) conversionService.convert(new String[] {"1", "2", "3"}, TypeDescriptor
.valueOf(String[].class), new TypeDescriptor(getClass().getDeclaredField("genericList")));
assertThat((int) result.get(0)).isEqualTo((int) Integer.valueOf(1));
assertThat((int) result.get(1)).isEqualTo((int) Integer.valueOf(2));
assertThat((int) result.get(2)).isEqualTo((int) Integer.valueOf(3));
List<Integer> result = (List<Integer>) conversionService.convert(new String[] {"1", "2", "3"},
TypeDescriptor.valueOf(String[].class), new TypeDescriptor(getClass().getDeclaredField("genericList")));
assertThat(result).isExactlyInstanceOf(ArrayList.class).containsExactly(1, 2, 3);
}
@Test
@ -393,10 +394,9 @@ class DefaultConversionServiceTests { @@ -393,10 +394,9 @@ class DefaultConversionServiceTests {
@Test
void convertArrayToCollectionImpl() {
ArrayList<?> result = conversionService.convert(new String[] {"1", "2", "3"}, ArrayList.class);
assertThat(result.get(0)).isEqualTo("1");
assertThat(result.get(1)).isEqualTo("2");
assertThat(result.get(2)).isEqualTo("3");
@SuppressWarnings("unchecked")
ArrayList<String> result = conversionService.convert(new String[] {"1", "2", "3"}, ArrayList.class);
assertThat(result).isExactlyInstanceOf(ArrayList.class).containsExactly("1", "2", "3");
}
@Test
@ -426,34 +426,25 @@ class DefaultConversionServiceTests { @@ -426,34 +426,25 @@ class DefaultConversionServiceTests {
@Test
void convertStringToArray() {
String[] result = conversionService.convert("1,2,3", String[].class);
assertThat(result.length).isEqualTo(3);
assertThat(result[0]).isEqualTo("1");
assertThat(result[1]).isEqualTo("2");
assertThat(result[2]).isEqualTo("3");
assertThat(result).containsExactly("1", "2", "3");
}
@Test
void convertStringToArrayWithElementConversion() {
Integer[] result = conversionService.convert("1,2,3", Integer[].class);
assertThat(result.length).isEqualTo(3);
assertThat((int) result[0]).isEqualTo((int) Integer.valueOf(1));
assertThat((int) result[1]).isEqualTo((int) Integer.valueOf(2));
assertThat((int) result[2]).isEqualTo((int) Integer.valueOf(3));
assertThat(result).containsExactly(1, 2, 3);
}
@Test
void convertStringToPrimitiveArrayWithElementConversion() {
int[] result = conversionService.convert("1,2,3", int[].class);
assertThat(result.length).isEqualTo(3);
assertThat(result[0]).isEqualTo(1);
assertThat(result[1]).isEqualTo(2);
assertThat(result[2]).isEqualTo(3);
assertThat(result).containsExactly(1, 2, 3);
}
@Test
void convertEmptyStringToArray() {
String[] result = conversionService.convert("", String[].class);
assertThat(result.length).isEqualTo(0);
assertThat(result).isEmpty();
}
@Test
@ -467,7 +458,7 @@ class DefaultConversionServiceTests { @@ -467,7 +458,7 @@ class DefaultConversionServiceTests {
void convertArrayToObjectWithElementConversion() {
String[] array = new String[] {"3"};
Integer result = conversionService.convert(array, Integer.class);
assertThat((int) result).isEqualTo((int) Integer.valueOf(3));
assertThat(result).isEqualTo(3);
}
@Test
@ -480,39 +471,27 @@ class DefaultConversionServiceTests { @@ -480,39 +471,27 @@ class DefaultConversionServiceTests {
@Test
void convertObjectToArray() {
Object[] result = conversionService.convert(3L, Object[].class);
assertThat(result.length).isEqualTo(1);
assertThat(result[0]).isEqualTo(3L);
assertThat(result).containsExactly(3L);
}
@Test
void convertObjectToArrayWithElementConversion() {
Integer[] result = conversionService.convert(3L, Integer[].class);
assertThat(result.length).isEqualTo(1);
assertThat((int) result[0]).isEqualTo((int) Integer.valueOf(3));
assertThat(result).containsExactly(3);
}
@Test
void convertCollectionToArray() {
List<String> list = new ArrayList<>();
list.add("1");
list.add("2");
list.add("3");
List<String> list = Arrays.asList("1", "2", "3");
String[] result = conversionService.convert(list, String[].class);
assertThat(result[0]).isEqualTo("1");
assertThat(result[1]).isEqualTo("2");
assertThat(result[2]).isEqualTo("3");
assertThat(result).containsExactly("1", "2", "3");
}
@Test
void convertCollectionToArrayWithElementConversion() {
List<String> list = new ArrayList<>();
list.add("1");
list.add("2");
list.add("3");
List<String> list = Arrays.asList("1", "2", "3");
Integer[] result = conversionService.convert(list, Integer[].class);
assertThat((int) result[0]).isEqualTo((int) Integer.valueOf(1));
assertThat((int) result[1]).isEqualTo((int) Integer.valueOf(2));
assertThat((int) result[2]).isEqualTo((int) Integer.valueOf(3));
assertThat(result).containsExactly(1, 2, 3);
}
@Test
@ -532,34 +511,30 @@ class DefaultConversionServiceTests { @@ -532,34 +511,30 @@ class DefaultConversionServiceTests {
@Test
void convertStringToCollection() {
List<?> result = conversionService.convert("1,2,3", List.class);
assertThat(result.size()).isEqualTo(3);
assertThat(result.get(0)).isEqualTo("1");
assertThat(result.get(1)).isEqualTo("2");
assertThat(result.get(2)).isEqualTo("3");
@SuppressWarnings("unchecked")
List<String> result = conversionService.convert("1,2,3", List.class);
assertThat(result).containsExactly("1", "2", "3");
}
@Test
void convertStringToCollectionWithElementConversion() throws Exception {
List<?> result = (List<?>) conversionService.convert("1,2,3", TypeDescriptor.valueOf(String.class),
@SuppressWarnings("unchecked")
List<Integer> result = (List<Integer>) conversionService.convert("1,2,3", TypeDescriptor.valueOf(String.class),
new TypeDescriptor(getClass().getField("genericList")));
assertThat(result.size()).isEqualTo(3);
assertThat(result.get(0)).isEqualTo(1);
assertThat(result.get(1)).isEqualTo(2);
assertThat(result.get(2)).isEqualTo(3);
assertThat(result).containsExactly(1, 2, 3);
}
@Test
void convertEmptyStringToCollection() {
Collection<?> result = conversionService.convert("", Collection.class);
assertThat(result.size()).isEqualTo(0);
assertThat(result).isEmpty();
}
@Test
void convertCollectionToObject() {
List<Long> list = Collections.singletonList(3L);
Long result = conversionService.convert(list, Long.class);
assertThat(result).isEqualTo(Long.valueOf(3));
assertThat(result).isEqualTo(3);
}
@Test

Loading…
Cancel
Save