package roboguice.event; import static org.junit.Assert.assertEquals; import java.lang.reflect.Method; import org.junit.Before; import org.junit.Test; import roboguice.event.eventListener.ObserverMethodListener; /** * Test class exercising the ObserverReferences * * @author John Ericksen */ public class ObserverReferenceTest { protected EqualityTestClass test; protected EqualityTestClass test2; protected Method methodOneBase; protected Method methodOne; protected Method methodTwoBase; protected Method methodTwo; @Before public void setup() throws NoSuchMethodException { methodOne = EqualityTestClass.class.getDeclaredMethod("one", EventOne.class); methodOneBase = EqualityTestOverrideClass.class.getDeclaredMethod("one", EventOne.class); methodTwo = EqualityTestClass.class.getDeclaredMethod("two", EventTwo.class); methodTwoBase = EqualityTestOverrideClass.class.getDeclaredMethod("two", EventTwo.class); test = new EqualityTestClass(); test2 = new EqualityTestClass(); } @Test public void testEquality() { ObserverMethodListener<EqualityTestClass> observerRefOne = new ObserverMethodListener<EqualityTestClass>(test, methodOne); ObserverMethodListener<EqualityTestClass> observerRefTwo = new ObserverMethodListener<EqualityTestClass>(test, methodOneBase); assertEquals(observerRefOne, observerRefTwo); assertEquals(observerRefOne.hashCode(), observerRefTwo.hashCode()); } @Test public void testEqualityOfSameGuts() { ObserverMethodListener<EqualityTestClass> observerRefOne = new ObserverMethodListener<EqualityTestClass>(test, methodOne); ObserverMethodListener<EqualityTestClass> observerRefTwo = new ObserverMethodListener<EqualityTestClass>(test, methodOne); assertEquals(observerRefOne, observerRefTwo); assertEquals(observerRefOne.hashCode(), observerRefTwo.hashCode()); } @Test public void testInequalityBetweenSameClass() { ObserverMethodListener<EqualityTestClass> observerRefOne = new ObserverMethodListener<EqualityTestClass>(test, methodOne); ObserverMethodListener<EqualityTestClass> observerRefTwo = new ObserverMethodListener<EqualityTestClass>(test, methodTwo); assert !observerRefOne.equals(observerRefTwo) ; assert !Integer.valueOf(observerRefOne.hashCode()).equals(observerRefTwo.hashCode()); } @Test public void testInequalityBetweenDifferentClass() { ObserverMethodListener<EqualityTestClass> observerRefOne = new ObserverMethodListener<EqualityTestClass>(test, methodOne); ObserverMethodListener<EqualityTestClass> observerRefTwo = new ObserverMethodListener<EqualityTestClass>(test, methodTwoBase); assert !observerRefOne.equals(observerRefTwo) ; assert !Integer.valueOf(observerRefOne.hashCode()).equals(observerRefTwo.hashCode()); } @Test public void testInequalityBetweenDifferentInstances() { ObserverMethodListener<EqualityTestClass> observerRefOne = new ObserverMethodListener<EqualityTestClass>(test, methodOne); ObserverMethodListener<EqualityTestClass> observerRefTwo = new ObserverMethodListener<EqualityTestClass>(test2, methodOne); assert !observerRefOne.equals(observerRefTwo) ; assert !Integer.valueOf(observerRefOne.hashCode()).equals(observerRefTwo.hashCode()); } @Test public void testInequalityBetweenDifferentInstancesAndDifferentMethods() { ObserverMethodListener<EqualityTestClass> observerRefOne = new ObserverMethodListener<EqualityTestClass>(test, methodOne); ObserverMethodListener<EqualityTestClass> observerRefTwo = new ObserverMethodListener<EqualityTestClass>(test2, methodTwoBase); assert !observerRefOne.equals(observerRefTwo) ; assert !Integer.valueOf(observerRefOne.hashCode()).equals(observerRefTwo.hashCode()); } /*@Test public void testEqualityBetweenDecoration() { EventListener<EqualityTestClass> observerRefOne = new ObserverMethodListener<EqualityTestClass>(test, methodOne); EventListener<EqualityTestClass> observerRefTwo = new AsynchronousEventListenerDecorator<EqualityTestClass>( new ObserverMethodListener<EqualityTestClass>(test, methodOne), new RunnableAsyncTaskAdaptorFactory()); assert !observerRefOne.equals(observerRefTwo) ; assert !Integer.valueOf(observerRefOne.hashCode()).equals(observerRefTwo.hashCode()); }*/ public class EqualityTestClass{ public void one(EventOne one){} public void two(EventTwo two){} } public class EqualityTestOverrideClass extends EqualityTestClass{ public void one(EventOne one){} public void two(EventTwo two){} } }