Author: bayard
Date: Tue Mar 24 07:18:36 2009
New Revision: 757676

URL: http://svn.apache.org/viewvc?rev=757676&view=rev
Log:
Applying sebb's patch from CODEC-72 - fixing the char[] API of 
Soundex/RefinedSoundex, which shouldn't be used externally as they are the 
defaults. He's replaced them with Strings for the external use and copying of 
inputted char[]s

Modified:
    
commons/proper/codec/trunk/src/java/org/apache/commons/codec/language/RefinedSoundex.java
    
commons/proper/codec/trunk/src/java/org/apache/commons/codec/language/Soundex.java
    
commons/proper/codec/trunk/src/test/org/apache/commons/codec/language/RefinedSoundexTest.java
    
commons/proper/codec/trunk/src/test/org/apache/commons/codec/language/SoundexTest.java

Modified: 
commons/proper/codec/trunk/src/java/org/apache/commons/codec/language/RefinedSoundex.java
URL: 
http://svn.apache.org/viewvc/commons/proper/codec/trunk/src/java/org/apache/commons/codec/language/RefinedSoundex.java?rev=757676&r1=757675&r2=757676&view=diff
==============================================================================
--- 
commons/proper/codec/trunk/src/java/org/apache/commons/codec/language/RefinedSoundex.java
 (original)
+++ 
commons/proper/codec/trunk/src/java/org/apache/commons/codec/language/RefinedSoundex.java
 Tue Mar 24 07:18:36 2009
@@ -30,12 +30,14 @@
  */
 public class RefinedSoundex implements StringEncoder {
 
+    public static final String US_ENGLISH_MAPPING_STRING = 
"01360240043788015936020505";
+
    /**
      * RefinedSoundex is *refined* for a number of reasons one being that the
      * mappings have been altered. This implementation contains default
      * mappings for US English.
      */
-    public static final char[] US_ENGLISH_MAPPING = 
"01360240043788015936020505".toCharArray();
+    private static final char[] US_ENGLISH_MAPPING = 
US_ENGLISH_MAPPING_STRING.toCharArray();
 
     /**
      * Every letter of the alphabet is "mapped" to a numerical value. This char
@@ -55,7 +57,7 @@
      * English mapping.
      */
     public RefinedSoundex() {
-        this(US_ENGLISH_MAPPING);
+        this.soundexMapping = US_ENGLISH_MAPPING;
     }
 
     /**
@@ -68,7 +70,21 @@
      *                  a given character
      */
     public RefinedSoundex(char[] mapping) {
-        this.soundexMapping = mapping;
+        this.soundexMapping = new char[mapping.length];
+        System.arraycopy(mapping, 0, this.soundexMapping, 0, mapping.length);
+    }
+
+    /**
+     * Creates a refined soundex instance using a custom mapping. This
+     * constructor can be used to customize the mapping, and/or possibly
+     * provide an internationalized mapping for a non-Western character set.
+     * 
+     * @param mapping
+     *                  Mapping string to use when finding the corresponding 
code for
+     *                  a given character
+     */
+    public RefinedSoundex(String mapping) {
+        this.soundexMapping = mapping.toCharArray();
     }
 
     /**

Modified: 
commons/proper/codec/trunk/src/java/org/apache/commons/codec/language/Soundex.java
URL: 
http://svn.apache.org/viewvc/commons/proper/codec/trunk/src/java/org/apache/commons/codec/language/Soundex.java?rev=757676&r1=757675&r2=757676&view=diff
==============================================================================
--- 
commons/proper/codec/trunk/src/java/org/apache/commons/codec/language/Soundex.java
 (original)
+++ 
commons/proper/codec/trunk/src/java/org/apache/commons/codec/language/Soundex.java
 Tue Mar 24 07:18:36 2009
@@ -47,7 +47,7 @@
      * 
      * @see Soundex#Soundex(char[])
      */
-    public static final char[] US_ENGLISH_MAPPING = 
US_ENGLISH_MAPPING_STRING.toCharArray();
+    private static final char[] US_ENGLISH_MAPPING = 
US_ENGLISH_MAPPING_STRING.toCharArray();
 
     /**
      * An instance of Soundex using the US_ENGLISH_MAPPING mapping.
@@ -100,7 +100,7 @@
      * @see Soundex#US_ENGLISH_MAPPING
      */
     public Soundex() {
-        this(US_ENGLISH_MAPPING);
+        this.soundexMapping = US_ENGLISH_MAPPING;
     }
 
     /**
@@ -114,7 +114,21 @@
      *                  Mapping array to use when finding the corresponding 
code for a given character
      */
     public Soundex(char[] mapping) {
-        this.soundexMapping= mapping;
+        this.soundexMapping = new char[mapping.length];
+        System.arraycopy(mapping, 0, this.soundexMapping, 0, mapping.length);
+    }
+
+    /**
+     * Creates a refined soundex instance using a custom mapping. This
+     * constructor can be used to customize the mapping, and/or possibly
+     * provide an internationalized mapping for a non-Western character set.
+     * 
+     * @param mapping
+     *                  Mapping string to use when finding the corresponding 
code for
+     *                  a given character
+     */
+    public Soundex(String mapping) {
+        this.soundexMapping = mapping.toCharArray();
     }
 
     /**

Modified: 
commons/proper/codec/trunk/src/test/org/apache/commons/codec/language/RefinedSoundexTest.java
URL: 
http://svn.apache.org/viewvc/commons/proper/codec/trunk/src/test/org/apache/commons/codec/language/RefinedSoundexTest.java?rev=757676&r1=757675&r2=757676&view=diff
==============================================================================
--- 
commons/proper/codec/trunk/src/test/org/apache/commons/codec/language/RefinedSoundexTest.java
 (original)
+++ 
commons/proper/codec/trunk/src/test/org/apache/commons/codec/language/RefinedSoundexTest.java
 Tue Mar 24 07:18:36 2009
@@ -113,4 +113,16 @@
         char code = this.getEncoder().getMappingCode('#');
         assertEquals("Code does not equals zero", 0, code);
     }
+    
+    public void testNewInstance() {
+        assertEquals("D6043", new RefinedSoundex().soundex("dogs"));
+    }
+    
+    public void testNewInstance2() {
+        assertEquals("D6043", new 
RefinedSoundex(RefinedSoundex.US_ENGLISH_MAPPING_STRING.toCharArray()).soundex("dogs"));
+    }
+    
+    public void testNewInstance3() {
+        assertEquals("D6043", new 
RefinedSoundex(RefinedSoundex.US_ENGLISH_MAPPING_STRING).soundex("dogs"));
+    }
 }

Modified: 
commons/proper/codec/trunk/src/test/org/apache/commons/codec/language/SoundexTest.java
URL: 
http://svn.apache.org/viewvc/commons/proper/codec/trunk/src/test/org/apache/commons/codec/language/SoundexTest.java?rev=757676&r1=757675&r2=757676&view=diff
==============================================================================
--- 
commons/proper/codec/trunk/src/test/org/apache/commons/codec/language/SoundexTest.java
 (original)
+++ 
commons/proper/codec/trunk/src/test/org/apache/commons/codec/language/SoundexTest.java
 Tue Mar 24 07:18:36 2009
@@ -382,7 +382,7 @@
      * https://issues.apache.org/jira/browse/CODEC-56
      */
     public void testUsEnglishStatic() {
-        assertEquals(Soundex.US_ENGLISH.soundex("Williams"), "W452");
+        assertEquals("W452", Soundex.US_ENGLISH.soundex("Williams"));
     }
 
     /**
@@ -390,6 +390,14 @@
      * https://issues.apache.org/jira/browse/CODEC-56
      */
     public void testNewInstance() {
-        assertEquals(new Soundex().soundex("Williams"), "W452");
+        assertEquals("W452", new Soundex().soundex("Williams"));
+    }
+    
+    public void testNewInstance2() {
+        assertEquals("W452", new 
Soundex(Soundex.US_ENGLISH_MAPPING_STRING.toCharArray()).soundex("Williams"));
+    }
+    
+    public void testNewInstance3() {
+        assertEquals("W452", new 
Soundex(Soundex.US_ENGLISH_MAPPING_STRING).soundex("Williams"));
     }
 }


Reply via email to