/* * 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.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 SetAssignExtensionTest { /** * SetAssignTag tracks two values: the name of a variable and a legal set of values stored as a string */ @Test public void getAndSetVariableNameForTagTest() { SetAssignExtension.SetAssignTag setAssignTag = new SetAssignExtension.SetAssignTag(); setAssignTag.setName("var_out_test"); Assert.assertEquals("var_out_test", setAssignTag.getName()); setAssignTag.setName("var_out_new"); Assert.assertEquals("var_out_new", setAssignTag.getName()); } /** * SetAssignTag tracks two values: the name of a variable and a legal set of values stored as a string */ @Test public void getAndSetValueSetForTagTest() { SetAssignExtension.SetAssignTag setAssignTag = new SetAssignExtension.SetAssignTag(); setAssignTag.setSet("A,B,C,D,E"); Assert.assertEquals("A,B,C,D,E", setAssignTag.getSet()); setAssignTag.setSet("F,G"); Assert.assertEquals("F,G", setAssignTag.getSet()); } /** * SetAssignTag has an empty execute method */ @Test public void executeDoesNothingTest() { SetAssignExtension.SetAssignTag setAssignTag = new SetAssignExtension.SetAssignTag(); setAssignTag.setName("var_out_test"); setAssignTag.setSet("A,B,C,D,E"); try { setAssignTag.execute(null, null, null, null, null); } catch (SCXMLExpressionException | ModelException e) { Assert.fail("Exceptions should never be thrown"); } Assert.assertEquals("var_out_test", setAssignTag.getName()); Assert.assertEquals("A,B,C,D,E", setAssignTag.getSet()); } /** * SetAssignExtension uses a custom Action class called SetAssignTag */ @Test public void actionClassTest() { SetAssignExtension setAssign = new SetAssignExtension(); Assert.assertEquals(SetAssignExtension.SetAssignTag.class, setAssign.getTagActionClass()); } /** * 'assign' is the name of the tag */ @Test public void tagNameTest() { SetAssignExtension setAssign = new SetAssignExtension(); Assert.assertEquals("assign", setAssign.getTagName()); } /** * The tag uses the datagenerator namespace */ @Test public void tagNameSpaceTest() { SetAssignExtension setAssign = new SetAssignExtension(); Assert.assertEquals("org.finra.datagenerator", setAssign.getTagNameSpace()); } /** * SetAssignExtension only assigns values to extant maps of variable value pairs */ @Test public void pipelineEmptyListTest() { List<Map<String, String>> emptyList = new LinkedList<>(); SetAssignExtension setAssign = new SetAssignExtension(); SetAssignExtension.SetAssignTag setAssignTag = new SetAssignExtension.SetAssignTag(); setAssignTag.setName("var_out_test"); setAssignTag.setSet("A,B,C,D,E"); List<Map<String, String>> processedList = setAssign.pipelinePossibleStates(setAssignTag, emptyList); Assert.assertNotNull(processedList); Assert.assertEquals(0, processedList.size()); } /** * An empty set of values counts as a one value set with "" as a value */ @Test public void pipelineExpandOnEmptySetTest() { List<Map<String, String>> listWithEmptyMap = new LinkedList<>(); listWithEmptyMap.add(new HashMap<String, String>()); SetAssignExtension setAssign = new SetAssignExtension(); SetAssignExtension.SetAssignTag setAssignTag = new SetAssignExtension.SetAssignTag(); setAssignTag.setName("var_out_test"); setAssignTag.setSet(""); List<Map<String, String>> processedList = setAssign.pipelinePossibleStates(setAssignTag, listWithEmptyMap); Assert.assertEquals(1, processedList.size()); Map<String, String> resultMap = processedList.get(0); Assert.assertEquals(1, resultMap.keySet().size()); Assert.assertEquals("", resultMap.get("var_out_test")); } /** * SingleValueAssignExtension will assign to extant but empty maps of variable value pairs */ @Test public void pipelineCardinalityTest() { List<Map<String, String>> listOfMaps = new LinkedList<>(); listOfMaps.add(new HashMap<String, String>()); listOfMaps.add(new HashMap<String, String>()); listOfMaps.add(new HashMap<String, String>()); SetAssignExtension setAssign = new SetAssignExtension(); SetAssignExtension.SetAssignTag setAssignTag = new SetAssignExtension.SetAssignTag(); setAssignTag.setName("var_out_test"); setAssignTag.setSet("A,B,C,D,E"); List<Map<String, String>> processedList = setAssign.pipelinePossibleStates(setAssignTag, listOfMaps); Assert.assertEquals(15, processedList.size()); } /** * The ordering of output maps reflects the ordering of elements in the value set */ @Test public void pipelineExpandOrderingTest() { List<Map<String, String>> listWithEmptyMap = new LinkedList<>(); listWithEmptyMap.add(new HashMap<String, String>()); SetAssignExtension setAssign = new SetAssignExtension(); SetAssignExtension.SetAssignTag setAssignTag = new SetAssignExtension.SetAssignTag(); setAssignTag.setName("var_out_test"); setAssignTag.setSet("A,B,C"); List<Map<String, String>> processedList = setAssign.pipelinePossibleStates(setAssignTag, listWithEmptyMap); Assert.assertEquals(3, processedList.size()); Map<String, String> resultMap = processedList.get(0); Assert.assertEquals(1, resultMap.keySet().size()); Assert.assertEquals("A", resultMap.get("var_out_test")); resultMap = processedList.get(1); Assert.assertEquals(1, resultMap.keySet().size()); Assert.assertEquals("B", resultMap.get("var_out_test")); resultMap = processedList.get(2); Assert.assertEquals(1, resultMap.keySet().size()); Assert.assertEquals("C", resultMap.get("var_out_test")); } /** * SetAssignExtension will assign values only to the variable given in name="foo" */ @Test public void pipelineExpandWithNonEmptyMapTest() { List<Map<String, String>> listWithNonEmptyMap = new LinkedList<>(); HashMap<String, String> nonEmptyMap = new HashMap<>(); nonEmptyMap.put("var_out_test_1", "3"); listWithNonEmptyMap.add(nonEmptyMap); SetAssignExtension setAssign = new SetAssignExtension(); SetAssignExtension.SetAssignTag setAssignTag = new SetAssignExtension.SetAssignTag(); setAssignTag.setName("var_out_test_2"); setAssignTag.setSet("A,B,C"); List<Map<String, String>> processedList = setAssign.pipelinePossibleStates(setAssignTag, listWithNonEmptyMap); Assert.assertEquals(3, processedList.size()); Map<String, String> resultMap = processedList.get(0); Assert.assertEquals(2, resultMap.keySet().size()); Assert.assertEquals("3", resultMap.get("var_out_test_1")); Assert.assertEquals("A", resultMap.get("var_out_test_2")); resultMap = processedList.get(1); Assert.assertEquals(2, resultMap.keySet().size()); Assert.assertEquals("3", resultMap.get("var_out_test_1")); Assert.assertEquals("B", resultMap.get("var_out_test_2")); resultMap = processedList.get(2); Assert.assertEquals(2, resultMap.keySet().size()); Assert.assertEquals("3", resultMap.get("var_out_test_1")); Assert.assertEquals("C", resultMap.get("var_out_test_2")); } /** * SetAssignExtension will overwrite variables that already have values */ @Test public void pipelineOverwriteTest() { List<Map<String, String>> listWithNonEmptyMap = new LinkedList<>(); HashMap<String, String> nonEmptyMap = new HashMap<>(); nonEmptyMap.put("var_out_test", "3"); listWithNonEmptyMap.add(nonEmptyMap); SetAssignExtension setAssign = new SetAssignExtension(); SetAssignExtension.SetAssignTag setAssignTag = new SetAssignExtension.SetAssignTag(); setAssignTag.setName("var_out_test"); setAssignTag.setSet("A,B,C"); List<Map<String, String>> processedList = setAssign.pipelinePossibleStates(setAssignTag, listWithNonEmptyMap); Assert.assertEquals(3, processedList.size()); Map<String, String> resultMap = processedList.get(0); Assert.assertEquals(1, resultMap.keySet().size()); Assert.assertEquals("A", resultMap.get("var_out_test")); resultMap = processedList.get(1); Assert.assertEquals(1, resultMap.keySet().size()); Assert.assertEquals("B", resultMap.get("var_out_test")); resultMap = processedList.get(2); Assert.assertEquals(1, resultMap.keySet().size()); Assert.assertEquals("C", resultMap.get("var_out_test")); } /** Tests user-defined variable separator in dg:assign tag **/ @Test public void separatorTest() { List<Map<String, String>> list = new LinkedList<>(); list.add(new HashMap<String, String>()); SetAssignExtension setAssign = new SetAssignExtension(); SetAssignExtension.SetAssignTag setAssignTag = new SetAssignExtension.SetAssignTag(); setAssignTag.setName("var_out_test"); setAssignTag.setSet("(A,B)|C"); setAssignTag.setSeparator("|"); List<Map<String, String>> processedList = setAssign.pipelinePossibleStates(setAssignTag, list); Assert.assertEquals(2, processedList.size()); Map<String, String> resultMap = processedList.get(0); Assert.assertEquals(1, resultMap.keySet().size()); Assert.assertEquals("(A,B)", resultMap.get("var_out_test")); } }