package com.limegroup.gnutella.util;
import java.util.Iterator;
import junit.framework.Test;
import com.limegroup.gnutella.util.DoublyLinkedList.ListElement;
/**
* Unit tests for DoublyLinkedList
*/
public class DoublyLinkedListTest extends BaseTestCase {
public DoublyLinkedListTest(String name) {
super(name);
}
public static Test suite() {
return buildTestSuite(DoublyLinkedListTest.class);
}
public static void main(String[] args) {
junit.textui.TestRunner.run(suite());
}
public void testLegacy() {
DoublyLinkedList l=new DoublyLinkedList();
ListElement a=null, b=null, c=null;
assertNull(l.removeFirst());
assertNull(l.removeFirst());
//One element list
a=l.addLast("a");
assertTrue(a.getKey().equals("a"));
assertTrue(l.removeFirst()==a);
assertNull(l.removeFirst());
//Two element list: remove first
a=l.addLast("a");
assertEquals("a", a.getKey());
b=l.addLast("b");
assertEquals("b", b.getKey());
l.remove(a);
assertSame(b, l.removeFirst());
assertNull(l.removeFirst());
//Two element list: remove last
a=l.addLast("a");
assertEquals("a", a.getKey());
b=l.addLast("b");
assertEquals("b", b.getKey());
l.remove(b);
assertSame(a, l.removeFirst());
assertNull(l.removeFirst());
//Three element list: test removing first element of the list.
a=l.addLast("a");
assertEquals("a", a.getKey());
b=l.addLast("b");
assertEquals("b", b.getKey());
c=l.addLast("c");
assertEquals("c", c.getKey());
l.remove(a);
assertSame(b, l.removeFirst());
assertSame(c, l.removeFirst());
assertNull(l.removeFirst());
//Three element list: test removing middle element of the list.
a=l.addLast("a");
assertEquals("a", a.getKey());
b=l.addLast("b");
assertEquals("b", b.getKey());
c=l.addLast("c");
assertEquals("c", c.getKey());
l.remove(b);
assertSame(a, l.removeFirst());
assertSame(c, l.removeFirst());
assertNull(l.removeFirst());
//Three element list: test removing last element of the list.
a=l.addLast("a");
assertEquals("a", a.getKey());
b=l.addLast("b");
assertEquals("b", b.getKey());
c=l.addLast("c");
assertEquals("c", c.getKey());
l.remove(c);
assertSame(a, l.removeFirst());
assertSame(b, l.removeFirst());
assertNull(l.removeFirst());
//Test clear
l.addLast("d");
l.clear();
assertNull(l.removeFirst());
assertNull(l.removeFirst());
//Test iterator and contains
l.clear();
Iterator iter=l.iterator();
assertTrue(! iter.hasNext());
assertTrue(! l.contains(a));
a=l.addLast("a");
assertTrue(l.contains(a));
iter=l.iterator();
assertTrue(iter.next()==a);
assertTrue(! iter.hasNext());
b=l.addLast("b");
assertTrue(! l.contains(c));
c=l.addLast("c");
assertTrue(l.contains(b));
assertTrue(l.contains(c));
iter=l.iterator();
assertSame(a, iter.next());
assertSame(b, iter.next());
assertSame(c, iter.next());
assertTrue(! iter.hasNext());
}
}