package glug.gui.timelinecursor; import static org.hamcrest.MatcherAssert.assertThat; import static org.hamcrest.Matchers.equalTo; import static org.hamcrest.Matchers.nullValue; import static org.joda.time.Duration.standardSeconds; import glug.gui.timelinecursor.TimelineCursor.CursorPositionChanged; import glug.model.time.LogInstant; import glug.model.time.LogInterval; import javax.swing.event.ChangeEvent; import javax.swing.event.ChangeListener; import org.junit.Test; public class TimelineCursorTest { @Test public void shouldFireAChangeEventThatContainsCorrectOldAndNewState() { TimelineCursor cursor = new TimelineCursor(); LogInterval intervalSelected = new LogInterval(standardSeconds(5),new LogInstant(8000)); cursor.setDot(intervalSelected.getStart()); cursor.moveDot(intervalSelected.getEnd()); ChangeListenerStub changeListenerStub = new ChangeListenerStub(); cursor.addChangeListener(changeListenerStub); LogInstant newDot = new LogInstant(18000); cursor.setDot(newDot); TimelineCursor.CursorPositionChanged o = (CursorPositionChanged) changeListenerStub.getChangeEvent().getSource(); assertThat(o.getOldState().getSelectedInterval(), equalTo(intervalSelected)); assertThat(o.getNewState().getSelectedInterval(), nullValue()); assertThat(o.getNewState().getDot(), equalTo(newDot)); } static class ChangeListenerStub implements ChangeListener { private ChangeEvent changeEvent; @Override public void stateChanged(ChangeEvent changeEvent) { this.changeEvent = changeEvent; } public ChangeEvent getChangeEvent() { return changeEvent; } } }