/*******************************************************************************
* Copyright (c) 2004, 2008 John Krasnay and others.
* All rights reserved. This program and the accompanying materials
* are made available under the terms of the Eclipse Public License v1.0
* which accompanies this distribution, and is available at
* http://www.eclipse.org/legal/epl-v10.html
*
* Contributors:
* John Krasnay - initial API and implementation
*******************************************************************************/
package test.net.sf.vex.css;
import org.w3c.css.sac.LexicalUnit;
import junit.framework.TestCase;
import net.sf.vex.core.DisplayDevice;
import net.sf.vex.css.BorderStyleProperty;
import net.sf.vex.css.BorderWidthProperty;
import net.sf.vex.css.CSS;
import net.sf.vex.css.IProperty;
import net.sf.vex.css.Styles;
public class PropertyTest extends TestCase {
/**
* From CSS2.1 section 8.5.3
*/
public void testBorderStyleProperty() throws Exception {
Styles styles = new Styles();
Styles parentStyles = new Styles();
IProperty prop = new BorderStyleProperty(CSS.BORDER_TOP_STYLE);
// Inheritance
parentStyles.put(CSS.BORDER_TOP_STYLE, CSS.DASHED);
assertEquals(CSS.NONE, prop.calculate(null, parentStyles, styles));
assertEquals(CSS.DASHED, prop.calculate(TestLU.INHERIT, parentStyles, styles)); // not inherited
// Regular values
assertEquals(CSS.NONE, prop.calculate(TestLU.createIdent(CSS.NONE), parentStyles, styles));
assertEquals(CSS.HIDDEN, prop.calculate(TestLU.createIdent(CSS.HIDDEN), parentStyles, styles));
assertEquals(CSS.DOTTED, prop.calculate(TestLU.createIdent(CSS.DOTTED), parentStyles, styles));
assertEquals(CSS.DASHED, prop.calculate(TestLU.createIdent(CSS.DASHED), parentStyles, styles));
assertEquals(CSS.SOLID, prop.calculate(TestLU.createIdent(CSS.SOLID), parentStyles, styles));
assertEquals(CSS.DOUBLE, prop.calculate(TestLU.createIdent(CSS.DOUBLE), parentStyles, styles));
assertEquals(CSS.GROOVE, prop.calculate(TestLU.createIdent(CSS.GROOVE), parentStyles, styles));
assertEquals(CSS.RIDGE, prop.calculate(TestLU.createIdent(CSS.RIDGE), parentStyles, styles));
assertEquals(CSS.INSET, prop.calculate(TestLU.createIdent(CSS.INSET), parentStyles, styles));
assertEquals(CSS.OUTSET, prop.calculate(TestLU.createIdent(CSS.OUTSET), parentStyles, styles));
// Invalid token
assertEquals(CSS.NONE, prop.calculate(TestLU.createIdent(CSS.BOLD), parentStyles, styles));
// Wrong type
assertEquals(CSS.NONE, prop.calculate(TestLU.createString(CSS.HIDDEN), parentStyles, styles));
}
/**
* From CSS2.1 section 8.5.1
*/
public void testBorderWidthProperty() throws Exception {
Styles styles = new Styles();
Styles parentStyles = new Styles();
DisplayDevice.setCurrent(new DummyDisplayDevice(50, 100));
IProperty prop = new BorderWidthProperty(CSS.BORDER_TOP_WIDTH, CSS.BORDER_TOP_STYLE, IProperty.AXIS_VERTICAL);
styles.put(CSS.FONT_SIZE, new Float(12));
styles.put(CSS.BORDER_TOP_STYLE, CSS.SOLID);
// Inheritance
parentStyles.put(CSS.BORDER_TOP_WIDTH, new Integer(27));
assertEquals(new Integer(3), prop.calculate(null, parentStyles, styles));
assertEquals(new Integer(27), prop.calculate(TestLU.INHERIT, parentStyles, styles)); // not inherited
// Regular values
assertEquals(new Integer(20), prop.calculate(TestLU.createFloat(LexicalUnit.SAC_INCH, 0.2f), parentStyles, styles));
// Invalid token
assertEquals(new Integer(3), prop.calculate(TestLU.createIdent(CSS.BOLD), parentStyles, styles));
// Wrong type
assertEquals(new Integer(3), prop.calculate(TestLU.createString(CSS.HIDDEN), parentStyles, styles));
// Corresponding style is "none" or "hidden"
styles.put(CSS.BORDER_TOP_STYLE, CSS.NONE);
assertEquals(new Integer(0), prop.calculate(TestLU.createFloat(LexicalUnit.SAC_INCH, 0.2f), parentStyles, styles));
styles.put(CSS.BORDER_TOP_STYLE, CSS.HIDDEN);
assertEquals(new Integer(0), prop.calculate(TestLU.createFloat(LexicalUnit.SAC_INCH, 0.2f), parentStyles, styles));
// check that we use the proper PPI
styles.put(CSS.BORDER_LEFT_STYLE, CSS.SOLID);
prop = new BorderWidthProperty(CSS.BORDER_LEFT_WIDTH, CSS.BORDER_LEFT_STYLE, IProperty.AXIS_HORIZONTAL);
assertEquals(new Integer(10), prop.calculate(TestLU.createFloat(LexicalUnit.SAC_INCH, 0.2f), parentStyles, styles));
}
/**
* From CSS2.1 section 8.5.2 (border-XXX-color),
* section 14.1 (color), and section 14.2.1 (background-color)
*/
public void testColorProperty() throws Exception {
}
private class DummyDisplayDevice extends DisplayDevice {
public DummyDisplayDevice(int horizontalPPI, int verticalPPI) {
this.horizontalPPI = horizontalPPI;
this.verticalPPI = verticalPPI;
}
public int getHorizontalPPI() {
return this.horizontalPPI;
}
public int getVerticalPPI() {
return this.verticalPPI;
}
private int horizontalPPI;
private int verticalPPI;
}
}