package datastructure;
import datastructure.basic.LinkedList;
import datastructure.exception.EmptyQueueException;
import datastructure.basic.Queue;
import org.junit.Assert;
import org.junit.Test;
import org.junit.Before;
import org.junit.After;
import java.lang.reflect.Field;
import java.lang.reflect.InvocationTargetException;
import java.lang.reflect.Method;
/**
* Queue Tester.
*
* @author <Authors name>
* @version 1.0
* @since <pre>二月 24, 2017</pre>
*/
public class QueueTest {
@Before
public void before() throws Exception {
}
@After
public void after() throws Exception {
}
private Queue getQueue() {
Queue queue = new Queue();
for (int i = 1; i <= 5; ++i) {
queue.enQueue(i);
}
return queue;
}
private void assertQueue(Queue queue, Object[] actual) {
Class<Queue> clazz = Queue.class;
LinkedList list = null;
try {
Field listField = clazz.getDeclaredField("list");
listField.setAccessible(true);
list = (LinkedList) listField.get(queue);
} catch (NoSuchFieldException | IllegalAccessException e) {
e.printStackTrace();
Assert.fail();
}
int size = queue.size();
Object[] excepted = new Object[size];
for (int i = 0; i < size; ++i) {
excepted[i] = list.get(i);
}
Assert.assertArrayEquals(excepted, actual);
}
/**
* Method: enQueue(Object o)
*/
@Test
public void testEnQueue() throws Exception {
//TODO: Test goes here...
Queue queue = getQueue();
for (int i = 6; i <= 10; ++i) {
queue.enQueue(i);
}
assertQueue(queue, new Object[]{1, 2, 3, 4, 5, 6, 7, 8, 9, 10});
}
/**
* Method: deQueue()
*/
@Test
public void testDeQueue() throws Exception {
//TODO: Test goes here...
Queue queue = getQueue();
int count = queue.size() + 2;
Object[] values = new Object[count];
boolean[] exceptions = new boolean[count];
for (int i = 0; i < count; ++i) {
try {
values[i] = queue.deQueue();
} catch (EmptyQueueException e) {
exceptions[i] = true;
}
}
Assert.assertArrayEquals(values, new Object[]{1, 2, 3, 4, 5, null, null});
Assert.assertArrayEquals(exceptions, new boolean[]{false, false, false, false, false, true, true});
assertQueue(queue, new Object[0]);
}
}