- Revision
- 966
- Author
- mauro
- Date
- 2008-10-06 14:30:06 -0500 (Mon, 06 Oct 2008)
Log Message
JBEHAVE-137: Made default converters classes public. Made NumberFormat instance configurable.
Modified Paths
Diff
Modified: branches/jbehave-2.0.x/jbehave-core/src/behaviour/org/jbehave/scenario/steps/ParameterConvertersBehaviour.java (965 => 966)
--- branches/jbehave-2.0.x/jbehave-core/src/behaviour/org/jbehave/scenario/steps/ParameterConvertersBehaviour.java 2008-10-06 19:01:10 UTC (rev 965) +++ branches/jbehave-2.0.x/jbehave-core/src/behaviour/org/jbehave/scenario/steps/ParameterConvertersBehaviour.java 2008-10-06 19:30:06 UTC (rev 966) @@ -9,27 +9,50 @@ import java.text.ParseException; import java.util.List; +import org.jbehave.scenario.steps.ParameterConverters.NumberListConverter; import org.junit.Test; public class ParameterConvertersBehaviour { - private static final NumberFormat NUMBER_FORMAT = NumberFormat.getInstance(); + private static final NumberFormat NUMBER_FORMAT = NumberFormat + .getInstance(); - @Test + @Test public void shouldConvertStringsToNumbers() { ParameterConverters converters = new ParameterConverters(); - ensureThat((Integer)converters.convert("3", int.class), equalTo(3)); + ensureThat((Integer) converters.convert("3", int.class), equalTo(3)); } - + @SuppressWarnings("unchecked") @Test - public void shouldConvertCommaSeparatedValuesToListsOfNumbers() throws ParseException, IntrospectionException { + public void shouldConvertCommaSeparatedValuesToListsOfNumbers() + throws ParseException, IntrospectionException { ParameterConverters converters = new ParameterConverters(); - Type type = SomeSteps.methodFor("aMethodWithListOfNumbers").getGenericParameterTypes()[0]; - List<Number> list = (List<Number>)converters.convert("3, 5, 6, 8.00", type); + Type type = SomeSteps.methodFor("aMethodWithListOfNumbers") + .getGenericParameterTypes()[0]; + List<Number> list = (List<Number>) converters.convert( + "3, 0.5, 6.1f, 8.00", type); ensureThat(list.get(0), equalTo(NUMBER_FORMAT.parse("3"))); - ensureThat(list.get(1), equalTo(NUMBER_FORMAT.parse("5"))); - ensureThat(list.get(2), equalTo(NUMBER_FORMAT.parse("6"))); + ensureThat(list.get(1), equalTo(NUMBER_FORMAT.parse("0.5"))); + ensureThat(list.get(2), equalTo(NUMBER_FORMAT.parse("6.1f"))); ensureThat(list.get(3), equalTo(NUMBER_FORMAT.parse("8.00"))); } + + @SuppressWarnings("unchecked") + @Test + public void shouldConvertCommaSeparatedValuesToListsOfNumbersWithCustomFormat() + throws ParseException, IntrospectionException { + NumberFormat numberFormat = NumberFormat.getNumberInstance(); + ParameterConverters converters = new ParameterConverters( + new NumberListConverter(numberFormat)); + Type type = SomeSteps.methodFor("aMethodWithListOfNumbers") + .getGenericParameterTypes()[0]; + List<Number> list = (List<Number>) converters.convert( + "3, 0.5, 6.1f, 8.00", type); + ensureThat(list.get(0), equalTo(numberFormat.parse("3"))); + ensureThat(list.get(1), equalTo(numberFormat.parse("0.5"))); + ensureThat(list.get(2), equalTo(numberFormat.parse("6.1f"))); + ensureThat(list.get(3), equalTo(numberFormat.parse("8.00"))); + } + }
Modified: branches/jbehave-2.0.x/jbehave-core/src/java/org/jbehave/scenario/steps/ParameterConverters.java (965 => 966)
--- branches/jbehave-2.0.x/jbehave-core/src/java/org/jbehave/scenario/steps/ParameterConverters.java 2008-10-06 19:01:10 UTC (rev 965) +++ branches/jbehave-2.0.x/jbehave-core/src/java/org/jbehave/scenario/steps/ParameterConverters.java 2008-10-06 19:30:06 UTC (rev 966) @@ -7,7 +7,6 @@ import java.text.NumberFormat; import java.text.ParseException; import java.util.ArrayList; -import java.util.Arrays; import java.util.List; /** @@ -28,6 +27,10 @@ this(new SilentStepMonitor()); } + public ParameterConverters(ParameterConverter... customConverters) { + this(new SilentStepMonitor(), customConverters); + } + public ParameterConverters(StepMonitor monitor, ParameterConverter... customConverters) { this.monitor = monitor; this.converters.addAll(asList(customConverters)); @@ -68,9 +71,9 @@ } - private static class NumberConverter implements ParameterConverter { + public static class NumberConverter implements ParameterConverter { @SuppressWarnings("unchecked") - private static List<Class> acceptedClasses = Arrays.asList(new Class[] { + private static List<Class> acceptedClasses = asList(new Class[] { Integer.class, int.class, Long.class, long.class, Double.class, double.class, Float.class, float.class }); @@ -97,9 +100,19 @@ } - private static class NumberListConverter implements ParameterConverter { + public static class NumberListConverter implements ParameterConverter { - public boolean accept(Type type) { + private NumberFormat numberFormat; + + public NumberListConverter() { + this(NumberFormat.getInstance()); + } + + public NumberListConverter(NumberFormat numberFormat) { + this.numberFormat = numberFormat; + } + + public boolean accept(Type type) { if (type instanceof ParameterizedType) { ParameterizedType parameterizedType = (ParameterizedType) type; Type rawType = parameterizedType.getRawType(); @@ -112,7 +125,6 @@ public Object convertValue(String value, Type type) { List<String> values = trim(asList(value.split(COMMA))); - NumberFormat numberFormat = NumberFormat.getInstance(); List<Number> numbers = new ArrayList<Number>(); for (String numberValue : values) { try { @@ -126,7 +138,7 @@ } - private static class StringListConverter implements ParameterConverter { + public static class StringListConverter implements ParameterConverter { public boolean accept(Type type) { if (type instanceof ParameterizedType) {
To unsubscribe from this list please visit:
