1/*
2 * Copyright (C) 2008 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
17package com.google.common.collect.testing.features;
18
19import com.google.common.collect.testing.Helpers;
20
21import java.util.Collections;
22import java.util.Set;
23
24/**
25 * Encapsulates the constraints that a class under test must satisfy in order
26 * for a tester method to be run against that class.
27 *
28 * <p>This class is GWT compatible.
29 *
30 * @author George van den Driessche
31 */
32public final class TesterRequirements {
33  private final Set<Feature<?>> presentFeatures;
34  private final Set<Feature<?>> absentFeatures;
35
36  public TesterRequirements(
37      Set<Feature<?>> presentFeatures, Set<Feature<?>> absentFeatures) {
38    this.presentFeatures = Helpers.copyToSet(presentFeatures);
39    this.absentFeatures = Helpers.copyToSet(absentFeatures);
40  }
41
42  public TesterRequirements(TesterRequirements tr) {
43    this(tr.getPresentFeatures(), tr.getAbsentFeatures());
44  }
45
46  public TesterRequirements() {
47    this(Collections.<Feature<?>>emptySet(),
48        Collections.<Feature<?>>emptySet());
49  }
50
51  public final Set<Feature<?>> getPresentFeatures() {
52    return presentFeatures;
53  }
54
55  public final Set<Feature<?>> getAbsentFeatures() {
56    return absentFeatures;
57  }
58
59  @Override public boolean equals(Object object) {
60    if (object == this) {
61      return true;
62    }
63    if (object instanceof TesterRequirements) {
64      TesterRequirements that = (TesterRequirements) object;
65      return this.presentFeatures.equals(that.presentFeatures)
66          && this.absentFeatures.equals(that.absentFeatures);
67    }
68    return false;
69  }
70
71  @Override public int hashCode() {
72    return presentFeatures.hashCode() * 31 + absentFeatures.hashCode();
73  }
74
75  @Override public String toString() {
76    return "{TesterRequirements: present="
77        + presentFeatures + ", absent=" + absentFeatures + "}";
78  }
79
80  private static final long serialVersionUID = 0;
81}
82