Change-Id: Iaaf86a6d0d3dbd33beb0d76f64383548be196f4dtags/7.5.1
@@ -415,7 +415,7 @@ public class ComponentSizeValidator implements Serializable { | |||
// main window, valid situation | |||
return true; | |||
} | |||
if (parent.getHeight() < 0) { | |||
if (isEffectiveUndefinedHeight(component)) { | |||
// Undefined height | |||
if (parent instanceof Window) { | |||
// Sub window with undefined size has a min-height | |||
@@ -513,10 +513,7 @@ public class ComponentSizeValidator implements Serializable { | |||
// Sub window with undefined size has a min-width | |||
return true; | |||
} | |||
if (parent.getWidth() < 0) { | |||
// Undefined width | |||
if (isEffectiveUndefinedWidth(parent)) { | |||
if (parent instanceof AbstractOrderedLayout) { | |||
AbstractOrderedLayout ol = (AbstractOrderedLayout) parent; | |||
boolean horizontal = true; | |||
@@ -591,6 +588,40 @@ public class ComponentSizeValidator implements Serializable { | |||
} | |||
/** | |||
* Checks if this component will be rendered with undefined width, either | |||
* because it has been set to undefined wide or because the parent forces it | |||
* to be (100% inside undefined) | |||
* | |||
*/ | |||
private static boolean isEffectiveUndefinedWidth(Component parent) { | |||
if (parent == null) { | |||
return false; | |||
} else if (parent.getWidth() < 0) { | |||
return true; | |||
} else if (parent.getWidthUnits() == Unit.PERCENTAGE) { | |||
return isEffectiveUndefinedWidth(parent.getParent()); | |||
} | |||
return false; | |||
} | |||
/** | |||
* Checks if this component will be rendered with undefined Height, either | |||
* because it has been set to undefined wide or because the parent forces it | |||
* to be (100% inside undefined) | |||
* | |||
*/ | |||
private static boolean isEffectiveUndefinedHeight(Component parent) { | |||
if (parent == null) { | |||
return false; | |||
} else if (parent.getHeight() < 0) { | |||
return true; | |||
} else if (parent.getHeightUnits() == Unit.PERCENTAGE) { | |||
return isEffectiveUndefinedHeight(parent.getParent()); | |||
} | |||
return false; | |||
} | |||
private static boolean hasNonRelativeWidthComponent(Form form) { | |||
Layout layout = form.getLayout(); | |||
Layout footer = form.getFooter(); |
@@ -0,0 +1,87 @@ | |||
/* | |||
* 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.orderedlayout; | |||
import com.vaadin.server.VaadinRequest; | |||
import com.vaadin.tests.components.AbstractTestUI; | |||
import com.vaadin.ui.Button; | |||
import com.vaadin.ui.HorizontalLayout; | |||
import com.vaadin.ui.NativeButton; | |||
import com.vaadin.ui.VerticalLayout; | |||
/** | |||
* | |||
* @since | |||
* @author Vaadin Ltd | |||
*/ | |||
public class NestedInvalidLayouts extends AbstractTestUI { | |||
@Override | |||
protected void setup(VaadinRequest request) { | |||
fullWidthTest(getLayout(), null); | |||
fullWidthTest(getLayout(), "100%"); | |||
fullHeightTest(getLayout(), null); | |||
fullHeightTest(getLayout(), "100%"); | |||
} | |||
private void fullWidthTest(VerticalLayout layout, String rootWidth) { | |||
// Contains | |||
// HL (-1) | |||
// * VL (100%) | |||
// ** Button (-1) (wide) | |||
// ** Button (100%) | |||
// This should be rendered just as if VL width was -1 (which it will | |||
// become when sending width to client), i.e. both buttons should be | |||
// equally wide | |||
final VerticalLayout l = new VerticalLayout(); | |||
l.setWidth(rootWidth); | |||
final Button c = new Button("blaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"); | |||
c.setWidth(null); | |||
l.addComponent(c); | |||
final Button b = new Button("c"); | |||
b.setWidth("100%"); | |||
l.addComponent(b); | |||
layout.addComponent(new HorizontalLayout(l)); | |||
} | |||
private void fullHeightTest(VerticalLayout layout, String rootHeight) { | |||
// Contains (height) | |||
// VL (-1) | |||
// * HL (100%) | |||
// ** Button (200px) (high) | |||
// ** Button (100%) | |||
// This should be rendered just as if HL height was -1 (which it will | |||
// become when sending height to client), i.e. both buttons should be | |||
// equally high | |||
final HorizontalLayout l = new HorizontalLayout(); | |||
l.setHeight(rootHeight); | |||
final NativeButton c = new NativeButton("hiiiigh"); | |||
c.setWidth(null); | |||
c.setHeight("200px"); | |||
l.addComponent(c); | |||
final NativeButton b = new NativeButton("c"); | |||
b.setHeight("100%"); | |||
l.addComponent(b); | |||
VerticalLayout vl = new VerticalLayout(l); | |||
vl.setHeight("100%"); | |||
layout.addComponent(vl); | |||
} | |||
} |
@@ -0,0 +1,57 @@ | |||
/* | |||
* 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.orderedlayout; | |||
import java.util.ArrayList; | |||
import java.util.List; | |||
import org.junit.Assert; | |||
import org.junit.Test; | |||
import com.vaadin.testbench.elements.ButtonElement; | |||
import com.vaadin.testbench.elements.NativeButtonElement; | |||
import com.vaadin.tests.tb3.SingleBrowserTest; | |||
public class NestedInvalidLayoutsTest extends SingleBrowserTest { | |||
@Test | |||
public void ensureCorrectSizes() { | |||
openTestURL(); | |||
// All Button components should have equal width | |||
List<Integer> widths = new ArrayList<Integer>(); | |||
List<ButtonElement> all = $(ButtonElement.class).state( | |||
"primaryStyleName", "v-button").all(); | |||
for (ButtonElement button : all) { | |||
widths.add(button.getSize().getWidth()); | |||
} | |||
assertAllEqual(widths); | |||
// All NativeButton components should have equal height | |||
List<Integer> heights = new ArrayList<Integer>(); | |||
for (NativeButtonElement button : $(NativeButtonElement.class).all()) { | |||
heights.add(button.getSize().getHeight()); | |||
} | |||
assertAllEqual(heights); | |||
} | |||
private void assertAllEqual(List<Integer> values) { | |||
Integer first = values.get(0); | |||
for (Integer w : values) { | |||
Assert.assertEquals(first, w); | |||
} | |||
} | |||
} |
@@ -72,6 +72,8 @@ public class SelectAllConstantViewport extends AbstractTestUIWithLog { | |||
layout.addComponent(table); | |||
layout.setSizeFull(); | |||
addComponent(layout); | |||
getContent().setSizeFull(); | |||
getLayout().setSizeFull(); | |||
} | |||
/* |