From 2e1c035d42b060b6204c970ffd4526dc4e932c8e Mon Sep 17 00:00:00 2001 From: Phillip Webb Date: Sat, 26 Oct 2013 09:19:35 -0700 Subject: [PATCH] Increased ResolvableType unit test coverage Issue: SPR-11034 --- .../springframework/core/ResolvableType.java | 12 ++--- .../core/ResolvableTypeTests.java | 48 ++++++++++++++++++- 2 files changed, 52 insertions(+), 8 deletions(-) diff --git a/spring-core/src/main/java/org/springframework/core/ResolvableType.java b/spring-core/src/main/java/org/springframework/core/ResolvableType.java index 3131f3a02c..80e9174d4c 100644 --- a/spring-core/src/main/java/org/springframework/core/ResolvableType.java +++ b/spring-core/src/main/java/org/springframework/core/ResolvableType.java @@ -358,18 +358,16 @@ public final class ResolvableType implements Serializable { * The result will be {@code true} only in those two scenarios. */ public boolean hasUnresolvableGenerics() { - ResolvableType[] generics = getGenerics(); - for (ResolvableType generic : generics) { - if (generic.resolve() == null) { + for (Class generic : resolveGenerics()) { + if (generic == null) { return true; } } Class resolved = resolve(); if (resolved != null) { - Type[] ifcs = resolved.getGenericInterfaces(); - for (Type ifc : ifcs) { - if (ifc instanceof Class) { - if (forClass((Class) ifc).hasGenerics()) { + for (Type genericInterface : resolved.getGenericInterfaces()) { + if (genericInterface instanceof Class) { + if (forClass((Class) genericInterface).hasGenerics()) { return true; } } diff --git a/spring-core/src/test/java/org/springframework/core/ResolvableTypeTests.java b/spring-core/src/test/java/org/springframework/core/ResolvableTypeTests.java index b3f92e905d..24db8da68d 100644 --- a/spring-core/src/test/java/org/springframework/core/ResolvableTypeTests.java +++ b/spring-core/src/test/java/org/springframework/core/ResolvableTypeTests.java @@ -48,7 +48,6 @@ import org.junit.runner.RunWith; import org.mockito.ArgumentCaptor; import org.mockito.Captor; import org.mockito.runners.MockitoJUnitRunner; - import org.springframework.core.ResolvableType.VariableResolver; import org.springframework.util.MultiValueMap; @@ -57,6 +56,8 @@ import static org.junit.Assert.*; import static org.mockito.BDDMockito.*; /** + * Tests for {@link ResolvableType}. + * * @author Phillip Webb */ @SuppressWarnings("rawtypes") @@ -89,6 +90,7 @@ public class ResolvableTypeTests { assertThat(none.resolveGeneric(0), nullValue()); assertThat(none.resolveGenerics().length, equalTo(0)); assertThat(none.toString(), equalTo("?")); + assertThat(none.hasUnresolvableGenerics(), equalTo(false)); assertThat(none.isAssignableFrom(ResolvableType.forClass(Object.class)), equalTo(false)); } @@ -1121,6 +1123,42 @@ public class ResolvableTypeTests { assertThat(narrow.getGeneric().resolve(), equalTo((Class) String.class)); } + @Test + public void hasUnresolvableGenerics() throws Exception { + ResolvableType type = ResolvableType.forField(Fields.class.getField("stringList")); + assertThat(type.hasUnresolvableGenerics(), equalTo(false)); + } + + @Test + public void hasUnresolvableGenericsBasedOnOwnGenerics() throws Exception { + ResolvableType type = ResolvableType.forClass(List.class); + assertThat(type.hasUnresolvableGenerics(), equalTo(true)); + } + + @Test + public void hasUnresolvableGenericsWhenSelfNotResolvable() throws Exception { + ResolvableType type = ResolvableType.forClass(List.class).getGeneric(); + assertThat(type.hasUnresolvableGenerics(), equalTo(false)); + } + + @Test + public void hasUnresolvableGenericsWhenImplementesRawInterface() throws Exception { + ResolvableType type = ResolvableType.forClass(MySimpleInterfaceTypeWithImplementsRaw.class); + for (ResolvableType generic : type.getGenerics()) { + assertThat(generic.resolve(), not(nullValue())); + } + assertThat(type.hasUnresolvableGenerics(), equalTo(true)); + } + + @Test + public void hasUnresolvableGenericsWhenExtends() throws Exception { + ResolvableType type = ResolvableType.forClass(ExtendsMySimpleInterfaceTypeWithImplementsRaw.class); + for (ResolvableType generic : type.getGenerics()) { + assertThat(generic.resolve(), not(nullValue())); + } + assertThat(type.hasUnresolvableGenerics(), equalTo(true)); + } + private ResolvableType testSerialization(ResolvableType type) throws Exception { ByteArrayOutputStream bos = new ByteArrayOutputStream(); @@ -1332,6 +1370,14 @@ public class ResolvableTypeTests { } + public abstract class MySimpleInterfaceTypeWithImplementsRaw implements MyInterfaceType, List { + + } + + public abstract class ExtendsMySimpleInterfaceTypeWithImplementsRaw extends MySimpleInterfaceTypeWithImplementsRaw { + + } + public class MyCollectionInterfaceType implements MyInterfaceType> { -- GitLab