1c5f01b2fSopenharmony_ci// __ _____ _____ _____ 2c5f01b2fSopenharmony_ci// __| | __| | | | JSON for Modern C++ (supporting code) 3c5f01b2fSopenharmony_ci// | | |__ | | | | | | version 3.11.2 4c5f01b2fSopenharmony_ci// |_____|_____|_____|_|___| https://github.com/nlohmann/json 5c5f01b2fSopenharmony_ci// 6c5f01b2fSopenharmony_ci// SPDX-FileCopyrightText: 2013-2022 Niels Lohmann <https://nlohmann.me> 7c5f01b2fSopenharmony_ci// SPDX-License-Identifier: MIT 8c5f01b2fSopenharmony_ci 9c5f01b2fSopenharmony_ci#include "doctest_compatibility.h" 10c5f01b2fSopenharmony_ci 11c5f01b2fSopenharmony_ci#include <nlohmann/json.hpp> 12c5f01b2fSopenharmony_ciusing nlohmann::json; 13c5f01b2fSopenharmony_ci#ifdef JSON_TEST_NO_GLOBAL_UDLS 14c5f01b2fSopenharmony_ci using namespace nlohmann::literals; // NOLINT(google-build-using-namespace) 15c5f01b2fSopenharmony_ci#endif 16c5f01b2fSopenharmony_ci 17c5f01b2fSopenharmony_ciTEST_CASE("JSON Merge Patch") 18c5f01b2fSopenharmony_ci{ 19c5f01b2fSopenharmony_ci SECTION("examples from RFC 7396") 20c5f01b2fSopenharmony_ci { 21c5f01b2fSopenharmony_ci SECTION("Section 1") 22c5f01b2fSopenharmony_ci { 23c5f01b2fSopenharmony_ci json document = R"({ 24c5f01b2fSopenharmony_ci "a": "b", 25c5f01b2fSopenharmony_ci "c": { 26c5f01b2fSopenharmony_ci "d": "e", 27c5f01b2fSopenharmony_ci "f": "g" 28c5f01b2fSopenharmony_ci } 29c5f01b2fSopenharmony_ci })"_json; 30c5f01b2fSopenharmony_ci 31c5f01b2fSopenharmony_ci json patch = R"({ 32c5f01b2fSopenharmony_ci "a": "z", 33c5f01b2fSopenharmony_ci "c": { 34c5f01b2fSopenharmony_ci "f": null 35c5f01b2fSopenharmony_ci } 36c5f01b2fSopenharmony_ci })"_json; 37c5f01b2fSopenharmony_ci 38c5f01b2fSopenharmony_ci json expected = R"({ 39c5f01b2fSopenharmony_ci "a": "z", 40c5f01b2fSopenharmony_ci "c": { 41c5f01b2fSopenharmony_ci "d": "e" 42c5f01b2fSopenharmony_ci } 43c5f01b2fSopenharmony_ci })"_json; 44c5f01b2fSopenharmony_ci 45c5f01b2fSopenharmony_ci document.merge_patch(patch); 46c5f01b2fSopenharmony_ci CHECK(document == expected); 47c5f01b2fSopenharmony_ci } 48c5f01b2fSopenharmony_ci 49c5f01b2fSopenharmony_ci SECTION("Section 3") 50c5f01b2fSopenharmony_ci { 51c5f01b2fSopenharmony_ci json document = R"({ 52c5f01b2fSopenharmony_ci "title": "Goodbye!", 53c5f01b2fSopenharmony_ci "author": { 54c5f01b2fSopenharmony_ci "givenName": "John", 55c5f01b2fSopenharmony_ci "familyName": "Doe" 56c5f01b2fSopenharmony_ci }, 57c5f01b2fSopenharmony_ci "tags": [ 58c5f01b2fSopenharmony_ci "example", 59c5f01b2fSopenharmony_ci "sample" 60c5f01b2fSopenharmony_ci ], 61c5f01b2fSopenharmony_ci "content": "This will be unchanged" 62c5f01b2fSopenharmony_ci })"_json; 63c5f01b2fSopenharmony_ci 64c5f01b2fSopenharmony_ci json patch = R"({ 65c5f01b2fSopenharmony_ci "title": "Hello!", 66c5f01b2fSopenharmony_ci "phoneNumber": "+01-123-456-7890", 67c5f01b2fSopenharmony_ci "author": { 68c5f01b2fSopenharmony_ci "familyName": null 69c5f01b2fSopenharmony_ci }, 70c5f01b2fSopenharmony_ci "tags": [ 71c5f01b2fSopenharmony_ci "example" 72c5f01b2fSopenharmony_ci ] 73c5f01b2fSopenharmony_ci })"_json; 74c5f01b2fSopenharmony_ci 75c5f01b2fSopenharmony_ci json expected = R"({ 76c5f01b2fSopenharmony_ci "title": "Hello!", 77c5f01b2fSopenharmony_ci "author": { 78c5f01b2fSopenharmony_ci "givenName": "John" 79c5f01b2fSopenharmony_ci }, 80c5f01b2fSopenharmony_ci "tags": [ 81c5f01b2fSopenharmony_ci "example" 82c5f01b2fSopenharmony_ci ], 83c5f01b2fSopenharmony_ci "content": "This will be unchanged", 84c5f01b2fSopenharmony_ci "phoneNumber": "+01-123-456-7890" 85c5f01b2fSopenharmony_ci })"_json; 86c5f01b2fSopenharmony_ci 87c5f01b2fSopenharmony_ci document.merge_patch(patch); 88c5f01b2fSopenharmony_ci CHECK(document == expected); 89c5f01b2fSopenharmony_ci } 90c5f01b2fSopenharmony_ci 91c5f01b2fSopenharmony_ci SECTION("Appendix A") 92c5f01b2fSopenharmony_ci { 93c5f01b2fSopenharmony_ci SECTION("Example 1") 94c5f01b2fSopenharmony_ci { 95c5f01b2fSopenharmony_ci json original = R"({"a":"b"})"_json; 96c5f01b2fSopenharmony_ci json patch = R"({"a":"c"})"_json; 97c5f01b2fSopenharmony_ci json result = R"({"a":"c"})"_json; 98c5f01b2fSopenharmony_ci 99c5f01b2fSopenharmony_ci original.merge_patch(patch); 100c5f01b2fSopenharmony_ci CHECK(original == result); 101c5f01b2fSopenharmony_ci } 102c5f01b2fSopenharmony_ci 103c5f01b2fSopenharmony_ci SECTION("Example 2") 104c5f01b2fSopenharmony_ci { 105c5f01b2fSopenharmony_ci json original = R"({"a":"b"})"_json; 106c5f01b2fSopenharmony_ci json patch = R"({"b":"c"})"_json; 107c5f01b2fSopenharmony_ci json result = R"({"a":"b", "b":"c"})"_json; 108c5f01b2fSopenharmony_ci 109c5f01b2fSopenharmony_ci original.merge_patch(patch); 110c5f01b2fSopenharmony_ci CHECK(original == result); 111c5f01b2fSopenharmony_ci } 112c5f01b2fSopenharmony_ci 113c5f01b2fSopenharmony_ci SECTION("Example 3") 114c5f01b2fSopenharmony_ci { 115c5f01b2fSopenharmony_ci json original = R"({"a":"b"})"_json; 116c5f01b2fSopenharmony_ci json patch = R"({"a":null})"_json; 117c5f01b2fSopenharmony_ci json result = R"({})"_json; 118c5f01b2fSopenharmony_ci 119c5f01b2fSopenharmony_ci original.merge_patch(patch); 120c5f01b2fSopenharmony_ci CHECK(original == result); 121c5f01b2fSopenharmony_ci } 122c5f01b2fSopenharmony_ci 123c5f01b2fSopenharmony_ci SECTION("Example 4") 124c5f01b2fSopenharmony_ci { 125c5f01b2fSopenharmony_ci json original = R"({"a":"b","b":"c"})"_json; 126c5f01b2fSopenharmony_ci json patch = R"({"a":null})"_json; 127c5f01b2fSopenharmony_ci json result = R"({"b":"c"})"_json; 128c5f01b2fSopenharmony_ci 129c5f01b2fSopenharmony_ci original.merge_patch(patch); 130c5f01b2fSopenharmony_ci CHECK(original == result); 131c5f01b2fSopenharmony_ci } 132c5f01b2fSopenharmony_ci 133c5f01b2fSopenharmony_ci SECTION("Example 5") 134c5f01b2fSopenharmony_ci { 135c5f01b2fSopenharmony_ci json original = R"({"a":["b"]})"_json; 136c5f01b2fSopenharmony_ci json patch = R"({"a":"c"})"_json; 137c5f01b2fSopenharmony_ci json result = R"({"a":"c"})"_json; 138c5f01b2fSopenharmony_ci 139c5f01b2fSopenharmony_ci original.merge_patch(patch); 140c5f01b2fSopenharmony_ci CHECK(original == result); 141c5f01b2fSopenharmony_ci } 142c5f01b2fSopenharmony_ci 143c5f01b2fSopenharmony_ci SECTION("Example 6") 144c5f01b2fSopenharmony_ci { 145c5f01b2fSopenharmony_ci json original = R"({"a":"c"})"_json; 146c5f01b2fSopenharmony_ci json patch = R"({"a":["b"]})"_json; 147c5f01b2fSopenharmony_ci json result = R"({"a":["b"]})"_json; 148c5f01b2fSopenharmony_ci 149c5f01b2fSopenharmony_ci original.merge_patch(patch); 150c5f01b2fSopenharmony_ci CHECK(original == result); 151c5f01b2fSopenharmony_ci } 152c5f01b2fSopenharmony_ci 153c5f01b2fSopenharmony_ci SECTION("Example 7") 154c5f01b2fSopenharmony_ci { 155c5f01b2fSopenharmony_ci json original = R"({"a":{"b": "c"}})"_json; 156c5f01b2fSopenharmony_ci json patch = R"({"a":{"b":"d","c":null}})"_json; 157c5f01b2fSopenharmony_ci json result = R"({"a": {"b": "d"}})"_json; 158c5f01b2fSopenharmony_ci 159c5f01b2fSopenharmony_ci original.merge_patch(patch); 160c5f01b2fSopenharmony_ci CHECK(original == result); 161c5f01b2fSopenharmony_ci } 162c5f01b2fSopenharmony_ci 163c5f01b2fSopenharmony_ci SECTION("Example 8") 164c5f01b2fSopenharmony_ci { 165c5f01b2fSopenharmony_ci json original = R"({"a":[{"b":"c"}]})"_json; 166c5f01b2fSopenharmony_ci json patch = R"({"a":[1]})"_json; 167c5f01b2fSopenharmony_ci json result = R"({"a":[1]})"_json; 168c5f01b2fSopenharmony_ci 169c5f01b2fSopenharmony_ci original.merge_patch(patch); 170c5f01b2fSopenharmony_ci CHECK(original == result); 171c5f01b2fSopenharmony_ci } 172c5f01b2fSopenharmony_ci 173c5f01b2fSopenharmony_ci SECTION("Example 9") 174c5f01b2fSopenharmony_ci { 175c5f01b2fSopenharmony_ci json original = R"(["a","b"])"_json; 176c5f01b2fSopenharmony_ci json patch = R"(["c","d"])"_json; 177c5f01b2fSopenharmony_ci json result = R"(["c","d"])"_json; 178c5f01b2fSopenharmony_ci 179c5f01b2fSopenharmony_ci original.merge_patch(patch); 180c5f01b2fSopenharmony_ci CHECK(original == result); 181c5f01b2fSopenharmony_ci } 182c5f01b2fSopenharmony_ci 183c5f01b2fSopenharmony_ci SECTION("Example 10") 184c5f01b2fSopenharmony_ci { 185c5f01b2fSopenharmony_ci json original = R"({"a":"b"})"_json; 186c5f01b2fSopenharmony_ci json patch = R"(["c"])"_json; 187c5f01b2fSopenharmony_ci json result = R"(["c"])"_json; 188c5f01b2fSopenharmony_ci 189c5f01b2fSopenharmony_ci original.merge_patch(patch); 190c5f01b2fSopenharmony_ci CHECK(original == result); 191c5f01b2fSopenharmony_ci } 192c5f01b2fSopenharmony_ci 193c5f01b2fSopenharmony_ci SECTION("Example 11") 194c5f01b2fSopenharmony_ci { 195c5f01b2fSopenharmony_ci json original = R"({"a":"foo"})"_json; 196c5f01b2fSopenharmony_ci json patch = R"(null)"_json; 197c5f01b2fSopenharmony_ci json result = R"(null)"_json; 198c5f01b2fSopenharmony_ci 199c5f01b2fSopenharmony_ci original.merge_patch(patch); 200c5f01b2fSopenharmony_ci CHECK(original == result); 201c5f01b2fSopenharmony_ci } 202c5f01b2fSopenharmony_ci 203c5f01b2fSopenharmony_ci SECTION("Example 12") 204c5f01b2fSopenharmony_ci { 205c5f01b2fSopenharmony_ci json original = R"({"a":"foo"})"_json; 206c5f01b2fSopenharmony_ci json patch = R"("bar")"_json; 207c5f01b2fSopenharmony_ci json result = R"("bar")"_json; 208c5f01b2fSopenharmony_ci 209c5f01b2fSopenharmony_ci original.merge_patch(patch); 210c5f01b2fSopenharmony_ci CHECK(original == result); 211c5f01b2fSopenharmony_ci } 212c5f01b2fSopenharmony_ci 213c5f01b2fSopenharmony_ci SECTION("Example 13") 214c5f01b2fSopenharmony_ci { 215c5f01b2fSopenharmony_ci json original = R"({"e":null})"_json; 216c5f01b2fSopenharmony_ci json patch = R"({"a":1})"_json; 217c5f01b2fSopenharmony_ci json result = R"({"e":null,"a":1})"_json; 218c5f01b2fSopenharmony_ci 219c5f01b2fSopenharmony_ci original.merge_patch(patch); 220c5f01b2fSopenharmony_ci CHECK(original == result); 221c5f01b2fSopenharmony_ci } 222c5f01b2fSopenharmony_ci 223c5f01b2fSopenharmony_ci SECTION("Example 14") 224c5f01b2fSopenharmony_ci { 225c5f01b2fSopenharmony_ci json original = R"([1,2])"_json; 226c5f01b2fSopenharmony_ci json patch = R"({"a":"b","c":null})"_json; 227c5f01b2fSopenharmony_ci json result = R"({"a":"b"})"_json; 228c5f01b2fSopenharmony_ci 229c5f01b2fSopenharmony_ci original.merge_patch(patch); 230c5f01b2fSopenharmony_ci CHECK(original == result); 231c5f01b2fSopenharmony_ci } 232c5f01b2fSopenharmony_ci 233c5f01b2fSopenharmony_ci SECTION("Example 15") 234c5f01b2fSopenharmony_ci { 235c5f01b2fSopenharmony_ci json original = R"({})"_json; 236c5f01b2fSopenharmony_ci json patch = R"({"a":{"bb":{"ccc":null}}})"_json; 237c5f01b2fSopenharmony_ci json result = R"({"a":{"bb":{}}})"_json; 238c5f01b2fSopenharmony_ci 239c5f01b2fSopenharmony_ci original.merge_patch(patch); 240c5f01b2fSopenharmony_ci CHECK(original == result); 241c5f01b2fSopenharmony_ci } 242c5f01b2fSopenharmony_ci } 243c5f01b2fSopenharmony_ci } 244c5f01b2fSopenharmony_ci} 245