package com.vaadin.tests.server.componentcontainer;
import java.lang.reflect.Constructor;
import java.lang.reflect.InvocationTargetException;
import java.lang.reflect.Modifier;
import java.util.List;
import org.junit.Assert;
import org.junit.Test;
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 {
@Test
public void testRemoveComponentFromWrongContainer()
throws InstantiationException, IllegalAccessException,
IllegalArgumentException, InvocationTargetException {
List<Class<? extends ComponentContainer>> containerClasses = VaadinClasses
.getComponentContainersSupportingAddRemoveComponent();
Assert.assertTrue(containerClasses.size() > 0);
// No default constructor, special case
containerClasses.remove(CustomLayout.class);
testRemoveComponentFromWrongContainer(new CustomLayout("dummy"));
for (Class<? extends ComponentContainer> clazz : containerClasses) {
if (Modifier.isAbstract(clazz.getModifiers())) {
continue;
}
try {
Constructor<? extends ComponentContainer> constructor = clazz
.getConstructor();
constructor.setAccessible(true);
testRemoveComponentFromWrongContainer(
constructor.newInstance());
} catch (NoSuchMethodException ignore) {
// if there is no default CTOR, just ignore
}
}
}
private void testRemoveComponentFromWrongContainer(
ComponentContainer componentContainer) {
HorizontalLayout hl = new HorizontalLayout();
Label label = new Label();
hl.addComponent(label);
componentContainer.removeComponent(label);
Assert.assertEquals(
"Parent no longer correct for " + componentContainer.getClass(),
hl, label.getParent());
}
}