Path: blob/master/test/jdk/java/util/Collections/EmptyNavigableMap.java
41149 views
/*1* Copyright (c) 2011, 2017, Oracle and/or its affiliates. All rights reserved.2* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.3*4* This code is free software; you can redistribute it and/or modify it5* under the terms of the GNU General Public License version 2 only, as6* published by the Free Software Foundation.7*8* This code is distributed in the hope that it will be useful, but WITHOUT9* ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or10* FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License11* version 2 for more details (a copy is included in the LICENSE file that12* accompanied this code).13*14* You should have received a copy of the GNU General Public License version15* 2 along with this work; if not, write to the Free Software Foundation,16* Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.17*18* Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA19* or visit www.oracle.com if you need additional information or have any20* questions.21*/2223/*24* @test25* @bug 4533691 712918526* @summary Unit test for Collections.emptyNavigableMap27* @run testng EmptyNavigableMap28*/2930import org.testng.Assert;31import org.testng.Assert.ThrowingRunnable;32import org.testng.annotations.DataProvider;33import org.testng.annotations.Test;3435import java.math.BigInteger;36import java.util.Arrays;37import java.util.Collection;38import java.util.Collections;39import java.util.Comparator;40import java.util.Iterator;41import java.util.NavigableMap;42import java.util.SortedMap;43import java.util.TreeMap;4445import static org.testng.Assert.assertFalse;46import static org.testng.Assert.assertTrue;4748public class EmptyNavigableMap {4950public static <T> void assertInstance(T actual, Class<? extends T> expected) {51assertInstance(actual, expected, null);52}5354public static <T> void assertInstance(T actual, Class<? extends T> expected, String message) {55assertTrue(expected.isInstance(actual), ((null != message) ? message : "")56+ " " + (actual == null ? "<null>" : actual.getClass().getSimpleName()) + " != " + expected.getSimpleName() + ". ");57}5859public static <T extends Throwable> void assertEmptyNavigableMap(Object obj) {60assertInstance(obj, NavigableMap.class);61assertTrue(((NavigableMap)obj).isEmpty() && (((NavigableMap)obj).size() == 0));62}6364public static <T extends Throwable> void assertEmptyNavigableMap(Object obj, String message) {65assertInstance(obj, NavigableMap.class, message);66assertTrue(((NavigableMap)obj).isEmpty() && (((NavigableMap)obj).size() == 0),67((null != message) ? message : "") + " Not empty. ");68}6970private <T extends Throwable> void assertThrows(Class<T> throwableClass,71ThrowingRunnable runnable,72String message) {73try {74Assert.assertThrows(throwableClass, runnable);75} catch (AssertionError e) {76throw new AssertionError(String.format("%s%n%s",77((null != message) ? message : ""), e.getMessage()), e);78}79}8081private void assertThrowsCCE(ThrowingRunnable r, String s) {82assertThrows(ClassCastException.class, r, s);83}8485private void assertThrowsNPE(ThrowingRunnable r, String s) {86assertThrows(NullPointerException.class, r, s);87}8889private void assertThrowsIAE(ThrowingRunnable r, String s) {90assertThrows(IllegalArgumentException.class, r, s);91}9293public static final boolean isDescending(SortedMap<?,?> set) {94if (null == set.comparator()) {95// natural order96return false;97}9899if (Collections.reverseOrder() == set.comparator()) {100// reverse natural order.101return true;102}103104if (set.comparator().equals(Collections.reverseOrder(Collections.reverseOrder(set.comparator())))) {105// it's a Collections.reverseOrder(Comparator).106return true;107}108109throw new IllegalStateException("can't determine ordering for " + set);110}111112/**113* Tests that the comparator is {@code null}.114*/115@Test(dataProvider = "NavigableMap<?,?>", dataProviderClass = EmptyNavigableMap.class)116public void testComparatorIsNull(String description, NavigableMap<?,?> navigableMap) {117Comparator comparator = navigableMap.comparator();118119assertTrue(comparator == null || comparator == Collections.reverseOrder(), description + ": Comparator (" + comparator + ") is not null.");120}121122/**123* Tests that contains requires Comparable124*/125@Test(dataProvider = "NavigableMap<?,?>", dataProviderClass = EmptyNavigableMap.class)126public void testContainsRequiresComparable(String description, NavigableMap<?,?> navigableMap) {127assertThrowsCCE(128() -> navigableMap.containsKey(new Object()),129description + ": Comparable should be required");130}131132/**133* Tests that the contains method returns {@code false}.134*/135@Test(dataProvider = "NavigableMap<?,?>", dataProviderClass = EmptyNavigableMap.class)136public void testContains(String description, NavigableMap<?,?> navigableMap) {137assertFalse(navigableMap.containsKey(new Integer(1)),138description + ": Should not contain any elements.");139assertFalse(navigableMap.containsValue(new Integer(1)),140description + ": Should not contain any elements.");141}142143/**144* Tests that the containsAll method returns {@code false}.145*/146@Test(dataProvider = "NavigableMap<?,?>", dataProviderClass = EmptyNavigableMap.class)147public void testContainsAll(String description, NavigableMap<?,?> navigableMap) {148TreeMap treeMap = new TreeMap();149treeMap.put("1", 1);150treeMap.put("2", 2);151treeMap.put("3", 3);152153assertFalse(navigableMap.equals(treeMap), "Should not contain any elements.");154}155156/**157* Tests that the iterator is empty.158*/159@Test(dataProvider = "NavigableMap<?,?>", dataProviderClass = EmptyNavigableMap.class)160public void testEmptyIterator(String description, NavigableMap<?,?> navigableMap) {161assertFalse(navigableMap.keySet().iterator().hasNext(), "The iterator is not empty.");162assertFalse(navigableMap.values().iterator().hasNext(), "The iterator is not empty.");163assertFalse(navigableMap.entrySet().iterator().hasNext(), "The iterator is not empty.");164}165166/**167* Tests that the set is empty.168*/169@Test(dataProvider = "NavigableMap<?,?>", dataProviderClass = EmptyNavigableMap.class)170public void testIsEmpty(String description, NavigableMap<?,?> navigableMap) {171assertTrue(navigableMap.isEmpty(), "The set is not empty.");172}173174/**175* Tests the headMap() method.176*/177@Test(dataProvider = "NavigableMap<?,?>", dataProviderClass = EmptyNavigableMap.class)178public void testHeadMap(String description, NavigableMap navigableMap) {179assertThrowsNPE(180() -> { NavigableMap ss = navigableMap.headMap(null, false); },181description + ": Must throw NullPointerException for null element");182183assertThrowsCCE(184() -> { NavigableMap ss = navigableMap.headMap(new Object(), true); },185description + ": Must throw ClassCastException for non-Comparable element");186187NavigableMap ss = navigableMap.headMap("1", false);188189assertEmptyNavigableMap(ss, description + ": Returned value is not empty navigable set.");190}191192/**193* Tests that the size is 0.194*/195@Test(dataProvider = "NavigableMap<?,?>", dataProviderClass = EmptyNavigableMap.class)196public void testSizeIsZero(String description, NavigableMap<?,?> navigableMap) {197assertTrue(0 == navigableMap.size(), "The size of the set is not 0.");198}199200/**201* Tests the subMap() method.202*/203@Test(dataProvider = "NavigableMap<?,?>", dataProviderClass = EmptyNavigableMap.class)204public void testSubMap(String description, NavigableMap navigableMap) {205assertThrowsNPE(206() -> {207SortedMap ss = navigableMap.subMap(null, BigInteger.TEN);208},209description + ": Must throw NullPointerException for null element");210211assertThrowsNPE(212() -> {213SortedMap ss = navigableMap.subMap(BigInteger.ZERO, null);214},215description + ": Must throw NullPointerException for null element");216217assertThrowsNPE(218() -> {219SortedMap ss = navigableMap.subMap(null, null);220},221description + ": Must throw NullPointerException for null element");222223Object obj1 = new Object();224Object obj2 = new Object();225226assertThrowsCCE(227() -> {228SortedMap ss = navigableMap.subMap(obj1, BigInteger.TEN);229},230description + ": Must throw ClassCastException for parameter which is not Comparable.");231232assertThrowsCCE(233() -> {234SortedMap ss = navigableMap.subMap(BigInteger.ZERO, obj2);235},236description + ": Must throw ClassCastException for parameter which is not Comparable.");237238assertThrowsCCE(239() -> {240SortedMap ss = navigableMap.subMap(obj1, obj2);241},242description + ": Must throw ClassCastException for parameter which is not Comparable.");243244// minimal range245navigableMap.subMap(BigInteger.ZERO, false, BigInteger.ZERO, false);246navigableMap.subMap(BigInteger.ZERO, false, BigInteger.ZERO, true);247navigableMap.subMap(BigInteger.ZERO, true, BigInteger.ZERO, false);248navigableMap.subMap(BigInteger.ZERO, true, BigInteger.ZERO, true);249250Object first = isDescending(navigableMap) ? BigInteger.TEN : BigInteger.ZERO;251Object last = (BigInteger.ZERO == first) ? BigInteger.TEN : BigInteger.ZERO;252253assertThrowsIAE(254() -> navigableMap.subMap(last, true, first, false),255description + ": Must throw IllegalArgumentException when fromElement is not less than toElement.");256257navigableMap.subMap(first, true, last, false);258}259260@Test(dataProvider = "NavigableMap<?,?>", dataProviderClass = EmptyNavigableMap.class)261public void testSubMapRanges(String description, NavigableMap navigableMap) {262Object first = isDescending(navigableMap) ? BigInteger.TEN : BigInteger.ZERO;263Object last = (BigInteger.ZERO == first) ? BigInteger.TEN : BigInteger.ZERO;264265NavigableMap subMap = navigableMap.subMap(first, true, last, true);266267// same subset268subMap.subMap(first, true, last, true);269270// slightly smaller271NavigableMap ns = subMap.subMap(first, false, last, false);272// slight expansion273assertThrowsIAE(274() -> ns.subMap(first, true, last, true),275description + ": Expansion should not be allowed");276277// much smaller278subMap.subMap(first, false, BigInteger.ONE, false);279}280281@Test(dataProvider = "NavigableMap<?,?>", dataProviderClass = EmptyNavigableMap.class)282public void testheadMapRanges(String description, NavigableMap navigableMap) {283NavigableMap subMap = navigableMap.headMap(BigInteger.ONE, true);284285// same subset286subMap.headMap(BigInteger.ONE, true);287288// slightly smaller289NavigableMap ns = subMap.headMap(BigInteger.ONE, false);290291// slight expansion292assertThrowsIAE(293() -> ns.headMap(BigInteger.ONE, true),294description + ": Expansion should not be allowed");295296// much smaller297subMap.headMap(isDescending(subMap) ? BigInteger.TEN : BigInteger.ZERO, true);298}299300@Test(dataProvider = "NavigableMap<?,?>", dataProviderClass = EmptyNavigableMap.class)301public void testTailMapRanges(String description, NavigableMap navigableMap) {302NavigableMap subMap = navigableMap.tailMap(BigInteger.ONE, true);303304// same subset305subMap.tailMap(BigInteger.ONE, true);306307// slightly smaller308NavigableMap ns = subMap.tailMap(BigInteger.ONE, false);309310// slight expansion311assertThrowsIAE(312() -> ns.tailMap(BigInteger.ONE, true),313description + ": Expansion should not be allowed");314315// much smaller316subMap.tailMap(isDescending(subMap) ? BigInteger.ZERO : BigInteger.TEN, false);317}318319/**320* Tests the tailMap() method.321*/322@Test(dataProvider = "NavigableMap<?,?>", dataProviderClass = EmptyNavigableMap.class)323public void testTailMap(String description, NavigableMap navigableMap) {324assertThrowsNPE(325() -> navigableMap.tailMap(null),326description + ": Must throw NullPointerException for null element");327328assertThrowsCCE(329() -> navigableMap.tailMap(new Object()),330description);331332NavigableMap ss = navigableMap.tailMap("1", true);333334assertEmptyNavigableMap(ss, description + ": Returned value is not empty navigable set.");335}336337@DataProvider(name = "NavigableMap<?,?>", parallel = true)338public static Iterator<Object[]> navigableMapsProvider() {339return makeNavigableMaps().iterator();340}341342public static Collection<Object[]> makeNavigableMaps() {343return Arrays.asList(344new Object[]{"UnmodifiableNavigableMap(TreeMap)", Collections.unmodifiableNavigableMap(new TreeMap())},345new Object[]{"UnmodifiableNavigableMap(TreeMap.descendingMap()", Collections.unmodifiableNavigableMap(new TreeMap().descendingMap())},346new Object[]{"UnmodifiableNavigableMap(TreeMap.descendingMap().descendingMap()", Collections.unmodifiableNavigableMap(new TreeMap().descendingMap().descendingMap())},347new Object[]{"emptyNavigableMap()", Collections.emptyNavigableMap()},348new Object[]{"emptyNavigableMap().descendingMap()", Collections.emptyNavigableMap().descendingMap()},349new Object[]{"emptyNavigableMap().descendingMap().descendingMap()", Collections.emptyNavigableMap().descendingMap().descendingMap()}350);351}352}353354355