- Revision
- 1501
- Author
- paul
- Date
- 2010-01-07 09:55:35 -0600 (Thu, 07 Jan 2010)
Log Message
POJO steps implementation done; backwards compatible
Modified Paths
- trunk/core/examples/trader/src/main/java/org/jbehave/examples/trader/TraderScenario.java
- trunk/core/examples/trader/src/main/java/org/jbehave/examples/trader/TraderSteps.java
- trunk/core/jbehave-core/src/main/java/org/jbehave/scenario/steps/CandidateStep.java
- trunk/core/jbehave-core/src/main/java/org/jbehave/scenario/steps/Steps.java
Added Paths
Diff
Modified: trunk/core/examples/trader/src/main/java/org/jbehave/examples/trader/TraderScenario.java (1500 => 1501)
--- trunk/core/examples/trader/src/main/java/org/jbehave/examples/trader/TraderScenario.java 2010-01-06 15:12:07 UTC (rev 1500) +++ trunk/core/examples/trader/src/main/java/org/jbehave/examples/trader/TraderScenario.java 2010-01-07 15:55:35 UTC (rev 1501) @@ -1,21 +1,24 @@ package org.jbehave.examples.trader; +import static java.util.Arrays.asList; import static org.jbehave.scenario.reporters.ScenarioReporterBuilder.Format.CONSOLE; import static org.jbehave.scenario.reporters.ScenarioReporterBuilder.Format.HTML; import static org.jbehave.scenario.reporters.ScenarioReporterBuilder.Format.TXT; import static org.jbehave.scenario.reporters.ScenarioReporterBuilder.Format.XML; +import static org.jbehave.scenario.steps.StepsFactory.makeCandidateSteps; +import org.jbehave.examples.trader.converters.TraderConverter; +import org.jbehave.examples.trader.model.Stock; +import org.jbehave.examples.trader.model.Trader; +import org.jbehave.examples.trader.persistence.TraderPersister; import org.jbehave.scenario.JUnitScenario; import org.jbehave.scenario.PropertyBasedConfiguration; import org.jbehave.scenario.RunnableScenario; -import org.jbehave.scenario.parser.ClasspathScenarioDefiner; -import org.jbehave.scenario.parser.PatternScenarioParser; -import org.jbehave.scenario.parser.ScenarioDefiner; -import org.jbehave.scenario.parser.ScenarioNameResolver; -import org.jbehave.scenario.parser.UnderscoredCamelCaseResolver; +import org.jbehave.scenario.parser.*; import org.jbehave.scenario.reporters.FilePrintStreamFactory; import org.jbehave.scenario.reporters.ScenarioReporter; import org.jbehave.scenario.reporters.ScenarioReporterBuilder; +import org.jbehave.scenario.steps.*; public class TraderScenario extends JUnitScenario { @@ -38,7 +41,21 @@ .build(); } - }, new TraderSteps()); + }); + + StepsConfiguration config = new StepsConfiguration(); + StepMonitor monitor = new SilentStepMonitor(); + config.useParameterConverters(new ParameterConverters( + monitor, new TraderConverter(mockTradePersister()))); // define converter for custom type Trader + config.usePatternBuilder(new PrefixCapturingPatternBuilder("%")); // use '%' instead of '$' to identify parameters + config.useMonitor(monitor); + + addSteps(makeCandidateSteps(config, new TraderSteps())); } + private TraderPersister mockTradePersister() { + return new TraderPersister(new Trader("Mauro", asList(new Stock("STK1", 10.d)))); + } + + }
Modified: trunk/core/examples/trader/src/main/java/org/jbehave/examples/trader/TraderSteps.java (1500 => 1501)
--- trunk/core/examples/trader/src/main/java/org/jbehave/examples/trader/TraderSteps.java 2010-01-06 15:12:07 UTC (rev 1500) +++ trunk/core/examples/trader/src/main/java/org/jbehave/examples/trader/TraderSteps.java 2010-01-07 15:55:35 UTC (rev 1501) @@ -29,27 +29,13 @@ import org.jbehave.scenario.steps.Steps; import org.jbehave.scenario.steps.StepsConfiguration; -public class TraderSteps extends Steps { +public class TraderSteps { - private static final StepsConfiguration configuration = new StepsConfiguration(); private Stock stock; private Trader trader; private List<Trader> traders = new ArrayList<Trader>(); private List<Trader> searchedTraders; - public TraderSteps() { - super(configuration); - StepMonitor monitor = new SilentStepMonitor(); - configuration.useParameterConverters(new ParameterConverters( - monitor, new TraderConverter(mockTradePersister()))); // define converter for custom type Trader - configuration.usePatternBuilder(new PrefixCapturingPatternBuilder("%")); // use '%' instead of '$' to identify parameters - configuration.useMonitor(monitor); - } - - private TraderPersister mockTradePersister() { - return new TraderPersister(new Trader("Mauro", asList(new Stock("STK1", 10.d)))); - } - @Given("a trader of name %trader") public void aTrader(Trader trader) { this.trader = trader;
Modified: trunk/core/jbehave-core/src/main/java/org/jbehave/scenario/steps/CandidateStep.java (1500 => 1501)
--- trunk/core/jbehave-core/src/main/java/org/jbehave/scenario/steps/CandidateStep.java 2010-01-06 15:12:07 UTC (rev 1500) +++ trunk/core/jbehave-core/src/main/java/org/jbehave/scenario/steps/CandidateStep.java 2010-01-07 15:55:35 UTC (rev 1501) @@ -34,7 +34,7 @@ private final String patternAsString; private final StepType stepType; private final Method method; - protected final CandidateSteps steps; + protected final Object steps; protected final ParameterConverters parameterConverters; private final Map<StepType, String> startingWordsByType; private final Pattern pattern; @@ -46,10 +46,16 @@ public CandidateStep(String patternAsString, StepType stepType, Method method, CandidateSteps steps, StepPatternBuilder patternBuilder, ParameterConverters parameterConverters, Map<StepType, String> startingWords) { + this(patternAsString, stepType, method, (Object) steps, patternBuilder, parameterConverters, startingWords); + } + + public CandidateStep(String patternAsString, StepType stepType, Method method, Object stepsInstance, + StepPatternBuilder patternBuilder, ParameterConverters parameterConverters, + Map<StepType, String> startingWords) { this.patternAsString = patternAsString; this.stepType = stepType; this.method = method; - this.steps = steps; + this.steps = stepsInstance; this.parameterConverters = parameterConverters; this.startingWordsByType = startingWords; this.pattern = patternBuilder.buildPattern(patternAsString);
Modified: trunk/core/jbehave-core/src/main/java/org/jbehave/scenario/steps/Steps.java (1500 => 1501)
--- trunk/core/jbehave-core/src/main/java/org/jbehave/scenario/steps/Steps.java 2010-01-06 15:12:07 UTC (rev 1500) +++ trunk/core/jbehave-core/src/main/java/org/jbehave/scenario/steps/Steps.java 2010-01-07 15:55:35 UTC (rev 1501) @@ -70,8 +70,9 @@ public class Steps implements CandidateSteps { private final StepsConfiguration configuration; + private Object instance; - /** + /** * Creates Steps with default configuration */ public Steps() { @@ -124,8 +125,19 @@ this.configuration = configuration; } + private Steps(StepsConfiguration configuration, Object instance) { + this(configuration); + this.instance = instance; + } + + + public CandidateStep[] getSteps() { - return getSteps(this.getClass()); + if (instance == null) { + return getSteps(this.getClass()); + } else { + return getSteps(instance.getClass()); + } } public CandidateStep[] getSteps(Class<?> stepsClass) { @@ -164,10 +176,18 @@ } protected CandidateStep createCandidateStep(Method method, StepType stepType, String stepPatternAsString, StepsConfiguration configuration) { - return new CandidateStep(stepPatternAsString, stepType, method, + if (instance == null) { + return new CandidateStep(stepPatternAsString, stepType, method, this, configuration.getPatternBuilder(), configuration .getParameterConverters(), configuration .getStartingWordsByType()); + } else { + return new CandidateStep(stepPatternAsString, stepType, method, + instance, configuration.getPatternBuilder(), configuration + .getParameterConverters(), configuration + .getStartingWordsByType()); + + } } private void checkForDuplicateCandidateSteps(List<CandidateStep> steps, @@ -212,7 +232,13 @@ final Class<? extends Annotation> annotationClass, final StepPart forScenarios) { List<Step> steps = new ArrayList<Step>(); - for (final Method method : this.getClass().getMethods()) { + Method[] methods; + if (instance == null) { + methods = this.getClass().getMethods(); + } else { + methods = instance.getClass().getMethods(); + } + for (final Method method : methods) { if (method.isAnnotationPresent(annotationClass)) { steps.add(new Step() { public StepResult doNotPerform() { @@ -234,7 +260,13 @@ final Outcome outcome, final StepPart forSuccessfulScenarios, final StepPart forUnsuccessfulScenarios) { List<Step> steps = new ArrayList<Step>(); - for (final Method method : this.getClass().getMethods()) { + Method[] methods; + if (instance == null) { + methods = this.getClass().getMethods(); + } else { + methods = instance.getClass().getMethods(); + } + for (final Method method : methods) { if (method.isAnnotationPresent(annotationClass)) { AfterScenario annotation = method .getAnnotation(annotationClass); @@ -258,11 +290,19 @@ return steps; } - private class OkayToRun implements StepPart { + public static CandidateSteps make(StepsConfiguration configuration, Object instance) { + return new Steps(configuration, instance); + } + + private class OkayToRun implements StepPart { public StepResult run(final Class<? extends Annotation> annotation, Method method) { try { - method.invoke(Steps.this); + if (instance == null) { + method.invoke(Steps.this); + } else { + method.invoke(instance); + } } catch (InvocationTargetException e) { if (e.getCause() != null) { throw new BeforeOrAfterScenarioException(annotation,
Added: trunk/core/jbehave-core/src/main/java/org/jbehave/scenario/steps/StepsFactory.java (0 => 1501)
--- trunk/core/jbehave-core/src/main/java/org/jbehave/scenario/steps/StepsFactory.java (rev 0) +++ trunk/core/jbehave-core/src/main/java/org/jbehave/scenario/steps/StepsFactory.java 2010-01-07 15:55:35 UTC (rev 1501) @@ -0,0 +1,17 @@ +package org.jbehave.scenario.steps; + +public class StepsFactory { + + public static CandidateSteps[] makeCandidateSteps(Object... stepsInstances) { + return makeCandidateSteps(new StepsConfiguration(), stepsInstances); + } + + public static CandidateSteps[] makeCandidateSteps(StepsConfiguration configuration, Object... stepsInstances) { + CandidateSteps[] candidateSteps = new CandidateSteps[stepsInstances.length]; + for (int i = 0; i < stepsInstances.length; i++) { + Object instance = stepsInstances[i]; + candidateSteps[i] = Steps.make(configuration, instance); + } + return candidateSteps; + } +}
To unsubscribe from this list please visit:
