001package org.junit.runners.parameterized;
002
003import static java.util.Collections.unmodifiableList;
004
005import java.util.ArrayList;
006import java.util.List;
007
008import org.junit.runners.model.TestClass;
009
010/**
011 * A {@code TestWithParameters} keeps the data together that are needed for
012 * creating a runner for a single data set of a parameterized test. It has a
013 * name, the test class and a list of parameters.
014 * 
015 * @since 4.12
016 */
017public class TestWithParameters {
018    private final String name;
019
020    private final TestClass testClass;
021
022    private final List<Object> parameters;
023
024    public TestWithParameters(String name, TestClass testClass,
025            List<Object> parameters) {
026        notNull(name, "The name is missing.");
027        notNull(testClass, "The test class is missing.");
028        notNull(parameters, "The parameters are missing.");
029        this.name = name;
030        this.testClass = testClass;
031        this.parameters = unmodifiableList(new ArrayList<Object>(parameters));
032    }
033
034    public String getName() {
035        return name;
036    }
037
038    public TestClass getTestClass() {
039        return testClass;
040    }
041
042    public List<Object> getParameters() {
043        return parameters;
044    }
045
046    @Override
047    public int hashCode() {
048        int prime = 14747;
049        int result = prime + name.hashCode();
050        result = prime * result + testClass.hashCode();
051        return prime * result + parameters.hashCode();
052    }
053
054    @Override
055    public boolean equals(Object obj) {
056        if (this == obj) {
057            return true;
058        }
059        if (obj == null) {
060            return false;
061        }
062        if (getClass() != obj.getClass()) {
063            return false;
064        }
065        TestWithParameters other = (TestWithParameters) obj;
066        return name.equals(other.name)
067                && parameters.equals(other.parameters)
068                && testClass.equals(other.testClass);
069    }
070
071    @Override
072    public String toString() {
073        return testClass.getName() + " '" + name + "' with parameters "
074                + parameters;
075    }
076
077    private static void notNull(Object value, String message) {
078        if (value == null) {
079            throw new NullPointerException(message);
080        }
081    }
082}