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/01/11 23:23:22 UTC

incubator-tamaya git commit: TAMAYA-47: Added assertions for tests. Added test for escape feature. Improved Javadoc.

Repository: incubator-tamaya
Updated Branches:
  refs/heads/master b5f409357 -> a693f9d25


TAMAYA-47: Added assertions for tests. Added test for escape feature. Improved Javadoc.


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

Branch: refs/heads/master
Commit: a693f9d256786f85b3dec92afb39275200bfe4ab
Parents: b5f4093
Author: anatole <an...@apache.org>
Authored: Sun Jan 11 23:22:55 2015 +0100
Committer: anatole <an...@apache.org>
Committed: Sun Jan 11 23:23:15 2015 +0100

----------------------------------------------------------------------
 .../resolver/internal/ConfigResolver.java       |  2 +-
 .../internal/DefaultExpressionEvaluator.java    | 67 ++++++--------
 .../internal/EnvironmentPropertyResolver.java   |  3 +-
 .../internal/ExpressionResolutionFilter.java    |  3 +-
 .../tamaya/resolver/internal/FileResolver.java  |  3 +-
 .../resolver/internal/ResourceResolver.java     |  3 +-
 .../internal/SystemPropertyResolver.java        |  1 +
 .../tamaya/resolver/internal/URLResolver.java   |  3 +-
 .../resolver/spi/ExpressionEvaluator.java       | 28 +++++-
 .../tamaya/resolver/spi/ExpressionResolver.java |  4 +-
 .../tamaya/resolver/ConfigResolutionTest.java   | 91 ++++++++++++++++++++
 .../tamaya/resolver/MyResolutionTest.java       | 33 -------
 .../tamaya/resolver/MyTestPropertySource.java   |  3 +
 13 files changed, 161 insertions(+), 83 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/incubator-tamaya/blob/a693f9d2/modules/resolver/src/main/java/org/apache/tamaya/resolver/internal/ConfigResolver.java
----------------------------------------------------------------------
diff --git a/modules/resolver/src/main/java/org/apache/tamaya/resolver/internal/ConfigResolver.java b/modules/resolver/src/main/java/org/apache/tamaya/resolver/internal/ConfigResolver.java
index fc2df8c..592fd0c 100644
--- a/modules/resolver/src/main/java/org/apache/tamaya/resolver/internal/ConfigResolver.java
+++ b/modules/resolver/src/main/java/org/apache/tamaya/resolver/internal/ConfigResolver.java
@@ -25,7 +25,7 @@ import javax.annotation.Priority;
 
 /**
  * Property resolver implementation that interprets the resolver expression as a reference to another configuration
- * entry.
+ * entry. It can be explicitly addressed by prefixing {@code conf:}, e.g. {@code ${conf:my.other.config.value}}.
  */
 @Priority(200)
 public final class ConfigResolver implements ExpressionResolver{

http://git-wip-us.apache.org/repos/asf/incubator-tamaya/blob/a693f9d2/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 426cd71..d4f5d51 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
@@ -105,62 +105,45 @@ public class DefaultExpressionEvaluator implements ExpressionEvaluator {
      * </ul>
      *
      * @param key the key to be filtered
-     * @param valueToBeFiltered value to be analyzed for expressions
+     * @param value value to be analyzed for expressions
      * @return the resolved value, or the input in case where no expression was detected.
      */
     @Override
-    public String filterProperty(String key, String valueToBeFiltered){
-        if(valueToBeFiltered==null){
+    public String evaluateExpression(String key, String value){
+        if(value ==null){
             return null;
         }
-        StringTokenizer tokenizer = new StringTokenizer(valueToBeFiltered, "${}\\", true);
+        StringTokenizer tokenizer = new StringTokenizer(value, "${}\\", true);
         boolean escaped = false;
         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 "n":
-                        current.append("\n");
-                        break;
-                    case "r":
-                        current.append("\r");
+                    case "\\":
+                        escaped = true;
+                        current.append("\\");
                         break;
-                    case "t":
-                        current.append("\t");
+                    case "$":
+                        if (current.length() > 0) {
+                            resolvedValue.append(current);
+                            current.setLength(0);
+                        }
+                        if (!"{".equals(tokenizer.nextToken())) {
+                            LOG.warning("Invalid expression syntax in: " + value);
+                            return value;
+                        }
+                        String subExpression = parseSubExpression(tokenizer, value);
+                        current.append(evaluateInternal(subExpression));
                         break;
                     default:
                         current.append(token);
-                        break;
                 }
-                escaped = false;
-                continue;
-            }
-            switch (token) {
-                case "\\":
-                    if(!escaped) {
-                        escaped = true;
-                        continue;
-                    }
-                    current.append(token);
-                    break;
-                case "$":
-                    if (current.length() > 0) {
-                        resolvedValue.append(current);
-                        current.setLength(0);
-                    }
-                    if (!"{".equals(tokenizer.nextToken())) {
-                        LOG.warning("Invalid expression syntax in: " + valueToBeFiltered);
-                        return valueToBeFiltered;
-                    }
-                    String subExpression = parseSubExpression(tokenizer, valueToBeFiltered);
-                    current.append(evaluateInternal(subExpression));
-                    break;
-                default:
-                    current.append(token);
             }
-            escaped = false;
         }
         if (current.length() > 0) {
             resolvedValue.append(current);
@@ -183,9 +166,10 @@ public class DefaultExpressionEvaluator implements ExpressionEvaluator {
                 case "\\":
                     if(!escaped) {
                         escaped = true;
+
                     } else {
                         expression.append(token);
-                        continue;
+                        escaped = false;
                     }
                     break;
                 case "{":
@@ -193,25 +177,28 @@ public class DefaultExpressionEvaluator implements ExpressionEvaluator {
                         LOG.warning("Ignoring not escaped '{' in : " + valueToBeFiltered);
                     }
                     expression.append(token);
+                    escaped = false;
                     break;
                 case "$":
                     if(!escaped) {
                         LOG.warning("Ignoring not escaped '$' in : " + valueToBeFiltered);
                     }
                     expression.append(token);
+                    escaped = false;
                     break;
                 case "}":
                     if(escaped) {
                         expression.append(token);
+                        escaped = false;
                     } else{
                         return expression.toString();
                     }
                     break;
                 default:
                     expression.append(token);
+                    escaped = false;
                     break;
             }
-            escaped = false;
         }
         LOG.warning("Invalid expression syntax in: " + valueToBeFiltered + ", expression does not close!");
             return valueToBeFiltered;

http://git-wip-us.apache.org/repos/asf/incubator-tamaya/blob/a693f9d2/modules/resolver/src/main/java/org/apache/tamaya/resolver/internal/EnvironmentPropertyResolver.java
----------------------------------------------------------------------
diff --git a/modules/resolver/src/main/java/org/apache/tamaya/resolver/internal/EnvironmentPropertyResolver.java b/modules/resolver/src/main/java/org/apache/tamaya/resolver/internal/EnvironmentPropertyResolver.java
index b89160a..f93679d 100644
--- a/modules/resolver/src/main/java/org/apache/tamaya/resolver/internal/EnvironmentPropertyResolver.java
+++ b/modules/resolver/src/main/java/org/apache/tamaya/resolver/internal/EnvironmentPropertyResolver.java
@@ -24,7 +24,8 @@ import javax.annotation.Priority;
 import java.util.Optional;
 
 /**
- * Property resolver implementation that interprets the resolver expressions as environment properties.
+ * Property resolver implementation that interprets the resolver expressions as environment properties. It can be
+ * explicitly addressed by prefixing {@code env:}, e.g. {@code ${env:MACHINE_NAME}}.
  */
 @Priority(0)
 public final class EnvironmentPropertyResolver implements ExpressionResolver{

http://git-wip-us.apache.org/repos/asf/incubator-tamaya/blob/a693f9d2/modules/resolver/src/main/java/org/apache/tamaya/resolver/internal/ExpressionResolutionFilter.java
----------------------------------------------------------------------
diff --git a/modules/resolver/src/main/java/org/apache/tamaya/resolver/internal/ExpressionResolutionFilter.java b/modules/resolver/src/main/java/org/apache/tamaya/resolver/internal/ExpressionResolutionFilter.java
index fb4c122..470560b 100644
--- a/modules/resolver/src/main/java/org/apache/tamaya/resolver/internal/ExpressionResolutionFilter.java
+++ b/modules/resolver/src/main/java/org/apache/tamaya/resolver/internal/ExpressionResolutionFilter.java
@@ -77,7 +77,8 @@ public class ExpressionResolutionFilter implements PropertyFilter {
      */
     @Override
     public String filterProperty(String key, String valueToBeFiltered){
-        return evaluator.filterProperty(key, valueToBeFiltered);
+        LOG.finest(() -> "Resolving " + valueToBeFiltered + "(key="+key+")");
+        return evaluator.evaluateExpression(key, valueToBeFiltered);
     }
 
 

http://git-wip-us.apache.org/repos/asf/incubator-tamaya/blob/a693f9d2/modules/resolver/src/main/java/org/apache/tamaya/resolver/internal/FileResolver.java
----------------------------------------------------------------------
diff --git a/modules/resolver/src/main/java/org/apache/tamaya/resolver/internal/FileResolver.java b/modules/resolver/src/main/java/org/apache/tamaya/resolver/internal/FileResolver.java
index 07db363..5dbe4e0 100644
--- a/modules/resolver/src/main/java/org/apache/tamaya/resolver/internal/FileResolver.java
+++ b/modules/resolver/src/main/java/org/apache/tamaya/resolver/internal/FileResolver.java
@@ -35,7 +35,8 @@ import java.util.logging.Logger;
 /**
  * Property resolver implementation that tries to load the given resource from the current file system.
  * <br/>
- * If the {@code Resources} module is available this module is used for resolving the expression.
+ * If the {@code Resources} module is available this module is used for resolving the expression. It can be
+ * explicitly addressed by prefixing {@code file:}, e.g. {@code ${file:c:/temp/mytext.txt}}.
  */
 @Priority(400)
 public final class FileResolver implements ExpressionResolver {

http://git-wip-us.apache.org/repos/asf/incubator-tamaya/blob/a693f9d2/modules/resolver/src/main/java/org/apache/tamaya/resolver/internal/ResourceResolver.java
----------------------------------------------------------------------
diff --git a/modules/resolver/src/main/java/org/apache/tamaya/resolver/internal/ResourceResolver.java b/modules/resolver/src/main/java/org/apache/tamaya/resolver/internal/ResourceResolver.java
index ae8c3f4..f792554 100644
--- a/modules/resolver/src/main/java/org/apache/tamaya/resolver/internal/ResourceResolver.java
+++ b/modules/resolver/src/main/java/org/apache/tamaya/resolver/internal/ResourceResolver.java
@@ -35,6 +35,7 @@ import java.util.logging.Logger;
 /**
  * Property resolver implementation that tries to load the given resource from the current classpath using the
  * Thread Context classloader, and as fallback from the classloader that loaded this module and system classloader.
+ * It can be explicitly addressed by prefixing {@code resource:}, e.g. {@code ${resource:META-INF/VERSION}}.
  * <br/>
  * If the {@code Resources} module is available this module is used for resolving the expression.
  */
@@ -133,7 +134,7 @@ public final class ResourceResolver implements ExpressionResolver {
                     return resources.get(0);
                 }
             }
-            if(expression.contains("*") || expression.contains("?")){
+            if (expression.contains("*") || expression.contains("?")) {
                 LOG.warning(() -> "Rouse not found: " + expression + "(Hint: expression contains expression" +
                         " placeholders, but resource module is not loaded.");
             }

http://git-wip-us.apache.org/repos/asf/incubator-tamaya/blob/a693f9d2/modules/resolver/src/main/java/org/apache/tamaya/resolver/internal/SystemPropertyResolver.java
----------------------------------------------------------------------
diff --git a/modules/resolver/src/main/java/org/apache/tamaya/resolver/internal/SystemPropertyResolver.java b/modules/resolver/src/main/java/org/apache/tamaya/resolver/internal/SystemPropertyResolver.java
index 5c86db1..d5151b7 100644
--- a/modules/resolver/src/main/java/org/apache/tamaya/resolver/internal/SystemPropertyResolver.java
+++ b/modules/resolver/src/main/java/org/apache/tamaya/resolver/internal/SystemPropertyResolver.java
@@ -26,6 +26,7 @@ import javax.annotation.Priority;
 
 /**
  * Property resolver implementation that interprets the resolver expression as system property name.
+ * It can be explicitly addressed by prefixing {@code sys:}, e.g. {@code ${sys:mySystemProperty}}.
  */
 @Priority(100)
 public final class SystemPropertyResolver implements ExpressionResolver{

http://git-wip-us.apache.org/repos/asf/incubator-tamaya/blob/a693f9d2/modules/resolver/src/main/java/org/apache/tamaya/resolver/internal/URLResolver.java
----------------------------------------------------------------------
diff --git a/modules/resolver/src/main/java/org/apache/tamaya/resolver/internal/URLResolver.java b/modules/resolver/src/main/java/org/apache/tamaya/resolver/internal/URLResolver.java
index 49eb3c0..6d1d7d8 100644
--- a/modules/resolver/src/main/java/org/apache/tamaya/resolver/internal/URLResolver.java
+++ b/modules/resolver/src/main/java/org/apache/tamaya/resolver/internal/URLResolver.java
@@ -29,6 +29,7 @@ import java.util.logging.Logger;
 
 /**
  * Property resolver implementation that interprets the resolver expression as an URL to be resolved.
+ * It can be explicitly addressed by prefixing {@code url:}, e.g. {@code ${url:http//www.oracle.com}}.
  */
 @Priority(500)
 public final class URLResolver implements ExpressionResolver {
@@ -42,7 +43,7 @@ public final class URLResolver implements ExpressionResolver {
 
     @Override
     public String evaluate(String expression) {
-        BufferedReader in = null;
+        BufferedReader in;
         try {
             URL url = new URL(expression);
             in = new BufferedReader(

http://git-wip-us.apache.org/repos/asf/incubator-tamaya/blob/a693f9d2/modules/resolver/src/main/java/org/apache/tamaya/resolver/spi/ExpressionEvaluator.java
----------------------------------------------------------------------
diff --git a/modules/resolver/src/main/java/org/apache/tamaya/resolver/spi/ExpressionEvaluator.java b/modules/resolver/src/main/java/org/apache/tamaya/resolver/spi/ExpressionEvaluator.java
index 8f95410..1f7c861 100644
--- a/modules/resolver/src/main/java/org/apache/tamaya/resolver/spi/ExpressionEvaluator.java
+++ b/modules/resolver/src/main/java/org/apache/tamaya/resolver/spi/ExpressionEvaluator.java
@@ -20,14 +20,36 @@ package org.apache.tamaya.resolver.spi;
 
 
 /**
- * Created by Anatole on 05.01.2015.
+ * Interface that provides an SPI that can be accessed from the current {@link org.apache.tamaya.spi.ServiceContext},
+ * which allows to pass expression that contain placeholders and variable expressions. Expressions passed hereby
+ * use UNIX styled variable syntax as follows:
+ * <pre>
+ *     ${expression}
+ *     My name is ${expression}.
+ *     Also multiple expressions are support, e.g. ${expression1}, ${expression2}.
+ * </pre>
+ *
+ * By default all registered instances of {@link org.apache.tamaya.resolver.spi.ExpressionResolver} are called to
+ * evaluate an expression, depending on the annotatated {@link javax.annotation.Priority} on the resolver classes.
+ * Nevertheless with {@link ExpressionResolver#getResolverPrefix()} each resolver instance defines a unique id, by
+ * which a resolver can be explicitly addressed as follows:
+ * <pre>
+ *     ${env:MACHINE_NAME}
+ *     My name is ${sys:instance.name}.
+ *     Also multiple expressions are supported, e.g. ${resource:META-INF/version.conf}, ${file:C:/temp/version.txt},
+ *     ${url:http://configserver/name}.
+ * </pre>
+ * Basically this service is consumed by an instance of {@link org.apache.tamaya.spi.PropertyFilter}, which
+ * takes the configuration values found and passes them to this evaluator, when expressions are detected. This
+ * also done iteratively, so also multi-stepped references (references, which themselves must be evaluated as well)
+ * are supported.
  */
 public interface ExpressionEvaluator {
     /**
      * Evaluates the current expression.
      * @param key the key, not null.
-     * @param valueToBeFiltered the value to be filtered/evaluated.
+     * @param value the value to be filtered/evaluated.
      * @return the filtered/evaluated value, including null.
      */
-    String filterProperty(String key, String valueToBeFiltered);
+    String evaluateExpression(String key, String value);
 }

http://git-wip-us.apache.org/repos/asf/incubator-tamaya/blob/a693f9d2/modules/resolver/src/main/java/org/apache/tamaya/resolver/spi/ExpressionResolver.java
----------------------------------------------------------------------
diff --git a/modules/resolver/src/main/java/org/apache/tamaya/resolver/spi/ExpressionResolver.java b/modules/resolver/src/main/java/org/apache/tamaya/resolver/spi/ExpressionResolver.java
index 4691f29..d75a89a 100644
--- a/modules/resolver/src/main/java/org/apache/tamaya/resolver/spi/ExpressionResolver.java
+++ b/modules/resolver/src/main/java/org/apache/tamaya/resolver/spi/ExpressionResolver.java
@@ -31,7 +31,9 @@ public interface ExpressionResolver {
      * default all registered resolvers are called in order as defined by the {@link javax.annotation.Priority}
      * annotation.
      *
-     * @return the prefix that identifies this resolver instance, e.g. 'config:'.
+     * @return the prefix that identifies this resolver instance, e.g. 'config:'. The ':' hereby is not required as a
+     * separator, but it is recommended to use it, because it fits well, with the other existing resolvers and
+     * is easy to read.
      */
     public String getResolverPrefix();
 

http://git-wip-us.apache.org/repos/asf/incubator-tamaya/blob/a693f9d2/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
new file mode 100644
index 0000000..23fc42b
--- /dev/null
+++ b/modules/resolver/src/test/java/org/apache/tamaya/resolver/ConfigResolutionTest.java
@@ -0,0 +1,91 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.tamaya.resolver;
+
+import org.apache.tamaya.Configuration;
+import org.junit.Test;
+
+import static org.junit.Assert.assertEquals;
+import static org.junit.Assert.assertNotNull;
+import static org.junit.Assert.assertTrue;
+
+/**
+ * Test class that test resolution of different values as configured within
+ * {@link org.apache.tamaya.resolver.MyTestPropertySource} and on test resource path.
+ */
+public class ConfigResolutionTest {
+
+    @Test
+    public void test_Prefix_Resolution() {
+        assertEquals(Configuration.current().get("Before Text (prefixed)"), "My Java version is " + System.getProperty("java.version"));
+    }
+
+    @Test
+    public void test_Midfix_Resolution() {
+        assertEquals(Configuration.current().get("Before and After Text (prefixed)"), "My Java version is " + System.getProperty("java.version") + ".");
+    }
+
+    @Test
+    public void test_Prefix_ExpressionOnly_Resolution() {
+        assertEquals(Configuration.current().get("Expression Only"), System.getProperty("java.version"));
+    }
+
+    @Test
+    public void testConfig_Refs() {
+        assertEquals(Configuration.current().get("config-ref"), "Expression Only -> " + System.getProperty("java.version"));
+        assertEquals(Configuration.current().get("config-ref3"), "Config Ref 3 -> Ref 2: Config Ref 2 -> Ref 1: Expression Only -> " + System.getProperty("java.version"));
+        assertEquals(Configuration.current().get("config-ref2"), "Config Ref 2 -> Ref 1: Expression Only -> " + System.getProperty("java.version"));
+    }
+
+    @Test
+    public void testClasspath_Refs() {
+        String value = Configuration.current().get("cp-ref");
+        assertNotNull(value);
+        assertTrue(value.contains("This content comes from Testresource.txt!"));
+    }
+
+    @Test
+    public void testResource_Refs() {
+        String value = Configuration.current().get("res-ref");
+        assertNotNull(value);
+        assertTrue(value.contains("This content comes from Testresource.txt!"));
+    }
+
+    @Test
+    public void testFile_Refs() {
+        String value = Configuration.current().get("file-ref");
+        assertNotNull(value);
+        assertTrue(value.contains("This content comes from Testresource2.txt!"));
+    }
+
+    @Test
+    public void testURL_Refs() {
+        String value = Configuration.current().get("url-ref");
+        assertNotNull(value);
+        assertTrue(value.contains("doctype html"));
+    }
+
+    @Test
+    public void testEscaping(){
+        assertEquals(Configuration.current().get("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!");
+    }
+
+}
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/incubator-tamaya/blob/a693f9d2/modules/resolver/src/test/java/org/apache/tamaya/resolver/MyResolutionTest.java
----------------------------------------------------------------------
diff --git a/modules/resolver/src/test/java/org/apache/tamaya/resolver/MyResolutionTest.java b/modules/resolver/src/test/java/org/apache/tamaya/resolver/MyResolutionTest.java
deleted file mode 100644
index b9ad08d..0000000
--- a/modules/resolver/src/test/java/org/apache/tamaya/resolver/MyResolutionTest.java
+++ /dev/null
@@ -1,33 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- *   http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-package org.apache.tamaya.resolver;
-
-import org.apache.tamaya.Configuration;
-import org.junit.Test;
-
-/**
- * Created by Anatole on 04.01.2015.
- */
-public class MyResolutionTest {
-
-    @Test
-    public void testConfig(){
-        System.out.println(Configuration.current().getProperties());
-    }
-}

http://git-wip-us.apache.org/repos/asf/incubator-tamaya/blob/a693f9d2/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 674eae8..6e35f4f 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
@@ -49,6 +49,9 @@ public class MyTestPropertySource implements PropertySource{
         properties.put("config-ref", "Expression Only -> ${conf:Expression Only}");
         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("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!");
     }
 
     private String getFileRefAsString() {