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
This commit is contained in:
parent
c274882161
commit
eb693a7469
|
@ -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.
|
||||
|
|
|
@ -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;
|
||||
}
|
||||
|
|
|
@ -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();
|
||||
|
|
Loading…
Reference in New Issue