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(), 1, 1, 1, 1, 1, 1, false); 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; } } }