/* * Copyright (C) 2006 Joe Walnes. * Copyright (C) 2007, 2008 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 13. June 2006 by Guilherme Silveira */ package com.thoughtworks.xstream.persistence; import java.util.HashMap; import java.util.Iterator; import java.util.Map; import java.util.Set; import junit.framework.TestCase; public class XmlMapTest extends TestCase { private MockedStrategy strategy; public void setUp() throws Exception { super.setUp(); strategy = new MockedStrategy(); } public void testWritesASingleObject() { XmlMap map = new XmlMap(this.strategy); map.put("guilherme", "aCuteString"); assertTrue(strategy.map.containsKey("guilherme")); } public void testWritesTwoObjects() { XmlMap map = new XmlMap(this.strategy); map.put("guilherme", "aCuteString"); map.put("silveira", "anotherCuteString"); assertTrue(strategy.map.containsKey("guilherme")); assertTrue(strategy.map.containsKey("silveira")); } public void testRemovesAWrittenObject() { XmlMap map = new XmlMap(this.strategy); map.put("guilherme", "aCuteString"); assertTrue(strategy.map.containsKey("guilherme")); String aCuteString = (String) map.remove("guilherme"); assertEquals("aCuteString", aCuteString); assertFalse(strategy.map.containsKey("guilherme")); } public void testRemovesAnInvalidObject() { XmlMap map = new XmlMap(this.strategy); String aCuteString = (String) map.remove("guilherme"); assertNull(aCuteString); } public void testHasZeroLength() { XmlMap map = new XmlMap(this.strategy); assertEquals(0, map.size()); } public void testHasOneItem() { XmlMap map = new XmlMap(this.strategy); map.put("guilherme", "aCuteString"); assertEquals(1, map.size()); } public void testHasTwoItems() { XmlMap map = new XmlMap(this.strategy); map.put("guilherme", "aCuteString"); map.put("silveira", "anotherCuteString"); assertEquals(2, map.size()); } public void testIsNotEmpty() { XmlMap map = new XmlMap(this.strategy); map.put("guilherme", "aCuteString"); assertFalse("Map should not be empty", map.isEmpty()); } public void testDoesNotContainKey() { XmlMap map = new XmlMap(this.strategy); assertFalse(map.containsKey("guilherme")); } public void testContainsKey() { XmlMap map = new XmlMap(this.strategy); map.put("guilherme", "aCuteString"); assertTrue(map.containsKey("guilherme")); } public void testGetsAnObject() { XmlMap map = new XmlMap(this.strategy); this.strategy.map.put("guilherme", "aCuteString"); String aCuteString = (String) map.get("guilherme"); assertEquals("aCuteString", aCuteString); } public void testGetsAnInvalidObject() { XmlMap map = new XmlMap(this.strategy); String aCuteString = (String) map.get("guilherme"); assertNull(aCuteString); } public void testRewritesASingleObject() { XmlMap map = new XmlMap(this.strategy); map.put("guilherme", "aCuteString"); assertEquals("aCuteString", map.get("guilherme")); map.put("guilherme", "anotherCuteString"); assertEquals("anotherCuteString", map.get("guilherme")); } public void testIsEmpty() { XmlMap map = new XmlMap(this.strategy); assertTrue("Map should be empty", map.isEmpty()); } public void testClearsItsObjects() { XmlMap map = new XmlMap(this.strategy); map.put("guilherme", "aCuteString"); map.put("silveira", "anotherCuteString"); map.clear(); assertEquals(0, map.size()); } public void testPutsAllAddsTwoItems() { Map original = new HashMap(); original.put("guilherme", "aCuteString"); original.put("silveira", "anotherCuteString"); XmlMap map = new XmlMap(this.strategy); map.putAll(original); assertEquals(2, map.size()); } public void testContainsASpecificValue() { XmlMap map = new XmlMap(this.strategy); String value = "aCuteString"; map.put("guilherme", value); assertTrue(map.containsValue(value)); } public void testDoesNotContainASpecificValue() { XmlMap map = new XmlMap(this.strategy); assertFalse(map.containsValue("zzzz")); } public void testEntrySetContainsAllItems() { Map original = new HashMap(); original.put("guilherme", "aCuteString"); original.put("silveira", "anotherCuteString"); Set originalSet = original.entrySet(); XmlMap map = new XmlMap(this.strategy); map.put("guilherme", "aCuteString"); map.put("silveira", "anotherCuteString"); Set set = map.entrySet(); assertTrue(set.containsAll(originalSet)); } // actually an acceptance test? public void testIteratesOverEntryAndChecksItsKeyWithAnotherInstance() { XmlMap map = new XmlMap(this.strategy); map.put("guilherme", "aCuteString"); map.put("silveira", "anotherCuteString"); XmlMap built = new XmlMap(this.strategy); for (Iterator iter = map.entrySet().iterator(); iter.hasNext();) { Map.Entry entry = (Map.Entry) iter.next(); assertTrue(built.containsKey(entry.getKey())); } } // actually an acceptance test? public void testIteratesOverEntryAndChecksItsValueWithAnotherInstance() { XmlMap map = new XmlMap(this.strategy); map.put("guilherme", "aCuteString"); map.put("silveira", "anotherCuteString"); XmlMap built = new XmlMap(this.strategy); for (Iterator iter = map.entrySet().iterator(); iter.hasNext();) { Map.Entry entry = (Map.Entry) iter.next(); assertTrue(built.containsValue(entry.getValue())); } } public void testIteratesOverEntrySetContainingTwoItems() { XmlMap map = new XmlMap(this.strategy); map.put("guilherme", "aCuteString"); map.put("silveira", "anotherCuteString"); Map built = new HashMap(); for (Iterator iter = map.entrySet().iterator(); iter.hasNext();) { Map.Entry entry = (Map.Entry) iter.next(); built.put(entry.getKey(), entry.getValue()); } assertEquals(map, built); } public void testRemovesAnItemThroughIteration() { XmlMap map = new XmlMap(this.strategy); map.put("guilherme", "aCuteString"); map.put("silveira", "anotherCuteString"); for (Iterator iter = map.entrySet().iterator(); iter.hasNext();) { Map.Entry entry = (Map.Entry) iter.next(); if (entry.getKey().equals("guilherme")) { iter.remove(); } } assertFalse(map.containsKey("guilherme")); } public void testRewritesAObject() { XmlMap map = new XmlMap(this.strategy); map.put("guilherme", "aCuteString"); map.put("guilherme", "anotherCuteString"); assertEquals("anotherCuteString", map.get("guilherme")); } public void testPutReturnsTheOldValueWhenRewritingAObject() { XmlMap map = new XmlMap(this.strategy); map.put("guilherme", "aCuteString"); assertEquals("aCuteString", map.put("guilherme", "anotherCuteString")); } private static class MockedStrategy implements PersistenceStrategy { private Map map = new HashMap(); public Iterator iterator() { return map.entrySet().iterator(); } public int size() { return map.size(); } public Object get(Object key) { return map.get(key); } public Object put(Object key, Object value) { return map.put(key, value); } public Object remove(Object key) { return map.remove(key); } } }