package org.jbehave.core.steps;
import java.util.Collections;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import org.jbehave.core.model.TableTransformers;
import org.jbehave.core.steps.ConvertedParameters;
import org.jbehave.core.steps.ParameterConverters;
import org.junit.Before;
import org.junit.Test;
import static org.hamcrest.MatcherAssert.assertThat;
import static org.hamcrest.Matchers.is;
public class ConvertedParametersBehaviour {
private Map<String, String> map;
private Parameters parameters;
private List<String> stringList;
private List<Integer> integerList;
@Before
public void setUp() throws Exception {
map = new HashMap<String, String>();
map.put("one", "11");
parameters = new ConvertedParameters(map, new ParameterConverters(new TableTransformers()));
}
@Test
public void shouldReturnParameterValueConvertedToGivenType() throws Exception {
assertThat(parameters.values().containsKey("one"), is(true));
assertThat(parameters.<String>valueAs("one", String.class), is("11"));
assertThat(parameters.<Integer>valueAs("one", Integer.class), is(11));
assertThat(parameters.<List<String>>valueAs("one",
ConvertedParametersBehaviour.class.getDeclaredField("stringList").getGenericType()),
is(Collections.singletonList("11")));
assertThat(parameters.<List<Integer>>valueAs("one",
ConvertedParametersBehaviour.class.getDeclaredField("integerList").getGenericType()),
is(Collections.singletonList(11)));
}
@Test
public void shouldIgnoreDefaultValueWhenConvertingAParameterThatIsFound() throws Exception {
assertThat(parameters.values().containsKey("one"), is(true));
assertThat(parameters.valueAs("one", Integer.class, 3), is(11));
assertThat(parameters.valueAs("one", String.class, "3"), is("11"));
assertThat(parameters.<List<String>>valueAs("one",
ConvertedParametersBehaviour.class.getDeclaredField("stringList").getGenericType()),
is(Collections.singletonList("11")));
assertThat(parameters.<List<Integer>>valueAs("one",
ConvertedParametersBehaviour.class.getDeclaredField("integerList").getGenericType()),
is(Collections.singletonList(11)));
}
@Test
public void shouldReturnDefaultValueWhenConvertingAParameterNotFound() throws Exception {
assertThat(parameters.values().containsKey("XX"), is(false));
assertThat(parameters.valueAs("XX", String.class, "3"), is("3"));
assertThat(parameters.values().containsKey("XXX"), is(false));
assertThat(parameters.valueAs("XXX", Integer.class, 3), is(3));
assertThat(parameters.<List<String>>valueAs("XX",
ConvertedParametersBehaviour.class.getDeclaredField("stringList").getGenericType(),
Collections.singletonList("3")),
is(Collections.singletonList("3")));
assertThat(parameters.<List<Integer>>valueAs("XXX",
ConvertedParametersBehaviour.class.getDeclaredField("integerList").getGenericType(),
Collections.singletonList(3)),
is(Collections.singletonList(3)));
}
@Test
public void shouldReturnValuesAsMap() throws Exception {
assertThat(parameters.values(), is(map));
}
}