/* * codjo.net * * Common Apache License 2.0 */ package net.codjo.dataprocess.common.eventsbinder; import net.codjo.dataprocess.common.eventsbinder.annotations.events.OnAction; import net.codjo.dataprocess.common.eventsbinder.annotations.managers.OnActionAnnotationManager; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; import java.lang.reflect.Method; import java.util.EventObject; import junit.framework.TestCase; /** * Classe de test de {@link net.codjo.dataprocess.common.eventsbinder.EventsBinder}. */ public class EventsBinderTest extends TestCase { private EventsBinder eventsBinder; private LogicMock logicMock; private BoundObject boundObject; @Override protected void setUp() throws Exception { eventsBinder = new EventsBinder(); logicMock = new LogicMock(); boundObject = new BoundObject(); } public void test_mountAnnotationManager() throws Exception { OnEventFakeMock fakeAnnotation = logicMock.getClass().getMethod("badMock1").getAnnotation(OnEventFakeMock.class); assertNull(eventsBinder.getAnnotationManagerFor(fakeAnnotation)); try { eventsBinder.mountAnnotationManager(fakeAnnotation); } catch (EventBinderException ex) { assertEquals(EventBinderException.printNotABindAnnotation(fakeAnnotation), ex.getMessage()); } assertNull(eventsBinder.getAnnotationManagerFor(fakeAnnotation)); OnAction annotation = logicMock.getClass().getMethod("mock1",EventObject.class).getAnnotation(OnAction.class); assertNull(eventsBinder.getAnnotationManagerFor(annotation)); eventsBinder.mountAnnotationManager(annotation); assertNotNull(eventsBinder.getAnnotationManagerFor(annotation)); assertTrue(eventsBinder.getAnnotationManagerFor(annotation) instanceof OnActionAnnotationManager); } public void test_bindOneAnnotationToAllProperties() throws Exception { String methodName = "mock1"; Method currentMethod = logicMock.getClass().getMethod(methodName, EventObject.class); OnAction annotation = currentMethod.getAnnotation(OnAction.class); eventsBinder.mountAnnotationManager(annotation); MethodCallEventReaction methodCallReaction = new MethodCallEventReaction(logicMock, currentMethod, null, boundObject); String[] propertiesNames = annotation.propertiesBound(); AnnotationManager annotationManager = eventsBinder.getAnnotationManagerFor(annotation); eventsBinder.bindOneAnnotationToAllProperties(propertiesNames, boundObject, annotationManager, annotation, methodCallReaction); ActionListener[] actionListeners = boundObject.getButton1().getListeners(ActionListener.class); ActionEvent event = new ActionEvent(new Object(), 1, ""); actionListeners[0].actionPerformed(event); assertSame(event, logicMock.getEventObject()); assertEquals(methodName, logicMock.getCalled()); } public void test_bindOneAnnotation() throws Exception { String methodName = "mock1"; Method currentMethod = logicMock.getClass().getMethod(methodName, EventObject.class); OnAction annotation = currentMethod.getAnnotation(OnAction.class); eventsBinder.mountAnnotationManager(annotation); eventsBinder.bindOneAnnotation(annotation, logicMock, currentMethod, null, boundObject); ActionListener[] actionListeners = boundObject.getButton1().getListeners(ActionListener.class); ActionEvent event = new ActionEvent(new Object(), 1, ""); actionListeners[0].actionPerformed(event); assertSame(event, logicMock.getEventObject()); assertEquals(methodName, logicMock.getCalled()); actionListeners = boundObject.getButton2().getListeners(ActionListener.class); ActionEvent event2 = new ActionEvent(new Object(), 1, ""); actionListeners[0].actionPerformed(event2); assertSame(event2, logicMock.getEventObject()); assertEquals(methodName, logicMock.getCalled()); } public void test_bind() throws Exception { String methodName = "mock1"; eventsBinder.bind(logicMock, boundObject); ActionListener[] actionListeners = boundObject.getButton1().getListeners(ActionListener.class); ActionEvent event = new ActionEvent(new Object(), 1, ""); actionListeners[0].actionPerformed(event); assertSame(event, logicMock.getEventObject()); assertEquals(methodName, logicMock.getCalled()); actionListeners = boundObject.getButton2().getListeners(ActionListener.class); ActionEvent event2 = new ActionEvent(new Object(), 1, ""); actionListeners[0].actionPerformed(event2); assertSame(event2, logicMock.getEventObject()); assertEquals(methodName, logicMock.getCalled()); } }