]> source.dussan.org Git - vaadin-framework.git/commitdiff
Remove old widget from tab content on replace (#12931).
authorDenis Anisimov <denis@vaadin.com>
Sun, 6 Apr 2014 15:10:37 +0000 (18:10 +0300)
committerVaadin Code Review <review@vaadin.com>
Thu, 10 Apr 2014 16:47:40 +0000 (16:47 +0000)
Change-Id: I85badfcca18e129b20ab6c5c2db0b845c8c2ea5b

client/src/com/vaadin/client/ui/VAccordion.java
uitest/src/com/vaadin/tests/components/accordion/AccordionAddTab.java [new file with mode: 0644]
uitest/src/com/vaadin/tests/components/accordion/AccordionAddTabTest.java [new file with mode: 0644]

index cba08d8e6b18521677e3793152057810fecaa7c7..d348e6863b8009eac57aa9f6262b6baf81cfa3cd 100644 (file)
@@ -277,6 +277,7 @@ public class VAccordion extends VTabsheetBase {
         public void replaceWidget(Widget newWidget) {
             if (getWidgetCount() > 1) {
                 Widget oldWidget = getWidget(1);
+                remove(oldWidget);
                 widgets.remove(oldWidget);
             }
             add(newWidget, content);
diff --git a/uitest/src/com/vaadin/tests/components/accordion/AccordionAddTab.java b/uitest/src/com/vaadin/tests/components/accordion/AccordionAddTab.java
new file mode 100644 (file)
index 0000000..da0ad36
--- /dev/null
@@ -0,0 +1,72 @@
+/*
+ * Copyright 2000-2013 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.accordion;
+
+import com.vaadin.server.VaadinRequest;
+import com.vaadin.tests.components.AbstractTestUI;
+import com.vaadin.ui.Accordion;
+import com.vaadin.ui.Button;
+import com.vaadin.ui.Button.ClickEvent;
+import com.vaadin.ui.Component;
+import com.vaadin.ui.Label;
+import com.vaadin.ui.Panel;
+import com.vaadin.ui.TabSheet.Tab;
+import com.vaadin.ui.VerticalLayout;
+
+/**
+ * Test UI for Accordion: old widget should be removed from the tab.
+ * 
+ * @since 7.2
+ * @author Vaadin Ltd
+ */
+public class AccordionAddTab extends AbstractTestUI {
+
+    @Override
+    protected void setup(VaadinRequest request) {
+        final Accordion tabs = new Accordion();
+        addComponent(tabs);
+        tabs.setHeight(500, Unit.PIXELS);
+        Button remove = new Button("Remove 'First'");
+        final Tab me = tabs.addTab(addTab("First"));
+        remove.addClickListener(new Button.ClickListener() {
+
+            @Override
+            public void buttonClick(ClickEvent event) {
+                tabs.removeTab(me);
+                Tab tab = tabs.addTab(addTab("Next"));
+                tabs.setSelectedTab(tab);
+            }
+        });
+        addComponent(remove);
+    }
+
+    private Component addTab(String tag) {
+        VerticalLayout layout = new VerticalLayout();
+        layout.addComponent(new Label("On tab: " + tag));
+        return new Panel(tag, layout);
+    }
+
+    @Override
+    protected String getTestDescription() {
+        return "Remove previous widget in the accordion tab when content is replaced";
+    }
+
+    @Override
+    protected Integer getTicketNumber() {
+        return 11367;
+    }
+
+}
diff --git a/uitest/src/com/vaadin/tests/components/accordion/AccordionAddTabTest.java b/uitest/src/com/vaadin/tests/components/accordion/AccordionAddTabTest.java
new file mode 100644 (file)
index 0000000..68aa61c
--- /dev/null
@@ -0,0 +1,48 @@
+/*
+ * Copyright 2000-2013 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.accordion;
+
+import java.util.List;
+
+import org.junit.Assert;
+import org.junit.Test;
+import org.openqa.selenium.WebElement;
+
+import com.vaadin.testbench.By;
+import com.vaadin.tests.tb3.MultiBrowserTest;
+
+/**
+ * Test for Accordion : replace widget in tab should remove old widget.
+ * 
+ * @since 7.2
+ * @author Vaadin Ltd
+ */
+public class AccordionAddTabTest extends MultiBrowserTest {
+
+    @Test
+    public void testRemoveAndAdd() {
+        openTestURL();
+
+        WebElement button = driver.findElement(By.className("v-button"));
+        button.click();
+
+        List<WebElement> panels = driver.findElements(By.className("v-panel"));
+
+        Assert.assertEquals("Found two widgets inside one tab after "
+                + "subsequent tab removal and addition", 1, panels.size());
+    }
+
+}