/*
* GeoTools - The Open Source Java GIS Toolkit
* http://geotools.org
*
* (C) 2005-2008, Open Source Geospatial Foundation (OSGeo)
*
* This library is free software; you can redistribute it and/or
* modify it under the terms of the GNU Lesser General Public
* License as published by the Free Software Foundation;
* version 2.1 of the License.
*
* This library is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
* Lesser General Public License for more details.
*/
package org.geotools.styling.visitor;
import java.awt.Color;
import junit.framework.TestCase;
import org.geotools.factory.CommonFactoryFinder;
import org.geotools.filter.IllegalFilterException;
import org.geotools.styling.FeatureTypeStyle;
import org.geotools.styling.Font;
import org.geotools.styling.RasterSymbolizer;
import org.geotools.styling.Rule;
import org.geotools.styling.Stroke;
import org.geotools.styling.Style;
import org.geotools.styling.StyleBuilder;
import org.geotools.styling.StyleFactory;
import org.geotools.styling.Symbolizer;
import org.geotools.styling.TextSymbolizer;
import org.opengis.filter.FilterFactory2;
/**
* Unit test for RescaleStyleVisitor.
*
* @author Jody Garnett (Refractions Research Inc)
*
* @source $URL$
*/
public class RescaleStyleVisitorTest extends TestCase {
StyleBuilder sb;
StyleFactory sf;
FilterFactory2 ff;
RescaleStyleVisitor visitor;
double scale;
public RescaleStyleVisitorTest(String testName) {
super(testName);
}
protected void setUp() throws Exception {
sf = CommonFactoryFinder.getStyleFactory(null);
ff = CommonFactoryFinder.getFilterFactory2(null);
sb = new StyleBuilder(sf, ff);
scale = 2.0;
visitor = new RescaleStyleVisitor( scale );
}
public void testStyleDuplication() throws IllegalFilterException {
//create a style
Style oldStyle = sb.createStyle("FTSName", sf.createPolygonSymbolizer());
oldStyle.getFeatureTypeStyles()[0].setSemanticTypeIdentifiers(new String[] {"simple", "generic:geometry"});
//duplicate it
oldStyle.accept(visitor);
Style newStyle = (Style) visitor.getCopy();
//compare it
assertNotNull(newStyle);
}
public void testStyle() throws Exception {
FeatureTypeStyle fts = sf.createFeatureTypeStyle();
fts.setFeatureTypeName("feature-type-1");
FeatureTypeStyle fts2 = fts2();
Style style = sf.getDefaultStyle();
style.addFeatureTypeStyle(fts);
style.addFeatureTypeStyle(fts2);
style.accept( visitor );
Style copy = (Style) visitor.getCopy();
Style notEq = sf.getDefaultStyle();
fts2 = fts2();
notEq.addFeatureTypeStyle(fts2);
}
private FeatureTypeStyle fts2() {
FeatureTypeStyle fts2 = sf.createFeatureTypeStyle();
Rule rule = sf.createRule();
fts2.addRule(rule);
fts2.setFeatureTypeName("feature-type-2");
return fts2;
}
public void testRule() throws Exception {
Symbolizer symb1 = sf.createLineSymbolizer(sf
.getDefaultStroke(), "geometry");
Symbolizer symb2 = sf.createPolygonSymbolizer(sf
.getDefaultStroke(), sf.getDefaultFill(), "shape");
RasterSymbolizer symb3 = sf.createRasterSymbolizer();
Rule rule = sf.createRule();
rule.setSymbolizers(new Symbolizer[] { symb1, symb2, symb3 });
rule.accept(visitor);
Rule clone = (Rule) visitor.getCopy();
assertNotNull( clone );
}
public void testStroke() throws Exception {
Stroke original = sb.createStroke(Color.RED, 2, new float[] {5, 10});
original.accept(visitor);
Stroke clone = (Stroke) visitor.getCopy();
assertEquals(4.0d, clone.getWidth().evaluate(null));
assertEquals(10.0f, clone.getDashArray()[0]);
assertEquals(20.0f, clone.getDashArray()[1]);
}
public void testTextSymbolizer() throws Exception {
TextSymbolizer ts = sb.createTextSymbolizer(Color.BLACK, (Font) null, "label");
ts.getOptions().put(TextSymbolizer.MAX_DISPLACEMENT_KEY, "10");
ts.accept(visitor);
TextSymbolizer clone = (TextSymbolizer) visitor.getCopy();
assertEquals("20", clone.getOptions().get(TextSymbolizer.MAX_DISPLACEMENT_KEY));
}
}