Title: [966] branches/jbehave-2.0.x/jbehave-core/src/java/org/jbehave/scenario/steps: JBEHAVE-137: Made default converters classes public.
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:

http://xircles.codehaus.org/manage_email

Reply via email to