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