/* * 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/9/14 */ public class RangeExtensionTest { /** * Range tag wraps a 'name' string */ @Test public void tagGetSetNameTest() { RangeExtension.RangeTag rangeTag = new RangeExtension.RangeTag(); rangeTag.setName("Test"); Assert.assertEquals("Test", rangeTag.getName()); rangeTag.setName("Foo"); Assert.assertEquals("Foo", rangeTag.getName()); } /** * Range tag wraps a 'from' string */ @Test public void tagGetSetFromTest() { RangeExtension.RangeTag rangeTag = new RangeExtension.RangeTag(); rangeTag.setFrom("1.1"); Assert.assertEquals("1.1", rangeTag.getFrom()); rangeTag.setFrom("2.2"); Assert.assertEquals("2.2", rangeTag.getFrom()); } /** * Range tag wraps a 'to' string */ @Test public void tagGetSetToTest() { RangeExtension.RangeTag rangeTag = new RangeExtension.RangeTag(); rangeTag.setTo("1.1"); Assert.assertEquals("1.1", rangeTag.getTo()); rangeTag.setTo("2.2"); Assert.assertEquals("2.2", rangeTag.getTo()); } /** * Range tag wraps a 'step' string */ @Test public void tagGetSetStepTest() { RangeExtension.RangeTag rangeTag = new RangeExtension.RangeTag(); rangeTag.setStep("0.1"); Assert.assertEquals("0.1", rangeTag.getStep()); rangeTag.setStep("2.2"); Assert.assertEquals("2.2", rangeTag.getStep()); } /** * Range tag execute does nothing */ @Test public void executeDoesNothingTest() { RangeExtension.RangeTag rangeTag = new RangeExtension.RangeTag(); rangeTag.setName("Foo"); rangeTag.setFrom("1.1"); rangeTag.setTo("11.3"); rangeTag.setStep("1.2"); try { rangeTag.execute(null, null, null, null, null); } catch (SCXMLExpressionException | ModelException e) { Assert.fail("Exceptions should never be thrown"); } Assert.assertEquals("Foo", rangeTag.getName()); Assert.assertEquals("1.1", rangeTag.getFrom()); Assert.assertEquals("11.3", rangeTag.getTo()); Assert.assertEquals("1.2", rangeTag.getStep()); } /** * The tag is 'range' in the model */ @Test public void tagNameTest() { RangeExtension rangeExtension = new RangeExtension(); Assert.assertEquals("range", rangeExtension.getTagName()); } /** * The tag uses the datagenerator name space */ @Test public void tagNameSpaceTest() { RangeExtension rangeExtension = new RangeExtension(); Assert.assertEquals("org.finra.datagenerator", rangeExtension.getTagNameSpace()); } /** * RangeExtension has an inner class called RangeTag used in model parsing */ @Test public void actionClassTest() { RangeExtension rangeExtension = new RangeExtension(); Assert.assertEquals(RangeExtension.RangeTag.class, rangeExtension.getTagActionClass()); } /** * If step is not provided, then a value of 1 is assumed */ @Test public void defaultStepTest() { List<Map<String, String>> pipeInputList = new LinkedList<>(); pipeInputList.add(new HashMap<String, String>()); RangeExtension rangeExtension = new RangeExtension(); RangeExtension.RangeTag rangeTag = new RangeExtension.RangeTag(); rangeTag.setName("var_out_test"); rangeTag.setFrom("1"); rangeTag.setTo("10"); List<Map<String, String>> resultList = rangeExtension.pipelinePossibleStates(rangeTag, pipeInputList); Assert.assertEquals(10, resultList.size()); } /** * Cannot expand an empty list */ @Test public void emptyListTest() { List<Map<String, String>> emptyList = new LinkedList<>(); RangeExtension rangeExtension = new RangeExtension(); RangeExtension.RangeTag rangeTag = new RangeExtension.RangeTag(); rangeTag.setName("var_out_test"); rangeTag.setFrom("1"); rangeTag.setTo("5"); rangeTag.setStep("0.7"); List<Map<String, String>> resultList = rangeExtension.pipelinePossibleStates(rangeTag, emptyList); Assert.assertNotNull(resultList); Assert.assertEquals(0, resultList.size()); } /** * Only touches the variable given by 'name' */ @Test public void noContaminationTest() { List<Map<String, String>> pipeInputList = new LinkedList<>(); HashMap<String, String> nonEmptyPossibleState = new HashMap<>(); nonEmptyPossibleState.put("var_out_test", "foobar"); pipeInputList.add(nonEmptyPossibleState); RangeExtension rangeExtension = new RangeExtension(); RangeExtension.RangeTag rangeTag = new RangeExtension.RangeTag(); rangeTag.setName("var_out_test_2"); rangeTag.setFrom("1"); rangeTag.setTo("5"); rangeTag.setStep("0.7"); List<Map<String, String>> resultList = rangeExtension.pipelinePossibleStates(rangeTag, pipeInputList); Assert.assertEquals(6, resultList.size()); for (int i = 0; i < 6; i++) { Assert.assertEquals("foobar", resultList.get(i).get("var_out_test")); } } /** * Tests with a positive step */ @Test public void positiveStepTest() { List<Map<String, String>> pipeInputList = new LinkedList<>(); pipeInputList.add(new HashMap<String, String>()); RangeExtension rangeExtension = new RangeExtension(); RangeExtension.RangeTag rangeTag = new RangeExtension.RangeTag(); rangeTag.setName("var_out_test"); rangeTag.setFrom("1"); rangeTag.setTo("5"); rangeTag.setStep("0.7"); List<Map<String, String>> resultList = rangeExtension.pipelinePossibleStates(rangeTag, pipeInputList); Assert.assertEquals(6, resultList.size()); Map<String, String> resultMap = resultList.get(0); Assert.assertEquals("1", resultMap.get("var_out_test")); resultMap = resultList.get(1); Assert.assertEquals("1.7", resultMap.get("var_out_test")); resultMap = resultList.get(2); Assert.assertEquals("2.4", resultMap.get("var_out_test")); resultMap = resultList.get(3); Assert.assertEquals("3.1", resultMap.get("var_out_test")); resultMap = resultList.get(4); Assert.assertEquals("3.8", resultMap.get("var_out_test")); resultMap = resultList.get(5); Assert.assertEquals("4.5", resultMap.get("var_out_test")); } /** * Tests with a big numbers */ @Test public void bigNumbersTest() { List<Map<String, String>> pipeInputList = new LinkedList<>(); pipeInputList.add(new HashMap<String, String>()); RangeExtension rangeExtension = new RangeExtension(); RangeExtension.RangeTag rangeTag = new RangeExtension.RangeTag(); rangeTag.setName("var_out_test"); rangeTag.setFrom("1"); rangeTag.setTo("20000"); rangeTag.setStep("10"); List<Map<String, String>> resultList = rangeExtension.pipelinePossibleStates(rangeTag, pipeInputList); Assert.assertEquals(2000, resultList.size()); Map<String, String> resultMap = resultList.get(0); Assert.assertEquals("1", resultMap.get("var_out_test")); resultMap = resultList.get(1); Assert.assertEquals("11", resultMap.get("var_out_test")); resultMap = resultList.get(100); Assert.assertEquals("1001", resultMap.get("var_out_test")); resultMap = resultList.get(1000); Assert.assertEquals("10001", resultMap.get("var_out_test")); } /** * Tests with a negative step */ @Test public void negativeStepTest() { List<Map<String, String>> pipeInputList = new LinkedList<>(); pipeInputList.add(new HashMap<String, String>()); RangeExtension rangeExtension = new RangeExtension(); RangeExtension.RangeTag rangeTag = new RangeExtension.RangeTag(); rangeTag.setName("var_out_test"); rangeTag.setFrom("1"); rangeTag.setTo("-3"); rangeTag.setStep("-0.7"); List<Map<String, String>> resultList = rangeExtension.pipelinePossibleStates(rangeTag, pipeInputList); Assert.assertEquals(6, resultList.size()); Map<String, String> resultMap = resultList.get(0); Assert.assertEquals("1", resultMap.get("var_out_test")); resultMap = resultList.get(1); Assert.assertEquals("0.3", resultMap.get("var_out_test")); resultMap = resultList.get(2); Assert.assertEquals("-0.4", resultMap.get("var_out_test")); resultMap = resultList.get(3); Assert.assertEquals("-1.1", resultMap.get("var_out_test")); resultMap = resultList.get(4); Assert.assertEquals("-1.8", resultMap.get("var_out_test")); resultMap = resultList.get(5); Assert.assertEquals("-2.5", resultMap.get("var_out_test")); } /** * A step of 0 expands only on the 'from' value */ @Test public void zeroStepTest() { List<Map<String, String>> pipeInputList = new LinkedList<>(); pipeInputList.add(new HashMap<String, String>()); RangeExtension rangeExtension = new RangeExtension(); RangeExtension.RangeTag rangeTag = new RangeExtension.RangeTag(); rangeTag.setName("var_out_test"); rangeTag.setFrom("1"); rangeTag.setTo("-3"); rangeTag.setStep("0"); List<Map<String, String>> resultList = rangeExtension.pipelinePossibleStates(rangeTag, pipeInputList); Assert.assertEquals(1, resultList.size()); Map<String, String> resultMap = resultList.get(0); Assert.assertEquals("1", resultMap.get("var_out_test")); } }