- Revision
- 897
- Author
- mauro
- Date
- 2008-08-26 05:34:57 -0500 (Tue, 26 Aug 2008)
Log Message
Made argument conversion strategy injectable in steps.
Modified Paths
- trunk/examples/trader/src/main/java/org/jbehave/examples/trader/scenarios/StockSteps.java
- trunk/jbehave-core/src/behaviour/org/jbehave/scenario/steps/CandidateStepBehaviour.java
- trunk/jbehave-core/src/java/org/jbehave/scenario/steps/ArgumentConversion.java
- trunk/jbehave-core/src/java/org/jbehave/scenario/steps/CandidateStep.java
- trunk/jbehave-core/src/java/org/jbehave/scenario/steps/Steps.java
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:
