package com.limegroup.gnutella.util; import java.util.Iterator; import java.util.NoSuchElementException; import junit.framework.Test; /** * Tests TrieNode. */ public class TrieNodeTest extends com.limegroup.gnutella.util.BaseTestCase { public TrieNodeTest(String name) { super(name); } public static Test suite() { return buildTestSuite(TrieNodeTest.class); } /** * Individual test functions * All named: public void testXXX() */ // Basic TrieNode operations public void testTrieNode() { final TrieNode node = new TrieNode(); final Object value = "abc"; final TrieNode childA = new TrieNode(); final TrieNode childB = new TrieNode(); final TrieNode childC = new TrieNode(); final String labelA = "a very long key"; final String labelB = "b"; final String labelC = "c is also a key"; Iterator iter = null; TrieEdge tmp = null; assertNull(node.getValue()); node.setValue(value); assertSame(value, node.getValue()); assertNull(node.get('a')); assertNotNull(iter = node.childrenForward()); assertFalse(iter.hasNext()); // Test put/get. Note we insert at beginning and end of list. node.put(labelB, childB); assertNull(node.get('a')); assertNotNull(tmp = node.get('b')); assertSame(childB, tmp.getChild()); assertNull(node.get('c')); assertNull(node.get('d')); node.put(labelA, childA); assertNotNull(tmp = node.get('a')); assertSame(childA, tmp.getChild()); assertNotNull(tmp = node.get('b')); assertSame(childB, tmp.getChild()); assertNull(node.get('c')); assertNull(node.get('d')); node.put(labelC, childC); assertNotNull(tmp = node.get('a')); assertSame(childA, tmp.getChild()); assertNotNull(tmp = node.get('b')); assertSame(childB, tmp.getChild()); assertNotNull(tmp = node.get('c')); assertSame(childC, tmp.getChild()); assertNull(node.get('d')); // Test child iterator assertNotNull(iter = node.childrenForward()); assertSame(childA, (TrieNode)iter.next()); assertSame(childB, (TrieNode)iter.next()); assertSame(childC, (TrieNode)iter.next()); assertFalse(iter.hasNext()); try { iter.next(); assertTrue("expected NoSuchElementException", false); } catch (NoSuchElementException e) { } // Test label iterator assertNotNull(iter = node.labelsForward()); assertSame(labelA, iter.next()); assertSame(labelB, iter.next()); assertSame(labelC, iter.next()); assertFalse(iter.hasNext()); try { iter.next(); assertTrue("expected NoSuchElementException", false); } catch (NoSuchElementException e) { } // Test remove operations. node.remove('a'); assertNull(node.get('a')); assertNotNull(tmp = node.get('b')); assertSame(childB, tmp.getChild()); assertNotNull(tmp = node.get('c')); assertSame(childC, tmp.getChild()); node.remove('c'); assertNull(node.get('a')); assertNotNull(tmp = node.get('b')); assertSame(childB, tmp.getChild()); assertNull(node.get('c')); node.remove('b'); assertNull(node.get('a')); assertNull(node.get('b')); assertNull(node.get('c')); // Test empty child iterator assertNotNull(iter = node.childrenForward()); assertFalse(iter.hasNext()); try { iter.next(); fail("expected NoSuchElementException"); } catch (NoSuchElementException e) { } // Test empty label iterator assertNotNull(iter = node.labelsForward()); assertFalse(iter.hasNext()); try { iter.next(); fail("expected NoSuchElementException"); } catch (NoSuchElementException e) { } } }