blob: 1802390a87d494e319b792fb12cc8674aa0602c9 [file] [log] [blame]
package org.junit.tests.experimental.theories.runner;
import static org.junit.Assert.assertEquals;
import static org.junit.tests.experimental.theories.TheoryTestUtils.potentialAssignments;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
import org.junit.Rule;
import org.junit.Test;
import org.junit.experimental.theories.ParameterSignature;
import org.junit.experimental.theories.ParameterSupplier;
import org.junit.experimental.theories.ParametersSuppliedBy;
import org.junit.experimental.theories.PotentialAssignment;
import org.junit.experimental.theories.Theories;
import org.junit.experimental.theories.Theory;
import org.junit.rules.ExpectedException;
import org.junit.runner.RunWith;
import org.junit.runners.model.InitializationError;
import org.junit.runners.model.TestClass;
public class WithParameterSupplier {
@Rule
public ExpectedException expected = ExpectedException.none();
private static class SimplePotentialAssignment extends PotentialAssignment {
private String description;
private Object value;
public SimplePotentialAssignment(Object value, String description) {
this.value = value;
this.description = description;
}
@Override
public Object getValue() throws CouldNotGenerateValueException {
return value;
}
@Override
public String getDescription() throws CouldNotGenerateValueException {
return description;
}
}
private static final List<String> DATAPOINTS = Arrays.asList("qwe", "asd");
public static class SimpleSupplier extends ParameterSupplier {
@Override
public List<PotentialAssignment> getValueSources(ParameterSignature sig) {
List<PotentialAssignment> assignments = new ArrayList<PotentialAssignment>();
for (String datapoint : DATAPOINTS) {
assignments.add(new SimplePotentialAssignment(datapoint,
datapoint));
}
return assignments;
}
}
@RunWith(Theories.class)
public static class TestClassUsingParameterSupplier {
@Theory
public void theoryMethod(@ParametersSuppliedBy(SimpleSupplier.class) String param) {
}
}
@Test
public void shouldPickUpDataPointsFromParameterSupplier() throws Throwable {
List<PotentialAssignment> assignments = potentialAssignments(TestClassUsingParameterSupplier.class
.getMethod("theoryMethod", String.class));
assertEquals(2, assignments.size());
assertEquals(DATAPOINTS.get(0), assignments.get(0).getValue());
assertEquals(DATAPOINTS.get(1), assignments.get(1).getValue());
}
public static class SupplierWithUnknownConstructor extends ParameterSupplier {
public SupplierWithUnknownConstructor(String param) {
}
@Override
public List<PotentialAssignment> getValueSources(ParameterSignature sig) {
return null;
}
}
@RunWith(Theories.class)
public static class TestClassUsingSupplierWithUnknownConstructor {
@Theory
public void theory(@ParametersSuppliedBy(SupplierWithUnknownConstructor.class) String param) {
}
}
@Test
public void shouldRejectSuppliersWithUnknownConstructors() throws Exception {
expected.expect(InitializationError.class);
new Theories(TestClassUsingSupplierWithUnknownConstructor.class);
}
public static class SupplierWithTwoConstructors extends ParameterSupplier {
public SupplierWithTwoConstructors(String param) {
}
@Override
public List<PotentialAssignment> getValueSources(ParameterSignature sig) {
return null;
}
}
@RunWith(Theories.class)
public static class TestClassUsingSupplierWithTwoConstructors {
@Theory
public void theory(@ParametersSuppliedBy(SupplierWithTwoConstructors.class) String param) {
}
}
@Test
public void shouldRejectSuppliersWithTwoConstructors() throws Exception {
expected.expect(InitializationError.class);
new Theories(TestClassUsingSupplierWithTwoConstructors.class);
}
public static class SupplierWithTestClassConstructor extends ParameterSupplier {
public SupplierWithTestClassConstructor(TestClass param) {
}
@Override
public List<PotentialAssignment> getValueSources(ParameterSignature sig) {
return null;
}
}
@RunWith(Theories.class)
public static class TestClassUsingSupplierWithTestClassConstructor {
@Theory
public void theory(@ParametersSuppliedBy(SupplierWithTestClassConstructor.class) String param) {
}
}
@Test
public void shouldAcceptSuppliersWithTestClassConstructor() throws Exception {
new Theories(TestClassUsingSupplierWithTestClassConstructor.class);
}
}