You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@commons.apache.org by ba...@apache.org on 2008/04/27 02:35:59 UTC

svn commit: r651874 - in /commons/proper/codec/trunk/src: java/org/apache/commons/codec/language/ test/org/apache/commons/codec/

Author: bayard
Date: Sat Apr 26 17:35:56 2008
New Revision: 651874

URL: http://svn.apache.org/viewvc?rev=651874&view=rev
Log:
Applying Benjamin Bentmann's patch from CODEC-65, which changes the various encoders to use a locale when lowercasing. The encoders all assume the English locale, so when running in non English locales the default toLowerCase sometimes does not work as the encoder expects. 

Modified:
    commons/proper/codec/trunk/src/java/org/apache/commons/codec/language/Caverphone.java
    commons/proper/codec/trunk/src/java/org/apache/commons/codec/language/DoubleMetaphone.java
    commons/proper/codec/trunk/src/java/org/apache/commons/codec/language/Metaphone.java
    commons/proper/codec/trunk/src/java/org/apache/commons/codec/language/SoundexUtils.java
    commons/proper/codec/trunk/src/test/org/apache/commons/codec/StringEncoderAbstractTest.java

Modified: commons/proper/codec/trunk/src/java/org/apache/commons/codec/language/Caverphone.java
URL: http://svn.apache.org/viewvc/commons/proper/codec/trunk/src/java/org/apache/commons/codec/language/Caverphone.java?rev=651874&r1=651873&r2=651874&view=diff
==============================================================================
--- commons/proper/codec/trunk/src/java/org/apache/commons/codec/language/Caverphone.java (original)
+++ commons/proper/codec/trunk/src/java/org/apache/commons/codec/language/Caverphone.java Sat Apr 26 17:35:56 2008
@@ -56,7 +56,7 @@
         }
 
         // 1. Convert to lowercase
-        txt = txt.toLowerCase();
+        txt = txt.toLowerCase(java.util.Locale.ENGLISH);
 
         // 2. Remove anything not A-Z
         txt = txt.replaceAll("[^a-z]", "");

Modified: commons/proper/codec/trunk/src/java/org/apache/commons/codec/language/DoubleMetaphone.java
URL: http://svn.apache.org/viewvc/commons/proper/codec/trunk/src/java/org/apache/commons/codec/language/DoubleMetaphone.java?rev=651874&r1=651873&r2=651874&view=diff
==============================================================================
--- commons/proper/codec/trunk/src/java/org/apache/commons/codec/language/DoubleMetaphone.java (original)
+++ commons/proper/codec/trunk/src/java/org/apache/commons/codec/language/DoubleMetaphone.java Sat Apr 26 17:35:56 2008
@@ -923,7 +923,7 @@
 		if (input.length() == 0) {
 			return null;
 		}
-		return input.toUpperCase();
+		return input.toUpperCase(java.util.Locale.ENGLISH);
 	}
 
     /**

Modified: commons/proper/codec/trunk/src/java/org/apache/commons/codec/language/Metaphone.java
URL: http://svn.apache.org/viewvc/commons/proper/codec/trunk/src/java/org/apache/commons/codec/language/Metaphone.java?rev=651874&r1=651873&r2=651874&view=diff
==============================================================================
--- commons/proper/codec/trunk/src/java/org/apache/commons/codec/language/Metaphone.java (original)
+++ commons/proper/codec/trunk/src/java/org/apache/commons/codec/language/Metaphone.java Sat Apr 26 17:35:56 2008
@@ -85,10 +85,10 @@
         }
         // single character is itself
         if (txt.length() == 1) {
-            return txt.toUpperCase() ;
+            return txt.toUpperCase(java.util.Locale.ENGLISH) ;
         }
       
-        char[] inwd = txt.toUpperCase().toCharArray() ;
+        char[] inwd = txt.toUpperCase(java.util.Locale.ENGLISH).toCharArray() ;
       
         StringBuffer local = new StringBuffer(40); // manipulate
         StringBuffer code = new StringBuffer(10) ; //   output

Modified: commons/proper/codec/trunk/src/java/org/apache/commons/codec/language/SoundexUtils.java
URL: http://svn.apache.org/viewvc/commons/proper/codec/trunk/src/java/org/apache/commons/codec/language/SoundexUtils.java?rev=651874&r1=651873&r2=651874&view=diff
==============================================================================
--- commons/proper/codec/trunk/src/java/org/apache/commons/codec/language/SoundexUtils.java (original)
+++ commons/proper/codec/trunk/src/java/org/apache/commons/codec/language/SoundexUtils.java Sat Apr 26 17:35:56 2008
@@ -50,9 +50,9 @@
             }
         }
         if (count == len) {
-            return str.toUpperCase();
+            return str.toUpperCase(java.util.Locale.ENGLISH);
         }
-        return new String(chars, 0, count).toUpperCase();
+        return new String(chars, 0, count).toUpperCase(java.util.Locale.ENGLISH);
     }
 
     /**

Modified: commons/proper/codec/trunk/src/test/org/apache/commons/codec/StringEncoderAbstractTest.java
URL: http://svn.apache.org/viewvc/commons/proper/codec/trunk/src/test/org/apache/commons/codec/StringEncoderAbstractTest.java?rev=651874&r1=651873&r2=651874&view=diff
==============================================================================
--- commons/proper/codec/trunk/src/test/org/apache/commons/codec/StringEncoderAbstractTest.java (original)
+++ commons/proper/codec/trunk/src/test/org/apache/commons/codec/StringEncoderAbstractTest.java Sat Apr 26 17:35:56 2008
@@ -17,6 +17,8 @@
 
 package org.apache.commons.codec;
 
+import java.util.Locale;
+
 import junit.framework.TestCase;
 
 /**
@@ -63,4 +65,36 @@
         assertTrue( "An exception was not thrown when we tried to encode " +
                     "a Float object", exceptionThrown );
     }
+
+    public void testLocaleIndependence() throws Exception {
+        StringEncoder encoder = makeEncoder();
+
+        String[] data = { "I", "i", };
+
+        Locale orig = Locale.getDefault();
+        Locale[] locales = { Locale.ENGLISH, new Locale("tr"), Locale.getDefault() };
+
+        try {
+            for (int i = 0; i < data.length; i++) {
+                String ref = null;
+                for (int j = 0; j < locales.length; j++) {
+                    Locale.setDefault(locales[j]);
+                    if (j <= 0) {
+                        ref = encoder.encode(data[i]);
+                    } else {
+                        String cur = null;
+                        try {
+                            cur = encoder.encode(data[i]);
+                        } catch (Exception e) {
+                            fail(Locale.getDefault().toString() + ": " + e.getMessage());
+                        }
+                        assertEquals(Locale.getDefault().toString() + ": ", ref, cur);
+                    }
+                }
+            }
+        } finally {
+            Locale.setDefault(orig);
+        }
+    }
+
 }