]> source.dussan.org Git - vaadin-framework.git/commitdiff
#6232 ComponentContainers should check that a component is in the container before...
authorArtur Signell <artur.signell@itmill.com>
Tue, 4 Jan 2011 16:55:51 +0000 (16:55 +0000)
committerArtur Signell <artur.signell@itmill.com>
Tue, 4 Jan 2011 16:55:51 +0000 (16:55 +0000)
svn changeset:16793/svn branch:6.5

src/com/vaadin/ui/CustomLayout.java
tests/src/com/vaadin/tests/VaadinClasses.java
tests/src/com/vaadin/tests/server/componentcontainer/AddRemoveComponentTest.java [new file with mode: 0644]

index 0c11ff61146b52032e15a584b199ac4ded83324d..47d1a970aceb0b106be04cb0e3aefa53adb86fb6 100644 (file)
@@ -159,8 +159,7 @@ public class CustomLayout extends AbstractLayout {
             return;
         }
         slots.values().remove(c);
-        c.setParent(null);
-        fireComponentDetachEvent(c);
+        super.removeComponent(c);
         requestRepaint();
     }
 
index b876a66c634c6ced87de6e1fba11374004e9134e..9313fb98803a8ad71553bea01ab1b3123fe57244 100644 (file)
@@ -18,6 +18,10 @@ import com.vaadin.Application;
 import com.vaadin.tests.components.AbstractComponentTest;
 import com.vaadin.ui.Component;
 import com.vaadin.ui.ComponentContainer;
+import com.vaadin.ui.CustomComponent;
+import com.vaadin.ui.DragAndDropWrapper;
+import com.vaadin.ui.LoginForm;
+import com.vaadin.ui.PopupView;
 
 public class VaadinClasses {
 
@@ -53,6 +57,17 @@ public class VaadinClasses {
         }
     }
 
+    public static List<Class<? extends ComponentContainer>> getComponentContainersSupportingAddRemoveComponent() {
+        List<Class<? extends ComponentContainer>> classes = getComponentContainers();
+        classes.remove(PopupView.class);
+        classes.remove(CustomComponent.class);
+        classes.remove(DragAndDropWrapper.class);
+        classes.remove(CustomComponent.class);
+        classes.remove(LoginForm.class);
+
+        return classes;
+    }
+
     @SuppressWarnings("unchecked")
     public static List<Class<? extends AbstractComponentTest<?>>> getBasicComponentTests() {
         try {
diff --git a/tests/src/com/vaadin/tests/server/componentcontainer/AddRemoveComponentTest.java b/tests/src/com/vaadin/tests/server/componentcontainer/AddRemoveComponentTest.java
new file mode 100644 (file)
index 0000000..828404b
--- /dev/null
@@ -0,0 +1,40 @@
+package com.vaadin.tests.server.componentcontainer;
+
+import java.util.List;
+
+import junit.framework.TestCase;
+
+import com.vaadin.tests.VaadinClasses;
+import com.vaadin.ui.ComponentContainer;
+import com.vaadin.ui.CustomLayout;
+import com.vaadin.ui.HorizontalLayout;
+import com.vaadin.ui.Label;
+
+public class AddRemoveComponentTest extends TestCase {
+
+    public void testRemoveComponentFromWrongContainer()
+            throws InstantiationException, IllegalAccessException {
+        List<Class<? extends ComponentContainer>> containerClasses = VaadinClasses
+                .getComponentContainersSupportingAddRemoveComponent();
+
+        // No default constructor, special case
+        containerClasses.remove(CustomLayout.class);
+        testRemoveComponentFromWrongContainer(new CustomLayout("dummy"));
+
+        for (Class<? extends ComponentContainer> c : containerClasses) {
+            testRemoveComponentFromWrongContainer(c.newInstance());
+        }
+    }
+
+    private void testRemoveComponentFromWrongContainer(
+            ComponentContainer componentContainer) {
+        HorizontalLayout hl = new HorizontalLayout();
+        Label label = new Label();
+        hl.addComponent(label);
+
+        componentContainer.removeComponent(label);
+        assertEquals(
+                "Parent no longer correct for " + componentContainer.getClass(),
+                hl, label.getParent());
+    }
+}