// Path: guava-testlib/src/com/google/common/collect/testing/features/CollectionFeature.java
// @SuppressWarnings("unchecked")
// public enum CollectionFeature implements Feature<Collection> {  
//   /**
//    * The collection must not throw {@code NullPointerException} on calls
//    * such as {@code contains(null)} or {@code remove(null)}, but instead
//    * must return a simple {@code false}.
//    */
//   ALLOWS_NULL_QUERIES,
// 
//   ALLOWS_NULL_VALUES (ALLOWS_NULL_QUERIES),
// 
//   /**
//    * Indicates that a collection disallows certain elements (other than
//    * {@code null}, whose validity as an element is indicated by the presence
//    * or absence of {@link #ALLOWS_NULL_VALUES}).
//    * From the documentation for {@link Collection}:
//    * <blockquote>"Some collection implementations have restrictions on the
//    * elements that they may contain.  For example, some implementations
//    * prohibit null elements, and some have restrictions on the types of their
//    * elements."</blockquote>
//    */
//   RESTRICTS_ELEMENTS,
// 
//   /**
//    * Indicates that a collection has a well-defined ordering of its elements.
//    * The ordering may depend on the element values, such as a {@link SortedSet},
//    * or on the insertion ordering, such as a {@link LinkedHashSet}. All list
//    * tests automatically specify this feature.
//    */
//   KNOWN_ORDER,
// 
//   /**
//    * Indicates that a collection has a different {@link Object#toString}
//    * representation than most collections. If not specified, the collection
//    * tests will examine the value returned by {@link Object#toString}.
//    */
//   NON_STANDARD_TOSTRING,
// 
//   /**
//    * Indicates that the constructor or factory method of a collection, usually
//    * an immutable set, throws an {@link IllegalArgumentException} when presented
//    * with duplicate elements instead of collapsing them to a single element or
//    * including duplicate instances in the collection.
//    */
//   REJECTS_DUPLICATES_AT_CREATION,
// 
//   SUPPORTS_ADD,
//   SUPPORTS_REMOVE,
//   SUPPORTS_ADD_ALL,
//   SUPPORTS_REMOVE_ALL,
//   SUPPORTS_RETAIN_ALL,
//   SUPPORTS_CLEAR,
//   FAILS_FAST_ON_CONCURRENT_MODIFICATION,
// 
//   /**
//    * Features supported by general-purpose collections -
//    * everything but {@link #RESTRICTS_ELEMENTS}.
//    * @see java.util.Collection the definition of general-purpose collections.
//    */
//   GENERAL_PURPOSE(
//       SUPPORTS_ADD,
//       SUPPORTS_REMOVE,
//       SUPPORTS_ADD_ALL,
//       SUPPORTS_REMOVE_ALL,
//       SUPPORTS_RETAIN_ALL,
//       SUPPORTS_CLEAR),
// 
//   /** Features supported by collections where only removal is allowed. */
//   REMOVE_OPERATIONS(
//       SUPPORTS_REMOVE,
//       SUPPORTS_REMOVE_ALL,
//       SUPPORTS_RETAIN_ALL,
//       SUPPORTS_CLEAR),
//       
//   SERIALIZABLE, SERIALIZABLE_INCLUDING_VIEWS(SERIALIZABLE),
// 
//   /**
//    * For documenting collections that support no optional features, such as
//    * {@link java.util.Collections#emptySet}
//    */
//   NONE();
// 
//   private final Set<Feature<? super Collection>> implied;
// 
//   CollectionFeature(Feature<? super Collection> ... implied) {
//     this.implied = Helpers.copyToSet(implied);
//   }
// 
//   @Override
//   public Set<Feature<? super Collection>> getImpliedFeatures() {
//     return implied;
//   }
// 
//   @Retention(RetentionPolicy.RUNTIME)
//   @Inherited
//   @TesterAnnotation
//   public @interface Require {
//     CollectionFeature[] value() default {};
//     CollectionFeature[] absent() default {};
//   }
// }


import java.util.LinkedHashMap;
import java.util.List;
import java.util.Map;
import java.util.Map.Entry;
import java.util.TreeMap;
import java.util.concurrent.ConcurrentHashMap;
import com.google.common.collect.testing.features.CollectionFeature;
import com.google.common.collect.testing.features.CollectionSize;
import com.google.common.collect.testing.features.MapFeature;
import junit.framework.Test;
import junit.framework.TestSuite;
import java.io.Serializable;
import java.lang.reflect.Method;
import java.util.Collection;
import java.util.Collections;
import java.util.Comparator;
import java.util.EnumMap;
import java.util.HashMap;
  }
  protected Collection<Method> suppressForSingletonMap() {
    return Collections.emptySet();
  }
  protected Collection<Method> suppressForHashMap() {
    return Collections.emptySet();
  }
  protected Collection<Method> suppressForLinkedHashMap() {
    return Collections.emptySet();
  }
  protected Collection<Method> suppressForTreeMap() {
    return Collections.emptySet();
  }
  protected Collection<Method> suppressForEnumMap() {
    return Collections.emptySet();
  }
  protected Collection<Method> suppressForConcurrentHashMap() {
    return Collections.emptySet();
  }

  public Test testsForEmptyMap() {
    return MapTestSuiteBuilder
        .using(new TestStringMapGenerator() {
            @Override protected Map<String, String> create(
                Entry<String, String>[] entries) {
              return Collections.emptyMap();
            }
          })
        .named("emptyMap")
        .withFeatures(
// Path: guava-testlib/src/com/google/common/collect/testing/features/CollectionFeature.java
// @SuppressWarnings("unchecked")
// public enum CollectionFeature implements Feature<Collection> {  
//   /**
//    * The collection must not throw {@code NullPointerException} on calls
//    * such as {@code contains(null)} or {@code remove(null)}, but instead
//    * must return a simple {@code false}.
//    */
//   ALLOWS_NULL_QUERIES,
// 
//   ALLOWS_NULL_VALUES (ALLOWS_NULL_QUERIES),
// 
//   /**
//    * Indicates that a collection disallows certain elements (other than
//    * {@code null}, whose validity as an element is indicated by the presence
//    * or absence of {@link #ALLOWS_NULL_VALUES}).
//    * From the documentation for {@link Collection}:
//    * <blockquote>"Some collection implementations have restrictions on the
//    * elements that they may contain.  For example, some implementations
//    * prohibit null elements, and some have restrictions on the types of their
//    * elements."</blockquote>
//    */
//   RESTRICTS_ELEMENTS,
// 
//   /**
//    * Indicates that a collection has a well-defined ordering of its elements.
//    * The ordering may depend on the element values, such as a {@link SortedSet},
//    * or on the insertion ordering, such as a {@link LinkedHashSet}. All list
//    * tests automatically specify this feature.
//    */
//   KNOWN_ORDER,
// 
//   /**
//    * Indicates that a collection has a different {@link Object#toString}
//    * representation than most collections. If not specified, the collection
//    * tests will examine the value returned by {@link Object#toString}.
//    */
//   NON_STANDARD_TOSTRING,
// 
//   /**
//    * Indicates that the constructor or factory method of a collection, usually
//    * an immutable set, throws an {@link IllegalArgumentException} when presented
//    * with duplicate elements instead of collapsing them to a single element or
//    * including duplicate instances in the collection.
//    */
//   REJECTS_DUPLICATES_AT_CREATION,
// 
//   SUPPORTS_ADD,
//   SUPPORTS_REMOVE,
//   SUPPORTS_ADD_ALL,
//   SUPPORTS_REMOVE_ALL,
//   SUPPORTS_RETAIN_ALL,
//   SUPPORTS_CLEAR,
//   FAILS_FAST_ON_CONCURRENT_MODIFICATION,
// 
//   /**
//    * Features supported by general-purpose collections -
//    * everything but {@link #RESTRICTS_ELEMENTS}.
//    * @see java.util.Collection the definition of general-purpose collections.
//    */
//   GENERAL_PURPOSE(
//       SUPPORTS_ADD,
//       SUPPORTS_REMOVE,
//       SUPPORTS_ADD_ALL,
//       SUPPORTS_REMOVE_ALL,
//       SUPPORTS_RETAIN_ALL,
//       SUPPORTS_CLEAR),
// 
//   /** Features supported by collections where only removal is allowed. */
//   REMOVE_OPERATIONS(
//       SUPPORTS_REMOVE,
//       SUPPORTS_REMOVE_ALL,
//       SUPPORTS_RETAIN_ALL,
//       SUPPORTS_CLEAR),
//       
//   SERIALIZABLE, SERIALIZABLE_INCLUDING_VIEWS(SERIALIZABLE),
// 
//   /**
//    * For documenting collections that support no optional features, such as
//    * {@link java.util.Collections#emptySet}
//    */
//   NONE();
// 
//   private final Set<Feature<? super Collection>> implied;
// 
//   CollectionFeature(Feature<? super Collection> ... implied) {
//     this.implied = Helpers.copyToSet(implied);
//   }
// 
//   @Override
//   public Set<Feature<? super Collection>> getImpliedFeatures() {
//     return implied;
//   }
// 
//   @Retention(RetentionPolicy.RUNTIME)
//   @Inherited
//   @TesterAnnotation
//   public @interface Require {
//     CollectionFeature[] value() default {};
//     CollectionFeature[] absent() default {};
//   }
// }


// Path: guava-testlib/src/com/google/common/collect/testing/TestsForMapsInJavaUtil.java
import java.util.LinkedHashMap;
import java.util.List;
import java.util.Map;
import java.util.Map.Entry;
import java.util.TreeMap;
import java.util.concurrent.ConcurrentHashMap;
import com.google.common.collect.testing.features.CollectionFeature;
import com.google.common.collect.testing.features.CollectionSize;
import com.google.common.collect.testing.features.MapFeature;
import junit.framework.Test;
import junit.framework.TestSuite;
import java.io.Serializable;
import java.lang.reflect.Method;
import java.util.Collection;
import java.util.Collections;
import java.util.Comparator;
import java.util.EnumMap;
import java.util.HashMap;

  }
  protected Collection<Method> suppressForSingletonMap() {
    return Collections.emptySet();
  }
  protected Collection<Method> suppressForHashMap() {
    return Collections.emptySet();
  }
  protected Collection<Method> suppressForLinkedHashMap() {
    return Collections.emptySet();
  }
  protected Collection<Method> suppressForTreeMap() {
    return Collections.emptySet();
  }
  protected Collection<Method> suppressForEnumMap() {
    return Collections.emptySet();
  }
  protected Collection<Method> suppressForConcurrentHashMap() {
    return Collections.emptySet();
  }

  public Test testsForEmptyMap() {
    return MapTestSuiteBuilder
        .using(new TestStringMapGenerator() {
            @Override protected Map<String, String> create(
                Entry<String, String>[] entries) {
              return Collections.emptyMap();
            }
          })
        .named("emptyMap")
        .withFeatures(
            CollectionFeature.SERIALIZABLE,