UNPKG

jsoniq

Version:

JSONiq implementation for JavaScript

99 lines (97 loc) 15.7 kB
"use strict"; /// <reference path="../../../typings/tsd.d.ts" /> require("jasmine2-pit"); var PUL_1 = require("../../../lib/updates/PUL"); var MemoryStore_1 = require("../../../lib/stores/memory/MemoryStore"); var MemoryTransaction_1 = require("../../../lib/stores/memory/MemoryTransaction"); describe("Invert Operator", () => { pit("delete & insert", () => { var todos = [{ id: 0, title: "Write thesis", complete: false }]; var store = new MemoryStore_1.default(); var id = store.put(todos); var pul = new PUL_1.default(); pul .insertIntoArray(id, [], 1, [{ id: 1 }]) .insertIntoObject(id, ["0"], { title: "More figures" }) .deleteFromObject(id, ["0"], ["title"]); var invert = pul.invert(new MemoryTransaction_1.default(store.snapshot)); return invert.then(invert => { return store.commitWith(pul).then(() => { var d1 = store.get(id); expect(d1[0].id).toBe(0); expect(d1[0].title).toBe("More figures"); expect(d1[1].id).toBe(1); return store.commitWith(invert).then(() => { var d0 = store.get(id); expect(d0).toEqual(todos); }); }); }); }); pit("replaceInObject", () => { var todos = [{ id: 0, title: "Write thesis", complete: false }]; var store = new MemoryStore_1.default(); var id = store.put(todos); var pul = new PUL_1.default(); pul.replaceInObject(id, ["0"], "complete", true); pul.renameInObject(id, ["0"], "complete", "completed"); var invert = pul.invert(new MemoryTransaction_1.default(store.snapshot)); return invert.then(invert => { return store.commitWith(pul).then(() => { var d1 = store.get(id); expect(d1[0].completed).toBe(true); return store.commitWith(invert).then(() => { var d0 = store.get(id); expect(d0).toEqual(todos); }); }); }); }); pit("example 1", () => { var todos = [{ id: 0, title: "Write thesis", complete: false }]; var store = new MemoryStore_1.default(); var id = store.put(todos); var ref = store.put({ user: "bar" }); var pul = new PUL_1.default(); pul .insertIntoArray(id, [], 1, [{ id: 1 }]) .replaceInObject(id, ["0"], "complete", true) .renameInObject(id, ["0"], "complete", "completed") .insertIntoObject(id, ["0"], { title: "More figures" }) .deleteFromObject(id, ["0"], ["title"]); pul.insert("hello", { user: "foo" }); pul.remove(ref); var invert = pul.invert(new MemoryTransaction_1.default(store.snapshot)); return invert.then(invert => { return store.commitWith(pul).then(() => { var d1 = store.get(id); expect(d1[0]["completed"]).toBe(true); expect(d1[0].complete).toBe(undefined); expect(d1[0].id).toBe(0); expect(d1[0].title).toBe("More figures"); expect(d1[1].id).toBe(1); expect(store.get("hello")).toEqual({ user: "foo" }); expect(() => { store.get(ref); }).toThrow(); return store.commitWith(invert).then(() => { var d0 = store.get(id); expect(d0).toEqual(todos); expect(() => { store.get("hello"); }).toThrow(); expect(store.get(ref)).toEqual({ user: "bar" }); }); }); }); }); }); //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbInRlc3RzL25vZGUvdXBkYXRlcy9JbnZlcnQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IjtBQUFBLGtEQUFrRDtBQUNsRCxPQUFPLENBQUMsY0FBYyxDQUFDLENBQUM7QUFDeEIsb0JBQWdCLDBCQUEwQixDQUFDLENBQUE7QUFDM0MsNEJBQXdCLHdDQUF3QyxDQUFDLENBQUE7QUFDakUsa0NBQThCLDhDQUE4QyxDQUFDLENBQUE7QUFJN0UsUUFBUSxDQUFDLGlCQUFpQixFQUFFO0lBRXhCLEdBQUcsQ0FBQyxpQkFBaUIsRUFBRTtRQUNuQixJQUFJLEtBQUssR0FBRyxDQUFDO2dCQUNULEVBQUUsRUFBRSxDQUFDO2dCQUNMLEtBQUssRUFBRSxjQUFjO2dCQUNyQixRQUFRLEVBQUUsS0FBSzthQUNsQixDQUFDLENBQUM7UUFFSCxJQUFJLEtBQUssR0FBRyxJQUFJLHFCQUFXLEVBQUUsQ0FBQztRQUM5QixJQUFJLEVBQUUsR0FBRyxLQUFLLENBQUMsR0FBRyxDQUFDLEtBQUssQ0FBQyxDQUFDO1FBQzFCLElBQUksR0FBRyxHQUFHLElBQUksYUFBRyxFQUFFLENBQUM7UUFDcEIsR0FBRzthQUNFLGVBQWUsQ0FBQyxFQUFFLEVBQUUsRUFBRSxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsRUFBRSxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUM7YUFDdkMsZ0JBQWdCLENBQUMsRUFBRSxFQUFFLENBQUMsR0FBRyxDQUFDLEVBQUUsRUFBRSxLQUFLLEVBQUUsY0FBYyxFQUFFLENBQUM7YUFDdEQsZ0JBQWdCLENBQUMsRUFBRSxFQUFFLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDO1FBRTVDLElBQUksTUFBTSxHQUFHLEdBQUcsQ0FBQyxNQUFNLENBQUMsSUFBSSwyQkFBaUIsQ0FBQyxLQUFLLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQztRQUMvRCxNQUFNLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxNQUFNO1lBQ3JCLE1BQU0s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TSxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxPQUFPLENBQUMsRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFFLENBQUMsQ0FBQztnQkFDcEQsQ0FBQyxDQUFDLENBQUM7WUFDUCxDQUFDLENBQUMsQ0FBQztRQUNQLENBQUMsQ0FBQyxDQUFDO0lBQ1AsQ0FBQyxDQUFDLENBQUM7QUFDUCxDQUFDLENBQUMsQ0FBQyIsImZpbGUiOiJ0ZXN0cy9ub2RlL3VwZGF0ZXMvSW52ZXJ0LmpzIiwic291cmNlc0NvbnRlbnQiOlsiLy8vIDxyZWZlcmVuY2UgcGF0aD1cIi4uLy4uLy4uL3R5cGluZ3MvdHNkLmQudHNcIiAvPlxucmVxdWlyZShcImphc21pbmUyLXBpdFwiKTtcbmltcG9ydCBQVUwgZnJvbSBcIi4uLy4uLy4uL2xpYi91cGRhdGVzL1BVTFwiO1xuaW1wb3J0IE1lbW9yeVN0b3JlIGZyb20gXCIuLi8uLi8uLi9saWIvc3RvcmVzL21lbW9yeS9NZW1vcnlTdG9yZVwiO1xuaW1wb3J0IE1lbW9yeVRyYW5zYWN0aW9uIGZyb20gXCIuLi8uLi8uLi9saWIvc3RvcmVzL21lbW9yeS9NZW1vcnlUcmFuc2FjdGlvblwiO1xuXG5kZWNsYXJlIGZ1bmN0aW9uIHBpdChleHBlY3RhdGlvbjogc3RyaW5nLCBhc3NlcnRpb24/OiAoZG9uZTogKCkgPT4gdm9pZCkgPT4gYW55KTogdm9pZDtcblxuZGVzY3JpYmUoXCJJbnZlcnQgT3BlcmF0b3JcIiwgKCkgPT4ge1xuXG4gICAgcGl0KFwiZGVsZXRlICYgaW5zZXJ0XCIsICgpID0+IHtcbiAgICAgICAgdmFyIHRvZG9zID0gW3tcbiAgICAgICAgICAgIGlkOiAwLFxuICAgICAgICAgICAgdGl0bGU6IFwiV3JpdGUgdGhlc2lzXCIsXG4gICAgICAgICAgICBjb21wbGV0ZTogZmFsc2VcbiAgICAgICAgfV07XG5cbiAgICAgICAgdmFyIHN0b3JlID0gbmV3IE1lbW9yeVN0b3JlKCk7XG4gICAgICAgIHZhciBpZCA9IHN0b3JlLnB1dCh0b2Rvcyk7XG4gICAgICAgIHZhciBwdWwgPSBuZXcgUFVMKCk7XG4gICAgICAgIHB1bFxuICAgICAgICAgICAgLmluc2VydEludG9BcnJheShpZCwgW10sIDEsIFt7IGlkOiAxIH1dKVxuICAgICAgICAgICAgLmluc2VydEludG9PYmplY3QoaWQsIFtcIjBcIl0sIHsgdGl0bGU6IFwiTW9yZSBmaWd1cmVzXCIgfSlcbiAgICAgICAgICAgIC5kZWxldGVGcm9tT2JqZWN0KGlkLCBbXCIwXCJdLCBbXCJ0aXRsZVwiXSk7XG5cbiAgICAgICAgdmFyIGludmVydCA9IHB1bC5pbnZlcnQobmV3IE1lbW9yeVRyYW5zYWN0aW9uKHN0b3JlLnNuYXBzaG90KSk7XG4gICAgICAgIHJldHVybiBpbnZlcnQudGhlbihpbnZlcnQgPT4ge1xuICAgICAgICAgICAgcmV0dXJuIHN0b3JlLmNvbW1pdFdpdGgocHVsKS50aGVuKCgpID0+IHtcbiAgICAgICAgICAgICAgICB2YXIgZDEgPSBzdG9yZS5nZXQoaWQpO1xuICAgICAgICAgICAgICAgIGV4cGVjdChkMVswXS5pZCkudG9CZSgwKTtcbiAgICAgICAgICAgICAgICBleHBlY3QoZDFbMF0udGl0bGUpLnRvQmUoXCJNb3JlIGZpZ3VyZXNcIik7XG4gICAgICAgICAgICAgICAgZXhwZWN0KGQxWzFdLmlkKS50b0JlKDEpO1xuXG4gICAgICAgICAgICAgICAgcmV0dXJuIHN0b3JlLmNvbW1pdFdpdGgoaW52ZXJ0KS50aGVuKCgpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgdmFyIGQwID0gc3RvcmUuZ2V0KGlkKTtcbiAgICAgICAgICAgICAgICAgICAgZXhwZWN0KGQwKS50b0VxdWFsKHRvZG9zKTtcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9KTtcbiAgICB9KTtcblxuICAgIHBpdChcInJlcGxhY2VJbk9iamVjdFwiLCAoKSA9PiB7XG4gICAgICAgIHZhciB0b2RvcyA9IFt7XG4gICAgICAgICAgICBpZDogMCxcbiAgICAgICAgICAgIHRpdGxlOiBcIldyaXRlIHRoZXNpc1wiLFxuICAgICAgICAgICAgY29tcGxldGU6IGZhbHNlXG4gICAgICAgIH1dO1xuXG4gICAgICAgIHZhciBzdG9yZSA9IG5ldyBNZW1vcnlTdG9yZSgpO1xuICAgICAgICB2YXIgaWQgPSBzdG9yZS5wdXQodG9kb3MpO1xuICAgICAgICB2YXIgcHVsID0gbmV3IFBVTCgpO1xuICAgICAgICBwdWwucmVwbGFjZUluT2JqZWN0KGlkLCBbXCIwXCJdLCBcImNvbXBsZXRlXCIsIHRydWUpO1xuICAgICAgICBwdWwucmVuYW1lSW5PYmplY3QoaWQsIFtcIjBcIl0sIFwiY29tcGxldGVcIiwgXCJjb21wbGV0ZWRcIik7XG5cbiAgICAgICAgdmFyIGludmVydCA9IHB1bC5pbnZlcnQobmV3IE1lbW9yeVRyYW5zYWN0aW9uKHN0b3JlLnNuYXBzaG90KSk7XG4gICAgICAgIHJldHVybiBpbnZlcnQudGhlbihpbnZlcnQgPT4ge1xuICAgICAgICAgICAgcmV0dXJuIHN0b3JlLmNvbW1pdFdpdGgocHVsKS50aGVuKCgpID0+IHtcbiAgICAgICAgICAgICAgICB2YXIgZDEgPSBzdG9yZS5nZXQoaWQpO1xuICAgICAgICAgICAgICAgIGV4cGVjdChkMVswXS5jb21wbGV0ZWQpLnRvQmUodHJ1ZSk7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHN0b3JlLmNvbW1pdFdpdGgoaW52ZXJ0KS50aGVuKCgpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgdmFyIGQwID0gc3RvcmUuZ2V0KGlkKTtcbiAgICAgICAgICAgICAgICAgICAgZXhwZWN0KGQwKS50b0VxdWFsKHRvZG9zKTtcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9KTtcbiAgICB9KTtcblxuICAgIHBpdChcImV4YW1wbGUgMVwiLCAoKSA9PiB7XG4gICAgICAgIHZhciB0b2RvcyA9IFt7XG4gICAgICAgICAgICBpZDogMCxcbiAgICAgICAgICAgIHRpdGxlOiBcIldyaXRlIHRoZXNpc1wiLFxuICAgICAgICAgICAgY29tcGxldGU6IGZhbHNlXG4gICAgICAgIH1dO1xuXG4gICAgICAgIHZhciBzdG9yZSA9IG5ldyBNZW1vcnlTdG9yZSgpO1xuICAgICAgICB2YXIgaWQgPSBzdG9yZS5wdXQodG9kb3MpO1xuICAgICAgICB2YXIgcmVmID0gc3RvcmUucHV0KHsgdXNlcjogXCJiYXJcIiB9KTtcbiAgICAgICAgdmFyIHB1bCA9IG5ldyBQVUwoKTtcbiAgICAgICAgcHVsXG4gICAgICAgICAgICAuaW5zZXJ0SW50b0FycmF5KGlkLCBbXSwgMSwgW3sgaWQ6IDEgfV0pXG4gICAgICAgICAgICAucmVwbGFjZUluT2JqZWN0KGlkLCBbXCIwXCJdLCBcImNvbXBsZXRlXCIsIHRydWUpXG4gICAgICAgICAgICAucmVuYW1lSW5PYmplY3QoaWQsIFtcIjBcIl0sIFwiY29tcGxldGVcIiwgXCJjb21wbGV0ZWRcIilcbiAgICAgICAgICAgIC5pbnNlcnRJbnRvT2JqZWN0KGlkLCBbXCIwXCJdLCB7IHRpdGxlOiBcIk1vcmUgZmlndXJlc1wiIH0pXG4gICAgICAgICAgICAuZGVsZXRlRnJvbU9iamVjdChpZCwgW1wiMFwiXSwgW1widGl0bGVcIl0pO1xuICAgICAgICBwdWwuaW5zZXJ0KFwiaGVsbG9cIiwgeyB1c2VyOiBcImZvb1wiIH0pO1xuICAgICAgICBwdWwucmVtb3ZlKHJlZik7XG5cbiAgICAgICAgdmFyIGludmVydCA9IHB1bC5pbnZlcnQobmV3IE1lbW9yeVRyYW5zYWN0aW9uKHN0b3JlLnNuYXBzaG90KSk7XG4gICAgICAgIHJldHVybiBpbnZlcnQudGhlbihpbnZlcnQgPT4ge1xuICAgICAgICAgICAgcmV0dXJuIHN0b3JlLmNvbW1pdFdpdGgocHVsKS50aGVuKCgpID0+IHtcbiAgICAgICAgICAgICAgICB2YXIgZDEgPSBzdG9yZS5nZXQoaWQpO1xuICAgICAgICAgICAgICAgIGV4cGVjdChkMVswXVtcImNvbXBsZXRlZFwiXSkudG9CZSh0cnVlKTtcbiAgICAgICAgICAgICAgICBleHBlY3QoZDFbMF0uY29tcGxldGUpLnRvQmUodW5kZWZpbmVkKTtcbiAgICAgICAgICAgICAgICBleHBlY3QoZDFbMF0uaWQpLnRvQmUoMCk7XG4gICAgICAgICAgICAgICAgZXhwZWN0KGQxWzBdLnRpdGxlKS50b0JlKFwiTW9yZSBmaWd1cmVzXCIpO1xuICAgICAgICAgICAgICAgIGV4cGVjdChkMVsxXS5pZCkudG9CZSgxKTtcbiAgICAgICAgICAgICAgICBleHBlY3Qoc3RvcmUuZ2V0KFwiaGVsbG9cIikpLnRvRXF1YWwoeyB1c2VyOiBcImZvb1wiIH0pO1xuICAgICAgICAgICAgICAgIGV4cGVjdCgoKSA9PiB7IHN0b3JlLmdldChyZWYpOyB9KS50b1Rocm93KCk7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHN0b3JlLmNvbW1pdFdpdGgoaW52ZXJ0KS50aGVuKCgpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgdmFyIGQwID0gc3RvcmUuZ2V0KGlkKTtcbiAgICAgICAgICAgICAgICAgICAgZXhwZWN0KGQwKS50b0VxdWFsKHRvZG9zKTtcbiAgICAgICAgICAgICAgICAgICAgZXhwZWN0KCgpID0+IHsgc3RvcmUuZ2V0KFwiaGVsbG9cIik7IH0pLnRvVGhyb3coKTtcbiAgICAgICAgICAgICAgICAgICAgZXhwZWN0KHN0b3JlLmdldChyZWYpKS50b0VxdWFsKHsgdXNlcjogXCJiYXJcIiB9KTtcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9KTtcbiAgICB9KTtcbn0pO1xuIl0sInNvdXJjZVJvb3QiOiIvc291cmNlLyJ9