Project: codjo-data-process
package net.codjo.dataprocess.common.eventsbinder.dynalistener;
import static net.codjo.test.common.matcher.JUnitMatchers.assertThat; 
import static net.codjo.test.common.matcher.JUnitMatchers.equalTo; 
import static net.codjo.test.common.matcher.JUnitMatchers.is; 
import static net.codjo.test.common.matcher.JUnitMatchers.nullValue; 
import static net.codjo.test.common.matcher.JUnitMatchers.sameInstance; 
import java.awt.event.ActionEvent; 
import java.awt.event.ActionListener; 
import java.awt.event.MouseEvent; 
import java.awt.event.MouseListener; 
import java.util.EventObject; 
import javax.swing.JButton; 
import org.junit.Before; 
import org.junit.Test; 
/**
 * 
 */
 
public class DynamicListenerTest { 
 
    private EventCheckerMock eventCheckerMock; 
    private EventReactionMock eventReactionMock; 
 
 
    @Before 
    public void before() { 
        eventCheckerMock = new EventCheckerMock(); 
        eventReactionMock = new EventReactionMock(); 
    } 
 
 
    @Test 
    public void actionListener() { 
        assertThat(eventReactionMock.getEventObject(), nullValue()); 
        assertThat(eventReactionMock.getMethodCalled(), nullValue()); 
 
        ActionEvent actionEvent = new ActionEvent("t"1"t"); 
        ActionListener actionListener = (ActionListener)DynamicListener 
              .createEventListener(ActionListener.class, eventReactionMock, eventCheckerMock); 
 
        actionListener.actionPerformed(actionEvent); 
 
        assertThat("actionPerformed", equalTo(eventReactionMock.getMethodCalled())); 
        assertThat(actionEvent, is(sameInstance(eventReactionMock.getEventObject()))); 
 
        eventReactionMock.clear(); 
        assertThat(eventReactionMock.getEventObject(), nullValue()); 
        assertThat(eventReactionMock.getMethodCalled(), nullValue()); 
 
        eventCheckerMock.setMockCkeckEvent(false); 
        actionListener.actionPerformed(actionEvent); 
        assertThat(eventReactionMock.getEventObject(), nullValue()); 
        assertThat(eventReactionMock.getMethodCalled(), nullValue()); 
    } 
 
 
    @Test 
    public void mouseListener() { 
        assertThat(eventReactionMock.getEventObject(), nullValue()); 
        assertThat(eventReactionMock.getMethodCalled(), nullValue()); 
 
        MouseEvent mouseEvent = new MouseEvent(new JButton(), 111111false); 
        MouseListener mouseListener = (MouseListener)DynamicListener 
              .createEventListener(MouseListener.class, eventReactionMock, eventCheckerMock); 
 
        mouseListener.mouseClicked(mouseEvent); 
        assertThat("mouseClicked", equalTo(eventReactionMock.getMethodCalled())); 
        assertThat(mouseEvent, is(sameInstance(eventReactionMock.getEventObject()))); 
        eventReactionMock.clear(); 
        assertThat(eventReactionMock.getEventObject(), nullValue()); 
        assertThat(eventReactionMock.getMethodCalled(), nullValue()); 
 
        mouseListener.mouseEntered(mouseEvent); 
        assertThat("mouseEntered", equalTo(eventReactionMock.getMethodCalled())); 
        assertThat(mouseEvent, is(sameInstance(eventReactionMock.getEventObject()))); 
        eventReactionMock.clear(); 
        assertThat(eventReactionMock.getEventObject(), nullValue()); 
        assertThat(eventReactionMock.getMethodCalled(), nullValue()); 
 
        mouseListener.mouseExited(mouseEvent); 
        assertThat("mouseExited", equalTo(eventReactionMock.getMethodCalled())); 
        assertThat(mouseEvent, is(sameInstance(eventReactionMock.getEventObject()))); 
        eventReactionMock.clear(); 
        assertThat(eventReactionMock.getEventObject(), nullValue()); 
        assertThat(eventReactionMock.getMethodCalled(), nullValue()); 
 
        eventCheckerMock.setMockCkeckEvent(false); 
        mouseListener.mouseExited(mouseEvent); 
        assertThat(eventReactionMock.getEventObject(), nullValue()); 
        assertThat(eventReactionMock.getMethodCalled(), nullValue()); 
    } 
 
 
    private static class EventCheckerMock implements EventChecker { 
        private boolean mockCkeckEvent = true
 
 
        public void setMockCkeckEvent(boolean mockCkeckEvent) { 
            this.mockCkeckEvent = mockCkeckEvent; 
        } 
 
 
        public boolean checkEvent(EventObject eventObject, String methodCalled) { 
            return mockCkeckEvent; 
        } 
    } 
 
    public static class EventReactionMock implements EventReaction { 
        private EventObject eventObject; 
        private String methodCalled; 
 
 
        public EventObject getEventObject() { 
            return eventObject; 
        } 
 
 
        public String getMethodCalled() { 
            return methodCalled; 
        } 
 
 
        public void clear() { 
            eventObject = null
            methodCalled = null
        } 
 
 
        public void reactToAnEvent(EventObject receivedEventObject, String receivedMethodCalled) { 
            this.eventObject = receivedEventObject; 
            this.methodCalled = receivedMethodCalled; 
        } 
    } 
}