/******************************************************************************* * Copyright (c) 2000, 2015 IBM Corporation and others. * All rights reserved. This program and the accompanying materials * are made available under the terms of the Eclipse Public License v1.0 * which accompanies this distribution, and is available at * http://www.eclipse.org/legal/epl-v10.html * * Contributors: * IBM Corporation - initial API and implementation * Alexander Kurtakov <akurtako@redhat.com> - Bug 459343 *******************************************************************************/ package org.eclipse.core.tests.internal.utils; import java.util.*; import junit.framework.Test; import junit.framework.TestSuite; import org.eclipse.core.internal.utils.ObjectMap; import org.eclipse.core.tests.resources.ResourceTest; public class ObjectMapTest extends ResourceTest { private static final int MAXIMUM = 100; private Object[] values; /** * Need a zero argument constructor to satisfy the test harness. * This constructor should not do any real work nor should it be * called by user code. */ public ObjectMapTest() { super(); } /** * Creates a new markers test. */ public ObjectMapTest(String name) { super(name); } /** * Configures the markers test suite. */ public static Test suite() { return new TestSuite(ObjectMapTest.class); //TestSuite suite = new TestSuite(); //suite.addTest(new ObjectMapTest("_testPR")); //return suite; } public void testPut() { // create the objects to insert into the map ObjectMap<Integer, Object> map = new ObjectMap<>(); int max = 100; Object[] values = new Object[max]; for (int i = 0; i < max; i++) { values[i] = new Long(System.currentTimeMillis()); } // add each object to the map for (int i = 0; i < values.length; i++) { Integer key = Integer.valueOf(i); map.put(key, values[i]); assertTrue("2.0." + i, map.containsKey(key)); assertTrue("2.1." + i, map.containsValue(values[i])); assertEquals("2.2." + i, i + 1, map.size()); } // make sure they are all still there assertEquals("3.0", max, map.size()); for (int i = 0; i < values.length; i++) { Integer key = Integer.valueOf(i); assertTrue("3.1." + i, map.containsKey(key)); assertNotNull("3.2." + i, map.get(key)); } } public void testPutEmptyMap() { ObjectMap<Object, Object> map = new ObjectMap<>(new HashMap<>()); map.put(new Object(), new Object()); } public void testRemove() { // populate the map ObjectMap<Integer, Object> map = populateMap(MAXIMUM); // remove each element for (int i = MAXIMUM - 1; i >= 0; i--) { Object key = Integer.valueOf(i); map.remove(key); assertTrue("2.0." + i, !map.containsKey(key)); assertEquals("2.1," + i, i, map.size()); // check that the others still exist for (int j = 0; j < i; j++) { assertTrue("2.2." + j, map.containsKey(Integer.valueOf(j))); } } // all gone? assertEquals("3.0", 0, map.size()); } public void testContains() { ObjectMap<Integer, Object> map = populateMap(MAXIMUM); for (int i = 0; i < MAXIMUM; i++) { assertTrue("2.0." + i, map.containsKey(Integer.valueOf(i))); assertTrue("2.1." + i, map.containsValue(values[i])); } assertFalse("3.0", map.containsKey(Integer.valueOf(MAXIMUM + 1))); assertFalse("3.1", map.containsKey(Integer.valueOf(-1))); assertFalse("3.2", map.containsValue(null)); assertFalse("3.3", map.containsValue(getRandomString())); } public void testValues() { ObjectMap<Integer, Object> map = populateMap(MAXIMUM); Collection<Object> result = map.values(); for (int i = 0; i < MAXIMUM; i++) { assertTrue("2.0." + i, result.contains(values[i])); } } public void testKeySet() { ObjectMap<Integer, Object> map = populateMap(MAXIMUM); Set<Integer> keys = map.keySet(); assertEquals("1.0", MAXIMUM, keys.size()); } public void testEntrySet() { ObjectMap<Integer, Object> map = populateMap(MAXIMUM); Set<Map.Entry<Integer, Object>> entries = map.entrySet(); for (int i = 0; i < MAXIMUM; i++) { assertTrue("1.0." + i, contains(entries, values[i])); } } /** * The given set is a set of Map.Entry objects. */ private boolean contains(Set<Map.Entry<Integer, Object>> set, Object value) { for (Map.Entry<Integer, Object> entry : set) { if (entry.getValue().equals(value)) { return true; } } return false; } private ObjectMap<Integer, Object> populateMap(int max) { // populate the map ObjectMap<Integer, Object> map = new ObjectMap<>(); values = new Object[max]; for (int i = 0; i < max; i++) { values[i] = new Long(System.currentTimeMillis()); map.put(Integer.valueOf(i), values[i]); } assertEquals("#populateMap", max, map.size()); return map; } /* * Bug 62231 - empty ObjectMap.toHashMap() causes NullPointerException */ public void testBug_62231() { ObjectMap<Object, Object> map = new ObjectMap<>(); try { map.entrySet(); } catch (NullPointerException e) { fail("1.0"); } map.clear(); try { map.entrySet(); } catch (NullPointerException e) { fail("1.1"); } } }