Title: [898] trunk/jbehave-core/src/java/org/jbehave/scenario/steps: Added example scenario that users custom argument converters.

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:

http://xircles.codehaus.org/manage_email

Reply via email to