Title: [878] trunk/jbehave-core/src/java/org/jbehave/scenario: [Liz] Moved constructors for scenarios into Technique, in preparation for the different ways of reporting / breaking the build

Diff

Modified: trunk/examples/trader/src/main/java/org/jbehave/examples/trader/scenarios/StatusAlertCanBeActivated.java (877 => 878)

--- trunk/examples/trader/src/main/java/org/jbehave/examples/trader/scenarios/StatusAlertCanBeActivated.java	2008-07-24 12:53:56 UTC (rev 877)
+++ trunk/examples/trader/src/main/java/org/jbehave/examples/trader/scenarios/StatusAlertCanBeActivated.java	2008-07-25 09:24:35 UTC (rev 878)
@@ -1,5 +1,6 @@
 package org.jbehave.examples.trader.scenarios;
 
+import org.jbehave.OurTechnique;
 import org.jbehave.scenario.Scenario;
 import org.jbehave.scenario.parser.ScenarioFileLoader;
 import org.jbehave.scenario.parser.UnderscoredCamelCaseResolver;
@@ -11,8 +12,12 @@
         this(Thread.currentThread().getContextClassLoader());
     }
 
-    public StatusAlertCanBeActivated(ClassLoader classLoader) {
-        super(new ScenarioFileLoader(new UnderscoredCamelCaseResolver(".scenario"), classLoader), new StockSteps(10.0));
+    public StatusAlertCanBeActivated(final ClassLoader classLoader) {
+        super(new OurTechnique() {
+			public ScenarioFileLoader forDefiningScenarios() {
+				return new ScenarioFileLoader(new UnderscoredCamelCaseResolver(".scenario"), classLoader);
+			}
+        }, new StockSteps(10.0));
     }
 
 }

Modified: trunk/examples/trader/src/main/java/org/jbehave/examples/trader/scenarios/StatusAlertIsNeverActivated.java (877 => 878)

--- trunk/examples/trader/src/main/java/org/jbehave/examples/trader/scenarios/StatusAlertIsNeverActivated.java	2008-07-24 12:53:56 UTC (rev 877)
+++ trunk/examples/trader/src/main/java/org/jbehave/examples/trader/scenarios/StatusAlertIsNeverActivated.java	2008-07-25 09:24:35 UTC (rev 878)
@@ -1,5 +1,6 @@
 package org.jbehave.examples.trader.scenarios;
 
+import org.jbehave.OurTechnique;
 import org.jbehave.scenario.Scenario;
 import org.jbehave.scenario.parser.ScenarioFileLoader;
 import org.jbehave.scenario.parser.UnderscoredCamelCaseResolver;
@@ -11,8 +12,13 @@
         this(Thread.currentThread().getContextClassLoader());
     }
 
-    public StatusAlertIsNeverActivated(ClassLoader classLoader) {
-        super(new ScenarioFileLoader(new UnderscoredCamelCaseResolver(".scenario"), classLoader), new StockSteps(100.0));
+    public StatusAlertIsNeverActivated(final ClassLoader classLoader) {
+        super(new OurTechnique() {
+        	@Override
+        	public ScenarioFileLoader forDefiningScenarios() {
+        		return new ScenarioFileLoader(new UnderscoredCamelCaseResolver(".scenario"), classLoader);
+        	}
+        }, new StockSteps(100.0));
     }
 
 }

Modified: trunk/jbehave-core/src/behaviour/org/jbehave/scenario/ScenarioBehaviour.java (877 => 878)

--- trunk/jbehave-core/src/behaviour/org/jbehave/scenario/ScenarioBehaviour.java	2008-07-24 12:53:56 UTC (rev 877)
+++ trunk/jbehave-core/src/behaviour/org/jbehave/scenario/ScenarioBehaviour.java	2008-07-25 09:24:35 UTC (rev 878)
@@ -10,10 +10,12 @@
 import java.io.PrintStream;
 import java.util.Arrays;
 
+import org.jbehave.Technique;
 import org.jbehave.scenario.annotations.Given;
 import org.jbehave.scenario.annotations.Then;
 import org.jbehave.scenario.annotations.When;
 import org.jbehave.scenario.parser.PatternStepParser;
+import org.jbehave.scenario.parser.ScenarioDefiner;
 import org.jbehave.scenario.parser.ScenarioFileLoader;
 import org.jbehave.scenario.parser.StepParser;
 import org.jbehave.scenario.parser.scenarios.MyPendingScenario;
@@ -36,16 +38,16 @@
 		ScenarioFileLoader fileLoader = mock(ScenarioFileLoader.class);
 		StepParser stepParser = mock(PatternStepParser.class);
 		ByteArrayOutputStream output = new ByteArrayOutputStream();
-		ScenarioRunner runner = new ScenarioRunner(new PrintStreamScenarioReporter(new PrintStream(output)));
+		PrintStreamScenarioReporter reporter = new PrintStreamScenarioReporter(new PrintStream(output));
 		MySteps steps = new MySteps();
 		
- 		stub(fileLoader.loadScenarioAsString(MyScenario.class)).toReturn("my_scenario");
+ 		stub(fileLoader.loadStepsFor(MyScenario.class)).toReturn("my_scenario");
 		stub(stepParser.findSteps("my_scenario")).toReturn(Arrays.asList(new String[] {
 				"Given I have 2 cows",
 				"When I leave them over the winter",
 				"Then I should have 2 cows"}));
 
-		new MyScenario(fileLoader, stepParser, runner, steps).runUsingSteps();
+		new MyScenario(fileLoader, stepParser, reporter, steps).runUsingSteps();
 		
 		ensureThat(steps.numberOfCows, equalTo(2));
 		ensureThat(output.toString(), equalTo(
@@ -57,19 +59,19 @@
 	@Test
     public void shouldPerformStepsUsingACustomReporter() throws Throwable {
         
-        ScenarioFileLoader fileLoader = mock(ScenarioFileLoader.class);
+        ScenarioDefiner fileLoader = mock(ScenarioDefiner.class);
         StepParser stepParser = mock(PatternStepParser.class);
         StringBuffer buffer = new StringBuffer();
-        ScenarioRunner runner = new ScenarioRunner(new BufferScenarioReporter(buffer));
+        ScenarioReporter reporter = new BufferScenarioReporter(buffer);
         MySteps steps = new MySteps();
         
-        stub(fileLoader.loadScenarioAsString(MyScenario.class)).toReturn("my_scenario");
+        stub(fileLoader.loadStepsFor(MyScenario.class)).toReturn("my_scenario");
         stub(stepParser.findSteps("my_scenario")).toReturn(Arrays.asList(new String[] {
                 "Given I have 2 cows",
                 "When I leave them over the winter",
                 "Then I should have 2 cows"}));
 
-        new MyScenario(fileLoader, stepParser, runner, steps).runUsingSteps();
+        new MyScenario(fileLoader, stepParser, reporter, steps).runUsingSteps();
         
         ensureThat(steps.numberOfCows, equalTo(2));
         ensureThat(buffer.toString(), equalTo(
@@ -86,13 +88,13 @@
 	@Test
 	public void shouldRethrowErrorsInTheEventOfAScenarioFailure() throws Throwable {
 		
-		ScenarioFileLoader fileLoader = mock(ScenarioFileLoader.class);
+		ScenarioDefiner scenarioDefiner = mock(ScenarioDefiner.class);
 		StepParser stepParser = mock(PatternStepParser.class);
 		ByteArrayOutputStream output = new ByteArrayOutputStream();
-		ScenarioRunner runner = new ScenarioRunner(new PrintStreamScenarioReporter(new PrintStream(output)));
+		ScenarioReporter reporter = new PrintStreamScenarioReporter(new PrintStream(output));
 		MySteps steps = new MySteps();
 		
-        stub(fileLoader.loadScenarioAsString(MyScenario.class)).toReturn("my_scenario");
+        stub(scenarioDefiner.loadStepsFor(MyScenario.class)).toReturn("my_scenario");
 		stub(stepParser.findSteps("my_scenario")).toReturn(Arrays.asList(new String[] {
 				"Given I have 2 cows",
 				"When I put them in a field",
@@ -101,7 +103,7 @@
 		
 
 		try {
-			new MyScenario(fileLoader, stepParser, runner, steps).runUsingSteps();
+			new MyScenario(scenarioDefiner, stepParser, reporter, steps).runUsingSteps();
 			fail("Expected the error to be rethrown");
 		} catch (IllegalAccessError e) {
 			ensureThat(e, equalTo(steps.error));
@@ -116,8 +118,16 @@
 
 	
 	private static class MyScenario extends Scenario {
-		public MyScenario(ScenarioFileLoader fileFinder, StepParser stepParser, ScenarioRunner scenarioRunner, Steps steps) {
-			super(fileFinder, stepParser, scenarioRunner, steps);
+		public MyScenario(final ScenarioDefiner scenarioDefiner, final StepParser stepParser, final ScenarioReporter scenarioReporter, Steps steps) {
+			super(new Technique() {
+
+				public ScenarioDefiner forDefiningScenarios() { return scenarioDefiner; }
+
+				public StepParser forParsingSteps() { return stepParser; }
+
+				public ScenarioReporter forReportingScenarios() { return scenarioReporter; }
+				
+			}, steps);
 		}
 	}
 	

Modified: trunk/jbehave-core/src/behaviour/org/jbehave/scenario/parser/ScenarioFileLoaderBehaviour.java (877 => 878)

--- trunk/jbehave-core/src/behaviour/org/jbehave/scenario/parser/ScenarioFileLoaderBehaviour.java	2008-07-24 12:53:56 UTC (rev 877)
+++ trunk/jbehave-core/src/behaviour/org/jbehave/scenario/parser/ScenarioFileLoaderBehaviour.java	2008-07-25 09:24:35 UTC (rev 878)
@@ -15,25 +15,25 @@
     @Test
     public void canLoadScenario() {
         ScenarioFileLoader loader = new ScenarioFileLoader();
-        ensureThat(loader.loadScenarioAsString(MyPendingScenario.class), equalTo("Given my scenario"));
+        ensureThat(loader.loadStepsFor(MyPendingScenario.class), equalTo("Given my scenario"));
     }
 
     @Test
     public void canLoadScenarioWithCustomFilenameResolver() {
         ScenarioFileLoader loader = new ScenarioFileLoader(new CasePreservingResolver(".scenario"));
-        ensureThat(loader.loadScenarioAsString(MyPendingScenario.class), equalTo("Given my scenario"));
+        ensureThat(loader.loadStepsFor(MyPendingScenario.class), equalTo("Given my scenario"));
     }
     
     @Test(expected = ScenarioNotFoundException.class)
     public void cannotLoadScenarioForInexistentResource() {
         ScenarioFileLoader loader = new ScenarioFileLoader();
-        loader.loadScenarioAsString(InexistentScenario.class);
+        loader.loadStepsFor(InexistentScenario.class);
     }
 
     @Test(expected = InvalidScenarioResourceException.class)
     public void cannotLoadScenarioForInvalidResource() {
         ScenarioFileLoader loader = new ScenarioFileLoader(new InvalidClassLoader());
-        loader.loadScenarioAsString(MyPendingScenario.class);
+        loader.loadStepsFor(MyPendingScenario.class);
     }
 
     static class InexistentScenario extends Scenario {

Modified: trunk/jbehave-core/src/behaviour/org/jbehave/scenario/parser/scenarios/MyPendingScenario.java (877 => 878)

--- trunk/jbehave-core/src/behaviour/org/jbehave/scenario/parser/scenarios/MyPendingScenario.java	2008-07-24 12:53:56 UTC (rev 877)
+++ trunk/jbehave-core/src/behaviour/org/jbehave/scenario/parser/scenarios/MyPendingScenario.java	2008-07-25 09:24:35 UTC (rev 878)
@@ -3,14 +3,19 @@
 import java.io.ByteArrayOutputStream;
 import java.io.PrintStream;
 
+import org.jbehave.OurTechnique;
 import org.jbehave.scenario.Scenario;
-import org.jbehave.scenario.parser.ScenarioFileLoader;
 import org.jbehave.scenario.reporters.PrintStreamScenarioReporter;
 
 public class MyPendingScenario extends Scenario {
 
 	public MyPendingScenario() {
 		// Making sure this doesn't output to the build while it's running
-		super(new ScenarioFileLoader(), new PrintStreamScenarioReporter(new PrintStream(new ByteArrayOutputStream())));
+		super(new OurTechnique() {
+			@Override
+			public PrintStreamScenarioReporter forReportingScenarios() {
+				return new PrintStreamScenarioReporter(new PrintStream(new ByteArrayOutputStream()));
+			}
+		});
 	}
 }
\ No newline at end of file

Modified: trunk/jbehave-core/src/java/org/jbehave/scenario/Scenario.java (877 => 878)

--- trunk/jbehave-core/src/java/org/jbehave/scenario/Scenario.java	2008-07-24 12:53:56 UTC (rev 877)
+++ trunk/jbehave-core/src/java/org/jbehave/scenario/Scenario.java	2008-07-25 09:24:35 UTC (rev 878)
@@ -2,10 +2,10 @@
 
 import java.util.List;
 
-import org.jbehave.scenario.parser.ScenarioFileLoader;
-import org.jbehave.scenario.parser.PatternStepParser;
+import org.jbehave.OurTechnique;
+import org.jbehave.Technique;
+import org.jbehave.scenario.parser.ScenarioDefiner;
 import org.jbehave.scenario.parser.StepParser;
-import org.jbehave.scenario.reporters.PrintStreamScenarioReporter;
 import org.jbehave.scenario.steps.CandidateStep;
 import org.jbehave.scenario.steps.PendingStep;
 import org.jbehave.scenario.steps.Step;
@@ -24,34 +24,30 @@
 public abstract class Scenario {
 
     private final Steps[] candidateSteps;
-    private final ScenarioFileLoader fileLoader;
+    private final ScenarioDefiner scenarioDefiner;
     private final StepParser stepParser;
     private final ScenarioRunner scenarioRunner;
 
     public Scenario(Steps... candidateSteps) {
-        this(new ScenarioFileLoader(), candidateSteps);
+        this(new OurTechnique(), candidateSteps);
     }
 
-    public Scenario(ScenarioFileLoader fileLoader, Steps... candidateSteps) {
-        this(fileLoader, new PrintStreamScenarioReporter(), candidateSteps);
-    }
-
-    public Scenario(ScenarioFileLoader fileLoader, ScenarioReporter reporter, Steps... candidateSteps) {
-        this(fileLoader, new PatternStepParser(), new ScenarioRunner(reporter), candidateSteps);
-    }
-
-    public Scenario(ScenarioFileLoader fileFinder, StepParser stepParser, ScenarioRunner scenarioRunner,
-            Steps... candidateSteps) {
-        this.fileLoader = fileFinder;
-        this.stepParser = stepParser;
-        this.scenarioRunner = scenarioRunner;
+    public Scenario(Technique technique, Steps... candidateSteps) {
         this.candidateSteps = candidateSteps;
+		this.scenarioDefiner = technique.forDefiningScenarios();
+        this.stepParser = technique.forParsingSteps();
+        this.scenarioRunner = new ScenarioRunner(technique.forReportingScenarios());
     }
 
     @Test
     public void runUsingSteps() throws Throwable {
-        List<String> stringSteps = stepParser.findSteps(fileLoader.loadScenarioAsString(this.getClass()));
-        Step[] steps = new Step[stringSteps.size()];
+        List<String> stringSteps = stepParser.findSteps(scenarioDefiner.loadStepsFor(this.getClass()));
+        Step[] steps = createRealStepsFromCandidates(stringSteps);
+        scenarioRunner.run(steps);
+    }
+
+	private Step[] createRealStepsFromCandidates(List<String> stringSteps) {
+		Step[] steps = new Step[stringSteps.size()];
         for (int i = 0; i < steps.length; i++) {
             String stringStep = stringSteps.get(i);
             for (Steps candidates : candidateSteps) {
@@ -65,6 +61,6 @@
                 steps[i] = new PendingStep(stringStep);
             }
         }
-        scenarioRunner.run(steps);
-    }
+		return steps;
+	}
 }

Deleted: trunk/jbehave-core/src/java/org/jbehave/scenario/parser/ScenarioFileLoader.java (877 => 878)

--- trunk/jbehave-core/src/java/org/jbehave/scenario/parser/ScenarioFileLoader.java	2008-07-24 12:53:56 UTC (rev 877)
+++ trunk/jbehave-core/src/java/org/jbehave/scenario/parser/ScenarioFileLoader.java	2008-07-25 09:24:35 UTC (rev 878)
@@ -1,56 +0,0 @@
-package org.jbehave.scenario.parser;
-
-import java.io.ByteArrayOutputStream;
-import java.io.IOException;
-import java.io.InputStream;
-
-import org.jbehave.scenario.Scenario;
-
-public class ScenarioFileLoader {
-
-    private final ScenarioFileNameResolver resolver;
-    private final ClassLoader classLoader;
-
-    public ScenarioFileLoader() {
-        this(new UnderscoredCamelCaseResolver(), Thread.currentThread().getContextClassLoader());
-    }
-
-    public ScenarioFileLoader(ScenarioFileNameResolver converter) {
-        this(converter, Thread.currentThread().getContextClassLoader());
-    }
-
-    public ScenarioFileLoader(ClassLoader classLoader) {
-        this(new UnderscoredCamelCaseResolver(), classLoader);
-    }
-
-    public ScenarioFileLoader(ScenarioFileNameResolver resolver, ClassLoader classLoader) {
-        this.resolver = resolver;
-        this.classLoader = classLoader;
-    }
-
-    public InputStream loadScenarioFor(Class<? extends Scenario> scenarioClass) {
-        String scenarioFileName = resolver.resolve(scenarioClass);
-        InputStream stream = classLoader.getResourceAsStream(scenarioFileName);
-        if ( stream == null ){
-            throw new ScenarioNotFoundException("Scenario file "+scenarioFileName+" could not be found by classloader "+classLoader);
-        }
-        return stream;
-    }
-
-    public String loadScenarioAsString(Class<? extends Scenario> scenarioClass) {
-        return asString(loadScenarioFor(scenarioClass));
-    }
-
-    private String asString(InputStream stream) {
-        try {            
-            byte[] bytes = new byte[stream.available()];
-            stream.read(bytes);
-            ByteArrayOutputStream output = new ByteArrayOutputStream();
-            output.write(bytes);
-            return output.toString();
-        } catch (IOException e) {
-            throw new InvalidScenarioResourceException("Failed to convert scenario resouce to string", e);
-        }
-    }
-
-}

Added: trunk/jbehave-core/src/java/org/jbehave/scenario/parser/ScenarioFileLoader.java (0 => 878)

--- trunk/jbehave-core/src/java/org/jbehave/scenario/parser/ScenarioFileLoader.java	                        (rev 0)
+++ trunk/jbehave-core/src/java/org/jbehave/scenario/parser/ScenarioFileLoader.java	2008-07-25 09:24:35 UTC (rev 878)
@@ -0,0 +1,56 @@
+package org.jbehave.scenario.parser;
+
+import java.io.ByteArrayOutputStream;
+import java.io.IOException;
+import java.io.InputStream;
+
+import org.jbehave.scenario.Scenario;
+
+public class ScenarioFileLoader implements ScenarioDefiner {
+
+    private final ScenarioFileNameResolver resolver;
+    private final ClassLoader classLoader;
+
+    public ScenarioFileLoader() {
+        this(new UnderscoredCamelCaseResolver(), Thread.currentThread().getContextClassLoader());
+    }
+
+    public ScenarioFileLoader(ScenarioFileNameResolver converter) {
+        this(converter, Thread.currentThread().getContextClassLoader());
+    }
+
+    public ScenarioFileLoader(ClassLoader classLoader) {
+        this(new UnderscoredCamelCaseResolver(), classLoader);
+    }
+
+    public ScenarioFileLoader(ScenarioFileNameResolver resolver, ClassLoader classLoader) {
+        this.resolver = resolver;
+        this.classLoader = classLoader;
+    }
+
+    private InputStream loadStepsAsStreamFor(Class<? extends Scenario> scenarioClass) {
+        String scenarioFileName = resolver.resolve(scenarioClass);
+        InputStream stream = classLoader.getResourceAsStream(scenarioFileName);
+        if ( stream == null ){
+            throw new ScenarioNotFoundException("Scenario file "+scenarioFileName+" could not be found by classloader "+classLoader);
+        }
+        return stream;
+    }
+
+    public String loadStepsFor(Class<? extends Scenario> scenarioClass) {
+        return asString(loadStepsAsStreamFor(scenarioClass));
+    }
+
+    private String asString(InputStream stream) {
+        try {            
+            byte[] bytes = new byte[stream.available()];
+            stream.read(bytes);
+            ByteArrayOutputStream output = new ByteArrayOutputStream();
+            output.write(bytes);
+            return output.toString();
+        } catch (IOException e) {
+            throw new InvalidScenarioResourceException("Failed to convert scenario resouce to string", e);
+        }
+    }
+
+}


To unsubscribe from this list please visit:

http://xircles.codehaus.org/manage_email

Reply via email to