/*
* Copyright 2002-2006 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.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package org.springframework.core;
import java.lang.reflect.Method;
import java.lang.reflect.Type;
import java.util.AbstractMap;
import java.util.Date;
import java.util.List;
import java.util.Map;
import java.util.Set;
import org.springframework.beans.GenericBean;
import org.springframework.core.io.Resource;
/**
* @author Serge Bogatyrjov
* @author Juergen Hoeller
*/
public class GenericCollectionTypeResolverTests extends AbstractGenericsTests {
protected void setUp() throws Exception {
this.targetClass = Foo.class;
this.methods = new String[] {"a", "b", "b2", "b3", "c", "d", "d2", "d3", "e", "e2", "e3"};
this.expectedResults = new Class[] {
Integer.class, null, null, Set.class, null, Integer.class,
Integer.class, Integer.class, Integer.class, Integer.class, Integer.class};
}
protected Type getType(Method method) {
return GenericCollectionTypeResolver.getMapValueReturnType(method);
}
public void testA() throws Exception {
executeTest();
}
public void testB() throws Exception {
executeTest();
}
public void testB2() throws Exception {
executeTest();
}
public void testB3() throws Exception {
executeTest();
}
public void testC() throws Exception {
executeTest();
}
public void testD() throws Exception {
executeTest();
}
public void testD2() throws Exception {
executeTest();
}
public void testD3() throws Exception {
executeTest();
}
public void testE() throws Exception {
executeTest();
}
public void testE2() throws Exception {
executeTest();
}
public void testE3() throws Exception {
executeTest();
}
public void testProgrammaticListIntrospection() throws Exception {
Method setter = GenericBean.class.getMethod("setResourceList", List.class);
assertEquals(Resource.class,
GenericCollectionTypeResolver.getCollectionParameterType(new MethodParameter(setter, 0)));
Method getter = GenericBean.class.getMethod("getResourceList");
assertEquals(Resource.class,
GenericCollectionTypeResolver.getCollectionReturnType(getter));
}
private abstract class CustomMap <T> extends AbstractMap<String, Integer> {
}
private abstract class OtherCustomMap <T> implements Map<String, Integer> {
}
private interface Foo {
Map<String, Integer> a();
Map<?, ?> b();
Map<?, ? extends Set> b2();
Map<?, ? super Set> b3();
Map c();
CustomMap<Date> d();
CustomMap<?> d2();
CustomMap d3();
OtherCustomMap<Date> e();
OtherCustomMap<?> e2();
OtherCustomMap e3();
}
}