Title: [1501] trunk/core/jbehave-core/src/main/java/org/jbehave/scenario/steps: POJO steps implementation done; backwards compatible

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:

http://xircles.codehaus.org/manage_email

Reply via email to