- Revision
- 878
- Author
- sirenian
- Date
- 2008-07-25 04:24:35 -0500 (Fri, 25 Jul 2008)
Log Message
[Liz] Moved constructors for scenarios into Technique, in preparation for the different ways of reporting / breaking the build
Modified Paths
- trunk/examples/trader/src/main/java/org/jbehave/examples/trader/scenarios/StatusAlertCanBeActivated.java
- trunk/examples/trader/src/main/java/org/jbehave/examples/trader/scenarios/StatusAlertIsNeverActivated.java
- trunk/jbehave-core/src/behaviour/org/jbehave/scenario/ScenarioBehaviour.java
- trunk/jbehave-core/src/behaviour/org/jbehave/scenario/parser/ScenarioFileLoaderBehaviour.java
- trunk/jbehave-core/src/behaviour/org/jbehave/scenario/parser/scenarios/MyPendingScenario.java
- trunk/jbehave-core/src/java/org/jbehave/scenario/Scenario.java
Added Paths
Removed Paths
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:
