You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@commons.apache.org by ch...@apache.org on 2017/07/11 17:55:40 UTC
[10/50] commons-collections git commit: Backport COLLECTIONS-294 to
3.2.2.
Backport COLLECTIONS-294 to 3.2.2.
git-svn-id: https://svn.apache.org/repos/asf/commons/proper/collections/branches/COLLECTIONS_3_2_X@1713181 13f79535-47bb-0310-9956-ffa450edef68
Project: http://git-wip-us.apache.org/repos/asf/commons-collections/repo
Commit: http://git-wip-us.apache.org/repos/asf/commons-collections/commit/eb693a74
Tree: http://git-wip-us.apache.org/repos/asf/commons-collections/tree/eb693a74
Diff: http://git-wip-us.apache.org/repos/asf/commons-collections/diff/eb693a74
Branch: refs/heads/COLLECTIONS_3_2_X
Commit: eb693a74697659d226b5e4058d3c0e0313e46d07
Parents: c274882
Author: Thomas Neidhart <tn...@apache.org>
Authored: Sat Nov 7 21:17:00 2015 +0000
Committer: Thomas Neidhart <tn...@apache.org>
Committed: Sat Nov 7 21:17:00 2015 +0000
----------------------------------------------------------------------
src/changes/changes.xml | 8 +++---
.../collections/map/CaseInsensitiveMap.java | 16 ++++++-----
.../collections/map/TestCaseInsensitiveMap.java | 28 +++++++++++++++++++-
3 files changed, 41 insertions(+), 11 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/commons-collections/blob/eb693a74/src/changes/changes.xml
----------------------------------------------------------------------
diff --git a/src/changes/changes.xml b/src/changes/changes.xml
index 8695e33..66cee68 100644
--- a/src/changes/changes.xml
+++ b/src/changes/changes.xml
@@ -29,6 +29,10 @@
<action issue="COLLECTIONS-335" dev="jochen" type="fix" due-to="sebb">
Fixed cache assignment for "TreeBidiMap#entrySet".
</action>
+ <action issue="COLLECTIONS-294" dev="bayard" type="fix" due-to="Benjamin Bentmann">
+ "CaseInsensitiveMap" will now convert input strings to lower-case in a
+ locale-independent manner.
+ </action>
<action issue="COLLECTIONS-266" dev="bayard" type="fix" due-to="Joerg Schaible">
"MultiKey" will now be correctly serialized/de-serialized.
</action>
@@ -71,10 +75,6 @@
<action issue="COLLECTIONS-304" dev="bayard" type="fix" due-to="RafaĆ Figas,Bjorn Townsend">
"SetUniqueList#set(int, Object)" will now correctly enforce the uniqueness constraint.
</action>
- <action issue="COLLECTIONS-294" dev="bayard" type="fix" due-to="Benjamin Bentmann">
- "CaseInsensitiveMap" will now convert input strings to lower-case in a
- locale-independant manner.
- </action>
<action issue="COLLECTIONS-261" dev="bayard" type="fix" due-to="ori">
"Flat3Map#remove(Object)" will now return the correct value mapped to the removed key
if the size of the map is less or equal 3.
http://git-wip-us.apache.org/repos/asf/commons-collections/blob/eb693a74/src/java/org/apache/commons/collections/map/CaseInsensitiveMap.java
----------------------------------------------------------------------
diff --git a/src/java/org/apache/commons/collections/map/CaseInsensitiveMap.java b/src/java/org/apache/commons/collections/map/CaseInsensitiveMap.java
index ba9650d..237c05a 100644
--- a/src/java/org/apache/commons/collections/map/CaseInsensitiveMap.java
+++ b/src/java/org/apache/commons/collections/map/CaseInsensitiveMap.java
@@ -25,9 +25,9 @@ import java.util.Map;
/**
* A case-insensitive <code>Map</code>.
* <p>
- * As entries are added to the map, keys are converted to all lowercase. A new
- * key is compared to existing keys by comparing <code>newKey.toString().toLower()</code>
- * to the lowercase values in the current <code>KeySet.</code>
+ * Before keys are added to the map or compared to other existing keys, they are converted
+ * to all lowercase in a locale-independent fashion by using information from the Unicode
+ * data file.
* <p>
* Null keys are supported.
* <p>
@@ -111,14 +111,18 @@ public class CaseInsensitiveMap extends AbstractHashedMap implements Serializabl
* Overrides convertKey() from {@link AbstractHashedMap} to convert keys to
* lower case.
* <p>
- * Returns null if key is null.
- *
+ * Returns {@link AbstractHashedMap#NULL} if key is null.
+ *
* @param key the key convert
* @return the converted key
*/
protected Object convertKey(Object key) {
if (key != null) {
- return key.toString().toLowerCase();
+ char[] chars = key.toString().toCharArray();
+ for (int i = chars.length - 1; i >= 0; i--) {
+ chars[i] = Character.toLowerCase(Character.toUpperCase(chars[i]));
+ }
+ return new String(chars);
} else {
return AbstractHashedMap.NULL;
}
http://git-wip-us.apache.org/repos/asf/commons-collections/blob/eb693a74/src/test/org/apache/commons/collections/map/TestCaseInsensitiveMap.java
----------------------------------------------------------------------
diff --git a/src/test/org/apache/commons/collections/map/TestCaseInsensitiveMap.java b/src/test/org/apache/commons/collections/map/TestCaseInsensitiveMap.java
index b3f27a5..0b7266e 100644
--- a/src/test/org/apache/commons/collections/map/TestCaseInsensitiveMap.java
+++ b/src/test/org/apache/commons/collections/map/TestCaseInsensitiveMap.java
@@ -17,6 +17,7 @@
package org.apache.commons.collections.map;
import java.util.HashMap;
+import java.util.Locale;
import java.util.Map;
import java.util.Set;
@@ -108,7 +109,32 @@ public class TestCaseInsensitiveMap extends AbstractTestIterableMap {
assertEquals(map.size(), cloned.size());
assertSame(map.get("1"), cloned.get("1"));
}
-
+
+ // COLLECTIONS-294
+ public void testLocaleIndependence() {
+ Locale orig = Locale.getDefault();
+ Locale[] locales = { Locale.ENGLISH, new Locale("tr"), Locale.getDefault() };
+ String[][] data = {
+ { "i", "I" },
+ { "\u03C2", "\u03C3" },
+ { "\u03A3", "\u03C2" },
+ { "\u03A3", "\u03C3" },
+ };
+ try {
+ for (int i = 0; i < locales.length; i++) {
+ Locale.setDefault(locales[i]);
+ for (int j = 0; j < data.length; j++) {
+ assertTrue("Test data corrupt: " + j, data[j][0].equalsIgnoreCase(data[j][1]));
+ CaseInsensitiveMap map = new CaseInsensitiveMap();
+ map.put(data[j][0], "value");
+ assertEquals(Locale.getDefault() + ": " + j, "value", map.get(data[j][1]));
+ }
+ }
+ } finally {
+ Locale.setDefault(orig);
+ }
+ }
+
/*
public void testCreate() throws Exception {
resetEmpty();