/**
 * Test class for InputValidatorQueue.
 * @author Dr. Jody Paul
 */
public class InputValidatorQueueTest extends junit.framework.TestCase
{
    InputValidatorQueue ivq1;

    /** Called before every test case method. */
    protected void setUp() {
        ivq1 = new InputValidatorQueue();
    }

    public void testConstructor()
    {
        assertEquals(true, ivq1.isEmpty());
    }

    public void testIsEmpty()
    {
        ivq1 = new InputValidatorQueue();
        assertEquals(true, ivq1.isEmpty());
        ivq1.enqueue("X");
        assertEquals(false, ivq1.isEmpty());
    }

	public void testEnqueue()
	{
		assertEquals(true, ivq1.enqueue("OK"));
		assertEquals(false, ivq1.enqueue("(BAD"));
		assertEquals(true, ivq1.enqueue("(A[B{C<DE>}F]G)OK"));
		assertEquals(false, ivq1.enqueue("(((BAD]]]"));
		assertEquals(true, ivq1.enqueue(""));
		assertEquals(true, ivq1.enqueue("OK"));
	}

	public void testEnqueueList()
	{
	    java.util.List<String> ql = new java.util.ArrayList<String>();
		ql.add("OK");
		ql.add("(A[B{C<DE>}F]G)OK");
		ql.add("");
		ql.add("OK");
		assertEquals(true, ivq1.enqueue(ql));
		ql.add("(BAD");
		assertEquals(false, ivq1.enqueue(ql));
		ql.add("(((BAD]]]");
		assertEquals(false, ivq1.enqueue(ql));
	}

	public void testDequeue() throws Exception
	{
	    String temp;
	    try {
	        temp = ivq1.dequeue();
	        assertTrue(false);
	    } catch (Exception e) {
	        assertTrue(true);
    	    ivq1.enqueue("OK");
    	    temp = ivq1.dequeue();
    	    assertEquals(true, temp.equals("OK"));
    	    assertEquals(true, ivq1.isEmpty());
    	    ivq1.enqueue("GOOD");
    	    ivq1.enqueue("");
    	    ivq1.enqueue("({[<X>]})");
    	    assertEquals(true, ivq1.dequeue().equals("GOOD"));
    	    assertEquals(true, ivq1.dequeue().equals(""));
    	    assertEquals(true, ivq1.dequeue().equals("({[<X>]})"));
    	    assertEquals(true, ivq1.isEmpty());
    	}
	}
}
