blob: 99b2a478113c31fd69b8e4e3ba2c4e958afaffdd [file] [log] [blame]
/*
* Copyright (C) 2008 The Android Open Source Project
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package android.core;
import junit.framework.TestCase;
import java.util.HashMap;
import java.util.Iterator;
import android.test.suitebuilder.annotation.SmallTest;
/**
* Test cases for Hashmap.
*/
public class HashMapTest extends TestCase {
private static final Integer ONE = new Integer(1);
private static final Integer TWO = new Integer(2);
private static final Integer THREE = new Integer(3);
private static final Integer FOUR = new Integer(4);
private void addItems(HashMap map) {
map.put("one", ONE);
map.put("two", TWO);
map.put("three", THREE);
map.put("four", FOUR);
assertEquals(4, map.size());
assertEquals(ONE, map.get("one"));
assertEquals(TWO, map.get("two"));
assertEquals(THREE, map.get("three"));
assertEquals(FOUR, map.get("four"));
}
/**
* checks if simple adding elements works.
*/
@SmallTest
public void testAdd() throws Exception {
HashMap map = new HashMap();
addItems(map);
}
/**
* checks if clearing the map works.
*/
@SmallTest
public void testClear() throws Exception {
HashMap map = new HashMap();
addItems(map);
map.clear();
assertEquals(0, map.size());
}
/**
* checks if removing an elemt works.
*/
@SmallTest
public void testRemove() throws Exception {
HashMap map = new HashMap();
addItems(map);
map.remove("three");
assertNull(map.get("three"));
}
/**
* does some manipulation with a filled HashMap and checks
* if they work as intended
*/
@SmallTest
public void testManipulate() throws Exception {
HashMap map = new HashMap();
assertTrue(map.isEmpty());
assertEquals(0, map.size());
assertNull(map.get(null));
assertNull(map.get("one"));
assertFalse(map.containsKey("one"));
assertFalse(map.containsValue(new Integer(1)));
assertNull(map.remove(null));
assertNull(map.remove("one"));
assertNull(map.put(null, new Integer(-1)));
assertNull(map.put("one", new Integer(1)));
assertNull(map.put("two", new Integer(2)));
assertNull(map.put("three", new Integer(3)));
assertEquals(-1, ((Integer) map.put(null, new Integer(0))).intValue());
assertEquals(0, ((Integer) map.get(null)).intValue());
assertEquals(1, ((Integer) map.get("one")).intValue());
assertEquals(2, ((Integer) map.get("two")).intValue());
assertEquals(3, ((Integer) map.get("three")).intValue());
assertTrue(map.containsKey(null));
assertTrue(map.containsKey("one"));
assertTrue(map.containsKey("two"));
assertTrue(map.containsKey("three"));
assertTrue(map.containsValue(new Integer(0)));
assertTrue(map.containsValue(new Integer(1)));
assertTrue(map.containsValue(new Integer(2)));
assertTrue(map.containsValue(new Integer(3)));
assertEquals(0, ((Integer) map.remove(null)).intValue());
assertEquals(1, ((Integer) map.remove("one")).intValue());
assertEquals(2, ((Integer) map.remove("two")).intValue());
assertEquals(3, ((Integer) map.remove("three")).intValue());
assertTrue(map.isEmpty());
assertEquals(0, map.size());
assertNull(map.get(null));
assertNull(map.get("one"));
assertFalse(map.containsKey("one"));
assertFalse(map.containsValue(new Integer(1)));
assertNull(map.remove(null));
assertNull(map.remove("one"));
}
/**
* checks if the key iterator of HashMaps work.
*/
@SmallTest
public void testKeyIterator() throws Exception {
HashMap map = new HashMap();
boolean[] slots = new boolean[4];
addItems(map);
Iterator iter = map.keySet().iterator();
while (iter.hasNext()) {
int slot = 0;
Object key = iter.next();
if (key.equals("one"))
slot = 0;
else if (key.equals("two"))
slot = 1;
else if (key.equals("three"))
slot = 2;
else if (key.equals("four"))
slot = 3;
else
fail("Unkown key in hashmap");
if (slots[slot])
fail("key returned more than once");
else
slots[slot] = true;
}
assertTrue(slots[0]);
assertTrue(slots[1]);
assertTrue(slots[2]);
assertTrue(slots[3]);
}
/**
* checks if the value iterator works.
*/
@SmallTest
public void testValueIterator() throws Exception {
HashMap map = new HashMap();
boolean[] slots = new boolean[4];
addItems(map);
Iterator iter = map.values().iterator();
while (iter.hasNext()) {
int slot = 0;
Object value = iter.next();
if (value.equals(ONE))
slot = 0;
else if (value.equals(TWO))
slot = 1;
else if (value.equals(THREE))
slot = 2;
else if (value.equals(FOUR))
slot = 3;
else
fail("Unkown value in hashmap");
if (slots[slot])
fail("value returned more than once");
else
slots[slot] = true;
}
assertTrue(slots[0]);
assertTrue(slots[1]);
assertTrue(slots[2]);
assertTrue(slots[3]);
}
/**
* checks if the entry iterator works for HashMaps.
*/
@SmallTest
public void testEntryIterator() throws Exception {
HashMap map = new HashMap();
boolean[] slots = new boolean[4];
addItems(map);
Iterator iter = map.entrySet().iterator();
while (iter.hasNext()) {
int slot = 0;
Object entry = iter.next();
if (entry.toString().equals("one=1"))
slot = 0;
else if (entry.toString().equals("two=2"))
slot = 1;
else if (entry.toString().equals("three=3"))
slot = 2;
else if (entry.toString().equals("four=4"))
slot = 3;
else
fail("Unkown entry in hashmap");
if (slots[slot])
fail("entry returned more than once");
else
slots[slot] = true;
}
assertTrue(slots[0]);
assertTrue(slots[1]);
assertTrue(slots[2]);
assertTrue(slots[3]);
}
/**
* checks if the HashMap equals method works.
*/
@SmallTest
public void testEquals() throws Exception {
HashMap map1 = new HashMap();
HashMap map2 = new HashMap();
HashMap map3 = new HashMap();
map1.put("one", "1");
map1.put("two", "2");
map1.put("three", "3");
map2.put("one", new String("1"));
map2.put(new String("two"), "2");
map2.put(new String("three"), new String("3"));
assertTrue(map1.equals(map2));
map3.put("one", "1");
map3.put("two", "1");
map3.put("three", "1");
assertFalse(map1.equals(map3));
assertFalse(map2.equals(map3));
}
}