diff options
Diffstat (limited to 'uitest')
-rw-r--r-- | uitest/src/main/java/com/vaadin/tests/components/composite/CompositeChainUI.java | 97 | ||||
-rw-r--r-- | uitest/src/test/java/com/vaadin/tests/components/composite/CompositeChainUITest.java | 55 |
2 files changed, 152 insertions, 0 deletions
diff --git a/uitest/src/main/java/com/vaadin/tests/components/composite/CompositeChainUI.java b/uitest/src/main/java/com/vaadin/tests/components/composite/CompositeChainUI.java new file mode 100644 index 0000000000..481f7c958f --- /dev/null +++ b/uitest/src/main/java/com/vaadin/tests/components/composite/CompositeChainUI.java @@ -0,0 +1,97 @@ +/* + * Copyright 2000-2016 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.composite; + +import java.util.Iterator; + +import com.vaadin.annotations.Widgetset; +import com.vaadin.server.VaadinRequest; +import com.vaadin.tests.components.AbstractTestUIWithLog; +import com.vaadin.ui.Button; +import com.vaadin.ui.Component; +import com.vaadin.ui.Composite; +import com.vaadin.ui.HasComponents; +import com.vaadin.ui.HorizontalLayout; +import com.vaadin.ui.Label; +import com.vaadin.ui.VerticalLayout; + +@Widgetset("com.vaadin.DefaultWidgetSet") +public class CompositeChainUI extends AbstractTestUIWithLog { + + private Label innermostComponent; + private Composite innerComposite; + private Composite outerComposite; + private VerticalLayout container; + private HorizontalLayout layout; + + @Override + protected void setup(VaadinRequest request) { + + createComposite(); + layout = new HorizontalLayout(outerComposite); + container = new VerticalLayout(layout); + addComponent(container); + + Button updateCaption = new Button("Update caption"); + updateCaption.addClickListener(e -> { + innermostComponent + .setCaption(innermostComponent.getCaption() + " - updated"); + }); + addComponent(updateCaption); + Button replaceWithAnotherComposite = new Button( + "Replace with another Composite", e -> { + Composite oldOuter = outerComposite; + createComposite(); + layout.replaceComponent(oldOuter, outerComposite); + }); + addComponent(replaceWithAnotherComposite); + logHierarchy(); + } + + private void createComposite() { + innermostComponent = new Label("Label text"); + innermostComponent.setCaption("Label caption"); + innermostComponent.setId("innermost"); + + innerComposite = new Composite(innermostComponent); + outerComposite = new Composite(innerComposite); + } + + private void logHierarchy() { + String msg = "Hierarchy: "; + if (container != null) { + msg += getHierarchy(container); + } + log(msg); + } + + private static String getHierarchy(Component component) { + String msg = component.getClass().getSimpleName(); + if (component instanceof HasComponents) { + + Iterator<Component> iterator = ((HasComponents) component) + .iterator(); + if (iterator.hasNext()) { + Component content = iterator.next(); + if (content != null) { + msg += " -> " + getHierarchy(content); + } + } + } + return msg; + } + +} diff --git a/uitest/src/test/java/com/vaadin/tests/components/composite/CompositeChainUITest.java b/uitest/src/test/java/com/vaadin/tests/components/composite/CompositeChainUITest.java new file mode 100644 index 0000000000..228d20f058 --- /dev/null +++ b/uitest/src/test/java/com/vaadin/tests/components/composite/CompositeChainUITest.java @@ -0,0 +1,55 @@ +/* + * Copyright 2000-2016 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.composite; + +import org.junit.Assert; +import org.junit.Test; +import org.openqa.selenium.WebElement; + +import com.vaadin.testbench.By; +import com.vaadin.testbench.elements.ButtonElement; +import com.vaadin.testbench.elements.LabelElement; +import com.vaadin.tests.tb3.SingleBrowserTest; + +public class CompositeChainUITest extends SingleBrowserTest { + + @Test + public void compositeRenderedAndUpdatedCorrectly() { + openTestURL(); + LabelElement label = $(LabelElement.class).id("innermost"); + WebElement labelGrandParent = label.findElement(By.xpath("../..")); + + Assert.assertEquals("v-slot", labelGrandParent.getAttribute("class")); + Assert.assertEquals("Label caption", label.getCaption()); + + $(ButtonElement.class).caption("Update caption").first().click(); + Assert.assertEquals("Label caption - updated", label.getCaption()); + + } + + @Test + public void compositeRemovedCorrectly() { + openTestURL("debug"); + LabelElement label = $(LabelElement.class).id("innermost"); + $(ButtonElement.class).caption("Update caption").first().click(); + Assert.assertEquals("Label caption - updated", label.getCaption()); + $(ButtonElement.class).caption("Replace with another Composite").first() + .click(); + label = $(LabelElement.class).id("innermost"); + Assert.assertEquals("Label caption", label.getCaption()); + assertNoErrorNotifications(); + } +} |