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 Bringertimport com.google.common.collect.testing.features.ListFeature;
221d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert
231d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringertimport junit.framework.Test;
241d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringertimport junit.framework.TestSuite;
251d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert
261d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringertimport java.lang.reflect.Method;
271d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringertimport java.util.AbstractList;
281d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringertimport java.util.AbstractSequentialList;
291d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringertimport java.util.ArrayList;
301d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringertimport java.util.Arrays;
311d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringertimport java.util.Collection;
321d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringertimport java.util.Collections;
331d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringertimport java.util.LinkedList;
341d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringertimport java.util.List;
351d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringertimport java.util.ListIterator;
361d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringertimport java.util.concurrent.CopyOnWriteArrayList;
371d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert
381d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert/**
391d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert * Generates a test suite covering the {@link List} implementations in the
401d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert * {@link java.util} package. Can be subclassed to specify tests that should
411d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert * be suppressed.
421d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert *
431d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert * @author Kevin Bourrillion
441d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert */
451d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringertpublic class TestsForListsInJavaUtil {
461d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert  public static Test suite() {
471d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert    return new TestsForListsInJavaUtil().allTests();
481d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert  }
491d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert
501d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert  public Test allTests() {
511d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert    TestSuite suite = new TestSuite("java.util Lists");
521d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert    suite.addTest(testsForEmptyList());
531d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert    suite.addTest(testsForSingletonList());
541d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert    suite.addTest(testsForArraysAsList());
551d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert    suite.addTest(testsForArrayList());
561d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert    suite.addTest(testsForLinkedList());
571d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert    suite.addTest(testsForCopyOnWriteArrayList());
581d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert    suite.addTest(testsForUnmodifiableList());
591d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert    suite.addTest(testsForCheckedList());
601d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert    suite.addTest(testsForAbstractList());
611d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert    suite.addTest(testsForAbstractSequentialList());
621d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert    return suite;
631d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert  }
641d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert
651d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert  protected Collection<Method> suppressForEmptyList() {
661d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert    return Collections.emptySet();
671d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert  }
681d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert  protected Collection<Method> suppressForSingletonList() {
691d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert    return Collections.emptySet();
701d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert  }
711d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert  protected Collection<Method> suppressForArraysAsList() {
721d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert    return Collections.emptySet();
731d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert  }
741d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert  protected Collection<Method> suppressForArrayList() {
751d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert    return Collections.emptySet();
761d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert  }
771d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert  protected Collection<Method> suppressForLinkedList() {
781d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert    return Collections.emptySet();
791d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert  }
801d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert  protected Collection<Method> suppressForCopyOnWriteArrayList() {
811d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert    return Collections.emptySet();
821d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert  }
831d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert  protected Collection<Method> suppressForUnmodifiableList() {
841d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert    return Collections.emptySet();
851d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert  }
861d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert  protected Collection<Method> suppressForCheckedList() {
871d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert    return Collections.emptySet();
881d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert  }
891d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert  protected Collection<Method> suppressForAbstractList() {
901d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert    return Collections.emptySet();
911d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert  }
921d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert  protected Collection<Method> suppressForAbstractSequentialList() {
931d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert    return Collections.emptySet();
941d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert  }
951d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert
961d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert  public Test testsForEmptyList() {
971d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert    return ListTestSuiteBuilder
981d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert        .using(new TestStringListGenerator() {
991d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert            @Override public List<String> create(String[] elements) {
1001d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert              return Collections.emptyList();
1011d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert            }
1021d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert          })
1031d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert        .named("emptyList")
1041d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert        .withFeatures(
1051d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert            CollectionFeature.NONE,
1061d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert            CollectionSize.ZERO)
1071d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert        .suppressing(suppressForEmptyList())
1081d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert        .createTestSuite();
1091d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert  }
1101d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert
1111d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert  public Test testsForSingletonList() {
1121d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert    return ListTestSuiteBuilder
1131d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert        .using(new TestStringListGenerator() {
1141d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert            @Override public List<String> create(String[] elements) {
1151d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert              return Collections.singletonList(elements[0]);
1161d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert            }
1171d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert          })
1181d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert        .named("singletonList")
1191d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert        .withFeatures(
1201d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert            CollectionFeature.NONE,
1211d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert            CollectionFeature.ALLOWS_NULL_VALUES,
1221d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert            CollectionSize.ONE)
1231d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert        .suppressing(suppressForSingletonList())
1241d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert        .createTestSuite();
1251d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert  }
1261d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert
1271d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert  public Test testsForArraysAsList() {
1281d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert    return ListTestSuiteBuilder
1291d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert        .using(new TestStringListGenerator() {
1301d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert            @Override public List<String> create(String[] elements) {
1311d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert              return Arrays.asList(elements.clone());
1321d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert            }
1331d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert          })
1341d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert        .named("Arrays.asList")
1351d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert        .withFeatures(
1361d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert            ListFeature.SUPPORTS_SET,
1371d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert            CollectionFeature.ALLOWS_NULL_VALUES,
1381d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert            CollectionSize.ANY)
1391d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert        .suppressing(suppressForArraysAsList())
1401d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert        .createTestSuite();
1411d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert  }
1421d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert
1431d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert  public Test testsForArrayList() {
1441d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert    return ListTestSuiteBuilder
1451d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert        .using(new TestStringListGenerator() {
1461d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert            @Override public List<String> create(String[] elements) {
1471d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert              return new ArrayList<String>(MinimalCollection.of(elements));
1481d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert            }
1491d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert          })
1501d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert        .named("ArrayList")
1511d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert        .withFeatures(
1521d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert            ListFeature.GENERAL_PURPOSE,
1531d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert            CollectionFeature.ALLOWS_NULL_VALUES,
1541d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert            CollectionSize.ANY)
1551d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert        .suppressing(suppressForArrayList())
1561d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert        .createTestSuite();
1571d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert  }
1581d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert
1591d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert  public Test testsForLinkedList() {
1601d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert    return ListTestSuiteBuilder
1611d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert        .using(new TestStringListGenerator() {
1621d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert            @Override public List<String> create(String[] elements) {
1631d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert              return new LinkedList<String>(MinimalCollection.of(elements));
1641d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert            }
1651d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert          })
1661d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert        .named("LinkedList")
1671d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert        .withFeatures(
1681d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert            ListFeature.GENERAL_PURPOSE,
1691d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert            CollectionFeature.ALLOWS_NULL_VALUES,
1701d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert            CollectionSize.ANY)
1711d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert        .suppressing(suppressForLinkedList())
1721d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert        .createTestSuite();
1731d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert  }
1741d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert
1751d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert  public Test testsForCopyOnWriteArrayList() {
1761d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert    return ListTestSuiteBuilder
1771d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert        .using(new TestStringListGenerator() {
1781d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert            @Override public List<String> create(String[] elements) {
1791d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert              return new CopyOnWriteArrayList<String>(
1801d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert                  MinimalCollection.of(elements));
1811d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert            }
1821d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert          })
1831d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert        .named("CopyOnWriteArrayList")
1841d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert        .withFeatures(
1851d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert            ListFeature.GENERAL_PURPOSE,
1861d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert            CollectionFeature.ALLOWS_NULL_VALUES,
1871d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert            CollectionSize.ANY)
1881d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert        .suppressing(suppressForCopyOnWriteArrayList())
1891d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert        .createTestSuite();
1901d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert  }
1911d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert
1921d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert  public Test testsForUnmodifiableList() {
1931d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert    return ListTestSuiteBuilder
1941d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert        .using(new TestStringListGenerator() {
1951d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert            @Override public List<String> create(String[] elements) {
1961d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert              List<String> innerList = new ArrayList<String>();
1971d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert              Collections.addAll(innerList, elements);
1981d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert              return Collections.unmodifiableList(innerList);
1991d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert            }
2001d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert          })
2011d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert        .named("unmodifiableList/ArrayList")
2021d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert        .withFeatures(
2031d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert            CollectionFeature.NONE,
2041d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert            CollectionFeature.ALLOWS_NULL_VALUES,
2051d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert            CollectionSize.ANY)
2061d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert        .suppressing(suppressForUnmodifiableList())
2071d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert        .createTestSuite();
2081d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert  }
2091d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert
2101d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert  public Test testsForCheckedList() {
2111d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert    return ListTestSuiteBuilder
2121d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert        .using(new TestStringListGenerator() {
2131d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert            @Override public List<String> create(String[] elements) {
2141d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert              List<String> innerList = new ArrayList<String>();
2151d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert              Collections.addAll(innerList, elements);
2161d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert              return Collections.checkedList(innerList, String.class);
2171d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert            }
2181d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert          })
2191d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert        .named("checkedList/ArrayList")
2201d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert        .withFeatures(
2211d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert            ListFeature.GENERAL_PURPOSE,
2221d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert            CollectionFeature.RESTRICTS_ELEMENTS,
2231d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert            CollectionFeature.ALLOWS_NULL_VALUES,
2241d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert            CollectionSize.ANY)
2251d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert        .suppressing(suppressForCheckedList())
2261d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert        .createTestSuite();
2271d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert  }
2281d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert
2291d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert  public Test testsForAbstractList() {
2301d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert    return ListTestSuiteBuilder
2311d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert        .using(new TestStringListGenerator () {
2321d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert            @Override protected List<String> create(final String[] elements) {
2331d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert              return new AbstractList<String>() {
2341d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert                @Override public int size() {
2351d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert                  return elements.length;
2361d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert                }
2371d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert                @Override public String get(int index) {
2381d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert                  return elements[index];
2391d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert                }
2401d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert              };
2411d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert            }
2421d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert          })
2431d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert        .named("AbstractList")
2441d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert        .withFeatures(
2451d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert            CollectionFeature.NONE,
2461d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert            CollectionFeature.ALLOWS_NULL_VALUES,
2471d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert            CollectionSize.ANY)
2481d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert        .suppressing(suppressForAbstractList())
2491d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert        .createTestSuite();
2501d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert  }
2511d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert
2521d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert  public Test testsForAbstractSequentialList() {
2531d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert    return ListTestSuiteBuilder
2541d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert        .using(new TestStringListGenerator () {
2551d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert            @Override protected List<String> create(final String[] elements) {
2561d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert              // For this test we trust ArrayList works
2571d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert              final List<String> list = new ArrayList<String>();
2581d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert              Collections.addAll(list, elements);
2591d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert              return new AbstractSequentialList<String>() {
2601d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert                @Override public int size() {
2611d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert                  return list.size();
2621d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert                }
2631d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert                @Override public ListIterator<String> listIterator(int index) {
2641d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert                  return list.listIterator(index);
2651d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert                }
2661d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert              };
2671d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert            }
2681d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert          })
2691d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert        .named("AbstractSequentialList")
2701d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert        .withFeatures(
2711d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert            ListFeature.GENERAL_PURPOSE,
2721d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert            CollectionFeature.ALLOWS_NULL_VALUES,
2731d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert            CollectionSize.ANY)
2741d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert        .suppressing(suppressForAbstractSequentialList())
2751d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert        .createTestSuite();
2761d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert  }
2771d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert}
278