Superdiff provides a complete and readable diff for both arrays and objects. Plus, it supports stream and file inputs for handling large datasets efficiently, is battle-tested, has zero dependencies, and is super fast.
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 

130 lines
3.0 KiB

import { getListDiff } from "../src/list-diff";
describe("getListDiff", () => {
it("returns an empty diff if no lists are provided", () => {
expect(getListDiff(null, null)).toStrictEqual({ type: "list", diff: [] });
});
it("consider previous list as completely deleted if no next list is provided", () => {
const res = getListDiff(["mbappe", "mendes", "verratti", "ruiz"], null);
console.log("res", JSON.stringify(res, null, 2));
expect(
getListDiff(["mbappe", "mendes", "verratti", "ruiz"], null)
).toStrictEqual({
type: "list",
diff: [
{
value: "mbappe",
prevIndex: 0,
newIndex: null,
indexDiff: null,
status: "deleted",
},
{
value: "mendes",
prevIndex: 1,
newIndex: null,
indexDiff: null,
status: "deleted",
},
{
value: "verratti",
prevIndex: 2,
newIndex: null,
indexDiff: null,
status: "deleted",
},
{
value: "ruiz",
prevIndex: 3,
newIndex: null,
indexDiff: null,
status: "deleted",
},
],
});
});
it("consider next list as completely added if no previous list is provided", () => {
expect(
getListDiff(null, ["mbappe", "mendes", "verratti", "ruiz"])
).toStrictEqual({
type: "list",
diff: [
{
value: "mbappe",
prevIndex: null,
newIndex: 0,
indexDiff: null,
status: "added",
},
{
value: "mendes",
prevIndex: null,
newIndex: 1,
indexDiff: null,
status: "added",
},
{
value: "verratti",
prevIndex: null,
newIndex: 2,
indexDiff: null,
status: "added",
},
{
value: "ruiz",
prevIndex: null,
newIndex: 3,
indexDiff: null,
status: "added",
},
],
});
});
it("detects changed values in the list", () => {
expect(
getListDiff(
["mbappe", "mendes", "verratti", "ruiz"],
["mbappe", "messi", "ruiz"]
)
).toStrictEqual({
type: "list",
diff: [
{
value: "mbappe",
prevIndex: 0,
newIndex: 0,
indexDiff: 0,
status: "equal",
},
{
value: "mendes",
prevIndex: 1,
newIndex: null,
indexDiff: null,
status: "deleted",
},
{
value: "verratti",
prevIndex: 2,
newIndex: null,
indexDiff: null,
status: "deleted",
},
{
value: "messi",
prevIndex: null,
newIndex: 1,
indexDiff: null,
status: "added",
},
{
value: "ruiz",
prevIndex: 3,
newIndex: 2,
indexDiff: -1,
status: "moved",
},
],
});
});
});