package de.lessvoid.nifty.controls.checkbox;
import static org.easymock.EasyMock.capture;
import static org.easymock.EasyMock.createMock;
import static org.easymock.EasyMock.replay;
import static org.easymock.EasyMock.verify;
import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertFalse;
import org.easymock.Capture;
import org.junit.After;
import org.junit.Before;
import org.junit.Test;
import de.lessvoid.nifty.controls.CheckBoxStateChangedEvent;
public class CheckBoxImplTest {
private CheckBoxImpl checkBox = new CheckBoxImpl(null);
private CheckBoxView view;
private Capture<CheckBoxStateChangedEvent> capturedEvent = new Capture<CheckBoxStateChangedEvent>();
@Before
public void before() {
view = createMock(CheckBoxView.class);
checkBox.bindToView(view);
}
@After
public void after() {
verify(view);
}
@Test
public void testDefault() {
replay(view);
assertFalse(checkBox.isChecked());
}
@Test
public void testCheck() {
expectViewUpdate(true);
checkBox.check();
assertCheckBoxState(true);
}
@Test
public void testUncheck() {
replay(view);
checkBox.uncheck();
assertEquals(false, checkBox.isChecked());
}
@Test
public void testSetToChecked() {
expectViewUpdate(true);
checkBox.setChecked(true);
assertCheckBoxState(true);
}
@Test
public void testSetToUnchecked() {
replay(view);
checkBox.setChecked(false);
assertEquals(false, checkBox.isChecked());
}
@Test
public void testToggle() {
expectViewUpdate(true);
checkBox.toggle();
assertCheckBoxState(true);
}
@Test
public void testToggleToOff() {
view.update(true);
view.publish(capture(capturedEvent));
replay(view);
checkBox.uncheck();
checkBox.toggle();
assertEquals(true, capturedEvent.getValue().isChecked());
assertEquals(true, checkBox.isChecked());
}
private void expectViewUpdate(final boolean expectedCheck) {
view.update(expectedCheck);
view.publish(capture(capturedEvent));
replay(view);
}
private void assertCheckBoxState(final boolean expectedState) {
assertEquals(expectedState, checkBox.isChecked());
assertEquals(expectedState, capturedEvent.getValue().isChecked());
}
}