/*
* 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 28. June 2006 by Guilherme Silveira
*/
package com.thoughtworks.xstream.persistence;
import java.util.HashMap;
import java.util.HashSet;
import java.util.Iterator;
import java.util.Map;
import java.util.Set;
import junit.framework.TestCase;
public class XmlSetTest extends TestCase {
private MockedStrategy strategy;
public void setUp() throws Exception {
super.setUp();
strategy = new MockedStrategy();
}
public void testWritesASingleObject() {
XmlSet set = new XmlSet(this.strategy);
set.add("guilherme");
assertTrue(strategy.map.containsValue("guilherme"));
}
public void testWritesTwoObjects() {
XmlSet set = new XmlSet(this.strategy);
set.add("guilherme");
set.add("silveira");
assertTrue(strategy.map.containsValue("guilherme"));
assertTrue(strategy.map.containsValue("silveira"));
}
public void testRemovesAWrittenObject() {
XmlSet set = new XmlSet(this.strategy);
set.add("guilherme");
assertTrue(strategy.map.containsValue("guilherme"));
boolean changed = set.remove("guilherme");
assertTrue(changed);
assertFalse(strategy.map.containsValue("guilherme"));
}
public void testRemovesAnInvalidObject() {
XmlSet set = new XmlSet(this.strategy);
boolean removed= set.remove("guilherme");
assertFalse(removed);
}
public void testHasZeroLength() {
XmlSet set = new XmlSet(this.strategy);
assertEquals(0, set.size());
}
public void testHasOneItem() {
XmlSet set = new XmlSet(this.strategy);
set.add("guilherme");
assertEquals(1, set.size());
}
public void testHasTwoItems() {
XmlSet set = new XmlSet(this.strategy);
set.add("guilherme");
set.add("silveira");
assertEquals(2, set.size());
}
public void testIsNotEmpty() {
XmlSet set = new XmlSet(this.strategy);
set.add("guilherme");
assertFalse("set should not be empty", set.isEmpty());
}
public void testDoesNotContainKey() {
XmlSet set = new XmlSet(this.strategy);
assertFalse(set.contains("guilherme"));
}
public void testContainsKey() {
XmlSet set = new XmlSet(this.strategy);
set.add("guilherme");
assertTrue(set.contains("guilherme"));
}
public void testGetsAnObject() {
XmlSet set = new XmlSet(this.strategy);
set.add("guilherme");
Object onlyValue = set.iterator().next();
assertEquals("guilherme", onlyValue);
}
public void testIsEmpty() {
XmlSet set = new XmlSet(this.strategy);
assertTrue("set should be empty", set.isEmpty());
}
public void testClearsItsObjects() {
XmlSet set = new XmlSet(this.strategy);
set.add("guilherme");
set.add("silveira");
set.clear();
assertEquals(0, set.size());
}
public void testPutsAllAddsTwoItems() {
Set original = new HashSet();
original.add("guilherme");
original.add("silveira");
XmlSet set = new XmlSet(this.strategy);
set.addAll(original);
assertEquals(2, set.size());
}
public void testContainsASpecificValue() {
XmlSet set = new XmlSet(this.strategy);
set.add("guilherme");
assertTrue(set.contains("guilherme"));
}
public void testDoesNotContainASpecificValue() {
XmlSet set = new XmlSet(this.strategy);
assertFalse(set.contains("zzzz"));
}
public void testEntrySetContainsAllItems() {
Set original = new HashSet();
original.add("guilherme");
original.add("silveira");
XmlSet set = new XmlSet(this.strategy);
set.add("guilherme");
set.add("silveira");
assertTrue(set.containsAll(original));
}
// actually an acceptance test?
public void testIteratesOverEntryAndChecksWithAnotherInstance() {
XmlSet set = new XmlSet(this.strategy);
set.add("guilherme");
set.add("silveira");
XmlSet built = new XmlSet(this.strategy);
for (Iterator iter = set.iterator(); iter.hasNext();) {
Object entry = iter.next();
assertTrue(built.contains(entry));
}
}
public void testIteratesOverEntrySetContainingTwoItems() {
XmlSet set = new XmlSet(this.strategy);
set.add("guilherme");
set.add("silveira");
Set built = new HashSet();
for (Iterator iter = set.iterator(); iter.hasNext();) {
Object entry = iter.next();
built.add(entry);
}
assertEquals(set, built);
}
public void testRemovesAnItemThroughIteration() {
XmlSet set = new XmlSet(this.strategy);
set.add("guilherme");
set.add("silveira");
for (Iterator iter = set.iterator(); iter.hasNext();) {
Object entry = iter.next();
if (entry.equals("guilherme")) {
iter.remove();
}
}
assertFalse(set.contains("guilherme"));
}
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);
}
}
}