/*
* Copyright 2014 DataGenerator Contributors
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package org.finra.datagenerator.engine.scxml.tags;
import org.apache.commons.scxml.SCXMLExpressionException;
import org.apache.commons.scxml.model.ModelException;
import org.finra.datagenerator.consumer.DataPipe;
import org.finra.datagenerator.consumer.DataTransformer;
import org.junit.Assert;
import org.junit.Test;
import java.util.HashMap;
import java.util.LinkedList;
import java.util.List;
import java.util.Map;
/**
* Marshall Peters
* Date: 12/8/14
*/
public class InLineTransformerExtensionTest {
/**
* TransformTag is a wrapper for one String called 'name'
*/
@Test
public void getAndSetNameForTagTest() {
InLineTransformerExtension.TransformTag transformTag = new InLineTransformerExtension.TransformTag();
transformTag.setName("foo");
Assert.assertEquals("foo", transformTag.getName());
transformTag.setName("bar");
Assert.assertEquals("bar", transformTag.getName());
}
/**
* execute for TransformTag does nothing
*/
@Test
public void executeDoesNothingTest() {
InLineTransformerExtension.TransformTag transformTag = new InLineTransformerExtension.TransformTag();
transformTag.setName("test");
try {
transformTag.execute(null, null, null, null, null);
} catch (SCXMLExpressionException | ModelException e) {
Assert.fail("Exceptions should never be thrown");
}
Assert.assertEquals("test", transformTag.getName());
}
/**
* InLineTransformerExtension uses an inner class called TransformTag for model parsing
*/
@Test
public void actionClassTest() {
InLineTransformerExtension transformerExtension =
new InLineTransformerExtension(new HashMap<String, DataTransformer>());
Assert.assertEquals(InLineTransformerExtension.TransformTag.class, transformerExtension.getTagActionClass());
}
/**
* The name of the tag is "transform"
*/
@Test
public void tagNameTest() {
InLineTransformerExtension transformerExtension =
new InLineTransformerExtension(new HashMap<String, DataTransformer>());
Assert.assertEquals("transform", transformerExtension.getTagName());
}
/**
* The tag uses the datagenerator name space
*/
@Test
public void tagNameSpaceTest() {
InLineTransformerExtension transformerExtension =
new InLineTransformerExtension(new HashMap<String, DataTransformer>());
Assert.assertEquals("org.finra.datagenerator", transformerExtension.getTagNameSpace());
}
/**
* A test implementation of DataTransformer that tracks whether the transform method was called
*/
private static class CallCheckTransformer implements DataTransformer {
private boolean wasCalled;
/**
* Sets wasCalled to true
*
* @param cr a reference to DataPipe from which to read the current map
*/
public void transform(DataPipe cr) {
wasCalled = true;
}
public boolean isWasCalled() {
return wasCalled;
}
}
/**
* DataTransformers are added and named through a map to InLineTransformerExtension's constructor.
* Individual DataTransformers are called by 'name' in the model
*/
@Test
public void addingAndCallingTransformersByNameTest() {
CallCheckTransformer dummyTransformerOne = new CallCheckTransformer();
CallCheckTransformer dummyTransformerTwo = new CallCheckTransformer();
CallCheckTransformer dummyTransformerThree = new CallCheckTransformer();
HashMap<String, DataTransformer> transformerNames = new HashMap<>();
transformerNames.put("one", dummyTransformerOne);
transformerNames.put("two", dummyTransformerTwo);
transformerNames.put("three", dummyTransformerThree);
InLineTransformerExtension transformerExtension = new InLineTransformerExtension(transformerNames);
List<Map<String, String>> pipelineInput = new LinkedList<>();
pipelineInput.add(new HashMap<String, String>());
InLineTransformerExtension.TransformTag transformTag = new InLineTransformerExtension.TransformTag();
transformTag.setName("two");
transformerExtension.pipelinePossibleStates(transformTag, pipelineInput);
Assert.assertFalse(dummyTransformerOne.isWasCalled());
Assert.assertTrue(dummyTransformerTwo.isWasCalled());
Assert.assertFalse(dummyTransformerThree.isWasCalled());
}
/**
* InLineTransformerExtension only transforms extant maps of variable value pairs
*/
@Test
public void emptyListTest() {
CallCheckTransformer dummyTransformer = new CallCheckTransformer();
HashMap<String, DataTransformer> transformerNames = new HashMap<>();
transformerNames.put("dummy", dummyTransformer);
InLineTransformerExtension transformerExtension = new InLineTransformerExtension(transformerNames);
List<Map<String, String>> emptyList = new LinkedList<>();
InLineTransformerExtension.TransformTag transformTag = new InLineTransformerExtension.TransformTag();
transformTag.setName("dummy");
List<Map<String, String>> resultList = transformerExtension.pipelinePossibleStates(transformTag, emptyList);
Assert.assertNotNull(resultList);
Assert.assertEquals(0, resultList.size());
Assert.assertFalse(dummyTransformer.isWasCalled());
}
/**
* Every map of variable value pairs gets transformed
*/
@Test
public void nonEmptyListTest() {
DataTransformer appendTransformer = new DataTransformer() {
public void transform(DataPipe cr) {
cr.getDataMap().put("Test", "Lorum");
}
};
HashMap<String, DataTransformer> transformerNames = new HashMap<>();
transformerNames.put("append", appendTransformer);
InLineTransformerExtension transformerExtension = new InLineTransformerExtension(transformerNames);
List<Map<String, String>> nonEmptyList = new LinkedList<>();
nonEmptyList.add(new HashMap<String, String>());
nonEmptyList.add(new HashMap<String, String>());
InLineTransformerExtension.TransformTag transformTag = new InLineTransformerExtension.TransformTag();
transformTag.setName("append");
List<Map<String, String>> resultList = transformerExtension.pipelinePossibleStates(transformTag, nonEmptyList);
Assert.assertNotNull(resultList);
Assert.assertEquals(2, resultList.size());
Map<String, String> resultMap = resultList.get(0);
Assert.assertEquals(1, resultMap.keySet().size());
Assert.assertEquals("Lorum", resultMap.get("Test"));
resultMap = resultList.get(1);
Assert.assertEquals(1, resultMap.keySet().size());
Assert.assertEquals("Lorum", resultMap.get("Test"));
}
}