Title: [871] trunk/jbehave-core/src/java/org/jbehave/scenario/steps: [Liz] We no longer care about whitespace in args

Diff

Modified: trunk/examples/gameoflife/src/behaviour/com/lunivore/gameoflife/domain/GameBehaviour.java (870 => 871)

--- trunk/examples/gameoflife/src/behaviour/com/lunivore/gameoflife/domain/GameBehaviour.java	2008-06-27 11:50:05 UTC (rev 870)
+++ trunk/examples/gameoflife/src/behaviour/com/lunivore/gameoflife/domain/GameBehaviour.java	2008-07-18 13:29:54 UTC (rev 871)
@@ -16,7 +16,7 @@
 		StringRenderer renderer = new StringRenderer();
 		Game game = new Game(6, 4);
 		game.setObserver(renderer);
-		ensureThat(renderer.asString(), CoreMatchers.equalTo(NL +
+		ensureThat(renderer.asString(), CoreMatchers.equalTo(
 		"......" + NL +
 		"......" + NL +
 		"......" + NL +
@@ -29,19 +29,19 @@
 		Game game = new Game(6, 4);
 		game.setObserver(renderer);
 		game.toggleCellAt(2, 1);
-		ensureThat(renderer.asString(), CoreMatchers.equalTo(NL +
+		ensureThat(renderer.asString(), CoreMatchers.equalTo(
 		"......" + NL +
 		"..X..." + NL +
 		"......" + NL +
 		"......"));
 		game.toggleCellAt(2, 2);
-		ensureThat(renderer.asString(), CoreMatchers.equalTo(NL +
+		ensureThat(renderer.asString(), CoreMatchers.equalTo(
 		"......" + NL +
 		"..X..." + NL +
 		"..X..." + NL +
 		"......"));
 		game.toggleCellAt(2, 1);
-		ensureThat(renderer.asString(), CoreMatchers.equalTo(NL +
+		ensureThat(renderer.asString(), CoreMatchers.equalTo(
 		"......" + NL +
 		"......" + NL +
 		"..X..." + NL +

Modified: trunk/examples/gameoflife/src/behaviour/com/lunivore/gameoflife/view/string/StringRendererBehaviour.java (870 => 871)

--- trunk/examples/gameoflife/src/behaviour/com/lunivore/gameoflife/view/string/StringRendererBehaviour.java	2008-06-27 11:50:05 UTC (rev 870)
+++ trunk/examples/gameoflife/src/behaviour/com/lunivore/gameoflife/view/string/StringRendererBehaviour.java	2008-07-18 13:29:54 UTC (rev 871)
@@ -22,7 +22,7 @@
 		stub(grid.hasLife(3, 4)).toReturn(true);
 		renderer.gridChanged(grid);
 		
-		ensureThat(renderer.asString(), equalTo(NL +
+		ensureThat(renderer.asString(), equalTo(
 				"....." + NL +
 				"....." + NL +
 				"....." + NL +

Modified: trunk/examples/gameoflife/src/java/com/lunivore/gameoflife/view/string/StringRenderer.java (870 => 871)

--- trunk/examples/gameoflife/src/java/com/lunivore/gameoflife/view/string/StringRenderer.java	2008-06-27 11:50:05 UTC (rev 870)
+++ trunk/examples/gameoflife/src/java/com/lunivore/gameoflife/view/string/StringRenderer.java	2008-07-18 13:29:54 UTC (rev 871)
@@ -10,7 +10,6 @@
 
 	public String asString() {
 		StringBuilder builder = new StringBuilder();
-		builder.append(NL);
 		for (int row = 0; row < grid.getHeight(); row++) {
 			for (int column = 0; column < grid.getWidth(); column++) {
 				builder.append(grid.hasLife(column, row) ? "X" : ".");

Modified: trunk/examples/gameoflife/src/scenario/com/lunivore/gameoflife/i_can_toggle_a_cell (870 => 871)

--- trunk/examples/gameoflife/src/scenario/com/lunivore/gameoflife/i_can_toggle_a_cell	2008-06-27 11:50:05 UTC (rev 870)
+++ trunk/examples/gameoflife/src/scenario/com/lunivore/gameoflife/i_can_toggle_a_cell	2008-07-18 13:29:54 UTC (rev 871)
@@ -1,20 +1,20 @@
 Given a 5 by 5 game
 When I toggle the cell at (2, 3)
-Then the grid should look like 
+Then the grid should look like
 .....
 .....
 .....
 ..X..
 .....
 When I toggle the cell at (2, 4)
-Then the grid should look like 
+Then the grid should look like
 .....
 .....
 .....
 ..X..
 ..X..
 When I toggle the cell at (2, 3)
-Then the grid should look like 
+Then the grid should look like
 .....
 .....
 .....

Modified: trunk/examples/gameoflife/src/scenario/com/lunivore/gameoflife/the_grid_starts_empty (870 => 871)

--- trunk/examples/gameoflife/src/scenario/com/lunivore/gameoflife/the_grid_starts_empty	2008-06-27 11:50:05 UTC (rev 870)
+++ trunk/examples/gameoflife/src/scenario/com/lunivore/gameoflife/the_grid_starts_empty	2008-07-18 13:29:54 UTC (rev 871)
@@ -1,7 +1,7 @@
 Given a 5 by 5 game
-Then the grid should look like 
+Then the grid should look like
 .....
 .....
 .....
 .....
-..... 
\ No newline at end of file
+.....

Modified: trunk/jbehave-core/src/behaviour/org/jbehave/scenario/steps/DollarStepPatternBuilderBehaviour.java (870 => 871)

--- trunk/jbehave-core/src/behaviour/org/jbehave/scenario/steps/DollarStepPatternBuilderBehaviour.java	2008-06-27 11:50:05 UTC (rev 870)
+++ trunk/jbehave-core/src/behaviour/org/jbehave/scenario/steps/DollarStepPatternBuilderBehaviour.java	2008-07-18 13:29:54 UTC (rev 871)
@@ -1,12 +1,18 @@
 package org.jbehave.scenario.steps;
 
+import static org.hamcrest.CoreMatchers.equalTo;
 import static org.jbehave.Ensure.ensureThat;
 
+import java.util.regex.Matcher;
+import java.util.regex.Pattern;
+
 import org.junit.Test;
 
 
 public class DollarStepPatternBuilderBehaviour {
 
+	private static final String NL = System.getProperty("line.separator");
+
 	@Test
 	public void shouldReplaceAllDollarArgumentsWithCaptures() {
 		StepPatternBuilder builder = new DollarStepPatternBuilder();
@@ -21,5 +27,41 @@
 		StepPatternBuilder matcher = new DollarStepPatternBuilder();
 		ensureThat(matcher.buildPattern("I toggle the cell at ($column, $row)").matcher("I toggle the cell at (3, 4)").matches());
 	}
+	
+	@Test
+	public void shouldNotCareSoMuchAboutWhitespace() {
+		StepPatternBuilder matcher = new DollarStepPatternBuilder();
+		Pattern pattern = matcher.buildPattern("The grid looks like $grid");
+		
+		// Given an argument on a new line
+		Matcher matched = pattern.matcher(
+				"The grid looks like" + NL +
+				".." + NL +
+				".." + NL
+				);
+		ensureThat(matched.matches());
+		ensureThat(matched.group(1), equalTo(
+				".." + NL +
+				".." + NL));
+		
+		// Given an argument on a new line with extra spaces
+		matched = pattern.matcher(
+				"The grid looks like " + NL +
+				".." + NL +
+				".." + NL
+				);
+		ensureThat(matched.matches());
+		ensureThat(matched.group(1), equalTo(
+				".." + NL +
+				".." + NL));
+		
+		// Given an argument with extra spaces
+		matched = pattern.matcher(
+				"The grid looks like  .");
+		ensureThat(matched.matches());
+		ensureThat(matched.group(1), equalTo(
+				"."));
+		
+	}
 
 }

Modified: trunk/jbehave-core/src/java/org/jbehave/scenario/steps/DollarStepPatternBuilder.java (870 => 871)

--- trunk/jbehave-core/src/java/org/jbehave/scenario/steps/DollarStepPatternBuilder.java	2008-06-27 11:50:05 UTC (rev 870)
+++ trunk/jbehave-core/src/java/org/jbehave/scenario/steps/DollarStepPatternBuilder.java	2008-07-18 13:29:54 UTC (rev 871)
@@ -7,13 +7,32 @@
 
 public class DollarStepPatternBuilder implements StepPatternBuilder {
 
+	private static final String ANY_WORD_BEGINNING_WITH_DOLLAR = "(\\$\\w*)(\\W|\\Z)";
+
 	public Pattern buildPattern(String matchThis) {
-		String escapedMatch = escapeBrackets(matchThis);
-		Matcher replacingArgsWithCapture = Pattern.compile("(\\$\\w*)(\\W|\\Z)", Pattern.DOTALL).matcher(escapedMatch);
+		String matchThisButLeaveBrackets = escapeBrackets(matchThis);
+		List<Replacement> replacements = findArgumentsToReplace(matchThisButLeaveBrackets);
+		String patternToMatchAgainst = replaceIdentifiedArgsWithCapture(matchThisButLeaveBrackets, replacements);
+		String matchThisButIgnoreWhitespace = anyWhitespaceWillDo(patternToMatchAgainst);
+		return Pattern.compile(matchThisButIgnoreWhitespace, Pattern.DOTALL);
+	}
+
+	private String anyWhitespaceWillDo(String matchThis) {
+		return matchThis.replaceAll("\\s+", "\\\\s+");
+	}
+
+	private List<Replacement> findArgumentsToReplace(
+			String matchThisButLeaveBrackets) {
+		Matcher findingAllTheDollarWords = Pattern.compile(ANY_WORD_BEGINNING_WITH_DOLLAR, Pattern.DOTALL).matcher(matchThisButLeaveBrackets);
 		List<Replacement> replacements = new ArrayList<Replacement>();
-		while(replacingArgsWithCapture.find()) {
-			replacements.add(new Replacement(replacingArgsWithCapture.start(), replacingArgsWithCapture.end(), replacingArgsWithCapture.group(2)));
+		while(findingAllTheDollarWords.find()) {
+			replacements.add(new Replacement(findingAllTheDollarWords.start(), findingAllTheDollarWords.end(), findingAllTheDollarWords.group(2)));
 		}
+		return replacements;
+	}
+
+	private String replaceIdentifiedArgsWithCapture(String escapedMatch,
+			List<Replacement> replacements) {
 		String matchTemp = escapedMatch;
 		for (int i = replacements.size(); i > 0; i--) {
 			String start = matchTemp.substring(0, replacements.get(i - 1).start);
@@ -21,7 +40,7 @@
 			String whitespaceIfAny = replacements.get(i - 1).whitespaceIfAny;
 			matchTemp = start + "(.*)" + whitespaceIfAny + end;
 		}
-		return Pattern.compile(matchTemp, Pattern.DOTALL);
+		return matchTemp;
 	}
 	
 	private String escapeBrackets(String matchThis) {


To unsubscribe from this list please visit:

http://xircles.codehaus.org/manage_email

Reply via email to