modules/common/filetemplate-bundle/src/main/java/org/rhq/bundle/filetemplate/recipe/RecipeParser.java
| 2 +
modules/common/filetemplate-bundle/src/test/java/org/rhq/bundle/filetemplate/recipe/RecipeParserTest.java
| 16 ++++++++++
modules/core/util/src/main/java/org/rhq/core/template/TemplateEngine.java
| 15 ++++-----
modules/core/util/src/test/java/org/rhq/core/template/TemplateEngineTest.java
| 4 +-
4 files changed, 28 insertions(+), 9 deletions(-)
New commits:
commit 2ec54df504a1dea687c489c41e001d78f98bbdd9
Author: John Mazzitelli <mazz(a)redhat.com>
Date: Fri Apr 30 16:18:11 2010 -0400
add some more tests to template engine/recipe parser; make sure we better support
windows paths
diff --git
a/modules/common/filetemplate-bundle/src/main/java/org/rhq/bundle/filetemplate/recipe/RecipeParser.java
b/modules/common/filetemplate-bundle/src/main/java/org/rhq/bundle/filetemplate/recipe/RecipeParser.java
index a871e91..54ae226 100644
---
a/modules/common/filetemplate-bundle/src/main/java/org/rhq/bundle/filetemplate/recipe/RecipeParser.java
+++
b/modules/common/filetemplate-bundle/src/main/java/org/rhq/bundle/filetemplate/recipe/RecipeParser.java
@@ -199,6 +199,8 @@ public class RecipeParser {
}
protected String[] splitCommandLine(String cmdLine) {
+ cmdLine = cmdLine.replace('\\', '/');
+
ByteArrayInputStream in = new ByteArrayInputStream(cmdLine.getBytes());
StreamTokenizer strtok = new StreamTokenizer(new InputStreamReader(in));
List<String> args = new ArrayList<String>();
diff --git
a/modules/common/filetemplate-bundle/src/test/java/org/rhq/bundle/filetemplate/recipe/RecipeParserTest.java
b/modules/common/filetemplate-bundle/src/test/java/org/rhq/bundle/filetemplate/recipe/RecipeParserTest.java
index fc9acd3..dda85f4 100644
---
a/modules/common/filetemplate-bundle/src/test/java/org/rhq/bundle/filetemplate/recipe/RecipeParserTest.java
+++
b/modules/common/filetemplate-bundle/src/test/java/org/rhq/bundle/filetemplate/recipe/RecipeParserTest.java
@@ -311,6 +311,22 @@ public class RecipeParserTest {
assert files.get("tomcat.tar").equals("/opt/tomcat") :
files;
}
+ public void testSimpleRecipeWithBackslashes() throws Exception {
+ addRecipeCommand("deploy -f jboss1.zip -d
\"C:\\opt\\jboss1\"");
+ addRecipeCommand("deploy -f tomcat.tar \"--directory=C:\\Documents and
Settings\\user\\\"");
+ addRecipeCommand("deploy -f jboss2.zip -d C:\\opt\\jboss1");
+ RecipeParser parser = new RecipeParser();
+ RecipeContext context = new RecipeContext(getRecipe());
+ parser.parseRecipe(context);
+ Map<String, String> files = context.getDeployFiles();
+ assert files.containsKey("jboss1.zip") : files;
+ assert files.get("jboss1.zip").equals("C:/opt/jboss1") :
files;
+ assert files.containsKey("tomcat.tar") : files;
+ assert files.get("tomcat.tar").equals("C:/Documents and
Settings/user/") : files;
+ assert files.containsKey("jboss2.zip") : files;
+ assert files.get("jboss2.zip").equals("C:/opt/jboss1") :
files;
+ }
+
public void testSimpleRecipeError() throws Exception {
addRecipeCommand("deploy -f jboss.tar");
RecipeParser parser = new RecipeParser();
diff --git a/modules/core/util/src/main/java/org/rhq/core/template/TemplateEngine.java
b/modules/core/util/src/main/java/org/rhq/core/template/TemplateEngine.java
index 78e56e1..52deb7e 100644
--- a/modules/core/util/src/main/java/org/rhq/core/template/TemplateEngine.java
+++ b/modules/core/util/src/main/java/org/rhq/core/template/TemplateEngine.java
@@ -37,12 +37,7 @@ public class TemplateEngine implements Serializable {
}
public String replaceTokens(String input) {
-
- // since our replacement strings may include \ and $ characters avoid the use of
- // matcher.appendReplacement and like methods when doing this work.
-
- String result = input;
-
+ StringBuffer buffer = new StringBuffer();
Matcher matcher = tokenPattern.matcher(input);
while (matcher.find()) {
String next = matcher.group();
@@ -51,10 +46,14 @@ public class TemplateEngine implements Serializable {
String key = keyMatcher.group();
String value = tokens.get(key);
if (value != null) {
- result = result.replace(next, value);
+ next = value;
}
}
+
+ // If we didn't find a replacement for the key, leave the original value
unchanged
+ matcher.appendReplacement(buffer, Matcher.quoteReplacement(next));
}
- return result;
+ matcher.appendTail(buffer);
+ return buffer.toString();
}
}
diff --git a/modules/core/util/src/test/java/org/rhq/core/template/TemplateEngineTest.java
b/modules/core/util/src/test/java/org/rhq/core/template/TemplateEngineTest.java
index 4402c6c..e215545 100644
--- a/modules/core/util/src/test/java/org/rhq/core/template/TemplateEngineTest.java
+++ b/modules/core/util/src/test/java/org/rhq/core/template/TemplateEngineTest.java
@@ -10,7 +10,7 @@ import org.testng.annotations.Test;
public class TemplateEngineTest extends TestCase {
private static final String IPADDR = "192.168.22.153";
private static final String SUCCESSTOKEN1 = "successtoken1";
- private static final String WINTEMPDIR =
"C:\\Users\\JSHAUG~1\\AppData\\Local\\Temp\\";
+ private static final String WINTEMPDIR = "C:\\Users\\JSHAUG~1\\Documents and
Settings\\Local\\Temp\\";
String noTokens = "This string should come through unchanged";
String justOneToken = "@@rhq.token1@(a)";
String oneTokenWhiteSpace = "@@ rhq.token1 @@";
@@ -46,6 +46,8 @@ public class TemplateEngineTest extends TestCase {
public void testWinToken() {
assertEquals(WINTEMPDIR,
templateEngine.replaceTokens("@@rhq.system.sysprop.java.io.tmpdir@(a)"));
+ assertEquals(WINTEMPDIR + "-" + WINTEMPDIR, templateEngine
+ .replaceTokens("@@rhq.system.sysprop.java.io.tmpdir@@-(a)@
rhq.system.sysprop.java.io.tmpdir @@"));
}
public void testOneTokenWhiteSpace() {
Show replies by date