You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@tamaya.apache.org by an...@apache.org on 2015/12/09 00:21:25 UTC

incubator-tamaya git commit: TAMAYA-127: Fixed resolver issues.

Repository: incubator-tamaya
Updated Branches:
  refs/heads/master 166a11448 -> 5fa2934af


TAMAYA-127: Fixed resolver issues.


Project: http://git-wip-us.apache.org/repos/asf/incubator-tamaya/repo
Commit: http://git-wip-us.apache.org/repos/asf/incubator-tamaya/commit/5fa2934a
Tree: http://git-wip-us.apache.org/repos/asf/incubator-tamaya/tree/5fa2934a
Diff: http://git-wip-us.apache.org/repos/asf/incubator-tamaya/diff/5fa2934a

Branch: refs/heads/master
Commit: 5fa2934afe7f8bff460fd4db6d1662358563b2b8
Parents: 166a114
Author: anatole <an...@apache.org>
Authored: Wed Dec 9 00:21:16 2015 +0100
Committer: anatole <an...@apache.org>
Committed: Wed Dec 9 00:21:16 2015 +0100

----------------------------------------------------------------------
 .../internal/DefaultExpressionEvaluator.java    | 27 +++++++-----------
 .../tamaya/resolver/ConfigResolutionTest.java   | 30 ++++++++++++++++++++
 .../tamaya/resolver/MyTestPropertySource.java   |  8 ++++++
 3 files changed, 48 insertions(+), 17 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/incubator-tamaya/blob/5fa2934a/modules/resolver/src/main/java/org/apache/tamaya/resolver/internal/DefaultExpressionEvaluator.java
----------------------------------------------------------------------
diff --git a/modules/resolver/src/main/java/org/apache/tamaya/resolver/internal/DefaultExpressionEvaluator.java b/modules/resolver/src/main/java/org/apache/tamaya/resolver/internal/DefaultExpressionEvaluator.java
index 575a176..3a2e0f1 100644
--- a/modules/resolver/src/main/java/org/apache/tamaya/resolver/internal/DefaultExpressionEvaluator.java
+++ b/modules/resolver/src/main/java/org/apache/tamaya/resolver/internal/DefaultExpressionEvaluator.java
@@ -127,36 +127,29 @@ public class DefaultExpressionEvaluator implements ExpressionEvaluator {
         if(value ==null){
             return null;
         }
-        StringTokenizer tokenizer = new StringTokenizer(value, "${}\\", true);
-        boolean escaped = false;
+        StringTokenizer tokenizer = new StringTokenizer(value, "${}", true);
         StringBuilder resolvedValue = new StringBuilder();
         StringBuilder current = new StringBuilder();
         while (tokenizer.hasMoreTokens()) {
             String token = tokenizer.nextToken();
-            if (escaped) {
-                current.append(token);
-                escaped = false;
-            } else {
                 switch (token) {
-                    case "\\":
-                        escaped = true;
-                        current.append("\\");
-                        break;
                     case "$":
-                        if (current.length() > 0) {
-                            resolvedValue.append(current);
-                            current.setLength(0);
+                        String nextToken = tokenizer.hasMoreTokens()?tokenizer.nextToken():"";
+                        if (!"{".equals(nextToken)) {
+                            current.append(token);
+                            current.append(nextToken);
+                            break;
                         }
-                        if (!"{".equals(tokenizer.nextToken())) {
-                            LOG.warning("Invalid expression syntax in: " + value);
-                            return value;
+                        if(value.indexOf('}')<=0){
+                            current.append(token);
+                            current.append(nextToken);
+                            break;
                         }
                         String subExpression = parseSubExpression(tokenizer, value);
                         current.append(evaluateInternal(subExpression));
                         break;
                     default:
                         current.append(token);
-                }
             }
         }
         if (current.length() > 0) {

http://git-wip-us.apache.org/repos/asf/incubator-tamaya/blob/5fa2934a/modules/resolver/src/test/java/org/apache/tamaya/resolver/ConfigResolutionTest.java
----------------------------------------------------------------------
diff --git a/modules/resolver/src/test/java/org/apache/tamaya/resolver/ConfigResolutionTest.java b/modules/resolver/src/test/java/org/apache/tamaya/resolver/ConfigResolutionTest.java
index 7e3db08..5f3306a 100644
--- a/modules/resolver/src/test/java/org/apache/tamaya/resolver/ConfigResolutionTest.java
+++ b/modules/resolver/src/test/java/org/apache/tamaya/resolver/ConfigResolutionTest.java
@@ -42,6 +42,36 @@ public class ConfigResolutionTest {
     }
 
     @Test
+    public void test_Prefix_Resolution_BadSyntax1() {
+        assertEquals(ConfigurationProvider.getConfiguration().get("Will fail1."), "V$java.version");
+    }
+
+    @Test
+    public void test_Prefix_Resolution_BadSyntax2() {
+        assertEquals(ConfigurationProvider.getConfiguration().get("Will fail2."), "V$java.version}");
+    }
+
+    @Test
+    public void test_Prefix_Resolution_BadSyntax31() {
+        assertEquals(ConfigurationProvider.getConfiguration().get("Will not fail3."), "V${java.version");
+    }
+
+    @Test
+    public void test_Prefix_Resolution_Escaped1() {
+        assertEquals(ConfigurationProvider.getConfiguration().get("Will not fail1."), "V$\\{java.version");
+    }
+
+    @Test
+    public void test_Prefix_Resolution_Escaped2() {
+        assertEquals(ConfigurationProvider.getConfiguration().get("Will not fail2."), "V\\${java.version");
+    }
+
+    @Test
+    public void test_Prefix_Resolution_EnvKeys() {
+        assertEquals(ConfigurationProvider.getConfiguration().get("env.keys"), System.getProperty("java.version") + " plus $java.version");
+    }
+
+    @Test
     public void test_Prefix_ExpressionOnly_Resolution() {
         assertEquals(ConfigurationProvider.getConfiguration().get("Expression Only"), System.getProperty("java.version"));
     }

http://git-wip-us.apache.org/repos/asf/incubator-tamaya/blob/5fa2934a/modules/resolver/src/test/java/org/apache/tamaya/resolver/MyTestPropertySource.java
----------------------------------------------------------------------
diff --git a/modules/resolver/src/test/java/org/apache/tamaya/resolver/MyTestPropertySource.java b/modules/resolver/src/test/java/org/apache/tamaya/resolver/MyTestPropertySource.java
index d32b88a..3ed4650 100644
--- a/modules/resolver/src/test/java/org/apache/tamaya/resolver/MyTestPropertySource.java
+++ b/modules/resolver/src/test/java/org/apache/tamaya/resolver/MyTestPropertySource.java
@@ -50,6 +50,14 @@ public class MyTestPropertySource implements PropertySource{
         properties.put("config-ref2", "Config Ref 2 -> Ref 1: ${conf:config-ref}");
         properties.put("config-ref3", "Config Ref 3 -> Ref 2: ${conf:config-ref2}");
 
+        properties.put("Will fail1.", "V$java.version");
+        properties.put("Will fail2.", "V$java.version}");
+        properties.put("Will not fail3.", "V${java.version");
+        properties.put("Will not fail1.", "V$\\{java.version");
+        properties.put("Will not fail2.", "V\\${java.version");
+
+        properties.put("env.keys", "${java.version} plus $java.version");
+
         properties.put("escaped", "Config Ref 3 -> Ref 2: \\${conf:config-ref2 will not be evaluated and will not contain\\t tabs \\n " +
                 "newlines or \\r returns...YEP!");
     }