blob: d70a7a55aaa28055532a860bf4d15b03bedc3dfe [file] [log] [blame]
/*******************************************************************************
* Copyright (c) 2010 Markus Alexander Kuppe.
* All rights reserved. This program and the accompanying materials
* are made available under the terms of the Eclipse Public License v1.0
* which accompanies this distribution, and is available at
* http://www.eclipse.org/legal/epl-v10.html
*
* Contributors:
* Markus Alexander Kuppe (ecf-dev_eclipse.org <at> lemmster <dot> de) - initial API and implementation
******************************************************************************/
package org.eclipse.ecf.tests.sharedobject.util.reflection;
import java.lang.reflect.InvocationTargetException;
import java.lang.reflect.Method;
import java.util.Arrays;
import junit.framework.TestCase;
import org.eclipse.ecf.core.util.reflection.ClassUtil;
public class ClassUtilTest extends TestCase {
/**
* Test method for {@link org.eclipse.ecf.core.util.reflection.ClassUtil#getMethod(java.lang.Class, java.lang.String, java.lang.Class[])}.
*/
public void testGetPrimitiveMethodWithPrimitive() {
testGetMethod(new Class[] {int.class}, new Class[] {int.class}, new Object[]{new Integer(1)});
}
/**
* Test method for {@link org.eclipse.ecf.core.util.reflection.ClassUtil#getMethod(java.lang.Class, java.lang.String, java.lang.Class[])}.
*/
public void testGetPrimitiveMethodWithObject() {
testGetMethod(new Class[] {Integer.class}, new Class[] {int.class}, new Object[]{new Integer(1)});
}
/**
* Test method for {@link org.eclipse.ecf.core.util.reflection.ClassUtil#getMethod(java.lang.Class, java.lang.String, java.lang.Class[])}.
*/
public void testGetObjectMethodWithObject() {
testGetMethod(new Class[] {Long.class}, new Class[]{Long.class}, new Object[]{new Long(1L)});
}
/**
* Test method for {@link org.eclipse.ecf.core.util.reflection.ClassUtil#getMethod(java.lang.Class, java.lang.String, java.lang.Class[])}.
*/
public void testGetObjectMethodWithPrimitive() {
testGetMethod(new Class[] {long.class}, new Class[]{Long.class}, new Object[]{new Long(1L)});
}
/**
* Test method for {@link org.eclipse.ecf.core.util.reflection.ClassUtil#getMethod(java.lang.Class, java.lang.String, java.lang.Class[])}.
*/
public void testGetObjectMethodWhenBoth() {
testGetMethod(new Class[] {Boolean.class}, new Class[]{Boolean.class}, new Object[]{new Boolean(true)});
}
/**
* Test method for {@link org.eclipse.ecf.core.util.reflection.ClassUtil#getMethod(java.lang.Class, java.lang.String, java.lang.Class[])}.
*/
public void testGetPrimitiveMethodWhenBoth() {
testGetMethod(new Class[] {boolean.class}, new Class[]{boolean.class}, new Object[]{new Boolean(true)});
}
/**
* Test method for {@link org.eclipse.ecf.core.util.reflection.ClassUtil#getMethod(java.lang.Class, java.lang.String, java.lang.Class[])}.
*/
public void testGetMethodWithoutParams() {
testGetMethod(new Class[]{}, new Class[]{}, null);
}
/**
* Test method for {@link org.eclipse.ecf.core.util.reflection.ClassUtil#getMethod(java.lang.Class, java.lang.String, java.lang.Class[])}.
*/
public void testGetObjectMethodFromSuperclassWithPrimitive() {
testGetMethod(new Class[]{float.class}, new Class[]{Float.class}, new Object[]{new Float(1.0)});
}
/**
* Test method for {@link org.eclipse.ecf.core.util.reflection.ClassUtil#getMethod(java.lang.Class, java.lang.String, java.lang.Class[])}.
*/
public void testGetPrimitiveMethodFromSuperclassWithObject() {
testGetMethod(new Class[]{Float.class}, new Class[]{Float.class}, new Object[]{new Float(1.0)});
}
// helper
private void testGetMethod(Class[] searchParameterTypes, Class[] expectedParameterTypes, Object[] params) {
Method method = null;
try {
method = ClassUtil.getMethod(TestClass.class, "foo", searchParameterTypes);
} catch (NoSuchMethodException e) {
fail("failed to match expected the method: " + e.getMessage());
}
final Class[] someParameterTypes = method.getParameterTypes();
assertTrue("Parameters don't match", Arrays.equals(expectedParameterTypes, someParameterTypes));
try {
assertNotNull("executed method from superclass", method.invoke(new TestClass(), params));
} catch (IllegalArgumentException e) {
fail(e.getMessage());
} catch (IllegalAccessException e) {
fail(e.getMessage());
} catch (InvocationTargetException e) {
fail(e.getMessage());
}
}
// helper class
class TestClass extends AbstractTestClass {
public String foo() {return "";}
public String foo(final int i) {return "";}
public String foo(final Long i) {return "";}
public String foo(final boolean b) {return "";}
public String foo(final Boolean b) {return "";}
}
abstract class AbstractTestClass {
public String foo(final Float f) {return "";}
public String foo() {throw new UnsupportedOperationException();}
public String foo(final int i) {throw new UnsupportedOperationException();}
public String foo(final Long i) {throw new UnsupportedOperationException();}
public String foo(final boolean b) {throw new UnsupportedOperationException();};
public String foo(final Boolean b) {throw new UnsupportedOperationException();};
}
}