Fix diff building when only one side has a custom object formatter

Fixes #2061
This commit is contained in:
Steve Gravrock
2025-06-04 18:04:40 -07:00
parent e15819c0dd
commit 0183acc682
3 changed files with 65 additions and 2 deletions

View File

@@ -4881,7 +4881,10 @@ getJasmineRequireObj().DiffBuilder = function(j$) {
);
if (useCustom) {
messages.push(wrapPrettyPrinted(actualCustom, expectedCustom, path));
const prettyActual = actualCustom || this.prettyPrinter_(actual);
const prettyExpected =
expectedCustom || this.prettyPrinter_(expected);
messages.push(wrapPrettyPrinted(prettyActual, prettyExpected, path));
return false; // don't recurse further
}

View File

@@ -161,6 +161,63 @@ describe('DiffBuilder', function() {
expect(diffBuilder.getMessage()).toEqual(expectedMsg);
});
it('handles cases where only the expected has a custom object formatter', function() {
const formatter = function(x) {
if (typeof x === 'number') {
return '[number:' + x + ']';
}
};
const prettyPrinter = jasmineUnderTest.makePrettyPrinter([formatter]);
const diffBuilder = new jasmineUnderTest.DiffBuilder({
prettyPrinter: prettyPrinter
});
diffBuilder.setRoots('five', 4);
diffBuilder.recordMismatch();
expect(diffBuilder.getMessage()).toEqual(
"Expected 'five' to equal [number:4]."
);
});
it('handles cases where only the actual has a custom object formatter', function() {
const formatter = function(x) {
if (typeof x === 'number') {
return '[number:' + x + ']';
}
};
const prettyPrinter = jasmineUnderTest.makePrettyPrinter([formatter]);
const diffBuilder = new jasmineUnderTest.DiffBuilder({
prettyPrinter: prettyPrinter
});
diffBuilder.setRoots(5, 'four');
diffBuilder.recordMismatch();
expect(diffBuilder.getMessage()).toEqual(
"Expected [number:5] to equal 'four'."
);
});
it('handles complex cases where only one side has a custom object formatter', function() {
const formatter = function(x) {
if (typeof x === 'number') {
return '[number:' + x + ']';
}
};
const prettyPrinter = jasmineUnderTest.makePrettyPrinter([formatter]);
const diffBuilder = new jasmineUnderTest.DiffBuilder({
prettyPrinter: prettyPrinter
});
diffBuilder.setRoots(5, { foo: 'bar', fnord: { graults: ['wombat'] } });
diffBuilder.recordMismatch();
expect(diffBuilder.getMessage()).toEqual(
"Expected [number:5] to equal Object({ foo: 'bar', fnord: Object({ graults: [ 'wombat' ] }) })."
);
});
it('builds diffs involving asymmetric equality testers that implement valuesForDiff_ at the root', function() {
const prettyPrinter = jasmineUnderTest.makePrettyPrinter([]),
diffBuilder = new jasmineUnderTest.DiffBuilder({

View File

@@ -37,7 +37,10 @@ getJasmineRequireObj().DiffBuilder = function(j$) {
);
if (useCustom) {
messages.push(wrapPrettyPrinted(actualCustom, expectedCustom, path));
const prettyActual = actualCustom || this.prettyPrinter_(actual);
const prettyExpected =
expectedCustom || this.prettyPrinter_(expected);
messages.push(wrapPrettyPrinted(prettyActual, prettyExpected, path));
return false; // don't recurse further
}