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.
This commit is contained in:
Sam Brannen
2023-07-06 13:11:23 +02:00
parent 2ada2b77f6
commit 03f1fabbdb

View File

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