diff options
author | Anna Koskinen <Ansku@users.noreply.github.com> | 2020-12-01 11:34:32 +0200 |
---|---|---|
committer | GitHub <noreply@github.com> | 2020-12-01 11:34:32 +0200 |
commit | d59c3d303be95d38320f94b5d7cde068824d81fd (patch) | |
tree | dc2d852dc3409c96a26cea100a591af83a3be890 | |
parent | cd1dccd153ecfcdcb73e4f59f8f24c49b3f97ed7 (diff) | |
download | vaadin-framework-d59c3d303be95d38320f94b5d7cde068824d81fd.tar.gz vaadin-framework-d59c3d303be95d38320f94b5d7cde068824d81fd.zip |
Ensure Composite's contents gets re-measured on resize. (#12154)
Fixes: #12153
7 files changed, 230 insertions, 0 deletions
diff --git a/client/src/main/java/com/vaadin/client/ui/composite/CompositeConnector.java b/client/src/main/java/com/vaadin/client/ui/composite/CompositeConnector.java index 3093eaff4a..221a64db6c 100644 --- a/client/src/main/java/com/vaadin/client/ui/composite/CompositeConnector.java +++ b/client/src/main/java/com/vaadin/client/ui/composite/CompositeConnector.java @@ -114,6 +114,8 @@ public class CompositeConnector extends AbstractHasComponentsConnector } else if (childConnector instanceof DirectionalManagedLayout) { ((DirectionalManagedLayout) childConnector).layoutHorizontally(); ((DirectionalManagedLayout) childConnector).layoutVertically(); + } else { + getLayoutManager().setNeedsMeasureRecursively(childConnector); } } diff --git a/uitest/reference-screenshots/chrome/BaseThemeTest-testTheme_ANY_Chrome__labels_1.png b/uitest/reference-screenshots/chrome/BaseThemeTest-testTheme_ANY_Chrome__labels_1.png Binary files differnew file mode 100644 index 0000000000..e9624f11d0 --- /dev/null +++ b/uitest/reference-screenshots/chrome/BaseThemeTest-testTheme_ANY_Chrome__labels_1.png diff --git a/uitest/reference-screenshots/chrome/RunoThemeTest-testTheme_ANY_Chrome__labels_1.png b/uitest/reference-screenshots/chrome/RunoThemeTest-testTheme_ANY_Chrome__labels_1.png Binary files differnew file mode 100644 index 0000000000..302afa72b1 --- /dev/null +++ b/uitest/reference-screenshots/chrome/RunoThemeTest-testTheme_ANY_Chrome__labels_1.png diff --git a/uitest/src/main/java/com/vaadin/tests/components/composite/CompositeVerticalLayoutGridResize.java b/uitest/src/main/java/com/vaadin/tests/components/composite/CompositeVerticalLayoutGridResize.java new file mode 100644 index 0000000000..68663c9396 --- /dev/null +++ b/uitest/src/main/java/com/vaadin/tests/components/composite/CompositeVerticalLayoutGridResize.java @@ -0,0 +1,82 @@ +package com.vaadin.tests.components.composite; + +import java.util.ArrayList; +import java.util.List; + +import com.vaadin.server.VaadinRequest; +import com.vaadin.tests.components.AbstractTestUI; +import com.vaadin.ui.Component; +import com.vaadin.ui.Composite; +import com.vaadin.ui.Grid; +import com.vaadin.ui.VerticalLayout; + +public class CompositeVerticalLayoutGridResize extends AbstractTestUI { + + @Override + protected void setup(VaadinRequest request) { + addComponent(new CompositeGrid()); + + getLayout().setSizeFull(); + getLayout().getParent().setSizeFull(); + } + + public class CompositeGrid extends Composite { + public CompositeGrid() { + VerticalLayout root = new VerticalLayout(); + root.setId("root"); + root.setMargin(false); + root.addComponentsAndExpand(buildGrid()); + + setCompositionRoot(root); + setSizeFull(); + } + + private Component buildGrid() { + List<Person> persons = new ArrayList<>(); + for (int i = 0; i < 100; i++) { + persons.add(new Person("Firstname" + i, "Lastname" + i)); + } + + Grid<Person> grid = new Grid<Person>(Person.class); + grid.setItems(persons); + grid.setSizeFull(); + return grid; + } + } + + public class Person { + private String firstName, lastName; + + public Person(String firstName, String lastName) { + this.firstName = firstName; + this.lastName = lastName; + } + + public String getLastName() { + return lastName; + } + + public void setLastName(String lastName) { + this.lastName = lastName; + } + + public String getFirstName() { + return firstName; + } + + public void setFirstName(String firstName) { + this.firstName = firstName; + } + } + + @Override + protected String getTestDescription() { + return "Composite contents should resize without a delay when the" + + " browser is resized, not only when interacted with."; + } + + @Override + protected Integer getTicketNumber() { + return 12153; + } +} diff --git a/uitest/src/main/java/com/vaadin/tests/components/composite/CompositeVerticalLayoutSplitPanelResize.java b/uitest/src/main/java/com/vaadin/tests/components/composite/CompositeVerticalLayoutSplitPanelResize.java new file mode 100644 index 0000000000..a9e4ab4c6f --- /dev/null +++ b/uitest/src/main/java/com/vaadin/tests/components/composite/CompositeVerticalLayoutSplitPanelResize.java @@ -0,0 +1,59 @@ +package com.vaadin.tests.components.composite; + +import com.vaadin.server.VaadinRequest; +import com.vaadin.tests.components.AbstractTestUI; +import com.vaadin.ui.Composite; +import com.vaadin.ui.HorizontalSplitPanel; +import com.vaadin.ui.VerticalLayout; +import com.vaadin.ui.VerticalSplitPanel; + +public class CompositeVerticalLayoutSplitPanelResize extends AbstractTestUI { + + @Override + protected void setup(VaadinRequest request) { + addComponent(new CompositeVSP()); + + getLayout().setSizeFull(); + getLayout().getParent().setSizeFull(); + } + + public class CompositeVSP extends Composite { + public CompositeVSP() { + VerticalSplitPanel verticalSplitPanel = new VerticalSplitPanel(); + verticalSplitPanel.setSecondComponent(new CompositeHSP()); + + VerticalLayout root = new VerticalLayout(); + root.setId("root"); + root.setMargin(false); + root.addComponent(verticalSplitPanel); + + setCompositionRoot(root); + setSizeFull(); + } + } + + public class CompositeHSP extends Composite { + public CompositeHSP() { + HorizontalSplitPanel horizontalSplitPanel = new HorizontalSplitPanel(); + + VerticalLayout root = new VerticalLayout(); + root.setSizeFull(); + root.setMargin(false); + root.addComponent(horizontalSplitPanel); + + setCompositionRoot(root); + setSizeFull(); + } + } + + @Override + protected String getTestDescription() { + return "Composite contents should resize without a delay when the" + + " browser is resized, not only when interacted with."; + } + + @Override + protected Integer getTicketNumber() { + return 12153; + } +} diff --git a/uitest/src/test/java/com/vaadin/tests/components/composite/CompositeVerticalLayoutGridResizeTest.java b/uitest/src/test/java/com/vaadin/tests/components/composite/CompositeVerticalLayoutGridResizeTest.java new file mode 100644 index 0000000000..41adf85dd0 --- /dev/null +++ b/uitest/src/test/java/com/vaadin/tests/components/composite/CompositeVerticalLayoutGridResizeTest.java @@ -0,0 +1,43 @@ +package com.vaadin.tests.components.composite; + +import org.junit.Test; +import org.openqa.selenium.By; +import org.openqa.selenium.Dimension; +import org.openqa.selenium.WebElement; + +import com.vaadin.testbench.elements.GridElement; +import com.vaadin.testbench.elements.GridElement.GridCellElement; +import com.vaadin.tests.tb3.MultiBrowserTest; + +public class CompositeVerticalLayoutGridResizeTest extends MultiBrowserTest { + + @Test + public void testResize() { + getDriver().manage().window().setSize(new Dimension(600, 400)); + openTestURL(); + + WebElement root = findElement(By.id("root")); + Dimension oldRootSize = root.getSize(); + + GridElement grid = $(GridElement.class).first(); + // inner level element that is expected to resize + GridCellElement content = grid.getHeaderCell(0, 0); + Dimension oldContentSize = content.getSize(); + + // resize + getDriver().manage().window().setSize(new Dimension(500, 500)); + waitUntilLoadingIndicatorNotVisible(); + + Dimension newRootSize = root.getSize(); + Dimension newContentSize = content.getSize(); + + assertGreater("Unexpected vertical root size.", newRootSize.getHeight(), + oldRootSize.getHeight()); + assertGreater("Unexpected horizontal root size.", + oldRootSize.getWidth(), newRootSize.getWidth()); + + // header height is not expected to change, only test width + assertGreater("Unexpected horizontal content size.", + oldContentSize.getWidth(), newContentSize.getWidth()); + } +} diff --git a/uitest/src/test/java/com/vaadin/tests/components/composite/CompositeVerticalLayoutSplitPanelResizeTest.java b/uitest/src/test/java/com/vaadin/tests/components/composite/CompositeVerticalLayoutSplitPanelResizeTest.java new file mode 100644 index 0000000000..362a81ed8a --- /dev/null +++ b/uitest/src/test/java/com/vaadin/tests/components/composite/CompositeVerticalLayoutSplitPanelResizeTest.java @@ -0,0 +1,44 @@ +package com.vaadin.tests.components.composite; + +import org.junit.Test; +import org.openqa.selenium.By; +import org.openqa.selenium.Dimension; +import org.openqa.selenium.WebElement; + +import com.vaadin.testbench.elements.HorizontalSplitPanelElement; +import com.vaadin.tests.tb3.MultiBrowserTest; + +public class CompositeVerticalLayoutSplitPanelResizeTest + extends MultiBrowserTest { + + @Test + public void testResize() { + getDriver().manage().window().setSize(new Dimension(600, 400)); + openTestURL(); + + WebElement root = findElement(By.id("root")); + Dimension oldRootSize = root.getSize(); + + // inner level element that is expected to resize + HorizontalSplitPanelElement content = $( + HorizontalSplitPanelElement.class).first(); + Dimension oldContentSize = content.getSize(); + + // resize + getDriver().manage().window().setSize(new Dimension(500, 500)); + waitUntilLoadingIndicatorNotVisible(); + + Dimension newRootSize = root.getSize(); + Dimension newContentSize = content.getSize(); + + assertGreater("Unexpected vertical root size.", newRootSize.getHeight(), + oldRootSize.getHeight()); + assertGreater("Unexpected horizontal root size.", + oldRootSize.getWidth(), newRootSize.getWidth()); + + assertGreater("Unexpected vertical content size.", + newContentSize.getHeight(), oldContentSize.getHeight()); + assertGreater("Unexpected horizontal content size.", + oldContentSize.getWidth(), newContentSize.getWidth()); + } +} |