Lines Matching +full:check +full:- +full:path
6 // SPDX-FileCopyrightText: 2013-2023 Niels Lohmann <https://nlohmann.me>
7 // SPDX-License-Identifier: MIT
14 using namespace nlohmann::literals; // NOLINT(google-build-using-namespace)
27 json op1 = R"({ "op": "add", "path": "/a/b/c", "value": "foo" })"_json;
28 json op2 = R"({ "path": "/a/b/c", "op": "add", "value": "foo" })"_json;
29 json op3 = R"({ "value": "foo", "path": "/a/b/c", "op": "add" })"_json;
31 // check if the operation objects are equivalent
32 CHECK(op1 == op2);
33 CHECK(op1 == op3);
38 … json const patch1 = R"([{ "op": "add", "path": "/a/b", "value": [ "foo", "bar" ] }])"_json;
57 CHECK(doc1.patch(patch1) == doc1_ans);
66 json const patch2 = R"([{ "op": "add", "path": "/a/b/c", "value": 1 }])"_json;
81 json const patch = {{{"op", "remove"}, {"path", "/1"}}};
82 CHECK(doc.patch(patch) == json({1, 3, 4}));
95 { "op": "add", "path": "/baz", "value": "qux" }
107 // check if patched value is as expected
108 CHECK(doc.patch(patch) == expected);
110 // check roundtrip
111 CHECK(doc.patch(json::diff(doc, expected)) == expected);
124 { "op": "add", "path": "/foo/1", "value": "qux" }
133 // check if patched value is as expected
134 CHECK(doc.patch(patch) == expected);
136 // check roundtrip
137 CHECK(doc.patch(json::diff(doc, expected)) == expected);
153 { "op": "remove", "path": "/baz" }
162 // check if patched value is as expected
163 CHECK(doc.patch(patch) == expected);
165 // check roundtrip
166 CHECK(doc.patch(json::diff(doc, expected)) == expected);
179 { "op": "remove", "path": "/foo/1" }
188 // check if patched value is as expected
189 CHECK(doc.patch(patch) == expected);
191 // check roundtrip
192 CHECK(doc.patch(json::diff(doc, expected)) == expected);
208 { "op": "replace", "path": "/baz", "value": "boo" }
219 // check if patched value is as expected
220 CHECK(doc.patch(patch) == expected);
222 // check roundtrip
223 CHECK(doc.patch(json::diff(doc, expected)) == expected);
244 { "op": "move", "from": "/foo/waldo", "path": "/qux/thud" }
261 // check if patched value is as expected
262 CHECK(doc.patch(patch) == expected);
264 // check roundtrip
265 CHECK(doc.patch(json::diff(doc, expected)) == expected);
278 { "op": "move", "from": "/foo/1", "path": "/foo/3" }
287 // check if patched value is as expected
288 CHECK(doc.patch(patch) == expected);
290 // check roundtrip
291 CHECK(doc.patch(json::diff(doc, expected)) == expected);
307 { "op": "test", "path": "/baz", "value": "qux" },
308 { "op": "test", "path": "/foo/1", "value": 2 }
312 // check if evaluation does not throw
314 // check if patched document is unchanged
315 CHECK(doc.patch(patch) == doc);
328 { "op": "test", "path": "/baz", "value": "bar" }
332 // check that evaluation throws
351 { "op": "add", "path": "/child", "value": { "grandchild": { } } }
366 // check if patched value is as expected
367 CHECK(doc.patch(patch) == expected);
369 // check roundtrip
370 CHECK(doc.patch(json::diff(doc, expected)) == expected);
383 { "op": "add", "path": "/baz", "value": "qux", "xyz": 123 }
394 // check if patched value is as expected
395 CHECK(doc.patch(patch) == expected);
397 // check roundtrip
398 CHECK(doc.patch(json::diff(doc, expected)) == expected);
411 { "op": "add", "path": "/baz/bat", "value": "qux" }
440 {"op": "test", "path": "/~01", "value": 10}
451 // check if patched value is as expected
452 CHECK(doc.patch(patch) == expected);
454 // check roundtrip
455 CHECK(doc.patch(json::diff(doc, expected)) == expected);
471 {"op": "test", "path": "/~01", "value": "10"}
475 // check that evaluation throws
494 { "op": "add", "path": "/foo/-", "value": ["abc", "def"] }
503 // check if patched value is as expected
504 CHECK(doc.patch(patch) == expected);
506 // check roundtrip
507 CHECK(doc.patch(json::diff(doc, expected)) == expected);
517 // If the path is the root of the target document - the
527 { "op": "add", "path": "", "value": [1,2,3] }
534 // check if patched value is as expected
535 CHECK(doc.patch(patch) == expected);
537 // check roundtrip
538 CHECK(doc.patch(json::diff(doc, expected)) == expected);
553 { "op": "add", "path": "/3", "value": 3 }
560 // check if patched value is as expected
561 CHECK(doc.patch(patch) == expected);
563 // check roundtrip
564 CHECK(doc.patch(json::diff(doc, expected)) == expected);
586 { "op": "copy", "from": "/foo/waldo", "path": "/qux/thud" }
604 // check if patched value is as expected
605 CHECK(doc.patch(patch) == expected);
607 // check roundtrip
608 CHECK(doc.patch(json::diff(doc, expected)) == expected);
614 json const patch = {{{"op", "replace"}, {"path", ""}, {"value", 1}}};
615 CHECK(j.patch(patch) == json(1));
623 [{"op": "add", "path": "/GB", "value": "London"}]
634 CHECK(target == R"({ "D": "Berlin", "F": "Paris", "GB": "London" })"_json);
637 … json p2 = json::diff(target, source); // NOLINT(readability-suspicious-call-argument)
638 // p2 = [{"op": "delete", "path": "/GB"}]
639 CHECK(p2 == R"([{"op":"remove","path":"/GB"}])"_json);
650 CHECK(j == R"(["good","bad",{"it":"cattivo"}])"_json);
652 // use user-defined string literal
654 CHECK(j == R"(["good","bad",{"en":"ugly","it":"cattivo"}])"_json);
657 CHECK(flat == R"({"/0":"good","/1":"bad","/2/en":"ugly","/2/it":"cattivo"})"_json);
669 json const patch = {{"op", "add"}, {"path", ""}, {"value", 1}};
676 json const patch = {"op", "add", "path", "", "value", 1};
695 SECTION("non-string 'op'")
709 json const patch = {{{"op", "foo"}, {"path", ""}}};
720 SECTION("missing 'path'")
725 …tion.parse_error.105] parse error: (/0) operation 'add' must have member 'path'", json::parse_erro…
727 …exception.parse_error.105] parse error: operation 'add' must have member 'path'", json::parse_erro…
731 SECTION("non-string 'path'")
734 json const patch = {{{"op", "add"}, {"path", 1}}};
736 …rse_error.105] parse error: (/0) operation 'add' must have string member 'path'", json::parse_erro…
738 …on.parse_error.105] parse error: operation 'add' must have string member 'path'", json::parse_erro…
745 json const patch = {{{"op", "add"}, {"path", ""}}};
756 json const patch = {{{"op", "add"}, {"path", "/4"}, {"value", 4}}};
763 SECTION("missing 'path'")
768 …n.parse_error.105] parse error: (/0) operation 'remove' must have member 'path'", json::parse_erro…
770 …eption.parse_error.105] parse error: operation 'remove' must have member 'path'", json::parse_erro…
774 SECTION("non-string 'path'")
777 json const patch = {{{"op", "remove"}, {"path", 1}}};
779 …_error.105] parse error: (/0) operation 'remove' must have string member 'path'", json::parse_erro…
781 …parse_error.105] parse error: operation 'remove' must have string member 'path'", json::parse_erro…
788 json const patch = {{{"op", "remove"}, {"path", "/17"}}};
795 json const patch = {{{"op", "remove"}, {"path", "/baz"}}};
802 json const patch = {{{"op", "remove"}, {"path", ""}}};
809 SECTION("missing 'path'")
814 ….parse_error.105] parse error: (/0) operation 'replace' must have member 'path'", json::parse_erro…
816 …ption.parse_error.105] parse error: operation 'replace' must have member 'path'", json::parse_erro…
820 SECTION("non-string 'path'")
823 json const patch = {{{"op", "replace"}, {"path", 1}}};
825 …error.105] parse error: (/0) operation 'replace' must have string member 'path'", json::parse_erro…
827 …arse_error.105] parse error: operation 'replace' must have string member 'path'", json::parse_erro…
834 json const patch = {{{"op", "replace"}, {"path", ""}}};
845 json const patch = {{{"op", "replace"}, {"path", "/17"}, {"value", 19}}};
852 json const patch = {{{"op", "replace"}, {"path", "/baz"}, {"value", 3}}};
859 SECTION("missing 'path'")
864 …ion.parse_error.105] parse error: (/0) operation 'move' must have member 'path'", json::parse_erro…
866 …xception.parse_error.105] parse error: operation 'move' must have member 'path'", json::parse_erro…
870 SECTION("non-string 'path'")
873 json const patch = {{{"op", "move"}, {"path", 1}}};
875 …se_error.105] parse error: (/0) operation 'move' must have string member 'path'", json::parse_erro…
877 …n.parse_error.105] parse error: operation 'move' must have string member 'path'", json::parse_erro…
884 json const patch = {{{"op", "move"}, {"path", ""}}};
893 SECTION("non-string 'from'")
896 json const patch = {{{"op", "move"}, {"path", ""}, {"from", 1}}};
908 json const patch = {{{"op", "move"}, {"path", "/0"}, {"from", "/5"}}};
915 json const patch = {{{"op", "move"}, {"path", "/baz"}, {"from", "/baz"}}};
922 SECTION("missing 'path'")
927 …ion.parse_error.105] parse error: (/0) operation 'copy' must have member 'path'", json::parse_erro…
929 …xception.parse_error.105] parse error: operation 'copy' must have member 'path'", json::parse_erro…
933 SECTION("non-string 'path'")
936 json const patch = {{{"op", "copy"}, {"path", 1}}};
938 …se_error.105] parse error: (/0) operation 'copy' must have string member 'path'", json::parse_erro…
940 …n.parse_error.105] parse error: operation 'copy' must have string member 'path'", json::parse_erro…
947 json const patch = {{{"op", "copy"}, {"path", ""}}};
955 SECTION("non-string 'from'")
958 json const patch = {{{"op", "copy"}, {"path", ""}, {"from", 1}}};
969 json const patch = {{{"op", "copy"}, {"path", "/0"}, {"from", "/5"}}};
976 json const patch = {{{"op", "copy"}, {"path", "/fob"}, {"from", "/baz"}}};
983 SECTION("missing 'path'")
988 …ion.parse_error.105] parse error: (/0) operation 'test' must have member 'path'", json::parse_erro…
990 …xception.parse_error.105] parse error: operation 'test' must have member 'path'", json::parse_erro…
994 SECTION("non-string 'path'")
997 json const patch = {{{"op", "test"}, {"path", 1}}};
999 …se_error.105] parse error: (/0) operation 'test' must have string member 'path'", json::parse_erro…
1001 …n.parse_error.105] parse error: operation 'test' must have string member 'path'", json::parse_erro…
1008 json const patch = {{{"op", "test"}, {"path", ""}}};
1033 { "op": "replace", "path": "/baz", "value": "boo" },
1034 { "op": "add", "path": "/hello", "value": ["world"] },
1035 { "op": "remove", "path": "/foo"}
1047 // check if patched value is as expected
1048 CHECK(doc.patch(patch) == result);
1050 // check roundtrip
1051 CHECK(doc.patch(json::diff(doc, result)) == result);
1071 {"op": "add", "path": "/biscuits/1", "value": {"name": "Ginger Nut"}}
1086 // check if patched value is as expected
1087 CHECK(doc.patch(patch) == result);
1089 // check roundtrip
1090 CHECK(doc.patch(json::diff(doc, result)) == result);
1098 {"op": "remove", "path": "/biscuits"}
1107 // check if patched value is as expected
1108 CHECK(doc.patch(patch) == result);
1110 // check roundtrip
1111 CHECK(doc.patch(json::diff(doc, result)) == result);
1119 … {"op": "replace", "path": "/biscuits/0/name", "value": "Chocolate Digestive"}
1133 // check if patched value is as expected
1134 CHECK(doc.patch(patch) == result);
1136 // check roundtrip
1137 CHECK(doc.patch(json::diff(doc, result)) == result);
1145 {"op": "copy", "from": "/biscuits/0", "path": "/best_biscuit"}
1162 // check if patched value is as expected
1163 CHECK(doc.patch(patch) == result);
1165 // check roundtrip
1166 CHECK(doc.patch(json::diff(doc, result)) == result);
1174 {"op": "move", "from": "/biscuits", "path": "/cookies"}
1188 // check if patched value is as expected
1189 CHECK(doc.patch(patch) == result);
1191 // check roundtrip
1192 CHECK(doc.patch(json::diff(doc, result)) == result);
1200 {"op": "test", "path": "/best_biscuit/name", "value": "Choco Liebniz"}
1215 SECTION("Examples from bruth.github.io/jsonpatch-js")
1219 CHECK(R"( {} )"_json.patch(
1220 R"( [{"op": "add", "path": "/foo", "value": "bar"}] )"_json
1223 CHECK(R"( {"foo": [1, 3]} )"_json.patch(
1224 R"( [{"op": "add", "path": "/foo", "value": "bar"}] )"_json
1227 CHECK(R"( {"foo": [{}]} )"_json.patch(
1228 R"( [{"op": "add", "path": "/foo/0/bar", "value": "baz"}] )"_json
1234 CHECK(R"( {"foo": "bar"} )"_json.patch(
1235 R"( [{"op": "remove", "path": "/foo"}] )"_json
1238 CHECK(R"( {"foo": [1, 2, 3]} )"_json.patch(
1239 R"( [{"op": "remove", "path": "/foo/1"}] )"_json
1242 CHECK(R"( {"foo": [{"bar": "baz"}]} )"_json.patch(
1243 R"( [{"op": "remove", "path": "/foo/0/bar"}] )"_json
1249 CHECK(R"( {"foo": "bar"} )"_json.patch(
1250 R"( [{"op": "replace", "path": "/foo", "value": 1}] )"_json
1253 CHECK(R"( {"foo": [1, 2, 3]} )"_json.patch(
1254 R"( [{"op": "replace", "path": "/foo/1", "value": 4}] )"_json
1257 CHECK(R"( {"foo": [{"bar": "baz"}]} )"_json.patch(
1258 R"( [{"op": "replace", "path": "/foo/0/bar", "value": 1}] )"_json
1264 CHECK(R"( {"foo": [1, 2, 3]} )"_json.patch(
1265 R"( [{"op": "move", "from": "/foo", "path": "/bar"}] )"_json
1271 CHECK(R"( {"foo": [1, 2, 3]} )"_json.patch(
1272 R"( [{"op": "copy", "from": "/foo/1", "path": "/bar"}] )"_json
1279 R"( [{"op": "test", "path": "/foo", "value": "bar"}] )"_json));
1283 SECTION("Tests from github.com/json-patch/json-patch-tests")
1287 TEST_DATA_DIRECTORY "/json-patch-tests/spec_tests.json",
1288 TEST_DATA_DIRECTORY "/json-patch-tests/tests.json"
1312 CHECK(doc.patch(patch) == expected);