Increased ResolvableType unit test coverage

Issue: SPR-11034
This commit is contained in:
Phillip Webb
2013-10-26 09:19:35 -07:00
parent 6cfbcf4f17
commit 2e1c035d42
2 changed files with 52 additions and 8 deletions

View File

@@ -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;
}
}

View File

@@ -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<String>, List {
}
public abstract class ExtendsMySimpleInterfaceTypeWithImplementsRaw extends MySimpleInterfaceTypeWithImplementsRaw {
}
public class MyCollectionInterfaceType implements MyInterfaceType<Collection<String>> {