From: Juergen H. <jho...@us...> - 2006-04-20 18:24:37
|
Update of /cvsroot/springframework/spring/tiger/test/org/springframework/core In directory sc8-pr-cvs1.sourceforge.net:/tmp/cvs-serv12059/tiger/test/org/springframework/core Added Files: AbstractGenericsTests.java GenericsHelperTests.java Log Message: correctly detect element type of collections with parameterization in superclass/interface --- NEW FILE: GenericsHelperTests.java --- /* * 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.Map; import java.util.Set; /** * @author Serge Bogatyrjov * @author Juergen Hoeller */ public class GenericsHelperTests 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 GenericsHelper.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(); } 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(); } } --- NEW FILE: AbstractGenericsTests.java --- /* * 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 junit.framework.TestCase; /** * @author Serge Bogatyrjov */ public abstract class AbstractGenericsTests extends TestCase { protected Class<?> targetClass; protected String methods[]; protected Type expectedResults[]; protected void executeTest() throws NoSuchMethodException { String methodName = getName().substring(4); methodName = methodName.substring(0, 1).toLowerCase() + methodName.substring(1); for (int i = 0; i < this.methods.length; i++) { if (methodName.equals(this.methods[i])) { Method method = this.targetClass.getMethod(methodName); Type type = getType(method); assertEquals(this.expectedResults[i], type); return; } } throw new IllegalStateException("Bad test data"); } protected abstract Type getType(Method method); } |