*/
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",
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;
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 " : " ");
+ }
}
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;
@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