11d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert/*
21d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert * Copyright (C) 2010 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;
181d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert
191d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringertimport com.google.common.collect.testing.SafeTreeSet;
201d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringertimport com.google.common.collect.testing.SetTestSuiteBuilder;
211d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringertimport com.google.common.collect.testing.TestStringSetGenerator;
221d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringertimport com.google.common.collect.testing.features.CollectionFeature;
231d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringertimport com.google.common.collect.testing.features.CollectionSize;
241d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert
251d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringertimport junit.framework.Test;
261d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringertimport junit.framework.TestSuite;
271d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert
281d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringertimport java.util.Arrays;
291d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringertimport java.util.Collection;
301d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringertimport java.util.List;
311d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringertimport java.util.Set;
321d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringertimport java.util.SortedSet;
331d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert
341d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert/**
351d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert * Tests for {@code ForwardingSortedSet}.
361d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert *
371d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert * @author Louis Wasserman
381d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert */
391d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringertpublic class ForwardingSortedSetTest extends ForwardingSetTest {
401d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert  static class StandardImplForwardingSortedSet<T>
411d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert      extends ForwardingSortedSet<T> {
421d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert    private final SortedSet<T> backingSet;
431d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert
441d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert    StandardImplForwardingSortedSet(SortedSet<T> backingSet) {
451d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert      this.backingSet = backingSet;
461d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert    }
471d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert
481d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert    @Override protected SortedSet<T> delegate() {
491d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert      return backingSet;
501d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert    }
511d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert
521d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert    @Override public boolean equals(Object object) {
531d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert      return standardEquals(object);
541d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert    }
551d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert
561d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert    @Override public int hashCode() {
571d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert      return standardHashCode();
581d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert    }
591d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert
601d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert    @Override public boolean addAll(Collection<? extends T> collection) {
611d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert      return standardAddAll(collection);
621d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert    }
631d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert
641d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert    @Override public void clear() {
651d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert      standardClear();
661d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert    }
671d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert
681d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert    @Override public boolean contains(Object object) {
691d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert      return standardContains(object);
701d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert    }
711d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert
721d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert    @Override public boolean containsAll(Collection<?> collection) {
731d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert      return standardContainsAll(collection);
741d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert    }
751d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert
761d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert    @Override public boolean remove(Object object) {
771d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert      return standardRemove(object);
781d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert    }
791d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert
801d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert    @Override public boolean removeAll(Collection<?> collection) {
811d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert      return standardRemoveAll(collection);
821d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert    }
831d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert
841d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert    @Override public boolean retainAll(Collection<?> collection) {
851d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert      return standardRetainAll(collection);
861d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert    }
871d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert
881d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert    @Override public Object[] toArray() {
891d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert      return standardToArray();
901d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert    }
911d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert
921d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert    @Override public <T> T[] toArray(T[] array) {
931d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert      return standardToArray(array);
941d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert    }
951d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert
961d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert    @Override public String toString() {
971d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert      return standardToString();
981d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert    }
991d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert
1001d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert    @Override public SortedSet<T> subSet(T fromElement, T toElement) {
1011d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert      return standardSubSet(fromElement, toElement);
1021d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert    }
1031d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert  }
1041d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert
1051d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert  public static Test suite(){
1061d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert    TestSuite suite = new TestSuite();
1071d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert
1081d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert    suite.addTestSuite(ForwardingSortedSetTest.class);
1091d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert    suite.addTest(
1101d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert        SetTestSuiteBuilder.using(new TestStringSetGenerator() {
1111d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert          @Override protected Set<String> create(String[] elements) {
1121d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert            return new StandardImplForwardingSortedSet<String>(
1131d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert                new SafeTreeSet<String>(Arrays.asList(elements)));
1141d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert          }
1151d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert
1161d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert          @Override public List<String> order(List<String> insertionOrder) {
1171d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert            return Lists.newArrayList(Sets.newTreeSet(insertionOrder));
1181d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert          }
1191d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert        }).named(
1201d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert            "ForwardingSortedSet[SafeTreeSet] with standard implementations")
1211d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert            .withFeatures(CollectionSize.ANY, CollectionFeature.KNOWN_ORDER,
1221d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert                CollectionFeature.GENERAL_PURPOSE).createTestSuite());
1231d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert
1241d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert    return suite;
1251d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert  }
1261d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert
1271d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert  @Override public void setUp() throws Exception {
1281d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert    super.setUp();
1291d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert    /*
1301d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert     * Class parameters must be raw, so we can't create a proxy with generic
1311d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert     * type arguments. The created proxy only records calls and returns null, so
1321d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert     * the type is irrelevant at runtime.
1331d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert     */
1341d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert    @SuppressWarnings("unchecked")
1351d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert    final SortedSet<String> sortedSet
1361d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert        = createProxyInstance(SortedSet.class);
1371d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert    forward = new ForwardingSortedSet<String>() {
1381d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert      @Override protected SortedSet<String> delegate() {
1391d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert        return sortedSet;
1401d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert      }
1411d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert    };
1421d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert  }
1431d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert
1441d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert  public void testComparator() {
1451d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert    forward().comparator();
1461d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert    assertEquals("[comparator]", getCalls());
1471d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert  }
1481d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert
1491d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert  public void testFirst() {
1501d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert    forward().first();
1511d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert    assertEquals("[first]", getCalls());
1521d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert  }
1531d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert
1541d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert  public void testHeadSet_K() {
1551d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert    forward().headSet("asdf");
1561d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert    assertEquals("[headSet(Object)]", getCalls());
1571d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert  }
1581d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert
1591d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert  public void testLast() {
1601d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert    forward().last();
1611d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert    assertEquals("[last]", getCalls());
1621d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert  }
1631d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert
1641d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert  public void testSubSet_K_K() {
1651d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert    forward().subSet("first", "last");
1661d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert    assertEquals("[subSet(Object,Object)]", getCalls());
1671d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert  }
1681d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert
1691d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert  public void testTailSet_K() {
1701d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert    forward().tailSet("last");
1711d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert    assertEquals("[tailSet(Object)]", getCalls());
1721d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert  }
1731d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert
1741d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert  @Override SortedSet<String> forward() {
1751d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert    return (SortedSet<String>) super.forward();
1761d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert  }
1771d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert}
178