Author: scolebourne
Date: Tue Aug  8 16:28:45 2006
New Revision: 429881

URL: http://svn.apache.org/viewvc?rev=429881&view=rev
Log:
Create StrLookup by extraction from StrSubstitutor

Added:
    
jakarta/commons/proper/lang/trunk/src/java/org/apache/commons/lang/text/StrLookup.java
   (with props)
    
jakarta/commons/proper/lang/trunk/src/test/org/apache/commons/lang/text/StrLookupTest.java
   (with props)
Modified:
    
jakarta/commons/proper/lang/trunk/src/java/org/apache/commons/lang/text/StrSubstitutor.java
    
jakarta/commons/proper/lang/trunk/src/test/org/apache/commons/lang/text/StrSubstitutorTest.java
    
jakarta/commons/proper/lang/trunk/src/test/org/apache/commons/lang/text/TextTestSuite.java

Added: 
jakarta/commons/proper/lang/trunk/src/java/org/apache/commons/lang/text/StrLookup.java
URL: 
http://svn.apache.org/viewvc/jakarta/commons/proper/lang/trunk/src/java/org/apache/commons/lang/text/StrLookup.java?rev=429881&view=auto
==============================================================================
--- 
jakarta/commons/proper/lang/trunk/src/java/org/apache/commons/lang/text/StrLookup.java
 (added)
+++ 
jakarta/commons/proper/lang/trunk/src/java/org/apache/commons/lang/text/StrLookup.java
 Tue Aug  8 16:28:45 2006
@@ -0,0 +1,160 @@
+/*
+ * Copyright 2005-2006 The Apache Software Foundation.
+ * 
+ * Licensed 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.commons.lang.text;
+
+import java.util.Map;
+
+/**
+ * Lookup a String key to a String value.
+ * <p>
+ * This class represents the simplest form of a string to string map.
+ * It has a benefit over a map in that it can create the result on
+ * demand based on the key.
+ * <p>
+ * This class comes complete with various factory methods.
+ * If these do not suffice, you can subclass and implement your own matcher.
+ * <p>
+ * For example, it would be possible to implement a lookup that used the
+ * key as a primary key, and looked up the value on demand from the database
+ *
+ * @author Stephen Colebourne
+ * @since 2.2
+ * @version $Id: $
+ */
+public abstract class StrLookup {
+
+    /**
+     * Lookup that always returns null.
+     */
+    private static final StrLookup NONE_LOOKUP;
+    /**
+     * Lookup that uses System properties.
+     */
+    private static final StrLookup SYSTEM_PROPERTIES_LOOKUP;
+    static {
+        NONE_LOOKUP = new MapStrLookup(null);
+        StrLookup lookup = null;
+        try {
+            lookup = new MapStrLookup(System.getProperties());
+        } catch (SecurityException ex) {
+            lookup = NONE_LOOKUP;
+        }
+        SYSTEM_PROPERTIES_LOOKUP = lookup;
+    }
+
+    //-----------------------------------------------------------------------
+    /**
+     * Returns a lookup which always returns null.
+     *
+     * @return a lookup that always returns null, not null
+     */
+    public static StrLookup noneLookup() {
+        return NONE_LOOKUP;
+    }
+
+    /**
+     * Returns a lookup which uses [EMAIL PROTECTED] System#getProperties() 
System properties}
+     * to lookup the key to value.
+     * <p>
+     * If a security manager blocked access to system properties, then null 
will
+     * be returned from every lookup.
+     * <p>
+     * If a null key is used, this lookup will throw a NullPointerException.
+     *
+     * @return a lookup using system properties, not null
+     */
+    public static StrLookup systemPropertiesLookup() {
+        return SYSTEM_PROPERTIES_LOOKUP;
+    }
+
+    /**
+     * Returns a lookup which looks up values using a map.
+     * <p>
+     * If the map is null, then null will be returned from every lookup.
+     * The map result object is converted to a string using toString().
+     *
+     * @param map  the map of keys to values, may be null
+     * @return a lookup using the map, not null
+     */
+    public static StrLookup mapLookup(Map map) {
+        return new MapStrLookup(map);
+    }
+
+    //-----------------------------------------------------------------------
+    /**
+     * Constructor.
+     */
+    protected StrLookup() {
+        super();
+    }
+
+    /**
+     * Looks up a String key to a String value.
+     * <p>
+     * The internal implementation may use any mechanism to return the value.
+     * The simplest implementation is to use a Map. However, virtually any
+     * implementation is possible.
+     * <p>
+     * For example, it would be possible to implement a lookup that used the
+     * key as a primary key, and looked up the value on demand from the 
database
+     * Or, a numeric based implementation could be created that treats the key
+     * as an integer, increments the value and return the result as a string -
+     * converting 1 to 2, 15 to 16 etc.
+     *
+     * @param key  the key to be looked up, may be null
+     * @return the matching value, null if no match
+     */
+    public abstract String lookup(String key);
+
+    //-----------------------------------------------------------------------
+    /**
+     * Lookup imnplementation that uses a Map.
+     */
+    static class MapStrLookup extends StrLookup {
+
+        /** Map keys are variable names and value. */
+        private final Map map;
+
+        /**
+         * Creates a new instance backed by a Map.
+         *
+         * @param map  the map of keys to values, may be null
+         */
+        MapStrLookup(Map map) {
+            this.map = map;
+        }
+
+        /**
+         * Looks up a String key to a String value using the map.
+         * <p>
+         * If the map is null, then null is returned.
+         * The map result object is converted to a string using toString().
+         *
+         * @param key  the key to be looked up, may be null
+         * @return the matching value, null if no match
+         */
+        public String lookup(String key) {
+            if (map == null) {
+                return null;
+            }
+            Object obj = map.get(key);
+            if (obj == null) {
+                return null;
+            }
+            return obj.toString();
+        }
+    }
+}

Propchange: 
jakarta/commons/proper/lang/trunk/src/java/org/apache/commons/lang/text/StrLookup.java
------------------------------------------------------------------------------
    svn:eol-style = native

Propchange: 
jakarta/commons/proper/lang/trunk/src/java/org/apache/commons/lang/text/StrLookup.java
------------------------------------------------------------------------------
    svn:keywords = author date id revision

Modified: 
jakarta/commons/proper/lang/trunk/src/java/org/apache/commons/lang/text/StrSubstitutor.java
URL: 
http://svn.apache.org/viewvc/jakarta/commons/proper/lang/trunk/src/java/org/apache/commons/lang/text/StrSubstitutor.java?rev=429881&r1=429880&r2=429881&view=diff
==============================================================================
--- 
jakarta/commons/proper/lang/trunk/src/java/org/apache/commons/lang/text/StrSubstitutor.java
 (original)
+++ 
jakarta/commons/proper/lang/trunk/src/java/org/apache/commons/lang/text/StrSubstitutor.java
 Tue Aug  8 16:28:45 2006
@@ -13,7 +13,6 @@
  * See the License for the specific language governing permissions and
  * limitations under the License.
  */
-
 package org.apache.commons.lang.text;
 
 import java.util.ArrayList;
@@ -119,7 +118,7 @@
     /**
      * Variable resolution is delegated to an implementor of VariableResolver.
      */
-    private VariableResolver variableResolver;
+    private StrLookup variableResolver;
 
     //-----------------------------------------------------------------------
     /**
@@ -158,7 +157,7 @@
      * @return the result of the replace operation
      */
     public static String replaceSystemProperties(Object source) {
-        return new StrSubstitutor(System.getProperties()).replace(source);
+        return new 
StrSubstitutor(StrLookup.systemPropertiesLookup()).replace(source);
     }
 
     //-----------------------------------------------------------------------
@@ -167,7 +166,7 @@
      * and the escaping character.
      */
     public StrSubstitutor() {
-        this((VariableResolver) null, DEFAULT_PREFIX, DEFAULT_SUFFIX, 
DEFAULT_ESCAPE);
+        this((StrLookup) null, DEFAULT_PREFIX, DEFAULT_SUFFIX, DEFAULT_ESCAPE);
     }
 
     /**
@@ -177,7 +176,7 @@
      * @param valueMap  the map with the variables' values, may be null
      */
     public StrSubstitutor(Map valueMap) {
-        this(new MapVariableResolver(valueMap), DEFAULT_PREFIX, 
DEFAULT_SUFFIX, DEFAULT_ESCAPE);
+        this(StrLookup.mapLookup(valueMap), DEFAULT_PREFIX, DEFAULT_SUFFIX, 
DEFAULT_ESCAPE);
     }
 
     /**
@@ -189,7 +188,7 @@
      * @throws IllegalArgumentException if the prefix or suffix is null
      */
     public StrSubstitutor(Map valueMap, String prefix, String suffix) {
-        this(valueMap, prefix, suffix, DEFAULT_ESCAPE);
+        this(StrLookup.mapLookup(valueMap), prefix, suffix, DEFAULT_ESCAPE);
     }
 
     /**
@@ -202,7 +201,16 @@
      * @throws IllegalArgumentException if the prefix or suffix is null
      */
     public StrSubstitutor(Map valueMap, String prefix, String suffix, char 
escape) {
-        this(new MapVariableResolver(valueMap), prefix, suffix, escape);
+        this(StrLookup.mapLookup(valueMap), prefix, suffix, escape);
+    }
+
+    /**
+     * Creates a new instance and initializes it.
+     *
+     * @param variableResolver  the variable resolver, may be null
+     */
+    public StrSubstitutor(StrLookup variableResolver) {
+        this(variableResolver, DEFAULT_PREFIX, DEFAULT_SUFFIX, DEFAULT_ESCAPE);
     }
 
     /**
@@ -214,7 +222,7 @@
      * @param escape  the escape character
      * @throws IllegalArgumentException if the prefix or suffix is null
      */
-    public StrSubstitutor(VariableResolver variableResolver, String prefix, 
String suffix, char escape) {
+    public StrSubstitutor(StrLookup variableResolver, String prefix, String 
suffix, char escape) {
         this.setVariableResolver(variableResolver);
         this.setVariablePrefix(prefix);
         this.setVariableSuffix(suffix);
@@ -225,15 +233,16 @@
      * Creates a new instance and initializes it.
      *
      * @param variableResolver  the variable resolver, may be null
-     * @param prefix  the prefix for variables, not null
-     * @param suffix  the suffix for variables, not null
+     * @param prefixMatcher  the prefix for variables, not null
+     * @param suffixMatcher  the suffix for variables, not null
      * @param escape  the escape character
      * @throws IllegalArgumentException if the prefix or suffix is null
      */
-    public StrSubstitutor(VariableResolver variableResolver, StrMatcher 
prefix, StrMatcher suffix, char escape) {
+    public StrSubstitutor(
+            StrLookup variableResolver, StrMatcher prefixMatcher, StrMatcher 
suffixMatcher, char escape) {
         this.setVariableResolver(variableResolver);
-        this.setVariablePrefixMatcher(prefix);
-        this.setVariableSuffixMatcher(suffix);
+        this.setVariablePrefixMatcher(prefixMatcher);
+        this.setVariableSuffixMatcher(suffixMatcher);
         this.setEscapeChar(escape);
     }
 
@@ -308,7 +317,7 @@
         }
         StrBuilder buf = new StrBuilder(length).append(source, offset, length);
         if (substitute(buf, 0, length) == false) {
-            return source.substring(offset, length);
+            return source.substring(offset, offset + length);
         }
         return buf.toString();
     }
@@ -510,11 +519,11 @@
      * @return the variable's value or <b>null</b> if the variable is unknown
      */
     protected String resolveVariable(String variableName, StrBuilder buf, int 
startPos, int endPos) {
-        VariableResolver lookup = getVariableResolver();
-        if (lookup == null) {
+        StrLookup resolver = getVariableResolver();
+        if (resolver == null) {
             return null;
         }
-        return lookup.resolveVariable(variableName);
+        return resolver.lookup(variableName);
     }
 
     // Escape
@@ -672,73 +681,21 @@
     // Resolver
     //-----------------------------------------------------------------------
     /**
-     * Gets the VariableResolver
+     * Gets the VariableResolver that is used to lookup variables.
      *
      * @return the VariableResolver
      */
-    public VariableResolver getVariableResolver() {
+    public StrLookup getVariableResolver() {
         return this.variableResolver;
     }
 
     /**
-     * Sets the VariableResolver
+     * Sets the VariableResolver that is used to lookup variables.
      *
      * @param variableResolver  the VariableResolver
      */
-    public void setVariableResolver(VariableResolver variableResolver) {
+    public void setVariableResolver(StrLookup variableResolver) {
         this.variableResolver = variableResolver;
-    }
-
-    //-----------------------------------------------------------------------
-    /**
-     * Looks up a string value by name.
-     * This represents the simplest form of a map.
-     */
-    public static interface VariableResolver {
-        /**
-         * Resolves the variable name to a value.
-         *
-         * @param varName  the name to be looked up, may be null
-         * @return the matching value, null if no match
-         */
-        String resolveVariable(String varName);
-    }
-
-    //-----------------------------------------------------------------------
-    /**
-     * Looks up a string value by name using a [EMAIL PROTECTED] Map}.
-     */
-    static class MapVariableResolver implements VariableResolver {
-        /**
-         * Map keys are variable names and value
-         */
-        Map map;
-
-        /**
-         * Creates a new resolver backed by a Map.
-         *
-         * @param map  the variable names and values
-         */
-        MapVariableResolver(Map map) {
-            this.map = map;
-        }
-
-        /**
-         * Resolves the given variable name with the backing Map.
-         *
-         * @param varName  a variable name
-         * @return a value or null if the variable name is not in Map
-         */
-        public String resolveVariable(String varName) {
-            if (map == null) {
-                return null;
-            }
-            Object obj = map.get(varName);
-            if (obj == null) {
-                return null;
-            }
-            return obj.toString();
-        }
     }
 
 }

Added: 
jakarta/commons/proper/lang/trunk/src/test/org/apache/commons/lang/text/StrLookupTest.java
URL: 
http://svn.apache.org/viewvc/jakarta/commons/proper/lang/trunk/src/test/org/apache/commons/lang/text/StrLookupTest.java?rev=429881&view=auto
==============================================================================
--- 
jakarta/commons/proper/lang/trunk/src/test/org/apache/commons/lang/text/StrLookupTest.java
 (added)
+++ 
jakarta/commons/proper/lang/trunk/src/test/org/apache/commons/lang/text/StrLookupTest.java
 Tue Aug  8 16:28:45 2006
@@ -0,0 +1,99 @@
+/*
+ * Copyright 2005-2006 The Apache Software Foundation.
+ * 
+ * Licensed 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.commons.lang.text;
+
+import java.util.HashMap;
+import java.util.Map;
+
+import junit.framework.Test;
+import junit.framework.TestCase;
+import junit.framework.TestSuite;
+import junit.textui.TestRunner;
+
+/**
+ * Test class for StrLookup.
+ *
+ * @version $Id: StrSubstitutorTest.java 231316 2005-08-10 20:36:26Z ggregory $
+ */
+public class StrLookupTest extends TestCase {
+
+    /**
+     * Main method.
+     * 
+     * @param args  command line arguments, ignored
+     */
+    public static void main(String[] args) {
+        TestRunner.run(suite());
+    }
+
+    /**
+     * Return a new test suite containing this test case.
+     * 
+     * @return a new test suite containing this test case
+     */
+    public static Test suite() {
+        TestSuite suite = new TestSuite(StrLookupTest.class);
+        suite.setName("StrLookup Tests");
+        return suite;
+    }
+
+    protected void setUp() throws Exception {
+        super.setUp();
+    }
+
+    protected void tearDown() throws Exception {
+        super.tearDown();
+    }
+
+    //-----------------------------------------------------------------------
+    public void testNoneLookup() {
+        assertEquals(null, StrLookup.noneLookup().lookup(null));
+        assertEquals(null, StrLookup.noneLookup().lookup(""));
+        assertEquals(null, StrLookup.noneLookup().lookup("any"));
+    }
+
+    public void testSystemProperiesLookup() {
+        assertEquals(System.getProperty("os.name"), 
StrLookup.systemPropertiesLookup().lookup("os.name"));
+        assertEquals(null, StrLookup.systemPropertiesLookup().lookup(""));
+        assertEquals(null, StrLookup.systemPropertiesLookup().lookup("other"));
+        try {
+            StrLookup.systemPropertiesLookup().lookup(null);
+            fail();
+        } catch (NullPointerException ex) {
+            // expected
+        }
+    }
+
+    public void testMapLookup() {
+        Map map = new HashMap();
+        map.put("key", "value");
+        map.put("number", new Integer(2));
+        assertEquals("value", StrLookup.mapLookup(map).lookup("key"));
+        assertEquals("2", StrLookup.mapLookup(map).lookup("number"));
+        assertEquals(null, StrLookup.mapLookup(map).lookup(null));
+        assertEquals(null, StrLookup.mapLookup(map).lookup(""));
+        assertEquals(null, StrLookup.mapLookup(map).lookup("other"));
+    }
+
+    public void testMapLookup_nullMap() {
+        Map map = null;
+        assertEquals(null, StrLookup.mapLookup(map).lookup(null));
+        assertEquals(null, StrLookup.mapLookup(map).lookup(""));
+        assertEquals(null, StrLookup.mapLookup(map).lookup("any"));
+    }
+
+}

Propchange: 
jakarta/commons/proper/lang/trunk/src/test/org/apache/commons/lang/text/StrLookupTest.java
------------------------------------------------------------------------------
    svn:eol-style = native

Propchange: 
jakarta/commons/proper/lang/trunk/src/test/org/apache/commons/lang/text/StrLookupTest.java
------------------------------------------------------------------------------
    svn:keywords = author date id revision

Modified: 
jakarta/commons/proper/lang/trunk/src/test/org/apache/commons/lang/text/StrSubstitutorTest.java
URL: 
http://svn.apache.org/viewvc/jakarta/commons/proper/lang/trunk/src/test/org/apache/commons/lang/text/StrSubstitutorTest.java?rev=429881&r1=429880&r2=429881&view=diff
==============================================================================
--- 
jakarta/commons/proper/lang/trunk/src/test/org/apache/commons/lang/text/StrSubstitutorTest.java
 (original)
+++ 
jakarta/commons/proper/lang/trunk/src/test/org/apache/commons/lang/text/StrSubstitutorTest.java
 Tue Aug  8 16:28:45 2006
@@ -67,95 +67,6 @@
     }
 
     //-----------------------------------------------------------------------
-//    /**
-//     * Tests escaping variable references.
-//     */
-//    public void testEscape() {
-//        assertEquals("${", this.getFormat().replace("$${"));
-//        assertEquals("${animal}", this.getFormat().replace("$${animal}"));
-//        this.getValueMap().put("var_name", "x");
-//        assertEquals("Many $$$$${target} $s", this.getFormat().replace("Many 
$$$$$${target} $s"));
-//        assertEquals("Variable ${x} must be used!", 
this.getFormat().replace("Variable $${${var_name}} must be used!"));
-//    }
-//
-//    /**
-//     * Tests creating new <code>VariableFormat</code> objects.
-//     */
-//    public void testInitialize() {
-//        assertNotNull(this.getFormat().getVariableResolver());
-//        assertEquals(StrSubstitutor.DEFAULT_PREFIX, 
this.getFormat().getVariablePrefixMatcher());
-//        assertEquals(StrSubstitutor.DEFAULT_SUFFIX, 
this.getFormat().getVariableSuffixMatcher());
-//        assertEquals(StrSubstitutor.DEFAULT_ESCAPE, 
this.getFormat().getEscapeChar());
-//
-//        format = new StrSubstitutor(values, "<<", ">>", '\\');
-//        assertEquals("<<", this.getFormat().getVariablePrefixMatcher());
-//        assertEquals(">>", this.getFormat().getVariableSuffixMatcher());
-//        assertEquals('\\', this.getFormat().getEscapeChar());
-//
-//        // new StrSubstitutor(null) should be OK IMO
-//        // Gary Gregory - July 14 2005
-//        // try {
-//        // format = new StrSubstitutor(null);
-//        // fail("Could create format object with null map!");
-//        // } catch (IllegalArgumentException iex) {
-//        // // ok
-//        // }
-//
-//        try {
-//            format = new StrSubstitutor(values, "${", null);
-//            fail("Could create format object with undefined suffix!");
-//        } catch (IllegalArgumentException iex) {
-//            // ok
-//        }
-//
-//        try {
-//            format = new StrSubstitutor(values, null, "]");
-//            fail("Could create format object with undefined prefix!");
-//        } catch (IllegalArgumentException iex) {
-//            // ok
-//        }
-//    }
-//
-//    /**
-//     * Tests chaning variable prefix and suffix and the escaping character.
-//     */
-//    public void testNonDefaultTokens() {
-//        format = new StrSubstitutor(values, "<<", ">>", '\\');
-//        assertEquals("The quick brown fox jumps over the lazy dog.", format
-//                .replace("The <<animal>> jumps over the <<target>>."));
-//        assertEquals("The quick brown fox jumps over the <<target>>.", format
-//                .replace("The <<animal>> jumps over the \\<<target>>."));
-//    }
-//
-//    /**
-//     * Tests invoking the static convenience methods.
-//     */
-//    public void testNonInstanceMethods() {
-//        assertEquals("The quick brown fox jumps over the lazy dog.",
-//                StrSubstitutor.replace(REPLACE_TEMPLATE, values));
-//        values.put(KEY_ANIMAL, "cow");
-//        values.put(KEY_TARGET, "moon");
-//        assertEquals("The cow jumps over the moon.",
-//                StrSubstitutor.replace("The &animal; jumps over the 
&target;.", values, "&", ";"));
-//    }
-//
-//    public void testNoResolver() throws Exception {
-//        this.testNoResolver(new StrSubstitutor());
-//        this.testNoResolver(new StrSubstitutor(null));
-//    }
-//
-//    void testNoResolver(StrSubstitutor formatter) throws Exception {
-//        formatter.setVariableResolver(null);
-//        this.validateNoReplace(formatter);
-//    }
-//
-//    public void testNullMap() throws Exception {
-//        StrSubstitutor formatter = new StrSubstitutor(null);
-//        validateNoReplace(formatter);
-//    }
-//
-
-    //-----------------------------------------------------------------------
     /**
      * Tests simple key replace.
      */
@@ -353,6 +264,14 @@
         doTestNoReplace("${${ }}");
     }
 
+    /**
+     * Tests simple key replace.
+     */
+    public void testReplacePartialString_noReplace() {
+        StrSubstitutor sub = new StrSubstitutor();
+        assertEquals("${animal} jumps", sub.replace("The ${animal} jumps over 
the ${target}.", 4, 15));
+    }
+
     //-----------------------------------------------------------------------
     /**
      * Tests protected.
@@ -376,6 +295,108 @@
 
     //-----------------------------------------------------------------------
     /**
+     * Tests constructor.
+     */
+    public void testConstructorNoArgs() {
+        StrSubstitutor sub = new StrSubstitutor();
+        assertEquals("Hi ${name}", sub.replace("Hi ${name}"));
+    }
+
+    /**
+     * Tests constructor.
+     */
+    public void testConstructorMapPrefixSuffix() {
+        Map map = new HashMap();
+        map.put("name", "commons");
+        StrSubstitutor sub = new StrSubstitutor(map, "<", ">");
+        assertEquals("Hi < commons", sub.replace("Hi $< <name>"));
+    }
+
+    /**
+     * Tests constructor.
+     */
+    public void testConstructorMapFull() {
+        Map map = new HashMap();
+        map.put("name", "commons");
+        StrSubstitutor sub = new StrSubstitutor(map, "<", ">", '!');
+        assertEquals("Hi < commons", sub.replace("Hi !< <name>"));
+    }
+
+    //-----------------------------------------------------------------------
+    /**
+     * Tests get set.
+     */
+    public void testGetSetEscape() {
+        StrSubstitutor sub = new StrSubstitutor();
+        assertEquals('$', sub.getEscapeChar());
+        sub.setEscapeChar('<');
+        assertEquals('<', sub.getEscapeChar());
+    }
+
+    /**
+     * Tests get set.
+     */
+    public void testGetSetPrefix() {
+        StrSubstitutor sub = new StrSubstitutor();
+        assertEquals(true, sub.getVariablePrefixMatcher() instanceof 
StrMatcher.StringMatcher);
+        sub.setVariablePrefix('<');
+        assertEquals(true, sub.getVariablePrefixMatcher() instanceof 
StrMatcher.CharMatcher);
+        
+        sub.setVariablePrefix("<<");
+        assertEquals(true, sub.getVariablePrefixMatcher() instanceof 
StrMatcher.StringMatcher);
+        try {
+            sub.setVariablePrefix((String) null);
+            fail();
+        } catch (IllegalArgumentException ex) {
+            // expected
+        }
+        assertEquals(true, sub.getVariablePrefixMatcher() instanceof 
StrMatcher.StringMatcher);
+        
+        StrMatcher matcher = StrMatcher.commaMatcher();
+        sub.setVariablePrefixMatcher(matcher);
+        assertSame(matcher, sub.getVariablePrefixMatcher());
+        try {
+            sub.setVariablePrefixMatcher((StrMatcher) null);
+            fail();
+        } catch (IllegalArgumentException ex) {
+            // expected
+        }
+        assertSame(matcher, sub.getVariablePrefixMatcher());
+    }
+
+    /**
+     * Tests get set.
+     */
+    public void testGetSetSuffix() {
+        StrSubstitutor sub = new StrSubstitutor();
+        assertEquals(true, sub.getVariableSuffixMatcher() instanceof 
StrMatcher.StringMatcher);
+        sub.setVariableSuffix('<');
+        assertEquals(true, sub.getVariableSuffixMatcher() instanceof 
StrMatcher.CharMatcher);
+        
+        sub.setVariableSuffix("<<");
+        assertEquals(true, sub.getVariableSuffixMatcher() instanceof 
StrMatcher.StringMatcher);
+        try {
+            sub.setVariableSuffix((String) null);
+            fail();
+        } catch (IllegalArgumentException ex) {
+            // expected
+        }
+        assertEquals(true, sub.getVariableSuffixMatcher() instanceof 
StrMatcher.StringMatcher);
+        
+        StrMatcher matcher = StrMatcher.commaMatcher();
+        sub.setVariableSuffixMatcher(matcher);
+        assertSame(matcher, sub.getVariableSuffixMatcher());
+        try {
+            sub.setVariableSuffixMatcher((StrMatcher) null);
+            fail();
+        } catch (IllegalArgumentException ex) {
+            // expected
+        }
+        assertSame(matcher, sub.getVariableSuffixMatcher());
+    }
+
+    //-----------------------------------------------------------------------
+    /**
      * Tests static.
      */
     public void testStaticReplace() {
@@ -443,9 +464,12 @@
         assertEquals(replaceTemplate, sub.replace(replaceTemplate));
         
         if (replaceTemplate == null) {
+            assertEquals(null, sub.replace((String) null, 0, 100));
             assertEquals(null, sub.replace((char[]) null));
+            assertEquals(null, sub.replace((char[]) null, 0, 100));
             assertEquals(null, sub.replace((Object) null));
             assertEquals(false, sub.replace((StrBuilder) null));
+            assertEquals(false, sub.replace((StrBuilder) null, 0, 100));
         } else {
             StrBuilder bld = new StrBuilder(replaceTemplate);
             assertEquals(false, sub.replace(bld));

Modified: 
jakarta/commons/proper/lang/trunk/src/test/org/apache/commons/lang/text/TextTestSuite.java
URL: 
http://svn.apache.org/viewvc/jakarta/commons/proper/lang/trunk/src/test/org/apache/commons/lang/text/TextTestSuite.java?rev=429881&r1=429880&r2=429881&view=diff
==============================================================================
--- 
jakarta/commons/proper/lang/trunk/src/test/org/apache/commons/lang/text/TextTestSuite.java
 (original)
+++ 
jakarta/commons/proper/lang/trunk/src/test/org/apache/commons/lang/text/TextTestSuite.java
 Tue Aug  8 16:28:45 2006
@@ -51,7 +51,9 @@
         suite.addTest(CompositeFormatTest.suite());
         suite.addTest(StrBuilderTest.suite());
         suite.addTest(StrBuilderAppendInsertTest.suite());
+        suite.addTest(StrLookupTest.suite());
         suite.addTest(StrMatcherTest.suite());
+        suite.addTest(StrSubstitutorTest.suite());
         suite.addTest(StrTokenizerTest.suite());
         suite.addTestSuite(VariableFormatterTest.class);
         return suite;



---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]

Reply via email to