/*
* Copyright 2004-2015 the Seasar Foundation and the Others.
*
* 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.seasar.framework.beans.factory;
import java.lang.reflect.Field;
import java.lang.reflect.Method;
import java.lang.reflect.Type;
import java.lang.reflect.TypeVariable;
import java.util.List;
import java.util.Map;
import java.util.Set;
import junit.framework.TestCase;
import org.seasar.framework.beans.ParameterizedClassDesc;
/**
* @author koichik
*/
public class ParameterizedClassDescFactoryTest extends TestCase {
/**
* @throws Exception
*/
public void testFieldType() throws Exception {
@SuppressWarnings("unchecked")
Map<TypeVariable<?>, Type> map = ParameterizedClassDescFactory
.getTypeVariables(Hoge.class);
Field field = Hoge.class.getField("foo");
ParameterizedClassDesc desc = ParameterizedClassDescFactory
.createParameterizedClassDesc(field, map);
assertEquals(Map.class, desc.getRawClass());
ParameterizedClassDesc[] args = desc.getArguments();
assertEquals(2, args.length);
ParameterizedClassDesc arg1 = args[0];
assertEquals(String.class, arg1.getRawClass());
assertNull(arg1.getArguments());
ParameterizedClassDesc arg2 = args[1];
assertEquals(Set[].class, arg2.getRawClass());
ParameterizedClassDesc[] args2 = arg2.getArguments();
assertEquals(1, args2.length);
ParameterizedClassDesc arg2_1 = args2[0];
assertEquals(Integer.class, arg2_1.getRawClass());
}
/**
* @throws Exception
*/
public void testMethodParameterType() throws Exception {
@SuppressWarnings("unchecked")
Map<TypeVariable<?>, Type> map = ParameterizedClassDescFactory
.getTypeVariables(Hoge.class);
Method method = Hoge.class.getMethod("foo", Set.class, Map.class);
ParameterizedClassDesc desc = ParameterizedClassDescFactory
.createParameterizedClassDesc(method, 0, map);
assertEquals(Set.class, desc.getRawClass());
ParameterizedClassDesc[] args = desc.getArguments();
assertEquals(1, args.length);
assertEquals(Integer.class, args[0].getRawClass());
desc = ParameterizedClassDescFactory.createParameterizedClassDesc(
method, 1, map);
assertEquals(Map.class, desc.getRawClass());
args = desc.getArguments();
assertEquals(2, args.length);
assertEquals(String.class, args[0].getRawClass());
assertNull(args[0].getArguments());
assertEquals(Integer.class, args[1].getRawClass());
assertNull(args[1].getArguments());
}
/**
* @throws Exception
*/
public void testMethodReturnType() throws Exception {
@SuppressWarnings("unchecked")
Map<TypeVariable<?>, Type> map = ParameterizedClassDescFactory
.getTypeVariables(Hoge.class);
Method method = Hoge.class.getMethod("foo", Set.class, Map.class);
ParameterizedClassDesc desc = ParameterizedClassDescFactory
.createParameterizedClassDesc(method, map);
assertEquals(List.class, desc.getRawClass());
ParameterizedClassDesc[] args = desc.getArguments();
assertEquals(1, args.length);
assertEquals(String.class, args[0].getRawClass());
assertNull(args[0].getArguments());
}
/**
* @author koichik
*/
public interface Hoge {
/** */
public static Map<String, Set<Integer>[]> foo = null;
/**
* @param arg1
* @param arg2
* @return
*/
List<String> foo(Set<Integer> arg1, Map<String, Integer> arg2);
}
}