]> source.dussan.org Git - vaadin-framework.git/commitdiff
Correctly write margin info for FormLayout into design files (#8804)
authorArtur <artur@vaadin.com>
Thu, 16 Mar 2017 09:25:35 +0000 (11:25 +0200)
committerHenri Sara <henri.sara@gmail.com>
Thu, 16 Mar 2017 09:25:35 +0000 (11:25 +0200)
Fixes #8800

server/src/main/java/com/vaadin/ui/AbstractLayout.java
server/src/test/java/com/vaadin/tests/server/component/DeclarativeMarginTestBase.java
server/src/test/java/com/vaadin/tests/server/component/abstractorderedlayout/AbstractOrderedLayoutDeclarativeTest.java
server/src/test/java/com/vaadin/tests/server/component/gridlayout/GridLayoutDeclarativeTest.java

index fe073eb68792e62348e68f7ed640ddeace494538..7e62176e7c7c2c0716d80e0f02d49bc1f6771b6b 100644 (file)
@@ -105,10 +105,16 @@ public abstract class AbstractLayout extends AbstractComponentContainer
      */
     protected void writeMargin(Element design, MarginInfo margin,
             MarginInfo defMargin, DesignContext context) {
-        if (margin.hasAll() || margin.hasNone()) {
+        if (defMargin.getBitMask() == margin.getBitMask()) {
+            // Default, no need to write
+        } else if (margin.hasNone()) {
+            // Write "margin='false'"
             DesignAttributeHandler.writeAttribute("margin", design.attributes(),
-                    margin.hasAll(), defMargin.hasAll(), boolean.class,
-                    context);
+                    false, true, boolean.class, context);
+        } else if (margin.hasAll()) {
+            // Write "margin"
+            DesignAttributeHandler.writeAttribute("margin", design.attributes(),
+                    true, false, boolean.class, context);
         } else {
 
             DesignAttributeHandler.writeAttribute("margin-left",
index b333c89fc84eb2b78e4ba8d59af9812f7892470c..66f6076f7b4584b667f508f7c49da6f05fb6d142 100644 (file)
@@ -21,11 +21,34 @@ import com.vaadin.shared.ui.MarginInfo;
 import com.vaadin.tests.design.DeclarativeTestBase;
 import com.vaadin.ui.Layout;
 import com.vaadin.ui.Layout.MarginHandler;
+import com.vaadin.ui.Layout.SpacingHandler;
 
-public abstract class DeclarativeMarginTestBase<L extends Layout & MarginHandler>
+public abstract class DeclarativeMarginTestBase<L extends Layout & MarginHandler & SpacingHandler>
         extends DeclarativeTestBase<L> {
 
-    protected void testMargins(String componentTag, boolean defaultMargin) {
+    protected void testSpacing(String componentTag, boolean defaultSpacing) {
+        // Spacing on
+        String design = "<" + componentTag;
+        if (!defaultSpacing) {
+            design += " spacing";
+        }
+        design += " />";
+        L layout = read(design);
+        Assert.assertTrue(layout.isSpacing());
+        testWrite(design, layout);
+
+        // Spacing off
+        design = "<" + componentTag;
+        if (defaultSpacing) {
+            design += " spacing='false'";
+        }
+        design += " />";
+        layout = read(design);
+        Assert.assertFalse(layout.isSpacing());
+        testWrite(design, layout);
+    }
+
+    protected void testMargins(String componentTag, MarginInfo defaultMargin) {
 
         for (int i = 0; i < 16; ++i) {
             boolean top = (i & 1) == 1;
@@ -33,44 +56,52 @@ public abstract class DeclarativeMarginTestBase<L extends Layout & MarginHandler
             boolean bottom = (i & 4) == 4;
             boolean left = (i & 8) == 8;
 
-            MarginInfo m = new MarginInfo(top, right, bottom, left);
+            MarginInfo marginToTest = new MarginInfo(top, right, bottom, left);
 
-            String design = getMarginTag(componentTag, defaultMargin, top,
-                    right, bottom, left);
+            String design = getMarginTag(componentTag, defaultMargin,
+                    marginToTest);
 
             // The assertEquals machinery in DeclarativeTestBase uses bean
             // introspection and MarginInfo is not a proper bean. It ends up
             // considering *all* MarginInfo objects equal... (#18229)
             L layout = read(design);
-            Assert.assertEquals("For tag: " + design, m, layout.getMargin());
+            Assert.assertEquals("For tag: " + design, marginToTest,
+                    layout.getMargin());
 
             testWrite(design, layout);
         }
     }
 
-    private String getMarginTag(String componentTag, boolean defaultMargin,
-            boolean top, boolean right, boolean bottom, boolean left) {
+    private String getMarginTag(String componentTag, MarginInfo defaultMargin,
+            MarginInfo marginToTest) {
         String s = "<" + componentTag + " ";
-        String suffix = defaultMargin ? "=false " : " ";
 
-        if (top == left && top == right && top == bottom) {
-            if (top != defaultMargin) {
-                s += "margin" + suffix;
+        if (marginToTest.hasAll()) {
+            if (!defaultMargin.hasAll()) {
+                s += "margin ";
+            }
+        } else if (marginToTest.hasNone()) {
+            if (!defaultMargin.hasNone()) {
+                s += "margin=false ";
             }
         } else {
-            if (left != defaultMargin) {
-                s += "margin-left" + suffix;
+            if (marginToTest.hasLeft() != defaultMargin.hasLeft()) {
+                s += marginValue("margin-left", defaultMargin.hasLeft());
             }
-            if (right != defaultMargin) {
-                s += "margin-right" + suffix;
+            if (marginToTest.hasRight() != defaultMargin.hasRight()) {
+                s += marginValue("margin-right", defaultMargin.hasRight());
             }
-            if (top != defaultMargin) {
-                s += "margin-top" + suffix;
+            if (marginToTest.hasTop() != defaultMargin.hasTop()) {
+                s += marginValue("margin-top", defaultMargin.hasTop());
             }
-            if (bottom != defaultMargin) {
-                s += "margin-bottom" + suffix;
+            if (marginToTest.hasBottom() != defaultMargin.hasBottom()) {
+                s += marginValue("margin-bottom", defaultMargin.hasBottom());
             }
         }
         return s + " />";
     }
+
+    private String marginValue(String prefix, boolean defaultOn) {
+        return prefix + (defaultOn ? "=false " : " ");
+    }
 }
index ec8db9e46123b67515bc0584a8a0ad639c0da761..8db29d72abf6b6a36472df60f99a850c9cb4ee04 100644 (file)
@@ -21,6 +21,7 @@ import java.util.List;
 import org.junit.Test;
 
 import com.vaadin.shared.ui.ContentMode;
+import com.vaadin.shared.ui.MarginInfo;
 import com.vaadin.tests.server.component.DeclarativeMarginTestBase;
 import com.vaadin.ui.AbstractOrderedLayout;
 import com.vaadin.ui.Alignment;
@@ -41,12 +42,32 @@ public class AbstractOrderedLayoutDeclarativeTest
 
     @Test
     public void testMarginsVertical() {
-        testMargins("vaadin-vertical-layout", true);
+        testMargins("vaadin-vertical-layout", new MarginInfo(true));
     }
 
     @Test
     public void testMarginsHorizontal() {
-        testMargins("vaadin-horizontal-layout", false);
+        testMargins("vaadin-horizontal-layout", new MarginInfo(false));
+    }
+
+    @Test
+    public void testMarginsForm() {
+        testMargins("vaadin-form-layout", new MarginInfo(true, false));
+    }
+
+    @Test
+    public void testSpacingVertical() {
+        testSpacing("vaadin-vertical-layout", true);
+    }
+
+    @Test
+    public void testSpacingHorizontal() {
+        testSpacing("vaadin-horizontal-layout", true);
+    }
+
+    @Test
+    public void testSpacingForm() {
+        testSpacing("vaadin-form-layout", true);
     }
 
     @Test
index 0c1b4ce162f29d339fdce8ec6160ef9fe3b197de..146810d4bf31b0b68d1b2b7d61723ec3dbd60457 100644 (file)
@@ -23,6 +23,7 @@ import org.junit.Assert;
 import org.junit.Test;
 
 import com.vaadin.shared.ui.ContentMode;
+import com.vaadin.shared.ui.MarginInfo;
 import com.vaadin.tests.server.component.DeclarativeMarginTestBase;
 import com.vaadin.ui.Alignment;
 import com.vaadin.ui.Button;
@@ -37,7 +38,7 @@ public class GridLayoutDeclarativeTest
 
     @Test
     public void testMargins() {
-        testMargins("vaadin-grid-layout", false);
+        testMargins("vaadin-grid-layout", new MarginInfo(false));
     }
 
     @Test