Skip to content

Commit 8ae9a72

Browse files
committed
Improved the naming of error values in the case where they're java enums, since those already have meaningful names we can use.
1 parent 92a3f73 commit 8ae9a72

File tree

2 files changed

+90
-3
lines changed

2 files changed

+90
-3
lines changed

src/main/java/org/junit/experimental/theories/PotentialAssignment.java

Lines changed: 6 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -18,9 +18,12 @@ public String toString() {
1818
}
1919

2020
@Override
21-
public String getDescription()
22-
throws CouldNotGenerateValueException {
23-
return name;
21+
public String getDescription() throws CouldNotGenerateValueException {
22+
if (value.getClass().isEnum()) {
23+
return value.toString();
24+
} else {
25+
return name;
26+
}
2427
}
2528
};
2629
}
Lines changed: 84 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,84 @@
1+
package org.junit.tests.experimental.theories;
2+
3+
import static org.hamcrest.CoreMatchers.*;
4+
import org.junit.Assert;
5+
import org.junit.Test;
6+
import org.junit.experimental.theories.DataPoint;
7+
import org.junit.experimental.theories.DataPoints;
8+
import org.junit.experimental.theories.Theories;
9+
import org.junit.experimental.theories.Theory;
10+
import org.junit.runner.JUnitCore;
11+
import org.junit.runner.Request;
12+
import org.junit.runner.Result;
13+
import org.junit.runner.Runner;
14+
import org.junit.runners.model.InitializationError;
15+
16+
public class EnumDatapointNamesTest {
17+
18+
@Test
19+
public void enumErrorsUseEnumNameWithSingleValues() throws InitializationError {
20+
Result result = runTheoryTest(EnumTestWithBadValue.class);
21+
22+
Assert.assertEquals(1, result.getFailureCount());
23+
24+
Throwable ex = result.getFailures().get(0).getException();
25+
Assert.assertThat(ex.getMessage(), containsString(EnumValue.BAD_VALUE.toString()));
26+
return;
27+
}
28+
29+
@Test
30+
public void enumErrorsUseEnumNameWithArrays() throws InitializationError {
31+
Result result = runTheoryTest(EnumTestWithBadValueInArray.class);
32+
33+
Assert.assertEquals(1, result.getFailureCount());
34+
35+
Throwable ex = result.getFailures().get(0).getException();
36+
Assert.assertThat(ex.getMessage(), containsString(EnumValue.BAD_VALUE.toString()));
37+
return;
38+
}
39+
40+
private Result runTheoryTest(Class<?> testClass) throws InitializationError {
41+
JUnitCore junitRunner = new JUnitCore();
42+
Runner theoryRunner = new Theories(testClass);
43+
Request request = Request.runner(theoryRunner);
44+
return junitRunner.run(request);
45+
}
46+
47+
private enum EnumValue {
48+
ONE_VALUE, BAD_VALUE, ANOTHER_VALUE
49+
}
50+
51+
private static void methodUnderTest(EnumValue param) {
52+
if (param == EnumValue.BAD_VALUE) {
53+
throw new IllegalArgumentException("Bad param");
54+
}
55+
}
56+
57+
public static class EnumTestWithBadValue {
58+
59+
@DataPoint
60+
public static EnumValue oneValue = EnumValue.ONE_VALUE;
61+
62+
@DataPoint
63+
public static EnumValue badValue = EnumValue.BAD_VALUE;
64+
65+
@Theory
66+
public void theoryTest(EnumValue param) {
67+
methodUnderTest(param);
68+
}
69+
70+
}
71+
72+
public static class EnumTestWithBadValueInArray {
73+
74+
@DataPoints
75+
public static EnumValue[] allValues = EnumValue.values();
76+
77+
@Theory
78+
public void theoryTest(EnumValue param) {
79+
methodUnderTest(param);
80+
}
81+
82+
}
83+
84+
}

0 commit comments

Comments
 (0)