From 1cf32b74e22297201273d8b3d8c064cd1f3c3104 Mon Sep 17 00:00:00 2001 From: Teemu Suo-Anttila Date: Tue, 21 Jul 2015 14:00:03 +0300 Subject: [PATCH] Revert changes which were previously reverted from only 7.5 (#19424) Revert "Take Window special case into account for invalid layouts (#17598)" This reverts commit abc1c5dff6438d65e53473b69ae9a3ca2b8e60e1. Revert "Render nested invalid layouts correctly (#17598)" This reverts commit ac4e85f4e35a57d1ba6e6f3448744cbb0c2df60f. Added test to ensure a similar problem is not reintroduced later Change-Id: I892896e953637d793d0c0a788f28f3b61494d441 --- .../vaadin/server/ComponentSizeValidator.java | 53 ++--------- .../orderedlayout/NestedInvalidLayouts.java | 87 ------------------- .../NestedInvalidLayoutsTest.java | 57 ------------ .../table/SelectAllConstantViewport.java | 2 - .../RelativeSizeInUndefinedCssLayout.java | 46 ++++++++++ .../RelativeSizeInUndefinedCssLayoutTest.java | 37 ++++++++ 6 files changed, 88 insertions(+), 194 deletions(-) delete mode 100644 uitest/src/com/vaadin/tests/components/orderedlayout/NestedInvalidLayouts.java delete mode 100644 uitest/src/com/vaadin/tests/components/orderedlayout/NestedInvalidLayoutsTest.java create mode 100644 uitest/src/com/vaadin/tests/layouts/RelativeSizeInUndefinedCssLayout.java create mode 100644 uitest/src/com/vaadin/tests/layouts/RelativeSizeInUndefinedCssLayoutTest.java diff --git a/server/src/com/vaadin/server/ComponentSizeValidator.java b/server/src/com/vaadin/server/ComponentSizeValidator.java index eb2aa52297..b8b06c780f 100644 --- a/server/src/com/vaadin/server/ComponentSizeValidator.java +++ b/server/src/com/vaadin/server/ComponentSizeValidator.java @@ -415,7 +415,7 @@ public class ComponentSizeValidator implements Serializable { // main window, valid situation return true; } - if (isEffectiveUndefinedHeight(component)) { + if (parent.getHeight() < 0) { // Undefined height if (parent instanceof Window) { // Sub window with undefined size has a min-height @@ -513,7 +513,10 @@ public class ComponentSizeValidator implements Serializable { // Sub window with undefined size has a min-width return true; } - if (isEffectiveUndefinedWidth(parent)) { + + if (parent.getWidth() < 0) { + // Undefined width + if (parent instanceof AbstractOrderedLayout) { AbstractOrderedLayout ol = (AbstractOrderedLayout) parent; boolean horizontal = true; @@ -588,52 +591,6 @@ 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) { - if (parent instanceof Window) { - // Window has some weird haxxors to support 100% children when - // window is -1 - return false; - } - - 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) { - if (parent instanceof Window) { - // Window has some weird haxxors to support 100% children when - // window is -1 - return false; - } - - 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(); diff --git a/uitest/src/com/vaadin/tests/components/orderedlayout/NestedInvalidLayouts.java b/uitest/src/com/vaadin/tests/components/orderedlayout/NestedInvalidLayouts.java deleted file mode 100644 index 9bc8a418da..0000000000 --- a/uitest/src/com/vaadin/tests/components/orderedlayout/NestedInvalidLayouts.java +++ /dev/null @@ -1,87 +0,0 @@ -/* - * 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); - } - -} diff --git a/uitest/src/com/vaadin/tests/components/orderedlayout/NestedInvalidLayoutsTest.java b/uitest/src/com/vaadin/tests/components/orderedlayout/NestedInvalidLayoutsTest.java deleted file mode 100644 index cbae7acc94..0000000000 --- a/uitest/src/com/vaadin/tests/components/orderedlayout/NestedInvalidLayoutsTest.java +++ /dev/null @@ -1,57 +0,0 @@ -/* - * 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 widths = new ArrayList(); - List 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 heights = new ArrayList(); - for (NativeButtonElement button : $(NativeButtonElement.class).all()) { - heights.add(button.getSize().getHeight()); - } - assertAllEqual(heights); - } - - private void assertAllEqual(List values) { - Integer first = values.get(0); - for (Integer w : values) { - Assert.assertEquals(first, w); - } - } -} diff --git a/uitest/src/com/vaadin/tests/components/table/SelectAllConstantViewport.java b/uitest/src/com/vaadin/tests/components/table/SelectAllConstantViewport.java index 3bd17c163c..5a406eac48 100644 --- a/uitest/src/com/vaadin/tests/components/table/SelectAllConstantViewport.java +++ b/uitest/src/com/vaadin/tests/components/table/SelectAllConstantViewport.java @@ -72,8 +72,6 @@ public class SelectAllConstantViewport extends AbstractTestUIWithLog { layout.addComponent(table); layout.setSizeFull(); addComponent(layout); - getContent().setSizeFull(); - getLayout().setSizeFull(); } /* diff --git a/uitest/src/com/vaadin/tests/layouts/RelativeSizeInUndefinedCssLayout.java b/uitest/src/com/vaadin/tests/layouts/RelativeSizeInUndefinedCssLayout.java new file mode 100644 index 0000000000..a139c7f67a --- /dev/null +++ b/uitest/src/com/vaadin/tests/layouts/RelativeSizeInUndefinedCssLayout.java @@ -0,0 +1,46 @@ +/* + * 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.layouts; + +import com.vaadin.server.VaadinRequest; +import com.vaadin.tests.components.AbstractTestUI; +import com.vaadin.ui.CssLayout; +import com.vaadin.ui.FormLayout; +import com.vaadin.ui.TextField; + +public class RelativeSizeInUndefinedCssLayout extends AbstractTestUI { + + @Override + protected void setup(VaadinRequest request) { + getPage().getStyles().add(".css-style { width: 520px; }"); + + CssLayout cssLayout = new CssLayout(); + cssLayout.addStyleName("css-style"); + + setContent(cssLayout); + + FormLayout formLayout = new FormLayout(); + formLayout.setSizeFull(); + + cssLayout.addComponent(formLayout); + + TextField tf = new TextField("Enter something"); + tf.setWidth("100%"); + formLayout.addComponent(tf); + + } + +} diff --git a/uitest/src/com/vaadin/tests/layouts/RelativeSizeInUndefinedCssLayoutTest.java b/uitest/src/com/vaadin/tests/layouts/RelativeSizeInUndefinedCssLayoutTest.java new file mode 100644 index 0000000000..340c627dd4 --- /dev/null +++ b/uitest/src/com/vaadin/tests/layouts/RelativeSizeInUndefinedCssLayoutTest.java @@ -0,0 +1,37 @@ +/* + * 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.layouts; + +import org.junit.Assert; +import org.junit.Test; + +import com.vaadin.testbench.elements.FormLayoutElement; +import com.vaadin.testbench.elements.TextFieldElement; +import com.vaadin.tests.tb3.SingleBrowserTestPhantomJS2; + +public class RelativeSizeInUndefinedCssLayoutTest extends + SingleBrowserTestPhantomJS2 { + + @Test + public void relativeSizeInUndefinedCssLayout() { + openTestURL(); + int w = $(FormLayoutElement.class).first().getSize().getWidth(); + Assert.assertEquals(w, 520); + + int w2 = $(TextFieldElement.class).first().getSize().getWidth(); + Assert.assertTrue(w2 > 400); + } +} -- 2.39.5