/* * GeoTools - The Open Source Java GIS Toolkit * http://geotools.org * * (C) 2002-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.renderer.lite; import java.awt.Color; import java.io.File; import java.net.URL; import static org.junit.Assert.*; import org.geotools.styling.Graphic; import org.geotools.styling.PointSymbolizer; import org.geotools.styling.Rule; import org.geotools.styling.Style; import org.geotools.styling.StyleBuilder; import org.geotools.styling.Symbolizer; import org.geotools.test.TestData; import org.junit.Test; public class RenderingBufferExtractorTest { StyleBuilder sb = new StyleBuilder(); @Test public void testNoStroke() { Style style = sb.createStyle(sb.createTextSymbolizer()); MetaBufferEstimator rbe = new MetaBufferEstimator(); assertEquals(0, rbe.getBuffer()); assertTrue(rbe.isEstimateAccurate()); rbe.visit(style); assertEquals(0, rbe.getBuffer()); assertTrue(rbe.isEstimateAccurate()); } @Test public void testSimpleStroke() { Style style = sb.createStyle(sb.createLineSymbolizer(sb.createStroke(10.0))); MetaBufferEstimator rbe = new MetaBufferEstimator(); rbe.visit(style); assertEquals(10, rbe.getBuffer()); assertTrue(rbe.isEstimateAccurate()); } @Test public void testSimpleGraphic() { PointSymbolizer ps = sb.createPointSymbolizer(sb.createGraphic(null, sb .createMark(sb.MARK_CIRCLE), null)); ps.getGraphic().setSize(sb.literalExpression(15)); Style style = sb.createStyle(ps); MetaBufferEstimator rbe = new MetaBufferEstimator(); rbe.visit(style); assertEquals(15, rbe.getBuffer()); assertTrue(rbe.isEstimateAccurate()); } @Test public void testReachableExternalGraphic() { URL resource = TestData.getResource(this, "draw.png"); PointSymbolizer ps = sb.createPointSymbolizer(sb.createGraphic(null, null, sb .createExternalGraphic(resource, "image/png"))); ps.getGraphic().setSize(sb.literalExpression(null)); Style style = sb.createStyle(ps); MetaBufferEstimator rbe = new MetaBufferEstimator(); rbe.visit(style); assertEquals(24, rbe.getBuffer()); assertTrue(rbe.isEstimateAccurate()); } @Test public void testUnreachableExternalGraphic() throws Exception { File file = new File(TestData.getResource(this, "draw.png").toURI()); URL resource = new File(file.getParent(), "draw-not-there.png").toURI().toURL(); PointSymbolizer ps = sb.createPointSymbolizer(sb.createGraphic(null, null, sb .createExternalGraphic(resource, "image/png"))); ps.getGraphic().setSize(sb.literalExpression(null)); Style style = sb.createStyle(ps); MetaBufferEstimator rbe = new MetaBufferEstimator(); rbe.visit(style); assertEquals(0, rbe.getBuffer()); assertFalse(rbe.isEstimateAccurate()); } @Test public void testNonIntegerStroke() { Style style = sb.createStyle(sb.createLineSymbolizer(sb.createStroke(10.8))); MetaBufferEstimator rbe = new MetaBufferEstimator(); rbe.visit(style); assertEquals(11, rbe.getBuffer()); assertTrue(rbe.isEstimateAccurate()); } @Test public void testMultiSymbolizers() { Symbolizer ls = sb.createLineSymbolizer(sb.createStroke(10.8)); Symbolizer ps = sb.createPolygonSymbolizer(sb.createStroke(12), sb.createFill()); Rule r = sb.createRule(new Symbolizer[] { ls, ps }); MetaBufferEstimator rbe = new MetaBufferEstimator(); rbe.visit(r); assertEquals(12, rbe.getBuffer()); assertTrue(rbe.isEstimateAccurate()); } @Test public void testPropertyWidth() { Symbolizer ls = sb.createLineSymbolizer(sb.createStroke(sb.colorExpression(Color.BLACK), sb .attributeExpression("gimbo"))); Symbolizer ps = sb.createPolygonSymbolizer(sb.createStroke(12), sb.createFill()); Rule r = sb.createRule(new Symbolizer[] { ls, ps }); MetaBufferEstimator rbe = new MetaBufferEstimator(); rbe.visit(r); assertEquals(12, rbe.getBuffer()); assertTrue(!rbe.isEstimateAccurate()); } @Test public void testLiteralParseStroke() { Style style = sb.createStyle(sb.createLineSymbolizer(sb.createStroke(sb .colorExpression(Color.BLACK), sb.literalExpression("10.0")))); MetaBufferEstimator rbe = new MetaBufferEstimator(); rbe.visit(style); assertEquals(10, rbe.getBuffer()); assertTrue(rbe.isEstimateAccurate()); } @Test public void testNpePreventionStroke() { Style style = sb.createStyle(sb.createLineSymbolizer(sb.createStroke(sb .colorExpression(Color.BLACK), sb.literalExpression(null)))); MetaBufferEstimator rbe = new MetaBufferEstimator(); rbe.visit(style); assertEquals(1, rbe.getBuffer()); assertTrue(rbe.isEstimateAccurate()); } @Test public void testLiteralParseGraphics() { Graphic g = sb.createGraphic(); g.setSize(sb.literalExpression("10.0")); MetaBufferEstimator rbe = new MetaBufferEstimator(); rbe.visit(g); assertEquals(10, rbe.getBuffer()); assertTrue(rbe.isEstimateAccurate()); } }