38 lines
886 B
JavaScript
38 lines
886 B
JavaScript
import diff from 'diff';
|
|
|
|
export function generateDiffLog(expected, actual) {
|
|
return diff.diffJson(expected, actual).map((hunk) => {
|
|
if (hunk.added) {
|
|
return `+ ${hunk.value}`;
|
|
} else if (hunk.removed) {
|
|
return `- ${hunk.value}`;
|
|
} else {
|
|
return ` ${hunk.value}`;
|
|
}
|
|
}).join('');
|
|
}
|
|
|
|
export function deepEqual(a, b) {
|
|
if (typeof a !== typeof b)
|
|
return false;
|
|
if (typeof a === 'number')
|
|
return Math.abs(a - b) < 1e-10;
|
|
if (a === null || typeof a !== 'object')
|
|
return a === b;
|
|
|
|
const ka = Object.keys(a);
|
|
const kb = Object.keys(b);
|
|
|
|
if (ka.length !== kb.length)
|
|
return false;
|
|
|
|
ka.sort();
|
|
kb.sort();
|
|
|
|
for (let i = 0; i < ka.length; i++)
|
|
if (ka[i] !== kb[i] || !deepEqual(a[ka[i]], b[ka[i]]))
|
|
return false;
|
|
|
|
return true;
|
|
}
|