]> source.dussan.org Git - vaadin-framework.git/commitdiff
Fix removal tabsheets if last one is selected (#11070)
authorIlia Motornyi <elmot@vaadin.com>
Thu, 19 Jul 2018 12:32:05 +0000 (15:32 +0300)
committerGitHub <noreply@github.com>
Thu, 19 Jul 2018 12:32:05 +0000 (15:32 +0300)
Fixes #10925

client/src/main/java/com/vaadin/client/ui/VTabsheet.java
uitest/src/main/java/com/vaadin/tests/components/tabsheet/TabsheetCloseSelectedTabs.java [new file with mode: 0644]
uitest/src/test/java/com/vaadin/tests/components/tabsheet/TabsheetCloseSelectedTabsTest.java [new file with mode: 0644]

index e77e683d5bc979d4e2ac76f1831d067c323d6346..123f89bb368a8e6e097037d363942463e1512b4d 100644 (file)
@@ -630,7 +630,7 @@ public class VTabsheet extends VTabsheetBase
 
             for (int i = oldPosition - 1; i >= 0; i--) {
                 Tab tab = getTab(i);
-                if (!tab.isHiddenOnServer()) {
+                if (tab != null && !tab.isHiddenOnServer()) {
                     return i;
                 }
             }
@@ -1584,8 +1584,6 @@ public class VTabsheet extends VTabsheetBase
              *
              * @param blurSource
              *            the source.
-             * @param focusedTabProvider
-             *            provides the current focused tab.
              */
             public BlurCommand(Tab blurSource) {
                 this.blurSource = blurSource;
diff --git a/uitest/src/main/java/com/vaadin/tests/components/tabsheet/TabsheetCloseSelectedTabs.java b/uitest/src/main/java/com/vaadin/tests/components/tabsheet/TabsheetCloseSelectedTabs.java
new file mode 100644 (file)
index 0000000..1cfea46
--- /dev/null
@@ -0,0 +1,35 @@
+package com.vaadin.tests.components.tabsheet;
+
+import com.vaadin.server.VaadinRequest;
+import com.vaadin.tests.components.AbstractTestUI;
+import com.vaadin.ui.Panel;
+import com.vaadin.ui.TabSheet;
+
+public class TabsheetCloseSelectedTabs extends AbstractTestUI {
+
+    private TabSheet tabsheet = new TabSheet();
+
+    @Override
+    protected void setup(VaadinRequest request) {
+        generateTabs();
+        tabsheet.setSizeFull();
+        addComponent(tabsheet);
+        addButton("Select last tab", event -> {
+            tabsheet.setSelectedTab(tabsheet.getComponentCount() - 1);
+        });
+        addButton("Remove all tabs", event -> {
+            while (tabsheet.getComponentCount() > 0) {
+                tabsheet.removeTab(tabsheet.getTab(0));
+            }
+        });
+
+    }
+
+    private void generateTabs() {
+        tabsheet.removeAllComponents();
+        for (int i = 0; i < 100; ++i) {
+            tabsheet.addTab(new Panel(), "Tab" + i);
+        }
+    }
+
+}
diff --git a/uitest/src/test/java/com/vaadin/tests/components/tabsheet/TabsheetCloseSelectedTabsTest.java b/uitest/src/test/java/com/vaadin/tests/components/tabsheet/TabsheetCloseSelectedTabsTest.java
new file mode 100644 (file)
index 0000000..8116548
--- /dev/null
@@ -0,0 +1,30 @@
+package com.vaadin.tests.components.tabsheet;
+
+import com.vaadin.testbench.By;
+import com.vaadin.testbench.elements.ButtonElement;
+import com.vaadin.testbench.elements.TabSheetElement;
+import com.vaadin.tests.tb3.SingleBrowserTest;
+import org.junit.Test;
+
+import java.io.IOException;
+
+/**
+ * Tests that tabsheet's scroll button are rendered correctly in Chameleon
+ * theme.
+ *
+ * Ticket #12154
+ *
+ * @author Vaadin Ltd
+ */
+public class TabsheetCloseSelectedTabsTest extends SingleBrowserTest {
+
+    @Test
+    public void deleteSelectedTab() {
+        openTestURL();
+        $(ButtonElement.class).caption("Select last tab").first().click();
+        assertElementPresent(By.className("v-tabsheet-tabitem"));
+        $(TabSheetElement.class).first().waitForVaadin();
+        $(ButtonElement.class).caption("Remove all tabs").first().click();
+        assertElementNotPresent(By.className("v-tabsheet-tabitem"));
+    }
+}