package com.codiform.moo; import java.lang.reflect.InvocationTargetException; import java.lang.reflect.Method; import org.junit.Ignore; import org.junit.Test; public class AssignmentTestCase { @Test public void testPrimitiveAssignment() throws IllegalArgumentException, IllegalAccessException, InvocationTargetException, SecurityException, NoSuchMethodException { Method getter = getClass().getMethod("getFloat"); Method setter = getClass().getMethod("setDouble", double.class); Object result = getter.invoke(this); setter.invoke(this, result); } @Test public void testAutomaticConversionAssignment() throws IllegalArgumentException, IllegalAccessException, InvocationTargetException, SecurityException, NoSuchMethodException { Method getter = getClass().getMethod("getFloat"); Method setter = getClass().getMethod("setFloat", float.class); Object result = getter.invoke(this); setter.invoke(this, result); } @Test @Ignore("Reflection Doesn't Know") public void testAutomaticConversionAssignable() { System.out.println("l->i: " + long.class.isAssignableFrom(int.class)); System.out.println("i->l: " + int.class.isAssignableFrom(long.class)); } @Test @Ignore("Reflection Doesn't Know") public void testPrimitiveAssignable() throws SecurityException, NoSuchMethodException, IllegalArgumentException, IllegalAccessException, InvocationTargetException { Method getter = getClass().getMethod("getFloat"); Method setter = getClass().getMethod("setFloat", float.class); Object result = getter.invoke(this); assertCanAssign(setter, result); } private void assertCanAssign(Method setter, Object result) { Class<?> parameterClass = setter.getParameterTypes()[0]; Class<? extends Object> resultClass = result.getClass(); System.out.println("Setter Parameter: " + parameterClass.getName()); System.out.println("Result: " + result + " (" + resultClass.getName() + ")"); System.out .println("parameterClass.isAssignableFrom(result.getClass() == " + parameterClass.isAssignableFrom(result.getClass())); System.out.println("resultClass.isAssignableFrom(parameterClass == " + resultClass.isAssignableFrom(parameterClass)); System.out.println("parameterClass.instanceOf(result) == " + parameterClass.isInstance(result)); } public float getFloat() { return 1F; } public void setFloat(float item) { // do nothing } public void setDouble(double item) { //do nothing } }