/**
 * The test class BTNodeTest.
 *
 * @author  Dr. Jody Paul
 * @version 2005 August 31
 */
public class BTNodeTest extends junit.framework.TestCase
{
    BTNode bTNode1, bTNode2;
    /**
     * Default constructor for test class BTNodeTest
     */
    public BTNodeTest()
    {
    }

    /**
     * Sets up the test fixture.
     * Called before every test case method.
     */
    protected void setUp()
    {
        bTNode1 = new BTNode();
		bTNode2 = new BTNode(bTNode1, null, null, new Integer(9));
    }

    /**
     * Tears down the test fixture.
     * Called after every test case method.
     */
    protected void tearDown()
    {
    }

    public void testConstruction()
    {
        assertEquals(bTNode1.getLeftChild(), null);
        assertSame(bTNode2.getLeftChild(), bTNode1);
    }


	public void testGettersAndSetters()
	{
		assertNull(bTNode1.getData());
		assertNull(bTNode2.getData());
		bTNode1.setData("Data A");
		assertSame("Data A", bTNode1.getData());
		assertNull(bTNode1.getLeftChild());
		assertSame(bTNode1, bTNode2.getLeftChild());
		assertNull(bTNode1.getRightChild());
		assertNull(bTNode2.getRightChild());
		bTNode1.setLeftChild(bTNode2);
		assertSame(bTNode2, bTNode1.getLeftChild());
		bTNode1.setRightChild(bTNode2);
		assertSame(bTNode2, bTNode1.getRightChild());
	}

	public void testKeys()
	{
		assertNull(bTNode1.getKey());
		assertTrue(new Integer(9).equals(bTNode2.getKey()));
		bTNode1.setKey(new Integer(9));
		assertTrue(bTNode2.getKey().equals(bTNode1.getKey()));
		bTNode1.setKey(new Integer(7));
		assertFalse(bTNode2.getKey().equals(bTNode1.getKey()));
		assertTrue(0 < bTNode2.getKey().compareTo(bTNode1.getKey()));
	}

	public void testIsLeaf()
	{
		assertEquals(true, bTNode1.isLeaf());
		assertEquals(false, bTNode2.isLeaf());
		bTNode1.setRightChild(bTNode2);
		assertEquals(false, bTNode1.isLeaf());
	}

	public void testToString()
	{
		assertEquals("java.lang.String", bTNode1.toString().getClass().getName());
		assertNotNull(bTNode2.toString());
	}
}

