jsoniq
Version:
JSONiq implementation for JavaScript
160 lines (125 loc) • 5.56 kB
text/typescript
import PUL from "../../../../lib/updates/PUL";
import PULComposition from "../../../../lib/updates/composition/PULComposition";
describe("Composition", () => {
it("test copy", () => {
var d0 = new PUL();
var d1 = new PUL();
var delta = PULComposition.compose(d0, d1);
expect(delta === d0).toBe(true);
delta = PULComposition.compose(d0, d1, true);
expect(delta === d0).toBe(false);
expect(delta).toEqual(d0);
});
it("delete & insert (1)", () => {
var d0 = new PUL();
d0.insertIntoArray("1", [], 0, [{}]);
d0.replaceInObject("1", [], "b", {});
d0.insertIntoObject("1", [], { });
var d1 = new PUL();
d1.remove("1");
var delta = PULComposition.compose(d0, d1);
expect(delta.udps.insertIntoArray.length).toBe(0);
expect(delta.udps.insertIntoObject.length).toBe(0);
expect(delta.udps.deleteFromObject.length).toBe(0);
expect(delta.udps.deleteFromArray.length).toBe(0);
expect(delta.udps.replaceInObject.length).toBe(0);
expect(delta.udps.replaceInArray.length).toBe(0);
expect(delta.udps.renameInObject.length).toBe(0);
expect(delta.udps.remove.length).toBe(1);
expect(delta.udps.insert.length).toBe(0);
expect(delta.udps.remove[0].id).toBe("1");
});
it("insert (1)", () => {
//var store = new MemoryStore();
var d0 = new PUL();
d0.insert("1", { a: { b: { c: 1 } } });
var d1 = new PUL();
d1.insertIntoObject("1", ["a", "b"], { d: 1, e: 1 });
var delta = PULComposition.compose(d0, d1);
expect(delta.udps.insertIntoObject.length).toBe(0);
expect(delta.udps.insert.length).toBe(1);
expect(delta.udps.insert[0].item.a.b).toEqual({ c: 1, d: 1, e: 1 });
});
it("insert (2)", () => {
//var store = new MemoryStore();
var d0 = new PUL();
d0.insertIntoObject("1", ["a", "b"], { c: 1 });
var d1 = new PUL();
d1.insertIntoObject("1", ["a", "b"], { d: 1, e: 1 });
var delta = PULComposition.compose(d0, d1);
expect(delta.udps.insertIntoObject.length).toBe(1);
expect(delta.udps.insertIntoObject[0].pairs).toEqual({ c: 1, d: 1, e: 1 });
});
it("insert (3)", () => {
var d0 = new PUL();
d0.replaceInObject("1", ["a"], "b", { d: { e: 1 } });
var d1 = new PUL();
d1.insertIntoObject("1", ["a", "b", "d"], { f: 1 });
var delta = PULComposition.compose(d0, d1);
expect(delta.udps.replaceInObject.length).toBe(1);
expect(delta.udps.replaceInObject[0].item.d.e).toBe(1);
expect(delta.udps.replaceInObject[0].item.d.f).toBe(1);
});
it("insert (4)", () => {
var d0 = new PUL();
d0.remove("1");
d0.remove("1");
var d1 = new PUL();
d1.insert("1", { a: 1 });
var delta = PULComposition.compose(d0, d1);
expect(delta.udps.remove.length).toBe(0);
expect(delta.udps.insert.length).toBe(1);
});
it("insertIntoObject aggregation of renameInObject (1)", () => {
var d0 = new PUL();
d0.renameInObject("1", ["a", "b"], "c", "d");
d0.renameInObject("1", ["a", "b", "c", "e"], "f", "g");
var d1 = new PUL();
d1.insertIntoObject("1", ["a", "b", "d"], { e: 1 });
var delta = PULComposition.compose(d0, d1);
expect(delta.udps.renameInObject.length).toBe(2);
expect(delta.udps.insertIntoObject.length).toBe(1);
expect(delta.udps.insertIntoObject[0].ordPath.join(".")).toBe("a.b.c");
});
it("insertIntoObject aggregation of replaceInObject (1)", () => {
var d0 = new PUL();
d0.replaceInObject("1", ["a", "b"], "c", { d: { e: 1 }});
var d1 = new PUL();
d1.insertIntoObject("1", ["a", "b", "c", "d"], { f: 1 });
var delta = PULComposition.compose(d0, d1);
expect(delta.udps.replaceInObject.length).toBe(1);
expect(delta.udps.insertIntoObject.length).toBe(0);
expect(delta.udps.replaceInObject[0].item.d).toEqual({ e: 1, f: 1 });
});
it("delete (1)", () => {
var d0 = new PUL();
d0.insert("1", { a: { b: { c: 1, d: 1, e: 1 } } });
var d1 = new PUL();
d1.deleteFromObject("1", ["a", "b"], ["c", "d"]);
var delta = PULComposition.compose(d0, d1);
expect(delta.udps.deleteFromObject.length).toBe(0);
expect(delta.udps.insert.length).toBe(1);
expect(delta.udps.insert[0].item.a.b).toEqual({ e: 1 });
});
it("delete (2)", () => {
//var store = new MemoryStore();
var d0 = new PUL();
d0.deleteFromObject("1", ["a", "b"], ["e"]);
var d1 = new PUL();
d1.deleteFromObject("1", ["a", "b"], ["c", "d"]);
var delta = PULComposition.compose(d0, d1);
expect(delta.udps.deleteFromObject.length).toBe(1);
expect(delta.udps.deleteFromObject[0].keys).toEqual(["e", "c", "d"]);
});
it("delete (3)", () => {
//var store = new MemoryStore();
var d0 = new PUL();
d0.insertIntoObject("1", ["a", "b"], { c: 1, d: 1, e: 1 });
var d1 = new PUL();
d1.deleteFromObject("1", ["a", "b"], ["c", "d"]);
var delta = PULComposition.compose(d0, d1);
expect(delta.udps.insertIntoObject.length).toBe(1);
expect(delta.udps.deleteFromObject.length).toBe(0);
expect(delta.udps.insertIntoObject[0].pairs).toEqual({ e: 1 });
});
});