Skip to content

Commit

Permalink
Merge branch '#132.non-iterable.parameterized.types'
Browse files Browse the repository at this point in the history
* #132.non-iterable.parameterized.types:
  more tests for junit5 to verify function of parameterized types
  relax junit4 type checks for parameterized types (#132)
  reproduce not working non-iterable parameterized types #132
  • Loading branch information
aaschmid committed Jan 31, 2021
2 parents 9c5416e + f3e9c2b commit 76142d2
Show file tree
Hide file tree
Showing 8 changed files with 140 additions and 23 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,9 @@
import static org.assertj.core.api.Assertions.assertThat;

import java.util.ArrayList;
import java.util.Collections;
import java.util.List;
import java.util.function.UnaryOperator;

import org.junit.jupiter.params.ParameterizedTest;

Expand Down Expand Up @@ -55,4 +57,16 @@ void testIsNumber(Number number) {
// Expect:
assertThat(number).isInstanceOf(Number.class);
}

@DataProvider
public static List<List<UnaryOperator<String>>> listOfListOfUnaryOperator() {
return Collections.singletonList(Collections.singletonList((string) -> "merged-" + string));
}

@ParameterizedTest
@UseDataProvider("listOfListOfUnaryOperator")
public void testListOfListOfUnaryOperator(UnaryOperator<String> operator) {
// Expect:
assertThat(operator.apply("test")).isEqualTo("merged-test");
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -3,9 +3,11 @@
import static org.assertj.core.api.Assertions.assertThat;

import java.util.Arrays;
import java.util.Collections;
import java.util.HashSet;
import java.util.List;
import java.util.Set;
import java.util.function.UnaryOperator;

import org.junit.jupiter.params.ParameterizedTest;

Expand Down Expand Up @@ -60,4 +62,16 @@ void testSingleArgIterableOfString(String string) {
// Expected:
assertThat(string).isNotEqualTo("1234");
}
}

@DataProvider
public static List<UnaryOperator<String>> listOfUnaryOperator() {
return Collections.singletonList((string) -> "merged" + string);
}

@ParameterizedTest
@UseDataProvider("listOfUnaryOperator")
public void testListOfUnaryOperator(UnaryOperator<String> operator) {
// Expected:
assertThat(operator.apply("test")).isEqualTo("mergedtest");
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,9 @@
import static org.assertj.core.api.Assertions.assertThat;

import java.util.ArrayList;
import java.util.Collections;
import java.util.List;
import java.util.function.UnaryOperator;

import org.junit.jupiter.api.TestTemplate;
import org.junit.jupiter.api.extension.ExtendWith;
Expand Down Expand Up @@ -58,4 +60,16 @@ void testIsNumber(Number number) {
// Expect:
assertThat(number).isInstanceOf(Number.class);
}

@DataProvider
public static List<List<UnaryOperator<String>>> listOfListOfUnaryOperator() {
return Collections.singletonList(Collections.singletonList((string) -> "merged-" + string));
}

@TestTemplate
@UseDataProvider("listOfListOfUnaryOperator")
public void testListOfListOfUnaryOperator(UnaryOperator<String> operator) {
// Expect:
assertThat(operator.apply("test")).isEqualTo("merged-test");
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -2,10 +2,13 @@

import static org.assertj.core.api.Assertions.assertThat;

import java.util.ArrayList;
import java.util.Arrays;
import java.util.Collections;
import java.util.HashSet;
import java.util.List;
import java.util.Set;
import java.util.function.UnaryOperator;

import org.junit.jupiter.api.TestTemplate;
import org.junit.jupiter.api.extension.ExtendWith;
Expand Down Expand Up @@ -63,4 +66,16 @@ void testSingleArgIterableOfString(String string) {
// Expected:
assertThat(string).isNotEqualTo("1234");
}
}

@DataProvider
public static List<UnaryOperator<String>> listOfUnaryOperator() {
return Collections.singletonList((string) -> "merged" + string);
}

@TestTemplate
@UseDataProvider("listOfUnaryOperator")
public void testListOfUnaryOperator(UnaryOperator<String> operator) {
// Expected:
assertThat(operator.apply("test")).isEqualTo("mergedtest");
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,7 @@
import static org.assertj.core.api.Assertions.assertThat;

import java.util.Arrays;
import java.util.Collections;
import java.util.List;

import org.junit.Test;
Expand Down Expand Up @@ -44,4 +45,24 @@ public void test(List<String> strings, String expectedValue) {
// Expected:
assertThat(strings).contains(expectedValue);
}
}

public interface UnaryOperator<T> {
T apply(T arg);
}

@DataProvider
public static List<List<UnaryOperator<String>>> listOfListOfUnaryOperator() {
return Collections.singletonList(Collections.<UnaryOperator<String>>singletonList(new UnaryOperator<String>() {
@Override
public String apply(String arg) {
return "merged-" + arg;
}
}));
}

@Test
@UseDataProvider("listOfListOfUnaryOperator")
public void testListOfListOfUnaryOperator(UnaryOperator<String> operator) {
assertThat(operator.apply("test")).isEqualTo("merged-test");
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,7 @@
import static org.assertj.core.api.Assertions.assertThat;

import java.util.Arrays;
import java.util.Collections;
import java.util.HashSet;
import java.util.List;
import java.util.Set;
Expand Down Expand Up @@ -63,4 +64,25 @@ public void testSingleArgIterableOfString(String string) {
// Expected:
assertThat(string).isNotEqualTo("1234");
}
}

public interface UnaryOperator<T> {
T apply(T arg);
}

@DataProvider
public static List<UnaryOperator<String>> dataProviderListOfUnaryOperator() {
return Collections.<UnaryOperator<String>>singletonList(new UnaryOperator<String>() {
@Override
public String apply(String arg) {
return "merged" + arg;
}
});
}

@Test
@UseDataProvider
public void testListOfUnaryOperator(UnaryOperator<String> operator) {
// Expected:
assertThat(operator.apply("test")).isEqualTo("mergedtest");
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -57,7 +57,7 @@ public DataConverter() {
* </ul>
*
* Please note, that {@link Iterable} can be replaced by any valid subtype (checked via {@link Class#isAssignableFrom(Class)}). As well
* as an arbitrary inner type is also accepted. Only rawtypes are not supported currently.
* as an arbitrary inner type is also accepted.
*
* @param type to be checked for convertibility (use either {@link Method#getGenericReturnType()}, {@link Method#getReturnType()}, or
* simple {@link Class} if possible)
Expand All @@ -70,11 +70,7 @@ public boolean canConvert(Type type) {

if (type instanceof ParameterizedType) {
ParameterizedType parameterizedType = (ParameterizedType) type;

Type rawType = parameterizedType.getRawType();
if (Iterable.class.isAssignableFrom((Class<?>) rawType)) {
return canConvertIterableOf(parameterizedType);
}
return Iterable.class.isAssignableFrom((Class<?>) parameterizedType.getRawType());
}
return false;
}
Expand Down Expand Up @@ -103,18 +99,6 @@ public List<Object[]> convert(Object data, boolean isVarargs, Class<?>[] paramet
return super.convert(data, isVarargs, parameterTypes, context);
}

private boolean canConvertIterableOf(ParameterizedType parameterizedType) {
if (parameterizedType.getActualTypeArguments().length == 1) {
Type innerType = parameterizedType.getActualTypeArguments()[0];
if (parameterizedType.getActualTypeArguments()[0] instanceof ParameterizedType) {
ParameterizedType innerType2 = (ParameterizedType) innerType;
return Iterable.class.isAssignableFrom((Class<?>) innerType2.getRawType());
}
return true;
}
return false;
}

public void setObjectArrayConverter(ObjectArrayConverter objectArrayConverter) {
this.objectArrayConverter = objectArrayConverter;
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -112,6 +112,30 @@ public void testCanConvertShouldReturnTrueIfTypeIsListOfObject() {
assertThat(result).isTrue();
}

@Test
public void testCanConvertShouldReturnTrueIfTypeIsListOfNonIterableParameterizedType() {
// Given:
Type type = getMethod("methodReturningListOfNonIterableParameterizedType").getGenericReturnType();

// When:
boolean result = underTest.canConvert(type);

// Then:
assertThat(result).isTrue();
}

@Test
public void testCanConvertShouldReturnTrueIfTypeIsListOfRawType() {
// Given:
Type type = getMethod("methodReturningListOfRawType").getGenericReturnType();

// When:
boolean result = underTest.canConvert(type);

// Then:
assertThat(result).isTrue();
}

@Test
public void testCanConvertShouldReturnTrueIfTypeIsIterableOfWildcard() {
// Given:
Expand Down Expand Up @@ -169,7 +193,7 @@ public void testCanConvertShouldReturnFalseIfTypeIsTwoArgList() {
boolean result = underTest.canConvert(type);

// Then:
assertThat(result).isFalse();
assertThat(result).isTrue();
}

@Test
Expand Down Expand Up @@ -533,6 +557,15 @@ public static List<Object> methodReturningListOfObject() {
return null;
}

@SuppressWarnings("rawtypes")
public static List<Comparable> methodReturningListOfRawType() {
return null;
}

public static List<Comparable<Object>> methodReturningListOfNonIterableParameterizedType() {
return null;
}

public static List<?> methodReturningIterableOfWildcard() {
return null;
}
Expand Down

0 comments on commit 76142d2

Please sign in to comment.