Simplify StreamConverterTests

This commit is contained in:
Sam Brannen
2022-01-09 16:13:22 +01:00
parent 730ad4436f
commit d68bb4eecd

View File

@@ -1,5 +1,5 @@
/*
* Copyright 2002-2019 the original author or authors.
* Copyright 2002-2022 the original author or authors.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
@@ -30,11 +30,14 @@ import org.springframework.core.convert.TypeDescriptor;
import static org.assertj.core.api.Assertions.assertThat;
import static org.assertj.core.api.Assertions.assertThatExceptionOfType;
import static org.assertj.core.api.Assertions.assertThatIllegalStateException;
import static org.assertj.core.api.InstanceOfAssertFactories.list;
import static org.assertj.core.api.InstanceOfAssertFactories.stream;
/**
* Tests for {@link StreamConverter}.
*
* @author Stephane Nicoll
* @author Sam Brannen
* @since 4.2
*/
class StreamConverterTests {
@@ -56,60 +59,41 @@ class StreamConverterTests {
@Test
void convertFromStreamToList() throws NoSuchFieldException {
this.conversionService.addConverter(Number.class, String.class, new ObjectToStringConverter());
Stream<Integer> stream = Arrays.asList(1, 2, 3).stream();
Stream<Integer> stream = Stream.of(1, 2, 3);
TypeDescriptor listOfStrings = new TypeDescriptor(Types.class.getField("listOfStrings"));
Object result = this.conversionService.convert(stream, listOfStrings);
assertThat(result).as("Converted object must not be null").isNotNull();
boolean condition = result instanceof List;
assertThat(condition).as("Converted object must be a list").isTrue();
@SuppressWarnings("unchecked")
List<String> content = (List<String>) result;
assertThat(content.get(0)).isEqualTo("1");
assertThat(content.get(1)).isEqualTo("2");
assertThat(content.get(2)).isEqualTo("3");
assertThat(content.size()).as("Wrong number of elements").isEqualTo(3);
assertThat(result).asInstanceOf(list(String.class)).containsExactly("1", "2", "3");
}
@Test
void convertFromStreamToArray() throws NoSuchFieldException {
this.conversionService.addConverterFactory(new NumberToNumberConverterFactory());
Stream<Integer> stream = Arrays.asList(1, 2, 3).stream();
Stream<Integer> stream = Stream.of(1, 2, 3);
TypeDescriptor arrayOfLongs = new TypeDescriptor(Types.class.getField("arrayOfLongs"));
Object result = this.conversionService.convert(stream, arrayOfLongs);
assertThat(result).as("Converted object must not be null").isNotNull();
assertThat(result.getClass().isArray()).as("Converted object must be an array").isTrue();
Long[] content = (Long[]) result;
assertThat(content[0]).isEqualTo(Long.valueOf(1L));
assertThat(content[1]).isEqualTo(Long.valueOf(2L));
assertThat(content[2]).isEqualTo(Long.valueOf(3L));
assertThat(content.length).as("Wrong number of elements").isEqualTo(3);
assertThat(content).containsExactly(1L, 2L, 3L);
}
@Test
void convertFromStreamToRawList() throws NoSuchFieldException {
Stream<Integer> stream = Arrays.asList(1, 2, 3).stream();
Stream<Integer> stream = Stream.of(1, 2, 3);
TypeDescriptor listOfStrings = new TypeDescriptor(Types.class.getField("rawList"));
Object result = this.conversionService.convert(stream, listOfStrings);
assertThat(result).as("Converted object must not be null").isNotNull();
boolean condition = result instanceof List;
assertThat(condition).as("Converted object must be a list").isTrue();
@SuppressWarnings("unchecked")
List<Object> content = (List<Object>) result;
assertThat(content.get(0)).isEqualTo(1);
assertThat(content.get(1)).isEqualTo(2);
assertThat(content.get(2)).isEqualTo(3);
assertThat(content.size()).as("Wrong number of elements").isEqualTo(3);
assertThat(result).asInstanceOf(list(Object.class)).containsExactly(1, 2, 3);
}
@Test
void convertFromStreamToArrayNoConverter() throws NoSuchFieldException {
Stream<Integer> stream = Arrays.asList(1, 2, 3).stream();
Stream<Integer> stream = Stream.of(1, 2, 3);
TypeDescriptor arrayOfLongs = new TypeDescriptor(Types.class.getField("arrayOfLongs"));
assertThatExceptionOfType(ConversionFailedException.class).isThrownBy(() ->
this.conversionService.convert(stream, arrayOfLongs))
assertThatExceptionOfType(ConversionFailedException.class)
.isThrownBy(() -> this.conversionService.convert(stream, arrayOfLongs))
.withCauseInstanceOf(ConverterNotFoundException.class);
}
@@ -117,13 +101,11 @@ class StreamConverterTests {
@SuppressWarnings("resource")
void convertFromListToStream() throws NoSuchFieldException {
this.conversionService.addConverterFactory(new StringToNumberConverterFactory());
List<String> stream = Arrays.asList("1", "2", "3");
List<String> list = Arrays.asList("1", "2", "3");
TypeDescriptor streamOfInteger = new TypeDescriptor(Types.class.getField("streamOfIntegers"));
Object result = this.conversionService.convert(stream, streamOfInteger);
Object result = this.conversionService.convert(list, streamOfInteger);
assertThat(result).as("Converted object must not be null").isNotNull();
boolean condition = result instanceof Stream;
assertThat(condition).as("Converted object must be a stream").isTrue();
assertThat(result).as("Converted object must be a stream").isInstanceOf(Stream.class);
@SuppressWarnings("unchecked")
Stream<Integer> content = (Stream<Integer>) result;
assertThat(content.mapToInt(x -> x).sum()).isEqualTo(6);
@@ -132,34 +114,25 @@ class StreamConverterTests {
@Test
@SuppressWarnings("resource")
void convertFromArrayToStream() throws NoSuchFieldException {
Integer[] stream = new Integer[] {1, 0, 1};
Integer[] array = new Integer[] {1, 0, 1};
this.conversionService.addConverter(Integer.class, Boolean.class, source -> source == 1);
TypeDescriptor streamOfBoolean = new TypeDescriptor(Types.class.getField("streamOfBooleans"));
Object result = this.conversionService.convert(stream, streamOfBoolean);
Object result = this.conversionService.convert(array, streamOfBoolean);
assertThat(result).as("Converted object must not be null").isNotNull();
boolean condition = result instanceof Stream;
assertThat(condition).as("Converted object must be a stream").isTrue();
@SuppressWarnings("unchecked")
Stream<Boolean> content = (Stream<Boolean>) result;
assertThat(content.filter(x -> x).count()).isEqualTo(2);
assertThat(result).asInstanceOf(stream(Boolean.class)).filteredOn(x -> x).hasSize(2);
}
@Test
@SuppressWarnings("resource")
void convertFromListToRawStream() throws NoSuchFieldException {
List<String> stream = Arrays.asList("1", "2", "3");
List<String> list = Arrays.asList("1", "2", "3");
TypeDescriptor streamOfInteger = new TypeDescriptor(Types.class.getField("rawStream"));
Object result = this.conversionService.convert(stream, streamOfInteger);
Object result = this.conversionService.convert(list, streamOfInteger);
assertThat(result).as("Converted object must not be null").isNotNull();
boolean condition = result instanceof Stream;
assertThat(condition).as("Converted object must be a stream").isTrue();
assertThat(result).as("Converted object must be a stream").isInstanceOf(Stream.class);
@SuppressWarnings("unchecked")
Stream<Object> content = (Stream<Object>) result;
StringBuilder sb = new StringBuilder();
content.forEach(sb::append);
assertThat(sb.toString()).isEqualTo("123");
assertThat(content).containsExactly("1", "2", "3");
}
@Test