Book a Demo!
CoCalc Logo Icon
StoreFeaturesDocsShareSupportNewsAboutPoliciesSign UpSign In
Download
81159 views
1
var assert = require("assert");
2
var console = require("console");
3
var jsonpointer = require("./jsonpointer");
4
5
var obj = {
6
a: 1,
7
b: {
8
c: 2
9
},
10
d: {
11
e: [{a:3}, {b:4}, {c:5}]
12
}
13
};
14
15
assert.equal(jsonpointer.get(obj, "/a"), 1);
16
assert.equal(jsonpointer.get(obj, "/b/c"), 2);
17
assert.equal(jsonpointer.get(obj, "/d/e/0/a"), 3);
18
assert.equal(jsonpointer.get(obj, "/d/e/1/b"), 4);
19
assert.equal(jsonpointer.get(obj, "/d/e/2/c"), 5);
20
21
// set returns old value
22
assert.equal(jsonpointer.set(obj, "/a", 2), 1);
23
assert.equal(jsonpointer.set(obj, "/b/c", 3), 2);
24
assert.equal(jsonpointer.set(obj, "/d/e/0/a", 4), 3);
25
assert.equal(jsonpointer.set(obj, "/d/e/1/b", 5), 4);
26
assert.equal(jsonpointer.set(obj, "/d/e/2/c", 6), 5);
27
28
assert.equal(jsonpointer.get(obj, "/a"), 2);
29
assert.equal(jsonpointer.get(obj, "/b/c"), 3);
30
assert.equal(jsonpointer.get(obj, "/d/e/0/a"), 4);
31
assert.equal(jsonpointer.get(obj, "/d/e/1/b"), 5);
32
assert.equal(jsonpointer.get(obj, "/d/e/2/c"), 6);
33
34
assert.equal(jsonpointer.get(obj, ""), obj);
35
assert.throws(function() {
36
assert.equal(jsonpointer.get(obj, "a"), 3);
37
});
38
39
var complexKeys = {
40
"a/b": {
41
c: 1
42
},
43
d: {
44
"e/f": 2
45
},
46
"~1": 3,
47
"01": 4
48
}
49
50
assert.equal(jsonpointer.get(complexKeys, "/a~1b/c"), 1);
51
assert.equal(jsonpointer.get(complexKeys, "/d/e~1f"), 2);
52
assert.equal(jsonpointer.get(complexKeys, "/~01"), 3);
53
assert.equal(jsonpointer.get(complexKeys, "/01"), 4);
54
assert.throws(function() {
55
assert.equal(jsonpointer.get(complexKeys, "/a/b/c"), 1);
56
});
57
assert.throws(function() {
58
assert.equal(jsonpointer.get(complexKeys, "/~1"), 3);
59
});
60
61
// draft-ietf-appsawg-json-pointer-08 has special array rules
62
var ary = [ "zero", "one", "two" ];
63
64
assert.throws(function() {
65
assert.equal(jsonpointer.get(ary, "/01"), "one");
66
});
67
//assert.equal(jsonpointer.set(ary, "/-", "three"), null);
68
//assert.equal(ary[3], "three");
69
70
// Examples from the draft:
71
var example = {
72
"foo": ["bar", "baz"],
73
"": 0,
74
"a/b": 1,
75
"c%d": 2,
76
"e^f": 3,
77
"g|h": 4,
78
"i\\j": 5,
79
"k\"l": 6,
80
" ": 7,
81
"m~n": 8
82
};
83
84
assert.equal(jsonpointer.get(example, ""), example);
85
var ans = jsonpointer.get(example, "/foo");
86
assert.equal(ans.length, 2);
87
assert.equal(ans[0], "bar");
88
assert.equal(ans[1], "baz");
89
assert.equal(jsonpointer.get(example, "/foo/0"), "bar");
90
assert.equal(jsonpointer.get(example, "/"), 0);
91
assert.equal(jsonpointer.get(example, "/a~1b"), 1);
92
assert.equal(jsonpointer.get(example, "/c%d"), 2);
93
assert.equal(jsonpointer.get(example, "/e^f"), 3);
94
assert.equal(jsonpointer.get(example, "/g|h"), 4);
95
assert.equal(jsonpointer.get(example, "/i\\j"), 5);
96
assert.equal(jsonpointer.get(example, "/k\"l"), 6);
97
assert.equal(jsonpointer.get(example, "/ "), 7);
98
assert.equal(jsonpointer.get(example, "/m~0n"), 8);
99
100
console.log("All tests pass.");
101
102