• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
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 com.google.common.collect.testing.SafeTreeSet;
20 import com.google.common.collect.testing.SetTestSuiteBuilder;
21 import com.google.common.collect.testing.TestStringSetGenerator;
22 import com.google.common.collect.testing.features.CollectionFeature;
23 import com.google.common.collect.testing.features.CollectionSize;
24 
25 import junit.framework.Test;
26 import junit.framework.TestSuite;
27 
28 import java.util.Arrays;
29 import java.util.Collection;
30 import java.util.Collections;
31 import java.util.List;
32 import java.util.NavigableSet;
33 import java.util.Set;
34 import java.util.SortedSet;
35 
36 /**
37  * Tests for {@code ForwardingNavigableSet}.
38  *
39  * @author Louis Wasserman
40  */
41 public class ForwardingNavigableSetTest extends ForwardingSortedSetTest {
42   static class StandardImplForwardingNavigableSet<T>
43       extends ForwardingNavigableSet<T> {
44     private final NavigableSet<T> backingSet;
45 
StandardImplForwardingNavigableSet(NavigableSet<T> backingSet)46     StandardImplForwardingNavigableSet(NavigableSet<T> backingSet) {
47       this.backingSet = backingSet;
48     }
49 
delegate()50     @Override protected NavigableSet<T> delegate() {
51       return backingSet;
52     }
53 
equals(Object object)54     @Override public boolean equals(Object object) {
55       return standardEquals(object);
56     }
57 
hashCode()58     @Override public int hashCode() {
59       return standardHashCode();
60     }
61 
addAll(Collection<? extends T> collection)62     @Override public boolean addAll(Collection<? extends T> collection) {
63       return standardAddAll(collection);
64     }
65 
clear()66     @Override public void clear() {
67       standardClear();
68     }
69 
contains(Object object)70     @Override public boolean contains(Object object) {
71       return standardContains(object);
72     }
73 
containsAll(Collection<?> collection)74     @Override public boolean containsAll(Collection<?> collection) {
75       return standardContainsAll(collection);
76     }
77 
remove(Object object)78     @Override public boolean remove(Object object) {
79       return standardRemove(object);
80     }
81 
removeAll(Collection<?> collection)82     @Override public boolean removeAll(Collection<?> collection) {
83       return standardRemoveAll(collection);
84     }
85 
retainAll(Collection<?> collection)86     @Override public boolean retainAll(Collection<?> collection) {
87       return standardRetainAll(collection);
88     }
89 
toArray()90     @Override public Object[] toArray() {
91       return standardToArray();
92     }
93 
toArray(T[] array)94     @Override public <T> T[] toArray(T[] array) {
95       return standardToArray(array);
96     }
97 
toString()98     @Override public String toString() {
99       return standardToString();
100     }
101 
subSet(T fromElement, T toElement)102     @Override public SortedSet<T> subSet(T fromElement, T toElement) {
103       return standardSubSet(fromElement, toElement);
104     }
105 
106     @Override
lower(T e)107     public T lower(T e) {
108       return standardLower(e);
109     }
110 
111     @Override
floor(T e)112     public T floor(T e) {
113       return standardFloor(e);
114     }
115 
116     @Override
ceiling(T e)117     public T ceiling(T e) {
118       return standardCeiling(e);
119     }
120 
121     @Override
higher(T e)122     public T higher(T e) {
123       return standardHigher(e);
124     }
125 
126     @Override
pollFirst()127     public T pollFirst() {
128       return standardPollFirst();
129     }
130 
131     @Override
pollLast()132     public T pollLast() {
133       return standardPollLast();
134     }
135 
136     @Override
headSet(T toElement)137     public SortedSet<T> headSet(T toElement) {
138       return standardHeadSet(toElement);
139     }
140 
141     @Override
tailSet(T fromElement)142     public SortedSet<T> tailSet(T fromElement) {
143       return standardTailSet(fromElement);
144     }
145   }
146 
suite()147   public static Test suite() {
148     TestSuite suite = new TestSuite();
149 
150     suite.addTestSuite(ForwardingNavigableSetTest.class);
151     suite.addTest(
152         SetTestSuiteBuilder.using(new TestStringSetGenerator() {
153           @Override protected Set<String> create(String[] elements) {
154             return new StandardImplForwardingNavigableSet<String>(
155                 new SafeTreeSet<String>(Arrays.asList(elements)));
156           }
157 
158           @Override public List<String> order(List<String> insertionOrder) {
159             return Lists.newArrayList(Sets.newTreeSet(insertionOrder));
160           }
161         }).named(
162             "ForwardingNavigableSet[SafeTreeSet] with standard implementations")
163             .withFeatures(CollectionSize.ANY, CollectionFeature.KNOWN_ORDER,
164                 CollectionFeature.GENERAL_PURPOSE).createTestSuite());
165     suite.addTest(
166         SetTestSuiteBuilder.using(new TestStringSetGenerator() {
167           @Override protected Set<String> create(String[] elements) {
168             SafeTreeSet<String> set = new SafeTreeSet<String>(Ordering.natural().nullsFirst());
169             Collections.addAll(set, elements);
170             return new StandardImplForwardingNavigableSet<String>(set);
171           }
172 
173           @Override public List<String> order(List<String> insertionOrder) {
174             return Lists.newArrayList(Sets.newTreeSet(insertionOrder));
175           }
176         }).named(
177             "ForwardingNavigableSet[SafeTreeSet[Ordering.natural.nullsFirst]]"
178                 + " with standard implementations")
179             .withFeatures(CollectionSize.ANY, CollectionFeature.KNOWN_ORDER,
180                 CollectionFeature.GENERAL_PURPOSE, CollectionFeature.ALLOWS_NULL_VALUES)
181                 .createTestSuite());
182 
183     return suite;
184   }
185 
setUp()186   @Override public void setUp() throws Exception {
187     super.setUp();
188     /*
189      * Class parameters must be raw, so we can't create a proxy with generic
190      * type arguments. The created proxy only records calls and returns null, so
191      * the type is irrelevant at runtime.
192      */
193     @SuppressWarnings("unchecked")
194     final NavigableSet<String> navigableSet
195         = createProxyInstance(NavigableSet.class);
196     forward = new ForwardingNavigableSet<String>() {
197       @Override protected NavigableSet<String> delegate() {
198         return navigableSet;
199       }
200     };
201   }
202 
testLower()203   public void testLower() {
204     forward().lower("a");
205     assertEquals("[lower(Object)]", getCalls());
206   }
207 
testFloor()208   public void testFloor() {
209     forward().floor("a");
210     assertEquals("[floor(Object)]", getCalls());
211   }
212 
testCeiling()213   public void testCeiling() {
214     forward().ceiling("a");
215     assertEquals("[ceiling(Object)]", getCalls());
216   }
217 
testHigher()218   public void testHigher() {
219     forward().higher("a");
220     assertEquals("[higher(Object)]", getCalls());
221   }
222 
testPollFirst()223   public void testPollFirst() {
224     forward().pollFirst();
225     assertEquals("[pollFirst]", getCalls());
226   }
227 
testPollLast()228   public void testPollLast() {
229     forward().pollLast();
230     assertEquals("[pollLast]", getCalls());
231   }
232 
testDescendingIterator()233   public void testDescendingIterator() {
234     forward().descendingIterator();
235     assertEquals("[descendingIterator]", getCalls());
236   }
237 
testHeadSet_K_Boolean()238   public void testHeadSet_K_Boolean() {
239     forward().headSet("key", false);
240     assertEquals("[headSet(Object,boolean)]", getCalls());
241   }
242 
testSubSet_K_Boolean_K_Boolean()243   public void testSubSet_K_Boolean_K_Boolean() {
244     forward().subSet("a", true, "b", false);
245     assertEquals("[subSet(Object,boolean,Object,boolean)]", getCalls());
246   }
247 
testTailSet_K_Boolean()248   public void testTailSet_K_Boolean() {
249     forward().tailSet("key", false);
250     assertEquals("[tailSet(Object,boolean)]", getCalls());
251   }
252 
forward()253   @Override NavigableSet<String> forward() {
254     return (NavigableSet<String>) super.forward();
255   }
256 }
257