Revision: 7282 Author: [email protected] Date: Wed Dec 9 10:45:58 2009 Log: Fix TreeMap submaps where there are no keys in range.
Issue: 3360 Patch by: hayward.chan Review by: jat, fabbott http://code.google.com/p/google-web-toolkit/source/detail?r=7282 Modified: /trunk/user/super/com/google/gwt/emul/java/util/TreeMap.java /trunk/user/test/com/google/gwt/emultest/java/util/TreeMapStringStringTest.java ======================================= --- /trunk/user/super/com/google/gwt/emul/java/util/TreeMap.java Mon May 18 11:47:32 2009 +++ /trunk/user/super/com/google/gwt/emul/java/util/TreeMap.java Wed Dec 9 10:45:58 2009 @@ -466,7 +466,8 @@ } else { node = getFirstNode(); } - return node; + // The map is empty if the first key after fromKey is out of range. + return node != null && inRange(node.getKey()) ? node : null; } private Node<K, V> getLastSubmapNode() { @@ -476,7 +477,8 @@ } else { node = getLastNode(); } - return node; + // The map is empty if the last key before toKey is out of range. + return node != null && inRange(node.getKey()) ? node : null; } private boolean inRange(K key) { ======================================= --- /trunk/user/test/com/google/gwt/emultest/java/util/TreeMapStringStringTest.java Fri May 15 14:55:56 2009 +++ /trunk/user/test/com/google/gwt/emultest/java/util/TreeMapStringStringTest.java Wed Dec 9 10:45:58 2009 @@ -17,17 +17,32 @@ import java.util.Iterator; import java.util.Map; +import java.util.Map.Entry; import java.util.NoSuchElementException; import java.util.Set; import java.util.SortedMap; import java.util.TreeMap; -import java.util.Map.Entry; /** * Tests <code>TreeMap</code> with Strings and the natural comparator. */ public class TreeMapStringStringTest extends TreeMapTest<String, String> { + public void testHeadMapClear() { + TreeMap<String, String> map = new TreeMap<String, String>(); + map.put("a", "value a"); + map.put("b", "value b"); + map.put("c", "value c"); + + SortedMap<String, String> headMap = map.headMap("b"); + assertEquals("headMap.size", 1, headMap.size()); + assertEquals("headMap.isEmpty", false, headMap.isEmpty()); + + headMap.clear(); + assertEquals("headMap.size", 0, headMap.size()); + assertEquals("headMap.isEmpty", true, headMap.isEmpty()); + } + public void testHeadMapEqualsFirst() { SortedMap<String, String> sortedMap = createKnownKeysMap(); SortedMap<String, String> subMap = sortedMap.headMap("aa"); @@ -69,6 +84,21 @@ assertEquals("firstKey", "aa", subMap.firstKey()); assertEquals("lastKey", "bb", subMap.lastKey()); } + + public void testSubMapClear() { + TreeMap<String, String> map = new TreeMap<String, String>(); + map.put("a", "value a"); + map.put("b", "value b"); + map.put("c", "value c"); + + SortedMap<String, String> subMap = map.subMap("a", "c"); + assertEquals("subMap.size", 2, subMap.size()); + assertEquals("subMap.isEmpty", false, subMap.isEmpty()); + + subMap.clear(); + assertEquals("subMap.size", 0, subMap.size()); + assertEquals("subMap.isEmpty", true, subMap.isEmpty()); + } /** * Tests that compositing submap operations function as expected. @@ -83,6 +113,21 @@ assertEquals("headMap(tailMap) should equal subMap", subMap1, subMap3); assertEquals("headMap(tailMap) size", 2, subMap1.size()); } + + public void testTailMapClear() { + TreeMap<String, String> map = new TreeMap<String, String>(); + map.put("a", "value a"); + map.put("b", "value b"); + map.put("c", "value c"); + + SortedMap<String, String> tailMap = map.tailMap("b"); + assertEquals("tailMap.size", 2, tailMap.size()); + assertEquals("tailMap.isEmpty", false, tailMap.isEmpty()); + + tailMap.clear(); + assertEquals("tailMap.size", 0, tailMap.size()); + assertEquals("tailMap.isEmpty", true, tailMap.isEmpty()); + } public void testTailMapPastEnd() { SortedMap<String, String> sortedMap = createKnownKeysMap(); -- http://groups.google.com/group/Google-Web-Toolkit-Contributors
