Browse Source

Add test case

Signed-off-by: anaconda875 <hflbtmax@gmail.com>
pull/36480/head
anaconda875 2 days ago
parent
commit
6df6b3287a
  1. 27
      spring-core/src/test/java/org/springframework/core/GenericTypeResolverTests.java

27
spring-core/src/test/java/org/springframework/core/GenericTypeResolverTests.java

@ -25,6 +25,7 @@ import java.util.Collection; @@ -25,6 +25,7 @@ import java.util.Collection;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.Optional;
import java.util.function.Supplier;
import org.junit.jupiter.api.Test;
@ -250,6 +251,15 @@ class GenericTypeResolverTests { @@ -250,6 +251,15 @@ class GenericTypeResolverTests {
assertThat(resolvedType).isEqualTo(InheritsDefaultMethod.ConcreteType.class);
}
@Test
void resolveTypeFromNestedParameterizedType() {
Type resolvedType = resolveType(method(MyInterfaceType.class, "get").getGenericReturnType(), MyCollectionInterfaceType.class);
assertThat(resolvedType).isEqualTo(method(MyCollectionInterfaceType.class, "get").getGenericReturnType());
resolvedType = resolveType(method(MyInterfaceType.class, "get").getGenericReturnType(), MyOptionalInterfaceType.class);
assertThat(resolvedType).isEqualTo(method(MyOptionalInterfaceType.class, "get").getGenericReturnType());
}
private static Method method(Class<?> target, String methodName, Class<?>... parameterTypes) {
Method method = findMethod(target, methodName, parameterTypes);
assertThat(method).describedAs(target.getName() + "#" + methodName).isNotNull();
@ -258,12 +268,29 @@ class GenericTypeResolverTests { @@ -258,12 +268,29 @@ class GenericTypeResolverTests {
public interface MyInterfaceType<T> {
default T get() {
return null;
}
}
public class MySimpleInterfaceType implements MyInterfaceType<String> {
}
public class MyParameterizedInterfaceType<P> implements MyInterfaceType<Collection<P>> {
}
public class MyOptionalInterfaceType extends MyParameterizedInterfaceType<Optional<String>> {
@Override
public Collection<Optional<String>> get() {
return super.get();
}
}
public class MyCollectionInterfaceType implements MyInterfaceType<Collection<String>> {
@Override
public Collection<String> get() {
return MyInterfaceType.super.get();
}
}
public abstract class MyAbstractType<T> implements MyInterfaceType<T> {

Loading…
Cancel
Save