blob: 05fdbd0e860ac3bbc8c8c60f354b6057ea848d2c [file] [log] [blame]
/*
* Copyright (C) 2012 The Guava Authors
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package com.google.common.collect;
import com.google.common.annotations.GwtCompatible;
import com.google.common.annotations.GwtIncompatible;
import com.google.common.testing.NullPointerTester;
import com.google.common.testing.SerializableTester;
import java.util.AbstractList;
import java.util.List;
import java.util.NoSuchElementException;
import junit.framework.TestCase;
/**
* Tests for {@link EvictingQueue}.
*
* @author Kurt Alfred Kluever
*/
@GwtCompatible(emulated = true)
public class EvictingQueueTest extends TestCase {
public void testCreateWithNegativeSize() throws Exception {
try {
EvictingQueue.create(-1);
fail();
} catch (IllegalArgumentException expected) {
}
}
public void testCreateWithZeroSize() throws Exception {
EvictingQueue<String> queue = EvictingQueue.create(0);
assertEquals(0, queue.size());
assertTrue(queue.add("hi"));
assertEquals(0, queue.size());
assertTrue(queue.offer("hi"));
assertEquals(0, queue.size());
assertFalse(queue.remove("hi"));
assertEquals(0, queue.size());
try {
queue.element();
fail();
} catch (NoSuchElementException expected) {
}
assertNull(queue.peek());
assertNull(queue.poll());
try {
queue.remove();
fail();
} catch (NoSuchElementException expected) {
}
}
public void testRemainingCapacity_maxSize0() {
EvictingQueue<String> queue = EvictingQueue.create(0);
assertEquals(0, queue.remainingCapacity());
}
public void testRemainingCapacity_maxSize1() {
EvictingQueue<String> queue = EvictingQueue.create(1);
assertEquals(1, queue.remainingCapacity());
queue.add("hi");
assertEquals(0, queue.remainingCapacity());
}
public void testRemainingCapacity_maxSize3() {
EvictingQueue<String> queue = EvictingQueue.create(3);
assertEquals(3, queue.remainingCapacity());
queue.add("hi");
assertEquals(2, queue.remainingCapacity());
queue.add("hi");
assertEquals(1, queue.remainingCapacity());
queue.add("hi");
assertEquals(0, queue.remainingCapacity());
}
public void testEvictingAfterOne() throws Exception {
EvictingQueue<String> queue = EvictingQueue.create(1);
assertEquals(0, queue.size());
assertEquals(1, queue.remainingCapacity());
assertTrue(queue.add("hi"));
assertEquals("hi", queue.element());
assertEquals("hi", queue.peek());
assertEquals(1, queue.size());
assertEquals(0, queue.remainingCapacity());
assertTrue(queue.add("there"));
assertEquals("there", queue.element());
assertEquals("there", queue.peek());
assertEquals(1, queue.size());
assertEquals(0, queue.remainingCapacity());
assertEquals("there", queue.remove());
assertEquals(0, queue.size());
assertEquals(1, queue.remainingCapacity());
}
public void testEvictingAfterThree() throws Exception {
EvictingQueue<String> queue = EvictingQueue.create(3);
assertEquals(0, queue.size());
assertEquals(3, queue.remainingCapacity());
assertTrue(queue.add("one"));
assertTrue(queue.add("two"));
assertTrue(queue.add("three"));
assertEquals("one", queue.element());
assertEquals("one", queue.peek());
assertEquals(3, queue.size());
assertEquals(0, queue.remainingCapacity());
assertTrue(queue.add("four"));
assertEquals("two", queue.element());
assertEquals("two", queue.peek());
assertEquals(3, queue.size());
assertEquals(0, queue.remainingCapacity());
assertEquals("two", queue.remove());
assertEquals(2, queue.size());
assertEquals(1, queue.remainingCapacity());
}
public void testAddAll() throws Exception {
EvictingQueue<String> queue = EvictingQueue.create(3);
assertEquals(0, queue.size());
assertEquals(3, queue.remainingCapacity());
assertTrue(queue.addAll(ImmutableList.of("one", "two", "three")));
assertEquals("one", queue.element());
assertEquals("one", queue.peek());
assertEquals(3, queue.size());
assertEquals(0, queue.remainingCapacity());
assertTrue(queue.addAll(ImmutableList.of("four")));
assertEquals("two", queue.element());
assertEquals("two", queue.peek());
assertEquals(3, queue.size());
assertEquals(0, queue.remainingCapacity());
assertEquals("two", queue.remove());
assertEquals(2, queue.size());
assertEquals(1, queue.remainingCapacity());
}
public void testAddAll_largeList() {
final List<String> list = ImmutableList.of("one", "two", "three", "four", "five");
List<String> misbehavingList =
new AbstractList<String>() {
@Override
public int size() {
return list.size();
}
@Override
public String get(int index) {
if (index < 2) {
throw new AssertionError();
}
return list.get(index);
}
};
EvictingQueue<String> queue = EvictingQueue.create(3);
assertTrue(queue.addAll(misbehavingList));
assertEquals("three", queue.remove());
assertEquals("four", queue.remove());
assertEquals("five", queue.remove());
assertTrue(queue.isEmpty());
}
@GwtIncompatible // NullPointerTester
public void testNullPointerExceptions() {
NullPointerTester tester = new NullPointerTester();
tester.testAllPublicStaticMethods(EvictingQueue.class);
tester.testAllPublicConstructors(EvictingQueue.class);
EvictingQueue<String> queue = EvictingQueue.create(5);
// The queue must be non-empty so it throws a NPE correctly
queue.add("one");
tester.testAllPublicInstanceMethods(queue);
}
public void testSerialization() {
EvictingQueue<String> original = EvictingQueue.create(5);
original.add("one");
original.add("two");
original.add("three");
EvictingQueue<String> copy = SerializableTester.reserialize(original);
assertEquals(copy.maxSize, original.maxSize);
assertEquals("one", copy.remove());
assertEquals("two", copy.remove());
assertEquals("three", copy.remove());
assertTrue(copy.isEmpty());
}
}