forked from sashin/sashinexists
65 lines
1.4 KiB
JavaScript
65 lines
1.4 KiB
JavaScript
import assert from "node:assert";
|
|
import { describe, test } from "node:test";
|
|
import { DeepObjectTree, ObjectTree, Tree } from "../../src/internal.js";
|
|
import merge from "../../src/operations/merge.js";
|
|
import * as symbols from "../../src/symbols.js";
|
|
|
|
describe("merge", () => {
|
|
test("performs a shallow merge", async () => {
|
|
const fixture = merge(
|
|
{
|
|
a: 1,
|
|
// Will be obscured by `b` that follows
|
|
b: {
|
|
c: 2,
|
|
},
|
|
},
|
|
{
|
|
b: {
|
|
d: 3,
|
|
},
|
|
e: {
|
|
f: 4,
|
|
},
|
|
}
|
|
);
|
|
|
|
assert.deepEqual(await Tree.plain(fixture), {
|
|
a: 1,
|
|
b: {
|
|
d: 3,
|
|
},
|
|
e: {
|
|
f: 4,
|
|
},
|
|
});
|
|
|
|
// Merge is shallow, and last tree wins, so `b/c` doesn't exist
|
|
const c = await Tree.traverse(fixture, "b", "c");
|
|
assert.equal(c, undefined);
|
|
|
|
// Parent of a subvalue is the merged tree
|
|
const b = await fixture.get("b");
|
|
assert.equal(b[symbols.parent], fixture);
|
|
});
|
|
|
|
test("subtree can overwrite a leaf node", async () => {
|
|
const fixture = merge(
|
|
new ObjectTree({
|
|
a: 1,
|
|
}),
|
|
new DeepObjectTree({
|
|
a: {
|
|
b: 2,
|
|
},
|
|
})
|
|
);
|
|
assert.deepEqual([...(await fixture.keys())], ["a/"]);
|
|
assert.deepEqual(await Tree.plain(fixture), {
|
|
a: {
|
|
b: 2,
|
|
},
|
|
});
|
|
});
|
|
});
|