Full defect name: Empty space on page after expanded component - incorrect height calculation in Chrome Layout: [ Panel (auto x auto) [ Grid (auto x auto) ] AnyComponent (100% x 100%) <EMPTY SPACE> Also sleep() was removed from tests BaseLayoutExpandTest and BaseAddReplaceMoveTest Change-Id: Ie8a14a58dd53a26a133ea99a7b809d92c1b33a1ftags/7.4.0.beta1
@@ -152,7 +152,20 @@ public abstract class AbstractOrderedLayoutConnector extends | |||
public void onElementResize(ElementResizeEvent e) { | |||
updateLayoutHeight(); | |||
if (needsExpand()) { | |||
getWidget().updateExpandCompensation(); | |||
/* | |||
* updateLayoutHeight causes calling of | |||
* getLayoutManager().setNeedsMeasure(this) which informs this | |||
* LayoutManager that the size of a component might have | |||
* changed. Then a new layout phase is scheduled. So | |||
* updateExpandCompensation must be delayed until layout phase | |||
* will be completed. #12672 | |||
*/ | |||
Scheduler.get().scheduleFinally(new ScheduledCommand() { | |||
@Override | |||
public void execute() { | |||
getWidget().updateExpandCompensation(); | |||
} | |||
}); | |||
} | |||
} | |||
}; |
@@ -0,0 +1,82 @@ | |||
/* | |||
* Copyright 2000-2014 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.layout; | |||
import com.vaadin.server.Page; | |||
import com.vaadin.server.VaadinRequest; | |||
import com.vaadin.tests.components.AbstractTestUI; | |||
import com.vaadin.ui.GridLayout; | |||
import com.vaadin.ui.Panel; | |||
import com.vaadin.ui.TextArea; | |||
import com.vaadin.ui.TextField; | |||
import com.vaadin.ui.VerticalLayout; | |||
public class EmptySpaceOnPageAfterExpandedComponent extends AbstractTestUI { | |||
@Override | |||
protected void setup(VaadinRequest request) { | |||
getLayout().setHeight("200px"); | |||
VerticalLayout container = new VerticalLayout(); | |||
container.setStyleName("mystyle"); | |||
container.setId("container"); | |||
container.setSpacing(true); | |||
container.setSizeFull(); | |||
addComponent(container); | |||
Page.getCurrent().getStyles() | |||
.add(".mystyle {border: 1px solid black;}"); | |||
GridLayout grid = new GridLayout(); | |||
grid.setSpacing(true); | |||
TextField text1 = new TextField(); | |||
text1.setCaption("Text1"); | |||
text1.setRequired(true); | |||
grid.setColumns(1); | |||
grid.setRows(1); | |||
grid.addComponent(text1); | |||
grid.setSizeUndefined(); | |||
Panel panel = new Panel(); | |||
panel.setContent(grid); | |||
panel.setSizeUndefined(); | |||
container.addComponent(panel); | |||
TextArea expand = new TextArea(); | |||
expand.setId("expandedElement"); | |||
expand.setSizeFull(); | |||
container.addComponent(expand); | |||
container.setExpandRatio(expand, 1); | |||
} | |||
@Override | |||
protected String getTestDescription() { | |||
return "Height calculation should be correct in Chrome. There should not be any empty space after expanded component."; | |||
} | |||
@Override | |||
protected Integer getTicketNumber() { | |||
return 12672; | |||
} | |||
} |
@@ -0,0 +1,61 @@ | |||
/* | |||
* Copyright 2000-2013 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.layout; | |||
import org.junit.Test; | |||
import org.openqa.selenium.WebDriver; | |||
import org.openqa.selenium.WebElement; | |||
import org.openqa.selenium.support.ui.ExpectedCondition; | |||
import com.vaadin.tests.tb3.MultiBrowserTest; | |||
/** | |||
* Test to make sure that there is no any empty space (in Google Chrome) on page | |||
* after expanded component (#12672) | |||
* | |||
* Layout: | |||
* | |||
* [ Panel (auto x auto) [ Grid (auto x auto) ] | |||
* | |||
* AnyComponent (100% x 100%) | |||
* | |||
* <HERE SHOULD NOT BE ANY EMPTY SPACE> ] | |||
* | |||
* @author Vaadin Ltd | |||
*/ | |||
public class EmptySpaceOnPageAfterExpandedComponentTest extends | |||
MultiBrowserTest { | |||
@Test | |||
public void testNoEmptySpaceOnPageAfterExpandedComponent() { | |||
openTestURL(); | |||
final WebElement expandedElement = vaadinElementById("expandedElement"); | |||
final WebElement containerElement = vaadinElementById("container"); | |||
waitUntil(new ExpectedCondition<Boolean>() { | |||
@Override | |||
public Boolean apply(WebDriver input) { | |||
int expandedElementBottom = expandedElement.getLocation() | |||
.getY() + expandedElement.getSize().getHeight(); | |||
int containerElementBottom = containerElement.getLocation() | |||
.getY() + containerElement.getSize().getHeight(); | |||
return expandedElementBottom + 1 == containerElementBottom; | |||
} | |||
}); | |||
} | |||
} |
@@ -19,6 +19,7 @@ import java.io.IOException; | |||
import java.util.List; | |||
import org.junit.Test; | |||
import org.openqa.selenium.By; | |||
import com.vaadin.testbench.elements.ButtonElement; | |||
import com.vaadin.tests.tb3.MultiBrowserTest; | |||
@@ -27,7 +28,7 @@ public abstract class BaseAddReplaceMoveTest extends MultiBrowserTest { | |||
@Test | |||
public void LayoutAlignment() throws IOException, InterruptedException { | |||
openTestURL(); | |||
sleep(500); | |||
waitForElementPresent(By.className("v-table")); | |||
compareScreen("initial"); | |||
String[] states = { "add", "replace", "move", "remove" }; | |||
List<ButtonElement> buttons = $(ButtonElement.class).all(); | |||
@@ -35,7 +36,7 @@ public abstract class BaseAddReplaceMoveTest extends MultiBrowserTest { | |||
// go through all buttons click them and see result | |||
for (ButtonElement btn : buttons) { | |||
btn.click(); | |||
sleep(500); | |||
waitForElementPresent(By.className("v-table")); | |||
compareScreen(states[index]); | |||
index++; | |||
} |
@@ -19,21 +19,17 @@ import java.io.IOException; | |||
import java.util.List; | |||
import org.junit.Test; | |||
import org.openqa.selenium.By; | |||
import com.vaadin.testbench.elements.ButtonElement; | |||
import com.vaadin.tests.tb3.MultiBrowserTest; | |||
/** | |||
* | |||
* @since | |||
* @author Vaadin Ltd | |||
*/ | |||
public abstract class BaseLayoutExpandTest extends MultiBrowserTest { | |||
@Test | |||
public void LayoutExpand() throws IOException, InterruptedException { | |||
openTestURL(); | |||
sleep(500); | |||
waitForElementPresent(By.className("v-table")); | |||
compareScreen("initial"); | |||
String[] states = { "expand_100_0", "expand_50_50", "expand_25_75" }; | |||
List<ButtonElement> buttons = $(ButtonElement.class).all(); | |||
@@ -41,7 +37,7 @@ public abstract class BaseLayoutExpandTest extends MultiBrowserTest { | |||
// go through all buttons click them and see result | |||
for (ButtonElement btn : buttons) { | |||
btn.click(); | |||
sleep(500); | |||
waitForElementPresent(By.className("v-table")); | |||
compareScreen(states[index]); | |||
index++; | |||
} |