1 /* 2 * Copyright (C) 2012 The Guava Authors 3 * 4 * Licensed under the Apache License, Version 2.0 (the "License"); 5 * you may not use this file except in compliance with the License. 6 * You may obtain a copy of the License at 7 * 8 * http://www.apache.org/licenses/LICENSE-2.0 9 * 10 * Unless required by applicable law or agreed to in writing, software 11 * distributed under the License is distributed on an "AS IS" BASIS, 12 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13 * See the License for the specific language governing permissions and 14 * limitations under the License. 15 */ 16 17 package com.google.common.collect; 18 19 import static java.util.Arrays.asList; 20 21 import com.google.common.testing.NullPointerTester; 22 import com.google.common.testing.SerializableTester; 23 24 import junit.framework.TestCase; 25 26 import java.util.NoSuchElementException; 27 28 /** 29 * Tests for {@link EvictingQueue}. 30 * 31 * @author Kurt Alfred Kluever 32 */ 33 public class EvictingQueueTest extends TestCase { 34 testCreateWithNegativeSize()35 public void testCreateWithNegativeSize() throws Exception { 36 try { 37 EvictingQueue.create(-1); 38 fail(); 39 } catch (IllegalArgumentException expected) { 40 } 41 } 42 testCreateWithZeroSize()43 public void testCreateWithZeroSize() throws Exception { 44 EvictingQueue<String> queue = EvictingQueue.create(0); 45 assertEquals(0, queue.size()); 46 47 assertTrue(queue.add("hi")); 48 assertEquals(0, queue.size()); 49 50 assertTrue(queue.offer("hi")); 51 assertEquals(0, queue.size()); 52 53 assertFalse(queue.remove("hi")); 54 assertEquals(0, queue.size()); 55 56 try { 57 queue.element(); 58 fail(); 59 } catch (NoSuchElementException expected) {} 60 61 assertNull(queue.peek()); 62 assertNull(queue.poll()); 63 try { 64 queue.remove(); 65 fail(); 66 } catch (NoSuchElementException expected) {} 67 } 68 testRemainingCapacity_maxSize0()69 public void testRemainingCapacity_maxSize0() { 70 EvictingQueue<String> queue = EvictingQueue.create(0); 71 assertEquals(0, queue.remainingCapacity()); 72 } 73 testRemainingCapacity_maxSize1()74 public void testRemainingCapacity_maxSize1() { 75 EvictingQueue<String> queue = EvictingQueue.create(1); 76 assertEquals(1, queue.remainingCapacity()); 77 queue.add("hi"); 78 assertEquals(0, queue.remainingCapacity()); 79 } 80 testRemainingCapacity_maxSize3()81 public void testRemainingCapacity_maxSize3() { 82 EvictingQueue<String> queue = EvictingQueue.create(3); 83 assertEquals(3, queue.remainingCapacity()); 84 queue.add("hi"); 85 assertEquals(2, queue.remainingCapacity()); 86 queue.add("hi"); 87 assertEquals(1, queue.remainingCapacity()); 88 queue.add("hi"); 89 assertEquals(0, queue.remainingCapacity()); 90 } 91 testEvictingAfterOne()92 public void testEvictingAfterOne() throws Exception { 93 EvictingQueue<String> queue = EvictingQueue.create(1); 94 assertEquals(0, queue.size()); 95 assertEquals(1, queue.remainingCapacity()); 96 97 assertTrue(queue.add("hi")); 98 assertEquals("hi", queue.element()); 99 assertEquals("hi", queue.peek()); 100 assertEquals(1, queue.size()); 101 assertEquals(0, queue.remainingCapacity()); 102 103 assertTrue(queue.add("there")); 104 assertEquals("there", queue.element()); 105 assertEquals("there", queue.peek()); 106 assertEquals(1, queue.size()); 107 assertEquals(0, queue.remainingCapacity()); 108 109 assertEquals("there", queue.remove()); 110 assertEquals(0, queue.size()); 111 assertEquals(1, queue.remainingCapacity()); 112 } 113 testEvictingAfterThree()114 public void testEvictingAfterThree() throws Exception { 115 EvictingQueue<String> queue = EvictingQueue.create(3); 116 assertEquals(0, queue.size()); 117 assertEquals(3, queue.remainingCapacity()); 118 119 assertTrue(queue.add("one")); 120 assertTrue(queue.add("two")); 121 assertTrue(queue.add("three")); 122 assertEquals("one", queue.element()); 123 assertEquals("one", queue.peek()); 124 assertEquals(3, queue.size()); 125 assertEquals(0, queue.remainingCapacity()); 126 127 assertTrue(queue.add("four")); 128 assertEquals("two", queue.element()); 129 assertEquals("two", queue.peek()); 130 assertEquals(3, queue.size()); 131 assertEquals(0, queue.remainingCapacity()); 132 133 assertEquals("two", queue.remove()); 134 assertEquals(2, queue.size()); 135 assertEquals(1, queue.remainingCapacity()); 136 } 137 testAddAll()138 public void testAddAll() throws Exception { 139 EvictingQueue<String> queue = EvictingQueue.create(3); 140 assertEquals(0, queue.size()); 141 assertEquals(3, queue.remainingCapacity()); 142 143 assertTrue(queue.addAll(asList("one", "two", "three"))); 144 assertEquals("one", queue.element()); 145 assertEquals("one", queue.peek()); 146 assertEquals(3, queue.size()); 147 assertEquals(0, queue.remainingCapacity()); 148 149 assertTrue(queue.addAll(asList("four"))); 150 assertEquals("two", queue.element()); 151 assertEquals("two", queue.peek()); 152 assertEquals(3, queue.size()); 153 assertEquals(0, queue.remainingCapacity()); 154 155 assertEquals("two", queue.remove()); 156 assertEquals(2, queue.size()); 157 assertEquals(1, queue.remainingCapacity()); 158 } 159 testNullPointerExceptions()160 public void testNullPointerExceptions() { 161 NullPointerTester tester = new NullPointerTester(); 162 tester.testAllPublicStaticMethods(EvictingQueue.class); 163 tester.testAllPublicConstructors(EvictingQueue.class); 164 EvictingQueue<String> queue = EvictingQueue.create(5); 165 // The queue must be non-empty so it throws a NPE correctly 166 queue.add("one"); 167 tester.testAllPublicInstanceMethods(queue); 168 } 169 testSerialization()170 public void testSerialization() { 171 EvictingQueue<String> original = EvictingQueue.create(5); 172 original.add("one"); 173 original.add("two"); 174 original.add("three"); 175 176 EvictingQueue<String> copy = SerializableTester.reserialize(original); 177 assertEquals(copy.maxSize, original.maxSize); 178 assertEquals("one", copy.remove()); 179 assertEquals("two", copy.remove()); 180 assertEquals("three", copy.remove()); 181 assertTrue(copy.isEmpty()); 182 } 183 } 184