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



Reply via email to