package org.transgalactica.web.recent;
import static org.hamcrest.Matchers.contains;
import static org.hamcrest.Matchers.hasSize;
import static org.junit.Assert.assertNotNull;
import static org.junit.Assert.assertThat;
import java.io.ByteArrayInputStream;
import java.io.ByteArrayOutputStream;
import java.io.IOException;
import java.io.ObjectInputStream;
import java.io.ObjectOutputStream;
import org.junit.Test;
import org.transgalactica.web.recent.CyclicMostRecentQueue;
import org.transgalactica.web.recent.impl.AbstractRecentLabel;
public class CyclicMostRecentQueueTest {
@Test
public void addElement() {
CyclicMostRecentQueue<MockRecentLabel> queue = new CyclicMostRecentQueue<>();
assertThat(queue, hasSize(0));
queue.add(new MockRecentLabel("1"));
assertThat(queue, hasSize(1));
assertThat(queue, contains(new MockRecentLabel("1")));
}
@Test
public void addExistingElement() {
CyclicMostRecentQueue<MockRecentLabel> queue = new CyclicMostRecentQueue<>();
assertThat(queue, hasSize(0));
queue.add(new MockRecentLabel("1"));
queue.add(new MockRecentLabel("1"));
assertThat(queue, hasSize(1));
assertThat(queue, contains(new MockRecentLabel("1")));
}
@Test
public void addElementQueueFull() {
CyclicMostRecentQueue<MockRecentLabel> queue = new CyclicMostRecentQueue<>(3);
assertThat(queue, hasSize(0));
queue.add(new MockRecentLabel("1"));
queue.add(new MockRecentLabel("2"));
queue.add(new MockRecentLabel("3"));
queue.add(new MockRecentLabel("4"));
assertThat(queue, hasSize(3));
assertThat(queue, contains(new MockRecentLabel("4"), new MockRecentLabel("3"), new MockRecentLabel("2")));
}
@Test
public void serializable() throws IOException, ClassNotFoundException {
CyclicMostRecentQueue<MockRecentLabel> queue = new CyclicMostRecentQueue<>();
queue.add(new MockRecentLabel("1"));
ByteArrayOutputStream bin = new ByteArrayOutputStream();
ObjectOutputStream out = new ObjectOutputStream(bin);
out.writeObject(queue);
out.flush();
out.close();
ObjectInputStream in = new ObjectInputStream(new ByteArrayInputStream(bin.toByteArray()));
Object ts = in.readObject();
assertNotNull(ts);
}
private static class MockRecentLabel extends AbstractRecentLabel<String> {
private static final long serialVersionUID = 1L;
public MockRecentLabel(String key) {
super(key);
}
}
}