Skip to content

Commit f729e0a

Browse files
committed
BetterThanTomorrow#1007: show diff between expected and actual in test runner
1 parent d1a9e61 commit f729e0a

File tree

2 files changed

+32
-5
lines changed

2 files changed

+32
-5
lines changed

src/nrepl/cider.ts

Lines changed: 31 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,4 @@
1+
import { diff } from 'semver';
12
// https://github.com/clojure-emacs/cider-nrepl/blob/a740583c3aa8b582f3097611787a276775131d32/src/cider/nrepl/middleware/test.clj#L45
23
export interface TestSummary {
34
ns: number;
@@ -142,6 +143,24 @@ export function lineInformation(result: TestResult): string {
142143
return ` (${result.file}:${result.line})`;
143144
}
144145

146+
function testDiffInformation(result: TestResult): string[] {
147+
const diffs = result.diffs;
148+
const messages: string[] = [];
149+
150+
if (diffs && Array.isArray(diffs)) {
151+
diffs.forEach((diffPair: [string, string]) => {
152+
if (Array.isArray(diffPair) && diffPair.length === 2) {
153+
messages.push(`; expected:\n${diffPair[0]}`);
154+
messages.push(`; actual:\n${diffPair[1]}`);
155+
} else {
156+
console.warn('Invalid diff pair format:', diffPair);
157+
}
158+
});
159+
}
160+
161+
return messages;
162+
}
163+
145164
// Return a detailed message about why a test failed.
146165
// If the test passed, return the empty string.
147166
// The message contains "comment" lines that are prepended with ;
@@ -167,11 +186,18 @@ export function detailedMessage(result: TestResult): string | undefined {
167186
if (message) {
168187
messages.push(`; ${message}`);
169188
}
170-
if (result.expected) {
171-
messages.push(`; expected:\n${result.expected}`);
172-
}
173-
if (result.actual) {
174-
messages.push(`; actual:\n${result.actual}`);
189+
190+
const diffMessages = testDiffInformation(result);
191+
192+
if (diffMessages.length > 0) {
193+
messages.push(...diffMessages);
194+
} else {
195+
if (result.expected) {
196+
messages.push(`; expected:\n${result.expected}`);
197+
}
198+
if (result.actual) {
199+
messages.push(`; actual:\n${result.actual}`);
200+
}
175201
}
176202
}
177203
return messages.length > 0 ? messages.join('\n') : undefined;

src/testRunner.ts

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -139,6 +139,7 @@ async function onTestResult(
139139
run.errored(assertion, new vscode.TestMessage(cider.shortMessage(result)));
140140
break;
141141
case 'fail':
142+
run.failed(assertion, new vscode.TestMessage(cider.detailedMessage(result)));
142143
default:
143144
run.failed(assertion, new vscode.TestMessage(cider.shortMessage(result)));
144145
break;

0 commit comments

Comments
 (0)