SE251Ex:Chain TestChain

From Marks Wiki
Jump to navigation Jump to search

Copy and past the code below.

import java.util.*;

import junit.framework.TestCase;

public class TestChain extends TestCase {
	private Chain<String> chain;

	public void setUp() throws Exception {
		chain = new Chain<String>();
	}
	
	public void testAddUnique() {
		assertTrue(chain.add("a"));
		assertTrue(chain.add("b"));
		assertTrue(chain.add("c"));
		assertEquals("[a, b, c]",chain.toString());
	}
	
	public void testAddDuplicate() {
		assertTrue(chain.add("a"));
		assertTrue(chain.add("b"));
		assertTrue(chain.add("c"));
		assertFalse(chain.add("b"));
		assertFalse(chain.add("a"));
		assertEquals("[a, b, c]",chain.toString());
	}
	
	public void testAddIndexUnique() {
		assertTrue(chain.add(0, "c"));
		assertTrue(chain.add(0, "a"));
		assertTrue(chain.add(1, "b"));
		assertEquals("[a, b, c]",chain.toString());
	}
	
	public void testAddIndexOutOfBounds() {
		try {
			assertTrue(chain.add(0, "c"));
			chain.add(4, "a");
			fail("IndexOutOfBoundsException should be thrown here!");
		} catch (IndexOutOfBoundsException e) {
			//This is supposed to happen.
		}
	}
	
	public void testAddIndexDuplicate() {
		assertTrue(chain.add(0, "a"));
		assertTrue(chain.add(1, "c"));
		assertTrue(chain.add(1, "b"));
		assertFalse(chain.add(0, "c"));
		assertFalse(chain.add(2, "c"));
		assertEquals("[a, b, c]",chain.toString());
	}
	
	public void testRemove() {
		assertTrue(chain.add("a"));
		assertTrue(chain.add("b"));
		assertTrue(chain.add("c"));
		assertTrue(chain.add("d"));
		assertTrue(chain.add("e"));
		
		assertTrue(chain.remove("b"));
		assertFalse(chain.remove("h"));
		assertTrue(chain.remove("e"));
		assertFalse(chain.remove("b"));
		
		assertEquals("[a, c, d]",chain.toString());
	}
	
	public void testRemoveIndex() {
		assertTrue(chain.add("a"));
		assertTrue(chain.add("b"));
		assertTrue(chain.add("c"));
		assertTrue(chain.add("d"));
		assertTrue(chain.add("e"));
		
		assertEquals("a",chain.remove(0));
		assertEquals("e",chain.remove(3));
		assertEquals("c",chain.remove(1));
		
		assertEquals("[b, d]",chain.toString());
	}
	
	public void testGet() {
		assertTrue(chain.add("a"));
		assertTrue(chain.add("b"));
		assertTrue(chain.add("c"));
		
		assertEquals("a",chain.get(0));
		assertEquals("b",chain.get(1));
		assertEquals("c",chain.get(2));
	}
	
	public void testGetIndexOutOfBounds() {
		try {
			assertTrue(chain.add("a"));
			assertTrue(chain.add("b"));
			chain.get(3);
			fail("IndexOutOfBoundsException should be thrown here!");
		} catch (IndexOutOfBoundsException e) {
			//This is supposed to happen.
		}
	}
	
	public void testContains() {
		assertTrue(chain.add("a"));
		assertTrue(chain.add("b"));
		assertTrue(chain.add("c"));

		assertTrue(chain.contains("a"));
		assertTrue(chain.contains("b"));
		assertTrue(chain.contains("c"));
	}
	
	public void testIteration() {
		assertTrue(chain.add("a"));
		assertTrue(chain.add("l"));
		assertTrue(chain.add("g"));
		assertTrue(chain.add("e"));
		assertFalse(chain.add("l"));
		assertTrue(chain.add("b"));
		assertTrue(chain.add("r"));
		assertFalse(chain.add("a"));
		
		Iterator<String> it = chain.iterator();
		assertEquals("a", it.next());
		assertEquals("l", it.next());
		assertEquals("g", it.next());
		assertEquals("e", it.next());
		assertEquals("b", it.next());
		assertEquals("r", it.next());
		assertFalse(it.hasNext());
		
		for (String str : chain) {
			//Just demonstrating this is possible!
			System.out.println(str);
		}
	}
	
	/** Tests stuff you can do to chain only because it implements Collection */
	public void testCollectionsUtility() {
		List<String> bulk = new ArrayList<String>();
		bulk.add("a");
		bulk.add("l");
		bulk.add("g");
		bulk.add("e");
		bulk.add("b");
		bulk.add("r");
		
		assertTrue(chain.addAll(bulk)); //inherited from AbstractCollection
		
		String max = Collections.max(chain); //chain is a Collection. Yay!
		assertEquals("r", max);
		
		Object[] arrayVersion = chain.toArray(); //inherited from AbstractCollection
		assertEquals("[a, l, g, e, b, r]", Arrays.toString(arrayVersion));
	}
	
	public void testSize() {
		assertTrue(chain.add("a"));
		assertTrue(chain.add("b"));
		assertTrue(chain.add("c"));
		
		assertEquals(3, chain.size());
	}
}