Change-Id: I663b39a37bcdf4383fa76d04acd127503ced11dftags/7.4.0.beta1
@@ -151,6 +151,11 @@ public class ComboBox extends AbstractSelect implements | |||
markAsDirty(); | |||
} | |||
private boolean isFilteringNeeded() { | |||
return filterstring != null && filterstring.length() > 0 | |||
&& filteringMode != FilteringMode.OFF; | |||
} | |||
@Override | |||
public void paintContent(PaintTarget target) throws PaintException { | |||
isPainting = true; | |||
@@ -210,9 +215,7 @@ public class ComboBox extends AbstractSelect implements | |||
filterstring = ""; | |||
} | |||
boolean nullFilteredOut = filterstring != null | |||
&& !"".equals(filterstring) | |||
&& filteringMode != FilteringMode.OFF; | |||
boolean nullFilteredOut = isFilteringNeeded(); | |||
// null option is needed and not filtered out, even if not on | |||
// current | |||
// page | |||
@@ -351,8 +354,8 @@ public class ComboBox extends AbstractSelect implements | |||
protected List<?> getOptionsWithFilter(boolean needNullSelectOption) { | |||
Container container = getContainerDataSource(); | |||
if (pageLength == 0) { | |||
// no paging: return all items | |||
if (pageLength == 0 && !isFilteringNeeded()) { | |||
// no paging or filtering: return all items | |||
filteredSize = container.size(); | |||
assert filteredSize >= 0; | |||
return new ArrayList<Object>(container.getItemIds()); | |||
@@ -593,8 +596,7 @@ public class ComboBox extends AbstractSelect implements | |||
* @return | |||
*/ | |||
protected List<?> getFilteredOptions() { | |||
if (null == filterstring || "".equals(filterstring) | |||
|| FilteringMode.OFF == filteringMode) { | |||
if (!isFilteringNeeded()) { | |||
prevfilterstring = null; | |||
filteredOptions = new LinkedList<Object>(getItemIds()); | |||
return filteredOptions; |
@@ -0,0 +1,54 @@ | |||
/* | |||
* Copyright 2000-2014 Vaadin Ltd. | |||
* | |||
* Licensed under the Apache License, Version 2.0 (the "License"); you may not | |||
* use this file except in compliance with the License. You may obtain a copy of | |||
* the License at | |||
* | |||
* http://www.apache.org/licenses/LICENSE-2.0 | |||
* | |||
* Unless required by applicable law or agreed to in writing, software | |||
* distributed under the License is distributed on an "AS IS" BASIS, WITHOUT | |||
* WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the | |||
* License for the specific language governing permissions and limitations under | |||
* the License. | |||
*/ | |||
package com.vaadin.tests.components.combobox; | |||
import java.util.Arrays; | |||
import java.util.List; | |||
import com.vaadin.server.VaadinRequest; | |||
import com.vaadin.shared.ui.combobox.FilteringMode; | |||
import com.vaadin.tests.components.AbstractTestUI; | |||
import com.vaadin.ui.ComboBox; | |||
public class ComboBoxSuggestionPageLength extends AbstractTestUI { | |||
private static List<String> items = Arrays.asList("abc", "cde", "efg", | |||
"ghi", "ijk"); | |||
@Override | |||
protected void setup(VaadinRequest request) { | |||
ComboBox cb = new ComboBox("Page length 0", items); | |||
cb.setPageLength(0); | |||
cb.setFilteringMode(FilteringMode.CONTAINS); | |||
addComponent(cb); | |||
cb = new ComboBox("Page length 2", items); | |||
cb.setPageLength(2); | |||
cb.setFilteringMode(FilteringMode.CONTAINS); | |||
addComponent(cb); | |||
} | |||
@Override | |||
protected String getTestDescription() { | |||
return "Filtering should also work when page length is set to zero."; | |||
} | |||
@Override | |||
protected Integer getTicketNumber() { | |||
return 14509; | |||
} | |||
} |
@@ -0,0 +1,69 @@ | |||
/* | |||
* Copyright 2000-2014 Vaadin Ltd. | |||
* | |||
* Licensed under the Apache License, Version 2.0 (the "License"); you may not | |||
* use this file except in compliance with the License. You may obtain a copy of | |||
* the License at | |||
* | |||
* http://www.apache.org/licenses/LICENSE-2.0 | |||
* | |||
* Unless required by applicable law or agreed to in writing, software | |||
* distributed under the License is distributed on an "AS IS" BASIS, WITHOUT | |||
* WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the | |||
* License for the specific language governing permissions and limitations under | |||
* the License. | |||
*/ | |||
package com.vaadin.tests.components.combobox; | |||
import static org.junit.Assert.assertEquals; | |||
import java.util.ArrayList; | |||
import java.util.Arrays; | |||
import java.util.List; | |||
import org.junit.Test; | |||
import org.openqa.selenium.WebElement; | |||
import com.vaadin.testbench.By; | |||
import com.vaadin.testbench.elements.ComboBoxElement; | |||
import com.vaadin.tests.tb3.MultiBrowserTest; | |||
public class ComboBoxSuggestionPageLengthTest extends MultiBrowserTest { | |||
@Test | |||
public void testSuggestionsPageLength0() { | |||
openTestURL(); | |||
WebElement textboxPageLength0 = $(ComboBoxElement.class).first() | |||
.findElement(By.tagName("input")); | |||
textboxPageLength0.sendKeys("c"); | |||
assertSuggestions("abc", "cde"); | |||
} | |||
@Test | |||
public void testSuggestionsPageLength2() { | |||
openTestURL(); | |||
WebElement textboxPageLength2 = $(ComboBoxElement.class).get(1) | |||
.findElement(By.tagName("input")); | |||
textboxPageLength2.sendKeys("e"); | |||
assertSuggestions("cde", "efg"); | |||
} | |||
private void assertSuggestions(String... expected) { | |||
assertEquals(Arrays.asList(expected), getSuggestionsOnScreen()); | |||
} | |||
private List<String> getSuggestionsOnScreen() { | |||
List<WebElement> suggestionElements = getDriver() | |||
.findElements( | |||
By.cssSelector(".v-filterselect-suggestpopup .gwt-MenuItem span")); | |||
List<String> suggestions = new ArrayList<String>(); | |||
for (WebElement suggestion : suggestionElements) { | |||
suggestions.add(suggestion.getText()); | |||
} | |||
return suggestions; | |||
} | |||
} |