Browse Source

Fix compatibility ComboBox filtering when page length is zero. (#12016)

Issue #11246, slightly modified cherry-pick from #11247
tags/8.12.0.alpha1
Anna Koskinen 3 years ago
parent
commit
222705a48b
No account linked to committer's email address

+ 3
- 1
compatibility-server/src/main/java/com/vaadin/v7/ui/ComboBox.java View File

@@ -620,7 +620,9 @@ public class ComboBox extends AbstractSelect
// page length usable for non-null items
int effectivePageLength = pageLength
- (needNullSelectOption && (currentPage == 0) ? 1 : 0);
return Math.min(size - 1, first + effectivePageLength - 1);
// zero pageLength implies infinite page size
return pageLength == 0 ? size - 1
: Math.min(size - 1, first + effectivePageLength - 1);
}

/**

+ 89
- 0
uitest/src/main/java/com/vaadin/v7/tests/components/combobox/ComboboxPageLengthZeroFilter.java View File

@@ -0,0 +1,89 @@
/*
* Copyright 2000-2020 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.v7.tests.components.combobox;

import com.vaadin.server.VaadinRequest;
import com.vaadin.tests.components.AbstractTestUI;
import com.vaadin.v7.data.util.BeanContainer;
import com.vaadin.v7.ui.AbstractSelect.ItemCaptionMode;
import com.vaadin.v7.ui.ComboBox;

/**
* Test for issue #11246 where ComboBox set to render from Property does not
* filter correctly when page size is 0
*
* @author Vaadin Ltd
*/
@SuppressWarnings("deprecation")
public class ComboboxPageLengthZeroFilter extends AbstractTestUI {

public static class Topping {
private int id;
private String name;

public Topping(int id, String name) {
this.id = id;
this.name = name;
}

public void setId(int id) {
this.id = id;
}

public int getId() {
return id;
}

public void setName(String name) {
this.name = name;
}

public String getName() {
return name;
}
}

@Override
protected void setup(VaadinRequest request) {
BeanContainer<Integer, Topping> container = new BeanContainer<Integer, Topping>(
Topping.class);
container.setBeanIdProperty("id");
for (int i = 0; i < 12; i++) {
container.addBean(new Topping(i, "Topping " + i));
}

final ComboBox comboBox = new ComboBox();
comboBox.setPageLength(0);
comboBox.setItemCaptionMode(ItemCaptionMode.PROPERTY);
comboBox.setItemCaptionPropertyId("name");
comboBox.setContainerDataSource(container);
comboBox.setInvalidAllowed(false);
comboBox.setNullSelectionAllowed(false);
comboBox.setTextInputAllowed(true);

getLayout().addComponent(comboBox);
}

@Override
protected Integer getTicketNumber() {
return 11246;
}

@Override
protected String getTestDescription() {
return "Filtering should work even when ComboBox page length is zero.";
}
}

+ 28
- 0
uitest/src/test/java/com/vaadin/v7/tests/components/combobox/ComboboxPageLengthZeroFilterTest.java View File

@@ -0,0 +1,28 @@
package com.vaadin.v7.tests.components.combobox;
import java.util.List;

import org.junit.Assert;
import org.junit.Test;

import com.vaadin.testbench.By;
import com.vaadin.testbench.elements.ComboBoxElement;
import com.vaadin.tests.tb3.MultiBrowserTest;

public class ComboboxPageLengthZeroFilterTest extends MultiBrowserTest {

@Test
public void testOptionsNotEmpty() {
openTestURL();

List<String> suggestions = getFilterSuggestions("T");

Assert.assertEquals("All items should be presented!", 12,
suggestions.size());
}

private List<String> getFilterSuggestions(String string) {
ComboBoxElement comboBox = $(ComboBoxElement.class).first();
comboBox.findElement(By.vaadin("#textbox")).sendKeys(string);
return comboBox.getPopupSuggestions();
}
}

Loading…
Cancel
Save