Browse Source

fix for #12079 - recalculate Composite layout inside Window (#12082)

Co-authored-by: Anna Koskinen <anna@vaadin.com>
tags/8.12.0.alpha2
Olli Tietäväinen 3 years ago
parent
commit
49f0317b72
No account linked to committer's email address

+ 2
- 2
client/src/main/java/com/vaadin/client/ui/VWindow.java View File

@@ -1230,8 +1230,8 @@ public class VWindow extends VOverlay implements ShortcutActionHandlerOwner,

public void updateContentsSize() {
LayoutManager layoutManager = getLayoutManager();
layoutManager
.setNeedsMeasure(ConnectorMap.get(client).getConnector(this));
layoutManager.setNeedsMeasureRecursively(
ConnectorMap.get(client).getConnector(this));
layoutManager.layoutNow();
}


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

@@ -0,0 +1,82 @@
package com.vaadin.tests.components.grid;

import com.vaadin.annotations.Widgetset;
import com.vaadin.server.VaadinRequest;
import com.vaadin.tests.components.AbstractTestUI;
import com.vaadin.ui.Button;
import com.vaadin.ui.Composite;
import com.vaadin.ui.Grid;
import com.vaadin.ui.VerticalLayout;
import com.vaadin.ui.Window;

import java.util.stream.IntStream;
import java.util.stream.Stream;

@Widgetset("com.vaadin.DefaultWidgetSet")
public class GridColumnWidthInsideWindowCompositeContent
extends AbstractTestUI {
@Override
protected void setup(VaadinRequest request) {
Window compositeWindow = new Window();
compositeWindow.setId("the-window");
compositeWindow.setDraggable(true);
compositeWindow.setHeight(600, Unit.PIXELS);
compositeWindow.setWidth(400, Unit.PIXELS);
compositeWindow.setContent(new WindowContent(compositeWindow));
compositeWindow.setId("composite-itself");
Button openCompositeWindow = new Button("Open composite Window",
e -> getUI().addWindow(compositeWindow));
openCompositeWindow.setId("open-composite");
addComponent(openCompositeWindow);

VerticalLayout nonCompositeLayout = new VerticalLayout();
Window nonCompositeWindow = new Window();
nonCompositeWindow.setDraggable(true);
nonCompositeWindow.setHeight(600, Unit.PIXELS);
nonCompositeWindow.setWidth(400, Unit.PIXELS);
Grid grid = getGrid();
VerticalLayout spacingLayout = new VerticalLayout();
nonCompositeLayout.addComponents(spacingLayout, grid);
nonCompositeWindow.setContent(nonCompositeLayout);

Button openNonCompositeWindow = new Button("Open non-composite Window",
e -> getUI().addWindow(nonCompositeWindow));
openNonCompositeWindow.setId("open-non-composite");

addComponent(openNonCompositeWindow);

}

private class WindowContent extends Composite {

WindowContent(Window window) {
VerticalLayout spacingLayout = new VerticalLayout();
spacingLayout.setId("spacing-layout");
VerticalLayout layout = new VerticalLayout(spacingLayout,
getGrid());
layout.setId("composite-root-vl");
setCompositionRoot(layout);
}

}

private Grid getGrid() {
Grid grid = new Grid<>();
IntStream.range(0, 20).forEach(i -> grid.addColumn(model -> i));
Stream<Object> modelStream = IntStream.range(0, 50)
.mapToObj(i -> new Object());
grid.setItems(modelStream);
grid.setSizeFull();
return grid;
}

@Override
protected String getTestDescription() {
return "Test column resizing after expanding a Grid which is a part of a Composite inside a Window";
}

@Override
protected Integer getTicketNumber() {
return 12079;
}
}

+ 54
- 0
uitest/src/test/java/com/vaadin/tests/components/grid/GridColumnWidthInsideWindowCompositeContentTest.java View File

@@ -0,0 +1,54 @@
package com.vaadin.tests.components.grid;

import static org.junit.Assert.assertNotEquals;

import org.junit.Test;

import com.vaadin.testbench.elements.ButtonElement;
import com.vaadin.testbench.elements.GridElement;
import com.vaadin.testbench.elements.WindowElement;
import com.vaadin.testbench.parallel.TestCategory;
import com.vaadin.tests.tb3.SingleBrowserTest;

@TestCategory("grid")
public class GridColumnWidthInsideWindowCompositeContentTest
extends SingleBrowserTest {

@Test
public void widthAfterExpansion() throws InterruptedException {
openTestURL();
$(ButtonElement.class).id("open-composite").click();
GridElement grid = $(GridElement.class).first();
int initialWidth = grid.getHeaderCell(0, 0).getSize().getWidth();

WindowElement window = $(WindowElement.class).first();
window.maximize();

Thread.sleep(1000);

int newWidth = grid.getHeaderCell(0, 0).getSize().getWidth();
assertNotEquals(
"Expected Grid cell to be resized after Window was expanded",
initialWidth, newWidth);
}

@Test
public void widthAfterExpansionWithoutComposite()
throws InterruptedException {
openTestURL();
$(ButtonElement.class).id("open-non-composite").click();
GridElement grid = $(GridElement.class).first();
int initialWidth = grid.getHeaderCell(0, 0).getSize().getWidth();

WindowElement window = $(WindowElement.class).first();
window.maximize();

Thread.sleep(1000);

int newWidth = grid.getHeaderCell(0, 0).getSize().getWidth();
assertNotEquals(
"Expected Grid cell to be resized after Window was expanded",
initialWidth, newWidth);
}

}

Loading…
Cancel
Save