-
Notifications
You must be signed in to change notification settings - Fork 1
/
tjsonptr.nim
57 lines (51 loc) · 1.6 KB
/
tjsonptr.nim
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
import std/assertions, jsonpak/[mapper, jsonptr], jsonpak/private/jsontree
proc main =
block:
var s = "hello~world/foo"
s = escapeJsonPtr(s)
assert s == "hello~0world~1foo"
block:
var s = "hello~0world~1foo"
unescapeJsonPtr(s)
assert s == "hello~world/foo"
# block:
# assert getArrayIndex("0") == 0
# assert getArrayIndex("123") == 123
# assert getArrayIndex("-") == -1
#
# try:
# discard getArrayIndex("")
# assert false, "Expected SyntaxError"
# except SyntaxError:
# assert true
# try:
# discard getArrayIndex("01")
# assert false, "Expected SyntaxError"
# except SyntaxError:
# assert true
# try:
# discard getArrayIndex("-1")
# assert false, "Expected SyntaxError"
# except SyntaxError:
# assert true
block:
let tree = %*{"foo": {"bar": nil}, "arr": [1, 2]}
assert findNode(tree, "/foo/bar") == NodePos(4)
assert findNode(tree, "/foo/baz") == nilNodeId
assert findNode(tree, "/arr/0") == NodePos(7)
assert findNode(tree, "/arr/1") == NodePos(8)
assert findNode(tree, "/arr/-") == nilNodeId
assert findNode(tree, "/arr/100") == nilNodeId
block:
let tree = %*{"foo": {"bar": nil}, "arr": [1, 2]}
var res = findNodeMut(tree, "/foo/bar")
assert res.node == NodePos(4)
assert res.parents == @[PatchPos(0), PatchPos(2)]
res = findNodeMut(tree, "/arr/-")
assert res.node == nilNodeId
assert res.parents == @[PatchPos(0), PatchPos(6)]
assert res.key == ""
res = findNodeMut(tree, "/foo/baz")
assert res.key == "baz"
static: main()
main()