jsoniq
Version:
JSONiq implementation for JavaScript
99 lines (97 loc) • 15.7 kB
JavaScript
;
/// <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