UNPKG

3.38 kBJavaScriptView Raw
1var expect = require('expect.js'),
2jpath = require('..')
3;
4
5var obj = {
6 a: 1,
7 b: {
8 c: 2
9 },
10 d: {
11 e: [{a:3}, {b:4}, {c:5}]
12 }
13};
14
15// JSON Pointers (as strings)
16
17var n = -1
18, ub = 1000
19, start = process.hrtime();
20
21
22while(++n < ub) {
23
24 expect(jpath.resolve(obj, "/a")).to.contain(1);
25 expect(jpath.resolve(obj, "/b/c")).to.contain(2);
26 expect(jpath.resolve(obj, "/d/e/0/a")).to.contain(3);
27 expect(jpath.resolve(obj, "/d/e/1/b")).to.contain(4);
28 expect(jpath.resolve(obj, "/d/e/2/c")).to.contain(5);
29
30 expect(jpath.resolve(obj, "")).to.contain(obj);
31}
32
33// JSON Pointers (as URI fragments)
34ub = ub * 2;
35n--;
36while(++n < ub) {
37
38 expect(jpath.resolve(obj, "#/a")).to.contain(1);
39 expect(jpath.resolve(obj, "#/b/c")).to.contain(2);
40 expect(jpath.resolve(obj, "#/d/e/0/a")).to.contain(3);
41 expect(jpath.resolve(obj, "#/d/e/1/b")).to.contain(4);
42 expect(jpath.resolve(obj, "#/d/e/2/c")).to.contain(5);
43
44 expect(jpath.resolve(obj, "#")).to.contain(obj);
45}
46
47var complexKeys = {
48 "a/b": {
49 c: 1
50 },
51 d: {
52 "e/f": 2
53 },
54 "~1": 3,
55 "01": 4
56}
57
58expect(jpath.resolve(complexKeys, "/a~1b/c")).to.contain(1);
59expect(jpath.resolve(complexKeys, "/d/e~1f")).to.contain(2);
60expect(jpath.resolve(complexKeys, "/~01")).to.contain(3);
61expect(jpath.resolve(complexKeys, "/01")).to.contain(4);
62expect(jpath.resolve(complexKeys, "/a/b/c")).to.be.empty();
63expect(jpath.resolve(complexKeys, "/~1")).to.be.empty();
64
65// draft-ietf-appsawg-json-pointer-08 has special array rules
66var ary = [ "zero", "one", "two" ];
67expect(jpath.resolve(ary, "/01")).to.be.empty();
68
69// Examples from the draft:
70var example = {
71 "foo": ["bar", "baz"],
72 "": 0,
73 "a/b": 1,
74 "c%d": 2,
75 "e^f": 3,
76 "g|h": 4,
77 "i\\j": 5,
78 "k\"l": 6,
79 " ": 7,
80 "m~n": 8
81};
82
83var p = jpath.create('#/foo');
84expect(p.resolve(example)).to.contain(example["foo"]);
85
86expect(jpath.resolve(example, "")).to.contain(example);
87var ans = jpath.resolve(example, "/foo");
88expect(ans.length).to.be(1);
89expect(ans[0][0]).to.contain("bar");
90expect(ans[0][1]).to.contain("baz");
91expect(jpath.resolve(example, "/foo/0")).to.contain("bar");
92expect(jpath.resolve(example, "/")).to.contain(0);
93expect(jpath.resolve(example, "/a~1b")).to.contain(1);
94expect(jpath.resolve(example, "/c%d")).to.contain(2);
95expect(jpath.resolve(example, "/e^f")).to.contain(3);
96expect(jpath.resolve(example, "/g|h")).to.contain(4);
97expect(jpath.resolve(example, "/i\\j")).to.contain(5);
98expect(jpath.resolve(example, "/k\"l")).to.contain(6);
99expect(jpath.resolve(example, "/ ")).to.contain(7);
100expect(jpath.resolve(example, "/m~0n")).to.contain(8);
101
102expect(jpath.resolve(example, "#")).to.contain(example);
103var ans = jpath.resolve(example, "#/foo");
104expect(ans.length).to.be(1);
105expect(ans[0][0]).to.contain("bar");
106expect(ans[0][1]).to.contain("baz");
107expect(jpath.resolve(example, "#/foo/0")).to.contain("bar");
108expect(jpath.resolve(example, "#/")).to.contain(0);
109expect(jpath.resolve(example, "#/a~1b")).to.contain(1);
110expect(jpath.resolve(example, "#/c%25d")).to.contain(2);
111expect(jpath.resolve(example, "#/e%5Ef")).to.contain(3);
112expect(jpath.resolve(example, "#/g%7Ch")).to.contain(4);
113expect(jpath.resolve(example, "#/i%5Cj")).to.contain(5);
114expect(jpath.resolve(example, "#/k%22l")).to.contain(6);
115expect(jpath.resolve(example, "#/%20")).to.contain(7);
116expect(jpath.resolve(example, "#/m~0n")).to.contain(8);
117
118console.log("All tests pass.");
\No newline at end of file