diff --git a/src/main/java/org/junit/experimental/theories/internal/Assignments.java b/src/main/java/org/junit/experimental/theories/internal/Assignments.java index 6626797ef089..2662fae10340 100644 --- a/src/main/java/org/junit/experimental/theories/internal/Assignments.java +++ b/src/main/java/org/junit/experimental/theories/internal/Assignments.java @@ -6,7 +6,7 @@ import java.lang.reflect.Method; import java.util.ArrayList; import java.util.List; - +import org.junit.experimental.theories.FromDataPoints; import org.junit.experimental.theories.ParameterSignature; import org.junit.experimental.theories.ParameterSupplier; import org.junit.experimental.theories.ParametersSuppliedBy; @@ -85,11 +85,14 @@ public List potentialsForNextUnassigned() private List generateAssignmentsFromTypeAlone(ParameterSignature unassigned) { Class paramType = unassigned.getType(); - - if (paramType.isEnum()) { - return new EnumSupplier(paramType).getValueSources(unassigned); - } else if (paramType.equals(Boolean.class) || paramType.equals(boolean.class)) { - return new BooleanSupplier().getValueSources(unassigned); + + FromDataPoints fromDataPoints = unassigned.getAnnotation(FromDataPoints.class); + if (fromDataPoints == null) { + if (paramType.isEnum()) { + return new EnumSupplier(paramType).getValueSources(unassigned); + } else if (paramType.equals(Boolean.class) || paramType.equals(boolean.class)) { + return new BooleanSupplier().getValueSources(unassigned); + } } else { return emptyList(); } @@ -150,4 +153,4 @@ public Object[] getArgumentStrings(boolean nullsOk) } return values; } -} \ No newline at end of file +} diff --git a/src/test/java/org/junit/tests/experimental/theories/runner/AllTheoriesRunnerTests.java b/src/test/java/org/junit/tests/experimental/theories/runner/AllTheoriesRunnerTests.java index 26465caecc9a..91ace6de0ad4 100644 --- a/src/test/java/org/junit/tests/experimental/theories/runner/AllTheoriesRunnerTests.java +++ b/src/test/java/org/junit/tests/experimental/theories/runner/AllTheoriesRunnerTests.java @@ -12,6 +12,7 @@ TypeMatchingBetweenMultiDataPointsMethod.class, UnsuccessfulWithDataPointFields.class, WhenNoParametersMatch.class, + WhenNoParametersMatchEnumeratedTypes.class, WithAutoGeneratedDataPoints.class, WithDataPointMethod.class, WithExtendedParameterSources.class, diff --git a/src/test/java/org/junit/tests/experimental/theories/runner/WhenNoParametersMatchEnumeratedTypes.java b/src/test/java/org/junit/tests/experimental/theories/runner/WhenNoParametersMatchEnumeratedTypes.java new file mode 100644 index 000000000000..0359716064a7 --- /dev/null +++ b/src/test/java/org/junit/tests/experimental/theories/runner/WhenNoParametersMatchEnumeratedTypes.java @@ -0,0 +1,83 @@ +package org.junit.tests.experimental.theories.runner; + +import static org.junit.Assert.assertThat; +import static org.junit.experimental.results.PrintableResult.testResult; +import static org.junit.experimental.results.ResultMatchers.failureCountIs; +import static org.junit.experimental.results.ResultMatchers.hasFailureContaining; +import static org.junit.experimental.results.ResultMatchers.hasSingleFailureContaining; + +import org.junit.Test; +import org.junit.experimental.results.PrintableResult; +import org.junit.experimental.theories.DataPoints; +import org.junit.experimental.theories.FromDataPoints; +import org.junit.experimental.theories.Theories; +import org.junit.experimental.theories.Theory; +import org.junit.runner.RunWith; +import org.junit.runners.JUnit4; + +@RunWith(JUnit4.class) +public class WhenNoParametersMatchEnumeratedTypes { + public enum SomeEnum { + FIRST, SECOND + } + + @RunWith(Theories.class) + public static class AssumptionsFailBoolean { + @Theory + public void shouldFailBecauseExplicitFromDataPointsNotKnown( + @FromDataPoints("unknown") boolean b) {} + + @Theory + public void shouldSucceedBecauseNoExplicitFromDataPoints(boolean b) {} + } + + @Test + public void showFailedAssumptionsWhenNoParametersFoundBoolean() { + assertThat( + testResult(AssumptionsFailBoolean.class), + hasSingleFailureContaining( + "Never found parameters that satisfied method assumptions")); + } + + @RunWith(Theories.class) + public static class AssumptionsFailEnum { + @Theory + public void shouldFailBecauseExplicitFromDataPointsNotKnown( + @FromDataPoints("unknown") SomeEnum e) {} + + @Theory + public void shouldSucceedBecauseNoExplicitFromDataPoints(SomeEnum e) {} + } + + @Test + public void showFailedAssumptionsWhenNoParametersFoundEnum() { + assertThat( + testResult(AssumptionsFailEnum.class), + hasSingleFailureContaining( + "Never found parameters that satisfied method assumptions")); + } + + @RunWith(Theories.class) + public static class AssumptionsFailWrongType { + @DataPoints("known") public static final String[] known = {"known"}; + + @Theory + public void shouldSucceedBecauseRightType(@FromDataPoints("known") String s) {} + + @Theory + public void shouldFailBecauseWrongTypeBoolean(@FromDataPoints("known") boolean b) {} + + @Theory + public void shouldFailBecauseWrongTypeEnum(@FromDataPoints("known") SomeEnum e) {} + } + + @Test + public void showFailedAssumptionsWhenWrongType() { + PrintableResult result = testResult(AssumptionsFailWrongType.class); + assertThat(result, failureCountIs(2)); + assertThat( + result, + hasFailureContaining( + "Never found parameters that satisfied method assumptions")); + } +}