11d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert/* 21d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert * Copyright (C) 2009 The Guava Authors 31d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert * 41d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert * Licensed under the Apache License, Version 2.0 (the "License"); 51d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert * you may not use this file except in compliance with the License. 61d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert * You may obtain a copy of the License at 71d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert * 81d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert * http://www.apache.org/licenses/LICENSE-2.0 91d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert * 101d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert * Unless required by applicable law or agreed to in writing, software 111d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert * distributed under the License is distributed on an "AS IS" BASIS, 121d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 131d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert * See the License for the specific language governing permissions and 141d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert * limitations under the License. 151d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert */ 161d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 171d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringertpackage com.google.common.collect.testing; 181d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 191d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringertimport com.google.common.collect.testing.features.CollectionFeature; 201d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringertimport com.google.common.collect.testing.features.CollectionSize; 211d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 221d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringertimport junit.framework.Test; 231d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringertimport junit.framework.TestSuite; 241d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 251d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringertimport java.lang.reflect.Method; 261d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringertimport java.util.Collection; 271d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringertimport java.util.Collections; 281d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringertimport java.util.LinkedList; 291d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringertimport java.util.PriorityQueue; 301d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringertimport java.util.Queue; 311d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringertimport java.util.concurrent.ArrayBlockingQueue; 321d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringertimport java.util.concurrent.ConcurrentLinkedQueue; 331d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringertimport java.util.concurrent.LinkedBlockingQueue; 341d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringertimport java.util.concurrent.PriorityBlockingQueue; 351d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 361d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert/** 371d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert * Generates a test suite covering the {@link Queue} implementations in the 381d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert * {@link java.util} package. Can be subclassed to specify tests that should 391d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert * be suppressed. 401d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert * 411d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert * @author Jared Levy 421d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert */ 431d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringertpublic class TestsForQueuesInJavaUtil { 441d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert public static Test suite() { 451d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert return new TestsForQueuesInJavaUtil().allTests(); 461d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 471d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 481d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert public Test allTests() { 491d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert TestSuite suite = new TestSuite(); 501d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert suite.addTest(testsForLinkedList()); 511d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert suite.addTest(testsForArrayBlockingQueue()); 521d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert suite.addTest(testsForConcurrentLinkedQueue()); 531d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert suite.addTest(testsForLinkedBlockingQueue()); 541d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert suite.addTest(testsForPriorityBlockingQueue()); 551d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert suite.addTest(testsForPriorityQueue()); 561d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert return suite; 571d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 581d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 591d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert protected Collection<Method> suppressForLinkedList() { 601d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert return Collections.emptySet(); 611d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 621d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert protected Collection<Method> suppressForArrayBlockingQueue() { 631d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert return Collections.emptySet(); 641d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 651d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert protected Collection<Method> suppressForConcurrentLinkedQueue() { 661d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert return Collections.emptySet(); 671d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 681d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert protected Collection<Method> suppressForLinkedBlockingQueue() { 691d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert return Collections.emptySet(); 701d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 711d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert protected Collection<Method> suppressForPriorityBlockingQueue() { 721d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert return Collections.emptySet(); 731d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 741d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert protected Collection<Method> suppressForPriorityQueue() { 751d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert return Collections.emptySet(); 761d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 771d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 781d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert public Test testsForLinkedList() { 791d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert return QueueTestSuiteBuilder 801d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert .using(new TestStringQueueGenerator() { 811d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert @Override public Queue<String> create(String[] elements) { 821d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert return new LinkedList<String>(MinimalCollection.of(elements)); 831d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 841d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert }) 851d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert .named("LinkedList") 861d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert .withFeatures( 871d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert CollectionFeature.GENERAL_PURPOSE, 881d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert CollectionFeature.ALLOWS_NULL_VALUES, 891d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert CollectionFeature.KNOWN_ORDER, 901d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert CollectionSize.ANY) 911d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert .skipCollectionTests() // already covered in TestsForListsInJavaUtil 921d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert .suppressing(suppressForLinkedList()) 931d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert .createTestSuite(); 941d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 951d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 961d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert public Test testsForArrayBlockingQueue() { 971d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert return QueueTestSuiteBuilder 981d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert .using(new TestStringQueueGenerator() { 991d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert @Override public Queue<String> create(String[] elements) { 1001d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert return new ArrayBlockingQueue<String>( 1011d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 100, false, MinimalCollection.of(elements)); 1021d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 1031d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert }) 1041d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert .named("ArrayBlockingQueue") 1051d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert .withFeatures( 1061d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert CollectionFeature.GENERAL_PURPOSE, 1071d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert CollectionFeature.KNOWN_ORDER, 1081d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert CollectionSize.ANY) 1091d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert .suppressing(suppressForArrayBlockingQueue()) 1101d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert .createTestSuite(); 1111d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 1121d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 1131d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert public Test testsForConcurrentLinkedQueue() { 1141d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert return QueueTestSuiteBuilder 1151d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert .using(new TestStringQueueGenerator() { 1161d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert @Override public Queue<String> create(String[] elements) { 1171d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert return new ConcurrentLinkedQueue<String>( 1181d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert MinimalCollection.of(elements)); 1191d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 1201d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert }) 1211d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert .named("ConcurrentLinkedQueue") 1221d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert .withFeatures( 1231d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert CollectionFeature.GENERAL_PURPOSE, 1241d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert CollectionFeature.KNOWN_ORDER, 1251d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert CollectionSize.ANY) 1261d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert .suppressing(suppressForConcurrentLinkedQueue()) 1271d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert .createTestSuite(); 1281d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 1291d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 1301d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert public Test testsForLinkedBlockingQueue() { 1311d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert return QueueTestSuiteBuilder 1321d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert .using(new TestStringQueueGenerator() { 1331d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert @Override public Queue<String> create(String[] elements) { 1341d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert return new LinkedBlockingQueue<String>( 1351d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert MinimalCollection.of(elements)); 1361d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 1371d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert }) 1381d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert .named("LinkedBlockingQueue") 1391d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert .withFeatures( 1401d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert CollectionFeature.GENERAL_PURPOSE, 1411d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert CollectionFeature.KNOWN_ORDER, 1421d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert CollectionSize.ANY) 1431d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert .suppressing(suppressForLinkedBlockingQueue()) 1441d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert .createTestSuite(); 1451d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 1461d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 1471d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert // Not specifying KNOWN_ORDER for PriorityQueue and PriorityBlockingQueue 1481d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert // even though they do have it, because our tests interpret KNOWN_ORDER to 1491d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert // also mean that the iterator returns the head element first, which those 1501d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert // don't. 1511d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 1521d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert public Test testsForPriorityBlockingQueue() { 1531d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert return QueueTestSuiteBuilder 1541d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert .using(new TestStringQueueGenerator() { 1551d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert @Override public Queue<String> create(String[] elements) { 1561d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert return new PriorityBlockingQueue<String>( 1571d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert MinimalCollection.of(elements)); 1581d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 1591d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert }) 1601d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert .named("PriorityBlockingQueue") 1611d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert .withFeatures( 1621d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert CollectionFeature.GENERAL_PURPOSE, 1631d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert CollectionSize.ANY) 1641d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert .suppressing(suppressForPriorityBlockingQueue()) 1651d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert .createTestSuite(); 1661d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 1671d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 1681d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert public Test testsForPriorityQueue() { 1691d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert return QueueTestSuiteBuilder 1701d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert .using(new TestStringQueueGenerator() { 1711d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert @Override public Queue<String> create(String[] elements) { 1721d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert return new PriorityQueue<String>(MinimalCollection.of(elements)); 1731d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 1741d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert }) 1751d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert .named("PriorityQueue") 1761d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert .withFeatures( 1771d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert CollectionFeature.GENERAL_PURPOSE, 1781d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert CollectionSize.ANY) 1791d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert .suppressing(suppressForPriorityQueue()) 1801d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert .createTestSuite(); 1811d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 1821d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert} 183