Pārlūkot izejas kodu

Fixed ComboBox filtering when page length is zero (#14509)

Change-Id: I663b39a37bcdf4383fa76d04acd127503ced11df
tags/7.4.0.beta1
Teemu Pöntelin pirms 9 gadiem
vecāks
revīzija
47a1b8d641

+ 9
- 7
server/src/com/vaadin/ui/ComboBox.java Parādīt failu

@@ -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;

+ 54
- 0
uitest/src/com/vaadin/tests/components/combobox/ComboBoxSuggestionPageLength.java Parādīt failu

@@ -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;
}

}

+ 69
- 0
uitest/src/com/vaadin/tests/components/combobox/ComboBoxSuggestionPageLengthTest.java Parādīt failu

@@ -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;
}

}

Notiek ielāde…
Atcelt
Saglabāt