UNPKG

@wizard9/json-patch-apply

Version:

A library for describing, calculating, and applying patches to Javascript Objects.

122 lines 5.53 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); const chai_1 = require("chai"); const pointer_1 = require("../src/pointer"); describe("pointer", () => { describe("encode/decode", () => { it("handles key without ~ or /", () => { chai_1.expect(pointer_1.JsonPointer.encode("abc")).eql("abc"); chai_1.expect(pointer_1.JsonPointer.encode("123")).eql("123"); chai_1.expect(pointer_1.JsonPointer.decode("abc")).eql("abc"); chai_1.expect(pointer_1.JsonPointer.decode("123")).eql("123"); }); it("handles ~", () => { chai_1.expect(pointer_1.JsonPointer.encode("~ab")).eql("~0ab"); chai_1.expect(pointer_1.JsonPointer.encode("a~b")).eql("a~0b"); chai_1.expect(pointer_1.JsonPointer.encode("ab~")).eql("ab~0"); chai_1.expect(pointer_1.JsonPointer.decode("~0ab")).eql("~ab"); chai_1.expect(pointer_1.JsonPointer.decode("a~0b")).eql("a~b"); chai_1.expect(pointer_1.JsonPointer.decode("ab~0")).eql("ab~"); }); it("handles /", () => { chai_1.expect(pointer_1.JsonPointer.encode("/ab")).eql("~1ab"); chai_1.expect(pointer_1.JsonPointer.encode("a/b")).eql("a~1b"); chai_1.expect(pointer_1.JsonPointer.encode("ab/")).eql("ab~1"); chai_1.expect(pointer_1.JsonPointer.decode("~1ab")).eql("/ab"); chai_1.expect(pointer_1.JsonPointer.decode("a~1b")).eql("a/b"); chai_1.expect(pointer_1.JsonPointer.decode("ab~1")).eql("ab/"); }); it("can decode encoded to same thing", () => { let chars = ["~", "/", "a", "b"]; let s = [""]; for (let i = 0; i < chars.length; i++) { let c = chars[i]; let len = s.length; for (let x = 0; x < len; x++) { let sv = s.shift(); if (sv && sv.length == 0) { s.push(c); } else { s.push(c + sv); s.push(sv + c); } } } s.forEach((sv) => { let encoded = pointer_1.JsonPointer.encode(sv); let decoded = pointer_1.JsonPointer.decode(encoded); chai_1.expect(sv, "expected encode/decode of '" + sv + "' to work").eql(decoded); }); }); }); describe("find", () => { it("returns undefined when pointing at root", () => { chai_1.expect(pointer_1.JsonPointer.findParent("abc", "")).not.be.undefined; chai_1.expect(pointer_1.JsonPointer.findParent("abc", "/")).not.be.undefined; }); it("fails with invalid path", () => { try { pointer_1.JsonPointer.findParent("abc", "a/"); throw new Error("missing error"); } catch (e) { chai_1.expect(e.message).eql("Invalid JSON Pointer syntax. Path should always begin with a /"); } }); it("returns index for top level array", () => { let source = [0]; let find = pointer_1.JsonPointer.findParent(source, "/0"); chai_1.expect(find).not.undefined; if (find) { chai_1.expect(find.key).eq("0"); chai_1.expect(find.parent).eq(source); } }); it("returns index for nested array", () => { let source = { test: [0] }; let find = pointer_1.JsonPointer.findParent(source, "/test/0"); chai_1.expect(find).not.undefined; if (find) { chai_1.expect(find.key).eq("0"); chai_1.expect(find.parent).eq(source.test); } }); it("returns key for top level object", () => { let source = { name: "Peter" }; let find = pointer_1.JsonPointer.findParent(source, "/name"); chai_1.expect(find).not.undefined; if (find) { chai_1.expect(find.key).eq("name"); chai_1.expect(find.parent).eq(source); } }); it("returns key for nested object", () => { let source = { test: { name: "Peter" } }; let find = pointer_1.JsonPointer.findParent(source, "/test/name"); chai_1.expect(find).not.undefined; if (find) { chai_1.expect(find.key).eq("name"); chai_1.expect(find.parent).eq(source.test); } }); it("returns undefined when path does not exist", () => { let source = { test: { name: "Peter" } }; let top = pointer_1.JsonPointer.findParent(source, "/missing"); let nested = pointer_1.JsonPointer.findParent(source, "/test/missing"); let missing = pointer_1.JsonPointer.findParent(source, "/missing/missing"); if (top && nested && !missing) { chai_1.expect(top.parent).eq(source); chai_1.expect(top.key).eq("missing"); chai_1.expect(nested.parent).eq(source.test); chai_1.expect(nested.key).eq("missing"); } else { chai_1.expect(top).not.be.undefined; chai_1.expect(nested).not.be.undefined; } chai_1.expect(missing).be.undefined; }); }); }); //# sourceMappingURL=pointer.spec.js.map