commit 09e5180a8e28b5490ee4d0bb962a61519c673075 Author: rszabi <ruginaszabo...@gmail.com> AuthorDate: Fri, 19 Dec 2014 14:04:32 +0200 Commit: Mauro Talevi <mauro.tal...@aquilonia.org> CommitDate: Sat, 20 Dec 2014 17:24:02 +0100
JBEHAVE-1062: Now using Matcher.quoteReplacement() when replacing the named parameter values diff --git a/jbehave-core/src/main/java/org/jbehave/core/model/ExamplesTable.java b/jbehave-core/src/main/java/org/jbehave/core/model/ExamplesTable.java index 598416a..d15551e 100755 --- a/jbehave-core/src/main/java/org/jbehave/core/model/ExamplesTable.java +++ b/jbehave-core/src/main/java/org/jbehave/core/model/ExamplesTable.java @@ -336,7 +336,7 @@ public class ExamplesTable { String replacedValue = row.get(key); for (String namedKey : namedParameters.keySet()) { String namedValue = namedParameters.get(namedKey); - replacedValue = replacedValue.replaceAll(namedKey, namedValue); + replacedValue = replacedValue.replaceAll(namedKey, Matcher.quoteReplacement(namedValue)); } replaced.put(key, replacedValue); } diff --git a/jbehave-core/src/test/java/org/jbehave/core/model/ExamplesTableBehaviour.java b/jbehave-core/src/test/java/org/jbehave/core/model/ExamplesTableBehaviour.java index 1e6fcb2..b0bdcf3 100755 --- a/jbehave-core/src/test/java/org/jbehave/core/model/ExamplesTableBehaviour.java +++ b/jbehave-core/src/test/java/org/jbehave/core/model/ExamplesTableBehaviour.java @@ -333,6 +333,30 @@ public class ExamplesTableBehaviour { } + /** + * The values given named parameter values as strings should not suffer any modification after are replaced in table. + * @see {@link String#replaceAll(String, String)} to see why are not present in values the '\' and '$' characters. + */ + @Test + public void shouldKeepExactValueInReplacedNamedParameterValues() throws Exception { + // Given + ExamplesTableFactory factory = new ExamplesTableFactory(); + String problematicNamedParameterValueCharacters = "value having the \\ backslash and the $ dollar character"; + + // When + String tableAsString = "|Name|Value|\n|name|<value>|"; + Map<String, String> namedParameters = new HashMap<String, String>(); + namedParameters.put("<value>", problematicNamedParameterValueCharacters); + ExamplesTable table = factory.createExamplesTable(tableAsString).withNamedParameters(namedParameters); + + // Then + Parameters firstRow = table.getRowsAsParameters(true).get(0); + Map<String, String> firstRowValues = firstRow.values(); + assertThat(firstRowValues.containsKey("Value"), is(true)); + assertThat(firstRow.valueAs("Value", String.class), is(problematicNamedParameterValueCharacters)); + + } + @Test public void shouldMapParametersToType() throws Exception { // Given