package com.vaadin.v7.ui;
import java.util.HashMap;
import java.util.List;
import java.util.Locale;
import java.util.Map;
import org.junit.Assert;
import org.junit.Before;
import org.junit.Test;
import com.vaadin.v7.shared.ui.combobox.FilteringMode;
public class ComboBoxTest {
private ComboBox comboBox;
@Before
public void setup() {
comboBox = new ComboBox();
comboBox.setLocale(Locale.ENGLISH);
}
@Test
public void options_noFilter() {
ComboBox comboBox = new ComboBox();
for (int i = 0; i < 10; i++) {
comboBox.addItem("" + i);
}
List<?> options = comboBox.getFilteredOptions();
Assert.assertEquals(10, options.size());
for (int i = 0; i < 10; i++) {
Assert.assertEquals("" + i, options.get(i));
}
}
@Test
public void options_inMemoryFilteringStartsWith() {
for (int i = 0; i < 21; i++) {
comboBox.addItem("" + i);
}
setFilterAndCurrentPage(comboBox, "1", 0);
List<?> options = comboBox.getFilteredOptions();
Assert.assertEquals(11, options.size());
}
@Test
public void options_inMemoryFilteringContains() {
comboBox.setFilteringMode(FilteringMode.CONTAINS);
for (int i = 0; i < 21; i++) {
comboBox.addItem("" + i);
}
setFilterAndCurrentPage(comboBox, "2", 0);
List<?> options = comboBox.getFilteredOptions();
Assert.assertEquals(3, options.size());
}
private static void setFilterAndCurrentPage(ComboBox comboBox,
String filterString, int currentPage) {
Map<String, Object> variables = new HashMap<String, Object>();
variables.put("filter", filterString);
variables.put("page", currentPage);
comboBox.changeVariables(null, variables);
}
@Test
public void getOptions_moreThanOnePage_noNullItem() {
int nrOptions = comboBox.getPageLength() * 2;
for (int i = 0; i < nrOptions; i++) {
comboBox.addItem("" + i);
}
setFilterAndCurrentPage(comboBox, "", 0);
List<?> goingToClient = comboBox
.sanitizeList(comboBox.getFilteredOptions(), false);
Assert.assertEquals(comboBox.getPageLength(), goingToClient.size());
}
@Test
public void getOptions_moreThanOnePage_nullItem() {
int nrOptions = comboBox.getPageLength() * 2;
for (int i = 0; i < nrOptions; i++) {
comboBox.addItem("" + i);
}
setFilterAndCurrentPage(comboBox, "", 0);
List<?> goingToClient = comboBox
.sanitizeList(comboBox.getFilteredOptions(), true);
// Null item is shown on first page
Assert.assertEquals(comboBox.getPageLength() - 1, goingToClient.size());
setFilterAndCurrentPage(comboBox, "", 1);
goingToClient = comboBox.sanitizeList(comboBox.getFilteredOptions(),
true);
// Null item is not shown on the second page
Assert.assertEquals(comboBox.getPageLength(), goingToClient.size());
}
@Test
public void getOptions_lessThanOnePage_noNullItem() {
int nrOptions = comboBox.getPageLength() / 2;
for (int i = 0; i < nrOptions; i++) {
comboBox.addItem("" + i);
}
setFilterAndCurrentPage(comboBox, "", 0);
List<?> goingToClient = comboBox
.sanitizeList(comboBox.getFilteredOptions(), false);
Assert.assertEquals(nrOptions, goingToClient.size());
}
@Test
public void getOptions_lessThanOnePage_withNullItem() {
int nrOptions = comboBox.getPageLength() / 2;
for (int i = 0; i < nrOptions; i++) {
comboBox.addItem("" + i);
}
setFilterAndCurrentPage(comboBox, "", 0);
List<?> goingToClient = comboBox
.sanitizeList(comboBox.getFilteredOptions(), true);
// All items + null still fit on one page
Assert.assertEquals(nrOptions, goingToClient.size());
}
@Test
public void getOptions_exactlyOnePage_withNullItem() {
int nrOptions = comboBox.getPageLength();
for (int i = 0; i < nrOptions; i++) {
comboBox.addItem("" + i);
}
setFilterAndCurrentPage(comboBox, "", 0);
List<?> goingToClient = comboBox
.sanitizeList(comboBox.getFilteredOptions(), true);
// Null item on first page
Assert.assertEquals(nrOptions - 1, goingToClient.size());
setFilterAndCurrentPage(comboBox, "", 1);
goingToClient = comboBox.sanitizeList(comboBox.getFilteredOptions(),
true);
// All but one was on the first page
Assert.assertEquals(1, goingToClient.size());
}
}