| /* |
| * 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()); |
| } |
| } |