/* /* (c) 2017 Open Source Geospatial Foundation - all rights reserved * This code is licensed under the GPL 2.0 license, available at the root * application directory. */ package org.geoserver.ysld; import static org.easymock.EasyMock.anyObject; import static org.easymock.EasyMock.expect; import static org.easymock.EasyMock.expectLastCall; import static org.easymock.EasyMock.getCurrentArguments; import static org.easymock.classextension.EasyMock.createNiceMock; import static org.easymock.classextension.EasyMock.replay; import static org.junit.Assert.assertEquals; import static org.junit.Assert.assertNotNull; import java.io.InputStream; import org.easymock.IAnswer; import org.geoserver.catalog.Catalog; import org.geoserver.catalog.FeatureTypeInfo; import org.geoserver.catalog.ResourcePool; import org.geoserver.catalog.StyleGenerator; import org.geoserver.catalog.StyleInfo; import org.geoserver.catalog.StyleType; import org.geoserver.catalog.WorkspaceInfo; import org.geoserver.catalog.impl.CatalogFactoryImpl; import org.geotools.data.DataUtilities; import org.geotools.styling.FeatureTypeStyle; import org.geotools.styling.NamedLayer; import org.geotools.styling.Style; import org.geotools.styling.StyledLayerDescriptor; import org.junit.Test; import org.opengis.feature.simple.SimpleFeatureType; public class YsldStyleGeneratorTest { /** * Test integration of {@link YsldHandler#getStyle(org.geoserver.catalog.StyleType, java.awt.Color, String, String)} with the * {@link StyleGenerator} by generating a generic style (from {@link YsldHandler#TEMPLATES} for {@link StyleType.GENERIC}). * */ @Test public void testYsldStyleGenerator() throws Exception { final YsldHandler handler = new YsldHandler(); ResourcePool rp = createNiceMock(ResourcePool.class); rp.writeStyle((StyleInfo) anyObject(), (InputStream) anyObject()); expectLastCall().andAnswer(new IAnswer<Void>() { @Override public Void answer() throws Throwable { Object[] args = getCurrentArguments(); InputStream is = (InputStream) args[1]; StyledLayerDescriptor sld = handler.parse(is, null, null, null); assertEquals(1, sld.getStyledLayers().length); NamedLayer nl = (NamedLayer) sld.getStyledLayers()[0]; assertEquals(1, nl.getStyles().length); Style style = nl.getStyles()[0]; assertEquals(1, style.featureTypeStyles().size()); FeatureTypeStyle fts = style.featureTypeStyles().get(0); assertEquals(4, fts.rules().size()); assertEquals("raster", fts.rules().get(0).getDescription().getTitle().toString()); assertEquals("orange polygon", fts.rules().get(1).getDescription().getTitle().toString()); assertEquals("orange line", fts.rules().get(2).getDescription().getTitle().toString()); assertEquals("orange point", fts.rules().get(3).getDescription().getTitle().toString()); for (org.geotools.styling.Rule r : fts.rules()) { assertEquals(1, r.getSymbolizers().length); } return null; } }); Catalog cat = createNiceMock(Catalog.class); expect(cat.getFactory()).andReturn(new CatalogFactoryImpl(null)).anyTimes(); expect(cat.getResourcePool()).andReturn(rp).anyTimes(); WorkspaceInfo ws = createNiceMock(WorkspaceInfo.class); FeatureTypeInfo ft = createNiceMock(FeatureTypeInfo.class); expect(ft.getName()).andReturn("foo").anyTimes(); replay(rp, ft, ws, cat); StyleGenerator gen = new StyleGenerator(cat) { protected void randomizeRamp() { // do not randomize for this test }; }; gen.setWorkspace(ws); SimpleFeatureType schema = DataUtilities.createType("foo", "geom:Geometry"); StyleInfo style = gen.createStyle(handler, ft, schema); assertNotNull(style); assertNotNull(style.getWorkspace()); } }