blob: 64e77b1e668a1cfd202508843ebee5282204ebdf [file] [log] [blame]
package org.junit.tests.experimental.theories.internal;
import static org.hamcrest.CoreMatchers.is;
import static org.hamcrest.MatcherAssert.assertThat;
import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertNotEquals;
import static org.junit.tests.experimental.theories.TheoryTestUtils.potentialAssignments;
import java.util.Arrays;
import java.util.List;
import org.junit.Rule;
import org.junit.Test;
import org.junit.experimental.theories.DataPoint;
import org.junit.experimental.theories.DataPoints;
import org.junit.experimental.theories.ParameterSignature;
import org.junit.experimental.theories.PotentialAssignment;
import org.junit.experimental.theories.Theory;
import org.junit.experimental.theories.internal.AllMembersSupplier;
import org.junit.rules.ExpectedException;
import org.junit.runners.model.TestClass;
public class AllMembersSupplierTest {
@Rule
public ExpectedException expected = ExpectedException.none();
public static class HasDataPointsArrayField {
@DataPoints
public static String[] list = new String[] { "qwe", "asd" };
@Theory
public void theory(String param) {
}
}
@Test
public void dataPointsArrayShouldBeRecognized() throws Throwable {
List<PotentialAssignment> assignments = potentialAssignments(
HasDataPointsArrayField.class.getMethod("theory", String.class));
assertEquals(2, assignments.size());
}
public static class HasDataPointsArrayWithMatchingButInaccurateTypes {
@DataPoints
public static Object[] objects = {1, "string!", 2};
@Theory
public void theory(Integer param) {
}
}
@Test
public void dataPointsArrayShouldBeRecognizedOnValueTypeNotFieldType() throws Throwable {
List<PotentialAssignment> assignments = potentialAssignments(
HasDataPointsArrayWithMatchingButInaccurateTypes.class.getMethod("theory", Integer.class));
assertEquals(2, assignments.size());
}
public static class HasDataPointMethodWithOverlyGeneralTypes {
@DataPoint
public static Integer object() {
return 1;
}
@Theory
public void theory(Object param) {
}
}
@Test
public void dataPointMethodShouldBeRecognizedForOverlyGeneralParameters() throws Throwable {
List<PotentialAssignment> assignments = potentialAssignments(
HasDataPointMethodWithOverlyGeneralTypes.class.getMethod("theory", Object.class));
assertEquals(1, assignments.size());
}
public static class HasDataPointsWithObjectParameter {
@DataPoints
public static Object[] objectField = {1, 2};
@Theory
public void theory(Object obj) {
}
}
@Test
public void dataPointsAnnotationMeansTreatAsArrayOnly() throws Throwable {
List<PotentialAssignment> assignments = potentialAssignments(
HasDataPointsWithObjectParameter.class.getMethod("theory", Object.class));
assertEquals(2, assignments.size());
for (PotentialAssignment assignment : assignments) {
assertNotEquals(HasDataPointsWithObjectParameter.objectField, assignment.getValue());
}
}
public static class HasDataPointsFieldWithNullValue {
@DataPoints
public static Object[] objects = {null, "a"};
public HasDataPointsFieldWithNullValue(Object obj) {
}
}
@Test
public void dataPointsArrayFieldMayContainNullValue() throws Throwable {
List<PotentialAssignment> valueSources = allMemberValuesFor(
HasDataPointsFieldWithNullValue.class, Object.class);
assertThat(valueSources.size(), is(2));
}
public static class HasDataPointsMethodWithNullValue {
@DataPoints
public static Integer[] getObjects() {
return new Integer[] {null, 1};
}
public HasDataPointsMethodWithNullValue(Integer i) {
}
}
@Test
public void dataPointsArrayMethodMayContainNullValue() throws Throwable {
List<PotentialAssignment> valueSources = allMemberValuesFor(
HasDataPointsMethodWithNullValue.class, Integer.class);
assertThat(valueSources.size(), is(2));
}
public static class HasFailingDataPointsArrayMethod {
@DataPoints
public static Object[] objects() {
throw new RuntimeException("failing method");
}
public HasFailingDataPointsArrayMethod(Object obj) {
}
}
@Test
public void allMembersFailsOnFailingDataPointsArrayMethod() throws Throwable {
expected.expect(RuntimeException.class);
expected.expectMessage("failing method");
allMemberValuesFor(HasFailingDataPointsArrayMethod.class, Object.class);
}
private List<PotentialAssignment> allMemberValuesFor(Class<?> testClass,
Class<?>... constructorParameterTypes) throws Throwable {
return new AllMembersSupplier(new TestClass(testClass))
.getValueSources(ParameterSignature.signatures(
testClass.getConstructor(constructorParameterTypes))
.get(0));
}
public static class HasDataPointsListField {
@DataPoints
public static List<String> list = Arrays.asList("one", "two");
@Theory
public void theory(String param) {
}
}
@Test
public void dataPointsCollectionFieldsShouldBeRecognized() throws Throwable {
List<PotentialAssignment> assignments = potentialAssignments(
HasDataPointsListField.class.getMethod("theory", String.class));
assertEquals(2, assignments.size());
}
public static class HasDataPointsListMethod {
@DataPoints
public static List<String> getList() {
return Arrays.asList("one", "two");
}
@Theory
public void theory(String param) {
}
}
@Test
public void dataPointsCollectionMethodShouldBeRecognized() throws Throwable {
List<PotentialAssignment> assignments = potentialAssignments(
HasDataPointsListMethod.class.getMethod("theory", String.class));
assertEquals(2, assignments.size());
}
public static class HasDataPointsListFieldWithOverlyGenericTypes {
@DataPoints
public static List<Object> list = Arrays.asList("string", new Object());
@Theory
public void theory(String param) {
}
}
@Test
public void dataPointsCollectionShouldBeRecognizedIgnoringStrangeTypes() throws Throwable {
List<PotentialAssignment> assignments = potentialAssignments(
HasDataPointsListFieldWithOverlyGenericTypes.class.getMethod("theory", String.class));
assertEquals(1, assignments.size());
}
}