package org.geotools.process.raster; import static org.junit.Assert.*; import java.util.Arrays; import java.util.Iterator; import java.util.Map; import java.util.Set; import org.geotools.data.Parameter; import org.geotools.factory.FactoryIteratorProvider; import org.geotools.factory.GeoTools; import org.geotools.feature.NameImpl; import org.geotools.process.Processors; import org.geotools.process.factory.DescribeProcess; import org.geotools.process.factory.DescribeResult; import org.geotools.util.NumberRange; import org.jaitools.numeric.Range; import org.junit.Test; import org.opengis.feature.type.Name; public class RasterProcessFactoryTest { RasterProcessFactory factory = new RasterProcessFactory(); @Test public void testLookup() { Set<Name> names = factory.getNames(); assertFalse(names.isEmpty()); assertTrue(names.contains(new NameImpl("ras", "AddCoverages"))); } @Test public void testRangeLookup() { Map<String, Parameter<?>> params = factory.getParameterInfo(new NameImpl("ras", "RangeLookup")); Parameter<?> ranges = params.get("ranges"); assertEquals("ranges", ranges.getName()); assertEquals(0, ranges.getMinOccurs()); assertEquals(Integer.MAX_VALUE, ranges.getMaxOccurs()); assertEquals(Range.class, ranges.getType()); } @Test public void testAddCustomProcess() { assertNull(Processors.createProcess(new NameImpl("ras", "Custom"))); FactoryIteratorProvider p = new FactoryIteratorProvider() { @Override public <T> Iterator<T> iterator(Class<T> category) { if (category == RasterProcess.class) { return (Iterator<T>) Arrays.asList(new CustomProcess()).iterator(); } return null; } }; GeoTools.addFactoryIteratorProvider(p); try { Processors.reset(); assertNotNull(Processors.createProcess(new NameImpl("ras", "Custom"))); } finally { GeoTools.removeFactoryIteratorProvider(p); } } @DescribeProcess(title = "Custom", description = "Custom mock process") public static class CustomProcess implements RasterProcess { @DescribeResult(name = "result", description = "The result") public void execute() { } } }