package org.mapfish.print.map.style; import com.google.common.base.Optional; import org.geotools.styling.Style; import org.junit.Test; import org.mapfish.print.AbstractMapfishSpringTest; import org.mapfish.print.TestHttpClientFactory; import org.mapfish.print.attribute.map.BBoxMapBounds; import org.mapfish.print.attribute.map.MapfishMapContext; import org.mapfish.print.config.Configuration; import org.mapfish.print.http.ConfigFileResolvingHttpRequestFactory; import org.mapfish.print.servlet.fileloader.ConfigFileLoaderManager; import org.springframework.beans.factory.annotation.Autowired; import java.awt.Dimension; import java.io.File; import static org.junit.Assert.assertEquals; import static org.junit.Assert.assertFalse; import static org.junit.Assert.assertTrue; /** * Test loading an style from a file. */ public class FileSLDParserPluginTest extends AbstractMapfishSpringTest { @Autowired private SLDParserPlugin parser; @Autowired private TestHttpClientFactory clientHttpRequestFactory; @Autowired private ConfigFileLoaderManager fileLoaderManager; private MapfishMapContext mapContext = new MapfishMapContext(new BBoxMapBounds(null, 0,0,10,10), new Dimension(20,20), 0, 72, true, true); @Test public void testParseStyle_SingleStyleRelativeToConfig() throws Throwable { final String fileName = "singleStyle.sld"; final Optional<Style> styleOptional = loadStyle(fileName, fileName); assertTrue (styleOptional.isPresent()); assertTrue(styleOptional.get() instanceof Style); assertEquals(1, styleOptional.get().featureTypeStyles().size()); assertEquals(2, styleOptional.get().featureTypeStyles().get(0).rules().size()); assertEquals(1, styleOptional.get().featureTypeStyles().get(0).rules().get(0).symbolizers().size()); assertEquals(1, styleOptional.get().featureTypeStyles().get(0).rules().get(1).symbolizers().size()); } @Test public void testParseStyle_SingleStyleRelativeToConfig_HasStyleIndex() throws Throwable { final String fileName = "singleStyle.sld"; final Optional<Style> styleOptional = loadStyle(fileName, fileName + "##1"); assertTrue (styleOptional.isPresent()); assertTrue(styleOptional.get() instanceof Style); assertEquals(1, styleOptional.get().featureTypeStyles().size()); assertEquals(2, styleOptional.get().featureTypeStyles().get(0).rules().size()); assertEquals(1, styleOptional.get().featureTypeStyles().get(0).rules().get(0).symbolizers().size()); assertEquals(1, styleOptional.get().featureTypeStyles().get(0).rules().get(1).symbolizers().size()); } @Test public void testParseStyle_SingleStyleAbsoluteFile() throws Throwable { File file = getFile(FileSLDParserPluginTest.class, "singleStyle.sld"); final Optional<Style> styleOptional = loadStyle(file.getName(), file.getAbsolutePath()); assertTrue (styleOptional.isPresent()); assertTrue(styleOptional.get() instanceof Style); assertEquals(1, styleOptional.get().featureTypeStyles().size()); assertEquals(2, styleOptional.get().featureTypeStyles().get(0).rules().size()); assertEquals(1, styleOptional.get().featureTypeStyles().get(0).rules().get(0).symbolizers().size()); assertEquals(1, styleOptional.get().featureTypeStyles().get(0).rules().get(1).symbolizers().size()); } @Test(expected = Exception.class) public void testParseStyle_MultipleStyles_NoIndex() throws Throwable { final String fileName = "multipleStyles.sld"; loadStyle(fileName, fileName); } @Test public void testParseStyle_MultipleStyles() throws Throwable { final String fileName = "multipleStyles.sld"; Optional<Style> styleOptional = loadStyle(fileName, fileName + "##1"); assertTrue (styleOptional.isPresent()); assertTrue(styleOptional.get() instanceof Style); assertEquals(1, styleOptional.get().featureTypeStyles().size()); assertEquals(2, styleOptional.get().featureTypeStyles().get(0).rules().size()); assertEquals(1, styleOptional.get().featureTypeStyles().get(0).rules().get(0).symbolizers().size()); assertEquals(1, styleOptional.get().featureTypeStyles().get(0).rules().get(1).symbolizers().size()); styleOptional = loadStyle(fileName, fileName + "##2"); assertTrue (styleOptional.isPresent()); assertTrue(styleOptional.get() instanceof Style); assertEquals(1, styleOptional.get().featureTypeStyles().size()); assertEquals(1, styleOptional.get().featureTypeStyles().get(0).rules().size()); assertEquals(2, styleOptional.get().featureTypeStyles().get(0).rules().get(0).symbolizers().size()); } @Test(expected = Exception.class) public void testIndexOutOfBounds() throws Throwable { final String fileName = "singleStyle.sld"; loadStyle(fileName, fileName + "##3"); } @Test(expected = Exception.class) public void testIndexTooLow() throws Throwable { final String fileName = "singleStyle.sld"; loadStyle(fileName, fileName + "##-1"); } @Test public void testFileNotInConfigDir() throws Throwable { final File tempFile = File.createTempFile("config", ".yaml"); File file = getFile(FileSLDParserPluginTest.class, "singleStyle.sld"); Configuration config = new Configuration(); config.setConfigurationFile(tempFile); config.setFileLoaderManager(this.fileLoaderManager); ConfigFileResolvingHttpRequestFactory requestFactory = new ConfigFileResolvingHttpRequestFactory( this.clientHttpRequestFactory, config); assertFalse(this.parser.parseStyle(config, requestFactory, file.getAbsolutePath()).isPresent()); } private Optional<Style> loadStyle(String fileName, String styleString) throws Throwable { File file = getFile(FileSLDParserPluginTest.class, fileName); Configuration config = new Configuration(); config.setConfigurationFile(file); config.setFileLoaderManager(this.fileLoaderManager); ConfigFileResolvingHttpRequestFactory requestFactory = new ConfigFileResolvingHttpRequestFactory( this.clientHttpRequestFactory, config); return this.parser.parseStyle(config, requestFactory, styleString); } }