- Revision
- 898
- Author
- mauro
- Date
- 2008-08-26 06:10:48 -0500 (Tue, 26 Aug 2008)
Log Message
Added example scenario that users custom argument converters.
Modified Paths
- trunk/examples/trader/src/main/java/org/jbehave/examples/trader/scenarios/StockSteps.java
- trunk/jbehave-core/src/java/org/jbehave/scenario/steps/ArgumentConversion.java
Added Paths
- trunk/examples/trader/src/main/java/org/jbehave/examples/trader/converters/
- trunk/examples/trader/src/main/java/org/jbehave/examples/trader/converters/TraderArgumentConverter.java
- trunk/examples/trader/src/main/java/org/jbehave/examples/trader/model/Trader.java
- trunk/examples/trader/src/main/java/org/jbehave/examples/trader/persistence/
- trunk/examples/trader/src/main/java/org/jbehave/examples/trader/persistence/TraderPersister.java
- trunk/examples/trader/src/main/java/org/jbehave/examples/trader/scenarios/TraderSellsAllStocks.java
- trunk/examples/trader/src/main/java/org/jbehave/examples/trader/scenarios/trader_sells_all_stocks.scenario
Diff
Added: trunk/examples/trader/src/main/java/org/jbehave/examples/trader/converters/TraderArgumentConverter.java (0 => 898)
--- trunk/examples/trader/src/main/java/org/jbehave/examples/trader/converters/TraderArgumentConverter.java (rev 0) +++ trunk/examples/trader/src/main/java/org/jbehave/examples/trader/converters/TraderArgumentConverter.java 2008-08-26 11:10:48 UTC (rev 898) @@ -0,0 +1,32 @@ +package org.jbehave.examples.trader.converters; + +import java.lang.reflect.Type; + +import org.jbehave.examples.trader.model.Trader; +import org.jbehave.examples.trader.persistence.TraderPersister; +import org.jbehave.scenario.steps.ArgumentConversion.ArgumentConverter; +import org.jbehave.scenario.steps.ArgumentConversion.InvalidArgumentException; + +public class TraderArgumentConverter implements ArgumentConverter { + private TraderPersister persister; + + public TraderArgumentConverter(TraderPersister persister) { + this.persister = persister; + } + + public boolean accept(Type type) { + if (type instanceof Class) { + return Trader.class.isAssignableFrom((Class<?>) type); + } + return false; + } + + public Object convertValue(String value, Type type) { + Trader trader = persister.retrieveTrader(value); + if ( trader == null ){ + throw new InvalidArgumentException("Trader not found for name "+value, null); + } + return trader; + } + +}
Added: trunk/examples/trader/src/main/java/org/jbehave/examples/trader/model/Trader.java (0 => 898)
--- trunk/examples/trader/src/main/java/org/jbehave/examples/trader/model/Trader.java (rev 0) +++ trunk/examples/trader/src/main/java/org/jbehave/examples/trader/model/Trader.java 2008-08-26 11:10:48 UTC (rev 898) @@ -0,0 +1,29 @@ +package org.jbehave.examples.trader.model; + +import static java.util.Arrays.asList; + +import java.util.List; + +public class Trader { + + private final String name; + private List<Stock> stocks; + + public Trader(String name, List<Stock> stocks) { + this.name = name; + this.stocks = stocks; + } + + public String getName() { + return name; + } + + public List<Stock> getStocks() { + return stocks; + } + + public void sellAllStocks(){ + this.stocks = asList(new Stock[]{}); + } + +}
Added: trunk/examples/trader/src/main/java/org/jbehave/examples/trader/persistence/TraderPersister.java (0 => 898)
--- trunk/examples/trader/src/main/java/org/jbehave/examples/trader/persistence/TraderPersister.java (rev 0) +++ trunk/examples/trader/src/main/java/org/jbehave/examples/trader/persistence/TraderPersister.java 2008-08-26 11:10:48 UTC (rev 898) @@ -0,0 +1,22 @@ +package org.jbehave.examples.trader.persistence; + +import org.jbehave.examples.trader.model.Trader; + +public class TraderPersister { + + private Trader[] traders; + + public TraderPersister(Trader... traders) { + this.traders = traders; + } + + public Trader retrieveTrader(String name) { + for (Trader trader : traders) { + if (trader.getName().equals(name)) { + return trader; + } + } + return null; + } + +}
Modified: trunk/examples/trader/src/main/java/org/jbehave/examples/trader/scenarios/StockSteps.java (897 => 898)
--- trunk/examples/trader/src/main/java/org/jbehave/examples/trader/scenarios/StockSteps.java 2008-08-26 10:34:57 UTC (rev 897) +++ trunk/examples/trader/src/main/java/org/jbehave/examples/trader/scenarios/StockSteps.java 2008-08-26 11:10:48 UTC (rev 898) @@ -1,17 +1,22 @@ package org.jbehave.examples.trader.scenarios; +import static java.util.Arrays.asList; import static org.hamcrest.CoreMatchers.equalTo; import static org.jbehave.Ensure.ensureThat; import java.util.List; +import org.jbehave.examples.trader.converters.TraderArgumentConverter; 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.annotations.Given; 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.SilentStepMonitor; import org.jbehave.scenario.steps.Steps; public class StockSteps extends Steps { @@ -19,12 +24,22 @@ private static final PrintStreamStepMonitor MONITOR = new PrintStreamStepMonitor(); private double threshold; private Stock stock; + private Trader trader; public StockSteps(double threshold) { - super(new PrefixCapturingPatternBuilder(), MONITOR, new ArgumentConversion(), "Given", "When", "Then", "And"); + super(new PrefixCapturingPatternBuilder(), MONITOR, new ArgumentConversion(new SilentStepMonitor(), new TraderArgumentConverter(mockTradePersister())), "Given", "When", "Then", "And"); this.threshold = threshold; } + private static TraderPersister mockTradePersister() { + return new TraderPersister(new Trader("Mauro", asList(new Stock(asList(1.0d), 10.d)))); + } + + @Given("a trader of name $trader") + public void aTrader(Trader trader) { + this.trader = trader; + } + @Given("a stock of prices $prices") public void aStockOfPrice(List<Double> prices) { stock = new Stock(prices, threshold); @@ -40,4 +55,10 @@ ensureThat(stock.getStatus().name(), equalTo(status)); } + @Then("the trader sells all stocks") + public void theTraderSellsAllStocks(){ + trader.sellAllStocks(); + ensureThat(trader.getStocks().size(), equalTo(0)); + } + }
Added: trunk/examples/trader/src/main/java/org/jbehave/examples/trader/scenarios/TraderSellsAllStocks.java (0 => 898)
--- trunk/examples/trader/src/main/java/org/jbehave/examples/trader/scenarios/TraderSellsAllStocks.java (rev 0) +++ trunk/examples/trader/src/main/java/org/jbehave/examples/trader/scenarios/TraderSellsAllStocks.java 2008-08-26 11:10:48 UTC (rev 898) @@ -0,0 +1,25 @@ +package org.jbehave.examples.trader.scenarios; + +import org.jbehave.scenario.PropertyBasedConfiguration; +import org.jbehave.scenario.Scenario; +import org.jbehave.scenario.parser.PatternScenarioParser; +import org.jbehave.scenario.parser.ScenarioDefiner; +import org.jbehave.scenario.parser.ScenarioFileLoader; +import org.jbehave.scenario.parser.UnderscoredCamelCaseResolver; + + +public class TraderSellsAllStocks extends Scenario { + + public TraderSellsAllStocks() { + this(Thread.currentThread().getContextClassLoader()); + } + + public TraderSellsAllStocks(final ClassLoader classLoader) { + super(new PropertyBasedConfiguration() { + public ScenarioDefiner forDefiningScenarios() { + return new ScenarioFileLoader(new UnderscoredCamelCaseResolver(".scenario"), classLoader, new PatternScenarioParser()); + } + }, new StockSteps(10.0)); + } + +} Property changes on: trunk/examples/trader/src/main/java/org/jbehave/examples/trader/scenarios/TraderSellsAllStocks.java ___________________________________________________________________ Name: svn:mergeinfo +
Added: trunk/examples/trader/src/main/java/org/jbehave/examples/trader/scenarios/trader_sells_all_stocks.scenario (0 => 898)
--- trunk/examples/trader/src/main/java/org/jbehave/examples/trader/scenarios/trader_sells_all_stocks.scenario (rev 0) +++ trunk/examples/trader/src/main/java/org/jbehave/examples/trader/scenarios/trader_sells_all_stocks.scenario 2008-08-26 11:10:48 UTC (rev 898) @@ -0,0 +1,4 @@ +Given a trader of name Mauro +Given a stock of prices 0.5,1.0 +When the stock is traded at 2.0 +Then the trader sells all stocks Property changes on: trunk/examples/trader/src/main/java/org/jbehave/examples/trader/scenarios/trader_sells_all_stocks.scenario ___________________________________________________________________ Name: svn:mergeinfo +
Modified: trunk/jbehave-core/src/java/org/jbehave/scenario/steps/ArgumentConversion.java (897 => 898)
--- trunk/jbehave-core/src/java/org/jbehave/scenario/steps/ArgumentConversion.java 2008-08-26 10:34:57 UTC (rev 897) +++ trunk/jbehave-core/src/java/org/jbehave/scenario/steps/ArgumentConversion.java 2008-08-26 11:10:48 UTC (rev 898) @@ -27,8 +27,9 @@ this(new SilentStepMonitor()); } - public ArgumentConversion(StepMonitor monitor) { + public ArgumentConversion(StepMonitor monitor, ArgumentConverter... customConverters) { this.monitor = monitor; + this.converters.addAll(asList(customConverters)); this.converters.addAll(DEFAULT_CONVERTERS); } @@ -49,7 +50,7 @@ return value.replaceAll("(\n)|(\r\n)", NL); } - private static interface ArgumentConverter { + public static interface ArgumentConverter { boolean accept(Type type); @@ -58,7 +59,7 @@ } @SuppressWarnings("serial") - private static class InvalidArgumentException extends RuntimeException { + public static class InvalidArgumentException extends RuntimeException { public InvalidArgumentException(String message, Throwable cause) { super(message, cause);
To unsubscribe from this list please visit:
