package com.jcwhatever.nucleus.collections.java;
import static org.junit.Assert.assertEquals;
import com.jcwhatever.nucleus.utils.ArrayUtils;
import java.util.NoSuchElementException;
import java.util.Queue;
/**
* Test a {@link Queue} implementation.
*
* <p>Also runs {@link CollectionRunnable} on the queue.</p>
*
* <p>Not a JUnit test case but throws errors via JUnit. Intended
* to be instantiated with a test and the {@link #run} method invoked.</p>
*/
public class QueueRunnable<E> implements Runnable {
final Queue<E> _queue;
final E _value1;
final E _value2;
final E _value3;
/**
* Constructor.
*
* @param queue The queue to test.
* @param value1 A value to use for testing.
* @param value2 A value to use for testing.
* @param value3 A value to use for testing.
*/
public QueueRunnable(Queue<E> queue, E value1, E value2, E value3) {
this._queue = queue;
this._value1 = value1;
this._value2 = value2;
this._value3 = value3;
}
@Override
public void run() {
CollectionRunnable<E> test = new CollectionRunnable<E>(_queue, _value1, _value2, _value3);
test.run();
_queue.clear();
// test queue empty
assertEquals(0, _queue.size());
assertEquals(true, _queue.isEmpty());
// test queue add
assertEquals(true, _queue.add(_value1));
assertEquals(1, _queue.size());
assertEquals(false, _queue.isEmpty());
// add all
assertEquals(true, _queue.addAll(ArrayUtils.asList(_value2, _value3)));
assertEquals(3, _queue.size());
// test clear
_queue.clear();
assertEquals(0, _queue.size());
assertEquals(true, _queue.isEmpty());
// test offer
assertEquals(true, _queue.offer(_value1));
assertEquals(1, _queue.size());
assertEquals(false, _queue.isEmpty());
// test remove
assertEquals(_value1, _queue.remove());
assertEquals(0, _queue.size());
assertEquals(true, _queue.isEmpty());
// test element
_queue.add(_value3);
assertEquals(_value3, _queue.element());
// test peek
assertEquals(_value3, _queue.peek());
// test poll
assertEquals(_value3, _queue.poll());
assertEquals(0, _queue.size());
// test poll against empty queue
assertEquals(null, _queue.poll());
// test remove against empty queue
try {
_queue.remove();
throw new AssertionError("NoSuchElementException expected.");
}
catch (NoSuchElementException ignore) {}
}
}