Skip to content

Commit 3aca014

Browse files
author
David Saff
committed
Merge pull request #607 from pimterry/theory-enum-failure-messages
Theories failure messages describe enum arguments unhelpfully
2 parents 74f3286 + 7a12b70 commit 3aca014

File tree

4 files changed

+79
-8
lines changed

4 files changed

+79
-8
lines changed
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,7 @@
11
package org.junit.experimental.theories;
22

3+
import static java.lang.String.format;
4+
35
public abstract class PotentialAssignment {
46
public static class CouldNotGenerateValueException extends Exception {
57
private static final long serialVersionUID = 1L;
@@ -8,24 +10,36 @@ public static class CouldNotGenerateValueException extends Exception {
810
public static PotentialAssignment forValue(final String name, final Object value) {
911
return new PotentialAssignment() {
1012
@Override
11-
public Object getValue() throws CouldNotGenerateValueException {
13+
public Object getValue() {
1214
return value;
1315
}
1416

1517
@Override
1618
public String toString() {
17-
return String.format("[%s]", value);
19+
return format("[%s]", value);
1820
}
1921

2022
@Override
21-
public String getDescription()
22-
throws CouldNotGenerateValueException {
23-
return name;
23+
public String getDescription() {
24+
String valueString;
25+
26+
if (value == null) {
27+
valueString = "null";
28+
} else {
29+
try {
30+
valueString = format("\"%s\"", value);
31+
} catch (Throwable e) {
32+
valueString = format("[toString() threw %s: %s]",
33+
e.getClass().getSimpleName(), e.getMessage());
34+
}
35+
}
36+
37+
return format("%s <from %s>", valueString, name);
2438
}
2539
};
2640
}
2741

2842
public abstract Object getValue() throws CouldNotGenerateValueException;
2943

3044
public abstract String getDescription() throws CouldNotGenerateValueException;
31-
}
45+
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,57 @@
1+
package org.junit.tests.experimental.theories;
2+
3+
import static org.junit.Assert.*;
4+
import org.junit.Test;
5+
import org.junit.experimental.theories.PotentialAssignment;
6+
import org.junit.experimental.theories.PotentialAssignment.CouldNotGenerateValueException;
7+
8+
public class PotentialAssignmentTest {
9+
10+
@Test
11+
public void shouldUseQuotedValueInDescription() throws CouldNotGenerateValueException {
12+
String name = "stringDatapoint";
13+
Object value = new Object() {
14+
@Override
15+
public String toString() {
16+
return "string value";
17+
}
18+
};
19+
20+
PotentialAssignment assignment = PotentialAssignment.forValue(name, value);
21+
22+
assertEquals("\"string value\" <from stringDatapoint>", assignment.getDescription());
23+
}
24+
25+
@Test
26+
public void shouldNotUseQuotesForNullValueDescriptions() throws CouldNotGenerateValueException {
27+
String name = "nullDatapoint";
28+
Object value = null;
29+
30+
PotentialAssignment assignment = PotentialAssignment.forValue(name, value);
31+
32+
assertEquals("null <from nullDatapoint>", assignment.getDescription());
33+
}
34+
35+
@Test
36+
public void shouldIncludeFailureInDescriptionIfToStringFails() throws CouldNotGenerateValueException {
37+
String name = "explodingValue";
38+
Object value = new Object() {
39+
@Override
40+
public String toString() {
41+
throw new RuntimeException("Oh no!");
42+
}
43+
};
44+
45+
PotentialAssignment assignment = PotentialAssignment.forValue(name, value);
46+
47+
assertEquals("[toString() threw RuntimeException: Oh no!] <from explodingValue>", assignment.getDescription());
48+
}
49+
50+
@Test
51+
public void shouldReturnGivenValue() throws CouldNotGenerateValueException {
52+
Object value = new Object();
53+
PotentialAssignment assignment = PotentialAssignment.forValue("name", value);
54+
assertEquals(value, assignment.getValue());
55+
}
56+
57+
}

src/test/java/org/junit/tests/experimental/theories/TestedOnSupplierTest.java

+1-1
Original file line numberDiff line numberDiff line change
@@ -21,7 +21,7 @@ public void foo(@TestedOn(ints = {1}) int x) {
2121
public void descriptionStatesParameterName() throws Exception {
2222
TestedOnSupplier supplier = new TestedOnSupplier();
2323
List<PotentialAssignment> assignments = supplier.getValueSources(signatureOfFoo());
24-
assertThat(assignments.get(0).getDescription(), is("ints"));
24+
assertThat(assignments.get(0).getDescription(), is("\"1\" <from ints>"));
2525
}
2626

2727
private ParameterSignature signatureOfFoo() throws NoSuchMethodException {

src/test/java/org/junit/tests/experimental/theories/runner/UnsuccessfulWithDataPointFields.java

+1-1
Original file line numberDiff line numberDiff line change
@@ -61,7 +61,7 @@ public void everythingIsZero(int x, int y) {
6161
@Test
6262
public void reportBadParams() throws Exception {
6363
assertThat(testResult(DoesntUseParams.class),
64-
hasSingleFailureContaining("everythingIsZero(ONE, ONE)"));
64+
hasSingleFailureContaining("everythingIsZero(\"1\" <from ONE>, \"1\" <from ONE>)"));
6565
}
6666

6767
@RunWith(Theories.class)

0 commit comments

Comments
 (0)