Author: oheger
Date: Sat Mar 17 20:49:17 2018
New Revision: 1827106

URL: http://svn.apache.org/viewvc?rev=1827106&view=rev
Log:
CONFIGURATION-690: ExprLookup.getVariables() no longer returns null.

The method now returns a copy of the variables managed by this lookup
object.

Modified:
    
commons/proper/configuration/trunk/src/main/java/org/apache/commons/configuration2/interpol/ExprLookup.java
    
commons/proper/configuration/trunk/src/test/java/org/apache/commons/configuration2/interpol/TestExprLookup.java

Modified: 
commons/proper/configuration/trunk/src/main/java/org/apache/commons/configuration2/interpol/ExprLookup.java
URL: 
http://svn.apache.org/viewvc/commons/proper/configuration/trunk/src/main/java/org/apache/commons/configuration2/interpol/ExprLookup.java?rev=1827106&r1=1827105&r2=1827106&view=diff
==============================================================================
--- 
commons/proper/configuration/trunk/src/main/java/org/apache/commons/configuration2/interpol/ExprLookup.java
 (original)
+++ 
commons/proper/configuration/trunk/src/main/java/org/apache/commons/configuration2/interpol/ExprLookup.java
 Sat Mar 17 20:49:17 2018
@@ -157,11 +157,14 @@ public class ExprLookup implements Looku
 
     /**
      * Returns the list of Variables that are accessible within expressions.
+     * This method returns a copy of the variables managed by this lookup; so
+     * modifying this object has no impact on this lookup.
+     *
      * @return the List of Variables that are accessible within expressions.
      */
     public Variables getVariables()
     {
-        return null;
+        return new Variables(variables);
     }
 
     /**

Modified: 
commons/proper/configuration/trunk/src/test/java/org/apache/commons/configuration2/interpol/TestExprLookup.java
URL: 
http://svn.apache.org/viewvc/commons/proper/configuration/trunk/src/test/java/org/apache/commons/configuration2/interpol/TestExprLookup.java?rev=1827106&r1=1827105&r2=1827106&view=diff
==============================================================================
--- 
commons/proper/configuration/trunk/src/test/java/org/apache/commons/configuration2/interpol/TestExprLookup.java
 (original)
+++ 
commons/proper/configuration/trunk/src/test/java/org/apache/commons/configuration2/interpol/TestExprLookup.java
 Sat Mar 17 20:49:17 2018
@@ -89,6 +89,32 @@ public class TestExprLookup
         assertEquals("Wrong result", value, lookup.lookup(value));
     }
 
+    /**
+     * Tests whether variables can be queried.
+     */
+    @Test
+    public void testGetVariables()
+    {
+        ExprLookup.Variables vars = new ExprLookup.Variables();
+        vars.add(new ExprLookup.Variable("String", 
org.apache.commons.lang3.StringUtils.class));
+        ExprLookup lookup = new ExprLookup(vars);
+        assertEquals("Wrong variables", vars, lookup.getVariables());
+    }
+
+    /**
+     * Tests that getVariables() returns a copy of the original variables.
+     */
+    @Test
+    public void testGetVariablesDefensiveCopy()
+    {
+        ExprLookup.Variables vars = new ExprLookup.Variables();
+        vars.add(new ExprLookup.Variable("String", 
org.apache.commons.lang3.StringUtils.class));
+        ExprLookup lookup = new ExprLookup(vars);
+        ExprLookup.Variables vars2 = lookup.getVariables();
+        vars2.add(new ExprLookup.Variable("System", "Class:java.lang.System"));
+        assertEquals("Modified variables", vars, lookup.getVariables());
+    }
+
     public static class Utility
     {
         String message;


Reply via email to