assertthat
Version:
assertthat provides fluent TDD.
45 lines (44 loc) • 1.47 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", { value: true });
exports.compareObjects = void 0;
const compare_1 = require("../typeAware/compare");
const size_1 = require("../../size/typeAware/size");
const EqualDiff_1 = require("../../diffs/EqualDiff");
const ObjectDiff_1 = require("../../diffs/forObjects/ObjectDiff");
const compareObjects = function (actual, expected) {
const newDiff = (0, ObjectDiff_1.objectDiff)({
cost: 0,
additions: {},
omissions: {},
changes: {},
equal: {}
});
for (const key of Object.keys(actual)) {
if (key in expected) {
const subDiff = (0, compare_1.compare)(actual[key], expected[key]);
if (subDiff.cost === 0) {
newDiff.equal[key] = actual[key];
}
else {
newDiff.changes[key] = subDiff;
newDiff.cost += subDiff.cost;
}
}
else {
newDiff.additions[key] = actual[key];
newDiff.cost += (0, size_1.size)(actual[key]);
}
}
for (const key of Object.keys(expected)) {
if (key in actual) {
continue;
}
newDiff.omissions[key] = expected[key];
newDiff.cost += (0, size_1.size)(expected[key]);
}
if (newDiff.cost === 0) {
return (0, EqualDiff_1.equalDiff)({ value: actual });
}
return newDiff;
};
exports.compareObjects = compareObjects;