]> source.dussan.org Git - vaadin-framework.git/commitdiff
Fixed ComboBox filtering when page length is zero (#14509)
authorTeemu Pòˆntelin <teemu@vaadin.com>
Tue, 26 Aug 2014 16:29:35 +0000 (19:29 +0300)
committerVaadin Code Review <review@vaadin.com>
Fri, 19 Sep 2014 10:12:06 +0000 (10:12 +0000)
Change-Id: I663b39a37bcdf4383fa76d04acd127503ced11df

server/src/com/vaadin/ui/ComboBox.java
uitest/src/com/vaadin/tests/components/combobox/ComboBoxSuggestionPageLength.java [new file with mode: 0644]
uitest/src/com/vaadin/tests/components/combobox/ComboBoxSuggestionPageLengthTest.java [new file with mode: 0644]

index 5367505c566fc29415b3e8dda2d66d80257e5b6e..c2b80fae3576e61b3b808a52cb2f5aa11303d07c 100644 (file)
@@ -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;
diff --git a/uitest/src/com/vaadin/tests/components/combobox/ComboBoxSuggestionPageLength.java b/uitest/src/com/vaadin/tests/components/combobox/ComboBoxSuggestionPageLength.java
new file mode 100644 (file)
index 0000000..f981b6f
--- /dev/null
@@ -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;
+    }
+
+}
diff --git a/uitest/src/com/vaadin/tests/components/combobox/ComboBoxSuggestionPageLengthTest.java b/uitest/src/com/vaadin/tests/components/combobox/ComboBoxSuggestionPageLengthTest.java
new file mode 100644 (file)
index 0000000..7ed3268
--- /dev/null
@@ -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;
+    }
+
+}