Skip to content

Commit f41f6cf

Browse files
committed
assert: address large diff review feedback
1 parent f6f68cb commit f41f6cf

2 files changed

Lines changed: 30 additions & 9 deletions

File tree

lib/internal/assert/assertion_error.js

Lines changed: 15 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -191,6 +191,12 @@ function getTruncatedDiffValue(lines) {
191191
return ArrayPrototypeJoin(lines, '\n');
192192
}
193193

194+
function hasLargeRootMismatch(inspectedActual, inspectedExpected, diffType) {
195+
return diffType !== 'full' &&
196+
inspectedActual.length + inspectedExpected.length > kMaxDiffLineCount &&
197+
inspectedActual[0] !== inspectedExpected[0];
198+
}
199+
194200
function createErrDiff(actual, expected, operator, customMessage, diffType = 'simple') {
195201
operator = checkOperator(actual, expected, operator);
196202

@@ -222,11 +228,11 @@ function createErrDiff(actual, expected, operator, customMessage, diffType = 'si
222228
message = ArrayPrototypeJoin(inspectedSplitActual, '\n');
223229
}
224230
header = '';
225-
} else if (
226-
diffType !== 'full' &&
227-
inspectedSplitActual.length + inspectedSplitExpected.length > kMaxDiffLineCount
228-
) {
229-
message = `\n${colors.green}+${colors.white} ${getTruncatedDiffValue(inspectedSplitActual)}\n` +
231+
} else if (hasLargeRootMismatch(inspectedSplitActual, inspectedSplitExpected, diffType)) {
232+
const actualPrefix = operator === 'partialDeepStrictEqual' ?
233+
`${colors.gray}${colors.hasColors ? ' ' : '+'}` :
234+
`${colors.green}+${colors.white}`;
235+
message = `\n${actualPrefix} ${getTruncatedDiffValue(inspectedSplitActual)}\n` +
230236
`${colors.red}-${colors.white} ${getTruncatedDiffValue(inspectedSplitExpected)}`;
231237
skipped = true;
232238
} else {
@@ -236,15 +242,15 @@ function createErrDiff(actual, expected, operator, customMessage, diffType = 'si
236242
const myersDiffMessage = printMyersDiff(diff, operator);
237243
message = myersDiffMessage.message;
238244

239-
if (operator === 'partialDeepStrictEqual') {
240-
header = `${colors.gray}${colors.hasColors ? '' : '+ '}actual${colors.white} ${colors.red}- expected${colors.white}`;
241-
}
242-
243245
if (myersDiffMessage.skipped) {
244246
skipped = true;
245247
}
246248
}
247249

250+
if (operator === 'partialDeepStrictEqual') {
251+
header = `${colors.gray}${colors.hasColors ? '' : '+ '}actual${colors.white} ${colors.red}- expected${colors.white}`;
252+
}
253+
248254
const headerMessage = `${getErrorMessage(operator, customMessage)}\n${header}`;
249255
const skippedMessage = skipped ? '\n... Skipped lines' : '';
250256

test/parallel/test-assert-deep.js

Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1193,6 +1193,21 @@ test('Strict equal skips line diff for very large objects', () => {
11931193
);
11941194
});
11951195

1196+
test('Deep strict equal preserves line diff for large values with the same root', () => {
1197+
const actual = new Array(1_000).fill(0);
1198+
const expected = new Array(1_000).fill(0);
1199+
expected[10] = 1;
1200+
1201+
assert.throws(
1202+
() => assert.deepStrictEqual(actual, expected),
1203+
{
1204+
code: 'ERR_ASSERTION',
1205+
name: 'AssertionError',
1206+
message: /- {3}1/
1207+
}
1208+
);
1209+
});
1210+
11961211
test('Basic valueOf check', () => {
11971212
const a = new String(1);
11981213
a.valueOf = undefined;

0 commit comments

Comments
 (0)