RFC6901 JSON Pointer implementation in OCaml using jsont
at main 4.8 kB view raw
1Comprehensive JSON Pointer Tests (from json-pointer-js test suite) 2 3Additional parsing tests: 4 $ ./test_pointer.exe parse "/foo/bar" 5 OK: [Mem:foo, Mem:bar] 6 $ ./test_pointer.exe parse "/foo/-" 7 OK: [Mem:foo, /-] 8 $ ./test_pointer.exe parse "/foo/1" 9 OK: [Mem:foo, Nth:1] 10 $ ./test_pointer.exe parse "/foo/~0" 11 OK: [Mem:foo, Mem:~] 12 $ ./test_pointer.exe parse "/foo/~1" 13 OK: [Mem:foo, Mem:/] 14 $ ./test_pointer.exe parse "/foo/~1~0" 15 OK: [Mem:foo, Mem:/~] 16 $ ./test_pointer.exe parse "/foo/~0~1" 17 OK: [Mem:foo, Mem:~/] 18 $ ./test_pointer.exe parse "/foo/~01" 19 OK: [Mem:foo, Mem:~1] 20 $ ./test_pointer.exe parse "/foo/~10" 21 OK: [Mem:foo, Mem:/0] 22 23Parse error tests: 24 $ ./test_pointer.exe parse "foo/bar" 25 ERROR: Invalid JSON Pointer: must be empty or start with '/': foo/bar 26 $ ./test_pointer.exe parse "~foo" 27 ERROR: Invalid JSON Pointer: must be empty or start with '/': ~foo 28 $ ./test_pointer.exe parse "/~a" 29 ERROR: Invalid JSON Pointer: invalid escape sequence ~a 30 $ ./test_pointer.exe parse "~1/foo" 31 ERROR: Invalid JSON Pointer: must be empty or start with '/': ~1/foo 32 33Get value tests: 34 $ ./test_pointer.exe eval data/rfc6901_example.json "/a~1b" 35 OK: 1 36 $ ./test_pointer.exe eval data/rfc6901_example.json "/c%d" 37 OK: 2 38 $ ./test_pointer.exe eval data/rfc6901_example.json "/e^f" 39 OK: 3 40 $ ./test_pointer.exe eval data/rfc6901_example.json "/g|h" 41 OK: 4 42 $ ./test_pointer.exe eval data/rfc6901_example.json '/i\j' 43 OK: 5 44 $ ./test_pointer.exe eval data/rfc6901_example.json '/k"l' 45 OK: 6 46 $ ./test_pointer.exe eval data/rfc6901_example.json "/ " 47 OK: 7 48 $ ./test_pointer.exe eval data/rfc6901_example.json "/m~0n" 49 OK: 8 50 $ ./test_pointer.exe eval data/rfc6901_example.json "/" 51 OK: 0 52 53Set tests (using add for replace/add semantics): 54 $ ./test_pointer.exe add '{"bar":"foo"}' '/bar' '"baz"' 55 {"bar":"baz"} 56 $ ./test_pointer.exe add '{"bar":"foo"}' '/foo' '"baz"' 57 {"bar":"foo","foo":"baz"} 58 $ ./test_pointer.exe add '["foo"]' '/0' '"bar"' 59 ["bar","foo"] 60 $ ./test_pointer.exe add '["foo"]' '/-' '"bar"' 61 ["foo","bar"] 62 $ ./test_pointer.exe add '{"foo":["bar"]}' '/foo/0' '"baz"' 63 {"foo":["baz","bar"]} 64 65Replace tests using special characters: 66 $ ./test_pointer.exe replace '{"a/b":"bar"}' '/a~1b' '"baz"' 67 {"a/b":"baz"} 68 $ ./test_pointer.exe replace '{"c%d":"bar"}' '/c%d' '"baz"' 69 {"c%d":"baz"} 70 $ ./test_pointer.exe replace '{"e^f":"bar"}' '/e^f' '"baz"' 71 {"e^f":"baz"} 72 $ ./test_pointer.exe replace '{"g|h":"bar"}' '/g|h' '"baz"' 73 {"g|h":"baz"} 74 $ ./test_pointer.exe replace '{" ":"bar"}' '/ ' '"baz"' 75 {" ":"baz"} 76 $ ./test_pointer.exe replace '{"m~n":"bar"}' '/m~0n' '"baz"' 77 {"m~n":"baz"} 78 $ ./test_pointer.exe replace '{"":"bar"}' '/' '"baz"' 79 {"":"baz"} 80 81Remove tests: 82 $ ./test_pointer.exe remove '{"foo":"bar","baz":"qux"}' '/foo' 83 {"baz":"qux"} 84 $ ./test_pointer.exe remove '["foo","baz"]' '/1' 85 ["foo"] 86 $ ./test_pointer.exe remove '["foo","baz"]' '/0' 87 ["baz"] 88 $ ./test_pointer.exe remove '{"foo":["bar"]}' '/foo/0' 89 {"foo":[]} 90 91Copy tests: 92 $ ./test_pointer.exe copy '{"foo":"bar"}' '/foo' '/baz' 93 {"foo":"bar","baz":"bar"} 94 95Test operation: 96 $ ./test_pointer.exe test '{"foo":"bar"}' '/foo' '"bar"' 97 true 98 $ ./test_pointer.exe test '{"foo":"bar"}' '/foo' '"baz"' 99 false 100 $ ./test_pointer.exe test '{"foo":["bar","baz"]}' '/foo' '["bar","baz"]' 101 true 102 $ ./test_pointer.exe test '{"foo":"bar"}' '/baz' '"qux"' 103 false 104 105Equality tests (pointers that should be equal after roundtrip): 106 $ ./test_pointer.exe roundtrip "/foo/~0" 107 OK: /foo/~0 108 $ ./test_pointer.exe roundtrip "/foo/~1" 109 OK: /foo/~1 110 111Has/exists tests (from json-pointer-js): 112 $ ./test_pointer.exe has '{"foo":"bar"}' '/foo' 113 true 114 $ ./test_pointer.exe has '{"foo":"bar"}' '/bar' 115 false 116 $ ./test_pointer.exe has '{"foo":{"bar":"baz"}}' '/foo/bar' 117 true 118 $ ./test_pointer.exe has '{"foo":{"bar":"baz"}}' '/foo/qux' 119 false 120 $ ./test_pointer.exe has '["foo","bar"]' '/0' 121 true 122 $ ./test_pointer.exe has '["foo","bar"]' '/1' 123 true 124 $ ./test_pointer.exe has '["foo","bar"]' '/2' 125 false 126 $ ./test_pointer.exe has '{"foo":["bar"]}' '/foo/0' 127 true 128 $ ./test_pointer.exe has '{"foo":["bar"]}' '/foo/1' 129 false 130 $ ./test_pointer.exe has '{}' '' 131 true 132 $ ./test_pointer.exe has '[]' '' 133 true 134 $ ./test_pointer.exe has '{"":0}' '/' 135 true 136 $ ./test_pointer.exe has '{"a/b":1}' '/a~1b' 137 true 138 $ ./test_pointer.exe has '{"m~n":8}' '/m~0n' 139 true 140 141Has with null values: 142 $ ./test_pointer.exe has '{"foo":null}' '/foo' 143 true 144 $ ./test_pointer.exe has 'null' '' 145 true 146 147Has with '-' (end marker - now errors because has uses of_string_nav): 148 $ ./test_pointer.exe has '["foo"]' '/-' 149 ERROR: Invalid JSON Pointer: '-' not allowed in navigation pointer 150 $ ./test_pointer.exe has '[]' '/-' 151 ERROR: Invalid JSON Pointer: '-' not allowed in navigation pointer