- Revision
- 871
- Author
- sirenian
- Date
- 2008-07-18 08:29:54 -0500 (Fri, 18 Jul 2008)
Log Message
[Liz] We no longer care about whitespace in args
Modified Paths
- trunk/examples/gameoflife/src/behaviour/com/lunivore/gameoflife/domain/GameBehaviour.java
- trunk/examples/gameoflife/src/behaviour/com/lunivore/gameoflife/view/string/StringRendererBehaviour.java
- trunk/examples/gameoflife/src/java/com/lunivore/gameoflife/view/string/StringRenderer.java
- trunk/examples/gameoflife/src/scenario/com/lunivore/gameoflife/i_can_toggle_a_cell
- trunk/examples/gameoflife/src/scenario/com/lunivore/gameoflife/the_grid_starts_empty
- trunk/jbehave-core/src/behaviour/org/jbehave/scenario/steps/DollarStepPatternBuilderBehaviour.java
- trunk/jbehave-core/src/java/org/jbehave/scenario/steps/DollarStepPatternBuilder.java
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:
