Skip to content

Commit 64ac582

Browse files
committed
Merge branch 'applesauce'
2 parents d7f717e + 547c0eb commit 64ac582

File tree

3 files changed

+44
-9
lines changed

3 files changed

+44
-9
lines changed

approvaltests-tests/src/test/java/org/approvaltests/approvers/FileApproverTest.java

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@
44
import com.spun.util.io.FileUtils;
55
import com.spun.util.tests.StackTraceReflectionResult;
66
import com.spun.util.tests.TestUtils;
7+
import org.approvaltests.ApprovalSettings;
78
import org.approvaltests.Approvals;
89
import org.approvaltests.core.Options;
910
import org.approvaltests.core.VerifyResult;
@@ -69,4 +70,17 @@ public void testCustomApprover()
6970
Approvals.verify(new FileApprover(writer, namer, approveEverything));
7071
// end-snippet
7172
}
73+
@Test
74+
void testCustomError() throws Exception
75+
{
76+
var expected = """
77+
java.lang.AssertionError: Custom message
78+
""";
79+
try (AutoCloseable old = Approvals.settings()
80+
.registerErrorGenerator((received, approved) -> new AssertionError("Custom message")))
81+
{
82+
FileApprover fileApprover = new FileApprover(new File("a.txt"), new File("b.txt"), null, null);
83+
Approvals.verifyException(fileApprover::fail, new Options().inline(expected));
84+
}
85+
}
7286
}

approvaltests/src/main/java/org/approvaltests/ApprovalSettings.java

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@
22

33
import com.spun.util.introspection.Caller;
44
import org.approvaltests.approvers.FileApprover;
5+
import org.lambda.functions.Function2;
56
import org.lambda.query.Queryable;
67

78
import java.io.File;
@@ -22,4 +23,8 @@ public void allowMultipleVerifyCallsForThisClass()
2223
String className = caller.getClassName().replace('.', File.separatorChar);
2324
FileApprover.tracker.addAllowedDuplicates(f -> f.contains(className));
2425
}
26+
public static AutoCloseable registerErrorGenerator(Function2<String, String, Error> errorGenerator)
27+
{
28+
return FileApprover.registerErrorGenerator(errorGenerator);
29+
}
2530
}

approvaltests/src/main/java/org/approvaltests/approvers/FileApprover.java

Lines changed: 25 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -15,22 +15,35 @@
1515

1616
public class FileApprover implements ApprovalApprover
1717
{
18-
private File received;
19-
private File approved;
20-
private final ApprovalWriter writer;
21-
private Function2<File, File, VerifyResult> approver;
22-
public static final ApprovalTracker tracker = new ApprovalTracker();
18+
public static final ApprovalTracker tracker = new ApprovalTracker();
19+
private static Function2<String, String, Error> errorGenerator = FileApprover::createError;
20+
private File received;
21+
private File approved;
22+
private final ApprovalWriter writer;
23+
private Function2<File, File, VerifyResult> approver;
2324
public FileApprover(ApprovalWriter writer, ApprovalNamer namer)
2425
{
2526
this(writer, namer, FileApprover::approveTextFile);
2627
}
2728
public FileApprover(ApprovalWriter writer, ApprovalNamer namer, Function2<File, File, VerifyResult> approver)
2829
{
30+
this(namer.getReceivedFile(writer.getFileExtensionWithDot()),
31+
namer.getApprovedFile(writer.getFileExtensionWithDot()), writer, approver);
32+
}
33+
public FileApprover(File received, File approved, ApprovalWriter writer,
34+
Function2<File, File, VerifyResult> approver)
35+
{
36+
this.received = received;
37+
this.approved = approved;
2938
this.writer = writer;
30-
received = namer.getReceivedFile(writer.getFileExtensionWithDot());
31-
approved = namer.getApprovedFile(writer.getFileExtensionWithDot());
3239
this.approver = approver;
3340
}
41+
public static AutoCloseable registerErrorGenerator(Function2<String, String, Error> errorGenerator)
42+
{
43+
Function2<String, String, Error> old = FileApprover.errorGenerator;
44+
FileApprover.errorGenerator = errorGenerator;
45+
return () -> FileApprover.errorGenerator = old;
46+
}
3447
public VerifyResult approve()
3548
{
3649
tracker.assertUnique(approved.getAbsolutePath());
@@ -58,8 +71,11 @@ public VerifyResult reportFailure(ApprovalFailureReporter reporter)
5871
}
5972
public void fail()
6073
{
61-
throw new Error(String.format("Failed Approval\n Approved:%s\n Received:%s", approved.getAbsolutePath(),
62-
received.getAbsolutePath()));
74+
throw errorGenerator.call(received.getAbsolutePath(), approved.getAbsolutePath());
75+
}
76+
private static Error createError(String received, String approved)
77+
{
78+
return new Error(String.format("Failed Approval\n Approved:%s\n Received:%s", approved, received));
6379
}
6480
public static VerifyResult approveTextFile(File received, File approved)
6581
{

0 commit comments

Comments
 (0)