Browse Source

Ensure Composite's contents gets re-measured on resize. (#12154)

Fixes: #12153
tags/7.7.23
Anna Koskinen 3 years ago
parent
commit
d59c3d303b
No account linked to committer's email address

+ 2
- 0
client/src/main/java/com/vaadin/client/ui/composite/CompositeConnector.java View File

@@ -114,6 +114,8 @@ public class CompositeConnector extends AbstractHasComponentsConnector
} else if (childConnector instanceof DirectionalManagedLayout) {
((DirectionalManagedLayout) childConnector).layoutHorizontally();
((DirectionalManagedLayout) childConnector).layoutVertically();
} else {
getLayoutManager().setNeedsMeasureRecursively(childConnector);
}
}


BIN
uitest/reference-screenshots/chrome/BaseThemeTest-testTheme_ANY_Chrome__labels_1.png View File


BIN
uitest/reference-screenshots/chrome/RunoThemeTest-testTheme_ANY_Chrome__labels_1.png View File


+ 82
- 0
uitest/src/main/java/com/vaadin/tests/components/composite/CompositeVerticalLayoutGridResize.java View File

@@ -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;
}
}

+ 59
- 0
uitest/src/main/java/com/vaadin/tests/components/composite/CompositeVerticalLayoutSplitPanelResize.java View File

@@ -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;
}
}

+ 43
- 0
uitest/src/test/java/com/vaadin/tests/components/composite/CompositeVerticalLayoutGridResizeTest.java View File

@@ -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());
}
}

+ 44
- 0
uitest/src/test/java/com/vaadin/tests/components/composite/CompositeVerticalLayoutSplitPanelResizeTest.java View File

@@ -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());
}
}

Loading…
Cancel
Save