/* * Copyright (C) 2005 Joe Walnes. * Copyright (C) 2006, 2007 XStream Committers. * All rights reserved. * * The software in this package is published under the terms of the BSD * style license a copy of which has been included with this distribution in * the LICENSE.txt file. * * Created on 06. February 2005 by Joe Walnes */ package com.thoughtworks.xstream.core.util; import junit.framework.TestCase; import java.util.Iterator; import java.util.Map; public class OrderRetainingMapTest extends TestCase { private Map map; private void assertNextEquals(Object expected, Iterator iterator) { assertTrue("Expected to pull of another item from iterator : " + expected, iterator.hasNext()); assertEquals(expected, iterator.next()); } private void assertNextEntryEquals(Object expectedKey, Object expectedValue, Iterator iterator) { assertTrue("Expected to pull of another item from iterator : " + expectedKey + "=" + expectedValue, iterator.hasNext()); Map.Entry actual = (Map.Entry) iterator.next(); assertEquals(expectedKey, actual.getKey()); assertEquals(expectedValue, actual.getValue()); } private void assertNoMore(Iterator iterator) { assertFalse("Should be no more items in iterator", iterator.hasNext()); } protected void setUp() throws Exception { super.setUp(); map = new OrderRetainingMap(); map.put("one", "ONE"); map.put("two", "TWO"); map.put("three", "THREE"); map.put("four", "FOUR"); } public void testMaintainsOrderOfKeySet() { Iterator keySetIterator = map.keySet().iterator(); assertNextEquals("one", keySetIterator); assertNextEquals("two", keySetIterator); assertNextEquals("three", keySetIterator); assertNextEquals("four", keySetIterator); assertNoMore(keySetIterator); } public void testMaintainsOrderOfValues() { Iterator valuesIterator = map.values().iterator(); assertNextEquals("ONE", valuesIterator); assertNextEquals("TWO", valuesIterator); assertNextEquals("THREE", valuesIterator); assertNextEquals("FOUR", valuesIterator); assertNoMore(valuesIterator); } public void testMaintainsOrderOfEntries() { Iterator entrySetIterator = map.entrySet().iterator(); assertNextEntryEquals("one", "ONE", entrySetIterator); assertNextEntryEquals("two", "TWO", entrySetIterator); assertNextEntryEquals("three", "THREE", entrySetIterator); assertNextEntryEquals("four", "FOUR", entrySetIterator); assertNoMore(entrySetIterator); } public void testMaintainsOrderOfEntriesAfterCopyCtor() { Iterator entrySetIterator = new OrderRetainingMap(map).entrySet().iterator(); assertNextEntryEquals("one", "ONE", entrySetIterator); assertNextEntryEquals("two", "TWO", entrySetIterator); assertNextEntryEquals("three", "THREE", entrySetIterator); assertNextEntryEquals("four", "FOUR", entrySetIterator); assertNoMore(entrySetIterator); } }