package de.lessvoid.nifty.controls.listbox;
import static org.easymock.EasyMock.createMock;
import static org.easymock.EasyMock.isA;
import static org.easymock.EasyMock.replay;
import static org.easymock.EasyMock.verify;
import static org.junit.Assert.assertEquals;
import org.junit.After;
import org.junit.Before;
import org.junit.Test;
import de.lessvoid.nifty.controls.ListBoxSelectionChangedEvent;
public class ListBoxFocusElementTest {
private static final int TOO_LARGE_INDEX = 4;
private ListBoxImpl<TestItem> listBox = new ListBoxImpl<TestItem>(null);
private TestItem o1 = new TestItem("o1");
private TestItem o2 = new TestItem("o2");
private TestItem o3 = new TestItem("o3");
private TestItem o4 = new TestItem("o4");
private ListBoxView<TestItem> viewMock;
@Before
public void before() {
listBox.addItem(o1);
listBox.addItem(o2);
listBox.addItem(o3);
listBox.addItem(o4);
viewMock = createMock(ListBoxView.class);
listBox.bindToView(viewMock, 2);
}
@After
public void after() {
verify(viewMock);
}
@Test
public void testGetFocusItemDefault() {
replay(viewMock);
assertEquals(0, listBox.getFocusItemIndex());
assertEquals(o1, listBox.getFocusItem());
}
@Test
public void testSetFocusItemByIndexInvalid() {
replay(viewMock);
listBox.setFocusItemByIndex(-1);
assertEquals(0, listBox.getFocusItemIndex());
}
@Test
public void testSetFocusItemByIndexTooLarge() {
replay(viewMock);
listBox.setFocusItemByIndex(TOO_LARGE_INDEX);
assertEquals(0, listBox.getFocusItemIndex());
}
@Test
public void testSetFocusItemByIndex0() {
viewMock.display(ListBoxTestTool.buildValues(o1, o2), 0, ListBoxTestTool.buildValuesSelection());
replay(viewMock);
listBox.setFocusItemByIndex(0);
assertEquals(0, listBox.getFocusItemIndex());
}
@Test
public void testSetFocusItemByIndex1() {
viewMock.display(ListBoxTestTool.buildValues(o1, o2), 1, ListBoxTestTool.buildValuesSelection());
replay(viewMock);
listBox.setFocusItemByIndex(1);
assertEquals(1, listBox.getFocusItemIndex());
}
@Test
public void testSetFocusItemByIndex2() {
viewMock.display(ListBoxTestTool.buildValues(o2, o3), 1, ListBoxTestTool.buildValuesSelection());
viewMock.scrollTo(1);
replay(viewMock);
listBox.setFocusItemByIndex(2);
assertEquals(2, listBox.getFocusItemIndex());
}
@Test
public void testSetFocusItemByIndex3() {
viewMock.display(ListBoxTestTool.buildValues(o3, o4), 1, ListBoxTestTool.buildValuesSelection());
viewMock.scrollTo(2);
replay(viewMock);
listBox.setFocusItemByIndex(3);
assertEquals(3, listBox.getFocusItemIndex());
}
@Test
public void testSetFocusItem() {
viewMock.display(ListBoxTestTool.buildValues(o1, o2), 1, ListBoxTestTool.buildValuesSelection());
replay(viewMock);
listBox.setFocusItem(o2);
assertEquals(o2, listBox.getFocusItem());
assertEquals(1, listBox.getFocusItemIndex());
}
@Test
public void testSetFocusItemUnknown() {
replay(viewMock);
listBox.setFocusItem(new TestItem("test"));
}
@Test
public void testSetFocusScroll() {
replay(viewMock);
listBox.setFocusItem(new TestItem("test"));
assertEquals(o1, listBox.getFocusItem());
assertEquals(0, listBox.getFocusItemIndex());
}
@Test
public void testFocusItemAfterDelete() {
viewMock.updateTotalCount(3);
viewMock.display(ListBoxTestTool.buildValues(o2, o3), 0, ListBoxTestTool.buildValuesSelection());
viewMock.publish(isA(ListBoxSelectionChangedEvent.class));
replay(viewMock);
listBox.removeItem(o1);
assertEquals(0, listBox.getFocusItemIndex());
assertEquals(o2, listBox.getFocusItem());
}
@Test
public void testRemoveFocusItemBeingTheLastItem() {
viewMock.scrollTo(2);
viewMock.display(ListBoxTestTool.buildValues(o3, o4), 1, ListBoxTestTool.buildValuesSelection());
viewMock.updateTotalCount(3);
viewMock.scrollTo(1);
viewMock.display(ListBoxTestTool.buildValues(o2, o3), 1, ListBoxTestTool.buildValuesSelection());
viewMock.publish(isA(ListBoxSelectionChangedEvent.class));
viewMock.scrollTo(1);
viewMock.display(ListBoxTestTool.buildValues(o2, o3), 1, ListBoxTestTool.buildValuesSelection());
replay(viewMock);
listBox.setFocusItem(o4);
listBox.removeItem(o4);
assertEquals(o3, listBox.getFocusItem());
assertEquals(2, listBox.getFocusItemIndex());
}
}