package org.mapfish.print.processor; import com.google.common.collect.Lists; import org.junit.Test; import org.mapfish.print.config.Configuration; import org.mapfish.print.output.Values; import org.mapfish.print.parser.HasDefaultValue; import java.util.ArrayList; import java.util.List; import javax.annotation.Nullable; import static org.junit.Assert.assertArrayEquals; import static org.junit.Assert.assertEquals; import static org.junit.Assert.assertNull; public class ProcessorGraphNodeTest { final String iMappingName = "integer"; Integer intVal = 1; final String bMappingName = "bool"; String sVal = "sValue"; ArrayList<String> lsVal = Lists.newArrayList("one", "two"); double[] daVal = new double[] {1.2, 2.3}; @Test public void testPopulateInputParameter() throws Exception { Values values = new Values(); values.put(iMappingName, intVal); values.put(bMappingName, true); values.put("s", sVal); values.put("ls", lsVal); values.put("da", daVal); TestProcessor processor = new TestProcessor(); processor.getInputMapperBiMap().put(iMappingName, "i"); processor.getInputMapperBiMap().put(bMappingName, "b"); DataTransferObject param = ProcessorUtils.populateInputParameter(processor, values); assertEquals(sVal, param.s); assertEquals(intVal.intValue(), param.i); assertEquals(true, param.b); assertEquals(new DataTransferObject().defaultI, param.defaultI); assertEquals(lsVal, param.ls); assertArrayEquals(daVal, param.da, 0.00001); } @Test (expected = RuntimeException.class) public void testNullableProperty() throws Exception { Values values = new Values(); values.put(iMappingName, intVal); values.put(bMappingName, true); values.put("s", sVal); values.put("ls", lsVal); // NO da value is specified so an exception should be thrown. TestProcessor processor = new TestProcessor(); processor.getInputMapperBiMap().put(iMappingName, "i"); processor.getInputMapperBiMap().put(bMappingName, "b"); ProcessorUtils.populateInputParameter(processor, values); } @Test public void testWriteProcessorOutputToValues() throws Exception { Values values = new Values(); final DataTransferObject dto = new DataTransferObject(); dto.b = true; dto.da = daVal; dto.defaultI = 32; dto.ls = lsVal; TestProcessor processor = new TestProcessor(); processor.getOutputMapperBiMap().put("i", iMappingName); processor.getOutputMapperBiMap().put("b", bMappingName); ProcessorUtils.writeProcessorOutputToValues(dto, processor, values); assertEquals(dto.defaultI, values.getInteger("defaultI").intValue()); assertEquals(dto.i, values.getInteger(iMappingName).intValue()); assertEquals(dto.b, values.getBoolean(bMappingName)); assertNull(values.getBoolean("s")); assertEquals(lsVal, values.getObject("ls", Object.class)); assertArrayEquals(daVal, (double[]) values.getObject("da", Object.class), 0.00001); } @Test public void testWritePrefixedOutputToValues() throws Exception { Values values = new Values(); final DataTransferObject dto = new DataTransferObject(); dto.b = true; dto.da = daVal; dto.defaultI = 32; dto.ls = lsVal; TestProcessor processor = new TestProcessor(); processor.getOutputMapperBiMap().put("i", iMappingName); processor.getOutputMapperBiMap().put("b", bMappingName); processor.setOutputPrefix(" prefix "); ProcessorUtils.writeProcessorOutputToValues(dto, processor, values); assertEquals(dto.defaultI, values.getInteger("prefixDefaultI").intValue()); assertEquals(dto.i, values.getInteger(iMappingName).intValue()); assertEquals(dto.b, values.getBoolean(bMappingName)); assertNull(values.getBoolean("prefixS")); assertEquals(lsVal, values.getObject("prefixLs", Object.class)); assertArrayEquals(daVal, (double[]) values.getObject("prefixDa", Object.class), 0.00001); } static class DataTransferObject { @HasDefaultValue public int defaultI = 3; public int i; public boolean b; public String s; public List<String> ls; public double[] da; } static class TestProcessor extends AbstractProcessor<DataTransferObject, DataTransferObject> { /** * Constructor. */ protected TestProcessor() { super(DataTransferObject.class); } @Override public DataTransferObject createInputParameter() { return new DataTransferObject(); } @Nullable @Override public DataTransferObject execute(DataTransferObject values, ExecutionContext context) throws Exception { return null; } @Override protected void extraValidation(List<Throwable> validationErrors, final Configuration configuration) { // no checks } } }