package org.geotools.filter.function; import static org.junit.Assert.assertEquals; import java.util.ArrayList; import org.geotools.data.DataUtilities; import org.geotools.feature.SchemaException; import org.geotools.feature.simple.SimpleFeatureBuilder; import org.junit.Before; import org.junit.Test; import org.opengis.feature.simple.SimpleFeature; import org.opengis.feature.simple.SimpleFeatureType; import org.opengis.filter.expression.Expression; import org.opengis.filter.expression.Function; import org.opengis.filter.expression.Literal; public class StringTemplateFunctionTest extends SEFunctionTestBase { private Literal fallback; @Before public void setup() { parameters = new ArrayList<Expression>(); fallback = ff2.literal("NOT_FOUND"); } @Test public void testConcatenate() { parameters.add(ff2.literal("123")); parameters.add(ff2.literal(".*")); parameters.add(ff2.literal("start${0}end")); Function fn = finder.findFunction("stringTemplate", parameters, fallback); Object result = fn.evaluate(null); assertEquals("start123end", result); } @Test public void testCapturingGroups() { parameters.add(ff2.literal("abc123_678")); parameters.add(ff2.literal(".*(\\d{3})_(\\d{3})")); parameters.add(ff2.literal("first${1}_second${2}_full${0}")); Function fn = finder.findFunction("stringTemplate", parameters, fallback); Object result = fn.evaluate(null); assertEquals("first123_second678_fullabc123_678", result); } @Test public void testFallback() { parameters.add(ff2.literal("abc12_67")); parameters.add(ff2.literal(".*(\\d{3})_(\\d{3})")); parameters.add(ff2.literal("first${1}_second${2}_full${0}")); parameters.add(ff2.literal("noMatch")); Function fn = finder.findFunction("stringTemplate", parameters, fallback); Object result = fn.evaluate(null); assertEquals("noMatch", result); } @Test public void testDynamic() throws SchemaException { parameters.add(ff2.property("input")); parameters.add(ff2.property("pattern")); parameters.add(ff2.property("template")); Function fn = finder.findFunction("stringTemplate", parameters, fallback); SimpleFeatureType type = DataUtilities.createType("test", "input:string,pattern:string,template:string"); SimpleFeature f1 = SimpleFeatureBuilder.build(type, new Object[] { "abc123_567", ".*(\\d{3})_(\\d{3})", "${1}|${2}" }, null); assertEquals("123|567", fn.evaluate(f1)); SimpleFeature f2 = SimpleFeatureBuilder.build(type, new Object[] { "abc12_67", "(.*)_(\\d{3})", "${1}_${2}" }, null); assertEquals(null, fn.evaluate(f2)); SimpleFeature f3 = SimpleFeatureBuilder.build(type, new Object[] { "abc12_67", "(.*)_(.*)", "${1}|${2}" }, null); assertEquals("abc12|67", fn.evaluate(f3)); } }