1aeb93fc33cae3aadbb9b46083350ad2dc9aea645Paul Duffinpackage org.junit.runners.parameterized;
2aeb93fc33cae3aadbb9b46083350ad2dc9aea645Paul Duffin
3aeb93fc33cae3aadbb9b46083350ad2dc9aea645Paul Duffinimport static java.util.Collections.unmodifiableList;
4aeb93fc33cae3aadbb9b46083350ad2dc9aea645Paul Duffin
5aeb93fc33cae3aadbb9b46083350ad2dc9aea645Paul Duffinimport java.util.ArrayList;
6aeb93fc33cae3aadbb9b46083350ad2dc9aea645Paul Duffinimport java.util.List;
7aeb93fc33cae3aadbb9b46083350ad2dc9aea645Paul Duffin
8aeb93fc33cae3aadbb9b46083350ad2dc9aea645Paul Duffinimport org.junit.runners.model.TestClass;
9aeb93fc33cae3aadbb9b46083350ad2dc9aea645Paul Duffin
10aeb93fc33cae3aadbb9b46083350ad2dc9aea645Paul Duffin/**
11aeb93fc33cae3aadbb9b46083350ad2dc9aea645Paul Duffin * A {@code TestWithParameters} keeps the data together that are needed for
12aeb93fc33cae3aadbb9b46083350ad2dc9aea645Paul Duffin * creating a runner for a single data set of a parameterized test. It has a
13aeb93fc33cae3aadbb9b46083350ad2dc9aea645Paul Duffin * name, the test class and a list of parameters.
14aeb93fc33cae3aadbb9b46083350ad2dc9aea645Paul Duffin *
15aeb93fc33cae3aadbb9b46083350ad2dc9aea645Paul Duffin * @since 4.12
16aeb93fc33cae3aadbb9b46083350ad2dc9aea645Paul Duffin */
17aeb93fc33cae3aadbb9b46083350ad2dc9aea645Paul Duffinpublic class TestWithParameters {
18aeb93fc33cae3aadbb9b46083350ad2dc9aea645Paul Duffin    private final String name;
19aeb93fc33cae3aadbb9b46083350ad2dc9aea645Paul Duffin
20aeb93fc33cae3aadbb9b46083350ad2dc9aea645Paul Duffin    private final TestClass testClass;
21aeb93fc33cae3aadbb9b46083350ad2dc9aea645Paul Duffin
22aeb93fc33cae3aadbb9b46083350ad2dc9aea645Paul Duffin    private final List<Object> parameters;
23aeb93fc33cae3aadbb9b46083350ad2dc9aea645Paul Duffin
24aeb93fc33cae3aadbb9b46083350ad2dc9aea645Paul Duffin    public TestWithParameters(String name, TestClass testClass,
25aeb93fc33cae3aadbb9b46083350ad2dc9aea645Paul Duffin            List<Object> parameters) {
26aeb93fc33cae3aadbb9b46083350ad2dc9aea645Paul Duffin        notNull(name, "The name is missing.");
27aeb93fc33cae3aadbb9b46083350ad2dc9aea645Paul Duffin        notNull(testClass, "The test class is missing.");
28aeb93fc33cae3aadbb9b46083350ad2dc9aea645Paul Duffin        notNull(parameters, "The parameters are missing.");
29aeb93fc33cae3aadbb9b46083350ad2dc9aea645Paul Duffin        this.name = name;
30aeb93fc33cae3aadbb9b46083350ad2dc9aea645Paul Duffin        this.testClass = testClass;
31aeb93fc33cae3aadbb9b46083350ad2dc9aea645Paul Duffin        this.parameters = unmodifiableList(new ArrayList<Object>(parameters));
32aeb93fc33cae3aadbb9b46083350ad2dc9aea645Paul Duffin    }
33aeb93fc33cae3aadbb9b46083350ad2dc9aea645Paul Duffin
34aeb93fc33cae3aadbb9b46083350ad2dc9aea645Paul Duffin    public String getName() {
35aeb93fc33cae3aadbb9b46083350ad2dc9aea645Paul Duffin        return name;
36aeb93fc33cae3aadbb9b46083350ad2dc9aea645Paul Duffin    }
37aeb93fc33cae3aadbb9b46083350ad2dc9aea645Paul Duffin
38aeb93fc33cae3aadbb9b46083350ad2dc9aea645Paul Duffin    public TestClass getTestClass() {
39aeb93fc33cae3aadbb9b46083350ad2dc9aea645Paul Duffin        return testClass;
40aeb93fc33cae3aadbb9b46083350ad2dc9aea645Paul Duffin    }
41aeb93fc33cae3aadbb9b46083350ad2dc9aea645Paul Duffin
42aeb93fc33cae3aadbb9b46083350ad2dc9aea645Paul Duffin    public List<Object> getParameters() {
43aeb93fc33cae3aadbb9b46083350ad2dc9aea645Paul Duffin        return parameters;
44aeb93fc33cae3aadbb9b46083350ad2dc9aea645Paul Duffin    }
45aeb93fc33cae3aadbb9b46083350ad2dc9aea645Paul Duffin
46aeb93fc33cae3aadbb9b46083350ad2dc9aea645Paul Duffin    @Override
47aeb93fc33cae3aadbb9b46083350ad2dc9aea645Paul Duffin    public int hashCode() {
48aeb93fc33cae3aadbb9b46083350ad2dc9aea645Paul Duffin        int prime = 14747;
49aeb93fc33cae3aadbb9b46083350ad2dc9aea645Paul Duffin        int result = prime + name.hashCode();
50aeb93fc33cae3aadbb9b46083350ad2dc9aea645Paul Duffin        result = prime * result + testClass.hashCode();
51aeb93fc33cae3aadbb9b46083350ad2dc9aea645Paul Duffin        return prime * result + parameters.hashCode();
52aeb93fc33cae3aadbb9b46083350ad2dc9aea645Paul Duffin    }
53aeb93fc33cae3aadbb9b46083350ad2dc9aea645Paul Duffin
54aeb93fc33cae3aadbb9b46083350ad2dc9aea645Paul Duffin    @Override
55aeb93fc33cae3aadbb9b46083350ad2dc9aea645Paul Duffin    public boolean equals(Object obj) {
56aeb93fc33cae3aadbb9b46083350ad2dc9aea645Paul Duffin        if (this == obj) {
57aeb93fc33cae3aadbb9b46083350ad2dc9aea645Paul Duffin            return true;
58aeb93fc33cae3aadbb9b46083350ad2dc9aea645Paul Duffin        }
59aeb93fc33cae3aadbb9b46083350ad2dc9aea645Paul Duffin        if (obj == null) {
60aeb93fc33cae3aadbb9b46083350ad2dc9aea645Paul Duffin            return false;
61aeb93fc33cae3aadbb9b46083350ad2dc9aea645Paul Duffin        }
62aeb93fc33cae3aadbb9b46083350ad2dc9aea645Paul Duffin        if (getClass() != obj.getClass()) {
63aeb93fc33cae3aadbb9b46083350ad2dc9aea645Paul Duffin            return false;
64aeb93fc33cae3aadbb9b46083350ad2dc9aea645Paul Duffin        }
65aeb93fc33cae3aadbb9b46083350ad2dc9aea645Paul Duffin        TestWithParameters other = (TestWithParameters) obj;
66aeb93fc33cae3aadbb9b46083350ad2dc9aea645Paul Duffin        return name.equals(other.name)
67aeb93fc33cae3aadbb9b46083350ad2dc9aea645Paul Duffin                && parameters.equals(other.parameters)
68aeb93fc33cae3aadbb9b46083350ad2dc9aea645Paul Duffin                && testClass.equals(other.testClass);
69aeb93fc33cae3aadbb9b46083350ad2dc9aea645Paul Duffin    }
70aeb93fc33cae3aadbb9b46083350ad2dc9aea645Paul Duffin
71aeb93fc33cae3aadbb9b46083350ad2dc9aea645Paul Duffin    @Override
72aeb93fc33cae3aadbb9b46083350ad2dc9aea645Paul Duffin    public String toString() {
73aeb93fc33cae3aadbb9b46083350ad2dc9aea645Paul Duffin        return testClass.getName() + " '" + name + "' with parameters "
74aeb93fc33cae3aadbb9b46083350ad2dc9aea645Paul Duffin                + parameters;
75aeb93fc33cae3aadbb9b46083350ad2dc9aea645Paul Duffin    }
76aeb93fc33cae3aadbb9b46083350ad2dc9aea645Paul Duffin
77aeb93fc33cae3aadbb9b46083350ad2dc9aea645Paul Duffin    private static void notNull(Object value, String message) {
78aeb93fc33cae3aadbb9b46083350ad2dc9aea645Paul Duffin        if (value == null) {
79aeb93fc33cae3aadbb9b46083350ad2dc9aea645Paul Duffin            throw new NullPointerException(message);
80aeb93fc33cae3aadbb9b46083350ad2dc9aea645Paul Duffin        }
81aeb93fc33cae3aadbb9b46083350ad2dc9aea645Paul Duffin    }
82aeb93fc33cae3aadbb9b46083350ad2dc9aea645Paul Duffin}
83