Title: [897] trunk/jbehave-core/src/java/org/jbehave/scenario/steps: Made argument conversion strategy injectable in steps.

Diff

Modified: trunk/examples/trader/src/main/java/org/jbehave/examples/trader/scenarios/StockSteps.java (896 => 897)

--- trunk/examples/trader/src/main/java/org/jbehave/examples/trader/scenarios/StockSteps.java	2008-08-26 08:45:22 UTC (rev 896)
+++ trunk/examples/trader/src/main/java/org/jbehave/examples/trader/scenarios/StockSteps.java	2008-08-26 10:34:57 UTC (rev 897)
@@ -10,16 +10,18 @@
 import org.jbehave.scenario.annotations.Then;
 import org.jbehave.scenario.annotations.When;
 import org.jbehave.scenario.parser.PrefixCapturingPatternBuilder;
+import org.jbehave.scenario.steps.ArgumentConversion;
 import org.jbehave.scenario.steps.PrintStreamStepMonitor;
 import org.jbehave.scenario.steps.Steps;
 
 public class StockSteps extends Steps {
 
+    private static final PrintStreamStepMonitor MONITOR = new PrintStreamStepMonitor();
     private double threshold;
     private Stock stock;
 
     public StockSteps(double threshold) {
-        super(new PrefixCapturingPatternBuilder(), new PrintStreamStepMonitor(), "Given", "When", "Then", "And");
+        super(new PrefixCapturingPatternBuilder(), MONITOR, new ArgumentConversion(), "Given", "When", "Then", "And");
         this.threshold = threshold;
     }
 

Modified: trunk/jbehave-core/src/behaviour/org/jbehave/scenario/steps/CandidateStepBehaviour.java (896 => 897)

--- trunk/jbehave-core/src/behaviour/org/jbehave/scenario/steps/CandidateStepBehaviour.java	2008-08-26 08:45:22 UTC (rev 896)
+++ trunk/jbehave-core/src/behaviour/org/jbehave/scenario/steps/CandidateStepBehaviour.java	2008-08-26 10:34:57 UTC (rev 897)
@@ -28,14 +28,14 @@
     @Test
     public void shouldMatchASimpleString() throws Exception {
         CandidateStep candidateStep = new CandidateStep("I laugh", SomeSteps.class.getMethod("aMethod"), null,
-                PATTERN_BUILDER, MONITOR, "Given", "When", "Then");
+                PATTERN_BUILDER, MONITOR, new ArgumentConversion(), "Given", "When", "Then");
         ensureThat(candidateStep.matches("Given I laugh"));
     }
 
     @Test
     public void shouldMatchAStringWithArguments() throws Exception {
         CandidateStep candidateStep = new CandidateStep("windows on the $nth floor", SomeSteps.class
-                .getMethod("aMethod"), null, PATTERN_BUILDER, MONITOR, "Given", "When", "Then");
+                .getMethod("aMethod"), null, PATTERN_BUILDER, MONITOR, new ArgumentConversion(), "Given", "When", "Then");
         ensureThat(candidateStep.matches("When windows on the 1st floor"));
         ensureThat(not(candidateStep.matches("When windows on the 1st floor are open")));
     }
@@ -44,7 +44,7 @@
     public void shouldProvideARealStepUsingTheMatchedString() throws Exception {
         SomeSteps someSteps = new SomeSteps();
         CandidateStep candidateStep = new CandidateStep("I live on the $nth floor", SomeSteps.class.getMethod(
-                "aMethodWith", String.class), someSteps, PATTERN_BUILDER, MONITOR, "Given", "When", "Then");
+                "aMethodWith", String.class), someSteps, PATTERN_BUILDER, MONITOR, new ArgumentConversion(), "Given", "When", "Then");
         Step step = candidateStep.createFrom("Then I live on the 1st floor");
         step.perform();
         ensureThat((String) someSteps.args, equalTo("1st"));
@@ -53,7 +53,7 @@
     @Test
     public void shouldMatchMultilineStrings() throws Exception {
         CandidateStep candidateStep = new CandidateStep("the grid should look like $grid", SomeSteps.class
-                .getMethod("aMethod"), null, PATTERN_BUILDER, MONITOR, "Given", "When", "Then");
+                .getMethod("aMethod"), null, PATTERN_BUILDER, MONITOR, new ArgumentConversion(), "Given", "When", "Then");
         ensureThat(candidateStep.matches("Then the grid should look like " + NL + "...." + NL + "...." + NL));
     }
 
@@ -61,22 +61,22 @@
     public void shouldConvertArgsToAppropriateNumbers() throws Exception {
         SomeSteps someSteps = new SomeSteps();
         CandidateStep candidateStep = new CandidateStep("I should live in no. $no", SomeSteps.class.getMethod(
-                "aMethodWith", int.class), someSteps, PATTERN_BUILDER, MONITOR, "Given", "When", "Then");
+                "aMethodWith", int.class), someSteps, PATTERN_BUILDER, MONITOR, new ArgumentConversion(), "Given", "When", "Then");
         candidateStep.createFrom("Then I should live in no. 14").perform();
         ensureThat((Integer) someSteps.args, equalTo(14));
 
         candidateStep = new CandidateStep("I should live in no. $no", SomeSteps.class.getMethod("aMethodWith",
-                long.class), someSteps, PATTERN_BUILDER, MONITOR, "Given", "When", "Then");
+                long.class), someSteps, PATTERN_BUILDER, MONITOR, new ArgumentConversion(), "Given", "When", "Then");
         candidateStep.createFrom("Then I should live in no. 14").perform();
         ensureThat((Long) someSteps.args, equalTo(14L));
 
         candidateStep = new CandidateStep("I should live in no. $no", SomeSteps.class.getMethod("aMethodWith",
-                double.class), someSteps, PATTERN_BUILDER, MONITOR, "Given", "When", "Then");
+                double.class), someSteps, PATTERN_BUILDER, MONITOR, new ArgumentConversion(), "Given", "When", "Then");
         candidateStep.createFrom("Then I should live in no. 14").perform();
         ensureThat((Double) someSteps.args, equalTo(14.0));
 
         candidateStep = new CandidateStep("I should live in no. $no", SomeSteps.class.getMethod("aMethodWith",
-                float.class), someSteps, PATTERN_BUILDER, MONITOR, "Given", "When", "Then");
+                float.class), someSteps, PATTERN_BUILDER, MONITOR, new ArgumentConversion(), "Given", "When", "Then");
         candidateStep.createFrom("Then I should live in no. 14").perform();
         ensureThat((Float) someSteps.args, equalTo(14.0f));
     }
@@ -86,7 +86,7 @@
         ScenarioReporter reporter = mock(ScenarioReporter.class);
         SomeSteps someSteps = new SomeSteps();
         CandidateStep candidateStep = new CandidateStep("I live on the $nth floor", SomeSteps.class.getMethod(
-                "aMethodWith", String.class), someSteps, PATTERN_BUILDER, MONITOR, "Given", "When", "Then");
+                "aMethodWith", String.class), someSteps, PATTERN_BUILDER, MONITOR, new ArgumentConversion(), "Given", "When", "Then");
         Step step = candidateStep.createFrom("Then I live on the 1st floor");
 
         StepResult result = step.perform();
@@ -101,7 +101,7 @@
         String systemNewline = System.getProperty("line.separator");
         SomeSteps someSteps = new SomeSteps();
         CandidateStep candidateStep = new CandidateStep("the grid should look like $grid", SomeSteps.class.getMethod(
-                "aMethodWith", String.class), someSteps, PATTERN_BUILDER, MONITOR, "Given", "When", "Then");
+                "aMethodWith", String.class), someSteps, PATTERN_BUILDER, MONITOR, new ArgumentConversion(), "Given", "When", "Then");
         Step step = candidateStep.createFrom("Then the grid should look like" + windowsNewline + ".." + unixNewline
                 + ".." + windowsNewline);
         step.perform();
@@ -112,22 +112,22 @@
     public void shouldConvertArgsToListOfNumbers() throws Exception {
         SomeSteps someSteps = new SomeSteps();
         CandidateStep candidateStep = new CandidateStep("windows on the $nth floors",
-                methodFor("aMethodWithListOfLongs"), someSteps, PATTERN_BUILDER, MONITOR, "Given", "When", "Then");
+                methodFor("aMethodWithListOfLongs"), someSteps, PATTERN_BUILDER, MONITOR, new ArgumentConversion(), "Given", "When", "Then");
         candidateStep.createFrom("When windows on the 1L,2L,3L floors").perform();
         ensureThat(((List<?>) someSteps.args).toString(), equalTo(asList(1L, 2L, 3L).toString()));
 
         candidateStep = new CandidateStep("windows on the $nth floors", methodFor("aMethodWithListOfIntegers"),
-                someSteps, PATTERN_BUILDER, MONITOR, "Given", "When", "Then");
+                someSteps, PATTERN_BUILDER, MONITOR, new ArgumentConversion(), "Given", "When", "Then");
         candidateStep.createFrom("When windows on the 1,2,3 floors").perform();
         ensureThat(((List<?>) someSteps.args).toString(), equalTo(asList(1, 2, 3).toString()));
 
         candidateStep = new CandidateStep("windows on the $nth floors", methodFor("aMethodWithListOfDoubles"),
-                someSteps, PATTERN_BUILDER, MONITOR, "Given", "When", "Then");
+                someSteps, PATTERN_BUILDER, MONITOR, new ArgumentConversion(), "Given", "When", "Then");
         candidateStep.createFrom("When windows on the 1.1,2.2,3.3 floors").perform();
         ensureThat(((List<?>) someSteps.args).toString(), equalTo(asList(1.1, 2.2, 3.3).toString()));
 
         candidateStep = new CandidateStep("windows on the $nth floors", methodFor("aMethodWithListOfFloats"),
-                someSteps, PATTERN_BUILDER, MONITOR, "Given", "When", "Then");
+                someSteps, PATTERN_BUILDER, MONITOR, new ArgumentConversion(), "Given", "When", "Then");
         candidateStep.createFrom("When windows on the 1.1f,2.2f,3.3f floors").perform();
         ensureThat(((List<?>) someSteps.args).toString(), equalTo(asList(1.1f, 2.2f, 3.3f).toString()));
 
@@ -137,7 +137,7 @@
     public void shouldConvertArgsToListOfStrings() throws Exception {
         SomeSteps someSteps = new SomeSteps();
         CandidateStep candidateStep = new CandidateStep("windows on the $nth floors",
-                methodFor("aMethodWithListOfStrings"), someSteps, PATTERN_BUILDER, MONITOR, "Given", "When", "Then");
+                methodFor("aMethodWithListOfStrings"), someSteps, PATTERN_BUILDER, MONITOR, new ArgumentConversion(), "Given", "When", "Then");
         candidateStep.createFrom("When windows on the 1,2,3 floors").perform();
         ensureThat(((List<?>) someSteps.args).toString(), equalTo(asList("1", "2", "3").toString()));
     }

Modified: trunk/jbehave-core/src/java/org/jbehave/scenario/steps/ArgumentConversion.java (896 => 897)

--- trunk/jbehave-core/src/java/org/jbehave/scenario/steps/ArgumentConversion.java	2008-08-26 08:45:22 UTC (rev 896)
+++ trunk/jbehave-core/src/java/org/jbehave/scenario/steps/ArgumentConversion.java	2008-08-26 10:34:57 UTC (rev 897)
@@ -19,12 +19,17 @@
 
     private static final String NL = System.getProperty("line.separator");
     private static final String COMMA = ",";
+    private static final List<ArgumentConverter> DEFAULT_CONVERTERS = asList(new NumberConverter(), new NumberListConverter(), new StringListConverter());
     private final StepMonitor monitor;
-    private final List<? extends ArgumentConverter> converters;
+    private final List<ArgumentConverter> converters = new ArrayList<ArgumentConverter>();
 
+    public ArgumentConversion() {
+        this(new SilentStepMonitor());
+    }
+
     public ArgumentConversion(StepMonitor monitor) {
         this.monitor = monitor;
-        this.converters = asList(new NumberConverter(), new NumberListConverter(), new StringListConverter());
+        this.converters.addAll(DEFAULT_CONVERTERS);
     }
 
     public Object convert(String value, Type type) {

Modified: trunk/jbehave-core/src/java/org/jbehave/scenario/steps/CandidateStep.java (896 => 897)

--- trunk/jbehave-core/src/java/org/jbehave/scenario/steps/CandidateStep.java	2008-08-26 08:45:22 UTC (rev 896)
+++ trunk/jbehave-core/src/java/org/jbehave/scenario/steps/CandidateStep.java	2008-08-26 10:34:57 UTC (rev 897)
@@ -22,16 +22,16 @@
     private final StepMonitor monitor;
     private final String[] startingWords;
     private final Pattern pattern;
-    private final ArgumentConversion converters;
+    private final ArgumentConversion conversion;
 
     public CandidateStep(String matchThis, Method method, Steps steps, StepPatternBuilder patterBuilder,
-            StepMonitor monitor, String... startingWords) {
+            StepMonitor monitor, ArgumentConversion argumentConversion, String... startingWords) {
         this.method = method;
         this.steps = steps;
         this.monitor = monitor;
+        this.conversion = argumentConversion;
         this.startingWords = startingWords;
         this.pattern = patterBuilder.buildPattern(matchThis);
-        this.converters = new ArgumentConversion(monitor);
     }
 
     public boolean matches(String step) {
@@ -58,7 +58,7 @@
         final Object[] args = new Object[matcher.groupCount()];
         for (int group = 0; group < args.length; group++) {
             String arg = matcher.group(group + 1);
-            Object converted = convert(arg, types[group]);
+            Object converted = conversion.convert(arg, types[group]);
             args[group] = converted;
         }
         return createStep(stepAsString, args);
@@ -102,8 +102,4 @@
         };
     }
 
-    private Object convert(String value, Type type) {
-        return converters.convert(value, type);
-    }
-
 }

Modified: trunk/jbehave-core/src/java/org/jbehave/scenario/steps/Steps.java (896 => 897)

--- trunk/jbehave-core/src/java/org/jbehave/scenario/steps/Steps.java	2008-08-26 08:45:22 UTC (rev 896)
+++ trunk/jbehave-core/src/java/org/jbehave/scenario/steps/Steps.java	2008-08-26 10:34:57 UTC (rev 897)
@@ -12,16 +12,18 @@
 public class Steps {
 
     private final StepPatternBuilder patternBuilder;
-    private final StepMonitor monitor;
+    private final StepMonitor stepMonitor;
+    private final ArgumentConversion argumentConversion;
     private final String[] startingWords;
 
     public Steps() {
-        this(new PrefixCapturingPatternBuilder(), new SilentStepMonitor(), "Given", "When", "Then", "And");
+        this(new PrefixCapturingPatternBuilder(), new SilentStepMonitor(), new ArgumentConversion(), "Given", "When", "Then", "And");
     }
 
-    public Steps(StepPatternBuilder patternBuilder, StepMonitor monitor, String... startingWords) {
+    public Steps(StepPatternBuilder patternBuilder, StepMonitor stepMonitor, ArgumentConversion argumentConversion, String... startingWords) {
         this.patternBuilder = patternBuilder;
-        this.monitor = monitor;
+        this.stepMonitor = stepMonitor;
+        this.argumentConversion = argumentConversion;
         this.startingWords = startingWords;
     }
 
@@ -45,6 +47,6 @@
     }
 
     private void createCandidateStep(ArrayList<CandidateStep> steps, Method method, String stepAsString) {
-        steps.add(new CandidateStep(stepAsString, method, this, patternBuilder, monitor, startingWords));
+        steps.add(new CandidateStep(stepAsString, method, this, patternBuilder, stepMonitor, argumentConversion, startingWords));
     }
 }


To unsubscribe from this list please visit:

http://xircles.codehaus.org/manage_email

Reply via email to