Return-Path: X-Original-To: apmail-felix-commits-archive@www.apache.org Delivered-To: apmail-felix-commits-archive@www.apache.org Received: from mail.apache.org (hermes.apache.org [140.211.11.3]) by minotaur.apache.org (Postfix) with SMTP id 3C24E10B26 for ; Mon, 27 Jan 2014 08:08:27 +0000 (UTC) Received: (qmail 67908 invoked by uid 500); 27 Jan 2014 08:08:26 -0000 Delivered-To: apmail-felix-commits-archive@felix.apache.org Received: (qmail 67803 invoked by uid 500); 27 Jan 2014 08:08:19 -0000 Mailing-List: contact commits-help@felix.apache.org; run by ezmlm Precedence: bulk List-Help: List-Unsubscribe: List-Post: List-Id: Reply-To: dev@felix.apache.org Delivered-To: mailing list commits@felix.apache.org Received: (qmail 67794 invoked by uid 99); 27 Jan 2014 08:08:15 -0000 Received: from athena.apache.org (HELO athena.apache.org) (140.211.11.136) by apache.org (qpsmtpd/0.29) with ESMTP; Mon, 27 Jan 2014 08:08:15 +0000 X-ASF-Spam-Status: No, hits=-2000.0 required=5.0 tests=ALL_TRUSTED X-Spam-Check-By: apache.org Received: from [140.211.11.4] (HELO eris.apache.org) (140.211.11.4) by apache.org (qpsmtpd/0.29) with ESMTP; Mon, 27 Jan 2014 08:08:13 +0000 Received: from eris.apache.org (localhost [127.0.0.1]) by eris.apache.org (Postfix) with ESMTP id 8C6C02388860; Mon, 27 Jan 2014 08:07:53 +0000 (UTC) Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit Subject: svn commit: r1561599 - in /felix/trunk/configadmin/src: main/java/org/apache/felix/cm/impl/CaseInsensitiveDictionary.java test/java/org/apache/felix/cm/impl/CaseInsensitiveDictionaryTest.java Date: Mon, 27 Jan 2014 08:07:53 -0000 To: commits@felix.apache.org From: fmeschbe@apache.org X-Mailer: svnmailer-1.0.9 Message-Id: <20140127080753.8C6C02388860@eris.apache.org> X-Virus-Checked: Checked by ClamAV on apache.org Author: fmeschbe Date: Mon Jan 27 08:07:53 2014 New Revision: 1561599 URL: http://svn.apache.org/r1561599 Log: FELIX-4408 Fix lower casing in special case locales (such as Turkish) where some characters have special case upper and lower case characters. (applied slightly modified patch by Tobias Bocanegra, thanks alot) Modified: felix/trunk/configadmin/src/main/java/org/apache/felix/cm/impl/CaseInsensitiveDictionary.java felix/trunk/configadmin/src/test/java/org/apache/felix/cm/impl/CaseInsensitiveDictionaryTest.java Modified: felix/trunk/configadmin/src/main/java/org/apache/felix/cm/impl/CaseInsensitiveDictionary.java URL: http://svn.apache.org/viewvc/felix/trunk/configadmin/src/main/java/org/apache/felix/cm/impl/CaseInsensitiveDictionary.java?rev=1561599&r1=1561598&r2=1561599&view=diff ============================================================================== --- felix/trunk/configadmin/src/main/java/org/apache/felix/cm/impl/CaseInsensitiveDictionary.java (original) +++ felix/trunk/configadmin/src/main/java/org/apache/felix/cm/impl/CaseInsensitiveDictionary.java Mon Jan 27 08:07:53 2014 @@ -27,6 +27,7 @@ import java.util.Dictionary; import java.util.Enumeration; import java.util.Hashtable; import java.util.Iterator; +import java.util.Locale; import java.util.Map; import java.util.Vector; @@ -74,7 +75,7 @@ public class CaseInsensitiveDictionary e checkKey( key ); // check uniqueness of key - String lowerCase = ( ( String ) key ).toLowerCase(); + String lowerCase = toLowerCase( key ); if ( internalMap.containsKey( lowerCase ) ) { throw new IllegalArgumentException( "Key [" + key + "] already present in different case" ); @@ -156,8 +157,7 @@ public class CaseInsensitiveDictionary e throw new NullPointerException( "key" ); } - String stringKey = String.valueOf( key ).toLowerCase(); - return internalMap.get( stringKey ); + return internalMap.get( toLowerCase( key ) ); } @@ -198,7 +198,7 @@ public class CaseInsensitiveDictionary e checkKey( key ); value = checkValue( value ); - String lowerCase = String.valueOf( key ).toLowerCase(); + String lowerCase = toLowerCase( key ); originalKeys.put( lowerCase, key ); return internalMap.put( lowerCase, value ); } @@ -216,7 +216,7 @@ public class CaseInsensitiveDictionary e throw new NullPointerException( "key" ); } - String lowerCase = String.valueOf( key ).toLowerCase(); + String lowerCase = toLowerCase( key ); originalKeys.remove( lowerCase ); return internalMap.remove( lowerCase ); } @@ -273,6 +273,13 @@ public class CaseInsensitiveDictionary e } + static final String toLowerCase( Object keyObject ) + { + final String key = ( String ) keyObject; + return key.toLowerCase( Locale.ENGLISH ); + } + + static Object checkValue( Object value ) { Class type; Modified: felix/trunk/configadmin/src/test/java/org/apache/felix/cm/impl/CaseInsensitiveDictionaryTest.java URL: http://svn.apache.org/viewvc/felix/trunk/configadmin/src/test/java/org/apache/felix/cm/impl/CaseInsensitiveDictionaryTest.java?rev=1561599&r1=1561598&r2=1561599&view=diff ============================================================================== --- felix/trunk/configadmin/src/test/java/org/apache/felix/cm/impl/CaseInsensitiveDictionaryTest.java (original) +++ felix/trunk/configadmin/src/test/java/org/apache/felix/cm/impl/CaseInsensitiveDictionaryTest.java Mon Jan 27 08:07:53 2014 @@ -23,6 +23,7 @@ import java.util.ArrayList; import java.util.Collection; import java.util.HashSet; import java.util.List; +import java.util.Locale; import java.util.Vector; import junit.framework.TestCase; @@ -31,6 +32,28 @@ import junit.framework.TestCase; public class CaseInsensitiveDictionaryTest extends TestCase { + public void testLocaleIndependence() { + Locale defaultLocal = Locale.getDefault(); + CaseInsensitiveDictionary dict = new CaseInsensitiveDictionary(); + dict.put("illegal", "value1"); + dict.put("ILLEGAL", "value2"); + assertEquals(dict.get("illegal"), "value2"); + assertEquals(dict.get("ILLEGAL"), "value2"); + + // validate "i" conversion with Turkish default locale + Locale.setDefault(new Locale("tr", "" ,"")); + try { + dict = new CaseInsensitiveDictionary(); + dict.put("illegal", "value1"); + dict.put("ILLEGAL", "value2"); + assertEquals(dict.get("illegal"), "value2"); + assertEquals(dict.get("ILLEGAL"), "value2"); + } finally { + Locale.setDefault(defaultLocal); + } + } + + public void testCheckValueNull() { // null which must throw IllegalArgumentException