/*
* Copyright 2000-2016 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.server.component;
import org.junit.Assert;
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 & SpacingHandler>
extends DeclarativeTestBase<L> {
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 right = (i & 2) == 2;
boolean bottom = (i & 4) == 4;
boolean left = (i & 8) == 8;
MarginInfo marginToTest = new MarginInfo(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, marginToTest,
layout.getMargin());
testWrite(design, layout);
}
}
private String getMarginTag(String componentTag, MarginInfo defaultMargin,
MarginInfo marginToTest) {
String s = "<" + componentTag + " ";
if (marginToTest.hasAll()) {
if (!defaultMargin.hasAll()) {
s += "margin ";
}
} else if (marginToTest.hasNone()) {
if (!defaultMargin.hasNone()) {
s += "margin=false ";
}
} else {
if (marginToTest.hasLeft() != defaultMargin.hasLeft()) {
s += marginValue("margin-left", defaultMargin.hasLeft());
}
if (marginToTest.hasRight() != defaultMargin.hasRight()) {
s += marginValue("margin-right", defaultMargin.hasRight());
}
if (marginToTest.hasTop() != defaultMargin.hasTop()) {
s += marginValue("margin-top", defaultMargin.hasTop());
}
if (marginToTest.hasBottom() != defaultMargin.hasBottom()) {
s += marginValue("margin-bottom", defaultMargin.hasBottom());
}
}
return s + " />";
}
private String marginValue(String prefix, boolean defaultOn) {
return prefix + (defaultOn ? "=false " : " ");
}
}