package de.lessvoid.nifty.controls.listbox;
import static org.easymock.EasyMock.createMock;
import static org.easymock.EasyMock.expect;
import static org.easymock.EasyMock.replay;
import static org.easymock.EasyMock.verify;
import static org.junit.Assert.assertEquals;
import java.util.ArrayList;
import java.util.List;
import org.junit.After;
import org.junit.Before;
import org.junit.Test;
import de.lessvoid.nifty.controls.ListBox;
public class ListBoxAddItemTest {
private static final int WIDTH_101 = 101;
private static final int WIDTH_100 = 100;
private ListBoxImpl<TestItem> listBox;
private TestItem o1 = new TestItem("o1");
private TestItem o2 = new TestItem("o2");
private ListBoxView<TestItem> viewMock;
@SuppressWarnings("unchecked")
@Before
public void before() {
viewMock = createMock(ListBoxView.class);
ListBox<TestItem> listMock = createMock(ListBox.class);
listBox = new ListBoxImpl<TestItem>(listMock);
assertEquals(0, listBox.bindToView(viewMock, 2));
}
@After
public void after() {
verify(viewMock);
}
@Test
public void testAddItem() {
expect(viewMock.getWidth(o1)).andReturn(WIDTH_100);
viewMock.updateTotalWidth(WIDTH_100);
viewMock.updateTotalCount(1);
viewMock.display(ListBoxTestTool.buildValues(o1, null), 0, ListBoxTestTool.buildValuesSelection());
replay(viewMock);
listBox.addItem(o1);
assertListBoxContent(o1);
}
@Test
public void testAddItemTwice() {
expect(viewMock.getWidth(o1)).andReturn(WIDTH_100);
viewMock.updateTotalWidth(WIDTH_100);
viewMock.updateTotalCount(1);
viewMock.display(ListBoxTestTool.buildValues(o1, null), 0, ListBoxTestTool.buildValuesSelection());
viewMock.scrollTo(0);
viewMock.display(ListBoxTestTool.buildValues(o1, o2), 0, ListBoxTestTool.buildValuesSelection());
expect(viewMock.getWidth(o2)).andReturn(WIDTH_100);
viewMock.updateTotalCount(2);
viewMock.display(ListBoxTestTool.buildValues(o1, o2), 0, ListBoxTestTool.buildValuesSelection());
replay(viewMock);
listBox.addItem(o1);
listBox.addItem(o2);
assertListBoxContent(o1, o2);
}
@Test
public void testInsertItem() {
expect(viewMock.getWidth(o1)).andReturn(WIDTH_100);
viewMock.updateTotalWidth(WIDTH_100);
viewMock.updateTotalCount(1);
viewMock.display(ListBoxTestTool.buildValues(o1, null), 0, ListBoxTestTool.buildValuesSelection());
replay(viewMock);
listBox.insertItem(o1, 0);
assertListBoxContent(o1);
}
@Test
public void testAddAllItems() {
expect(viewMock.getWidth(o1)).andReturn(WIDTH_100);
viewMock.updateTotalCount(2);
viewMock.display(ListBoxTestTool.buildValues(o1, o2), 0, ListBoxTestTool.buildValuesSelection());
expect(viewMock.getWidth(o2)).andReturn(WIDTH_101);
viewMock.updateTotalWidth(WIDTH_101);
replay(viewMock);
List<TestItem> itemsToAdd = new ArrayList<TestItem>();
itemsToAdd.add(o1);
itemsToAdd.add(o2);
listBox.addAllItems(itemsToAdd);
assertListBoxContent(o1, o2);
}
private void assertListBoxContent(final TestItem... expected) {
assertEquals(expected.length, listBox.getItems().size());
int i = 0;
for (TestItem e : expected) {
assertEquals(e, listBox.getItems().get(i));
i++;
}
}
}