1 | var expect = require('expect.js'),
|
2 | jpath = require('..')
|
3 | ;
|
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 |
|
16 |
|
17 | var n = -1
|
18 | , ub = 1000
|
19 | , start = process.hrtime();
|
20 |
|
21 |
|
22 | while(++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 |
|
34 | ub = ub * 2;
|
35 | n--;
|
36 | while(++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 |
|
47 | var complexKeys = {
|
48 | "a/b": {
|
49 | c: 1
|
50 | },
|
51 | d: {
|
52 | "e/f": 2
|
53 | },
|
54 | "~1": 3,
|
55 | "01": 4
|
56 | }
|
57 |
|
58 | expect(jpath.resolve(complexKeys, "/a~1b/c")).to.contain(1);
|
59 | expect(jpath.resolve(complexKeys, "/d/e~1f")).to.contain(2);
|
60 | expect(jpath.resolve(complexKeys, "/~01")).to.contain(3);
|
61 | expect(jpath.resolve(complexKeys, "/01")).to.contain(4);
|
62 | expect(jpath.resolve(complexKeys, "/a/b/c")).to.be.empty();
|
63 | expect(jpath.resolve(complexKeys, "/~1")).to.be.empty();
|
64 |
|
65 |
|
66 | var ary = [ "zero", "one", "two" ];
|
67 | expect(jpath.resolve(ary, "/01")).to.be.empty();
|
68 |
|
69 |
|
70 | var 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 |
|
83 | var p = jpath.create('#/foo');
|
84 | expect(p.resolve(example)).to.contain(example["foo"]);
|
85 |
|
86 | expect(jpath.resolve(example, "")).to.contain(example);
|
87 | var ans = jpath.resolve(example, "/foo");
|
88 | expect(ans.length).to.be(1);
|
89 | expect(ans[0][0]).to.contain("bar");
|
90 | expect(ans[0][1]).to.contain("baz");
|
91 | expect(jpath.resolve(example, "/foo/0")).to.contain("bar");
|
92 | expect(jpath.resolve(example, "/")).to.contain(0);
|
93 | expect(jpath.resolve(example, "/a~1b")).to.contain(1);
|
94 | expect(jpath.resolve(example, "/c%d")).to.contain(2);
|
95 | expect(jpath.resolve(example, "/e^f")).to.contain(3);
|
96 | expect(jpath.resolve(example, "/g|h")).to.contain(4);
|
97 | expect(jpath.resolve(example, "/i\\j")).to.contain(5);
|
98 | expect(jpath.resolve(example, "/k\"l")).to.contain(6);
|
99 | expect(jpath.resolve(example, "/ ")).to.contain(7);
|
100 | expect(jpath.resolve(example, "/m~0n")).to.contain(8);
|
101 |
|
102 | expect(jpath.resolve(example, "#")).to.contain(example);
|
103 | var ans = jpath.resolve(example, "#/foo");
|
104 | expect(ans.length).to.be(1);
|
105 | expect(ans[0][0]).to.contain("bar");
|
106 | expect(ans[0][1]).to.contain("baz");
|
107 | expect(jpath.resolve(example, "#/foo/0")).to.contain("bar");
|
108 | expect(jpath.resolve(example, "#/")).to.contain(0);
|
109 | expect(jpath.resolve(example, "#/a~1b")).to.contain(1);
|
110 | expect(jpath.resolve(example, "#/c%25d")).to.contain(2);
|
111 | expect(jpath.resolve(example, "#/e%5Ef")).to.contain(3);
|
112 | expect(jpath.resolve(example, "#/g%7Ch")).to.contain(4);
|
113 | expect(jpath.resolve(example, "#/i%5Cj")).to.contain(5);
|
114 | expect(jpath.resolve(example, "#/k%22l")).to.contain(6);
|
115 | expect(jpath.resolve(example, "#/%20")).to.contain(7);
|
116 | expect(jpath.resolve(example, "#/m~0n")).to.contain(8);
|
117 |
|
118 | console.log("All tests pass."); |
\ | No newline at end of file |