/*
* 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.util.tiger;
import java.lang.reflect.Constructor;
import java.lang.reflect.Field;
import java.lang.reflect.Method;
import java.lang.reflect.Type;
import java.util.Collection;
import java.util.List;
import java.util.Set;
import junit.framework.TestCase;
/**
* @author koichik
*/
public class ReflectionUtilTest extends TestCase {
/**
* @throws Exception
*/
public void testForName() throws Exception {
Class<Foo> clazz = ReflectionUtil
.forName(getClass().getName() + "$Foo");
assertNotNull(clazz);
}
/**
* @throws Exception
*/
public void testGetConstructor() throws Exception {
Constructor<Foo> ctor = ReflectionUtil.getConstructor(Foo.class);
assertNotNull(ctor);
}
/**
* @throws Exception
*/
public void testGetDeclaredConstructor() throws Exception {
Constructor<Foo> ctor = ReflectionUtil.getDeclaredConstructor(
Foo.class, int.class, String.class);
assertNotNull(ctor);
}
/**
* @throws Exception
*/
public void testGetField() throws Exception {
Field f = ReflectionUtil.getField(Foo.class, "s");
assertNotNull(f);
}
/**
* @throws Exception
*/
public void testGetDeclaredField() throws Exception {
Field f = ReflectionUtil.getDeclaredField(Foo.class, "n");
assertNotNull(f);
}
/**
* @throws Exception
*/
public void testGetMethod() throws Exception {
Method m = ReflectionUtil.getMethod(Foo.class, "getS");
assertNotNull(m);
m = ReflectionUtil.getMethod(Foo.class, "setS", String.class);
assertNotNull(m);
}
/**
* @throws Exception
*/
public void testGetDeclaredMethod() throws Exception {
Method m = ReflectionUtil.getDeclaredMethod(Foo.class, "getN");
assertNotNull(m);
m = ReflectionUtil.getDeclaredMethod(Foo.class, "setN", int.class);
assertNotNull(m);
}
/**
* @throws Exception
*/
public void testNewInstance() throws Exception {
Foo foo = ReflectionUtil.newInstance(Foo.class);
assertNotNull(foo);
Constructor<Foo> ctor = ReflectionUtil.getDeclaredConstructor(
Foo.class, int.class, String.class);
ctor.setAccessible(true);
foo = ReflectionUtil.newInstance(ctor, 10, "foo");
assertNotNull(foo);
assertEquals(10, foo.getN());
assertEquals("foo", foo.getS());
}
/**
* @throws Exception
*/
public void testGetValue() throws Exception {
Foo foo = new Foo(10, "foo");
Field f = ReflectionUtil.getDeclaredField(Foo.class, "n");
f.setAccessible(true);
int n = Integer.class.cast(ReflectionUtil.getValue(f, foo));
assertEquals(10, n);
f = ReflectionUtil.getDeclaredField(Foo.class, "s");
String s = ReflectionUtil.getValue(f, foo);
assertEquals("foo", s);
}
/**
* @throws Exception
*/
public void testSetValue() throws Exception {
Foo foo = new Foo();
Field f = ReflectionUtil.getDeclaredField(Foo.class, "n");
f.setAccessible(true);
ReflectionUtil.setValue(f, foo, 10);
assertEquals(10, foo.n);
f = ReflectionUtil.getField(Foo.class, "s");
ReflectionUtil.setValue(f, foo, "foo");
assertEquals("foo", foo.s);
}
/**
* @throws Exception
*/
public void testInvoke() throws Exception {
Foo foo = new Foo();
Method m = ReflectionUtil.getDeclaredMethod(Foo.class, "setN",
int.class);
m.setAccessible(true);
ReflectionUtil.invoke(m, foo, 10);
assertEquals(10, foo.n);
m = ReflectionUtil.getMethod(Foo.class, "setS", String.class);
ReflectionUtil.invoke(m, foo, "foo");
assertEquals("foo", foo.s);
}
/**
* @throws Exception
*/
public void testGetElementTypeOfCollectionFromField() throws Exception {
Type clazz = ReflectionUtil.getField(Foo.class, "collection")
.getGenericType();
assertEquals(String.class, ReflectionUtil
.getElementTypeOfCollection(clazz));
}
/**
* @throws Exception
*/
public void testGetElementTypeOfCollectionFromParameter() throws Exception {
Method m = Foo.class.getMethod("convert", Collection.class,
Collection.class);
assertEquals(Object.class, ReflectionUtil
.getElementTypeOfCollectionFromParameterType(m, 0));
assertEquals(Integer.class, ReflectionUtil
.getElementTypeOfCollectionFromParameterType(m, 1));
}
/**
* @throws Exception
*/
public void testGetElementTypeOfCollectionFromReturnType() throws Exception {
Method m = Foo.class.getMethod("convert", Collection.class,
Collection.class);
assertEquals(String.class, ReflectionUtil
.getElementTypeOfCollectionFromReturnType(m));
}
/**
* @throws Exception
*/
public void testGetElementTypeOfListFromField() throws Exception {
Type clazz = ReflectionUtil.getField(Foo.class, "list")
.getGenericType();
assertEquals(String.class, ReflectionUtil.getElementTypeOfList(clazz));
}
/**
* @throws Exception
*/
public void testGetElementTypeOfListFromParameter() throws Exception {
Method m = Foo.class.getMethod("convert", List.class, List.class);
assertEquals(Object.class, ReflectionUtil
.getElementTypeOfListFromParameterType(m, 0));
assertEquals(Integer.class, ReflectionUtil
.getElementTypeOfListFromParameterType(m, 1));
}
/**
* @throws Exception
*/
public void testGetElementTypeOfListFromReturnType() throws Exception {
Method m = Foo.class.getMethod("convert", List.class, List.class);
assertEquals(String.class, ReflectionUtil
.getElementTypeOfListFromReturnType(m));
}
/**
* @throws Exception
*/
public void testGetElementTypeOfSetFromField() throws Exception {
Type clazz = ReflectionUtil.getField(Foo.class, "set").getGenericType();
assertEquals(String.class, ReflectionUtil.getElementTypeOfSet(clazz));
}
/**
* @throws Exception
*/
public void testGetElementTypeOfSetFromParameter() throws Exception {
Method m = Foo.class.getMethod("convert", Set.class, Set.class);
assertEquals(Object.class, ReflectionUtil
.getElementTypeOfSetFromParameterType(m, 0));
assertEquals(Integer.class, ReflectionUtil
.getElementTypeOfSetFromParameterType(m, 1));
}
/**
* @throws Exception
*/
public void testGetElementTypeOfSetFromReturnType() throws Exception {
Method m = Foo.class.getMethod("convert", Set.class, Set.class);
assertEquals(String.class, ReflectionUtil
.getElementTypeOfSetFromReturnType(m));
}
/**
*
*/
public static class Foo {
private int n;
/** */
public Collection<String> collection;
/** */
public List<String> list;
/** */
public Set<String> set;
/** */
public String s;
/** */
public Foo() {
}
private Foo(int n, String s) {
setN(n);
setS(s);
}
private int getN() {
return n;
}
private void setN(int n) {
this.n = n;
}
/**
* @return
*/
public String getS() {
return s;
}
/**
* @param s
*/
public void setS(String s) {
this.s = s;
}
/**
* @param o
* @param i
* @return
*/
@SuppressWarnings("unused")
public Collection<String> convert(Collection<Object> o,
Collection<Integer> i) {
return null;
}
/**
* @param o
* @param i
* @return
*/
@SuppressWarnings("unused")
public List<String> convert(List<Object> o, List<Integer> i) {
return null;
}
/**
* @param o
* @param i
* @return
*/
@SuppressWarnings("unused")
public Set<String> convert(Set<Object> o, Set<Integer> i) {
return null;
}
}
}